Maison > développement back-end > Golang > le corps du texte

Quelle méthode est utilisée dans la bibliothèque btcec de Go pour vérifier les signatures secp256k1 ?

王林
Libérer: 2024-02-08 21:27:08
avant
455 Les gens l'ont consulté

Go 的 btcec 库中使用哪种方法来验证 secp256k1 签名?

L'éditeur PHP Xiaoxin utilise l'algorithme ECDSA de la bibliothèque btcec pour vérifier la signature secp256k1. ECDSA (Elliptic Curve Digital Signature Algorithm) est un algorithme de signature numérique basé sur la cryptographie à courbe elliptique, qui garantit l'intégrité et l'authenticité des données en vérifiant la signature. Dans la bibliothèque btcec, la signature est vérifiée en utilisant les paramètres de courbe secp256k1 et la clé publique pour garantir la validité de la signature. Cette méthode garantit non seulement la sécurité, mais présente également une efficacité et des performances élevées.

Contenu de la question

J'utilise la bibliothèque btcec pour gérer les signatures secp256k1 dans Go. Cependant, je n’ai pas trouvé de méthode claire pour vérifier les signatures dans les documents officiels. BTCEC Il existe un lien vers un exemple de « vérification de signature » dans la documentation, mais l'exemple de code ne semble pas être fourni directement.

Je veux savoir quelle méthode de la bibliothèque btcec est utilisée pour vérifier la signature secp256k1 ? Ce serait formidable si quelqu'un pouvait fournir un exemple de code simple. Merci!

Solution

pour vous ;-)

https://github.com/btcsuite/btcd /blob/master/btcec/ecdsa/example_test.go

// This example demonstrates verifying a secp256k1 signature against a public
// key that is first parsed from raw bytes.  The signature is also parsed from
// raw bytes.
func Example_verifySignature() {
    // Decode hex-encoded serialized public key.
    pubKeyBytes, err := hex.DecodeString("02a673638cb9587cb68ea08dbef685c" +
        "6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5")
    if err != nil {
        fmt.Println(err)
        return
    }
    pubKey, err := btcec.ParsePubKey(pubKeyBytes)
    if err != nil {
        fmt.Println(err)
        return
    }

    // Decode hex-encoded serialized signature.
    sigBytes, err := hex.DecodeString("30450220090ebfb3690a0ff115bb1b38b" +
        "8b323a667b7653454f1bccb06d4bbdca42c2079022100ec95778b51e707" +
        "1cb1205f8bde9af6592fc978b0452dafe599481c46d6b2e479")

    if err != nil {
        fmt.Println(err)
        return
    }
    signature, err := ecdsa.ParseSignature(sigBytes)
    if err != nil {
        fmt.Println(err)
        return
    }

    // Verify the signature for the message using the public key.
    message := "test message"
    messageHash := chainhash.DoubleHashB([]byte(message))
    verified := signature.Verify(messageHash, pubKey)
    fmt.Println("Signature Verified?", verified)

    // Output:
    // Signature Verified? true
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!