ホームページ  >  記事  >  バックエンド開発  >  私の 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 形式に変換することはできませんが、BEP で使用されるハッシュされた秘密キーを処理するために Go ライブラリの修正バージョンを作成できます。

コードの変更:

変更されたコードには次の関数が含まれています。

  1. getPublicKey: 64 バイトのハッシュされた秘密鍵から公開鍵を生成します。
  2. sign:ハッシュ化された秘密キー、公開キー、メッセージを使用した署名。
<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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。