Generieren von Public Key Matching BEP für ed25519-Schlüssel
Problem:
Verwendung des Go crypto/ed25519-Pakets , der generierte öffentliche Schlüssel unterscheidet sich von dem erwarteten, der in einem Testfall unter Verwendung der BEP-Daten bereitgestellt wurde.
Ursache:
Für ed25519 gibt es unterschiedliche private Schlüsselformate. Die BEP-Daten verwenden einen 64-Byte-gehashten privaten Schlüssel, während das Go-Paket einen 32-Byte-gehashten privaten Schlüssel (mit dem 32-Byte-Seed vorangestellt) verwendet.
Lösung:
Obwohl es nicht möglich ist, die privaten BEP-Schlüssel in das Go-Format zu konvertieren, kann eine modifizierte Version der Go-Bibliothek erstellt werden, um die im BEP verwendeten gehashten privaten Schlüssel zu verarbeiten.
Codeänderung:
Der geänderte Code enthält die folgenden Funktionen:
<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>
Verwendung:
Mit diesem modifizierten Code kann der Testfall ausgeführt werden , was zeigt, dass der generierte öffentliche Schlüssel und die Signatur mit den erwarteten BEP-Daten übereinstimmen:
<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>
Das obige ist der detaillierte Inhalt vonWarum weicht mein öffentlicher Go ed25519-Schlüssel von den erwarteten BEP-Daten ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!