Freeze catalog signature vectors (T-614)

This commit is contained in:
ila
2026-07-18 16:46:17 +08:00
parent 9e5f3f4840
commit 0c1b7662c6
11 changed files with 370 additions and 32 deletions
+20 -10
View File
@@ -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
}