Получить адрес ethereum из открытого ключа secpk256, не сгенерированного с помощью криптографического пакета geth - PullRequest
0 голосов
/ 24 октября 2018

У меня есть открытый ключ, который генерируется с использованием кривой secpk256, я пытаюсь определить адрес ethereum этого открытого ключа.По сути, я получаю ключ в виде простой строки, а затем пытаюсь использовать криптографические функции geths, чтобы получить публичный адрес этого открытого ключа.

Вот пример строки с открытым шестнадцатеричным кодом: 02ccb8bc17397c55242a27d1681bf48b5b40a734205760882cd83f92aca4f1cf45 вот пример моего кода:

package main

import (
    "github.com/ethereum/go-ethereum/crypto"
)


publickey := "02ccb8bc17397c55242a27d1681bf48b5b40a734205760882cd83f92aca4f1cf45"
ecdsaPub, err := crypto.UnmarshalPubkey(publickey)
if err != nil {
    return "", err
}
ethAddress := crypto.PubkeyToAddress(*ecdsaPub).String()

1 Ответ

0 голосов
/ 24 октября 2018

Вы должны DecompressPubkey

package main

import (
    "crypto/elliptic"
    "encoding/hex"
    "fmt"
    "github.com/ethereum/go-ethereum/crypto"
    "github.com/ethereum/go-ethereum/crypto/secp256k1"
)


func main() {

    pubBytes, err := hex.DecodeString("03bbba49a934014049d99a7f5c809fd0da59b1cb47dcbd0b3fe097adc5eaa5ec42")
    if err != nil {
        fmt.Println(err, "--1")
    }
    if pubkey1, err := crypto.DecompressPubkey(pubBytes); err != nil {
        fmt.Println(err)
        return
    } else {
        pubkey := elliptic.Marshal(secp256k1.S256(), pubkey1.X, pubkey1.Y)
        fmt.Println(hex.EncodeToString(pubkey))
        //output :04bbba49a934014049d99a7f5c809fd0da59b1cb47dcbd0b3fe097adc5eaa5ec424b3e22bae2d8f20d4bf8c0c85ec1efbce4b91196962199cd743dd6f72433559f
    }

}
...