首页  >  文章  >  后端开发  >  为什么我的 Go ed25519 公钥与预期的 BEP 数据不同?

为什么我的 Go ed25519 公钥与预期的 BEP 数据不同?

Patricia Arquette
Patricia Arquette原创
2024-10-31 07:23:29965浏览

Why Does My Go ed25519 Public Key Differ From the Expected BEP Data?

为 ed25519 密钥生成公钥匹配 BEP

问题:
使用 Go crypto/ed25519 包,生成的公钥与测试用例中提供的预期公钥不同使用 BEP 数据。

原因:
ed25519 存在不同的私钥格式。 BEP 数据使用 64 字节哈希私钥,而 Go 包使用 32 字节哈希私钥(以 32 字节种子为前缀)。

解决方案:
虽然不可能将 BEP 私钥转换为 Go 格式,但可以创建 Go 库的修改版本来处理在BEP.

代码修改:

修改后的代码包括以下函数:

  1. getPublicKey:从 64 位生成公钥字节哈希私钥。
  2. sign:使用哈希私钥​​ public 计算签名
<code class="go">func getPublicKey(privateKey []byte) []byte {
    // ... (extraction of 32-byte hash from 64-byte hashed private key and publicKey generation) ...
}

func sign(privateKey, publicKey, message []byte) []byte {
    // ... (extraction of 32-byte hash from 64-byte hashed private key and signature computation) ...
}</code>

用法:

使用此修改后的代码,可以运行测试用例,演示生成的公钥和签名与预期的 BEP 数据匹配:

<code class="go">// Using the modified code...

fmt.Printf("Calculated key: %x\n", publicKey)
fmt.Printf("Expected key:   %s\n", expectedPublicKey)
keyMatches := expectedPublicKey == hex.EncodeToString(publicKey)
fmt.Printf("Public key matches expected: %v\n", keyMatches)

// Similarly, check for signature match</code>

以上是为什么我的 Go ed25519 公钥与预期的 BEP 数据不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn