| 71 | } |
| 72 | |
| 73 | func (e *ecdsaVerifier) Verify(msg, sig []byte) (bool, error) { |
| 74 | var v ecdsaSigValue |
| 75 | rest, err := asn1.Unmarshal(sig, &v) |
| 76 | if err != nil { |
| 77 | return false, fmt.Errorf("signingalgorithm: failed to ASN.1 decode the signature: %v", err) |
| 78 | } |
| 79 | if len(rest) > 0 { |
| 80 | return false, errors.New("signingalgorithm: extra data at the signature end") |
| 81 | } |
| 82 | |
| 83 | hash := e.hash.New() |
| 84 | hash.Write(msg) |
| 85 | return ecdsa.Verify(e.pubKey, hash.Sum(nil), v.R, v.S), nil |
| 86 | } |
| 87 | |
| 88 | func VerifierForPublicKey(k crypto.PublicKey) (Verifier, error) { |
| 89 | switch k := k.(type) { |