usnistgov / ACVP-Server

A repository tracking releases of NIST's ACVP server. See www.github.com/usnistgov/ACVP for the protocol.
36 stars 13 forks source link

Invalid signature lengths for SLH-DSA signature verification data #341

Closed crypto4a closed 1 week ago

crypto4a commented 3 weeks ago

environment DEMO

testSessionId 518259

vsId 2382584

Algorithm registration [ { "capabilities": [ { "parameterSets": [ "SLH-DSA-SHA2-128s", "SLH-DSA-SHA2-192s", "SLH-DSA-SHA2-256s", "SLH-DSA-SHA2-128f", "SLH-DSA-SHA2-192f", "SLH-DSA-SHA2-256f", "SLH-DSA-SHAKE-128s", "SLH-DSA-SHAKE-192s", "SLH-DSA-SHAKE-256s", "SLH-DSA-SHAKE-128f", "SLH-DSA-SHAKE-192f", "SLH-DSA-SHAKE-256f" ], "messageLength": [ { "min": 128, "max": 136, "increment": 8 } ] } ], "vsId": 53, "algorithm": "SLH-DSA", "mode": "sigVer", "revision": "FIPS205", "isSample": true }
]

Endpoint in which the error is experienced https://demo.acvts.nist.gov/acvp/v1/testSessions/518259

Expected behavior Generated data set has varying signature lengths that deviate +/- 1 byte from the expected lengths. There's always one signature that is a byte too short, and one that is a byte too long in each parameter set. In addition, the extra byte is always 0xAA. Here is a list of all of the deviating signature lengths in the given data set:

crypto4a commented 3 weeks ago

As an added bonus, all of the SLH-DSA-SHA2- signatures with valid lengths result in signature verification failures, despite the expected results indicating that some should be valid. The SLH-DSA-SHAKE- signatures with valid lengths verify as expected in terms of matching the expected results, so it just seems to be an issue with the SHA2-based tests. Note that my implementation passes all KeyGen and SigGen tests correctly so I'm assuming it should work with SigVer as well but perhaps that is a mistake on my part.

livebe01 commented 2 weeks ago

Expected behavior Generated data set has varying signature lengths that deviate +/- 1 byte from the expected lengths. There's always one signature that is a byte too short, and one that is a byte too long in each parameter set. In addition, the extra byte is always 0xAA. Here is a list of all of the deviating signature lengths in the given data set:

Thanks @crypto4a, this is the expected behavior. The purpose of the SLH-DSA sigVer FIPS205 tests is to test whether an implementation can correctly verify SLH-DSA signatures. Per L1 of the slh_verify() algorithm defined in the FIPS 205 IPD, signature verification should fail if the length of the provided signature != (1 +k(1 +a) +h+d · len)· n. Hence the test cases with signatures that are one byte too short and one byte too long.

livebe01 commented 2 weeks ago

As an added bonus, all of the SLH-DSA-SHA2- signatures with valid lengths result in signature verification failures, despite the expected results indicating that some should be valid. The SLH-DSA-SHAKE- signatures with valid lengths verify as expected in terms of matching the expected results, so it just seems to be an issue with the SHA2-based tests. Note that my implementation passes all KeyGen and SigGen tests correctly so I'm assuming it should work with SigVer as well but perhaps that is a mistake on my part.

Thanks @crypto4a. I'll take a look and see if there's something obvious going on with the SHA tests.

crypto4a commented 2 weeks ago

Thanks @livebe01, that makes perfect sense and I should have realized as much before filing the issue. Sorry for the churn on that.

livebe01 commented 2 weeks ago

Thanks @livebe01, that makes perfect sense and I should have realized as much before filing the issue. Sorry for the churn on that.

No problem. I appreciate you being quick to jump on and exercise the SLH-DSA tests.

livebe01 commented 2 weeks ago

I'm not seeing anything obvious when it comes to differences between how the SHA and SHAKE test cases are formed.

The way that we form the sigVer test cases is to 1) generate a key pair, 2) generate a random message and additional randomness, if required, 3) sign the message using the private key and optional additional randomness and then 4) either a) alter some part of the signature or message to create a test case that should fail or b) do nothing for a test case that should pass.

