107 lines
5.2 KiB
Go
107 lines
5.2 KiB
Go
// Copyright (c) 2020-2022 The Decred developers
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package ecdsa
|
|
|
|
// ErrorKind identifies a kind of error. It has full support for
|
|
// errors.Is and errors.As, so the caller can directly check against
|
|
// an error kind when determining the reason for an error.
|
|
type ErrorKind string
|
|
|
|
// These constants are used to identify a specific Error.
|
|
const (
|
|
// ErrSigTooShort is returned when a signature that should be a DER
|
|
// signature is too short.
|
|
ErrSigTooShort = ErrorKind("ErrSigTooShort")
|
|
// ErrSigTooLong is returned when a signature that should be a DER signature
|
|
// is too long.
|
|
ErrSigTooLong = ErrorKind("ErrSigTooLong")
|
|
// ErrSigInvalidSeqID is returned when a signature that should be a DER
|
|
// signature does not have the expected ASN.1 sequence ID.
|
|
ErrSigInvalidSeqID = ErrorKind("ErrSigInvalidSeqID")
|
|
// ErrSigInvalidDataLen is returned when a signature that should be a DER
|
|
// signature does not specify the correct number of remaining bytes for the
|
|
// R and S portions.
|
|
ErrSigInvalidDataLen = ErrorKind("ErrSigInvalidDataLen")
|
|
// ErrSigMissingSTypeID is returned when a signature that should be a DER
|
|
// signature does not provide the ASN.1 type ID for S.
|
|
ErrSigMissingSTypeID = ErrorKind("ErrSigMissingSTypeID")
|
|
// ErrSigMissingSLen is returned when a signature that should be a DER
|
|
// signature does not provide the length of S.
|
|
ErrSigMissingSLen = ErrorKind("ErrSigMissingSLen")
|
|
// ErrSigInvalidSLen is returned when a signature that should be a DER
|
|
// signature does not specify the correct number of bytes for the S portion.
|
|
ErrSigInvalidSLen = ErrorKind("ErrSigInvalidSLen")
|
|
// ErrSigInvalidRIntID is returned when a signature that should be a DER
|
|
// signature does not have the expected ASN.1 integer ID for R.
|
|
ErrSigInvalidRIntID = ErrorKind("ErrSigInvalidRIntID")
|
|
// ErrSigZeroRLen is returned when a signature that should be a DER
|
|
// signature has an R length of zero.
|
|
ErrSigZeroRLen = ErrorKind("ErrSigZeroRLen")
|
|
// ErrSigNegativeR is returned when a signature that should be a DER
|
|
// signature has a negative value for R.
|
|
ErrSigNegativeR = ErrorKind("ErrSigNegativeR")
|
|
// ErrSigTooMuchRPadding is returned when a signature that should be a DER
|
|
// signature has too much padding for R.
|
|
ErrSigTooMuchRPadding = ErrorKind("ErrSigTooMuchRPadding")
|
|
// ErrSigRIsZero is returned when a signature has R set to the value zero.
|
|
ErrSigRIsZero = ErrorKind("ErrSigRIsZero")
|
|
// ErrSigRTooBig is returned when a signature has R with a value that is
|
|
// greater than or equal to the group order.
|
|
ErrSigRTooBig = ErrorKind("ErrSigRTooBig")
|
|
// ErrSigInvalidSIntID is returned when a signature that should be a DER
|
|
// signature does not have the expected ASN.1 integer ID for S.
|
|
ErrSigInvalidSIntID = ErrorKind("ErrSigInvalidSIntID")
|
|
// ErrSigZeroSLen is returned when a signature that should be a DER
|
|
// signature has an S length of zero.
|
|
ErrSigZeroSLen = ErrorKind("ErrSigZeroSLen")
|
|
// ErrSigNegativeS is returned when a signature that should be a DER
|
|
// signature has a negative value for S.
|
|
ErrSigNegativeS = ErrorKind("ErrSigNegativeS")
|
|
// ErrSigTooMuchSPadding is returned when a signature that should be a DER
|
|
// signature has too much padding for S.
|
|
ErrSigTooMuchSPadding = ErrorKind("ErrSigTooMuchSPadding")
|
|
// ErrSigSIsZero is returned when a signature has S set to the value zero.
|
|
ErrSigSIsZero = ErrorKind("ErrSigSIsZero")
|
|
// ErrSigSTooBig is returned when a signature has S with a value that is
|
|
// greater than or equal to the group order.
|
|
ErrSigSTooBig = ErrorKind("ErrSigSTooBig")
|
|
// ErrSigInvalidLen is returned when a signature that should be a compact
|
|
// signature is not the required length.
|
|
ErrSigInvalidLen = ErrorKind("ErrSigInvalidLen")
|
|
// ErrSigInvalidRecoveryCode is returned when a signature that should be a
|
|
// compact signature has an invalid value for the public key recovery code.
|
|
ErrSigInvalidRecoveryCode = ErrorKind("ErrSigInvalidRecoveryCode")
|
|
// ErrSigOverflowsPrime is returned when a signature that should be a
|
|
// compact signature has the overflow bit set but adding the order to it
|
|
// would overflow the underlying field prime.
|
|
ErrSigOverflowsPrime = ErrorKind("ErrSigOverflowsPrime")
|
|
// ErrPointNotOnCurve is returned when attempting to recover a public key
|
|
// from a compact signature results in a point that is not on the elliptic
|
|
// curve.
|
|
ErrPointNotOnCurve = ErrorKind("ErrPointNotOnCurve")
|
|
)
|
|
|
|
// Error satisfies the error interface and prints human-readable errors.
|
|
func (e ErrorKind) Error() string { return string(e) }
|
|
|
|
// Error identifies an error related to an ECDSA signature. It has full
|
|
// support for errors.Is and errors.As, so the caller can ascertain the
|
|
// specific reason for the error by checking the underlying error.
|
|
type Error struct {
|
|
Err error
|
|
Description string
|
|
}
|
|
|
|
// Error satisfies the error interface and prints human-readable errors.
|
|
func (e Error) Error() string { return e.Description }
|
|
|
|
// Unwrap returns the underlying wrapped error.
|
|
func (e Error) Unwrap() error { return e.Err }
|
|
|
|
// signatureError creates an Error given a set of arguments.
|
|
func signatureError(kind ErrorKind, desc string) Error {
|
|
return Error{Err: kind, Description: desc}
|
|
}
|