1 // Copyright (c) 2020 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 secp256k1
6 7 // ErrorKind identifies a kind of error. It has full support for errors.Is and
8 // errors.As, so the caller can directly check against an error kind when
9 // determining the reason for an error.
10 type ErrorKind string
11 12 // These constants are used to identify a specific RuleError.
13 const (
14 // ErrPubKeyInvalidLen indicates that the length of a serialized public
15 // key is not one of the allowed lengths.
16 ErrPubKeyInvalidLen = ErrorKind("ErrPubKeyInvalidLen")
17 18 // ErrPubKeyInvalidFormat indicates an attempt was made to parse a public
19 // key that does not specify one of the supported formats.
20 ErrPubKeyInvalidFormat = ErrorKind("ErrPubKeyInvalidFormat")
21 22 // ErrPubKeyXTooBig indicates that the x coordinate for a public key
23 // is greater than or equal to the prime of the field underlying the group.
24 ErrPubKeyXTooBig = ErrorKind("ErrPubKeyXTooBig")
25 26 // ErrPubKeyYTooBig indicates that the y coordinate for a public key is
27 // greater than or equal to the prime of the field underlying the group.
28 ErrPubKeyYTooBig = ErrorKind("ErrPubKeyYTooBig")
29 30 // ErrPubKeyNotOnCurve indicates that a public key is not a point on the
31 // secp256k1 curve.
32 ErrPubKeyNotOnCurve = ErrorKind("ErrPubKeyNotOnCurve")
33 34 // ErrPubKeyMismatchedOddness indicates that a hybrid public key specified
35 // an oddness of the y coordinate that does not match the actual oddness of
36 // the provided y coordinate.
37 ErrPubKeyMismatchedOddness = ErrorKind("ErrPubKeyMismatchedOddness")
38 )
39 40 // Error satisfies the error interface and prints human-readable errors.
41 func (e ErrorKind) Error() string {
42 return string(e)
43 }
44 45 // Error identifies an error related to public key cryptography using a
46 // sec256k1 curve. It has full support for errors.Is and errors.As, so the
47 // caller can ascertain the specific reason for the error by checking
48 // the underlying error.
49 type Error struct {
50 Err error
51 Description string
52 }
53 54 // Error satisfies the error interface and prints human-readable errors.
55 func (e Error) Error() string {
56 return e.Description
57 }
58 59 // Unwrap returns the underlying wrapped error.
60 func (e Error) Unwrap() error {
61 return e.Err
62 }
63 64 // makeError creates an Error given a set of arguments.
65 func makeError(kind ErrorKind, desc string) Error {
66 return Error{Err: kind, Description: desc}
67 }
68