计算文字与字节的 SHA-256 小写十六进制摘要,并提供尽力恒时的文字比较。
源码浏览已生成;不能解析的文件以纯文本展示,不表示通过类型检查。
# 密码摘要接口规范 0.2.0 本包提供 SHA-256 摘要与尽力恒时的文字比较。它只做摘要与比较,不宣称密码存储或消息认证的安全语义;盐、口令派生和凭据寿命仍由使用者另行处理(口令派生见[口令派生](../口令派生/规范.汉语.md))。 ## 摘要 `摘要SHA256十六进制` 对输入字符串的原始 UTF-8 字节计算 SHA-256,返回恰好 64 个 ASCII 小写十六进制字符,不加前缀、盐或换行。`摘要SHA256字节十六进制` 对任意字节串(可含零字节,不按文字解释)做同样的计算,返回同样形态的 64 个字符;对同一段字节,两个函数的结果必然相同。相同输入在浏览器、CF Worker、Node.js 和原生适配中必须得到相同结果。空输入有效。输入不得超过 16 MiB(宿主值桥的交换上限),超过或宿主密码原语失败时调用失败,抛出豫言异常。 ## 恒时相等文字 `恒时相等文字` 比较两个字符串的 UTF-8 字节,相同返回阳,不同返回阴。长度(按字节)不同时直接返回阴——**允许泄露长度**;长度相同时遍历全部字节累计差异,循环次数只取决于长度,不因第一个差异提前退出,也没有依赖字节值的分支(差异以平方累加,全部为零才算相等)。它用于比较令牌、摘要等秘密值,避免用逐字符比较造成的提前退出时序差异。 这是**尽力恒时**的豫言实现:它不使用任何宿主的专有函数(如 Workers 的 `timingSafeEqual`),编译器与宿主不保证严格的恒时。需要严格恒时保证的场合应在宿主层做同类比较。 ## 一致性样例 - `摘要SHA256十六进制 "abc"` 与 `摘要SHA256字节十六进制 "abc" 的 UTF-8 字节` 都是 `ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad`;空输入得 `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855`。 - `摘要SHA256字节十六进制` 对 `00 ff 01 fe 00 00 80 7f 00` 与对 0 到 255 的全部字节值,分别与标准实现一致。 - `恒时相等文字 "" ""` 为阳;`"abc" "abc"` 为阳;`"abc" "abd"`、`"abc" "Abc"`、`"abc" "abcd"`、`"" "a"` 为阴;汉字文相同为阳、差一字为阴;字节数相同而内容不同(如 `甲` 与 `abc`)为阴。 ## 边界 本包不提供 HMAC、其他散列算法、盐或口令存储;不保证 `恒时相等文字` 抵御微架构层面的侧信道。
# 密码摘要公约 0.2.0 此包供 SHA-256 之摘要与尽力恒时之比文。惟司摘要与比较,不自许口令贮藏或消息认证之安;盐、口令派生与凭据之期,仍由客另定(口令派生见[口令派生](../口令派生/规范.文言.md))。 ## 摘要 `摘要SHA256十六进制` 以所入字符串之 UTF-8 原字节求 SHA-256,返恰六十四位 ASCII 小写十六进制字符,无首饰、盐与终行。`摘要SHA256字节十六进制` 于任意字节串(可含零字节,不作文字解)为同一之算,返同形之六十四字符;同一段字节,二术之果必同。浏览器、CF Worker、节点及原生诸适配,同入须同果。入空亦可。入不得逾十六 MiB(宿主值桥之限),逾者或宿主密码原语败,则调用败,抛豫言之异。 ## 恒时相等文字 `恒时相等文字` 较二字符串之 UTF-8 字节,同则阳,异则阴。长(以字节计)异,径返阴——**许泄其长**;长同则遍历诸字节而积其差,循环之数惟系于长,不因首异而止,亦无系于字节值之分支(差以平方相积,尽为零乃相等)。用以比令牌、摘要诸秘值,免逐字符比较因早退而生之时序差。 此乃**尽力恒时**之豫言实现:不用宿主专有之函(如 Workers 之 `timingSafeEqual`),编译器与宿主不保严格恒时。欲得严格恒时之保者,当于宿主层为同类之比。 ## 同一之例 - `摘要SHA256十六进制 "abc"` 与 `摘要SHA256字节十六进制`("abc" 之 UTF-8 字节)皆为 `ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad`;入空得 `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855`。 - `摘要SHA256字节十六进制` 于 `00 ff 01 fe 00 00 80 7f 00` 及零至二百五十五之全部字节值,各与标准实现同。 - `恒时相等文字 "" ""` 为阳;`"abc" "abc"` 为阳;`"abc" "abd"`、`"abc" "Abc"`、`"abc" "abcd"`、`"" "a"` 为阴;汉字文同为阳、差一字为阴;字节数同而内容异(如 `甲` 与 `abc`)为阴。 ## 界 此包不供 HMAC、他散列之法、盐或口令之贮;不保 `恒时相等文字` 能御微架构层面之侧信道。