module Secp256k1::Signature
Overview
Implements ECDSA_Signature generation and verification for Secp256k1
elliptic curves.
Ref: cryptobook.nakov.com/digital-signatures/ecdsa-sign-verify-messages
Defined in:
signature.crClass Method Summary
-
.sign(msg : String, priv : BigInt)
Signs a message and creates a signature proof using a private key.
-
.verify(msg : String, sig : ECDSA_Signature, pub : EC_Point)
Verifies a signature of a message against a public key.
-
.verify_hash(hash : BigInt, sig : ECDSA_Signature, pub : EC_Point)
Verifies a signature of a message hash against a public key.
Class Method Detail
Signs a message and creates a signature proof using a private key.
The ECDSA signing algorithm (RFC-6979) takes as input a message msg
and a private key priv. It produces as output a signature, which
consists of pair of integers (r, s), where r is the x-coordinate
of a random point on our curve and s is the signature proof.
Parameters:
msg(String): A message string to sign.priv(BigInt): A private key to sign with.
sig = Secp256k1::Signature.sign "Hello, World!", BigInt.new("b795cd2c5ce0cc632ca1f65e921b9c751b363e97fcaeec81c02a85b763448268", 16)
sig.r
# => "63945398370917837063250848409972066837033757647691696776146735867163610886143"
sig.s
# => "20291418537568297129028959685291490143232574306335372594306006819765182564103"
Verifies a signature of a message against a public key.
The algorithm to verify an ECDSA signature takes as input the signed message msg
and the signature (r, s) produced from .sign and the public key pub,
corresponding to the signer's private key. The result is boolean.
Parameters:
msg(String): A message string to verify.sig(ECDSA_Signature): A signature to verify the message.pub(EC_Point): A public key to verify the signature against.
pub = Secp256k1::Util.restore_public_key "03d885aed4bcaf3a8c95a57e3be08caa1bd6a060a68b9795c03129073597fcb19a"
msg = "Hello, World!"
sig = Secp256k1::ECDSA_Signature.new BigInt.new("63945398370917837063250848409972066837033757647691696776146735867163610886143"), BigInt.new("20291418537568297129028959685291490143232574306335372594306006819765182564103")
Secp256k1::Signature.verify msg, sig, pub
# => true
Verifies a signature of a message hash against a public key.
Same as .verify, just using the hashed message directly.
Parameters:
hash(BigInt): A SHA-256 hash of the message to verify.sig(ECDSA_Signature): A signature to verify the message.pub(EC_Point): A public key to verify the signature against.
Returns true if signature is valid. See .verify for usage example.