Функция ecdsa.GenerateKey
Функция ecdsa.GenerateKey генерирует пару ключей (приватный и публичный) для цифровой подписи на основе алгоритма ECDSA (Elliptic Curve Digital Signature Algorithm). Первым параметром она принимает кривую из пакета elliptic (например, elliptic.P256, elliptic.P384 или elliptic.P521). Вторым параметром — источник энтропии, обычно crypto/rand.Reader. Функция возвращает указатель на структуру ecdsa.PrivateKey и ошибку error, которая может возникнуть при генерации.
Сгенерированный приватный ключ содержит поле D (секретный ключ) и поле PublicKey, которое в свою очередь содержит координаты публичного ключа X и Y на указанной кривой. Полученную пару ключей используют для создания и проверки электронных подписей, а также для шифрования в некоторых схемах.
Синтаксис
func GenerateKey(c elliptic.Curve, rand io.Reader) (*ecdsa.PrivateKey, error)
Пример
Сгенерируем ключевую пару на кривой P-256 и выведем значения публичного ключа:
package main
import (
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rand"
"fmt"
)
func main() {
privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(privateKey.PublicKey.X)
fmt.Println(privateKey.PublicKey.Y)
fmt.Println(privateKey.D)
}
Результат выполнения кода:
"48386943230157236132389040500656225889095248275758733062481390837805628056869"
"96099260529750559701334565618475089370217432420588177948066525795995907728930"
"12680194633649581405322249359627446536034142357643694287886814371904696564850"
Пример
Создадим ключ на кривой P-384 и проверим, что генерация прошла успешно:
package main
import (
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rand"
"fmt"
)
func main() {
privateKey, err := ecdsa.GenerateKey(elliptic.P384(), rand.Reader)
if err != nil {
fmt.Println("Error generating key:", err)
return
}
if privateKey != nil {
fmt.Println("Private key generated successfully")
}
}
Результат выполнения кода:
"Private key generated successfully"
Смотрите также
-
функцию
ecdsa.Sign,
которая подписывает хеш с помощью приватного ключа -
функцию
ecdsa.Verify,
которая проверяет подпись с использованием публичного ключа -
функцию
elliptic.P256,
которая возвращает кривую NIST P-256 для ECDSA -
функцию
crypto/rand.Read,
которая заполняет байтовый срез случайными данными