fips205-source/src/test.rs

215 lines
330 KiB
Rust
Raw Normal View History

2024-01-22 00:15:52 +00:00
#[cfg(test)]
mod tests {
extern crate alloc;
use hex::decode;
use alloc::vec::Vec;
//use rand::{Rng, SeedableRng};
use rand_core::{CryptoRng, RngCore};
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);
}
}
#[test]
fn vector_debug() {
2024-01-31 23:40:32 +00:00
use crate::slh_dsa_shake_128s::{slh_keygen_with_rng, slh_sign_with_rng, slh_verify};
2024-01-25 21:17:18 +00:00
let m =
decode("d81c4d8d734fcbfbeade3d3f8a039faa2a2c9957e835ad55b22e75bf57bb556ac8").unwrap();
2024-01-22 00:15:52 +00:00
let mut rnd = TestRng::new();
let sk_seed = "7c9935a0b07694aa0c6d10e4db6b1add";
let sk_prf = "2fd81a25ccb148032dcd739936737f2d";
let pk_seed = "b505d7cfad1b497499323c8686325e47";
let opt_rand = "33b3c07507e4201748494d832b6ee2a6";
rnd.push(&decode(opt_rand).unwrap());
rnd.push(&decode(pk_seed).unwrap());
rnd.push(&decode(sk_prf).unwrap());
rnd.push(&decode(sk_seed).unwrap());
2024-01-31 23:40:32 +00:00
let (sk, pk) = slh_keygen_with_rng(&mut rnd).unwrap();
let sig_act = slh_sign_with_rng(&mut rnd, &m, &sk, true).unwrap();
let sig_exp = decode("07eb19e7d838d71ef66b8263b5d1f8ec43f8eb75d58b652f779c5a0f5378709eff39c179556ee3871600fa606ff751dcccce5e7a6981fbb8a0e959afff26ea6aef4fef5ccb66728f9d119ca2a547f0af0d3509364c7e3c9981e930c8c77ac74b8f385979dc8582063eac5b2a2532c8eb97fe1bea498bdb8b6496fcd3c5931393ac17cf96ccb35aaa9c7491b1a9897ccfbf35b70fec94687aad4e06c1b8d3aea67554d470804eec25309bf34c6487aea92b1d49edfc7afcb31d78ad4be8c1e4403b634d2db503b8cd08270dc3579aa8d639c33d024d3bebb9d401424b009793dd87053e5e0d0538b90a7a5324e5f08a8ab13de4dc1ed0b9848b421f40e5cd1ab70f07f652f3df23853c1d44ff0da5dac93d0fdd2007a1100b3c4abc9779e0fae578653d3848b520e96300cabce717b11dc1257f6c0c54add4fef22be57a67c45b288997b8f496f6fb3cde4a4cbb646b6cd922c7cb04c0bc2dd1bddca39a6154c10a07a1110c23df6b89dfd65c4107371cb98a352f88ce579bf49cda3c7062f9744594b9e431391e85622b13a6356a8fc1900f29dfd0d2a408aa2f15958707a14948294194cc3d51d26ca81dd64fa8a119d156e83ac0b1350ee98ef246e04b85edcf6567f917f4aa1e379244465145f9965a4f7a56fb14a949a0bcd08550a2de294f74ce74bf178dcf521a27d2ef642aeb05b38f835b7cd0e4ad4f2279c46c50378c06d4829ada543cac46a56fdd681dd4f473d792250cfece0fa98fecf1735caf37ec75b00a6212cfd31f57550c89e7acf2cdb257e5c021d1d465b7663b0b64d0e47b38460fcc28b1cf9e40ec44d420fa5677043ad647eb5c80b58ba88fc55e1c5c394a0f7e592a0edcb1dcf6ccfc5f1b25b30ca191e8c31232a39b0563d5b7dc2ad42582b58efbf84cb34d4572a8146ef8da7dace23229a732a901f15c7cb1a36aaa82838d6f554e49f2f18b9b73f7ef1fcc325bb31e668167c74777e0606806d81420df2dedcd56538d5d1386f2122b71e894e348820594869b84455d9a195061dfe1fc2795acb7103f25522caa538420af67dd03859480e0d046c8f175038d78d603af58176a1ab26f560ec78a8f2e45f4fa9da71f2e99c9ce038e5d95b07e8dfad89b8c6b1fb990b081bda6e848d8ce5577f852481396175cfcab40fc296e71996ec4a5c6d52a8a237bdcdc2b57680e9379deed17f929e774bf90906de5c3941a212801dd09e58a013a08a8903a0aabaa90118250370b3318db6b17f586b961a2a98678cf54ca6c422dfe32767c99ad4e12a28a3b36e85bc299f0881a5ff4d2e0efea327656f67851fdd95fd8b9d1bd941345b7ab065f78a8c342a5184ef6150f304e7d7b806de025d5c571831ad4537db35033b0121effeccdb100ecaa9805dc90e965995b39748c645e644331fee496956b6a1fb7a6029eafbae80be5e68c5aa66b369c9e9d7c96c77d32592c6696e3368ccae005a479492d400c926df2b809dcf1c49e77877792ef9c9c1cef36e679e9bfc01a67c92f093cd8ee4ec44fbc0318988014650f4d158edc630443cfde99d674f9763f20c60ea3657a2ea53af1fc2a3e7ea723e546eecfdf3be0309f5a773c228c168fdbcc97325cab9c9137322736a606935f6aa74a10d0f5bc6a83aed3fd2cd94621fbafef01bb3e601222522a9c9f6d4ceae117a2d53d2bd774eaa5948a1fa9a83b871bf763ba4787117ec0e7d62cd587edaae53427fd56e7dd25c9525886ef401a05bb58d3647e305314ba9a2c1c10a394b6cc7ce983fd11f79f6c05a624e16699be007cc57cabfb972a1b1988c1e47b4394fe4a404d0aa641b4281aa98ee047d22466c09f3a0dbf7ec6e51bfcfbe6380a23b81e6062300710423b44e88f8967f4f88e559486f7ef84726c501224c4a9faebce33e188bf9a72edee1326438f23620eaad0ab0ce53a87e8b410f243511eb3ef87c9f7af983c4b0d6e6b2a1a1407ac10c1305cda22d6dd0bbc470fd61c2e4a38c4244dd2a7ceb9d347d8d8f58906cc5b1c5934c973b048fa97a49c39a401c452a92ae8c826781b3edb77416625213e826aa6bbb131dda303cf63cd4f6f200056d13e69be148be51eaee8d059fc47f7ffeb24796a79007c0b83b75be70eeb65f46fc51c071f4ef7bc24d71374cd7955c88bc28f4ee285b6823a45abc8b157c3275c49a925d7ad45183b4f09687a8002e54635f8294768f711a47499234b7a57c5a311534920f12c284ed21522b25ca7890610aaac91666ac54bab87c3f3a566d31f1a66689d6036e968ab30c162da446ebc7cfaa9eb9bf22a8652926e7334265897b2af934d8c2bc261b4d86aaffcce72d7514326052f8c4120868be79b05c9a8f3068a5ee4e5d82b5d3d7afd3d03490caa9a3d75084e2906dc039e72837e85768d7c034b17d26eac57a86f5a3f000dfb783089d14532048eab5bfcb65f1e21af9869254f3a0873a8cb1d94c4a4849972e0d1013d3918631830473529bf392c35948e7fd8b5f60dbc03c168d3d5e5d4f074910ae674740c37be037d84d4390708aaaff47a64ad23ffeda22b8eb0006d9ab9eaa629a07899c6d9f79615a4c6c05cd2639dc87d53f60bb78e0c246766a1de332ca6f6f9b0dcaf58d3fa82149d2e244721f5c47fa6734a01071ab23a871ebeb676a16151402223cda2901338c17d5b0c59139ba82403709bce2ee6cb5b8a419a74ca8046b9da98a10efa6fa5726e235ec329938f4f36e0b3310ed946cce3f2f05a23bf7b203ad82057d8ab2dd6e6f9614187fe90ae1397a927bad5bdea19768da4e1277fdbc2465b73fd0f224a94ed00a765268b081288d14342a0e303e106bf460c247ba3bfb806da76264b8c0b0364e81da052ea399bf
assert_eq!(sig_act, *sig_exp);
let result = slh_verify(&m, &sig_act, &pk);
assert_eq!(result, true, "Signature did not verify!");
}
#[test]
fn vector_slh_dsa_shake_128s() {
use crate::slh_dsa_shake_128s::{slh_keygen_with_rng, slh_sign_with_rng, slh_verify};
let m =
decode("D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835AD55B22E75BF57BB556AC8").unwrap();
let mut rnd = TestRng::new();
let sk_seed = "7C9935A0B07694AA0C6D10E4DB6B1ADD";
let sk_prf = "2FD81A25CCB148032DCD739936737F2D";
let pk_seed = "B505D7CFAD1B497499323C8686325E47";
let opt_rand = "33B3C07507E4201748494D832B6EE2A6";
rnd.push(&decode(opt_rand).unwrap());
rnd.push(&decode(pk_seed).unwrap());
rnd.push(&decode(sk_prf).unwrap());
rnd.push(&decode(sk_seed).unwrap());
let (sk, pk) = slh_keygen_with_rng(&mut rnd).unwrap();
let sig_act = slh_sign_with_rng(&mut rnd, &m, &sk, true).unwrap();
let sig_exp = decode("07EB19E7D838D71EF66B8263B5D1F8EC43F8EB75D58B652F779C5A0F5378709EFF39C179556EE3871600FA606FF751DCCCCE5E7A6981FBB8A0E959AFFF26EA6AEF4FEF5CCB66728F9D119CA2A547F0AF0D3509364C7E3C9981E930C8C77AC74B8F385979DC8582063EAC5B2A2532C8EB97FE1BEA498BDB8B6496FCD3C5931393AC17CF96CCB35AAA9C7491B1A9897CCFBF35B70FEC94687AAD4E06C1B8D3AEA67554D470804EEC25309BF34C6487AEA92B1D49EDFC7AFCB31D78AD4BE8C1E4403B634D2DB503B8CD08270DC3579AA8D639C33D024D3BEBB9D401424B009793DD87053E5E0D0538B90A7A5324E5F08A8AB13DE4DC1ED0B9848B421F40E5CD1AB70F07F652F3DF23853C1D44FF0DA5DAC93D0FDD2007A1100B3C4ABC9779E0FAE578653D3848B520E96300CABCE717B11DC1257F6C0C54ADD4FEF22BE57A67C45B288997B8F496F6FB3CDE4A4CBB646B6CD922C7CB04C0BC2DD1BDDCA39A6154C10A07A1110C23DF6B89DFD65C4107371CB98A352F88CE579BF49CDA3C7062F9744594B9E431391E85622B13A6356A8FC1900F29DFD0D2A408AA2F15958707A14948294194CC3D51D26CA81DD64FA8A119D156E83AC0B1350EE98EF246E04B85EDCF6567F917F4AA1E379244465145F9965A4F7A56FB14A949A0BCD08550A2DE294F74CE74BF178DCF521A27D2EF642AEB05B38F835B7CD0E4AD4F2279C46C50378C06D4829ADA543CAC46A56FDD681DD4F473D792250CFECE0FA98FECF1735CAF37EC75B00A6212CFD31F57550C89E7ACF2CDB257E5C021D1D465B7663B0B64D0E47B38460FCC28B1CF9E40EC44D420FA5677043AD647EB5C80B58BA88FC55E1C5C394A0F7E592A0EDCB1DCF6CCFC5F1B25B30CA191E8C31232A39B0563D5B7DC2AD42582B58EFBF84CB34D4572A8146EF8DA7DACE23229A732A901F15C7CB1A36AAA82838D6F554E49F2F18B9B73F7EF1FCC325BB31E668167C74777E0606806D81420DF2DEDCD56538D5D1386F2122B71E894E348820594869B84455D9A195061DFE1FC2795ACB7103F25522CAA538420AF67DD03859480E0D046C8F175038D78D603AF58176A1AB26F560EC78A8F2E45F4FA9DA71F2E99C9CE038E5D95B07E8DFAD89B8C6B1FB990B081BDA6E848D8CE5577F852481396175CFCAB40FC296E71996EC4A5C6D52A8A237BDCDC2B57680E9379DEED17F929E774BF90906DE5C3941A212801DD09E58A013A08A8903A0AABAA90118250370B3318DB6B17F586B961A2A98678CF54CA6C422DFE32767C99AD4E12A28A3B36E85BC299F0881A5FF4D2E0EFEA327656F67851FDD95FD8B9D1BD941345B7AB065F78A8C342A5184EF6150F304E7D7B806DE025D5C571831AD4537DB35033B0121EFFECCDB100ECAA9805DC90E965995B39748C645E644331FEE496956B6A1FB7A6029EAFBAE80BE5E68C5AA66B369C9E9D7C96C77D32592C6696E3368CCAE005A479492D400C926DF2B809DCF1C49E77877792EF9C9C1CEF36E679E9BFC01A67C92F093CD8EE4EC44FBC0318988014650F4D158EDC630443CFDE99D674F9763F20C60EA3657A2EA53AF1FC2A3E7EA723E546EECFDF3BE0309F5A773C228C168FDBCC97325CAB9C9137322736A606935F6AA74A10D0F5BC6A83AED3FD2CD94621FBAFEF01BB3E601222522A9C9F6D4CEAE117A2D53D2BD774EAA5948A1FA9A83B871BF763BA4787117EC0E7D62CD587EDAAE53427FD56E7DD25C9525886EF401A05BB58D3647E305314BA9A2C1C10A394B6CC7CE983FD11F79F6C05A624E16699BE007CC57CABFB972A1B1988C1E47B4394FE4A404D0AA641B4281AA98EE047D22466C09F3A0DBF7EC6E51BFCFBE6380A23B81E6062300710423B44E88F8967F4F88E559486F7EF84726C501224C4A9FAEBCE33E188BF9A72EDEE1326438F23620EAAD0AB0CE53A87E8B410F243511EB3EF87C9F7AF983C4B0D6E6B2A1A1407AC10C1305CDA22D6DD0BBC470FD61C2E4A38C4244DD2A7CEB9D347D8D8F58906CC5B1C5934C973B048FA97A49C39A401C452A92AE8C826781B3EDB77416625213E826AA6BBB131DDA303CF63CD4F6F200056D13E69BE148BE51EAEE8D059FC47F7FFEB24796A79007C0B83B75BE70EEB65F46FC51C071F4EF7BC24D71374CD7955C88BC28F4EE285B6823A45ABC8B157C3275C49A925D7AD45183B4F09687A8002E54635F8294768F711A47499234B7A57C5A311534920F12C284ED21522B25CA7890610AAAC91666AC54BAB87C3F3A566D31F1A66689D6036E968AB30C162DA446EBC7CFAA9EB9BF22A8652926E7334265897B2AF934D8C2BC261B4D86AAFFCCE72D7514326052F8C4120868BE79B05C9A8F3068A5EE4E5D82B5D3D7AFD3D03490CAA9A3D75084E2906DC039E72837E85768D7C034B17D26EAC57A86F5A3F000DFB783089D14532048EAB5BFCB65F1E21AF9869254F3A0873A8CB1D94C4A4849972E0D1013D3918631830473529BF392C35948E7FD8B5F60DBC03C168D3D5E5D4F074910AE674740C37BE037D84D4390708AAAFF47A64AD23FFEDA22B8EB0006D9AB9EAA629A07899C6D9F79615A4C6C05CD2639DC87D53F60BB78E0C246766A1DE332CA6F6F9B0DCAF58D3FA82149D2E244721F5C47FA6734A01071AB23A871EBEB676A16151402223CDA2901338C17D5B0C59139BA82403709BCE2EE6CB5B8A419A74CA8046B9DA98A10EFA6FA5726E235EC329938F4F36E0B3310ED946CCE3F2F05A23BF7B203AD82057D8AB2DD6E6F9614187FE90AE1397A927BAD5BDEA19768DA4E1277FDBC2465B73FD0F224A94ED00A765268B081288D14342A0E303E106BF460C247BA3BFB806DA76264B8C0B0364E81DA052EA399BF
assert_eq!(sig_act, *sig_exp);
let result = slh_verify(&m, &sig_act, &pk);
assert_eq!(result, true, "Signature did not verify!");
}
2024-01-22 00:15:52 +00:00
2024-01-31 23:40:32 +00:00
#[test]
fn vector_slh_dsa_shake_128f() {
use crate::slh_dsa_shake_128f::{slh_keygen_with_rng, slh_sign_with_rng, slh_verify};
let m =
decode("D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835AD55B22E75BF57BB556AC8").unwrap();
let mut rnd = TestRng::new();
let sk_seed = "7C9935A0B07694AA0C6D10E4DB6B1ADD";
let sk_prf = "2FD81A25CCB148032DCD739936737F2D";
let pk_seed = "B505D7CFAD1B497499323C8686325E47";
let opt_rand = "33B3C07507E4201748494D832B6EE2A6";
rnd.push(&decode(opt_rand).unwrap());
rnd.push(&decode(pk_seed).unwrap());
rnd.push(&decode(sk_prf).unwrap());
rnd.push(&decode(sk_seed).unwrap());
2024-01-25 21:17:18 +00:00
let (sk, pk) = slh_keygen_with_rng(&mut rnd).unwrap();
2024-01-31 23:40:32 +00:00
let sig_act = slh_sign_with_rng(&mut rnd, &m, &sk, true).unwrap();
let sig_exp = decode("07EB19E7D838D71EF66B8263B5D1F8EC50527F9F9C94098E82F178619256721F46F852DD5F90AE0D445B9A61D4057C29828429AF7330E1C1B6F9ABC2421CA42EFE90FD8E66944D635146D6974B2CA7F7E47F820498DB143285161011030E72894C57C26D6EB552CB549098669D3AD21964C8D1096237BCDAEF80246F3D970AD70E7AECF5823717CC7BBF315834189A91BEC5897E66B76206A60E08D411722C43C4EC9A530838FEDEB71F69CDE446CF491D0C111347484C3CDFDB2A2F6F4A1815B3A83F26B959A2722D18445EFC8C74BBB55287A2DA98102D05DE0B1CF7F32789CAE0BC71222B36B33FCBB67299F013F55DBFD8D69146A90950A26659C21E0A2D0F0B29AAF63065BAAE7FA9D8EE9086A3A1221580F45DBE8EAB7AE118CDB9BB9E34586F1E0261B6E6BBBDE6093D26974A67B215306113893C7E3A7AA03B0C42DB326C26A98B58D37A1562D3FF7D875BF8E6AE69A0E93EA70F3F9FA76353861AEF60B83BCB4C38F59FDDCB90B080D634CFE65F3467FE8114711F0F90C44D5A9155ADE6517DE638D2FEDFCEE7D2629770DF45CA3A7CC23227EE71C8A3DCFA293FA1C1B7419704705EABCF617539F8A51B7CA8BA895C49588D49A164568462031B72D5F3A267BC32AA90A741D2447905B478C5201C57F620FD7D1035E6438F0BCB04A31AFC4B63B18DF643261C3E872C5C244AA0C458F36CBAA61F1F577C64C9BB237C4BBA17AE514EB291C51805E2220541C34AE862842817CA7DB96DAF5994A36C1592259961ECD5DECCF4DD8AC8CCD16031836A58D9BA0571707C5A246BE1DBD785D820A8281771CC09FA3FF817A436FF27208CA5AA0DF8AC1B04115B844F5346E2EE6E112AFF037AAC7568D525FF994F02470C7DA004A8783B18123C46D28B0975BDA1580504C936ACC91AE1863A6147A29945A1771141819EEB45F936171F1403D2057E5B7C813CC84EEE72F7DE7397CE44FAF04900D31F914F65064C43D18551337466467261903D820EE9758283912B91E4D2ABB2728CFFCBF711B88EE81EC3A67785CCA5EAE1CC4CC51890F20DA33611A5E1BA5DD933E5D48CF1C61F43A1C1A922BECD1190853D09AA60FBC666A1C1F6F59276F905924D0869CE9C603E5094FFF320058138D671D2390A9F451DC300F055CFC8D0E49BBFAE57A83AB56E31016229C51AC636BBD7ABB24F9EF3816A0E41D06C18294E5083153AF99EBDB0A40A0CF18AD235BFC6CDE3F654DBE3CD049350197BF655EF0809A8AA48453B5990BA85A47129C8D9F5F976197A6B4A5B4150253DBD3303A4FE99EAC7EBDDFEB01FEEDC000F5F6C228BC6DCF1DD728F0B36E2D911816EC3A739405B509730581C068114F195C4309471F7A951849E35F2D136807861FFAFFBB789E3BC180C25798D5E8D74EC8A8ACE28256F3196B5ACE54324EBCBE3C443469BB04215886E3810A0799F6F4BDB2BB3927454860107FE5D695258ADD2D8D2E970E673CBA6AAC861DA64CA2F414FC1844601ECC2C088F820DD0436D956CDB54E13B7E730E158670004014BE3839AF474E4DEF8968C43CBCE57B110595D6981F16A59EB3118848E8F8BB853349E8FE54D893A99EC21AD57B0EE61DEAD270B796C5ED92287FDA29FCE87E8CBC21E90D5F185B7BA5A4215782F39725F7B7960212256F096BDAB0B51821937F7373FD79A0408EE9EC2C0FE5DA116C36382AC6D1E7FC67F50C9CEBC5DE88B69843158AB98467FA94BBBB33B2FD21763C3160DF8FF266598EB334B5BF1B996013823BB01E6491084DF9704303411F0DCC69B645FBA15286A030F9A8079D2048EDB6C7D4FEE6DCCBE462FDC6612F548A490D1A57D1B54BC57D7FA5A8E527B131CB9A7FC622821F916AEE1126A015BF36D1447836A173C8D914F1ECAE343F7189048C360D624D4C234B59E9E4DFD73895E0A822313AD489E0B4F44CBDAA17CE023C98E15294DDE977B8ED6D8AC423EAD263083E731D354CB7536CBCE4C95BFA049D82F640C1FD6E9A1A8AD6749BD2B927527E9A7BF159AF084D8B7932365CAB8A60038DA176909A9992C259F9F03E813624B6812B669E70C9382C5A75CB8E6D413FE904CBE1393A93820BDE103CFDE46E676015801ECEFEAA07E6D10FB9D9EABE59A31890F217F6A35352040FDC91D78CE95F9DECF5E1D44F0E35C7BEB4481CA3BBE08328B5967376DCF9605ED28B004AE99C9A77B6F028F79A61C00E8514A6E9C998BFA4046DE5FC0448FA7D90BC0538A44CC9CCCADE0EFEF32EFCB8C6A2BD2A41D0777274123CCC9F5B29CD4B20347A0E0B3A57EB7FDBA04794817C96C1D977E42D3E5F5EB0DB2F049917E5E6E69D0E14489D38F3C9D75814A7CD204A42CE97DE623EFD4AA70DA2ED266FC5079995F2F4EC442C520B712D9DE5824D8DE7C57630664BDC72F98E12DADCAFC57C8000B8AF83C6064CCAC43744F7862242C57C4DEA10E2FA738E40B13497532334A61B6D17525AFC262D1442C71ECB2925B5EF5D5B412396CFBE865B5937D758F4BE86F363CFB288136623977675CBD5A3C831366C88525D967714C10D99BD3CBE400D4B325471AC775A4C66298671A0FCFA0D84EFC995C3EC8349742428728D09A83C72745938F7A8680010F518B2E8215FB229B01C512903DF4528B897A5270343993A98A529F8CAB1E8582D44403A9DCB81458CD367E140F06E05563EEB649E3E98338A8F2D5D9DB9F0B7C569606F70D7539108B282069E1E9C03F01F62387B721907BC7E4941009F5917E7B46D6D7E96C6BC439A3FA8DB5CE5FF3D6200A3BB1EDEDDA12008CE329E757E2C9E6625DA8B8A9326E2F37E61F834179C080A2D9A030D41BFC3F84612E046FA3A6ADD79A9E53F62D46DA6899C8B2EC2DFCBACD18E53EB34
2024-01-26 02:55:05 +00:00
2024-01-31 23:40:32 +00:00
assert_eq!(sig_act, *sig_exp);
let result = slh_verify(&m, &sig_act, &pk);
assert_eq!(result, true, "Signature did not verify!");
}
#[test]
fn vector_slh_dsa_shake_192s() {
use crate::slh_dsa_shake_192s::{slh_keygen_with_rng, slh_sign_with_rng, slh_verify};
let m =
decode("D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835AD55B22E75BF57BB556AC8").unwrap();
let mut rnd = TestRng::new();
let sk_seed = "7C9935A0B07694AA0C6D10E4DB6B1ADD2FD81A25CCB14803";
let sk_prf = "2DCD739936737F2DB505D7CFAD1B497499323C8686325E47";
let pk_seed = "92F267AAFA3F87CA60D01CB54F29202A3E784CCB7EBCDCFD";
let opt_rand = "8BF0F459F0FB3EA8D32764C259AE631178976BAF3683D333";
rnd.push(&decode(opt_rand).unwrap());
rnd.push(&decode(pk_seed).unwrap());
rnd.push(&decode(sk_prf).unwrap());
rnd.push(&decode(sk_seed).unwrap());
let (sk, pk) = slh_keygen_with_rng(&mut rnd).unwrap();
2024-01-26 02:55:05 +00:00
let sig_act = slh_sign_with_rng(&mut rnd, &m, &sk, true).unwrap();
2024-01-31 23:40:32 +00:00
let sig_exp = decode("A2C90186931A040BE4287A1A40706E5FC0C81FD93193D695772EDE7CC10D83086E93529B411394765E77F636F6A2EE7AFCECE43A726293C4B94916E891A8B7E95963E7C1533391068CEFE64F9FE391CF835FCB583851B9A8C444121C6909ED1CAE7B769F73FF40BB5FB48156385D6E396219570B6D39E91491E8866FF33E7B03CBC84B3AA1EA311FE7EFEF79CD4E43F10212F41282799E570D1385115D43DD774FD48C5913B11A261805D53E5330C2D0919DD2A734050D2116F93989509796CC153251E6F8A0F1244EA2B61F0105D0BBAAA850CE3F46DD8ED4DA07DE7066780F189A32D1EA749D0CD69900624140DC83A69DE6B8AEF8134C050D02C5A866FA6B09FDBF71E9F2E7549A76105A5B3071EDE8ED725764D5E036201A544295DD36C411D71A1860262BB3ADB7AA4A2F4319D42297C5A79C5FE61044AF0C2D4CB027D819134D8347A2BB55B3099DE0E65C99FCAA9803D779193D6A01CCEBDCB713EFA1DEE52B634CE13A5E50247ACE1898A2B0F250D37F551D87D3F24191E1F3832A3D7E8957179E06DEF23C661B75EEAF5F5F45218825841D97E26AD11E123631AD8136BA5F0B052108901F97BA4692B053978A1647397E3AE9B9ED666A33D1C0CF00C0223CB8E8FB1E3BA4D1A3EBF393E4C13B0C83CFEAE4E42E21C2E1EAD8CEE4C63D5DA07CFB915762F6653590AAE36F5816C4153F67BC489FE276259D5994D0E3E974B298D4A338F030515AC8609B4EAC1ECB25302F2813003A9CEB736F09425B3789D9203D3514F1614038AB7E342A590AD8F70357F19B8D976029DACACF907ADB402802C6516DC7AFB3E1F02CB85822EBB1ADF9D00396C92B4D6118BB0A20B2CFFBA0CAA9D47004200ED5F6C1FD6B92DCFAF56EEAD46016D15074B69410DDCCC044268296C50C977D73D56EE662964BFD6533BA877F857E91466CECA313303204A54F034224E871989E73160A53E245E5D4EEAFA0DC5CE37449627B8A981C4BF91F254DFD79228A706CB1A900BAA10B6DFF26B46BBF42B735BB989C370BDE4A7BD18DE4C09D021CA99BCF1C6B0D55AF5CF7D162AFD24FB3978CBEA372F094889647C62455AD6ABFBF2E421675B067E9449E3238513C07B50E1CDAB1769C3DCAA52733824FC02A480D7215B0C0B9EFF5E6D89C7FD49B0779759102DF96C9E77105B6FB0D8374A88F60DC3BE039655E683B8DDA65FDA4643D8D6D96EC9D45BB673D66B476ECFA53C44200E645351DC25B33019DB6ED75D11B96ABD6F5B6E9B70A032123E1F15E87C45D5F13E0C066015C128BEF43CCEE114971B5B2964761A334FA95BB9635A27722AD3AB4A32E36A1A710267A0DABA907F1E6B90F2BB351AACCC54FFCCAAD5C05F566773FE30DA66F354AC3A52EAB49E68EB4273366898CC35E2A99D2EE76F5F6B0BB0C22D9F52A0431D64CC0521BAA6B616208C78A27BF1B24EAB107C9595DF681EAE0A5F550938846A2A2AB29FDC2FD2E63025537708487695E254A2B6A93FB7BF7769AFD2924A6D59C45F23F934860CAEA0E69F60471B3DF3FBC3C633338C3D162E4D6A40539CAF8ACA9898A4ABCAADC7FF70E4343AFD094ED26F1686F2F52AE5132E74E6D6B1773C04EC0B60F1EA850B15F215E11ECEE561FDE2ABC83D19F73562ECD7D4951C97E798776F34A39085DE024DD8EB691D3410F923ABB5DC4DCBFC0078692D7BBFB878A727275634F8F65C4345DD919D17DF227FF197FF91E34789A4BA65FE866B6813762E5701090E358BA70C224046338064C4968B294B9967B03CA325F210B042B7B532FE7CF9000F7F4E8E34197FEA5BCAF8F2C7EE125B6B13726747475A976DDFE2C8834A8BB27B3395035C2F33A8066E0AF960319817165C4DBFDEBB2010BB6B662E6B02C795F6C5FAD765F223B06A828B9AEBD113547921F1F222B853C0C0AAD948AC07ECECA82F76095A9983EFC09944BB5B50DAB3DCA0E5BA82F372845A3844E21F3A1DA7E92ED9DA1AE088C4036A81256AD943300CD2F141D638FF32C4C7EB76F04429985992844FA6AF91D60F514FC2AF4A89978680F8C9B0567FCB6352AC1E43774A650A6445A888F8A6979AC2AFE37F5CFA05B1D464F9B7EB1E5F6F3D0CB8130F396B1CE91BBABF6F02310EC7F6CA3DE49440F6ABCC00275C5894172AA6249D64129CA7075A9DE0935B204187417A556394C8070101C4FF5908F94D1AA8957534A4A9293401269745EA45332312D746017DD1A5845301ED0FBFAE63436F93F898A7E2BA2F57CA8F49499768C39F6B65B3AF42CF7E33207245207A9B3AF99076EAC160E7D38EEDE7B7FFA66BCC27AFD1EEF41DA86AF4A55FCBFA47A2CF239D8E5ED557B2BF5226FBBB25B28B059AF44FE91AAE0312FD0A32732C2E8F49AEB07F3786088BE458AB82EA667A3961FD6105A13E5437444EADDCBDD5EEEBD168384085B307CCAEF9A3FDDCE28451575EE85E11638C84B282C4D7223203D627684E3C85ACBB668F7B4B9B63DE2A96495621F43E2E16150F9D860CF6DDA0BF4BE9ACAD6F864F8BF9E59092D232A9BC66F2A51B2D09B4CB1A8B7CAB4E2CAE495B250D424A2B8419238F8C7A708C9CF00A9F60C65CC0D8CD321A74AE84C9C6D8755DC33242ED8282E762141CBFFB67F4E641DF4B7EBD4ED2F2846BD2B70D75C4BFFB3BA3A96672A28B16E31C6D75C7AEC7A722750DB78E797FAFFB62E2703B5D9750073286B9B35B02A6C3D8C531DA2AB18E94FF4B65BABBE48DD4D69B3B74DDE7E218420DFB15B6AD33AF2A2E419533A0A5534CEA81A819AA916D549CF1D3FC4A158E58F4ED7EED50F0AAE2C68BF3F64B9295BB8AE4B7001FB6E8BA84DB4C2CED2C5AA92EBD6C4FCBC8079369BA56720B6BD36083C67947D260AFF4962825B955
assert_eq!(sig_act.len(), sig_exp.len());
2024-01-26 02:55:05 +00:00
assert_eq!(sig_act, *sig_exp);
2024-01-31 23:40:32 +00:00
let result = slh_verify(&m, &sig_act, &pk);
assert_eq!(result, true, "Signature did not verify!");
}
#[test]
fn vector_slh_dsa_shake_192f() {
use crate::slh_dsa_shake_192f::{slh_keygen_with_rng, slh_sign_with_rng, slh_verify};
let m =
decode("D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835AD55B22E75BF57BB556AC8").unwrap();
let mut rnd = TestRng::new();
let sk_seed = "7C9935A0B07694AA0C6D10E4DB6B1ADD2FD81A25CCB14803";
let sk_prf = "2DCD739936737F2DB505D7CFAD1B497499323C8686325E47";
let pk_seed = "92F267AAFA3F87CA60D01CB54F29202A3E784CCB7EBCDCFD";
let opt_rand = "8BF0F459F0FB3EA8D32764C259AE631178976BAF3683D333";
rnd.push(&decode(opt_rand).unwrap());
rnd.push(&decode(pk_seed).unwrap());
rnd.push(&decode(sk_prf).unwrap());
rnd.push(&decode(sk_seed).unwrap());
let (sk, pk) = slh_keygen_with_rng(&mut rnd).unwrap();
let sig_act = slh_sign_with_rng(&mut rnd, &m, &sk, true).unwrap();
let sig_exp = decode("A2C90186931A040BE4287A1A40706E5FC0C81FD93193D695DB6395C1C1EF3AC36AD0EAC32544588094A8557CC7A8E0422CFA09A5F41C000D69FA3A1AE772D7BFCD62252D54A6EEA8F75DE0A18DA8DE8D9D3DBB43A2731FB628D86105168AB35EB2927FB93C63871A358DB670E40C55954BDBC0B4F7A9501CD1446B7D7A21FA4D287CBA7203C7E8324AEFCF72CEDB7C76BE26E575829E7F22621137396A676A72CE72A931BE154FBBDBAC237E96011A0221852972B8B5B4EEA44C2D3C1712982D28B73E9065156328F501E4CBBBA76080CB06D2272DD211240135B635C0AAA6141FCEBE61CF891BBDD31B3BA7FD6EF6F3F87386E36B9918A8FDC02258F2B0197CCA5A44AE57FF52B18D2865329F52E8B91073EC63204F57795EA121CE58A5E170CC8403BD96F511BF0F0F36C99481B6E1EC0A8C9637D5F72287C17F485F5078282B5F8803AC392726FDB5B09F18B6A4E1F884C6FFFB3E546832C5DF33E7408613A354DAE2F4F66EA1496472445DCA1DF6C0867DD1ED07D72EE0BB98E5406E3A0466C5888E32544B67EAB1320A2144D4F15C74A3B353BAA69FFE3B82B1616DBE8BCFD1F852E7A99E10BAD140FE52CCFFC27CCC3DDECCAA64C112849EEB07B796123DEB543CA12EA22EB9A851393C40986888BE8CB60D37F0049626A7351BFEB5A300C2D60160A2BD64E96409D45C7DA84B7DF1B72F8A7C8E6B85A41C1E6D3AEC810C20B76DC1214C2EF767CA537F1E7B56D7A42A48E8F885A914702117DECE6D422FF918F4F6A142763D6872EFEA703A958CC700B4C7F763744C9FD8E0852AA04FFDF0C37967F6B1E2350D19A818EA4DA9ED02388A073FDB07ADE8A84E3E971D7208B3EE1F2D5540F0B200AD7733E1E81094F532635FDFF7B1AA5157B5EF594692DECB004B31B83E6C7DE76FEC9C6773D9AC28F34532B6216A42B8CD04D1954366B5AAA126AABD56F961D633A7060B41E90A8E4B011484F8CBFE6542D9FB4A06F6DCEA1946644F0844CAA1FE483AF294E99454AEB33FBAB34094B784ABB9634713A020498DC43941468C03F9D0891538502088FD6FB5C06CE52BAE4BD75FE93CEFA9C68B06AFFB702CE195728EB40698C839E268BD377BEAD45E056F426775952093C5FF80BF932CBDFAB1EDC263090306A48360C2725CFD2330F0A078708E05ADCE3BC7A2AAEF2721C5F0F1C2C62E4BFA7F081F5B34FEE6F1856B2006F379E6CF9BABFB56FE9FDEC5C9468789BB9548864AB1E8DD3678B99557AB5002722397C17C04A588276B298D9DB115F66910529CB50C54D42CD0B3F37D935892E3403E23A0B9B6AF3530E453061F0F378DF4A3C580B4ECD4AD7BE44D1F1C65800D46428F01971C33F0097C88D5262883CB4D4DB05ECA16F5973D2EA54A4A06EEE75C84BD508E03C213BA0D8028EDEE1A5E522C2DEEE5F804FF26722916CF6F40AFA95162C4A570287ABA21267AAD4CE276C2D8FA854F571759FD41DB5EB12A6785862B087C19156B2F32AB8BBB728BC9F1E78A49B334228F88189A0074CD56D19F3C56C600C5CE9D942C99B2C538EFA6ECD0F453D9100EF4C7C7FB9F31B18828855D60E1869A6486372F174FF85FFFFB4553941BDC1545DC054531305DD39A5E5AF662BB7B49660B9802602236CB40E82B74DEB04784B05DA41B2D546E6368639D39183BE24D2B36B952DA0CD9948C81F5D7150B455004FA87C4F32A1DC936F42131487F100BD0A1D8B4014B30C7D95C577A27A1181BC70ABB8BAEB130D89DA90758B0DCFB9760BF0D4FE9A862EC8B7ECD2ECB214D81BC010B435DD906B389A23B1B68D19DFF3047B7B9992E02D7A3D2B79B542E8735DC70CDD471E47A29C25AC6D56CC88126A0F2B164F8038574754C768014E0D60665C42B6A1BA688E566D98583154365435737DA41C55BC17ED02E36F0090E4D8C2BD593497A0BF88C39FFA5EDEF0E4BD867FB3E2198BBE1561FE1451F371E95320A9DFE036C32EB3075D97A7B6A641FBF41D4361C2BD5E4C92ADE8CEEB9DCD58C4A7D2471EFF76DCF3B9A4A1469AAC17DBA76F36D65F9F6914C37340C22C00158004FF15AE21661593541B2013417BCFDDCD603579661F3AA82E41D6698442A9EA86BFAD7A5C94A5D504826D111F5E6527EA8C544C685338B9642CCA7DCC29C156D28AE8AAC7FFD65A297FB648AA702B62E209C35159113EC36A2D46B4A12B31A0FBF06B80D24EFB917DFC2638677C509F9697D4E4FD877F982D804A4F7D395E230FF52628BA18C701554AF6F500D03D1B99F540A3D374DA317336C42550C2EDE87F5E3E8F460A6F24553409B3D03036244BB495751EC7E3FA9A73F11840CAE62A0AAAFC07125AF80EF5E6967D199089B428EC991EC8150BFB80289995B62A153F8AE9CD0A6447239A47EE35359AF5BEAF84C28A00CA1DF388D79D58DE4369A3E3D2BAD4EBF101032DC51E4A01F64C2348608FFC0F456497D461A9657F03A4F50142DC544989A99E9C2930560E7D4282A3B2E81E7EE9616B50CEE7AD5116AB8721F7038407F9248776EBA7C7DF77C621AB9BCC0463583C57399ECC6E4D9905596990CF28CD7F9981F18103A256793C4232DF889EB82130F27B182C41624C84BC4CDEE6ADE150CB20238E2F649EAB7EE464F5A398868FFA396AC2A3776BF58A37BE70AB2BA2FAA90ABC74484461420E6F5D9CB00E4E95434CAEE850E90464BD049FD841E10602384BA9A3E58A71BD0FAC7F63873C71819A8C25552ED988F162CEC067FB888A45D0B805478F07853B7241A0D67A2D161D2C67C678A283BA18A832BD646F51B6F6F569E61766CE9DB16728EF61094502DFFA71E17C2432659178222DE88DEF97414EB5C1CB131C622E1257E538F7C7272EE5A9A034D48ADA4B38
assert_eq!(sig_act.len(), sig_exp.len());
assert_eq!(sig_act, *sig_exp);
let result = slh_verify(&m, &sig_act, &pk);
assert_eq!(result, true, "Signature did not verify!");
}
#[test]
fn vector_slh_dsa_shake_256s() {
use crate::slh_dsa_shake_256s::{slh_keygen_with_rng, slh_sign_with_rng, slh_verify};
let m =
decode("D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835AD55B22E75BF57BB556AC8").unwrap();
let mut rnd = TestRng::new();
let sk_seed = "7C9935A0B07694AA0C6D10E4DB6B1ADD2FD81A25CCB148032DCD739936737F2D";
let sk_prf = "B505D7CFAD1B497499323C8686325E4792F267AAFA3F87CA60D01CB54F29202A";
let pk_seed = "3E784CCB7EBCDCFD45542B7F6AF778742E0F4479175084AA488B3B74340678AA";
let opt_rand = "EE716762C15E3B72AA7650A63B9A510040B03C0FE70475C0463BBC45A0BA5B79";
rnd.push(&decode(opt_rand).unwrap());
rnd.push(&decode(pk_seed).unwrap());
rnd.push(&decode(sk_prf).unwrap());
rnd.push(&decode(sk_seed).unwrap());
let (sk, pk) = slh_keygen_with_rng(&mut rnd).unwrap();
let sig_act = slh_sign_with_rng(&mut rnd, &m, &sk, true).unwrap();
let sig_exp = decode("60F74DB4F30C2224DDDE29F0F2A2505E8F689B3E82963B818C79484A58DF44348873BA7E88C71F7305CF5F5577B0FECF60E99F79ECD8D4533B9391942C40C37A76B68641C094316F3A9E8105AD59F5DB4E9C50C8DC0E8D708B7445AC0CFD237B7D186CAF84D9FDC90348F08B7D28306D1ABD77E3E0C286A3B7FF17E772FB99366D7F370500389BFD9F7AE1345BDA21D45B12FCDE4CF7D76A111A56B450AD7ABC2E33ECCBED39C91F8757D1C7F22FC2D97FC773B8378D52B356D96FC171B3DE0D474445820A069AE8E08B8895AD30E748B3E6B794394A8DF2D58904F32DCCC042754769A611CC9D809FDB9EE513E32D8A9799EB3183F56B51AB390AD39BAC8CF4CB39B4B503CC0946FFA6B8B838FBBDD9D668CD9054023EFAED212ED6E8B26DBDCBC66A7F2C05B5285F926EAC556FE107B4374EE6B45195450E00455152FD3E4CAF2535E545BBA5439124C3A46C11ED363A0409933780DD39A52B1F77F651919EF70937129297B2378CD964E5D7D5624D1DDE6CCD6261D1AEAA0B197472FB546015EAAC944774EAF02C35E2916D54EFB90BD50EE30E3F5658271F63813BAF91C2E62CEB67CD75BB8EB6E45C353479C695E051094752EF85B795A2E4F43D86B6E590F9A15C05A83941084650C4E9476B8A57D81BC3B17DB8C10385D34C13E9176604B088B165598BAD6FD28B36DAA330B0528DC56BCE46883F85660BED6E986D1A30B059A116191658D26A77C876C73500E1EF3684B0DC3F2E9FDB05D44D607D4B0F37380413B226983EB837C8C0DE723D67A0E2B6537C424A0CE8E251C12B220141534C08A330D405F2F3473AA88C2B55D7F0F15AF955370EFC152BE419E153F858210F838B32F9AE6B93A19B6BBE092F921ACA557211912D9A3348E2D1DCB64FE15A3951609D9AC71D7ED1B033921EA2F5F3B272772C222691D3B5D145E0E7F4C2B207BABDDC6F1D859F957C9018F85408E3FB6247FC20D73F9DEE5187E5D5D2F4572C3BE9388232DE7848F59CD4E0A4CFF4D92EC8C9FC9C600237EB27602F2449D1AD4E84C8559957478F9A88724B1ABB1A13B63DCCF168BDA3FBDFAF463906D06F902B4B561837604624060C5F0FE41B1DA51B0C6C25CA5F477E9E2692BB1F110D89A28BBAE324A2B592895E26742A11F0C4FD219CA16086CFDEF9EB7F5CC62AA68FA089A10D25BBBEBDD9B1621289CF85A7EAE40D9C96F86C179B5BC2BE3853397B9C5D51506DA5D17128A3CB72F184BBCB1685B769690AB8B0E43BD2D62F3A28BE1D9457463436BE7FFFBC769EA19E7FCF760BE345D5AB9F615A5AC0C95741E20DE82D512432E71F9DDA258B5B22943616B391A87CBBE7ED9D96A4A88914D5F536C326A0C6288D3F7E2E9F791FF26A46F1DC02A9A42E01D0EE7FA946F49B277FE6748632230752EE49C7E5FD05E830FC47857652E8FA75044D3DB3D64CEA80075334638FA5215B7DDD946D9DEFFC81DB73A0BC7C240E158F2BF578EE487F5D3835C350691E7AB8E3721D8BD46300388B24E576503319ADD07E0C3DF7E911C5FD2115DD2D58A1E02A2C60D7F3BEF391518AFF2B2EA29796B72946F21BA5CADB180825DEA5C04E49B9A68CF282353775ED1023DCCD555752DB3497A6D986538C5A86190BE0D295E0CB33D59CDC1236D197A014AB7A2E71BC2177E129BFE429A5465EFFE132535A1C31AB7B04BE00C995E2228E0F7BF2EA0107E1112695A4CA52EA7C0293B21D9BF10295C39B5CB4EDDDBD88BE06E55FD5A8590D933AB6A2ACEDDFABCE07746E69888A9BBDDB7833281E95DD44C5E3B4B7EE2CFDAD036D04BF2CC5935B4D6F1FF70336538493CF058805AD4237878DA5CBC3F580CC53F3C366F90A443F9FBD1B1C9568D60C1EB55F6428F74DDB1684FC1C244DEB40D534C5732C529D105B66E8566D66A2180893B03B74D51DA8944CC05DB2C2DA447E87164899CC23F14E11610739EDDD993BD8C01CEFB266F4519FEF2696A2E040AC45766CD300C72B44058C4FCE79B34778D9DF476BF4F4272D851556AE941FE459AE094C6C675DB418D824A02C1121D4B53BBDB02B918EEF378303FA679371F4CE54272B676EFC8E1CC0766C3015E59DA72170CE7C35D8B23BB2458D259FA752AC9B5BB3C3B53A7701CAACCAD52573869695A110A1791F5E891E8A25C2ADA6E5A045FA20D97C6BAC257F306DBBDBCC853B7660A53C87B7A230FB8F5BB566D7E3ABB0C90DBA80E2B433843D831DD9697B5017457BB48480D72AFBD495339BDB937CBF62F5853542D2320997AB921E449AE5A2FF143582B80EBAC72DB6BB5BE5A066FD824940049893600FB62B20D1089F6204CAE00614A96E639348BB6744F62CDB366395DD1859CC0BAEEBD3747DE4066C547E8CDA5E47B9741B4AA70E7060BC2DD69547A6E472DFCEBBB65D82C3E0176CBC2000723B50BDC7F1726D74FC19FE3B9BF2581515306D52D4A52B7B0F0AB8F7BBE0959A321C7E0747F906A3662F51753269970B138EB86B8B33398FE1034DBDA2D3D7188974B556DFB389F499D57559FACD1BE12809350618F418444C389181732D7006D4725A4E9F850219F34FABFB7EA3C020BF5E75844677EEC8BC47689354F5D1E20827CF81C65E2F256D55E5C28C5DC84A6882349440E453AA749D408DC8ABB978F41869F2600FEB249520E732823B2D5357D609167934D4DAE2C7C3E817E6551E62E9B627CCECB0D116D293769495A82EFA9A77399895C5564BABEC2E37ADDAEEE1F8D3F05DE0F6E95F5BF556D17E042AB42AD7A5D4851CC32D1FFED7EBAF1E8EB89F1DDAABA740FE6D3D1A9CBF57D5D66EB0A287302245696B01D8ABE92C0744794666C58ECDDF50753AFF8FE4044878418D9697D9CD9962611788698597B80
assert_eq!(sig_act, *sig_exp);
let result = slh_verify(&m, &sig_act, &pk);
assert_eq!(result, true, "Signature did not verify!");
}
2024-01-22 00:15:52 +00:00
2024-01-31 23:40:32 +00:00
#[test]
fn vector_slh_dsa_shake_256f() {
use crate::slh_dsa_shake_256f::{slh_keygen_with_rng, slh_sign_with_rng, slh_verify};
let m =
decode("D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835AD55B22E75BF57BB556AC8").unwrap();
let mut rnd = TestRng::new();
let sk_seed = "7C9935A0B07694AA0C6D10E4DB6B1ADD2FD81A25CCB148032DCD739936737F2D";
let sk_prf = "B505D7CFAD1B497499323C8686325E4792F267AAFA3F87CA60D01CB54F29202A";
let pk_seed = "3E784CCB7EBCDCFD45542B7F6AF778742E0F4479175084AA488B3B74340678AA";
let opt_rand = "EE716762C15E3B72AA7650A63B9A510040B03C0FE70475C0463BBC45A0BA5B79";
rnd.push(&decode(opt_rand).unwrap());
rnd.push(&decode(pk_seed).unwrap());
rnd.push(&decode(sk_prf).unwrap());
rnd.push(&decode(sk_seed).unwrap());
let (sk, pk) = slh_keygen_with_rng(&mut rnd).unwrap();
let sig_act = slh_sign_with_rng(&mut rnd, &m, &sk, true).unwrap();
let sig_exp = decode("60F74DB4F30C2224DDDE29F0F2A2505E8F689B3E82963B818C79484A58DF443442B5B4E7562933237CAA8F6E39A97DFFAE24CC51F41E6900711FB08C851770B33D4B425AFBA3DA8A1258E8769BF53E24DCE1D689973D6FF53F7F09C24CF3C5D0F0C22F85E5562FA4ABB18610850DCF6CCB8D1A3D4E3EEA48AF87FD1D8F417647A381502062FB94DE5C8D1CEC61519BAD34CC437CE0B0A4642F7E24BDC0A4221EB418DA07E64E4CA91EEAD38F2CEF71B991AC9487B91CB49BEFD482CB1F3D4A25EA101624EAE754C32C0B83ABD57D9DDBEDAE2970E69C8FB92A8E8AD7C5DE41853DFF1D6A3B5D4C9989F4B868501B84414F22FC436ADECE6A5B6BCC66137740BC49A94D664EBD5CB0F0FF71E2C2CDFC59B7A5EDEC96B0558AEFA7BCC27CEEA4CA90171A89559D122D10345BAFA31177130A55807FECFFA36F05542248042A5CACCEBA91D13B71CDE5C1AB250ABBDBBE2B2EF02A6B22E2701085E1CCE697D23AB16377C18B69BBE99C8B95FDE42D5736D6D897A3461D20BF8B169768EF94C13F9B09335C2E376D6C8332C5CED764811D032ADCA915A2E13F49F9344B8832D952BFF9E2598723FAB10D81317DE303FEA7E453B01FEF68F4D0ADF6E54C9E6A204AE3334CC9284289E6027EFC0A35C9A42AC6AD9241BC57C162C9594B813AB1BBBF66D6C853251FECA9A7BACBAF1FDF33BB723A1F710D4428FE9058D925AFB6FBA75B201D2062399ED42888E00B8FFF572EB4F12F03528D1FCC0CF2D519BA3A5BD1F618DBC7DC272FCB211B561B5C824AA6375E0E8187A384EEB717EE4E270B00BF5438907787C27DD9C593229CFFDC56E5FDB3D51D40D535AE654D887E89F30700D8412C6F9BE67B4678E9EB968D9D35E694A4BC1EEBD7903DE4C744B339BD1868E040661D43D6F055AD1765DA9E66E44CDAA61117C682C155D1A15ADA16B301DD2E2C7A7F0C9C5049869A976B4080C82420EACE5AF98F3D13312229819A8EA4BEDA306E72CAE744143B347791190B9D2EE4A8FCB92832EE6C2FBD9F352DAFC8C4561455A72E8FC29403B395D0ABA43807FAB36DDA4148AA857AF74FFF5C8889F87CFA219BE10E83B19078B15E070A5A16779322124B38F485DC9585F9DD4AF7B7460651A4CC49E39E2DDC60FECB9B6B8FB9904D6BE7818CE1F08842E969F27039F3ABAC4A0038089CDC327863C18F35917C09C1D9C151C9F30B180DAF15B21F92B7EAB6E1A5209BFE0F4CCB29A186B66A5ACA6A010F6F572EA2EB02F6157B05DF9F451766BE6FD137B2D416B766D112BB6876CD950DE288C20A5759280A73C1E8750EC008E034668A38B5D132B274D58FEAED148E8A6DBB9AD556BCEABA86C30D2F29DBA7528753354F5E10A3A3A60F7D7D5D1F7EFE1D25386EFBCF4F9D24C01568287F8D8DA5C314694690576E826817CF19F085A8C44BDA05FA0325B21F501CB11BC514F65D8012F24E6630BCD82C3902D201E5830AC488BE48BA9B3C74E8D5980CD0FF18D3737681CA6D08396C6561367436D7FDE69285C364A97F799BFA9DEA8B011A248CB2D758518F4F7FF85905F9B97FDEF07B4A4D00880A1898D418ED43001068FDF33514ED548442BD396299A65EFA0F489F8C342A8EABC7D80DC171B919A3690F9614DAEE49A5DCB2B972581AF94CF3CDA9CD9BFD4A866A7443D8FA108251EF6BA16EA7F334CAAA8F5579B4BD6A5087D9D382266CA7ABE1E542C1D585DF86BFEB0E4D2B2B8EA02FCDDDED88C7FAAF37C83A83892BF366E21633D9C09F11174B6E61B83CE2A7655738E7B1EC8DA161634C64C9713370C6C3BDCE5EBC22098402AFE7BD9E9A566C8956279E1120B2A69B8391425D7820D0D79D7226C1DC4370D6507EB62E672F8369F741B0551AB6E6E648CD330E8BD2FE38CDE1700452E6687477573B357A96E79875B353D0141BC9C2AA6A295501A6F3B75BEDBC96FC6C2CC9A1C3ACF691591CABB8B832CFA1A38312354E68B47D8FBFCC1CB479C9DDE16C626D4C22AC34EC1E26A26399BD1559CC3FCEF0E03A990436629254533B8ACF9994D4BFB36158590CE5E5966F84141035DDFBB644D0AC41EABF4B9491DC3915191B87747FBCE98B76974522B401F6200B60B6C90CFD446924E153DCDF3F869906841DFC7E6EFA5C9BAC0C09A8F28C1F3A913D4217D2FFB72E3A8CB8D4A1B601C3D4D3A66F0850BD71554426E6E9636E307BF0F9365226C923850AB34559FBFF433BBED71C3A2B8C387E111EDCF7A9EE33485CD6F5BF1004145C00342C74CAD8BA9E720902B3ED284FCFF92A528D4B6B28904123FB444B45464AB07B1B27319DBE1BDB7CA7F3677C2DC9F36BA624B9C3921C1746A04B7D2893C5A7C72083CC718589912BC097505E501C7CB5110378956FDA9473F4978B092ECC3353BE4DEA0C81EB61ABC5441314F70DD00DC1EE9D000BD0857C973714692B24B8216EB5BB3CD7516E74D85621E03277AE2D87E04F353C518EE41C67A0241E87E68CA4243899FEB5C373C67B00019FEE8BCC458643E2465C6993CD4D0B7137A4C3FB81F207173AEDFA185E4288932AE68C2938EEA912547A92A6F3217913903F6C3EDF9B66861AED97E882D329E8A2D7B92542BE7A7A1CE085CC451211C7EF79596C081182079839EA2A0215857CDD852CD6BF93CDBBDEF9770503AEC6D5FA2A7C0896350958C69DF91250D199309F5D42612BF148A6BA1C9EB8DC5F69CF11317F2A8C5B55614F1C83B6073BBB0175E61BC2CED3C09A7A7FCB7EF01E4A93B72864EBF5A06F55040FDA489B85533589DCE9788DCC0A75A3E815AF79A2CC5EE1DA5EC4529EC049922B1CF0FC707C31BADE8A6C38694E584B447AB14EA9A5F56DE46DDC4708D21920878C4677256FFAC066A79429D44C4
assert_eq!(sig_act, *sig_exp);
2024-01-26 02:55:05 +00:00
let result = slh_verify(&m, &sig_act, &pk);
2024-01-22 00:15:52 +00:00
assert_eq!(result, true, "Signature did not verify!");
}
}