ecdsa.PrivateKey
является структурой:
type PrivateKey struct {
PublicKey
D *big.Int
}
Итак, privkey.D.Bytes()
возвращает вам байты D
большого целого числа.
Аналогично, ecdsa.PublicKey
:
type PublicKey struct {
elliptic.Curve
X, Y *big.Int
}
Вы можете сделать то же самое с полями pubkey.X
и pubkey.Y
.Это даст вам 2 отдельных байта.Если вам нужно объединить их в один, вам нужно придумать какой-то «формат», например, кодировать длину первого среза (результат pubkey.X.Bytes()
), используя 4 байта, затем первый срез, затем длину(Еще 4 байта) второго среза и самого второго среза.
Лучше всего использовать для этого функцию elliptic.Marshal()
:
func Marshal(curve Curve, x, y *big.Int) []byte
Маршал преобразует точку в несжатую форму, указанную в разделе 4.3.6 стандарта ANSI X9.62.
Пример ее использования:
var pubkey *ecdsa.PublicKey = // ...
data := elliptic.Marshal(pubkey, pubkey.X, pubkey.Y)