...

Source file src/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa/error.go

Documentation: github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa

     1  // Copyright (c) 2020-2022 The Decred developers
     2  // Use of this source code is governed by an ISC
     3  // license that can be found in the LICENSE file.
     4  
     5  package ecdsa
     6  
     7  // ErrorKind identifies a kind of error.  It has full support for
     8  // errors.Is and errors.As, so the caller can directly check against
     9  // an error kind when determining the reason for an error.
    10  type ErrorKind string
    11  
    12  // These constants are used to identify a specific Error.
    13  const (
    14  	// ErrSigTooShort is returned when a signature that should be a DER
    15  	// signature is too short.
    16  	ErrSigTooShort = ErrorKind("ErrSigTooShort")
    17  
    18  	// ErrSigTooLong is returned when a signature that should be a DER signature
    19  	// is too long.
    20  	ErrSigTooLong = ErrorKind("ErrSigTooLong")
    21  
    22  	// ErrSigInvalidSeqID is returned when a signature that should be a DER
    23  	// signature does not have the expected ASN.1 sequence ID.
    24  	ErrSigInvalidSeqID = ErrorKind("ErrSigInvalidSeqID")
    25  
    26  	// ErrSigInvalidDataLen is returned when a signature that should be a DER
    27  	// signature does not specify the correct number of remaining bytes for the
    28  	// R and S portions.
    29  	ErrSigInvalidDataLen = ErrorKind("ErrSigInvalidDataLen")
    30  
    31  	// ErrSigMissingSTypeID is returned when a signature that should be a DER
    32  	// signature does not provide the ASN.1 type ID for S.
    33  	ErrSigMissingSTypeID = ErrorKind("ErrSigMissingSTypeID")
    34  
    35  	// ErrSigMissingSLen is returned when a signature that should be a DER
    36  	// signature does not provide the length of S.
    37  	ErrSigMissingSLen = ErrorKind("ErrSigMissingSLen")
    38  
    39  	// ErrSigInvalidSLen is returned when a signature that should be a DER
    40  	// signature does not specify the correct number of bytes for the S portion.
    41  	ErrSigInvalidSLen = ErrorKind("ErrSigInvalidSLen")
    42  
    43  	// ErrSigInvalidRIntID is returned when a signature that should be a DER
    44  	// signature does not have the expected ASN.1 integer ID for R.
    45  	ErrSigInvalidRIntID = ErrorKind("ErrSigInvalidRIntID")
    46  
    47  	// ErrSigZeroRLen is returned when a signature that should be a DER
    48  	// signature has an R length of zero.
    49  	ErrSigZeroRLen = ErrorKind("ErrSigZeroRLen")
    50  
    51  	// ErrSigNegativeR is returned when a signature that should be a DER
    52  	// signature has a negative value for R.
    53  	ErrSigNegativeR = ErrorKind("ErrSigNegativeR")
    54  
    55  	// ErrSigTooMuchRPadding is returned when a signature that should be a DER
    56  	// signature has too much padding for R.
    57  	ErrSigTooMuchRPadding = ErrorKind("ErrSigTooMuchRPadding")
    58  
    59  	// ErrSigRIsZero is returned when a signature has R set to the value zero.
    60  	ErrSigRIsZero = ErrorKind("ErrSigRIsZero")
    61  
    62  	// ErrSigRTooBig is returned when a signature has R with a value that is
    63  	// greater than or equal to the group order.
    64  	ErrSigRTooBig = ErrorKind("ErrSigRTooBig")
    65  
    66  	// ErrSigInvalidSIntID is returned when a signature that should be a DER
    67  	// signature does not have the expected ASN.1 integer ID for S.
    68  	ErrSigInvalidSIntID = ErrorKind("ErrSigInvalidSIntID")
    69  
    70  	// ErrSigZeroSLen is returned when a signature that should be a DER
    71  	// signature has an S length of zero.
    72  	ErrSigZeroSLen = ErrorKind("ErrSigZeroSLen")
    73  
    74  	// ErrSigNegativeS is returned when a signature that should be a DER
    75  	// signature has a negative value for S.
    76  	ErrSigNegativeS = ErrorKind("ErrSigNegativeS")
    77  
    78  	// ErrSigTooMuchSPadding is returned when a signature that should be a DER
    79  	// signature has too much padding for S.
    80  	ErrSigTooMuchSPadding = ErrorKind("ErrSigTooMuchSPadding")
    81  
    82  	// ErrSigSIsZero is returned when a signature has S set to the value zero.
    83  	ErrSigSIsZero = ErrorKind("ErrSigSIsZero")
    84  
    85  	// ErrSigSTooBig is returned when a signature has S with a value that is
    86  	// greater than or equal to the group order.
    87  	ErrSigSTooBig = ErrorKind("ErrSigSTooBig")
    88  
    89  	// ErrSigInvalidLen is returned when a signature that should be a compact
    90  	// signature is not the required length.
    91  	ErrSigInvalidLen = ErrorKind("ErrSigInvalidLen")
    92  
    93  	// ErrSigInvalidRecoveryCode is returned when a signature that should be a
    94  	// compact signature has an invalid value for the public key recovery code.
    95  	ErrSigInvalidRecoveryCode = ErrorKind("ErrSigInvalidRecoveryCode")
    96  
    97  	// ErrSigOverflowsPrime is returned when a signature that should be a
    98  	// compact signature has the overflow bit set but adding the order to it
    99  	// would overflow the underlying field prime.
   100  	ErrSigOverflowsPrime = ErrorKind("ErrSigOverflowsPrime")
   101  
   102  	// ErrPointNotOnCurve is returned when attempting to recover a public key
   103  	// from a compact signature results in a point that is not on the elliptic
   104  	// curve.
   105  	ErrPointNotOnCurve = ErrorKind("ErrPointNotOnCurve")
   106  )
   107  
   108  // Error satisfies the error interface and prints human-readable errors.
   109  func (e ErrorKind) Error() string {
   110  	return string(e)
   111  }
   112  
   113  // Error identifies an error related to an ECDSA signature. It has full
   114  // support for errors.Is and errors.As, so the caller can ascertain the
   115  // specific reason for the error by checking the underlying error.
   116  type Error struct {
   117  	Err         error
   118  	Description string
   119  }
   120  
   121  // Error satisfies the error interface and prints human-readable errors.
   122  func (e Error) Error() string {
   123  	return e.Description
   124  }
   125  
   126  // Unwrap returns the underlying wrapped error.
   127  func (e Error) Unwrap() error {
   128  	return e.Err
   129  }
   130  
   131  // signatureError creates an Error given a set of arguments.
   132  func signatureError(kind ErrorKind, desc string) Error {
   133  	return Error{Err: kind, Description: desc}
   134  }
   135  

View as plain text