Как разделить открытые и закрытые ключи ecdsa в GoLang - PullRequest
0 голосов
/ 24 ноября 2018

Пока у меня есть:

key, err := ecdsa.GenerateKey(elliptic.P521(), rand.Reader)
if err != nil {
    os.Exit(-1)
}
marshalled, err := x509.MarshalECPrivateKey(key) // marshalls data to byte stream
if err != nil {
    os.Exit(-1)
}

По сути, у меня возникают проблемы с тем, что когда генерируется пара ключей, она сохраняется в *ecdsa.PrivateKey, воткрытый ключ которого хранится в *ecdsa.PrivateKey.PublicKey, и когда я собираю данные пары ключей (сохраненные в *ecdsa.PrivateKey), используя x509.MarshalECPrivateKey(key), возвращается один байт.Поэтому у меня возникают проблемы с определением того, какие ключи являются открытыми и закрытыми в самом срезе байтов.

1 Ответ

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

Закрытый ключ является расширенным набором открытого ключа.Он всегда содержит открытый ключ.Обычно открытый ключ хранится как часть сертификата.

Если вы действительно хотите получить открытый ключ самостоятельно, вы можете получить большие целые числа X и Y из структуры открытого ключа ecdsa исохраните их двоичное представление.

Вы можете получить небольшую ретроспективу вашего дизайна здесь.Не так много ситуаций, когда вам нужно сообщать открытый ключ в одиночку.

...