Функция 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 на указанной кривой. Полученную пару ключей используют для создания и проверки электронных подписей, а также для шифрования в некоторых схемах.

Синтаксис

gofunc GenerateKey(c elliptic.Curve, rand io.Reader) (*ecdsa.PrivateKey, error)

Пример

Сгенерируем ключевую пару на кривой P-256 и выведем значения публичного ключа:

gopackage 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)
}

Результат выполнения кода:

go"48386943230157236132389040500656225889095248275758733062481390837805628056869"
"96099260529750559701334565618475089370217432420588177948066525795995907728930"
"12680194633649581405322249359627446536034142357643694287886814371904696564850"

Пример

Создадим ключ на кривой P-384 и проверим, что генерация прошла успешно:

gopackage 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")
  }
}

Результат выполнения кода:

go"Private key generated successfully"

Смотрите также

  • функцию ecdsa.Sign,
    которая подписывает хеш с помощью приватного ключа
  • функцию ecdsa.Verify,
    которая проверяет подпись с использованием публичного ключа
  • функцию elliptic.P256,
    которая возвращает кривую NIST P-256 для ECDSA
  • функцию crypto/rand.Read,
    которая заполняет байтовый срез случайными данными