使用Golang包golang.org/x/crypto/ed25519,尝试检索与给定私钥相对应的公钥会产生与预期不同的结果。具体来说,该库返回私有验证密钥 (PVK) 的最后 32 个字节,而提供的测试数据表明这是不正确的。
差异是由于使用的格式不同而产生的ed25519 私钥。 Golang 实现遵循 RFC 8032 约定,该约定将私钥定义为 32 字节种子与 32 字节公钥的串联。
但是,BitTorrent BEP-0044 测试中提供的私钥data 是种子 SHA512 哈希的 64 字节结果,由于哈希函数的单向性质,这些格式无法直接转换。
使用具有给定测试数据的 Golang 库,需要该库的修改版本,以允许根据散列私钥格式自定义生成公钥和签名。这可以通过从库中复制相关代码并修改实现以适应不同的格式来实现。
修改后的代码包括:
使用这些修改后的函数,可以复制预期的测试向量,其中包括公钥和签名。
以上是为什么 golang.org/x/crypto/ed25519 返回 BitTorrent BEP-0044 测试数据的意外公钥?的详细内容。更多信息请关注PHP中文网其他相关文章!