diff --git a/util/fipstools/acvp/acvptool/subprocess/mldsa.go b/util/fipstools/acvp/acvptool/subprocess/mldsa.go index d248ff6c2..b7cde7dd5 100644 --- a/util/fipstools/acvp/acvptool/subprocess/mldsa.go +++ b/util/fipstools/acvp/acvptool/subprocess/mldsa.go @@ -92,12 +92,12 @@ type mldsaSigVerTestGroup struct { ID uint64 `json:"tgId"` TestType string `json:"testType"` ParameterSet string `json:"parameterSet"` - PublicKey string `json:"pk"` Tests []mldsaSigVerTest `json:"tests"` } type mldsaSigVerTest struct { ID uint64 `json:"tcId"` + PublicKey string `json:"pk"` Message string `json:"message"` Signature string `json:"signature"` } @@ -254,13 +254,13 @@ func (m *mldsa) processSigVer(vectorSet []byte, t Transactable) (any, error) { } cmdName := group.ParameterSet + "/sigVer" - pk, err := hex.DecodeString(group.PublicKey) - if err != nil { - return nil, fmt.Errorf("failed to decode public key in group %d: %s", - group.ID, err) - } - for _, test := range group.Tests { + pk, err := hex.DecodeString(test.PublicKey) + if err != nil || len(pk) == 0 { + return nil, fmt.Errorf("failed to decode public key in test case %d/%d: %s", + group.ID, test.ID, err) + } + msg, err := hex.DecodeString(test.Message) if err != nil { return nil, fmt.Errorf("failed to decode message in test case %d/%d: %s", diff --git a/util/fipstools/acvp/acvptool/test/expected/ML-DSA.bz2 b/util/fipstools/acvp/acvptool/test/expected/ML-DSA.bz2 index 77290c148..cf13292c3 100644 Binary files a/util/fipstools/acvp/acvptool/test/expected/ML-DSA.bz2 and b/util/fipstools/acvp/acvptool/test/expected/ML-DSA.bz2 differ diff --git a/util/fipstools/acvp/acvptool/test/vectors/ML-DSA.bz2 b/util/fipstools/acvp/acvptool/test/vectors/ML-DSA.bz2 index e4bcaa1dc..317dfec86 100644 Binary files a/util/fipstools/acvp/acvptool/test/vectors/ML-DSA.bz2 and b/util/fipstools/acvp/acvptool/test/vectors/ML-DSA.bz2 differ diff --git a/util/fipstools/acvp/modulewrapper/modulewrapper.cc b/util/fipstools/acvp/modulewrapper/modulewrapper.cc index 831a99874..3245ece3f 100644 --- a/util/fipstools/acvp/modulewrapper/modulewrapper.cc +++ b/util/fipstools/acvp/modulewrapper/modulewrapper.cc @@ -958,30 +958,42 @@ static bool GetConfig(const Span args[], "algorithm": "ML-DSA", "mode": "sigGen", "revision": "FIPS204", - "parameterSets": [ - "ML-DSA-65", - "ML-DSA-87" - ], + "signatureInterfaces": ["internal"], "deterministic": [ true, false ], - "messageLength": [ - { + "externalMu": [ + false + ], + "capabilities": [{ + "parameterSets": [ + "ML-DSA-65", + "ML-DSA-87" + ], + "messageLength": [{ "min": 8, "max": 65536, "increment": 8 - } - ] + }] + }] }, { "algorithm": "ML-DSA", "mode": "sigVer", "revision": "FIPS204", - "parameterSets": [ - "ML-DSA-65", - "ML-DSA-87" - ] + "signatureInterfaces": ["internal"], + "capabilities": [{ + "messageLength": [{ + "min": 8, + "max": 65536, + "increment": 8 + }], + "parameterSets": [ + "ML-DSA-65", + "ML-DSA-87" + ] + }] }, { "algorithm": "ML-KEM", @@ -1021,6 +1033,7 @@ static bool GetConfig(const Span args[], true, false ], + "signatureInterfaces": [ "internal" ], "capabilities": [ { "parameterSets": [ @@ -1040,6 +1053,7 @@ static bool GetConfig(const Span args[], "algorithm": "SLH-DSA", "mode": "sigVer", "revision": "FIPS205", + "signatureInterfaces": [ "internal" ], "deterministic": [ true, false