github.com/ethereum-optimism/optimism/l2geth@v0.0.0-20230612200230-50b04ade19e3/crypto/secp256k1/secp256.go (about) 1 package secp256k1 2 3 import ( 4 "math/big" 5 6 "github.com/ethereum/go-ethereum/crypto/secp256k1" 7 ) 8 9 var ( 10 ErrInvalidMsgLen = secp256k1.ErrInvalidMsgLen 11 ErrInvalidSignatureLen = secp256k1.ErrInvalidSignatureLen 12 ErrInvalidRecoveryID = secp256k1.ErrInvalidRecoveryID 13 ErrInvalidKey = secp256k1.ErrInvalidKey 14 ErrInvalidPubkey = secp256k1.ErrInvalidPubkey 15 ErrSignFailed = secp256k1.ErrSignFailed 16 ErrRecoverFailed = secp256k1.ErrRecoverFailed 17 ) 18 19 // Sign creates a recoverable ECDSA signature. 20 // The produced signature is in the 65-byte [R || S || V] format where V is 0 or 1. 21 // 22 // The caller is responsible for ensuring that msg cannot be chosen 23 // directly by an attacker. It is usually preferable to use a cryptographic 24 // hash function on any input before handing it to this function. 25 func Sign(msg []byte, seckey []byte) ([]byte, error) { 26 return secp256k1.Sign(msg, seckey) 27 } 28 29 // RecoverPubkey returns the public key of the signer. 30 // msg must be the 32-byte hash of the message to be signed. 31 // sig must be a 65-byte compact ECDSA signature containing the 32 // recovery id as the last element. 33 func RecoverPubkey(msg []byte, sig []byte) ([]byte, error) { 34 return secp256k1.RecoverPubkey(msg, sig) 35 } 36 37 // VerifySignature checks that the given pubkey created signature over message. 38 // The signature should be in [R || S] format. 39 func VerifySignature(pubkey, msg, signature []byte) bool { 40 return secp256k1.VerifySignature(pubkey, msg, signature) 41 } 42 43 // DecompressPubkey parses a public key in the 33-byte compressed format. 44 // It returns non-nil coordinates if the public key is valid. 45 func DecompressPubkey(pubkey []byte) (x, y *big.Int) { 46 return secp256k1.DecompressPubkey(pubkey) 47 } 48 49 // CompressPubkey encodes a public key to 33-byte compressed format. 50 func CompressPubkey(x, y *big.Int) []byte { 51 return secp256k1.CompressPubkey(x, y) 52 }