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  }