As a first step in troubleshooting the behavior where SLH-DSA-SHA2-* signatures that are expected to verify successfully are not verifying for your SLH-DSA implementation, I'd be curious to see if your implementation produces the same signature as our code for vsId: 2382584, tcId: 1.

For tcId: 1, we use the following inputs to generate the signature: "sk": "D76D5A12A44837E1CF0A6BD7F830E4ECC62525D6A6DE257B83AD14E8FDDA0E01D0CEA2B2C77098B1ACA68B5FB5A32CDED98777DD4A34996C3D4E1D0A255D34EF", "additionalRandomness": "BBF8638DB27CAC37D8AF44737F3C5A0C", "message": "98424D8D3E32792BE147FBFE5168BB187E"

Assuming that we have a valid key pair, if we're creating the signature correctly, it would follow that the signature should verify successfully.

livebe01 commented 2 weeks ago

When we create the sigVer test cases, we don't actually run algorithm 19, slh_verify(). We create what should be a valid signature for a random message. If we modify the message or signature, we would expect a run of slh_verify() to fail. If we provide an unaltered message and associated signature, we expect slh_verify() to succeed.

crypto4a commented 2 weeks ago

Hi @livebe01, thanks for the explanation.

Here is the signature that I generated using your inputs and parameter set SLH-DSA-SHA2-128s: "signature": "1C640872C33358DD5DAC652EA13B5EF93EBE82BDE74E59A392E4F4B555DF8BE36025116D19E1AEDE63456D4CC496FC54B253CDAAF5C64557EC4D968915439E4B6628BACCE4279DF5C57EF9804462EE6DA19B71D7B8B4334BC987AC574A1F1E3C7BF900571A8DF0CB92E2C2429BDAC9FDAAF7400FC41D3344A1459D42568041F30421E3CCE9E6901447687B433E6083FFAA7B404F42321391A63AF03BD9DABE7EB431EA963F9066082DE9BFD5EA1FCBE2C2D7D9C3C032A0A588E6F25172D2EC0AEE2DEB43B9C8CBAED622E0A8E0F2D4B2EF59882A8BB22FA9403EF921585CD1EEED41EBF43836BD15BD7C89AAD08CB2D9E3A544AC1A90FBF3E6AA3AF4E8A676D883C1EDDA16A04615123142F4C80CDD485A09EC15143E2190A52F8D77CE7922A2D138B9751770696411C1952A6424D0F7260D83D47225CF8AF962ECCF3FA09E922C53F43BEC5C7595765418461DC4708DA447C725C104CB387AEB5D3925D6F1C3A4C2D6E1FB271CC97C6141D36C3D181245E6403FFC45622C0AF1E9C79013369CC6B25F2178ACEF746D1E674BC3B139CBA28189C2A77B4200056535940937D2511A7C0006FB8EAFBFCAD0AFC249168ACADB75CAB7C197537D94D1BF8C0F815B7A9E00F9E56680E0A9F6CDD98264D54DC155AFAF03D6254C5EA446896C3B6A67096F988DD23B5D7B79CAB99680E0D210E148D2AD46EB5D0646D32876D647E9E8E943DC2D7C6F4889E97FB61A360C35F9E1DA28811DDA5F2F97AD30143A835DF7031AA3FE0F2DCB26AC68990003745DB90E314115F65F2CB441089329180A7C07DBADE07D0E483C6F91850D9224C780EFCBEA9CAB7CDF163CC4887B5BE1FE155BC962C5B86B19BDA1A1E6757D6F145579CD2B3AFA8BD24C66980512571EA566C3BED2558C18F581F2BDA6D96BC2FD624800C118D679C1CBECE0817CDF6B2412390A52D0203B38C4F31919BFECECDEAD232163347B8AF2681FC1D8381D9147072763BDCD3040432B1647F78C329B45213976E9FBF79E1F4692E8A9EF1CCA706233A45D9A09837543FFD9744769C246645376C400992A0F20F4DC4345992818421AA4FE5E1D3A9F24D34AEA2DBB24FE359584E0F7DFA7CDEAE285D836DE67E9F27AD72F254CD2333C0030D6BAE9BACD3C696BF101BAE86237140939E31FA25A0A97C0EEB9017CF32C2D8630DF8CDC2AA8FD01766104F9F34A998C80840CEA4DEDF574FD6020547CC99784ABC335B1FDFEE2D1860FAD447CBAA58402B68815252C6A046F19D3BDCC57879C1666EAE864B91A40E2ABE3F985CD74C29BB6BB66CD97DA7A2C0BD73F06B6FBA5A11FD8AEE6A03CCAD48FA1412CD8B3135230928E424E281B17776F168E6675203AF5B28BFEB755C93C80D1613CB8512937B5D58ED7F637A6314B1A4C7C2299E815F7AC98111CD69DE67F875125B15AEF2277C0CD494222A2581A9569D1974A54F7DFAC59ECF3ADB1F097B5FEC5F1EEDCE82CD52C5F19858FEF47B0C5472D94530A8C148F88B852230C61EB93DA7F8954CF95C7BCE21B12EF991CC73853BD48B6BB45D236CACD0C00DB9F2B21F6B27326F6EC299A844CF6F5EDB813DCE9F53A061507097FC6C54427B7007DA5840F6A6AA67BCBDC509C39E5FDEA1D59AFEE92E4FEE5FFB54620D80C927E9455A96909CD66DDB59398EF3956254BD4D508344E6ADC50ED35F5AA2B74D0276F64FF2E465818917BBBA440E9A45C5CACABF66B03D6690493D39C1AF81655F821BF2D508D54377E15ADCFDCD3CA0666AAAD8C13F72D87CA8167C5B0FFF23D46BDE641A252B474F8C6C872600A6771379D842A2F0AD70984D4A1F5DD01C802A1384CCC3C264CDB5790FA913D73CDD01D4B989A1FDE3AB7362BD86C2745B4FADA7C0F5E2071AD5E787151CE5ECABF3750B94CCA4669B32DD1B92DF7F173178555DFDFB65B4EA5D897805A718C79FBDC6D69EACB474B77B42F41281BC70D2E236EDC1ACD1154D607EE15AAFF3C160AA453EE7AD6C85334BEAD26A137D029FF3E2CD26049B19BD48303F29AB5FFDE0545F943F072A765742A0EF41C64324FCBA09C2B0C0B7A4B8ED69460FE7CB446BB8886F0BCF4B11A636560A64D45F7EA2B31172C9CE05DA899FC9E6EB0E6DEDF0EF0D35DA51531AFC387BA70FBB433B4DA32281D1C0111A4EECA5667A7BD7DE752773F0C0D47D104312F549EA0C3D25DAA86D8D8ADF355799053BD5F59E51214C56A07511EE4DA2CFAC5DEDA6FAD66C8BAAB42976021F88EAD66D11F3D521B6FAAF9610E081AF4064EA3B697290FC83C490F1C6031D6C63BB717594CD60541BD033B554911C491CA2DDCD418B250AE17349889A499CE2B2F5432F75B14DC4910663887C5413B4F69DD3EBF8289FF6277BEBC518B705854F7DB268570544B381A81F162905C676426944FBBEE09D5BB299EB0123D6876566E396EFB8546430E07E283AB930A2D25CD9950D44EACCA0C0AD0E7FC04144050B040E411B52DACFBDBF39A432BC31DC7B41509E8601211A1304D3CE6283154CD6620D79CC1D73FE8F9A60C098001A8A1DCF3152D3C6A19241C1E40E9556187C90654813332CB5CD18DA8BBDF717D9019BCB245AD29DA6A4E17B3735ED728D65BCCB0E78D4B5217DC9135B365D9DD7750BC4973366B8D08E424B7307FB65CC2885DC098DDB01C734789F494C76C4A94077981559919C4CA7B308B0873EF206F2CB91148376B12CC806B9A56171149969FCF58909BD5735DF76A2206F6C8A22AA1FA379583951760FB97441B367D86BA1D7E8B4E1E9269F9B3F692520022A85D1E59D4831FD8C22F6FAB1A631A1F7A218E54F3FF3D4257E4C879A4E3934AB4EEECA71A042D89D6B0B53382735472C20DF35FD0FDD7427D7254A213C24662FCA4E9029290A98221E00C3E9220A1B3E5F71CF40B43375D00E5D7FC88EBF8700321FE004AE59E88D858D98B8F7537D1A76E8F47BC6FACB1D59BAA6FB7C280DDDE014F2688D1DAC1B6E4688715D5AAE057239310290A2B196F0DA6B55244F89E47BDAD792AA1C8CFBE3A23B9AF3A5A47553A1BECD0449A5F3AA31912309BF760C269824926BC1EE64773E63E121FD34F963115ADD3FDF29F0CE95E9194EEB773E283B86AD0102158A096DDEE8D955C77C135508B374896329537A0186405075066CC854D61BEDEB740F8B50CF3BBC06822D81A606ACBC2E5C3711E570CFFA9B03127E51F1A9A37425D8C35944EB279EA84189FE58111F02C0FB7875F15207802CA49A4BB2212C3C6E174065B05232754EFDFEECCB89608B36B28A5EB2E8E1691D1A2D9D7D0F78F3B35F74A366F156DA58ED5B4D6D6521E2BBB13609E28B85E5BE266FB21BEE7E65998548DD1670B4F2F43446FFB429A256FD72BDC1D2EBF81122A0334BE4C6C4C62E0AC3BB0553D217145AE6B8AC4A2FC9E82C49EDCAD6F6DAE6474AA3ACE326BBC41235CA70FC3BB4CE4C0F2CE7A51916FEF5D922630A07E97C8C45E7F75F9DC7DA880615660BC4F942B476A4CEE844D5D6DBBC29FDBAE8256485BCB0FF7A65A3239495A178BF2F011B81BCD49D9C53B2CE4D810BF68E9E9C26A9E226060AB707B6DAF368C3280415701D84DE0246F9FD1ADA17F6DC6BCF509744F11B1291E4104F922643F261F52E9E34D5EDD3269135770C7CF0F8DD051421925AABFBA78B00EFAA419CE70C39A64C05B3262C97617A3951022DA83C2D7E012FC7A5435C850BB8AF2ABE392742C48B116E1D3C79B23EC2E0F1BECEAF633A7B5394CDE22011A1F7C0C2CDAA37161014C3F18E2FF94212BCC0FBFEFB7FA09AB47B49EE5A2B93B13B85FBDA3E5099B15DF6A5811611BB7C5ECE690A836A2DB74CAFD54DEEC1CB718F8F41B5AA1AF5DF0795A1D06F8BC754F5FD2E2AA14754682A7C5AF9856F148ED343C0CB374989E0B80FAE799BFA31A061BDA072246C1C8DB7EB3EEDAC53154B2310AD517C3B8C3BB842CF565BF244EE4CA4F16932C00526C7C1FADCF9F577D6A6624BF784A78AD170AD25EFE3C693BD702E4F639D92933A4A7C00B0735A51647E4925D161038534FD345576071FAA25BD05AD0E453DC7A82961AA0DCB373E5695508A1FD2C58DF6F6CA61B437906F91705FD67CCD7492560A28515CF8E37F12865631D359DD3EAA57102956770F3B56B8AB93D60A6CD2D9946856F8F2CDE7EAC07E0D41AB96D06CD6A1861B8CDC7BADFBF359221CD4110B3CFD8BD5F4F68AA01E4438AF0080FBBD32BC16C4C739E1756831F3B8E6E1FA4B45B06BE642D06A27DE22E8F9A6E6BEC1AF72E38CDBBA8179918994F1D9EB81DA29CC6833DA02343A97798A9AE668D81C4BB7994C37002C8B65A2C071122F9767CA88A4D0040317F4C0881B5A773B80EBC390BE3AECB0650E780E48AAAA5CDFC8B6BFE80ABBB18B9797612526083E1C1F88B6F006BD07ACE5B89BEE03F21DD686324646BBEE5B6B20B1D932F2AEAA6F345A52E8C6330582DB34680C18272EF8D00375A48E068322DF741A1B92A806954BD0931DCDB9D298F489AF0B9A1B8FE7A345A18D85BEFF53EAE6D9FF8CCE204B9F060D439C867ABD8080B0F917EB5371CFDF9E01AB35265ED89ED04FDC0C731D8300E88C05899F446EB4336EFEEBD3278CAE98EB1E0610E786213173A5D36C417E79282243EEFC7DCB7735A037AF3B14A656FA0B5FC424376E159917587033F47E154CE5503255BC8AF506C17B28DFFB6B789D2FC200E64CC4864DD9EECA89C8E61C028A0968E25649771601D0B3A63A9FBBE9386ACD6177981BE9569FA189F7C829F06255C97FE2855166CA354310D35562A7B84E4B37B029E7FDBEBE89D97B496E507D62A1D9F436CD8887A695A35D84EF21CB303B8F60B9EBCE7AC6EBFDF0DC130647D856D05D36CBB23DE4ABDD0DB085FC572EF37DFFACB40BAA707CBAE5784E88D30FDA564D10AEA1FCE1B743F1D3A9014C28A7FF49395F70F2117F21CB05EB79310852EDC1A7DC458C998F1951DEB16F7FCDF3022AB81E936E7FE60C3F306B91989491EE15AE53287ADCF48A061DEAB9B006795032EA6FC8296089F0AA2B74027A966747CF8FFA0341F8C4DE4A0DE57B7BBAD8881257E0216A7B71635B0CFFA4EC3CA11E6DC154B3A572669FF41E522D49D8AB897CB7A08E427CDA1A65DD9FFBD0D11F0066FE33A9EA4C6053568CD53920F3199629BE7FCB3D438989CAA29A9AC4AD9B5304BAE329A9AAD1C6B5EF3F589CB1418CD65947F5F71306CEB34BEE3B1BF51D58B8C5BCAB4FC7613C456AEE3DA582F5A9B8139FB5C7312B30B936647B3D05590222FC5FD3F8B0C7F21FE4808D417FB9A62AFAB8540EE0D5B2D0F4ABBE5EBFDF84CDE23CFCFE1B298741561B0F6D5827DE3E1694DE192E666BE155C43679AFED65A739885EB217ED657CB19DDDD107F86B05C890C874A3526C8DD6D0AFC2DD2B4D6FEC78E0F8B16799D0347D2319E01C955F783CB2692906F74B26899E4D8A12EFDBA63EAB39867BAF2C81CA4E4D5967D0BADB35FA4A9658E566F2335C29C5823184FE9D0547CAC1DE9AE56AA84B6A152C038BE0811DBF6ACFD67C58CF0B11A8ED961AB277B9E8D6C5977B7194BF7B589DA529CB662AB60F1DA30452144DBEDB1D6DF42C86D2964ADA558CCB310A225CA3DF01087CF1E13061F5803B28CEEB0ED50122DB27DD98159BD0E45B9A906700785EFF229449728FAA8C6CF032F41E518851CFE821E344B73BA375EB506524BCC8AED212E83958C3818D18DF6BCAD5F221D646FADE0864E72D54AA18AD458543B14E50430F4C14AFEB31A21D29554105422525ED82BEA37BE31EE98FB982F0D74C9A27E42F277C2BE34C42394CC7A119562928A86A231C77C9E8CFBB2E7A8FC05125F569E047B70000F539A8CCBA02A4AE38D39CC8D89C0A8C9410DC544973E31D89305D7D6192AF4CE44DCFB1D7C300D0403EBE0402A26F472E0AD0882FE1D6A896DF351C5578EBC93C93A59532A64E663CD724FB194EE5CF8306AE11FE9D725E74AF8544435E91832CC3FF058EC5E080FADB0F011E275233F3BDEE142C316E196DC3793B0637840CEB2BB88FB81B6471590AF7E6E4E83C96192E7D4D88473AF7835ED4D1C10B9DDEF98461CAC5E58BFDF9FA1C59FFD930D7F197252155D228CD72B7431F045590020DF090E42D071A10A8F94B3B90BC89918ED2D035CC5D86798B8A1D18461B722E822001353AA9FE5E7309393D8DC7C8A2E9CD058EB1DCFF15FBD4DE8724E9700EA74B620AA86C8943E67A93C4C21BDC8D1482D98792BD7CB919A90E7838618703132279794175BAC10C0D56AF929D9579BD284C0DD33677601C9E3DA61DA0947184AAAA2511A8A725CFF8BAC98E64ABEFBF5583452A0A959EDF0CC003DD03F4A0944AF05337A4F0BFF4EA10D91E7220A3162E0B1B89B6E62C4438EDB91E92DD167F3DAEC06CA9221256504ED46352A55C436570F5C039E78407A77960FB74C14BFB73853C124EE49B64D4C6FB92D9B4B6A5BF2672B6A9F52AE04988566A33831D3AFBF5D6BB219320AE79FB307F0362147002FB84FF566604A831AB16A8F3368D9B553EDF96542BBDE3E1644A4ECDACA10AB9115C5400955FCD747CEB8DA1C7136778DEA3F08E46C28E986BFC171005DD5DC50DA8196D92077A1AE4DD861ED58844E5E3C61270FAB269E0F7DC64FC82B0071AA577AF8A08DAB8895FBD69B42061359F4716EAE58011F783A575534EFCA0BED47DCEC6D1B8C205C5ECFE25BA181D6073D8226913ACA112C5CF4E9F1B0D74C302A77BE130890B886A9D2E9A1537C9FCFF99754C99F367CBF6F0D4176D755BB07444434824DE47DEEEE2895C44F9B4EF07F7C08D8EC626A09EF1F2E393496A6DE17637627F29CFA45496B8553007ECD36CDEE244F52A0F730B763F51412FB6740BFD4E66F5AFCFFF0BAEF607AF2F1B82C204F39F1BA66DF7ED11BA286E5E2589EF7ED399692AC6291BFCAB577357657ABC4A99FC07135FF8D20A3B3505A42363F1EE7307E03033BD87F46095653B0E4C2556A22FFD960B0C98CA3CDEF8F0AC81FEF7FADD42901AF6BF1F81C074D141FCAEF5D58CD9A966D4D68EFCB1F1E6274DB019AF7C557353257F08F6AFBA5E6A755B61D8DCAA5EA75FDA39EED1C7FB80F6E1D0D423C6386CAAC330A39CDCEDEC144A51FBCD499E68F9586BC84E21DBA0A5CCD4F4D6EB2628350DC2DEE38ED0F7902CB23B20FDD5B42374A3BD0F9AAD014576F0997B92C67D389519B3A5C8FD6A405785A3BA538283FFB7691DD15D91A272AF1217D6B45E8AB66B34A6BA9DC5757111A0BC427241AE9F5526DFF9E19606CC39165D812CCEED9DC8C06A650FBFCD22BE9BE0659C89FB04D57099B7F1F77088822B95F5D52C3C488DD762726E278EDEF4F6BC2CB4386A05548D26AB8209BD152C80DFB79589FCA1121F4C54E89E7B4D5954F3F1B8BA47441C56B3296868749DBAC87826EDAFDBF571387A9A1078A1D1993088C4164DFE207986690719761BBBEC524787EBF7F4112DA88E1CFC91E552F5A180DAE51A9F7A5D93D51140B8241FC95CCB1FC8F297FC5A06DDD1B374E7AA91A63C889768991A9BB5DD8B74E84CDA544CD927C130E24F8979619DCBFF2751357BD175CDFE64FC7A1591C6CCC766C977562F59AF2B9DE3F39B6A02E3046135E2EE7DC0C37B8368D911196BA149971666B5B506F59403517DB085D995E68E13FBB83FA20F3B7BB13BDC5C8F9D1C7966FD6B65835524A886717FBA47EFE16C088D062D2B7EDD19B5E27932E8D77D70DDB23BF8B56B88ECE9863E77893F4C0A1DB0A3A401E3B87C1BFD8E4D03BA11890D34AA30786786EC30A4D31C1EC748CDC645A97121EE114B69B8C126E37BB29663A41B296BD304CCB48153B35869D00B71C4F6E68ED3BF12357782AE44F6DAC84D07A5974DF55EFC7A87790FDB1F337A73F3629999358FF8B4A870B79EE8295EF3207A80BA6931867E7F494785A5037AAE89686C0EBB56745FFA2D7C1323AA1EF3CDED62F375F49F39CAA605065557BF007E710036DF95B2BC143326EBC9DDC161D9141B22126AD4997F550A2604D81308C9F89B53A479247086DF46FBAED7CB5E8F60EF95FD2AC2953C27CD507EAD91D98A1D670418221AD7167ED32C13D9790F1513BB94857449896D3803A459627136D0491C8A3D2E6C70CCE2C4A833D1D5096E25D2B40D373FEE69772EC4240899537B04200C4043AB34369DC9D14DB90F226B5A3A21B41FFB009D62EDA52E9BDA4F9C2C1B21CFA400815D9F2EF9D5C7351D517579FE1D05FAE186CEC91EC1492C17FDFD3B4FA96AB3050744594EC24D54871D2FA7106E61CCFA250276C994DD8ADA5DF393108209CBBBF0181A83BBA72D384552736FBBED739A191249097E34F9F257A5735DEC7D4656E0E20B1F3333472EDD9BEBEC42191C14A9D0AE07FE64EFCF0E92847B44587B49A97571BE77A219DCB13D80323090D52530F41D4F8427FD12B364387D1E7A78CFA95C9A558EC26B06244A2B5E8ACECE59C09EFF1BBE3C376D2455FAF56FC84E36FBD2CE3E4E2331C8FF89641F59CEB04A2F95AE30E097654725C172E99F35C8DC2CB3F5B344F857ABC21F4FB511E1D34BDB5BF1A170D96DA15892805494301D5C7C09D158775330D63E3225939DB94C5550C1B752BA67DB4B878AD44DEC2453B3E15F031C38E875FF4DDBEA521D9C4F0F5101B8D6D19EDB989ECB83EB0A0CABD8E5AE400EBC7AD177D83A678B7CCCEA9C1FE5F6EE29F574DAFC94C7AF693095B2E648372CD1774CD16E8002F647F4044A99034361059B50D4292AD7615E1623546F80FE3343A55E4128A536CA793A28A60E05CC9EACDAB1866BDFAC68F50B8CFC0FAD16596483B979BE38EFF98E46C8A5A500228BE19160AA3BEC642CB8C4AEF0376A49EBCBF38B7BB875F811C869FA3370A635A9AAC13E6242FBF5A1529E63069E0A5C8A0F40C506234C31718729148ED76EBB224FF6312F5BEFE1A78B37BE52A799FE802E381EF48BAD187053ECCDE29823D7C50F63641B9FCEA0071F5D47718B07749CB6B3D2076EE1883D9E6C78BFF98ACFF58F383117F52B06763A7A42295DB83CAEB5C0C5F0E4F83745CACA043772FDFC60E66CF649AC62256063F660612D703A8389033103F5D52C7510992C0D62A47F389772EDCB794C3C669E1D2BA36B11C2F6E53BD5C521947A41431A262B356423F401A67956FEBE1652925F513575E962D44526851A0BCFCFEA8494B4E7EB41A45AD909B2DA69DAEB031DB8AA2DF8B04F259563AE3FB7108344DA84AC0227997730DF13E539988CDEA5BC92AD377A534507DC56D0B7AD537E47881F8FFB1A68CD83F6AFCE0B55C79291EDCACBB62144E1819A629C0416EC3B0270E335D2258136C793441DA62C41D2968899C1795BC831FE8630B12B8C7DE04102094D2AB2BAA903CC74F40E03C3EEFB7183C98890B9441C1A4C269D7FC29E457F75A6B8EAE355D785A76A18E733222E9E4E9DA91CE2FB94FD833F9EB875483C195FAA237B2E57111BAE963B2E49183EED322F20FC75279CD25E4D52E9A362EAA90439675554E7F5246CD1D382EAFC5157632E1C3E576EEE332F013450AFF241D4F2F510910BD5C46CA30158CC5F853B4F70C48A45B5DC98EC76D039BBDBB22997C92637FD31E5895DD22C9B531B92493047AC6708B633686E961570738359291CFCB3751B4537E30DB10CF000129C92A34E2D5FE317E70208C19374F956885F9A1D46C5E565C9A9CD0078EC3D7CDCCEE2E36493AF6E5DE85F1438374BCD2C79694680544BE381DC9CA8FD9B1A4CB136D71B49962EBAF1B97D3BE93E06410D73DE8335D7AD3316B46BC502C46F815B405D41EC9B286C3CC333B3CF13ABD7BEACEE9A5F6E189F8D79997F842C93A19BB33E3FC355E10F14CDCCFEF4F94D846281A9DF73D13A9F12BA3868C3B9EFFEC1DD54F9482E9364C47A329C8276E9C883CA6641BC040247E051987235B5923AB3788AB8902F0F144A0361EB2A60D8FE10E058D47F2017B2FC4BB4912F3F355A26630A99B63B2325153DE1EF5EF776CCD4A71001D3FD37EB21C7D952F5BA975D6FDFF543E6C26F60B6EA6D0BD9FB0BCA632579E83418597E1D16939206384402F35EAEA05C9DB238C4B01253D213CEDFCCBE34BC4827D0189A649045ECFD2745789995511643CD27DE198BFA159D0AC1F44DFAD68BB8DC0B00E0D939B0AAC11148663AD39BAE608FFA7D04651459F5E0614E523B250A09E2E5FE7BB7AB79F820F2EABB211B1BEFFD408B9A52C415EC71D49A0429467E86579E5A254EB2F2695AAD73F4837F71A7DAE89EA38ED173C9415F01F7364EE370743D40208793D117DBF667D67F2819236B998011A66E479FDA688991A0E5A5DB1716BB4EFE6382490F79435A275B0F2CFDD239B84C82823827B6BCAEA7106A1BAE777C942843642F69611FBF866B997F8B15722954BB6A6AFC2641B22B492FC4D60E88FFF6236ED10CC607B5FB9CB9300D9BB51226C64C6E34CD39A8C0B84ACBAAF989C2A0DFFD25560A29089829C99685300B4214E578780AC799DDDE046D0030DCA36FDDF88858CA8B761334536E0D84FE3814316059C582F4D60FCCE1D56745CB8924E95CB51CAAB91B4DD0675FABC2E60DE809705F28E87F2430997E24E428A5294B705D670BFA13A6EB72F96294C0EFA1D22DEE52CAF2BC32BEF06BA4A042C6E7A3DF9D5AAECD0FE0F7839043BE95C2130EA74EA39F60572D60E8A3C31C3B747F132F632EE9D5124B980C8BA0B648EB6C9F7E1A54146DB53BC86AFE20FD5F833C3DE7CC74EA42A49A08AC16002F138D0A608558F5809CA0380A85AB2D4A8EBFD0D6D76BD220B86830A3BDC616B0A98F63C30EF22FF692FB7074DE940B111621F048A524A8FE6AA6E81B676546834D533B6E8F6B9CA8950FE63476217D4667FA1BA6FD4ADF6A440AC1B121E0A7D1ED6955D2A3803AF0ABCD357C3BD3E0BC198F5F83B4858A51DBDA9EA3C4D790B02F86B38404271E0BFCD8F35C46C7706EFA0BF217406FC515A83725D6E767A061036C84B6407EA055A3D4B0198C5BD4C91B85FE2F00FAC1C4797BABFE67DD7C9D947C4918A7C80515AF4765BEA326B346852EEFC8E61887817125617C798F642F0E31C1CB7F6254F9DEABFDAB8A31EFF188DD29E2F79F973DE937ADCB6BB03B9F1E5D37C89E4"

livebe01 commented 2 weeks ago

Great, that's the same signature that ACVTS Demo provided for tcId: 1. The only reasons I can think of that may be causing your implementation to fail for tcId 1 are 1) an issue in your implementation of sigVer, or some issue with the key generation process that generated the key pair used for test case 1. When I run test case 1 through our implementation of sigVer, the signature verifies successfully. If you'd like to compare, I could print out some intermediate values for running the sigVer process for test case 1.

crypto4a commented 1 week ago

Hi @livebe01, there was indeed an issue in my implementation that I fixed and I'm happy to say I'm now able to verify across all SLH-DSA vector sets (i.e., KeyGen, SigGen, and SigVer with either SHA2 or SHAKE). Thank you for your assistance (and patience!) with this.

crypto4a commented 1 week ago

As usual, error was between keyboard and monitor... ;->.

livebe01 commented 1 week ago

That's great to hear! Thanks @crypto4a