扩展库 / siphash128

siphash128

带密钥哈希

域分离的 SipHash-2-4-128。64 位 SipHash-2-4 已在默认标准库的 siphash 命名空间提供,本扩展不重复打包。

API

入口语义
hash(string|bytes data, bytes key, int size=-1)一次性 128 位摘要,返回 16 字节 Buffer。
hashBuffer(Buffer data, bytes key, int size=-1)借用 Buffer 内容计算,返回 16 字节 Buffer。
hasher(bytes key)创建独立的 SipHasher128 流式对象。

密钥必须恰好 16 字节,不提供默认值、填零、截断或伪随机回退。size=-1 处理完整实际字节长度;非负值截断到输入长度;更小的负值报 RangeError。内嵌 NUL 完整计入。摘要按小端字节序输出。

流式处理

import siphash128
bytes key = b"0123456789abcdef" // 固定密钥仅用于演示
auto h = siphash128.hasher(key)
h.update(b"A\x00")
h.update("B")
Buffer result = h.digest()
assert result.compare(siphash128.hash(b"A\x00B", key)) == 0

SipHasher128 支持 update(string|bytes, size=-1)、updateBuffer(Buffer, size=-1)、digest()、reset()、clone() 和 inputBytes()。摘要是非终结快照,clone 不共享可变状态;同一对象的并发使用应由调用方串行化。

边界与验证

SipHash 用于带密钥短消息散列和哈希表抗碰撞;不是密码哈希、加密或完整的消息认证协议。128 位变体有独立域分离,不能拼接两个 64 位结果。生产密钥必须保密;销毁对象擦除其拥有的密钥和状态,但不承诺清除调用方密钥或所有临时副本。

实现只编译 128 位核心与薄适配层。测试覆盖上游 64 个 128 位已知答案、短输入所有二分切点、参考实现差分、精确字节长度、错误边界和严格 C 语法。当前发布版在 Windows 的 xlang check/JIT 通过;AOT 构建缺少主线符号 xl6NativeHandleTraceLeaf,尚未通过发布验收。这也不等于独立密码学审计或未运行平台的认证。