以云工密码原语计算 SHA-256 摘要,并以豫言实现尽力恒时的文字比较。
源码浏览已生成;不能解析的文件以纯文本展示,不表示通过类型检查。
# 密码摘要云工适配 把 UTF-8 字符串或字节串交给云工 SHA-256 原语(Web Crypto `digest`),逐字节转换为小写十六进制,转换共用 `云工宿主` `字节。豫` 的 `字节串转小写十六进制`;文字摘要就是字符串的原字节交给字节摘要,二者结果恒同。输入超过宿主值桥的 16 MiB 交换上限时先在豫言里抛出异常,避免宿主 JS 错误穿出 Wasm。应用只接收摘要文字,不接收宿主密码对象。 `恒时相等文字` 完全用豫言写成,不依赖宿主:长度相同的两个字符串逐字节取整数差、把差的平方累加,最后比较累计值是否为零;循环体没有依赖数据的分支,也不提前退出。Node 测试用 64 KiB 的两个字符串比较首字节相异与末字节相异的耗时,二者同量级(提前退出的实现会相差数百倍)。
# 密码摘要云工适配 以 UTF-8 字符串或字节串授云工 SHA-256 原语(Web Crypto `digest`),逐字节书为小写十六进制,其转换共用 `云工宿主` `字节。豫` 之 `字节串转小写十六进制`;文字之摘要即其原字节授字节之摘要,二者之果恒同。入逾宿主值桥十六 MiB 之限,则先于豫言抛异,免宿主 JS 之错穿出 Wasm。客惟受摘要文,不受宿主密码物。 `恒时相等文字` 全以豫言书成,不赖宿主:长同之二串,逐字节取整数之差,积其差之平方,终较所积是否为零;循环之体无系于数据之分支,亦不早退。Node 试验以六十四 KiB 之二串,较首字节相异与末字节相异之耗时,二者同量级(早退之实现相去数百倍)。