| // Copyright 2019 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // Package dsa provides an internal version of dsa.Verify |
| // that is used for the Wycheproof tests. |
| package dsa |
| |
| import ( |
| "crypto/dsa" |
| "math/big" |
| |
| "golang.org/x/crypto/cryptobyte" |
| "golang.org/x/crypto/cryptobyte/asn1" |
| ) |
| |
| // VerifyASN1 verifies the ASN1 encoded signature, sig, of hash using the |
| // public key, pub. Its return value records whether the signature is valid. |
| func VerifyASN1(pub *dsa.PublicKey, hash, sig []byte) bool { |
| var ( |
| r, s = &big.Int{}, &big.Int{} |
| inner cryptobyte.String |
| ) |
| input := cryptobyte.String(sig) |
| if !input.ReadASN1(&inner, asn1.SEQUENCE) || |
| !input.Empty() || |
| !inner.ReadASN1Integer(r) || |
| !inner.ReadASN1Integer(s) || |
| !inner.Empty() { |
| return false |
| } |
| return dsa.Verify(pub, hash, r, s) |
| } |