丝丽

ssri,标准次资源
完整性,是用于解析,操纵,串行化的节点Js工具,
生成并验证 次级资源
诚信 胡说八道.
安装
$ npm install --save ssri
目录
示例
const ssri = require('ssri')
const integrity = 'sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo'
// Parsing and serializing
const parsed = ssri.parse(integrity)
ssri.stringify(parsed) // === integrity (works on non-Integrity objects)
parsed.toString() // === integrity
// Async stream functions
ssri.checkStream(fs.createReadStream('./my-file'), integrity).then(...)
ssri.fromStream(fs.createReadStream('./my-file')).then(sri => {
sri.toString() === integrity
})
fs.createReadStream('./my-file').pipe(ssri.createCheckerStream(sri))
// Sync data functions
ssri.fromData(fs.readFileSync('./my-file')) // === parsed
ssri.checkData(fs.readFileSync('./my-file'), integrity) // => 'sha512'
特征
- 解析和字符串 SRI 字符串 .
- 从原始数据或流中生成SRI字符串.
- 严格标准合规.
?foo元数据选项支持.- 同一算法的多个条目.
- 基于对象的完整散列操纵.
- 足迹小:没有依附关系,执行简洁.
- 全面测试覆盖.
- 定制算法取取取器.
捐款
斯里团队热情欢迎捐款和项目参与!! 如果你想出力,你们可以做很多事! 这个 贡献者 指南 拥有所有你需要的信息 从所有从 报告错误以贡献整个新特性。 请不要犹豫 如果你愿意,跳进去,甚至问我们问题 如果事情不明.
API 密码
> ssri.parse(sri, [opts]) -> Integrity
参数 sri 变成 Integrity 数据结构. sri 也可以是一个正直
字符串, 一个 Hash- 喜欢 digest 财务报告和审定财务报表 algorithm 字段和一个可选
options 字段,或一个 Integrity- 喜欢的东西。 由此产生的对象将是
Integrity 具有此形状的示例:
{
'sha1': [{algorithm: 'sha1', digest: 'deadbeef', options: []}],
'sha512': [
{algorithm: 'sha512', digest: 'c0ffee', options: []},
{algorithm: 'sha512', digest: 'bad1dea', options: ['foo']}
],
}
若为 opts.single 是事实,一个 Hash 对象将返回。 这是,一个
看起来像单对象 {algorithm, digest, options},相对于
具有多个这样的较大对象.
若为 opts.strict 是真实的,产生的对象将被过滤到这样
它严格遵循子资源完整性规格,丢弃任何条目
带有任何无效组件。 这也意味着一套有限的算法
将被使用 -- 光谱限制它们到 sha256, (中文(简体) ), sha384,以及 sha512。 。 。 .
如果完整性字符串用于 浏览器,或者在需要严格遵守光谱的其他情况下.
示例
ssri.parse('sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo') // -> Integrity object
> ssri.stringify(sri, [opts]) -> String
此函数与 Integrity#toString(), (中文(简体) ),
除非它可以用来 任意 对象 parse 能处理 - that
一个字符串,一个 Hash- 喜欢,或者一个 Integrity- 喜欢.
这个 opts.sep 选项定义在加入多个条目时使用的字符串
一起来 要符合规格,这个 必须 白相间 默认是
单间空间( e)' ') (中文(简体) ).
若为 opts.strict ,完整性字符串将使用严格的
解析规则。 见 ssri.parse。 。 。 .
示例
// Useful for cleaning up input SRI strings:
ssri.stringify('\n\rsha512-foo\n\t\tsha384-bar')
// -> 'sha512-foo sha384-bar'
// Hash-like: only a single entry.
ssri.stringify({
algorithm: 'sha512',
digest:'9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==',
options: ['foo']
})
// ->
// 'sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo'
// Integrity-like: full multi-entry syntax. Similar to output of `ssri.parse`
ssri.stringify({
'sha512': [
{
algorithm: 'sha512',
digest:'9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==',
options: ['foo']
}
]
})
// ->
// 'sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo'
> Integrity#concat(otherIntegrity, [opts]) -> Integrity
缩写 a Integrity 与另一个完整性类似或完整性的对象
绳子.
这在功能上相当于调和两者的字符串格式
廉洁的论据,以及调用 ssri.parse 在新字符串上.
若为 opts.strict 是真的,新来的 Integrity 将使用严格的
解析规则。 见 ssri.parse。 。 。 .
示例
// This will combine the integrity checks for two different versions of
// your index.js file so you can use a single integrity string and serve
// either of these to clients, from a single `<script>` tag.
const desktopIntegrity = ssri.fromData(fs.readFileSync('./index.desktop.js'))
const mobileIntegrity = ssri.fromData(fs.readFileSync('./index.mobile.js'))
// Note that browsers (and ssri) will succeed as long as ONE of the entries
// for the *prioritized* algorithm succeeds. That is, in order for this fallback
// to work, both desktop and mobile *must* use the same `algorithm` values.
desktopIntegrity.concat(mobileIntegrity)
> Integrity#merge(otherIntegrity, [opts])
安全合并另一个完整性 类似或完整性字符串 Integrity
对象.
如果其他完整性值有与当前相通的任何算法 对象,然后散列文摘必须匹配,否则就会出错.
任何新的散列都会被添加到当前对象的设定中.
当一个完整性值可能升级为更强时,这样做是有用的 算法,您希望防止不慎抑制完整性错误 覆盖预期的完整性值 .
示例
const data = fs.readFileSync('data.txt')
// integrity.txt contains 'sha1-X1UT+IIv2+UUWvM7ZNjZcNz5XG4='
// because we were young, and didn't realize sha1 would not last
const expectedIntegrity = ssri.parse(fs.readFileSync('integrity.txt', 'utf8'))
const match = ssri.checkData(data, expectedIntegrity, {
algorithms: ['sha512', 'sha1']
})
if (!match) {
throw new Error('data corrupted or something!')
}
// get a stronger algo!
if (match && match.algorithm !== 'sha512') {
const updatedIntegrity = ssri.fromData(data, { algorithms: ['sha512'] })
expectedIntegrity.merge(updatedIntegrity)
fs.writeFileSync('integrity.txt', expectedIntegrity.toString())
// file now contains
// 'sha1-X1UT+IIv2+UUWvM7ZNjZcNz5XG4= sha512-yzd8ELD1piyANiWnmdnpCL5F52f10UfUdEkHywVZeqTt0ymgrxR63Qz0GB7TKPoeeZQmWCaz7T1+9vBnypkYWg=='
}
> Integrity#toString([opts]) -> String
返回一个字符串表示式 Integrity 对象。 所有散列条目
将在字符串中由 opts.sep,默认为 ' '。 。 。 .
如果你想把一个不是来自 ssri 函数,
使用情况 ssri.stringify()。 。 。 .
若为 opts.strict ,完整性字符串将使用严格的
解析规则。 见 ssri.parse。 。 。 .
示例
const integrity = 'sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo'
ssri.parse(integrity).toString() === integrity
> Integrity#toJSON() -> String
返回一个字符串表示式 Integrity 对象。 所有散列条目
将在字符串中由 ' '。 。 。 .
这是一个方便的方法,你可以通过一个 Integrity 对象直接对 JSON.stringify。 。 。 .
需要更多的信息检查出来 至 JSON () mdn 上的行为。 。 。 .
示例
const integrity = '"sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A==?foo"'
JSON.stringify(ssri.parse(integrity)) === integrity
> Integrity#match(sri, [opts]) -> Hash | false
如果 Integrity 匹配通过的参数为
sri,它可以是任何东西 parse 将接受. opts 将会是
传递到 parse 财务报告和审定财务报表 pickAlgorithm()。 。 。 .
示例
const integrity = 'sha512-9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A=='
ssri.parse(integrity).match(integrity)
// Hash {
// digest: '9KhgCRIx/AmzC8xqYJTZRrnO8OW2Pxyl2DIMZSBOr0oDvtEFyht3xpp71j/r/pAe1DM+JI/A+line3jUBgzQ7A=='
// algorithm: 'sha512'
// }
ssri.parse(integrity).match('sha1-deadbeef')
// false
> Integrity#pickAlgorithm([opts]) -> String
从完整性对象中可用的算法返回“最佳”算法.
若为 opts.pickAlgorithm 将会通过两个算法作为
参数。 ssri 将优先排序两个算法中的任意一个
ưμ㼯A 注意该函数可能被称为多次,并且
必须 返回所提供的两个算法中的一个。 默认,Ssri会做
用于选择给定算法中最强/最可靠的算法。 这个
可能有意将已知有弱点的算法降低优先顺序.
示例
ssri.parse('sha1-WEakDigEST sha512-yzd8ELD1piyANiWnmdnpCL5F52f10UfUdEkHywVZeqTt0ymgrxR63Qz0GB7TKPoeeZQmWCaz7T1').pickAlgorithm() // sha512
> Integrity#hexDigest() -> String
Integrity 假设是单发 Integrity 例如,或
Hash 举个例子 归还其 digest,转换为十六进制
基础64数据.
示例
ssri.parse('sha1-deadbeef').hexDigest() // '75e69d6de79f'
> ssri.fromHex(hexDigest, algorithm, [opts]) -> Integrity
创建一个 Integrity 单项对象,基于六进制格式
散货 这是帮助将已有的shasums转换为
诚信格式,大致相当于诸如:
algorithm + '-' + Buffer.from(hexDigest, 'hex').toString('base64')
opts.options 可选择通过:必须是一系列选项
将添加到所有生成的完整散列的字符串
fromData。这是SRI的宽松特征,目前没有
指定语义除是 ?- 分开了 冒险使用,和
如果您的完整性字符串是用于浏览器的话, 可能会避免 .
若为 opts.strict ,完整性对象将使用严格的
解析规则。 见 ssri.parse。 。 。 .
若为 opts.single 是真的,一个 Hash 对象将返回.
示例
ssri.fromHex('75e69d6de79f', 'sha1').toString() // 'sha1-deadbeef'
> ssri.fromData(data, [opts]) -> Integrity
创建一个 Integrity 从字符串或 Buffer 数据,计算
所有请求的散列,并在对象中添加任何指定的选项.
opts.algorithms 决定要生成散列的算法 。 全体
结果将列入一个单一的 Integrity 对象。 默认值
opts.algorithms 实值 ['sha512']。所有算法字符串必须列出散列
内 crypto.getHashes() 为主机Node.js平台.
opts.options 可选择通过:必须是一系列选项
将添加到所有生成的完整散列的字符串
fromData。这是SRI的宽松特征,目前没有
指定语义除是 ?- 分开了 冒险使用,和
如果您的完整性字符串是用于浏览器的话, 可能会避免 .
若为 opts.strict ,完整性对象将使用严格的
解析规则。 见 ssri.parse。 。 。 .
示例
const integrityObj = ssri.fromData('foobarbaz', {
algorithms: ['sha256', 'sha384', 'sha512']
})
integrity.toString('\n')
// ->
// sha256-l981iLWj8kurw4UbNy8Lpxqdzd7UOxS50Glhv8FwfZ0=
// sha384-irnCxQ0CfQhYGlVAUdwTPC9bF3+YWLxlaDGM4xbYminxpbXEq+D+2GCEBTxcjES9
// sha512-yzd8ELD1piyANiWnmdnpCL5F52f10UfUdEkHywVZeqTt0ymgrxR63Qz0GB7TKPoeeZQmWCaz7T1+9vBnypkYWg==
> ssri.fromStream(stream, [opts]) -> Promise<Integrity>
返回通过读取数据计算出的完整性对象的许诺
给定 stream。 。 。 .
它接受两者 opts.algorithms 财务报告和审定财务报表 opts.options,现作为文件编号
部分内容 ssri.fromData。 。 。 .
此外, opts.Promise 可以输入输入“承诺”库
选择。 默认情况下,sri会使用Node的内置承诺.
若为 opts.strict ,完整性对象将使用严格的
解析规则。 见 ssri.parse。 。 。 .
示例
ssri.fromStream(fs.createReadStream('index.js'), {
algorithms: ['sha1', 'sha512']
}).then(integrity => {
return ssri.checkStream(fs.createReadStream('index.js'), integrity)
}) // succeeds
> ssri.create([opts]) -> <Hash>
返回 Hash 对象 update(<Buffer or string>[,enc]) 财务报告和审定财务报表 digest() 方法。 。 .
Hash 对象提供了与 密码类 Hash。 。 。 .
digest() 接受任何参数并返回通过读取数据计算出来的完整性对象
请求更新.
它接受两者 opts.algorithms 财务报告和审定财务报表 opts.options,现作为文件编号
部分内容 ssri.fromData。 。 。 .
若为 opts.strict ,完整性对象将使用严格的
解析规则。 见 ssri.parse。 。 。 .
示例
const integrity = ssri.create().update('foobarbaz').digest()
integrity.toString()
// ->
// sha512-yzd8ELD1piyANiWnmdnpCL5F52f10UfUdEkHywVZeqTt0ymgrxR63Qz0GB7TKPoeeZQmWCaz7T1+9vBnypkYWg==
> ssri.checkData(data, sri, [opts]) -> Hash|false
验证 data 廉洁行为 sri 参数. data 可以是
String 或一个 Buffer,以及 sri 可以是任何子资源完整性
代表 ssri.parse 可以处理.
如果核查成功, checkData 将返回算法的名称
用于核查(真实值)。 否则它会回来的 false。 。 。 .
若为 opts.pickAlgorithm 提供时,它将被使用
Integrity#pickAlgorithm 当决定哪一个
可用的文摘可以匹配.
若为 opts.error 是真的 核查失败了, checkData 将投出
a 一个 EBADSIZE 或一个 EINTEGRITY 错误, 而不是只返回虚假 .
示例
const data = fs.readFileSync('index.js')
ssri.checkData(data, ssri.fromData(data)) // -> 'sha512'
ssri.checkData(data, 'sha256-l981iLWj8kurw4UbNy8Lpxqdzd7UOxS50Glhv8FwfZ0')
ssri.checkData(data, 'sha1-BaDDigEST') // -> false
ssri.checkData(data, 'sha1-BaDDigEST', {error: true}) // -> Error! EINTEGRITY
> ssri.checkStream(stream, sri, [opts]) -> Promise<Hash>
核实 stream 反对: sri 参数. stream 将会是
整个过程消耗殆尽. sri 可以是任何子资源完整性
代表 ssri.parse 可以处理.
checkStream {\fn华文楷体\fs16\1cHE0E0E0}将回到一个承诺... {\fn华文楷体\fs16\1cHE0E0E0}其中之一
Hash 如果核查失败
或发生错误 stream承诺会被拒绝的.
如果由于校验失败而拒绝承诺, 返回的错误会
有过 err.code 作为 EINTEGRITY。 。 。 .
若为 opts.size 将被给出,它将与流大小相匹配。 错误
与 err.code EBADSIZE 如果预期的大小被否决,则将被还原
实际大小无法匹配.
若为 opts.pickAlgorithm 提供时,它将被使用
Integrity#pickAlgorithm 当决定哪一个
可用的文摘可以匹配.
示例
const integrity = ssri.fromData(fs.readFileSync('index.js'))
ssri.checkStream(
fs.createReadStream('index.js'),
integrity
)
// ->
// Promise<{
// algorithm: 'sha512',
// digest: 'sha512-yzd8ELD1piyANiWnmdnpCL5F52f10UfUdEkHywVZeqTt0ymgrxR63Qz0GB7TKPoeeZQmWCaz7T1'
// }>
ssri.checkStream(
fs.createReadStream('index.js'),
'sha256-l981iLWj8kurw4UbNy8Lpxqdzd7UOxS50Glhv8FwfZ0'
) // -> Promise<Hash>
ssri.checkStream(
fs.createReadStream('index.js'),
'sha1-BaDDigEST'
) // -> Promise<Error<{code: 'EINTEGRITY'}>>
> integrityStream([opts]) -> IntegrityStream
回返a Transform 用于生成的数据流
并选择检查管道数据的数据完整性。 当溪流完成时
成功发射 size 财务报告和审定财务报表 integrity 活动总数
处理和计算过的字节数 Integrity 基于流的示例
数据.
若为 opts.algorithms 中,当
生成最终 Integrity 举个例子 默认是 ['sha512']。 。 。 .
若为 opts.single 被传入,一个 Hash 将返回实例.
若为 opts.integrity 它应该是一个 integrity 理解值
以 parse 以数据为对照。 若为
验证成功,完整性流将发出 verified 活动
值是一个单一的 Hash 对象是成功验证的对象。 若为
校验失败, 流将用一个 EINTEGRITY 错误代码 .
若为 opts.size 将被给出,它将与流大小相匹配。 错误
与 err.code EBADSIZE 如果预期大小
实际大小无法匹配.
若为 opts.pickAlgorithm 将会通过两个算法作为
参数。 ssri 将优先排序两个算法中的任意一个
ưμ㼯A 注意该函数可能被称为多次,并且
必须 返回所提供的两个算法中的一个。 默认,Ssri会做
用于选择给定算法中最强/最可靠的算法。 这个
可能有意将已知有弱点的算法降低优先顺序.
示例
const integrity = ssri.fromData(fs.readFileSync('index.js'))
fs.createReadStream('index.js')
.pipe(ssri.integrityStream({integrity}))