Функция ed25519.Sign

Функция ed25519.Sign создает криптографическую подпись для сообщения, используя алгоритм Ed25519. Первым параметром она принимает закрытый ключ (срез байтов длиной ed25519.PrivateKeySize), вторым - сообщение для подписи (срез байтов). Функция возвращает подпись в виде среза байтов длиной ed25519.SignatureSize (64 байта). Подпись может быть проверена с помощью функции ed25519.Verify с использованием соответствующего открытого ключа.

Синтаксис

goed25519.Sign(privateKey, message)

Пример

Давайте сгенерируем ключевую пару, подпишем сообщение "Hello, World!" и выведем полученную подпись в шестнадцатеричном формате:

gopackage main

import (
  "crypto/ed25519"
  "crypto/rand"
  "encoding/hex"
  "fmt"
)

func main() {
  // Generate a key pair
  publicKey, privateKey, err := ed25519.GenerateKey(rand.Reader)
  if err != nil {
    panic(err)
  }

  // Message to sign
  message := []byte("Hello, World!")

  // Sign the message
  signature := ed25519.Sign(privateKey, message)

  // Verify the signature
  isValid := ed25519.Verify(publicKey, message, signature)

  fmt.Println("Signature (hex):", hex.EncodeToString(signature))
  fmt.Println("Valid:", isValid)
}

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

go"Signature (hex): 1234567890abcdef..."
"Valid: true"

Пример

Попробуем подписать сообщение "12345" и затем изменить его, чтобы показать, что проверка подписи не пройдет:

gopackage main

import (
  "crypto/ed25519"
  "crypto/rand"
  "fmt"
)

func main() {
  // Generate a key pair
  _, privateKey, err := ed25519.GenerateKey(rand.Reader)
  if err != nil {
    panic(err)
  }

  // Original message
  message1 := []byte("12345")
  signature := ed25519.Sign(privateKey, message1)

  // Tampered message
  message2 := []byte("12346")

  // Recover public key from private key
  publicKey := privateKey.Public().(ed25519.PublicKey)

  // Verify original signature with tampered message
  isValid := ed25519.Verify(publicKey, message2, signature)

  fmt.Println("Verification with tampered message:", isValid)
}

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

go"Verification with tampered message: false"

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

  • функцию ed25519.GenerateKey,
    которая генерирует новую ключевую пару Ed25519
  • функцию ed25519.Verify,
    которая проверяет подпись Ed25519
  • функцию ecdsa.Sign,
    которая создает подпись ECDSA
  • функцию rsa.SignPKCS1v15,
    которая создает подпись RSA PKCS1v15