diff --git a/tests/pbkdf2test.c b/tests/pbkdf2test.c index 7eb93d1f..7fecfaa3 100644 --- a/tests/pbkdf2test.c +++ b/tests/pbkdf2test.c @@ -42,6 +42,7 @@ typedef struct { int result; } TEST_PBKDF2_VECTOR; +#include "pbkdf2test_sm3.h" #ifdef ENABLE_SHA1 #include "pbkdf2test_sha1.h" #endif @@ -128,6 +129,13 @@ static int test_pbkdf2_hmac_wycheproof(const char *name, const DIGEST *digest, return 1; } +static int test_pbkdf2_hmac_sm3_wycheproof(void) +{ + return test_pbkdf2_hmac_wycheproof(__FUNCTION__, DIGEST_sm3(), + pbkdf2_hmac_sm3_tests, + sizeof(pbkdf2_hmac_sm3_tests)/sizeof(pbkdf2_hmac_sm3_tests[0])); +} + #ifdef ENABLE_SHA1 static int test_pbkdf2_hmac_sha1_wycheproof(void) { @@ -170,6 +178,7 @@ static int test_pbkdf2_hmac_sha512_wycheproof(void) int main(void) { + if (test_pbkdf2_hmac_sm3_wycheproof() != 1) goto err; #ifdef ENABLE_SHA1 if (test_pbkdf2_hmac_sha1_wycheproof() != 1) goto err; #endif diff --git a/tests/pbkdf2test_sm3.h b/tests/pbkdf2test_sm3.h new file mode 100644 index 00000000..b836cff8 --- /dev/null +++ b/tests/pbkdf2test_sm3.h @@ -0,0 +1,672 @@ +/* + * Copyright 2014-2026 The GmSSL Project. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + + +static const TEST_PBKDF2_VECTOR pbkdf2_hmac_sm3_tests[] = { + { + 1, + "RFC 7914", + "Rfc7914,Printable", + "706173737764", + "73616c74", + 1u, + 64u, + "30530b86537c85ea33fbe26ee0adea8d8bd91d283b87936f400e83ad2364ef2632cd8662313657c0e6138ffeda2c4e6805869cbd8030188858d8a675ac762523", + TEST_RESULT_VALID, + }, + { + 2, + "RFC 7914", + "Rfc7914,Printable", + "50617373776f7264", + "4e61436c", + 80000u, + 64u, + "6064dd50568a7cd0fab52aea443fd71c6f45044fd0aede5928568be7948a34699d2bfce8a435110f551cc0e1814602c03c11ecb7f951fec50602850a5102cb88", + TEST_RESULT_VALID, + }, + { + 3, + "", + "Pseudorandom,Printable", + "7130577430643470", + "798acc7c76739d75", + 4096u, + 16u, + "67676e93c77d10cb6c3783285df0cf63", + TEST_RESULT_VALID, + }, + { + 4, + "", + "Pseudorandom,Printable", + "5a30673349567272", + "84bbd18de5ec10ff", + 4096u, + 42u, + "fdf1106ffa3b9277df853d26b339f52f35baec64eb571a663108869dd8a9a9853ce2a3af98420f104309", + TEST_RESULT_VALID, + }, + { + 5, + "", + "Pseudorandom,Printable", + "7439315572766f47", + "5d76db9ca0f0bae2", + 4096u, + 65u, + "b5a34184338ee89ee606206de0d20ff0f7e7a23435bc6430a3c694f37d6a1b00e5e94bac388fb23d91e9df885affffb89f40ef21f604b2a0c66a4532d9475b50c4", + TEST_RESULT_VALID, + }, + { + 6, + "", + "Pseudorandom,Printable", + "6b6f67583748447a", + "0a8fbd0232a3a7f6e60d6564c92ea35f", + 4096u, + 16u, + "d7261b16507590013a88486ba2f15e7d", + TEST_RESULT_VALID, + }, + { + 7, + "", + "Pseudorandom,Printable", + "4939745242645168", + "0a3bb93c0de86a174ab005b8089706ab", + 4096u, + 42u, + "1232b57a0e99e1c31b52aa15ed2be377c1c88cedf4f6a1ab011b17fee949f521952848cd5b518279b689", + TEST_RESULT_VALID, + }, + { + 8, + "", + "Pseudorandom,Printable", + "6f4f4d37324f6330", + "3827c3b6b1e6de7aab096eb75e23610d", + 4096u, + 65u, + "34925e660732f9b5a025f76bb6e8580bf43bd116874176b10b98b6bcd75106b3dc5e3ca928bf58342c9a1110355cd013348586fb9418b7aa07db02c3d0fce7fa43", + TEST_RESULT_VALID, + }, + { + 9, + "", + "Pseudorandom,Printable", + "6761734354484546654d36526f61386349", + "cac9ae7ef670990e", + 4096u, + 16u, + "876b1d1c3a30320d91f1acd4f5c9e622", + TEST_RESULT_VALID, + }, + { + 10, + "", + "Pseudorandom,Printable", + "75375330684678774e33586f76707a6551", + "201b1e277f4ff955", + 4096u, + 42u, + "3dbe58427090b9602ea4e433d1d64266d5ca410e698d153bdf920f10385fac00a11756356d4090bb10cb", + TEST_RESULT_VALID, + }, + { + 11, + "", + "Pseudorandom,Printable", + "51524b6a6d6d6b48524462507178696868", + "e71d6a702d2d54bc", + 4096u, + 65u, + "73546645e9a2c48a38bd1333ffe79ce4c007d6593c43b5589c2932fe634014ec52845583aaf4456992168fba4c46b01053178f502a9a000470d057d8ddada80373", + TEST_RESULT_VALID, + }, + { + 12, + "", + "Pseudorandom,Printable", + "3732317a52704b79306b4c6d3862317279", + "8b9314972ef99ac98b69b6c2ac4247c7", + 4096u, + 16u, + "2b89b164916adb18a1f31987ea8cfa24", + TEST_RESULT_VALID, + }, + { + 13, + "", + "Pseudorandom,Printable", + "75507078436d7536577a68535030553947", + "874d7cc9369ff9988642ffe05a7f2153", + 4096u, + 42u, + "3371bcf558e5beb6900dd911504e16f0b88fcc447865bd69aafcf84958898bb67789a696413aaffeca61", + TEST_RESULT_VALID, + }, + { + 14, + "", + "Pseudorandom,Printable", + "6f39505350597a445349783365374d7063", + "1569909588ec25a3afa147cb7fff9fb1", + 4096u, + 65u, + "d967f74d9f26748f5337ce819f7f7de71782fa23e3dad80eb4aadedf80a6e2dc24c7ba503000a28a1bbe933e546ca0ada1feb62626786a31211f90fcb9ca5a06bb", + TEST_RESULT_VALID, + }, + { + 15, + "", + "Pseudorandom,Ascii", + "4b2d6c600e66535c7f3d6d6c", + "7a4c02db8bd8fcc2", + 4096u, + 16u, + "91615a1fd85b2ce54175d53b54fd9a86", + TEST_RESULT_VALID, + }, + { + 16, + "", + "Pseudorandom,Ascii", + "287e74200e6b69285f5f7e00", + "dddf018487fa4b95", + 4096u, + 42u, + "b995c9dc7d7de704e75adb307a7463af8eb1a1214c7e1d5756ded647bc01a2405c0dd2020d0738f69fbe", + TEST_RESULT_VALID, + }, + { + 17, + "", + "Pseudorandom,Ascii", + "0f3b5e220e1c000c2a703a4d", + "7cf71b19c0daf499", + 4096u, + 65u, + "a30a1b3c1bdc4647b8ef09464a90291a1ece755ea9a51e8abc361c7d1b85dd658f9903e1f9149ef459c396a0957285b8331d59fa3da4ca2104b162ef0c614a3f7c", + TEST_RESULT_VALID, + }, + { + 18, + "", + "Pseudorandom,Ascii", + "1f4b7b354903545f2b07720b", + "62f91ea01f3a18aa2f122bd15c4a615b", + 4096u, + 16u, + "ce6666c3c90fd03f2ff9ea866bda353d", + TEST_RESULT_VALID, + }, + { + 19, + "", + "Pseudorandom,Ascii", + "5d7e1f70174b2f616c0d6722", + "4fb602173327228431dd8d088154c7ec", + 4096u, + 42u, + "01656dbd9d427c2c24e5925c54f02b2be7d2823d7a75bc5f28d7f508192636767066de931cb5e3b42a72", + TEST_RESULT_VALID, + }, + { + 20, + "", + "Pseudorandom,Ascii", + "2657324e694c6b242b174f1a", + "3cad67ef1eaf3aaafb5ee372d6b1ecb4", + 4096u, + 65u, + "2e937e2bcbffb5fb9a7cc70ade267166245b8d44900cd0f969d4e94e094933470f2f282c6e2e0b60e68b01ef9465a711ea93c05780398a62db4a9297bd20d66922", + TEST_RESULT_VALID, + }, + { + 21, + "", + "Pseudorandom,Ascii", + "15296b0933473119180f3c0645202d5221633803", + "d7412e4137fc4410", + 4096u, + 16u, + "8576bba6cb370711bece61da514e4caa", + TEST_RESULT_VALID, + }, + { + 22, + "", + "Pseudorandom,Ascii", + "2a1124361d53464245580130076d6b54001e3d01", + "7ecaaed1eab03c3f", + 4096u, + 42u, + "e69d3012e1aad8c592b6cfd90d0eb794e25ecee0abb4fb118db78e9d8946d10a937203d8ada9d5513895", + TEST_RESULT_VALID, + }, + { + 23, + "", + "Pseudorandom,Ascii", + "666252024e18233308430820127e753e6b041f56", + "756fafa7fac1f019", + 4096u, + 65u, + "a59977ba4a1d4c64be8e556711b5190bbed6abcae3d7247651c1af5bc466e6f3b01b6202a2717339df8d0b1b6a00848b2c43462aad78cb36c9c17ec399b9de8d7f", + TEST_RESULT_VALID, + }, + { + 24, + "", + "Pseudorandom,Ascii", + "7a106c2773542c791d2f0a02632b69644f666278", + "a36350db68186d747254bd9835219487", + 4096u, + 16u, + "d9da6b5ae5cabb64f88f793c5a4a71c5", + TEST_RESULT_VALID, + }, + { + 25, + "", + "Pseudorandom,Ascii", + "0b3c6f070149615b5b461c7f5c3a366a6d375402", + "42be6c8fcd7858458fb97cece0069524", + 4096u, + 42u, + "177cdbf42a88e7c8fa290275d0106d57fe6a69a71d8872d1761b85a66758f13c2179c3d3b7df30bfd335", + TEST_RESULT_VALID, + }, + { + 26, + "", + "Pseudorandom,Ascii", + "5177161d237c1b64426353434113015665344a6c", + "596dbf5830aa8b00682429883e0b1ed0", + 4096u, + 65u, + "048519655408d72c4c173118f108a5d787ab012907a31a5043092e798fae06b7634322fce15b569b31c953c5171b3ef60585bae8d93803c66733862cb0a6d7bf80", + TEST_RESULT_VALID, + }, + { + 27, + "", + "Pseudorandom,Utf8", + "d0a3d1bed38acc83", + "8dfae85c9f2072ae", + 4096u, + 16u, + "1e1c52ab28aefa2910283d4e73b1a0ef", + TEST_RESULT_VALID, + }, + { + 28, + "", + "Pseudorandom,Utf8", + "d0bcccab64cf9a", + "15187b0393d8a441", + 4096u, + 42u, + "622c7a3512f08e5aadc54cc132333a7bfeca8d749785eb6f890110a19cfcf520b3f50f93f2c3dc049a93", + TEST_RESULT_VALID, + }, + { + 29, + "", + "Pseudorandom,Utf8", + "c4bddd8f4ad69d", + "775bde4bd6e40ddd", + 4096u, + 65u, + "c8ad831611823697248b520cd60b8ee2e942006a488f4097064ed3c9fbf119d88370bb0de9db74d07c083f1d12bd930ee6f796b504c5b911595af9f4789e8a0646", + TEST_RESULT_VALID, + }, + { + 30, + "", + "Pseudorandom,Utf8", + "c299d292cd92dcb8", + "99c55e182238c8e0c385447685e9ba85", + 4096u, + 16u, + "1448021efc4f6dedd8644408b0fd5c7f", + TEST_RESULT_VALID, + }, + { + 31, + "", + "Pseudorandom,Utf8", + "d086d0bed193d9b6", + "42a7aca6a7664f87b405b49d62a074db", + 4096u, + 42u, + "9acb158ae657392d9a84fbf0781193f50a791aa3780a6b7d68ad55aad8bf3b06fb4ac4468de9dfd3da44", + TEST_RESULT_VALID, + }, + { + 32, + "", + "Pseudorandom,Utf8", + "da8ddcacde86d3b0", + "f3eb3938f338fe8639813beacd8100a5", + 4096u, + 65u, + "f674b79d84ac2f0d5f052f4e2149772007973d51f79988c2fd393fcab979eeae6e452960bdef12b3d97e1e6a5a319930e0fae4137b4f8b9f436773f51f0ff4debd", + TEST_RESULT_VALID, + }, + { + 33, + "", + "Pseudorandom,Utf8", + "cfbec3b9d7acc7a9d585d1a5c28fcca119", + "e9c55717a1259a29", + 4096u, + 16u, + "0e6f3566061f113538c829cc6ff49cb3", + TEST_RESULT_VALID, + }, + { + 34, + "", + "Pseudorandom,Utf8", + "d29cd099d197d1b0da9aca8ec2a3daa5c38a", + "5acc2d76a9f4444c", + 4096u, + 42u, + "c6ad62a5497cf6ec97d2dc2dffda20da5b3b6c86a8dba209a5cef7bfb8f4572e47ce458956c187620f17", + TEST_RESULT_VALID, + }, + { + 35, + "", + "Pseudorandom,Utf8", + "de89d193d18c75c2b8c6bcd190d198c3a2", + "c69c3b58917e0975", + 4096u, + 65u, + "5c99806849ab3d1ec4ed76e572c70692277e39e899ddd7afe8c7d683afd3c90dc84ff39090fa4a8aa747f951a3036d0708be8e7dd9473ddb478f0ba4762eb118c1", + TEST_RESULT_VALID, + }, + { + 36, + "", + "Pseudorandom,Utf8", + "da9dd096cb93db88dbbed495ceaacf853c", + "200bba668b2010b1968b82091848937c", + 4096u, + 16u, + "20bbf10d7ebbc366bf6be6515dffc679", + TEST_RESULT_VALID, + }, + { + 37, + "", + "Pseudorandom,Utf8", + "de81d0a6cea9c7b3cbabce9bda90d29f73", + "36586fdefbe916369412c9f3e6337ddf", + 4096u, + 42u, + "c672292d20533aa0b1786704f5bf9611943d326051d2582db8229ed969a7a8762f8043d74ee70849b227", + TEST_RESULT_VALID, + }, + { + 38, + "", + "Pseudorandom,Utf8", + "d281da97c8a3d8b7ceb9db80dc8dd4a0c3be", + "ab7c17e3b78fe71e373b0ccb0fc3ccda", + 4096u, + 65u, + "5fb5793b99f9f0e29c1ed11ab0e57548df1ba68cbe8ee23a1355acd39e141f6cf31f9eb4d3daa4ea6e2acbf0eb9df4f81b14aeec487e27c972509cad0c388a9429", + TEST_RESULT_VALID, + }, + { + 39, + "", + "Pseudorandom,NonUtf8", + "8423ec7ea4ca4b03", + "8dfae85c9f2072ae", + 4096u, + 16u, + "70cc72a1d0f57db0455762ce4f250543", + TEST_RESULT_VALID, + }, + { + 40, + "", + "Pseudorandom,NonUtf8", + "2c3c932bf0648bda", + "15187b0393d8a441", + 4096u, + 42u, + "aa830b688108f28ce8c9829d547a780cb448d85d9a14cff611a3f69744e5da919c5bd18897b2dab8fa47", + TEST_RESULT_VALID, + }, + { + 41, + "", + "Pseudorandom,NonUtf8", + "393d474fd84a259d", + "775bde4bd6e40ddd", + 4096u, + 65u, + "52d5f0b4d0b73ed12183e5c62d4e9f2ea365f11e26e714ed83beb5fd28e4207741d92aff160ff0934f9d61f1c14fcba380916110395f7c04c60cc18101cc6e221c", + TEST_RESULT_VALID, + }, + { + 42, + "", + "Pseudorandom,NonUtf8", + "48997492c3528738", + "99c55e182238c8e0c385447685e9ba85", + 4096u, + 16u, + "0a5cceadb0b83d39fde47571f17f3857", + TEST_RESULT_VALID, + }, + { + 43, + "", + "Pseudorandom,NonUtf8", + "74064c3ebc53d676", + "42a7aca6a7664f87b405b49d62a074db", + 4096u, + 42u, + "9b3e92f924d48de3a08ebe29f68f7328d1a5474f0b9dd942bfc51cf92848cffa622149601485109901b5", + TEST_RESULT_VALID, + }, + { + 44, + "", + "Pseudorandom,NonUtf8", + "668d4f2c8f86f4f0", + "f3eb3938f338fe8639813beacd8100a5", + 4096u, + 65u, + "ddc5094f8bff1c702ca68bf30c6c9378ff6485751f2de2fc362291fb28c27d5bad59dea655e9ea134822fccc19864e486e9f23c8ce3d4cc63be7d93dc0092fe8d1", + TEST_RESULT_VALID, + }, + { + 45, + "", + "Pseudorandom,NonUtf8", + "e3feb0f96dec61e9dd451465f88f132119", + "e9c55717a1259a29", + 4096u, + 16u, + "1dfcd933cc4eee350097779ed0694615", + TEST_RESULT_VALID, + }, + { + 46, + "", + "Pseudorandom,NonUtf8", + "5c9ca419dc576470269a828e40a3aea5ca", + "5acc2d76a9f4444c", + 4096u, + 42u, + "04a91d5e093610c81b8988278d4143f9014d57e27ff61555f7191e2c2942a848c973356de10c86d26202", + TEST_RESULT_VALID, + }, + { + 47, + "", + "Pseudorandom,NonUtf8", + "bf898453344c6875f0b8b9bc2c50fc58e2", + "c69c3b58917e0975", + 4096u, + 65u, + "46060743a0afa6b4538c9e507a10e7ca1af41c6e0e0100623bbd9b3b813087993709563e73b4374bd93a81a1458ccbf7ae929b8a868ce63a4256b93387902549f8", + TEST_RESULT_VALID, + }, + { + 48, + "", + "Pseudorandom,NonUtf8", + "9e9d7c166ad3bec856fe5d15d3aacbc53c", + "200bba668b2010b1968b82091848937c", + 4096u, + 16u, + "15dc7b62c30545df20a4b6b1edb5ee79", + TEST_RESULT_VALID, + }, + { + 49, + "", + "Pseudorandom,NonUtf8", + "17812c26bba941f3c2ebdb9bb6904c9f73", + "36586fdefbe916369412c9f3e6337ddf", + 4096u, + 42u, + "0f4e55bcff199415fa52decbbc052ad2f4eac6b07e227f0c6849669fee712c881a21b420deaef75470b8", + TEST_RESULT_VALID, + }, + { + 50, + "", + "Pseudorandom,NonUtf8", + "6c816697ba2366375bb986c0af0d7d20fe", + "ab7c17e3b78fe71e373b0ccb0fc3ccda", + 4096u, + 65u, + "0f6bb0b3f177365aba1238ee8054dfcd774e0274909e97c904bc7f1f2dc3d523be409ef785893d1c0dc08636e64b683156a6865454f8975edc6e135094c23a70c9", + TEST_RESULT_VALID, + }, + { + 51, + "empty password", + "Pseudorandom,Printable", + "", + "1a71e2118c9fbcc9", + 4096u, + 32u, + "20fdb4331ef976d15d8dc1af90d139424dba907d15e890c9b1fd7be9720c9f68", + TEST_RESULT_VALID, + }, + { + 52, + "long password", + "Pseudorandom,Printable", + "523249584467597a5a4271363970667a4a714e744b7761545a4544494676766b6a6253417167566e456a6b456b454557504e69383653626a6e376b725764394d67", + "d26b99043c8ba3a4", + 4096u, + 32u, + "d7a0e23705b0c4dac29496fea7fbc2fa7a025f88ed7099bb6e5f49c6d64c6b0d", + TEST_RESULT_VALID, + }, + { + 53, + "long password", + "Pseudorandom,Printable", + "63727a466d396430795463456a6468545758693877674e516f544e6d486e61686f6956317071613133655471477933497531354b4f52516339494c53646756527a45524e6b4463723565676a62584a78426572536a74726b6b674341616a63356243354434706e66743836663754626663666370595a30767354454d4930524178", + "9266da5b8c102b27", + 4096u, + 32u, + "55e04f1fb6659a8ce40e17563f51368f55034746592535beea37d7bc0f178d98", + TEST_RESULT_VALID, + }, + { + 54, + "long password", + "Pseudorandom,Printable", + "32647a56696e6f45774464656c656257797058314d6f4f685975585a463172514b7a32535a6c307578576377796f3561416e6f42524e7a5044763072513662693742345a34324f50695258534c6859684441643262746f647633744d54424430744b46316e4b655942656565547a70413145434150713942687a4a4c555a67737636754e4b664450333558414d684a486c736a6f5a796b677130624d506265556941796d6f324371586b64524752633876544176684e5a5838536f564d33704e74594a4a7258766975337547583233736a353847723061614a4b45763765796c373248636e6167713474766e533737626d6376676c79536d347370707a65673869", + "6a06903b78dae6de", + 4096u, + 32u, + "be339d131aa1448bf2c919a9dd33c0ce3009b7372395071c2561aefaf26dca90", + TEST_RESULT_VALID, + }, + { + 55, + "special case password", + "NonUtf8", + "ff", + "32140a66b88e1683", + 4096u, + 16u, + "fae8957b889efd0a9a7c7be41037a419", + TEST_RESULT_VALID, + }, + { + 56, + "special case password", + "NonUtf8", + "ffffffffffffffff", + "8a359634423ed028", + 4096u, + 16u, + "72cacea870736bdb8799c11548fd5e0e", + TEST_RESULT_VALID, + }, + { + 57, + "special case password", + "NonUtf8", + "c0c0c0c0c0c0c0c0", + "d6f596f170ed2414", + 4096u, + 16u, + "f9fcf33456f82d2247ebc45aef388217", + TEST_RESULT_VALID, + }, + { + 58, + "special case password", + "NonUtf8", + "eeeeeeeeeeeeeeee", + "6b2269425e288d03", + 4096u, + 16u, + "79cb4216fa056ba6055bd4d6bfa6dc4f", + TEST_RESULT_VALID, + }, + { + 59, + "special case password", + "NonUtf8", + "f0f0f0f0f0f0f0f0", + "ebf0b04633711248", + 4096u, + 16u, + "ab2bebef6ca8a0602b889281993f8509", + TEST_RESULT_VALID, + }, + { + 60, + "special case password", + "Ascii", + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "9de9b71eeb9d9a34", + 4096u, + 16u, + "b6b45b3dfbd87e35dab8c4ce6bc3458a", + TEST_RESULT_VALID, + }, +};