Freeze catalog signature vectors (T-614)
This commit is contained in:
+20
-10
@@ -66,17 +66,9 @@ func (verifier Verifier) Verify(document []byte) (VerifiedDocument, error) {
|
||||
if err != nil {
|
||||
return VerifiedDocument{}, err
|
||||
}
|
||||
signature, err := base64.StdEncoding.Strict().DecodeString(signatureText)
|
||||
signature, err := decodeCanonicalSignature(signatureText)
|
||||
if err != nil {
|
||||
return VerifiedDocument{}, fmt.Errorf("%w: base64: %v", ErrSignatureInvalid, err)
|
||||
}
|
||||
if len(signature) != ed25519.SignatureSize {
|
||||
return VerifiedDocument{}, fmt.Errorf(
|
||||
"%w: got %d signature bytes, want %d",
|
||||
ErrSignatureInvalid,
|
||||
len(signature),
|
||||
ed25519.SignatureSize,
|
||||
)
|
||||
return VerifiedDocument{}, fmt.Errorf("%w: %v", ErrSignatureInvalid, err)
|
||||
}
|
||||
if !ed25519.Verify(verifier.publicKey, signedPayload, signature) {
|
||||
return VerifiedDocument{}, ErrSignatureInvalid
|
||||
@@ -87,3 +79,21 @@ func (verifier Verifier) Verify(document []byte) (VerifiedDocument, error) {
|
||||
SignedPayload: append([]byte(nil), signedPayload...),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func decodeCanonicalSignature(value string) ([]byte, error) {
|
||||
signature, err := base64.StdEncoding.Strict().DecodeString(value)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid standard Base64: %w", err)
|
||||
}
|
||||
if base64.StdEncoding.EncodeToString(signature) != value {
|
||||
return nil, errors.New("signature must use canonical padded Base64")
|
||||
}
|
||||
if len(signature) != ed25519.SignatureSize {
|
||||
return nil, fmt.Errorf(
|
||||
"got %d signature bytes, want %d",
|
||||
len(signature),
|
||||
ed25519.SignatureSize,
|
||||
)
|
||||
}
|
||||
return signature, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user