Я использовал следующий код для создания пары ключей ecdsa (privKey
и pubKey
), закодировал их и затем декодировал обратно: https://stackoverflow.com/a/41315404/1901320.
Затем я создаю хеш для сообщения (txnData.Payload()
имеет тип []byte
), используя crypto.Keccak256()
, и подписываю его, используя crypto.Sign()
из криптопакета Ethereum (github.com/ethereum/go-ethereum/crypto
). Это создает 65-битную подпись ECDSA в R || S || Формат V.
hashData := crypto.Keccak256(txnData.Payload)
sig, _ := crypto.Sign(hashData, privKey)
pkey, _ := crypto.Ecrecover(hashData, sig) // This and pubKey do not match
Когда я пытаюсь вернуть открытый ключ из hashData
и подписи ECDSA с помощью crypto.Ecrecover()
и сравнивать его с открытым ключом pubKey
, соответствующим privKey
, который использовался для создания подписи, я обнаружил, что открытые ключи не совпадают. Это не похоже на то, что должно произойти. Есть идеи, где я ошибаюсь?