@@ -40,19 +40,19 @@ type verifier struct {
4040func (v * verifier ) Verify (msg * message ) error {
4141 sigHdr := msg .Header .Get ("Signature" )
4242 if sigHdr == "" {
43- return notSignedError
43+ return errNotSigned
4444 }
4545
4646 paramHdr := msg .Header .Get ("Signature-Input" )
4747 if paramHdr == "" {
48- return notSignedError
48+ return errNotSigned
4949 }
5050
5151 sigParts := strings .Split (sigHdr , ", " )
5252 paramParts := strings .Split (paramHdr , ", " )
5353
5454 if len (sigParts ) != len (paramParts ) {
55- return malformedSignatureError
55+ return errMalformedSignature
5656 }
5757
5858 // TODO: could be smarter about selecting the sig to verify, eg based
@@ -62,12 +62,12 @@ func (v *verifier) Verify(msg *message) error {
6262 for _ , p := range paramParts {
6363 pParts := strings .SplitN (p , "=" , 2 )
6464 if len (pParts ) != 2 {
65- return malformedSignatureError
65+ return errMalformedSignature
6666 }
6767
6868 candidate , err := parseSignatureInput (pParts [1 ])
6969 if err != nil {
70- return malformedSignatureError
70+ return errMalformedSignature
7171 }
7272
7373 if _ , ok := v .keys [candidate .keyID ]; ok {
@@ -78,14 +78,14 @@ func (v *verifier) Verify(msg *message) error {
7878 }
7979
8080 if params == nil {
81- return unknownKeyError
81+ return errUnknownKey
8282 }
8383
8484 var signature string
8585 for _ , s := range sigParts {
8686 sParts := strings .SplitN (s , "=" , 2 )
8787 if len (sParts ) != 2 {
88- return malformedSignatureError
88+ return errMalformedSignature
8989 }
9090
9191 if sParts [0 ] == sigID {
@@ -96,18 +96,18 @@ func (v *verifier) Verify(msg *message) error {
9696 }
9797
9898 if signature == "" {
99- return malformedSignatureError
99+ return errMalformedSignature
100100 }
101101
102102 ver := v .keys [params .keyID ]
103103 if ver .alg != "" && params .alg != "" && ver .alg != params .alg {
104- return algMismatchError
104+ return errAlgMismatch
105105 }
106106
107107 // verify signature. if invalid, error
108108 sig , err := base64 .StdEncoding .DecodeString (signature )
109109 if err != nil {
110- return malformedSignatureError
110+ return errMalformedSignature
111111 }
112112
113113 verifier := ver .verifier ()
@@ -134,17 +134,22 @@ func (v *verifier) Verify(msg *message) error {
134134 }
135135 }
136136
137- verifier .w .Write (b .Bytes ())
138- canonicalizeSignatureParams (verifier .w , params )
137+ if _ , err := verifier .w .Write (b .Bytes ()); err != nil {
138+ return err
139+ }
140+
141+ if err = canonicalizeSignatureParams (verifier .w , params ); err != nil {
142+ return err
143+ }
139144
140145 err = verifier .verify (sig )
141146 if err != nil {
142- return invalidSignatureError
147+ return errInvalidSignature
143148 }
144149
145150 // TODO: could put in some wiggle room
146151 if params .expires != nil && params .expires .After (time .Now ()) {
147- return signatureExpiredError
152+ return errSignatureExpired
148153 }
149154
150155 return nil
@@ -153,12 +158,12 @@ func (v *verifier) Verify(msg *message) error {
153158// XXX use vice here too.
154159
155160var (
156- notSignedError = errors .New ("signature headers not found" )
157- malformedSignatureError = errors .New ("unable to parse signature headers" )
158- unknownKeyError = errors .New ("unknown key id" )
159- algMismatchError = errors .New ("algorithm mismatch for key id" )
160- signatureExpiredError = errors .New ("signature expired" )
161- invalidSignatureError = errors .New ("invalid signature" )
161+ errNotSigned = errors .New ("signature headers not found" )
162+ errMalformedSignature = errors .New ("unable to parse signature headers" )
163+ errUnknownKey = errors .New ("unknown key id" )
164+ errAlgMismatch = errors .New ("algorithm mismatch for key id" )
165+ errSignatureExpired = errors .New ("signature expired" )
166+ errInvalidSignature = errors .New ("invalid signature" )
162167)
163168
164169// These error checking funcs aren't needed yet, so don't export them
@@ -204,7 +209,7 @@ func verifyEccP256(pk *ecdsa.PublicKey) verHolder {
204209 b := h .Sum (nil )
205210
206211 if ! ecdsa .VerifyASN1 (pk , b , s ) {
207- return invalidSignatureError
212+ return errInvalidSignature
208213 }
209214
210215 return nil
@@ -225,7 +230,7 @@ func verifyHmacSha256(secret []byte) verHolder {
225230 w : h ,
226231 verify : func (in []byte ) error {
227232 if ! hmac .Equal (in , h .Sum (nil )) {
228- return invalidSignatureError
233+ return errInvalidSignature
229234 }
230235 return nil
231236 },
0 commit comments