Я использовал следующий код для генерации пары ключей 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
, используемому для создания подписи, я нахожу, что открытые ключи не совпадают. Это не похоже на то, что должно произойти. Есть идеи, где я ошибаюсь?