mirror of
https://github.com/saymrwulf/fips205-source.git
synced 2026-09-03 19:53:49 +00:00
Merge pull request #3 from jonmon6691/add-acvp-tests
Add test module for ACVP known answer tests
This commit is contained in:
commit
fca844d470
5 changed files with 2360 additions and 1 deletions
|
|
@ -25,7 +25,8 @@ sha2 = { version = "0.10.8", default-features = false }
|
|||
rand_chacha = "0.3.1"
|
||||
hex = "0.4.3"
|
||||
criterion = "0.4.0" # For MSRV 1.70 (dated)
|
||||
|
||||
serde = "=1.0.210"
|
||||
serde_json = "1.0"
|
||||
|
||||
[features]
|
||||
default = ["default-rng", "slh_dsa_sha2_128s", "slh_dsa_shake_128s", "slh_dsa_sha2_128f", "slh_dsa_shake_128f",
|
||||
|
|
|
|||
397
tests/SLH-DSA-keyGen-FIPS205/internalProjection.json
Normal file
397
tests/SLH-DSA-keyGen-FIPS205/internalProjection.json
Normal file
|
|
@ -0,0 +1,397 @@
|
|||
{
|
||||
"vsId": 53,
|
||||
"algorithm": "SLH-DSA",
|
||||
"mode": "keyGen",
|
||||
"revision": "FIPS205",
|
||||
"isSample": true,
|
||||
"testGroups": [
|
||||
{
|
||||
"tgId": 1,
|
||||
"testType": "AFT",
|
||||
"parameterSet": "SLH-DSA-SHA2-128s",
|
||||
"tests": [
|
||||
{
|
||||
"tcId": 1,
|
||||
"deferred": false,
|
||||
"skSeed": "2F896D61D9CD9038CA303394FADAA22A",
|
||||
"skPrf": "24AC5EC1D86A989CA2196C3C8632419C",
|
||||
"pkSeed": "1A05A42FE300E87B16AEE116CB2E2363",
|
||||
"sk": "2F896D61D9CD9038CA303394FADAA22A24AC5EC1D86A989CA2196C3C8632419C1A05A42FE300E87B16AEE116CB2E236358E2C3E62632C9DE03D08A535A0EB7E7",
|
||||
"pk": "1A05A42FE300E87B16AEE116CB2E236358E2C3E62632C9DE03D08A535A0EB7E7"
|
||||
},
|
||||
{
|
||||
"tcId": 2,
|
||||
"deferred": false,
|
||||
"skSeed": "87DD614EA188940D93C7DF9943CAA283",
|
||||
"skPrf": "CBDF2CCC4940E7007B7B6C799E95E160",
|
||||
"pkSeed": "BBACA7B93FEC1A097E115F10D18E6611",
|
||||
"sk": "87DD614EA188940D93C7DF9943CAA283CBDF2CCC4940E7007B7B6C799E95E160BBACA7B93FEC1A097E115F10D18E66112AA087F0EEED95BE3AB301EBC812406F",
|
||||
"pk": "BBACA7B93FEC1A097E115F10D18E66112AA087F0EEED95BE3AB301EBC812406F"
|
||||
},
|
||||
{
|
||||
"tcId": 3,
|
||||
"deferred": false,
|
||||
"skSeed": "0436B480D04C4C47F5ECD1E4B94F1039",
|
||||
"skPrf": "88C5F804913FAC77A96572CDC26F6A92",
|
||||
"pkSeed": "F18D59D50B6B13F71821526F3AA800A8",
|
||||
"sk": "0436B480D04C4C47F5ECD1E4B94F103988C5F804913FAC77A96572CDC26F6A92F18D59D50B6B13F71821526F3AA800A8CDE5CCB604485DF0C6F14CD64B60979C",
|
||||
"pk": "F18D59D50B6B13F71821526F3AA800A8CDE5CCB604485DF0C6F14CD64B60979C"
|
||||
},
|
||||
{
|
||||
"tcId": 4,
|
||||
"deferred": false,
|
||||
"skSeed": "B9341D201D49B337C84E6AC2C26361E1",
|
||||
"skPrf": "F5DCAB582F404FE89739DF4EC64ECCDD",
|
||||
"pkSeed": "04519D0D7C1AD543CD1B479602E41784",
|
||||
"sk": "B9341D201D49B337C84E6AC2C26361E1F5DCAB582F404FE89739DF4EC64ECCDD04519D0D7C1AD543CD1B479602E417848AEB88695D05F531A8415A4365B62983",
|
||||
"pk": "04519D0D7C1AD543CD1B479602E417848AEB88695D05F531A8415A4365B62983"
|
||||
},
|
||||
{
|
||||
"tcId": 5,
|
||||
"deferred": false,
|
||||
"skSeed": "CBCAEC354573E8CEE1373B7ACED67CDC",
|
||||
"skPrf": "683ED4491E17EF1DFF9A9163FE7BCF74",
|
||||
"pkSeed": "D91E0DF4756C799ADA2A0CF1B1AADA1D",
|
||||
"sk": "CBCAEC354573E8CEE1373B7ACED67CDC683ED4491E17EF1DFF9A9163FE7BCF74D91E0DF4756C799ADA2A0CF1B1AADA1D1FDDC3692E8909F2185E11654DC84DEF",
|
||||
"pk": "D91E0DF4756C799ADA2A0CF1B1AADA1D1FDDC3692E8909F2185E11654DC84DEF"
|
||||
},
|
||||
{
|
||||
"tcId": 6,
|
||||
"deferred": false,
|
||||
"skSeed": "1D92B6CC53E5BB08841B2669F1FB481C",
|
||||
"skPrf": "62DB8F494E1BAC12A6C6163142842A33",
|
||||
"pkSeed": "771C182FFB096207DA6476874EBDAF15",
|
||||
"sk": "1D92B6CC53E5BB08841B2669F1FB481C62DB8F494E1BAC12A6C6163142842A33771C182FFB096207DA6476874EBDAF158C0143ADBD0F66057A5180C96467D31D",
|
||||
"pk": "771C182FFB096207DA6476874EBDAF158C0143ADBD0F66057A5180C96467D31D"
|
||||
},
|
||||
{
|
||||
"tcId": 7,
|
||||
"deferred": false,
|
||||
"skSeed": "94B11B26E2EC430F413F353FAE96C144",
|
||||
"skPrf": "915E7EC84E9C786C895593B859BDB0ED",
|
||||
"pkSeed": "D54CC085CB4F4265F8288A9D67AE5806",
|
||||
"sk": "94B11B26E2EC430F413F353FAE96C144915E7EC84E9C786C895593B859BDB0EDD54CC085CB4F4265F8288A9D67AE5806AC638AD976A1FC8E2C7C5B9DB2EA0573",
|
||||
"pk": "D54CC085CB4F4265F8288A9D67AE5806AC638AD976A1FC8E2C7C5B9DB2EA0573"
|
||||
},
|
||||
{
|
||||
"tcId": 8,
|
||||
"deferred": false,
|
||||
"skSeed": "9078F099C6420C6BB1303977029B1E1B",
|
||||
"skPrf": "AC048A4375F3C48862F74A6CCEDB5BE4",
|
||||
"pkSeed": "755E624791FBFD27CD195CE3AA32C62C",
|
||||
"sk": "9078F099C6420C6BB1303977029B1E1BAC048A4375F3C48862F74A6CCEDB5BE4755E624791FBFD27CD195CE3AA32C62CD9030C131CA25C8C442C4AC0B27AE548",
|
||||
"pk": "755E624791FBFD27CD195CE3AA32C62CD9030C131CA25C8C442C4AC0B27AE548"
|
||||
},
|
||||
{
|
||||
"tcId": 9,
|
||||
"deferred": false,
|
||||
"skSeed": "E0C67D9FB2434E27165C861C0F1040ED",
|
||||
"skPrf": "58C13B7F5E9517D000770BD3E88FBDB4",
|
||||
"pkSeed": "8CDF5F1CC1AA770A8BAFCF1B8C5C843B",
|
||||
"sk": "E0C67D9FB2434E27165C861C0F1040ED58C13B7F5E9517D000770BD3E88FBDB48CDF5F1CC1AA770A8BAFCF1B8C5C843BA659B85D99CA18F555B8452F411B519C",
|
||||
"pk": "8CDF5F1CC1AA770A8BAFCF1B8C5C843BA659B85D99CA18F555B8452F411B519C"
|
||||
},
|
||||
{
|
||||
"tcId": 10,
|
||||
"deferred": false,
|
||||
"skSeed": "CCAE2481CECC4A55AA2AFE4874B0CE50",
|
||||
"skPrf": "1984D48423FC2452F24F49B2A68EF9B8",
|
||||
"pkSeed": "D66807ECBFD2DC999D274D0D6414AFC3",
|
||||
"sk": "CCAE2481CECC4A55AA2AFE4874B0CE501984D48423FC2452F24F49B2A68EF9B8D66807ECBFD2DC999D274D0D6414AFC3DFBA899A4F7799CF74E98DC1C82A26AB",
|
||||
"pk": "D66807ECBFD2DC999D274D0D6414AFC3DFBA899A4F7799CF74E98DC1C82A26AB"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tgId": 2,
|
||||
"testType": "AFT",
|
||||
"parameterSet": "SLH-DSA-SHA2-192f",
|
||||
"tests": [
|
||||
{
|
||||
"tcId": 11,
|
||||
"deferred": false,
|
||||
"skSeed": "8596C97C522D258038765AC80110A584A4E342D58149EBFC",
|
||||
"skPrf": "763CA88D40D68C201C76C2F8DF0908A39F27009B7D3B1E6C",
|
||||
"pkSeed": "BD409651BF5E717D83096506B715C3543285AA83535F7743",
|
||||
"sk": "8596C97C522D258038765AC80110A584A4E342D58149EBFC763CA88D40D68C201C76C2F8DF0908A39F27009B7D3B1E6CBD409651BF5E717D83096506B715C3543285AA83535F77433EA3D6D2E7EBF150C2F21DAD9FB71977C83EC6D59C36E0D4",
|
||||
"pk": "BD409651BF5E717D83096506B715C3543285AA83535F77433EA3D6D2E7EBF150C2F21DAD9FB71977C83EC6D59C36E0D4"
|
||||
},
|
||||
{
|
||||
"tcId": 12,
|
||||
"deferred": false,
|
||||
"skSeed": "1A4FF9976D6720AE533CEAA42BFA31D64CFF2BBF211FAE45",
|
||||
"skPrf": "A0E04C370D2316237C23AC568C71C47A4060D2A2604565F0",
|
||||
"pkSeed": "01FCB078DFB0B9D104AA9EE55A30045F4C4441CA0509A050",
|
||||
"sk": "1A4FF9976D6720AE533CEAA42BFA31D64CFF2BBF211FAE45A0E04C370D2316237C23AC568C71C47A4060D2A2604565F001FCB078DFB0B9D104AA9EE55A30045F4C4441CA0509A050F95C73F998133EB999FABC8E460039F89C640516FE9482E0",
|
||||
"pk": "01FCB078DFB0B9D104AA9EE55A30045F4C4441CA0509A050F95C73F998133EB999FABC8E460039F89C640516FE9482E0"
|
||||
},
|
||||
{
|
||||
"tcId": 13,
|
||||
"deferred": false,
|
||||
"skSeed": "F52594147A30CFE72405B4A37FE44EE4AC79E2F99FA16ED7",
|
||||
"skPrf": "DD8821C5F2001A9F8DA4EF337B847820F7C67D2E7C6DC0EB",
|
||||
"pkSeed": "F7F189302A5FEC87677DFD7438B3AC4942DBF16E581B55AE",
|
||||
"sk": "F52594147A30CFE72405B4A37FE44EE4AC79E2F99FA16ED7DD8821C5F2001A9F8DA4EF337B847820F7C67D2E7C6DC0EBF7F189302A5FEC87677DFD7438B3AC4942DBF16E581B55AE4BC5B38E0B38BCEEBAF8030AF40CE770BBC62491B2D35D93",
|
||||
"pk": "F7F189302A5FEC87677DFD7438B3AC4942DBF16E581B55AE4BC5B38E0B38BCEEBAF8030AF40CE770BBC62491B2D35D93"
|
||||
},
|
||||
{
|
||||
"tcId": 14,
|
||||
"deferred": false,
|
||||
"skSeed": "EA576B62E010EE33476FC31D4D4C29C69F95BE9C5499F87C",
|
||||
"skPrf": "9B07007F6D5E7FE49531ECD46A86A4AE8C970ABBC87E4288",
|
||||
"pkSeed": "4673053C789EC091BBE4CD405ACBAEA110732050494D12C6",
|
||||
"sk": "EA576B62E010EE33476FC31D4D4C29C69F95BE9C5499F87C9B07007F6D5E7FE49531ECD46A86A4AE8C970ABBC87E42884673053C789EC091BBE4CD405ACBAEA110732050494D12C6B7B4A937B7E14E56E31A0734799C3351BCF9860A40092929",
|
||||
"pk": "4673053C789EC091BBE4CD405ACBAEA110732050494D12C6B7B4A937B7E14E56E31A0734799C3351BCF9860A40092929"
|
||||
},
|
||||
{
|
||||
"tcId": 15,
|
||||
"deferred": false,
|
||||
"skSeed": "EC62D46F75C6E8992F2F476A2A53A5A51C81483389D9751D",
|
||||
"skPrf": "99E75844A2AB1F165B2CC21D41C04B68DA582CB71CD5B6BD",
|
||||
"pkSeed": "D611EE861FC2784D796465727CCBEC12482734D160A58075",
|
||||
"sk": "EC62D46F75C6E8992F2F476A2A53A5A51C81483389D9751D99E75844A2AB1F165B2CC21D41C04B68DA582CB71CD5B6BDD611EE861FC2784D796465727CCBEC12482734D160A58075776AFDDA874CECAA448A3433E04398D642E9C8905A0373A8",
|
||||
"pk": "D611EE861FC2784D796465727CCBEC12482734D160A58075776AFDDA874CECAA448A3433E04398D642E9C8905A0373A8"
|
||||
},
|
||||
{
|
||||
"tcId": 16,
|
||||
"deferred": false,
|
||||
"skSeed": "B1E8AFF7312F78233309F78637A73CCF64A8C028505E6BBB",
|
||||
"skPrf": "55F32DBD36AD67435220D7D565A4CF6E8712C796CB5432BB",
|
||||
"pkSeed": "4B5DA352B7C8202A07CEDC6BF695AC820BDFE0BF0EFC8F6F",
|
||||
"sk": "B1E8AFF7312F78233309F78637A73CCF64A8C028505E6BBB55F32DBD36AD67435220D7D565A4CF6E8712C796CB5432BB4B5DA352B7C8202A07CEDC6BF695AC820BDFE0BF0EFC8F6FD07FC99362ACDE2E6DCC516F6E81D78A87F837DD19A17B55",
|
||||
"pk": "4B5DA352B7C8202A07CEDC6BF695AC820BDFE0BF0EFC8F6FD07FC99362ACDE2E6DCC516F6E81D78A87F837DD19A17B55"
|
||||
},
|
||||
{
|
||||
"tcId": 17,
|
||||
"deferred": false,
|
||||
"skSeed": "7ACC836552CB13DF6BCB6D879096049D70DB84D69B0C0561",
|
||||
"skPrf": "9F4C352C62C0A3EF6A32EB5886AAE6B399E22CB5835384FE",
|
||||
"pkSeed": "F41344C3A0DDFD2171BB5730529D9138DE09FA64C50B973A",
|
||||
"sk": "7ACC836552CB13DF6BCB6D879096049D70DB84D69B0C05619F4C352C62C0A3EF6A32EB5886AAE6B399E22CB5835384FEF41344C3A0DDFD2171BB5730529D9138DE09FA64C50B973A5128ED5F8EC6D3CEF8CC509C373AADA35A8BCFC1B7D7C8AA",
|
||||
"pk": "F41344C3A0DDFD2171BB5730529D9138DE09FA64C50B973A5128ED5F8EC6D3CEF8CC509C373AADA35A8BCFC1B7D7C8AA"
|
||||
},
|
||||
{
|
||||
"tcId": 18,
|
||||
"deferred": false,
|
||||
"skSeed": "622AAC576BED88A6FC0A49742A45E56AD0E67A723B70128F",
|
||||
"skPrf": "B18DFE10C0F227A07ABBCEC4AE29269E73D920F2EF70B5DD",
|
||||
"pkSeed": "D8385C204E8CD20C4ADEF709BD5D0DE8E34930F7C474D886",
|
||||
"sk": "622AAC576BED88A6FC0A49742A45E56AD0E67A723B70128FB18DFE10C0F227A07ABBCEC4AE29269E73D920F2EF70B5DDD8385C204E8CD20C4ADEF709BD5D0DE8E34930F7C474D88690EA2F578AD9CEBB99445E1DDDE73409D17070EE18BD7BBE",
|
||||
"pk": "D8385C204E8CD20C4ADEF709BD5D0DE8E34930F7C474D88690EA2F578AD9CEBB99445E1DDDE73409D17070EE18BD7BBE"
|
||||
},
|
||||
{
|
||||
"tcId": 19,
|
||||
"deferred": false,
|
||||
"skSeed": "66E7294229E399F08EC703CB065CFE3E8DF3B20290EDDC57",
|
||||
"skPrf": "263BC7806CB707B8D0094FF2E2B6B031CB033C649D0CA598",
|
||||
"pkSeed": "A19CE54D1BD591FB022955A65CF786F52E0934C0B9C73A58",
|
||||
"sk": "66E7294229E399F08EC703CB065CFE3E8DF3B20290EDDC57263BC7806CB707B8D0094FF2E2B6B031CB033C649D0CA598A19CE54D1BD591FB022955A65CF786F52E0934C0B9C73A58B8D70FF06599C49BE4A523587D0B9E2A89896407946842BA",
|
||||
"pk": "A19CE54D1BD591FB022955A65CF786F52E0934C0B9C73A58B8D70FF06599C49BE4A523587D0B9E2A89896407946842BA"
|
||||
},
|
||||
{
|
||||
"tcId": 20,
|
||||
"deferred": false,
|
||||
"skSeed": "A971FE70B6C546DC6D7B14AB1969BF27DE526ABA30CB72CC",
|
||||
"skPrf": "F89EC48E4A957EBB7D29196485F79B9F29913E723DB3A748",
|
||||
"pkSeed": "C309F51C0F7A3F2EE86C14B612E72201CD688296DA721E57",
|
||||
"sk": "A971FE70B6C546DC6D7B14AB1969BF27DE526ABA30CB72CCF89EC48E4A957EBB7D29196485F79B9F29913E723DB3A748C309F51C0F7A3F2EE86C14B612E72201CD688296DA721E5755E4318BB95F2AE4E39C4A542FCFBA32469C1A6F0BF94429",
|
||||
"pk": "C309F51C0F7A3F2EE86C14B612E72201CD688296DA721E5755E4318BB95F2AE4E39C4A542FCFBA32469C1A6F0BF94429"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tgId": 3,
|
||||
"testType": "AFT",
|
||||
"parameterSet": "SLH-DSA-SHAKE-192s",
|
||||
"tests": [
|
||||
{
|
||||
"tcId": 21,
|
||||
"deferred": false,
|
||||
"skSeed": "BC9543F91D3E83DF793ACC0BBCDF54810691C770F2DC5DAD",
|
||||
"skPrf": "3ACFA79732CDB71D4EF1E9B2ECA1A490F977CB0CCE3AAAC5",
|
||||
"pkSeed": "F6C64E2B662BE5DDB6F9C28CC62C20C7697EFEDAAB1C9028",
|
||||
"sk": "BC9543F91D3E83DF793ACC0BBCDF54810691C770F2DC5DAD3ACFA79732CDB71D4EF1E9B2ECA1A490F977CB0CCE3AAAC5F6C64E2B662BE5DDB6F9C28CC62C20C7697EFEDAAB1C9028AC30C249F75B8B7F44730E5341698853B3F48B5D150C802E",
|
||||
"pk": "F6C64E2B662BE5DDB6F9C28CC62C20C7697EFEDAAB1C9028AC30C249F75B8B7F44730E5341698853B3F48B5D150C802E"
|
||||
},
|
||||
{
|
||||
"tcId": 22,
|
||||
"deferred": false,
|
||||
"skSeed": "BB19BD3E3E76A9E3D90858C8FB5D3889BEBB6A57EE8D2F63",
|
||||
"skPrf": "224DB283DD427067F9CCBED092744F92F872356B530B1C93",
|
||||
"pkSeed": "250976E3786865C55352685E3B5AD116A5DBC72D86FF26DF",
|
||||
"sk": "BB19BD3E3E76A9E3D90858C8FB5D3889BEBB6A57EE8D2F63224DB283DD427067F9CCBED092744F92F872356B530B1C93250976E3786865C55352685E3B5AD116A5DBC72D86FF26DF4401AB0A771D4939458DA6828413157ECD1ACAB47DFCBE24",
|
||||
"pk": "250976E3786865C55352685E3B5AD116A5DBC72D86FF26DF4401AB0A771D4939458DA6828413157ECD1ACAB47DFCBE24"
|
||||
},
|
||||
{
|
||||
"tcId": 23,
|
||||
"deferred": false,
|
||||
"skSeed": "5AC22ABD92253725911FCBAE7CA6FFDB1E24637641FFEF92",
|
||||
"skPrf": "11077C1B8CEB0EFB64F23CFEEA1826C9DA0F687CB25417BD",
|
||||
"pkSeed": "E99334B288B3CCF073A2710E5F84A52D67393428F34199C6",
|
||||
"sk": "5AC22ABD92253725911FCBAE7CA6FFDB1E24637641FFEF9211077C1B8CEB0EFB64F23CFEEA1826C9DA0F687CB25417BDE99334B288B3CCF073A2710E5F84A52D67393428F34199C623DADD23E0E2CE443FE96F4175F9921CC4F83D9B3C31DECD",
|
||||
"pk": "E99334B288B3CCF073A2710E5F84A52D67393428F34199C623DADD23E0E2CE443FE96F4175F9921CC4F83D9B3C31DECD"
|
||||
},
|
||||
{
|
||||
"tcId": 24,
|
||||
"deferred": false,
|
||||
"skSeed": "71ED5FBBBBC90F29EEDFF2377D5984B9AB06F0B83176746A",
|
||||
"skPrf": "70C7A429B4BBE50E2DE7F88C79F5FBB13634A8EDD4014EC6",
|
||||
"pkSeed": "306165FC3BCC234F11BE31EF6A6B05870BFD1C90B534C3B7",
|
||||
"sk": "71ED5FBBBBC90F29EEDFF2377D5984B9AB06F0B83176746A70C7A429B4BBE50E2DE7F88C79F5FBB13634A8EDD4014EC6306165FC3BCC234F11BE31EF6A6B05870BFD1C90B534C3B78CD46A4686F93323D8BACCA0A5D05E8C173B74A14043E639",
|
||||
"pk": "306165FC3BCC234F11BE31EF6A6B05870BFD1C90B534C3B78CD46A4686F93323D8BACCA0A5D05E8C173B74A14043E639"
|
||||
},
|
||||
{
|
||||
"tcId": 25,
|
||||
"deferred": false,
|
||||
"skSeed": "ECFCA9886C3C37D73F422834BD042DCBCBA0F65A460FA48C",
|
||||
"skPrf": "858A96EDD0EA674D8EF2FA900F037CC977A245546EB760E3",
|
||||
"pkSeed": "DCAE3225B8F48C8B8577323EF96222A7E3CE753AB7A12973",
|
||||
"sk": "ECFCA9886C3C37D73F422834BD042DCBCBA0F65A460FA48C858A96EDD0EA674D8EF2FA900F037CC977A245546EB760E3DCAE3225B8F48C8B8577323EF96222A7E3CE753AB7A12973DCDEDEC55E431BDFEB9721A2F4EDFA2743CDF35FBA11C983",
|
||||
"pk": "DCAE3225B8F48C8B8577323EF96222A7E3CE753AB7A12973DCDEDEC55E431BDFEB9721A2F4EDFA2743CDF35FBA11C983"
|
||||
},
|
||||
{
|
||||
"tcId": 26,
|
||||
"deferred": false,
|
||||
"skSeed": "64E52E604A3943E76AE9F552D45D87B0572227133C2FD337",
|
||||
"skPrf": "BB17B8896158C43D33E2781DB91C67D05779DD915FC0B428",
|
||||
"pkSeed": "6E4D30D9EB03050DD3C6C2675E13CAEE0887658B0C5500C9",
|
||||
"sk": "64E52E604A3943E76AE9F552D45D87B0572227133C2FD337BB17B8896158C43D33E2781DB91C67D05779DD915FC0B4286E4D30D9EB03050DD3C6C2675E13CAEE0887658B0C5500C95E8A8BB7781E8C34BAEEFAA7A6BF552F9E8F043A422E0D76",
|
||||
"pk": "6E4D30D9EB03050DD3C6C2675E13CAEE0887658B0C5500C95E8A8BB7781E8C34BAEEFAA7A6BF552F9E8F043A422E0D76"
|
||||
},
|
||||
{
|
||||
"tcId": 27,
|
||||
"deferred": false,
|
||||
"skSeed": "DC3D7C8D87F1EAFE95A57E74291C9087214838A4D5AD9C28",
|
||||
"skPrf": "D09C94155EE349BD4E66276FF48D036251738BD80564AA27",
|
||||
"pkSeed": "D625B1F170C7CB1DFB4942D3FAADD05EABA3DA74113D377D",
|
||||
"sk": "DC3D7C8D87F1EAFE95A57E74291C9087214838A4D5AD9C28D09C94155EE349BD4E66276FF48D036251738BD80564AA27D625B1F170C7CB1DFB4942D3FAADD05EABA3DA74113D377DAF08E58CE6B7F637B5A738F91EE13E33676CB7E18A74C40A",
|
||||
"pk": "D625B1F170C7CB1DFB4942D3FAADD05EABA3DA74113D377DAF08E58CE6B7F637B5A738F91EE13E33676CB7E18A74C40A"
|
||||
},
|
||||
{
|
||||
"tcId": 28,
|
||||
"deferred": false,
|
||||
"skSeed": "3F95FB0C8027C3874FF15A923741A5AAC774A9A44F9FE2CD",
|
||||
"skPrf": "9D86E910C98FE18BFEE4755821C44D1F1ED45907BACA5749",
|
||||
"pkSeed": "11F6CF96451823D150BFB9DF4C05604DD1E50D3211841C21",
|
||||
"sk": "3F95FB0C8027C3874FF15A923741A5AAC774A9A44F9FE2CD9D86E910C98FE18BFEE4755821C44D1F1ED45907BACA574911F6CF96451823D150BFB9DF4C05604DD1E50D3211841C215A2BA97866910F2D2940AF7549976EA3E9440D6D4BA093F2",
|
||||
"pk": "11F6CF96451823D150BFB9DF4C05604DD1E50D3211841C215A2BA97866910F2D2940AF7549976EA3E9440D6D4BA093F2"
|
||||
},
|
||||
{
|
||||
"tcId": 29,
|
||||
"deferred": false,
|
||||
"skSeed": "D21F9870F8D3F26712ECC2D5EB982DD1602FCB6C2AF428DE",
|
||||
"skPrf": "0E7BD420B17BA5308165BA1809327325510640D1EDF73F21",
|
||||
"pkSeed": "ACF9E29061C54626908F41D32C08220846A0FDFBA3DD0636",
|
||||
"sk": "D21F9870F8D3F26712ECC2D5EB982DD1602FCB6C2AF428DE0E7BD420B17BA5308165BA1809327325510640D1EDF73F21ACF9E29061C54626908F41D32C08220846A0FDFBA3DD063699E0D650F7B2668F8B4944EEE549FA62ED622FAD28EBB40E",
|
||||
"pk": "ACF9E29061C54626908F41D32C08220846A0FDFBA3DD063699E0D650F7B2668F8B4944EEE549FA62ED622FAD28EBB40E"
|
||||
},
|
||||
{
|
||||
"tcId": 30,
|
||||
"deferred": false,
|
||||
"skSeed": "95223138089854D78C6F1F2973DACC2701A64CF6F6C324C8",
|
||||
"skPrf": "24A4A86CCADBE27137FEE5E734663BFE4A89BDC5788380B0",
|
||||
"pkSeed": "F1A43BB8ED7590426A3C2DC976462E0196CC4805B9A58E65",
|
||||
"sk": "95223138089854D78C6F1F2973DACC2701A64CF6F6C324C824A4A86CCADBE27137FEE5E734663BFE4A89BDC5788380B0F1A43BB8ED7590426A3C2DC976462E0196CC4805B9A58E658CFD35B18BB919CF87D01F19AC5AE1310FBD3EE785A7BE88",
|
||||
"pk": "F1A43BB8ED7590426A3C2DC976462E0196CC4805B9A58E658CFD35B18BB919CF87D01F19AC5AE1310FBD3EE785A7BE88"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tgId": 4,
|
||||
"testType": "AFT",
|
||||
"parameterSet": "SLH-DSA-SHAKE-256f",
|
||||
"tests": [
|
||||
{
|
||||
"tcId": 31,
|
||||
"deferred": false,
|
||||
"skSeed": "758161EAF6DB91C65F185B26FD490AFD808E987B339D2CBB5B3045BC2ED9A33D",
|
||||
"skPrf": "5A703A6A2A687A8AE1883A9FC957C26E17F5569D5A28C144780DF013C9AA8324",
|
||||
"pkSeed": "0A0EE387983FC9FBE9D5B80A2787C39C6FC1BE3364B9D1FD0C6DC4EDF70E28AA",
|
||||
"sk": "758161EAF6DB91C65F185B26FD490AFD808E987B339D2CBB5B3045BC2ED9A33D5A703A6A2A687A8AE1883A9FC957C26E17F5569D5A28C144780DF013C9AA83240A0EE387983FC9FBE9D5B80A2787C39C6FC1BE3364B9D1FD0C6DC4EDF70E28AA397DC9D892E41418FCFF892135D8B33FBCFDF7FFB82B62C7CD2618E18648151C",
|
||||
"pk": "0A0EE387983FC9FBE9D5B80A2787C39C6FC1BE3364B9D1FD0C6DC4EDF70E28AA397DC9D892E41418FCFF892135D8B33FBCFDF7FFB82B62C7CD2618E18648151C"
|
||||
},
|
||||
{
|
||||
"tcId": 32,
|
||||
"deferred": false,
|
||||
"skSeed": "AD257C491CC25283BA16BFAD348AD683F91BD4A12339C4E2C4F756F3F03110AF",
|
||||
"skPrf": "657ADB93A06C76F9F0100B0B7B3C6455A9E2E52C41D451CBFE3F957973A4A137",
|
||||
"pkSeed": "F06B9E280279B3912BA1A940E5C719709D8ED5EA5B688B96EE80A830FFEC8C9F",
|
||||
"sk": "AD257C491CC25283BA16BFAD348AD683F91BD4A12339C4E2C4F756F3F03110AF657ADB93A06C76F9F0100B0B7B3C6455A9E2E52C41D451CBFE3F957973A4A137F06B9E280279B3912BA1A940E5C719709D8ED5EA5B688B96EE80A830FFEC8C9F5832FE33091B1D4AC0D7FFE9527E799B9AB15FCA8C76D64AE0E6BEA4DE38BD5A",
|
||||
"pk": "F06B9E280279B3912BA1A940E5C719709D8ED5EA5B688B96EE80A830FFEC8C9F5832FE33091B1D4AC0D7FFE9527E799B9AB15FCA8C76D64AE0E6BEA4DE38BD5A"
|
||||
},
|
||||
{
|
||||
"tcId": 33,
|
||||
"deferred": false,
|
||||
"skSeed": "4A069076D50DF0D16BBE4910D10BB2C6802606022321BD7E075767548EDF731B",
|
||||
"skPrf": "EE90825A64BC73B5D2C697FC3AF951B6939B032B50E60C575BC4F5F4100825BC",
|
||||
"pkSeed": "D5006038815A355E244ECC96241F7954CD406D62037AAFEDD08B16FEDC67D7B7",
|
||||
"sk": "4A069076D50DF0D16BBE4910D10BB2C6802606022321BD7E075767548EDF731BEE90825A64BC73B5D2C697FC3AF951B6939B032B50E60C575BC4F5F4100825BCD5006038815A355E244ECC96241F7954CD406D62037AAFEDD08B16FEDC67D7B7F749C0865F5B8DFBFED496DB536DC3A524B0EFB2F4A441831C0F49254C85A582",
|
||||
"pk": "D5006038815A355E244ECC96241F7954CD406D62037AAFEDD08B16FEDC67D7B7F749C0865F5B8DFBFED496DB536DC3A524B0EFB2F4A441831C0F49254C85A582"
|
||||
},
|
||||
{
|
||||
"tcId": 34,
|
||||
"deferred": false,
|
||||
"skSeed": "C05E8F62BFDCA29B1754D62125C976318E3C4DBCA802E33A886BE90DE2FC7ABD",
|
||||
"skPrf": "AA26AB0D6A47E526E6254D3CC647108343FE3BCB5D204343B7039023D58C069F",
|
||||
"pkSeed": "97A998483EAFA5E052839748513B98A35F4CF6B6DEE21173A16A67C1B6084184",
|
||||
"sk": "C05E8F62BFDCA29B1754D62125C976318E3C4DBCA802E33A886BE90DE2FC7ABDAA26AB0D6A47E526E6254D3CC647108343FE3BCB5D204343B7039023D58C069F97A998483EAFA5E052839748513B98A35F4CF6B6DEE21173A16A67C1B6084184C45C4E0AD72BA5866AAB1DE7A09A1DCD49139A9BC44E10F0B2BEFB25649C3369",
|
||||
"pk": "97A998483EAFA5E052839748513B98A35F4CF6B6DEE21173A16A67C1B6084184C45C4E0AD72BA5866AAB1DE7A09A1DCD49139A9BC44E10F0B2BEFB25649C3369"
|
||||
},
|
||||
{
|
||||
"tcId": 35,
|
||||
"deferred": false,
|
||||
"skSeed": "2A6BB633DC8770A6446E889FB933CF6FB644CF1736135FDB0729585656976055",
|
||||
"skPrf": "25D44CD0E6B053F2CD52EB08E87EBE4B7253051A6A9A3E05A84075B0A464B4E9",
|
||||
"pkSeed": "B8D859C55DB29662FE2282387491151DA02A03EE60B48A8FFA059F6B634CE8F3",
|
||||
"sk": "2A6BB633DC8770A6446E889FB933CF6FB644CF1736135FDB072958565697605525D44CD0E6B053F2CD52EB08E87EBE4B7253051A6A9A3E05A84075B0A464B4E9B8D859C55DB29662FE2282387491151DA02A03EE60B48A8FFA059F6B634CE8F388D3DEC0DABBA26142F220E7D1A84CFD742CE13BF18B5064A203CBBF9A0BF1EE",
|
||||
"pk": "B8D859C55DB29662FE2282387491151DA02A03EE60B48A8FFA059F6B634CE8F388D3DEC0DABBA26142F220E7D1A84CFD742CE13BF18B5064A203CBBF9A0BF1EE"
|
||||
},
|
||||
{
|
||||
"tcId": 36,
|
||||
"deferred": false,
|
||||
"skSeed": "0F0B2425EA64A1A467D919425B270AA9FA9719238BB1D6E24AC10AFB14049D9A",
|
||||
"skPrf": "BE25D6A659709DC38097C2E5E9CB72E180B79F5B1ACE5F19126D2ACFAB843ED0",
|
||||
"pkSeed": "426C13BA31E703A60E292158B208E3E9050BBF4AE242159C7F2AEB94E5BAA1CB",
|
||||
"sk": "0F0B2425EA64A1A467D919425B270AA9FA9719238BB1D6E24AC10AFB14049D9ABE25D6A659709DC38097C2E5E9CB72E180B79F5B1ACE5F19126D2ACFAB843ED0426C13BA31E703A60E292158B208E3E9050BBF4AE242159C7F2AEB94E5BAA1CB77CFE536164C7952057B37911C5766CE71A41B0E6B190E6093B930CE0AC089A0",
|
||||
"pk": "426C13BA31E703A60E292158B208E3E9050BBF4AE242159C7F2AEB94E5BAA1CB77CFE536164C7952057B37911C5766CE71A41B0E6B190E6093B930CE0AC089A0"
|
||||
},
|
||||
{
|
||||
"tcId": 37,
|
||||
"deferred": false,
|
||||
"skSeed": "0177748F3E4C9E84367263E7D616911B0AA391A4992BA9B43844BDD086FC281D",
|
||||
"skPrf": "40A906713101C5B6BAC5689E03C238B4C155AA760AADF23B60821B898D485B90",
|
||||
"pkSeed": "34EE511AC3D78D95286273B1568A8A49DAC067B5F59BB60EFF80164948082A32",
|
||||
"sk": "0177748F3E4C9E84367263E7D616911B0AA391A4992BA9B43844BDD086FC281D40A906713101C5B6BAC5689E03C238B4C155AA760AADF23B60821B898D485B9034EE511AC3D78D95286273B1568A8A49DAC067B5F59BB60EFF80164948082A32D89ABA01A8CE9A99B3F8A8FDA857A7D38B90AEDF0BFF854F42A85132F96125B3",
|
||||
"pk": "34EE511AC3D78D95286273B1568A8A49DAC067B5F59BB60EFF80164948082A32D89ABA01A8CE9A99B3F8A8FDA857A7D38B90AEDF0BFF854F42A85132F96125B3"
|
||||
},
|
||||
{
|
||||
"tcId": 38,
|
||||
"deferred": false,
|
||||
"skSeed": "06B69813A23574071DAC334F2D64F7C67E89F5F87D6B6B25F501062141BBE294",
|
||||
"skPrf": "8DE25ED0AC399E366057765DF165358E2D2E6E04637740A0477BBDD92B107ABD",
|
||||
"pkSeed": "4176CF833BF4AF2246A9C432DE140846981849BC0F8C1D7C08A55EE57DC064B5",
|
||||
"sk": "06B69813A23574071DAC334F2D64F7C67E89F5F87D6B6B25F501062141BBE2948DE25ED0AC399E366057765DF165358E2D2E6E04637740A0477BBDD92B107ABD4176CF833BF4AF2246A9C432DE140846981849BC0F8C1D7C08A55EE57DC064B5135E0A64470DD6A11887F56B1A621BFD78F019604F50EF30087FE0BBFB7D1011",
|
||||
"pk": "4176CF833BF4AF2246A9C432DE140846981849BC0F8C1D7C08A55EE57DC064B5135E0A64470DD6A11887F56B1A621BFD78F019604F50EF30087FE0BBFB7D1011"
|
||||
},
|
||||
{
|
||||
"tcId": 39,
|
||||
"deferred": false,
|
||||
"skSeed": "AD84696A355A79BBF05A044AC865A185EDA448E940755D8F3048B0AE9FAEEA5D",
|
||||
"skPrf": "25C6125634E4BD8F59F7AD69E2B5070ADA5C684ED54EE4BF95EA799BD2B14AA7",
|
||||
"pkSeed": "AD3FB595DD425853F943A2B3622B7F1D52A285B56608CFB70C52D2969F98C8D8",
|
||||
"sk": "AD84696A355A79BBF05A044AC865A185EDA448E940755D8F3048B0AE9FAEEA5D25C6125634E4BD8F59F7AD69E2B5070ADA5C684ED54EE4BF95EA799BD2B14AA7AD3FB595DD425853F943A2B3622B7F1D52A285B56608CFB70C52D2969F98C8D8A3092F6923036C3427B2EC4DCF35718C67F314AE628FEBE61150D136D566E2C8",
|
||||
"pk": "AD3FB595DD425853F943A2B3622B7F1D52A285B56608CFB70C52D2969F98C8D8A3092F6923036C3427B2EC4DCF35718C67F314AE628FEBE61150D136D566E2C8"
|
||||
},
|
||||
{
|
||||
"tcId": 40,
|
||||
"deferred": false,
|
||||
"skSeed": "BDE4BD3EBBB2E0C7BF8E527CE6E827054E05D0CCE7F5C3B79D770CA14CD76D48",
|
||||
"skPrf": "FA5FBB5AC18418DFF6B80869F2BE8988C55B7A7EEE9EEC123C38739047AC66C7",
|
||||
"pkSeed": "56E277EF7868B6AEBF54F1FEB533ED844C419FB390D3ABEE91BDBD24652037DE",
|
||||
"sk": "BDE4BD3EBBB2E0C7BF8E527CE6E827054E05D0CCE7F5C3B79D770CA14CD76D48FA5FBB5AC18418DFF6B80869F2BE8988C55B7A7EEE9EEC123C38739047AC66C756E277EF7868B6AEBF54F1FEB533ED844C419FB390D3ABEE91BDBD24652037DE40A2D1A0B2388F5BCE082642655DA7FC5F186F9A996A65753EF7259B9FAD3355",
|
||||
"pk": "56E277EF7868B6AEBF54F1FEB533ED844C419FB390D3ABEE91BDBD24652037DE40A2D1A0B2388F5BCE082642655DA7FC5F186F9A996A65753EF7259B9FAD3355"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
907
tests/SLH-DSA-sigGen-FIPS205/internalProjection.json
Normal file
907
tests/SLH-DSA-sigGen-FIPS205/internalProjection.json
Normal file
File diff suppressed because one or more lines are too long
619
tests/SLH-DSA-sigVer-FIPS205/internalProjection.json
Normal file
619
tests/SLH-DSA-sigVer-FIPS205/internalProjection.json
Normal file
File diff suppressed because one or more lines are too long
435
tests/acvp_json_tests.rs
Normal file
435
tests/acvp_json_tests.rs
Normal file
|
|
@ -0,0 +1,435 @@
|
|||
/// Runs tests using data from exports posted by NIST in their ACVP-Server repository
|
||||
/// ACVP: Automated Cryptographic Validation Protocol
|
||||
///
|
||||
/// Repo: https://github.com/usnistgov/ACVP-Server/
|
||||
///
|
||||
/// Test files:
|
||||
/// - https://github.com/usnistgov/ACVP-Server/raw/master/gen-val/json-files/SLH-DSA-keyGen-FIPS205/internalProjection.json
|
||||
/// - https://github.com/usnistgov/ACVP-Server/raw/master/gen-val/json-files/SLH-DSA-sigGen-FIPS205/internalProjection.json
|
||||
/// - https://github.com/usnistgov/ACVP-Server/raw/master/gen-val/json-files/SLH-DSA-sigVer-FIPS205/internalProjection.json
|
||||
///
|
||||
#[cfg(test)]
|
||||
mod acvp_json_tests {
|
||||
use fips205::traits::{KeyGen, SerDes, Signer, Verifier};
|
||||
use rand_core::{CryptoRng, RngCore};
|
||||
use serde::{Deserialize, Deserializer};
|
||||
use serde_json::Value;
|
||||
use std::fs::File;
|
||||
use std::panic;
|
||||
|
||||
fn dehex<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
let buf = String::deserialize(deserializer)?;
|
||||
hex::decode(buf).map_err(serde::de::Error::custom)
|
||||
}
|
||||
|
||||
struct TestRng {
|
||||
data: Vec<Vec<u8>>,
|
||||
}
|
||||
|
||||
impl RngCore for TestRng {
|
||||
fn next_u32(&mut self) -> u32 {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
fn next_u64(&mut self) -> u64 {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
fn fill_bytes(&mut self, out: &mut [u8]) {
|
||||
let x = self.data.pop().expect("TestRng problem");
|
||||
out.copy_from_slice(&x)
|
||||
}
|
||||
|
||||
fn try_fill_bytes(&mut self, out: &mut [u8]) -> Result<(), rand_core::Error> {
|
||||
self.fill_bytes(out);
|
||||
Ok(()) // panic on probs is OK
|
||||
}
|
||||
}
|
||||
|
||||
impl CryptoRng for TestRng {}
|
||||
|
||||
impl TestRng {
|
||||
fn new() -> Self {
|
||||
TestRng { data: Vec::new() }
|
||||
}
|
||||
|
||||
fn push(&mut self, new_data: &[u8]) {
|
||||
let x = new_data.to_vec();
|
||||
self.data.push(x);
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
struct KeyGenTest {
|
||||
tc_id: usize,
|
||||
#[serde(deserialize_with = "dehex")]
|
||||
sk_seed: Vec<u8>,
|
||||
#[serde(deserialize_with = "dehex")]
|
||||
sk_prf: Vec<u8>,
|
||||
#[serde(deserialize_with = "dehex")]
|
||||
pk_seed: Vec<u8>,
|
||||
#[serde(deserialize_with = "dehex")]
|
||||
sk: Vec<u8>,
|
||||
#[serde(deserialize_with = "dehex")]
|
||||
pk: Vec<u8>,
|
||||
}
|
||||
|
||||
macro_rules! test_keygen {
|
||||
($test_group: ident, $param_set: ident, $fail_count: ident) => {
|
||||
for test in $test_group["tests"].as_array().unwrap() {
|
||||
let test: KeyGenTest = serde_json::from_value(test.clone()).unwrap();
|
||||
print!(
|
||||
"Testing key generation with {} test case id {}... ",
|
||||
$param_set, test.tc_id
|
||||
);
|
||||
|
||||
// Pre-load RNG
|
||||
let mut rnd = TestRng::new();
|
||||
rnd.push(&test.pk_seed);
|
||||
rnd.push(&test.sk_prf);
|
||||
rnd.push(&test.sk_seed);
|
||||
|
||||
// Generate key
|
||||
let (pk, sk) = KG::try_keygen_with_rng_vt(&mut rnd).unwrap();
|
||||
|
||||
// Check against known answers
|
||||
let pk_match = pk.into_bytes() == test.pk.as_slice();
|
||||
let sk_match = sk.into_bytes() == test.sk.as_slice();
|
||||
if pk_match && sk_match {
|
||||
println!("Passed.")
|
||||
} else {
|
||||
println!("Failed.");
|
||||
$fail_count += 1;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn run_keygen_tests() {
|
||||
let mut fail_count = 0;
|
||||
let file = "tests/SLH-DSA-keyGen-FIPS205/internalProjection.json";
|
||||
let keygen_kat_file = File::open(file).expect("Error opening json file");
|
||||
let kat_json: Value =
|
||||
serde_json::from_reader(keygen_kat_file).expect("Error parsing json file");
|
||||
assert_eq!(kat_json["algorithm"].as_str().unwrap(), "SLH-DSA");
|
||||
assert_eq!(kat_json["mode"].as_str().unwrap(), "keyGen");
|
||||
assert_eq!(kat_json["revision"].as_str().unwrap(), "FIPS205");
|
||||
for test_group in kat_json["testGroups"].as_array().unwrap() {
|
||||
let param_set = test_group["parameterSet"].as_str().unwrap();
|
||||
match param_set {
|
||||
"SLH-DSA-SHA2-128s" => {
|
||||
use fips205::slh_dsa_sha2_128s::KG;
|
||||
test_keygen!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-128s" => {
|
||||
use fips205::slh_dsa_shake_128s::KG;
|
||||
test_keygen!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-128f" => {
|
||||
use fips205::slh_dsa_sha2_128f::KG;
|
||||
test_keygen!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-128f" => {
|
||||
use fips205::slh_dsa_shake_128f::KG;
|
||||
test_keygen!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-192s" => {
|
||||
use fips205::slh_dsa_sha2_192s::KG;
|
||||
test_keygen!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-192s" => {
|
||||
use fips205::slh_dsa_shake_192s::KG;
|
||||
test_keygen!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-192f" => {
|
||||
use fips205::slh_dsa_sha2_192f::KG;
|
||||
test_keygen!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-192f" => {
|
||||
use fips205::slh_dsa_shake_192f::KG;
|
||||
test_keygen!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-256s" => {
|
||||
use fips205::slh_dsa_sha2_256s::KG;
|
||||
test_keygen!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-256s" => {
|
||||
use fips205::slh_dsa_shake_256s::KG;
|
||||
test_keygen!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-256f" => {
|
||||
use fips205::slh_dsa_sha2_256f::KG;
|
||||
test_keygen!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-256f" => {
|
||||
use fips205::slh_dsa_shake_256f::KG;
|
||||
test_keygen!(test_group, param_set, fail_count);
|
||||
}
|
||||
_ => {
|
||||
println!("Unrecognized Parameter set in test file: {}", param_set);
|
||||
}
|
||||
}
|
||||
}
|
||||
assert_eq!(fail_count, 0);
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
struct SignTest {
|
||||
tc_id: usize,
|
||||
#[serde(deserialize_with = "dehex")]
|
||||
sk: Vec<u8>,
|
||||
#[serde(deserialize_with = "dehex", default)]
|
||||
additional_randomness: Vec<u8>,
|
||||
#[serde(deserialize_with = "dehex")]
|
||||
message: Vec<u8>,
|
||||
#[serde(deserialize_with = "dehex")]
|
||||
signature: Vec<u8>,
|
||||
}
|
||||
|
||||
macro_rules! test_sign {
|
||||
($test_group: ident, $param_set: ident, $deterministic:ident, $fail_count: ident) => {
|
||||
for test in $test_group["tests"].as_array().unwrap() {
|
||||
let test: SignTest = serde_json::from_value(test.clone()).unwrap();
|
||||
print!("Testing signing with {}, test case {}... ", $param_set, test.tc_id);
|
||||
|
||||
// Load private key
|
||||
let sk = PrivateKey::try_from_bytes(
|
||||
test.sk
|
||||
.as_slice()
|
||||
.try_into()
|
||||
.expect("Wrong length private key"),
|
||||
)
|
||||
.expect("Unable to load private key");
|
||||
|
||||
// Calculate signature
|
||||
let sig_exp = if $deterministic {
|
||||
sk.try_sign_ct(&test.message, false)
|
||||
.expect("Error signing message")
|
||||
} else {
|
||||
let mut rnd = TestRng::new();
|
||||
rnd.push(test.additional_randomness.as_slice());
|
||||
sk.try_sign_with_rng_ct(&mut rnd, &test.message, true)
|
||||
.expect("Error signing message")
|
||||
};
|
||||
|
||||
// Check against known answer
|
||||
if sig_exp == test.signature.as_slice() {
|
||||
println!("Passed.");
|
||||
} else {
|
||||
println!("Failed.");
|
||||
$fail_count += 1;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn run_signing_tests() {
|
||||
let mut fail_count = 0;
|
||||
let file = "tests/SLH-DSA-sigGen-FIPS205/internalProjection.json";
|
||||
let sign_kat_file = File::open(file).expect("Error opening json file");
|
||||
let kat_json: Value =
|
||||
serde_json::from_reader(sign_kat_file).expect("Error parsing json file");
|
||||
assert_eq!(kat_json["algorithm"].as_str().unwrap(), "SLH-DSA");
|
||||
assert_eq!(kat_json["mode"].as_str().unwrap(), "sigGen");
|
||||
assert_eq!(kat_json["revision"].as_str().unwrap(), "FIPS205");
|
||||
for test_group in kat_json["testGroups"].as_array().unwrap() {
|
||||
let param_set = test_group["parameterSet"].as_str().unwrap();
|
||||
let deterministic = test_group["deterministic"].as_bool().unwrap();
|
||||
match param_set {
|
||||
"SLH-DSA-SHA2-128s" => {
|
||||
use fips205::slh_dsa_sha2_128s::PrivateKey;
|
||||
test_sign!(test_group, param_set, deterministic, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-128s" => {
|
||||
use fips205::slh_dsa_shake_128s::PrivateKey;
|
||||
test_sign!(test_group, param_set, deterministic, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-128f" => {
|
||||
use fips205::slh_dsa_sha2_128f::PrivateKey;
|
||||
test_sign!(test_group, param_set, deterministic, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-128f" => {
|
||||
use fips205::slh_dsa_shake_128f::PrivateKey;
|
||||
test_sign!(test_group, param_set, deterministic, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-192s" => {
|
||||
use fips205::slh_dsa_sha2_192s::PrivateKey;
|
||||
test_sign!(test_group, param_set, deterministic, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-192s" => {
|
||||
use fips205::slh_dsa_shake_192s::PrivateKey;
|
||||
test_sign!(test_group, param_set, deterministic, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-192f" => {
|
||||
use fips205::slh_dsa_sha2_192f::PrivateKey;
|
||||
test_sign!(test_group, param_set, deterministic, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-192f" => {
|
||||
use fips205::slh_dsa_shake_192f::PrivateKey;
|
||||
test_sign!(test_group, param_set, deterministic, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-256s" => {
|
||||
use fips205::slh_dsa_sha2_256s::PrivateKey;
|
||||
test_sign!(test_group, param_set, deterministic, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-256s" => {
|
||||
use fips205::slh_dsa_shake_256s::PrivateKey;
|
||||
test_sign!(test_group, param_set, deterministic, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-256f" => {
|
||||
use fips205::slh_dsa_sha2_256f::PrivateKey;
|
||||
test_sign!(test_group, param_set, deterministic, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-256f" => {
|
||||
use fips205::slh_dsa_shake_256f::PrivateKey;
|
||||
test_sign!(test_group, param_set, deterministic, fail_count);
|
||||
}
|
||||
_ => {
|
||||
println!("Unrecognized Parameter set in test file: {}", param_set);
|
||||
}
|
||||
}
|
||||
}
|
||||
assert_eq!(fail_count, 0);
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
struct VerifyTest {
|
||||
tc_id: usize,
|
||||
test_passed: bool,
|
||||
#[serde(deserialize_with = "dehex")]
|
||||
pk: Vec<u8>,
|
||||
#[serde(deserialize_with = "dehex")]
|
||||
message: Vec<u8>,
|
||||
#[serde(deserialize_with = "dehex")]
|
||||
signature: Vec<u8>,
|
||||
reason: String,
|
||||
}
|
||||
|
||||
macro_rules! test_verify {
|
||||
($test_group: ident, $param_set: ident, $fail_count: ident) => {
|
||||
for test in $test_group["tests"].as_array().unwrap() {
|
||||
let test: VerifyTest = serde_json::from_value(test.clone()).unwrap();
|
||||
print!(
|
||||
"Testing signing with {}, test case {}... ",
|
||||
$param_set,
|
||||
test.tc_id,
|
||||
);
|
||||
|
||||
if test.test_passed == false {
|
||||
println!("\nExpecting failed validation for: {}", test.reason);
|
||||
}
|
||||
|
||||
let is_valid: Result<bool, _> = panic::catch_unwind(|| {
|
||||
// Load public key
|
||||
let pk = PublicKey::try_from_bytes(
|
||||
test.pk
|
||||
.as_slice()
|
||||
.try_into()
|
||||
.expect("Wrong length public key"),
|
||||
)
|
||||
.expect("Unable to load public key");
|
||||
|
||||
// Verify signature
|
||||
pk.try_verify_vt(
|
||||
test.message.as_slice(),
|
||||
test.signature
|
||||
.as_slice()
|
||||
.try_into()
|
||||
.expect("Signature length incorrect"),
|
||||
)
|
||||
.expect("Verification failed")
|
||||
});
|
||||
|
||||
// Check against known answer
|
||||
let is_valid = match is_valid {
|
||||
Ok(true) => true,
|
||||
Ok(false) => false,
|
||||
Err(_) => false,
|
||||
};
|
||||
if is_valid == test.test_passed {
|
||||
println!("Passed.");
|
||||
} else {
|
||||
println!("Failed.");
|
||||
$fail_count += 1;
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn run_verification_tests() {
|
||||
let mut fail_count = 0;
|
||||
let file = "tests/SLH-DSA-sigVer-FIPS205/internalProjection.json";
|
||||
let sign_kat_file = File::open(file).expect("Error opening json file");
|
||||
let kat_json: Value =
|
||||
serde_json::from_reader(sign_kat_file).expect("Error parsing json file");
|
||||
assert_eq!(kat_json["algorithm"].as_str().unwrap(), "SLH-DSA");
|
||||
assert_eq!(kat_json["mode"].as_str().unwrap(), "sigVer");
|
||||
assert_eq!(kat_json["revision"].as_str().unwrap(), "FIPS205");
|
||||
for test_group in kat_json["testGroups"].as_array().unwrap() {
|
||||
let param_set = test_group["parameterSet"].as_str().unwrap();
|
||||
match param_set {
|
||||
"SLH-DSA-SHA2-128s" => {
|
||||
use fips205::slh_dsa_sha2_128s::PublicKey;
|
||||
test_verify!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-128s" => {
|
||||
use fips205::slh_dsa_shake_128s::PublicKey;
|
||||
test_verify!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-128f" => {
|
||||
use fips205::slh_dsa_sha2_128f::PublicKey;
|
||||
test_verify!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-128f" => {
|
||||
use fips205::slh_dsa_shake_128f::PublicKey;
|
||||
test_verify!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-192s" => {
|
||||
use fips205::slh_dsa_sha2_192s::PublicKey;
|
||||
test_verify!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-192s" => {
|
||||
use fips205::slh_dsa_shake_192s::PublicKey;
|
||||
test_verify!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-192f" => {
|
||||
use fips205::slh_dsa_sha2_192f::PublicKey;
|
||||
test_verify!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-192f" => {
|
||||
use fips205::slh_dsa_shake_192f::PublicKey;
|
||||
test_verify!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-256s" => {
|
||||
use fips205::slh_dsa_sha2_256s::PublicKey;
|
||||
test_verify!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-256s" => {
|
||||
use fips205::slh_dsa_shake_256s::PublicKey;
|
||||
test_verify!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHA2-256f" => {
|
||||
use fips205::slh_dsa_sha2_256f::PublicKey;
|
||||
test_verify!(test_group, param_set, fail_count);
|
||||
}
|
||||
"SLH-DSA-SHAKE-256f" => {
|
||||
use fips205::slh_dsa_shake_256f::PublicKey;
|
||||
test_verify!(test_group, param_set, fail_count);
|
||||
}
|
||||
_ => {
|
||||
println!("Unrecognized Parameter set in test file: {}", param_set);
|
||||
}
|
||||
}
|
||||
}
|
||||
assert_eq!(fail_count, 0);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue