diff options
author | lloyd <[email protected]> | 2013-11-18 01:43:02 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2013-11-18 01:43:02 +0000 |
commit | c83790b5bc35cd186da81276afcf6b17a4269520 (patch) | |
tree | 33c1d0f502cc8b57bf3ef70d60dacebc4f6bd1d1 | |
parent | 6162cefdbe4df65a4ab1046950874a7319158e06 (diff) |
Generalize file reading test runner, use it for KDF and PBKDF
-rw-r--r-- | checks/dolook.cpp | 143 | ||||
-rw-r--r-- | checks/hkdf.vec | 1 | ||||
-rw-r--r-- | checks/kdf.cpp | 44 | ||||
-rw-r--r-- | checks/kdf.vec | 893 | ||||
-rw-r--r-- | checks/pbkdf.cpp | 49 | ||||
-rw-r--r-- | checks/pbkdf.vec | 139 | ||||
-rw-r--r-- | checks/tests.cpp | 53 | ||||
-rw-r--r-- | checks/validate.cpp | 2 | ||||
-rw-r--r-- | checks/validate.dat | 587 | ||||
-rw-r--r-- | checks/validate.h | 11 |
10 files changed, 1196 insertions, 726 deletions
diff --git a/checks/dolook.cpp b/checks/dolook.cpp index 364a3f8c3..92792c24b 100644 --- a/checks/dolook.cpp +++ b/checks/dolook.cpp @@ -57,43 +57,6 @@ using namespace Botan; namespace { -/* A weird little hack to fit PBKDF algorithms into the validation -* suite You probably wouldn't ever want to actually use the PBKDF -* algorithms like this, the raw PBKDF interface is more convenient -* for actually using them -*/ -class PBKDF_Filter : public Filter - { - public: - std::string name() const { return pbkdf->name(); } - - void write(const byte in[], size_t len) - { passphrase += std::string(reinterpret_cast<const char*>(in), len); } - - void end_msg() - { - SymmetricKey x = pbkdf->derive_key(outlen, passphrase, - &salt[0], salt.size(), - iterations); - send(x.bits_of()); - } - - PBKDF_Filter(PBKDF* algo, const SymmetricKey& s, u32bit o, u32bit i) - { - pbkdf = algo; - outlen = o; - iterations = i; - salt = unlock(s.bits_of()); - } - - ~PBKDF_Filter() { delete pbkdf; } - private: - std::string passphrase; - PBKDF* pbkdf; - std::vector<byte> salt; - u32bit outlen, iterations; - }; - /* Not too useful generally; just dumps random bits for benchmarking */ class RNG_Filter : public Filter { @@ -108,50 +71,6 @@ class RNG_Filter : public Filter RandomNumberGenerator* rng; }; -class KDF_Filter : public Filter - { - public: - std::string name() const { return "KDF_Filter"; } - - void write(const byte in[], size_t len) - { secret += std::make_pair(in, len); } - - void end_msg() - { - SymmetricKey x = kdf->derive_key(outlen, secret, salt); - send(x.bits_of(), x.length()); - } - - KDF_Filter(KDF* algo, const SymmetricKey& s, u32bit o) - { - kdf = algo; - outlen = o; - salt = unlock(s.bits_of()); - } - ~KDF_Filter() { delete kdf; } - private: - std::vector<byte> secret; - std::vector<byte> salt; - KDF* kdf; - u32bit outlen; - }; - -Filter* lookup_pbkdf(const std::string& algname, - const std::vector<std::string>& params) - { - PBKDF* pbkdf = nullptr; - - try { - pbkdf = get_pbkdf(algname); - } - catch(...) { } - - if(pbkdf) - return new PBKDF_Filter(pbkdf, params[0], to_u32bit(params[1]), - to_u32bit(params[2])); - return nullptr; - } - void RNG_Filter::write(const byte[], size_t length) { if(length) @@ -163,12 +82,10 @@ void RNG_Filter::write(const byte[], size_t length) Filter* lookup_rng(const std::string& algname, const std::string& key) { - RandomNumberGenerator* prng = nullptr; + if(algname.find("X9.31-RNG(") == std::string::npos) + return nullptr; -#if defined(BOTAN_HAS_AUTO_SEEDING_RNG) - if(algname == "AutoSeeded") - prng = new AutoSeeded_RNG; -#endif + RandomNumberGenerator* prng = nullptr; #if defined(BOTAN_HAS_X931_RNG) @@ -192,40 +109,6 @@ Filter* lookup_rng(const std::string& algname, #endif -#if defined(BOTAN_HAS_RANDPOOL) && defined(BOTAN_HAS_AES) - if(algname == "Randpool") - { - prng = new Randpool(new AES_256, new HMAC(new SHA_256)); - - prng->add_entropy(reinterpret_cast<const byte*>(key.c_str()), - key.length()); - } -#endif - -#if defined(BOTAN_HAS_X931_RNG) - // these are used for benchmarking: AES-256/SHA-256 matches library - // defaults, so benchmark reflects real-world performance (maybe) - if(algname == "X9.31-RNG") - { - RandomNumberGenerator* rng = -#if defined(BOTAN_HAS_HMAC_RNG) - new HMAC_RNG(new HMAC(new SHA_512), new HMAC(new SHA_256)); -#elif defined(BOTAN_HAS_RANDPOOL) - new Randpool(new AES_256, new HMAC(new SHA_256)); -#endif - - prng = new ANSI_X931_RNG(new AES_256, rng); - - } -#endif - -#if defined(BOTAN_HAS_HMAC_RNG) - if(algname == "HMAC_RNG") - { - prng = new HMAC_RNG(new HMAC(new SHA_512), new HMAC(new SHA_256)); - } -#endif - if(prng) { prng->add_entropy(reinterpret_cast<const byte*>(key.c_str()), @@ -236,20 +119,6 @@ Filter* lookup_rng(const std::string& algname, return nullptr; } -Filter* lookup_kdf(const std::string& algname, const std::string& salt, - const std::string& params) - { - KDF* kdf = nullptr; - try { - kdf = get_kdf(algname); - } - catch(...) { return nullptr; } - - if(kdf) - return new KDF_Filter(kdf, salt, to_u32bit(params)); - return nullptr; - } - Filter* lookup_encoder(const std::string& algname) { if(algname == "Base64_Encode") @@ -292,18 +161,12 @@ Filter* lookup(const std::string& algname, // The order of the lookup has to change based on how the names are // formatted and parsed. - filter = lookup_kdf(algname, key, iv); - if(filter) return filter; - filter = lookup_rng(algname, key); if(filter) return filter; filter = lookup_encoder(algname); if(filter) return filter; - filter = lookup_pbkdf(algname, params); - if(filter) return filter; - return nullptr; } diff --git a/checks/hkdf.vec b/checks/hkdf.vec index 57a90cf8d..7d309aea7 100644 --- a/checks/hkdf.vec +++ b/checks/hkdf.vec @@ -12,7 +12,6 @@ IKM = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232 salt = 606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAF info = B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF L = 82 - PRK = 06A6B88C5853361A06104C9CEB35B45CEF760014904671014A193F40C15FC244 OKM = B11E398DC80327A1C8E7F78C596A49344F012EDA2D4EFAD8A050CC4C19AFA97C59045A99CAC7827271CB41C65E590E09DA3275600C2F09B8367793A9ACA3DB71CC30C58179EC3E87C14C01D5C1F3434F1D87 diff --git a/checks/kdf.cpp b/checks/kdf.cpp new file mode 100644 index 000000000..b27162632 --- /dev/null +++ b/checks/kdf.cpp @@ -0,0 +1,44 @@ +#include "validate.h" + +#include <botan/libstate.h> +#include <botan/lookup.h> +#include <botan/hex.h> +#include <iostream> +#include <fstream> + +using namespace Botan; + +namespace { + +secure_vector<byte> kdf(const std::string& algo, + size_t outlen, + const secure_vector<byte>& secret, + const secure_vector<byte>& salt) + { + std::unique_ptr<KDF> kdf(get_kdf(algo)); + return kdf->derive_key(outlen, secret, salt); + } + +std::string kdf_test(const std::string& algo, + size_t outlen, + const std::string& secret, + const std::string& salt) + { + return hex_encode(kdf(algo, outlen, + hex_decode_locked(secret), + hex_decode_locked(salt))); + } + +} + +void test_kdf() + { + std::ifstream vec("checks/kdf.vec"); + + run_tests(vec, "KDF", "Output", true, + [](std::map<std::string, std::string> m) + { + return kdf_test(m["KDF"], to_u32bit(m["OutputLen"]), + m["Secret"], m["Salt"]); + }); + } diff --git a/checks/kdf.vec b/checks/kdf.vec new file mode 100644 index 000000000..0f5bb3383 --- /dev/null +++ b/checks/kdf.vec @@ -0,0 +1,893 @@ +KDF = KDF1(SHA-1) +Secret = 61736F67696A6F7367696A736F69676A736F6964676A6F696A6F736467696A736F6964676A736F6964676A736F696A +Salt = +OutputLen = 0 +Output = A0D760447F105CE64DB99FF2FC92F961F24E7D9C + +KDF = KDF1(SHA-1) +Secret = 61736F67696A6F7367696A736F69676A736F6964676A6F696A6F736467696A73 +Salt = 6F6964676A736F6964676A736F696A +OutputLen = 0 +Output = A0D760447F105CE64DB99FF2FC92F961F24E7D9C + +KDF = KDF1(SHA-1) +Secret = 61736F67696A6F7367696A736F69676A736F6964676A6F696A6F736467696A +Salt = 736F6964676A736F6964676A736F696A +OutputLen = 0 +Output = A0D760447F105CE64DB99FF2FC92F961F24E7D9C + +KDF = KDF1(SHA-1) +Secret = 617361736F67696A6F7367696A736F69676A736F6964676A6F696A6F736467696A736F6964676A736F6964676A736F696A0A +Salt = +OutputLen = 0 +Output = DBFEFA0EA12D352C4AE5B0AF17D061E0E2C469A8 + +KDF = KDF1(SHA-1) +Secret = 617361736F67696A6F7367696A736F69676A736F6964676A6F696A6F73646769 +Salt = 6A736F6964676A736F6964676A736F696A0A +OutputLen = 0 +Output = DBFEFA0EA12D352C4AE5B0AF17D061E0E2C469A8 + +KDF = KDF2(SHA-1) +Secret = FD7A43EA8A443C580C0DE618ECC013704505EFF8B5A4A9 +Salt = BF0B2ECD1724A348211D8C0CA7 +OutputLen = 1 +Output = 79 + +KDF = KDF2(SHA-1) +Secret = 701F3480DFE95F57941F804B1B2413EF +Salt = 55A4E9DD5F4CA2EF82 +OutputLen = 2 +Output = FBEC + +KDF = KDF2(SHA-1) +Secret = BEEA23BF806E106D0C91F8E87095AB402C433C581088E1236FD20564A8F1AF67DCD2265C40 +Salt = 36C94DC7C2353757E0778323B3DB333BBD57AA8F5C +OutputLen = 3 +Output = 78F8E7 + +KDF = KDF2(SHA-1) +Secret = 5A6999A96594B0989B89CA72B5C0803043D4DE78709B490EB98610 +Salt = 5F0F820B69ECA512 +OutputLen = 4 +Output = 84C92008 + +KDF = KDF2(SHA-1) +Secret = C6E227F3F9BB5227BE37D6CE7433022D5F0DFFE18C5777EBAF396F1E40C4 +Salt = CC06A6F3F9A0AF4CC76D839D +OutputLen = 5 +Output = F518EEE6F2 + +KDF = KDF2(SHA-1) +Secret = CD6356CA771E3FCC4BB548B4E6EE4E3715EB7A4A806E4967B1 +Salt = 221DA543 +OutputLen = 6 +Output = E72EC27D6A81 + +KDF = KDF2(SHA-1) +Secret = B7FA7917A833B0C0364FAC414D92DA +Salt = DC32AA175531CF88C8D55A51DA5CAFB314A92C2B52 +OutputLen = 7 +Output = 8E54D1C86DA8A9 + +KDF = KDF2(SHA-1) +Secret = 8A14 +Salt = 65A907357B5CBADC5C5EFF7065AD +OutputLen = 8 +Output = A2FC623645F9AD29 + +KDF = KDF2(SHA-1) +Secret = 135FF7296DC87F5775B64F8CFF46D366C10A8A98712345CE58CD5839E9 +Salt = A439FC03312570F9A4C76E5B17FA +OutputLen = 9 +Output = 73036FBD1941C7955E + +KDF = KDF2(SHA-1) +Secret = AD499722078DF83AEC1EC23A507B190740B0A6821F8C +Salt = 3772601ACF052CD530D91EC7 +OutputLen = 10 +Output = A461A98B6BBBB0FDB0BD + +KDF = KDF2(SHA-1) +Secret = CF99B7A985C223BE83F999D7 +Salt = 055396C3E0EE8190DBE10212AE099FF0BC0A8D +OutputLen = 11 +Output = 735BFCF26A4357F5642964 + +KDF = KDF2(SHA-1) +Secret = B640D21A1FECF5E61D79E1E09C2393915D5790EF8080E7F6CC18 +Salt = 5AE5506D6306 +OutputLen = 12 +Output = 6DB9BAE99803B2EB725FA8B3 + +KDF = KDF2(SHA-1) +Secret = F69885268F3DF8488490419F49CD39A54D0D8C9A3861D375A8BE +Salt = C1 +OutputLen = 13 +Output = 2A1EB238B7CB39422DE263E4FD + +KDF = KDF2(SHA-1) +Secret = DCF4DF1F6B5D71DF98ECFFE8A4B7C5E7234AFC10CC0C941D853BFC32487A +Salt = 7F246E5F44DABCB5B954A1B83D456F022C924D29A21935 +OutputLen = 14 +Output = FCF8D9D4E43318EFC0056EBCD271 + +KDF = KDF2(SHA-1) +Secret = BD2EDB4CCCB0ED3D01BA03D1A816425E40ACBC7F214126A6775AFE28B0B2646DE040B9ACF0 +Salt = A7E9F261EDC30903056744B123C3D364E979 +OutputLen = 15 +Output = C669ECC95557FE8E49457576BDABD3 + +KDF = KDF2(SHA-1) +Secret = 3185AFBCFC621B6F9FFCBB75C7E71A4161A0AA39278676 +Salt = 80834249A9A4CFFCD655AB92 +OutputLen = 16 +Output = 687481BEF8354C8D48D8F5A5F3D9ED3D + +KDF = KDF2(SHA-1) +Secret = 15723A13E56CA0FF5EE43D8A4BA8284B4A946D861F +Salt = +OutputLen = 17 +Output = 439082061EBAE065C434932D981603AE1B + +KDF = KDF2(SHA-1) +Secret = 92167440112E +Salt = 45A9BEDED69163123D0348F5185F61ABFB1BF18D6AEA454F +OutputLen = 18 +Output = 3A5DC9AA1C872B4744515AC2702D6396FC2A + +KDF = KDF2(SHA-1) +Secret = 208AA86616B4133903946BA8 +Salt = CF08208B76D97F +OutputLen = 19 +Output = A267CC65619C84EF5FE1744EC3A92A06B99399 + +KDF = KDF2(SHA-1) +Secret = 04879F0DB43E33435D53F0DDDC72BEB957F04F2CA5E8FB38DC4F78 +Salt = 2B688B3F6C12 +OutputLen = 20 +Output = F46E2675B807CC42FC1DD4C84A5BEA3AC175B093 + +KDF = KDF2(SHA-1) +Secret = AAF175079CB9CD462EB2D4D62440EF18B22AEF1552CE5F04EF0158C177572D21 +Salt = 48A228E55BF52B89A8FF5FCC3F4EE4F178D406CBA265CF9166 +OutputLen = 21 +Output = 5A3796C9045712759E6DE769E5049E5829408615DC + +KDF = KDF2(SHA-1) +Secret = 901BBA708DAE7365ADCCB7AE056729B5DD610226966B084A02D1E8 +Salt = 3FCD4A2A5D65E4CDF29241573F +OutputLen = 22 +Output = 8A397BBA8EA862DCD004897304B901784513754E9FF6 + +KDF = KDF2(SHA-1) +Secret = D20CD658 +Salt = 17D7E5C9E3DB69B28EC9 +OutputLen = 23 +Output = 5C893F99FE81F1E955F2A7CFEC4F50B7CCC890BEAE4768 + +KDF = KDF2(SHA-1) +Secret = B669EDEC3D9A78 +Salt = D072D0 +OutputLen = 24 +Output = 1A4DD8282E8B4D7A739030FF60CD88C4D3C0E5C3A0DEB127 + +KDF = KDF2(SHA-1) +Secret = 349AD0D9BEA0D29C +Salt = D4C8D8DB185F7EBBEC046ADC49A26DAA172F81E3 +OutputLen = 25 +Output = 678051858CED59674C06B60EE21D18ACD55C10B049B22F5CFF + +KDF = KDF2(SHA-1) +Secret = B809759B369EF9B2F34A0254AAE645 +Salt = D3EF4B914359E78F253FFC8B9B6D711E257B94 +OutputLen = 26 +Output = 1C2C3C95529E4C8E5677F714E122A2E348810379B09689FA4B30 + +KDF = KDF2(SHA-1) +Secret = 20216E8DCC3AA461F9FEFA4BE06F3C63BB +Salt = AD13544336F28B8F1B2615BB9658 +OutputLen = 27 +Output = A24D44F5194B4257B92CF85C8493B5BDA52515E18337280C45F005 + +KDF = KDF2(SHA-1) +Secret = 40923A6409592A370301A859F1E797 +Salt = C3D9FCE8C68AFD0F97D21AAE826ADC1EAB6F580F78B139B0B43B58 +OutputLen = 28 +Output = 4C8919843B73BAA06853E1C8D9D4B18518CD857A624BE3EBBD507BCF + +KDF = KDF2(SHA-1) +Secret = 26541874BEBDA8DB76CCD60DE28E65E91CC5F128B9C56F6609185F108337A4A98B +Salt = BD1D497AC525F091FBFD7389635DA5284ECE +OutputLen = 29 +Output = B16B3FAD79618B39D2FB0983BDE7D3E8C17E2DBF2C2853CE8D92191696 + +KDF = KDF2(SHA-1) +Secret = 5D17A9CFD9994A1CC1F0AAC3C48F60C7DB +Salt = FC56 +OutputLen = 30 +Output = 1233A118E3B025AF2240F2AB14A61777A1347AE58033B2FFA313946631B3 + +KDF = KDF2(SHA-1) +Secret = 32048974CBE67FE8B4E6C0D4E21035B2A657E7C5E3592A61A2 +Salt = D6ABF65542 +OutputLen = 31 +Output = 5301147F08E1D473F82558F815498F7421D8C501056402F77A186779A6C5C8 + +KDF = KDF2(SHA-1) +Secret = F4E8338789D14BCD31EAE46199DB1A86AC76B8611809DF4D77279F53CB0F6DBF +Salt = F7A146807292 +OutputLen = 32 +Output = 90C528975E02E3B5A9970B0074C02A691401A7BCAA94A8B731648A1732806D6D + +KDF = KDF2(SHA-1) +Secret = 0DE2DADDC876B4B0322B3B995B43B580B4D5DF529F4E29606F825AFA72 +Salt = BECB7FA1A65C69 +OutputLen = 33 +Output = 41163C646606A0B96EE1FA2783AAD072260670283870BB8A510A693D01F9C0A5D6 + +KDF = KDF2(SHA-1) +Secret = CF00B2A31485DCC4D6F9296D219F4831CE80A0043CA937F9712DCD1C0AF02BD9F0DD7C +Salt = 046259C93952F2 +OutputLen = 34 +Output = EFEAF89E578CFC169570F08452C42157EFB9905D33DCD97DF29A4CD626F9DF539E3E + +KDF = KDF2(SHA-1) +Secret = EE67BFB3A6F4CD +Salt = A85EEB10A12C6B8DE05642 +OutputLen = 35 +Output = 1D02C4CE8D6AF08F2A4E8660718EBF8031C640B7502BE5F1F2EE91CB35241952D63BB4 + +KDF = KDF2(SHA-1) +Secret = BC02C1 +Salt = E2E57EB395 +OutputLen = 36 +Output = 6D3B84710944B5A4448455C22D5CF21852123816A33269ECB29DBCB10616978FD5200FB6 + +KDF = KDF2(SHA-1) +Secret = 85B2DFCEC6D020E7DD45933451363AF111346D52E1BA4B168D47BE178F +Salt = CA79147C58E3422803290548BD3999F3738A04A8 +OutputLen = 37 +Output = E43AC0F5353A0ED3C35C1EC0BEA6190C49A9F8925E510DB762441BBAF8B798686C1BE6D84C + +KDF = KDF2(SHA-1) +Secret = 6E757BDFE044D00A96AB79F3CEB27F96 +Salt = +OutputLen = 38 +Output = 0A18BD32469D8FCA917A80C173C2E01B2C9E2AF978CDE34E5EFF933B563F3B26842778BAD326 + +KDF = KDF2(SHA-1) +Secret = 26E7CF534DAF8F9243C5CE3297D807D1C6B4F0CAB16AB5CED3C737 +Salt = 8AD8F6 +OutputLen = 1 +Output = 4A + +KDF = KDF2(SHA-1) +Secret = 166C66F4B39A17A2 +Salt = 81 +OutputLen = 2 +Output = 8AEC + +KDF = KDF2(SHA-1) +Secret = 8533C513D7D26ECD416DD3DC +Salt = 52474087F2 +OutputLen = 3 +Output = 030CAC + +KDF = KDF2(SHA-1) +Secret = E876D64472865C8F4B7F +Salt = BA88B207 +OutputLen = 4 +Output = A83C863B + +KDF = KDF2(SHA-1) +Secret = 15AC949219878463A7B1A6599ED9 +Salt = E79A373588F3 +OutputLen = 5 +Output = AA28AD4916 + +KDF = KDF2(SHA-1) +Secret = D288A4BBC027594788F81964C74F +Salt = 06 +OutputLen = 6 +Output = 5777F5478B70 + +KDF = KDF2(SHA-1) +Secret = 84D3564BA0AA5A0DAC7AD62F88D9373B9DB280D026AF0AE5BCA633AE36C24ABA95A005 +Salt = 364A60 +OutputLen = 7 +Output = 934CEDC65FDE09 + +KDF = KDF2(SHA-1) +Secret = 5977D030DF4051B9FB03167331C6B6366A0F8CEC71B69FFB1FDC9469B5 +Salt = E734 +OutputLen = 8 +Output = F09FE23B9C34EFC1 + +KDF = KDF2(SHA-1) +Secret = 26A51955CBF815122460E803F1B399F617A4AE1CEE +Salt = 0E33D563 +OutputLen = 9 +Output = 17A5BFF10B516A752E + +KDF = KDF2(SHA-1) +Secret = EFB7C556790493E3C15B513CCD250FEF4BA7878585B8E50E1009C56BB146B5A0 +Salt = FD7B +OutputLen = 10 +Output = EC92ACB1367E34CF1361 + +KDF = KDF2(SHA-1) +Secret = F2EAABA8E42ADCC55CD36A2C78DD0325E55C1B4E9C6BE9F77966BFBD623CD454267FFC0BA9 +Salt = D8D005AB3A3123 +OutputLen = 11 +Output = E0DC1C8E9071A644ADEE46 + +KDF = KDF2(SHA-1) +Secret = 01A8F53F2BBDFB05D41E9FCCDD85CFBD4BC0502C +Salt = 6E3EAC35BA +OutputLen = 12 +Output = 1C9D86C49E9F3DBFF9674A11 + +KDF = KDF2(SHA-1) +Secret = 02414433D5734F +Salt = 70 +OutputLen = 13 +Output = EDB45D5FA17F17147645DD8DC2 + +KDF = KDF2(SHA-1) +Secret = 13EC731CB6C29FC4350FE0DE63FCBB5A6F3568E05250099715795D51C5AC10D89883F44E46 +Salt = 93127BA3F25906 +OutputLen = 14 +Output = AA07990CEAAB482272FCB3A3AB46 + +KDF = KDF2(SHA-1) +Secret = 2BCB12D2E40A5BB81BE4297F9306 +Salt = 67 +OutputLen = 15 +Output = 3F450384BEB9C9A478F46F051FF152 + +KDF = KDF2(SHA-1) +Secret = 4DBF180733 +Salt = 54C4 +OutputLen = 16 +Output = 0FDFEE8AF8D926763E28AB284C7B8040 + +KDF = KDF2(SHA-1) +Secret = BD3E9044AD45F1E710529172837597E7BCBC2C27505187 +Salt = +OutputLen = 17 +Output = 0E4FD5D562490C5FFD0A37588344D86347 + +KDF = KDF2(SHA-1) +Secret = 822816 +Salt = C1 +OutputLen = 18 +Output = 21E8AEDC72151B03D2F9A3E7CD9CA6805FEE + +KDF = KDF2(SHA-1) +Secret = 7FE688 +Salt = C9 +OutputLen = 19 +Output = 6701CD19F736B12C067D58FBF0D024E695C18B + +KDF = KDF2(SHA-1) +Secret = 1EC869F1476B8C7C537E8B1AC4411A10332A7DD06645C835EBBB3CEFD570A9 +Salt = F338 +OutputLen = 20 +Output = F04DCD7617D96283E463511A1A9313006EB6BD4E + +KDF = KDF2(SHA-1) +Secret = 6C78966EAF4DB43ADC3865962F292CDC81 +Salt = D4 +OutputLen = 21 +Output = 9093D86736C445B12843AD189410984F8B912281A5 + +KDF = KDF2(SHA-1) +Secret = D85C07E05DDA286A4A1B9191A929FBE1D19D +Salt = 138399 +OutputLen = 22 +Output = DCB8FF108AAE1B16901CABF9BAF0AFC4ED1B20A72312 + +KDF = KDF2(SHA-1) +Secret = 597406 +Salt = D5A5EEBC47 +OutputLen = 23 +Output = AE58662CFE38E861B289EF9E3146A37393C798BB7ABEE0 + +KDF = KDF2(SHA-1) +Secret = 33460E +Salt = F8A648C9B6E9 +OutputLen = 24 +Output = 6A85B3C6A5A6D0E1734004B788FE84C744BBDDBE42C32ABC + +KDF = KDF2(SHA-1) +Secret = 74BF53754034B0DC +Salt = 89 +OutputLen = 25 +Output = BDCADDFCCA599DBB24A2789DEAD088EEA633E8A15A03B65291 + +KDF = KDF2(SHA-1) +Secret = F6B3A879AEE95C1604EF005F90D35EC4621F6BE5D52F65F1BF192FAD2D22C223D66B9C8454 +Salt = F89A58E89B +OutputLen = 26 +Output = 9FA401DABDDEFE3B64702DB7395950A357CA32A501E43CF6DFFE + +KDF = KDF2(SHA-1) +Secret = 5C90E327068324D80B780A10646E01F1C57D4F67E2BF9322 +Salt = C13297 +OutputLen = 27 +Output = F95C1618F2F62B9EB4516E0AE68D38658183D30BF3B97B63BBAEB6 + +KDF = KDF2(SHA-1) +Secret = F88AEB2006224184F1231BF42D63D2BA69C88ACD47C27996232EB2FCF04647E8D03308D6 +Salt = 55495A +OutputLen = 28 +Output = A7666ACE2515FBF42334F21F48510174CD8944A7397EE0F0BF38262C + +KDF = KDF2(SHA-1) +Secret = B98B0026B2D40DD0827B58090D2698140A9CBB3B13F5 +Salt = C1AA +OutputLen = 29 +Output = ECE9B1E55CCF257F2C7BA2B39BA852DB81FE9B32DD08130CB6041CB349 + +KDF = KDF2(SHA-1) +Secret = F8BEF20480916E2762A77D00 +Salt = 1CE36F6EC8FE +OutputLen = 30 +Output = 1102796B06234073DC6913318D65010A4F4C9E95358DACB3CE0D08857B28 + +KDF = KDF2(SHA-1) +Secret = 80C9D5FD0C7BC1278F74975303D1F94600877754FCE3B8 +Salt = EA8332DE20 +OutputLen = 31 +Output = CFE56E573F2933E1728B3367F4EDAA797BE7C843B89250B98C4EB3BAF2E4D7 + +KDF = KDF2(SHA-1) +Secret = 2EDB67D2CC64BF4B62 +Salt = 38D7ED2715EC6F +OutputLen = 32 +Output = 52E44DB4B04F9792243508B969FF730779CB2A1EDF764324D11C14235B055D30 + +KDF = KDF2(SHA-1) +Secret = 86D77225DB6E5EA176F5DAF433E4C2C804B24FB22F2747FC5D8978189842981F19 +Salt = +OutputLen = 33 +Output = 02BF3A2F5009054AF526E277EF6AB436BD8B7A53A3E4C2671F1E34556239F97453 + +KDF = KDF2(SHA-1) +Secret = C73E664D445C0C60C59CEF54F10ACEAA456E6BFB +Salt = F8C579F9 +OutputLen = 34 +Output = 4E984339A1FB20BD73894494B36CE8C1182BCB0D289BBAB3BBBD366B1DD061BB9E16 + +KDF = KDF2(SHA-1) +Secret = 0651E961BA3374DE7248CE52EFC948809C20B8 +Salt = 43 +OutputLen = 35 +Output = 36AEC134DF567B1FBF448D0C56C6B62E40A375BDC74A2D44E415BCD105B48317145D95 + +KDF = KDF2(SHA-1) +Secret = BF5BB2 +Salt = 159B4039D67403 +OutputLen = 36 +Output = 6F7533ABD09546770D6E71769A645B0D3BFA6D578B7B9B182D25CF8F8B4394C2BBDCECAE + +KDF = KDF2(SHA-1) +Secret = 64353C0E4D64C60C3F2FEBE1C6466E57FB28 +Salt = EF4AAB69 +OutputLen = 37 +Output = 7B80CD69345CBA9E46186372DD6602F2CB55496364CEEA96823110E28CAA68BB200F56F37F + +KDF = KDF2(SHA-1) +Secret = 6FD4C3C0F38E5C7A6F83E99CD9BD +Salt = DBB986 +OutputLen = 38 +Output = 02AEB40A3D4B66FBA540F9D4B20006F2046E0F3A029DEAB201FC692B79EB27CEF7E16069046A + +KDF = SSL3-PRF +Secret = 6E60 +Salt = 17FEBCA565786528F84A +OutputLen = 16 +Output = D626B75AB8BD4F5B9458BDDA8589FD39 + +KDF = SSL3-PRF +Secret = 66BEEC6EDE7FCDF50B76EBCD5C0FE0A472F2EA8B1E2BE2971E49CA +Salt = 5C461D77ACDB631ABAE2E7AFED5E9ABBBAA99B +OutputLen = 1 +Output = EB + +KDF = SSL3-PRF +Secret = 1171D78F812512DEFBA258574E41F2832BB9B359EB0CA79E7669 +Salt = 73D677854D88F62417774A2A5645CCAE9C1AEF8E9D1B48 +OutputLen = 2 +Output = 2C8B + +KDF = SSL3-PRF +Secret = 6162DEC990B2132C30C153F2B200 +Salt = 2666F0B22E8E48DB1640 +OutputLen = 3 +Output = 1B9430 + +KDF = SSL3-PRF +Secret = D3C0DD69C18F17D35C5296FE45F0 +Salt = 320C9EEC122C19AFB8E90F72 +OutputLen = 4 +Output = C7C19FCD + +KDF = SSL3-PRF +Secret = EE6A733EC671DA7477AE18916895A133CC92E23DBACEE2634846CAEF0B08 +Salt = B7F9722B37389C11 +OutputLen = 5 +Output = C264D9D0C9 + +KDF = SSL3-PRF +Secret = 97D7F3D2AFB3198862F6FAC8B17CCEFB26 +Salt = D3583CD13AC119CAFBD44CAEA5AB +OutputLen = 6 +Output = C1CB767626AC + +KDF = SSL3-PRF +Secret = E87A9BBC656884A13295B8D4DD4645905846C249D2470ACD2BE5 +Salt = 542D044668EDC104A9266C2EC79EC37F72A0C6B7301EFDF267CF39 +OutputLen = 7 +Output = 3DC5B6402F451C + +KDF = SSL3-PRF +Secret = 7463F0B9F822E17311E47680DC5B505811E9 +Salt = 02AB98439528C994 +OutputLen = 8 +Output = FE4B1DA4EDA36820 + +KDF = SSL3-PRF +Secret = EE8999703E5D9C628AA404235F3C94C3A890B1 +Salt = 161DEB5AB705BD15 +OutputLen = 9 +Output = EF317D3E81DAEF0F89 + +KDF = SSL3-PRF +Secret = AE531918E679D2D7B32C61BA31415484E9725B2905095819 +Salt = A162AC0F0AB41CB80735D1EDAEA3C562CF261C0067 +OutputLen = 10 +Output = 18D5272345C1695BE38C + +KDF = SSL3-PRF +Secret = 8FE402D6ED0BD018A532FC063E7D81D97CDEA7 +Salt = BF7F091B6E0DDB90897B6BF80A4F +OutputLen = 11 +Output = D61088CA1CE8944B17CD3E + +KDF = SSL3-PRF +Secret = 4279DB52505E7B505BBC26CE0FBF2F4353086C1363 +Salt = 8710A8A12B2D18A27A50E5F32C37448A +OutputLen = 12 +Output = 4A84A8E829528393FF890129 + +KDF = SSL3-PRF +Secret = B80B58DAB89B1C4D1335C48E479220E253B8EACFD64319544A +Salt = E9158BA5F6E25D013A37B9D65406E989CB77D05D97B2B04F9C7F26DF987A +OutputLen = 13 +Output = 1450E50B7D86B76015930BA420 + +KDF = SSL3-PRF +Secret = 965F1BC656F01C1C7F977419A5F99FB54FA34548C332EA79B5B0EE +Salt = 3F6FF94F05596ACBAF5AE7CBD97E3FF3233992D988361E +OutputLen = 14 +Output = CEE11A3A9A406FE9DA77FE6FB007 + +KDF = SSL3-PRF +Secret = 657B5F618710AF88BF4F0328E7071D022D02EA5E +Salt = BD0A575481E823931F68BE84E31DE56B2D95F3ECE4F614CBFD31CE +OutputLen = 15 +Output = 8EA957C330D55CC208326CEA06D25A + +KDF = SSL3-PRF +Secret = 33CE7917528009F2A1011CFCD494B80D4BBFD901 +Salt = 81851CC61D3E910E04D5EC38A465 +OutputLen = 16 +Output = 2FB1FDD16FCE41C9C563226A564D1647 + +KDF = SSL3-PRF +Secret = 40ED568CFC6C0A17866C67B7660C96BF9DA54C +Salt = A3502B96214854E5AF5720E8970D3F240AAB2E21319A88E901 +OutputLen = 17 +Output = 321118AA031C5C9EFF145542B4426C3C71 + +KDF = SSL3-PRF +Secret = 12695F5B19541C8B0092418A72A7ED8482F35FCC4A82D4E1C5AE +Salt = 2CE5F4676C06D0CB61E91F7D751F0F +OutputLen = 18 +Output = 22BC94F745F6E247054DDA2C772E5D2D3EC4 + +KDF = SSL3-PRF +Secret = F36E535A1C2C6F6771 +Salt = 290BE26068D887AA6E86500E85C606 +OutputLen = 19 +Output = 6004BBD20BB68E2F1FFC65977807EE25A3FBFE + +KDF = SSL3-PRF +Secret = 7C7EE43D46AE85D23F0D5264DBD410 +Salt = FC4A7F986331A012CBDAD765288C2CEC08AAD045 +OutputLen = 20 +Output = 0E1FE69316D67CF65D62196C25CC4F517664BD43 + +KDF = SSL3-PRF +Secret = C580B05EC577F45434C13640AAB31B +Salt = 6C9F5929EA435A86E117BD586B34F7E4F97794573C0B4C90 +OutputLen = 21 +Output = 937E22F90D1493317B0B068A44859036905540AF67 + +KDF = SSL3-PRF +Secret = E275AEB758A949CBB11256E74412E1DA3743899F9007DD5D80A7 +Salt = 585B267A9E08EF4DBF48F6 +OutputLen = 22 +Output = 69C2640797F38E87F1C870891164F0B31F1A3A02627A + +KDF = SSL3-PRF +Secret = DCF06E7AC257DA73CC6FC0A086B4 +Salt = 16F0355230F105EB316F558512EC3B51871741 +OutputLen = 23 +Output = 30CCF63491F642A55E45136E42FDD0355DB272502EA1B0 + +KDF = SSL3-PRF +Secret = C4C38EC6A1EA975D0ECA535B0CC4D6D0 +Salt = E84EE4D9DC701DE04E250768F2DFB9B6A2 +OutputLen = 24 +Output = 3B50F91EDFDD96CBA8B6329616D4F5964CD8C961CB1D9332 + +KDF = SSL3-PRF +Secret = 7B557AC16D60B74ECAA87641887E6467BAC107 +Salt = D7B9EB91BCDE1F6C144A0799 +OutputLen = 25 +Output = CA148D27F3DC362B0F43C68312058C1CD9B92ECAC2CFDD601F + +KDF = SSL3-PRF +Secret = B23EFA7FAA11D0E597F00867992CB3B9DA93D607FAC0 +Salt = DA5E3A17C6DDE81CC69A5AC11904D2E9E969D9F2D1731E842C +OutputLen = 26 +Output = 510297144BA4E0FB5C94749576F756AA36F51289CA463419DC06 + +KDF = SSL3-PRF +Secret = 1A5063B374A5F7769AD59432CFFA6B +Salt = FE0314911D4C07803C48A9EA86 +OutputLen = 27 +Output = 3437D8B56E573E724B72DD08A5D144E86E646BD24EA0795BA2C3BD + +KDF = SSL3-PRF +Secret = 870515C65F0AF7AAB10C365AF8AC535E1AA8997D139645A21F71FD23ABBB +Salt = AA33C0BFF91FC9F1C97BFD00D5F5AC2953C6D1EC43E5838887A2F984C5A53F +OutputLen = 28 +Output = 1895554BD0A1DE7F48FA8776D314EAE2B9E8D7E3CF2A418D17659DC1 + +KDF = SSL3-PRF +Secret = 1BAE220F6AFEB0A2F51D44721A7A9B9C +Salt = 11555530CBAECFF82C76147416A50831532A40BD29F15F1E0EA49129 +OutputLen = 29 +Output = 13720151D256DEBAAA668359A876A9A9788D540F509E90372952A91757 + +KDF = SSL3-PRF +Secret = BC55F2BAC14370BB5832575A233F1FCE32322E5B4CE1955153CAF3C84493DF +Salt = 00E8D1BAA9142A646C5DBCC680FB +OutputLen = 30 +Output = 972B190F7EC73DA7C5B8B38E9B6DCEE452AB0BC2220F37BEA3FAC596B2F6 + +KDF = SSL3-PRF +Secret = 834CD382FBF84FF54CC8D3BCB778ACD7DDE8FE32ABA212ABB1 +Salt = EE768F1AAF889EFB5B20F7536FECA037BF +OutputLen = 31 +Output = 6151C82D7384ED41264424827766B6A7279593C86DCBAC9A4D711009E30EC3 + +KDF = SSL3-PRF +Secret = E0BDEBC1D1EEDB393368D489 +Salt = 5D2B46C7BB5258ABC13514995E518FD4D77BECB738D77909 +OutputLen = 32 +Output = F3D8ED6D46280C3694F33D2D4A210248D657277DD78ACD3B34063D085657A58E + +KDF = TLS-PRF +Secret = 6C81AF87ABD86BE83C37CE981F6BFE11BD53A8 +Salt = A6D455CB1B2929E43D63CCE55CE89D66F252549729C19C1511 +OutputLen = 1 +Output = A8 + +KDF = TLS-PRF +Secret = 6BB61D34AF2BCCF45A850850BCDE35E55A92BA +Salt = 510194C9C9F90D98452FB914F636D5E5297C +OutputLen = 2 +Output = 5E75 + +KDF = TLS-PRF +Secret = 3CC54F5F3EF82C93CE60EB62DC9DF005280DD1 +Salt = 7FC24D382379A9CD54D53458947CB28E298A1DCC5EB2556F71ACAC1B +OutputLen = 3 +Output = 706F52 + +KDF = TLS-PRF +Secret = BD3462DC587DFA992AE48BD7643B62A9971928 +Salt = 9F6FAFED1F241A1E40ADEAF2AD80 +OutputLen = 4 +Output = 841D7339 + +KDF = TLS-PRF +Secret = 1235A061FA3867B8E51511D1E672CE141E2FA6 +Salt = 1026B9224FC59706BEADAE58EBD161FD2EAC +OutputLen = 5 +Output = D856787D41 + +KDF = TLS-PRF +Secret = 63A22C3C7C5651103648F5CFC9764A7BDE821F +Salt = 512FBF47D9DA2915 +OutputLen = 6 +Output = F13096FEED6E + +KDF = TLS-PRF +Secret = AA15082F10F25EC4F96DFFE9DC3D80BBA6361B +Salt = 519B87DB85FBE92FB4070F3BEF6E3D97DF69B66061EB83B4A334E8EEDC0F8E +OutputLen = 7 +Output = B637FCADE57896 + +KDF = TLS-PRF +Secret = 775B727CE679B8696171C7BE60FC2E3F4DE516 +Salt = 453C2549058B063C83E8B85E5CEF3570DF51B7D79B486F4F33 +OutputLen = 8 +Output = 3431016193616501 + +KDF = TLS-PRF +Secret = AB299AD69DC581F13D86562AE2BE8B08015FF8 +Salt = 5569FC +OutputLen = 9 +Output = A624CC363499B1EA64 + +KDF = TLS-PRF +Secret = AE4947624D877916E5B01EDDAB8E4CDC817630 +Salt = 7FDE51EFB4044017C95E3608F8FB6F +OutputLen = 10 +Output = 5B908EB5B2A7F115CF57 + +KDF = TLS-PRF +Secret = 4F13EB6FBE1FA2FCD7B5B21C9F20980D1986A4 +Salt = 514DBCE520AB34 +OutputLen = 11 +Output = EE73EEE90E35AF2BC3575D + +KDF = TLS-PRF +Secret = 41BC094049008CBAE99CAC0BA901D0B2DD15DF +Salt = CB6C0544FF8CF74C71E910F2220D54C509DC442CB3 +OutputLen = 12 +Output = BD859DAE2729A348774146B5 + +KDF = TLS-PRF +Secret = 95751B37945DD9DE515B45927A229AAB40F7D0 +Salt = 75318F49A11F42A24AF48267411FDD0831 +OutputLen = 13 +Output = FE310AF0913149D53718AC53E5 + +KDF = TLS-PRF +Secret = FC250F36E5C1365C3EAD122E63F90612DBBDA7 +Salt = 8A4B5AEA3AC0B2FF777D77B5EFB6E7D8AF +OutputLen = 14 +Output = C0107D144E53227EDE5E677A35BE + +KDF = TLS-PRF +Secret = F6A8A67ACA60F25080100F3F5C928038936E57 +Salt = F8B663768421BA77861F1EBEBF4C8341DC01ED1F7D4B054B7C +OutputLen = 15 +Output = A1FCD686295E3DE32C438A8FFD63CE + +KDF = TLS-PRF +Secret = 77BF131D53997B1FB2ACE2137E26992B36BF3E +Salt = 859D1EE9A694865ECC1830C361D24485AC1026 +OutputLen = 16 +Output = 60D0A09FCFDE24AB73F62A7C9F594766 + +KDF = TLS-PRF +Secret = 39CF412177DD47B8E97A4D92D104138CD4E41C +Salt = 9CD35F26E8A89C25410B3394A957B781BBD0D190DA +OutputLen = 17 +Output = F7D49D2C112F3EE64411F50B264AE15BB4 + +KDF = TLS-PRF +Secret = 5C40AF252D0A4F445E638D954993BCB0673281 +Salt = 2DFB810DC9ED5B291754144937E6052666D476D1F5F94C +OutputLen = 18 +Output = FDA100D44E2F839C21199A56ACAF57454C21 + +KDF = TLS-PRF +Secret = 2A8B07B082F2A4C95611B20685A4410E90B8D2 +Salt = 320ADFA586F7EBF346646DE9 +OutputLen = 19 +Output = A5CCE186AFDB9C0EB664C719DD1A69C1BA6059 + +KDF = TLS-PRF +Secret = BCBD1EFDA490B9D541BA9DF50FE9A451DD0313 +Salt = 255230A341E671BC31B1 +OutputLen = 20 +Output = 2291E19459725562F106F63FE2F81E73BA23F04A + +KDF = TLS-PRF +Secret = B361B123993602D0BA62567BF9B81992DB108EAE +Salt = 20878A3A703785DE37846086C097619E9823F7FCD2B7B3A9466FA6 +OutputLen = 21 +Output = A71CB3E9C58E83414D69775CF7127E9C95AF10B7E2 + +KDF = TLS-PRF +Secret = 8E7CC0EED8BFF691B370C08FE0DB32D06700B088 +Salt = 02F3B9155F5CFF08B9F47A2FDC701BA3F08BCDDF21292911D06FC0A5A99B +OutputLen = 22 +Output = 25DA6B3027CBBCA4352EFB85D3FCB9060285BC39ECB8 + +KDF = TLS-PRF +Secret = 041CC7ED27C01A701A0F15269DA6CA6D806B10C3 +Salt = 8E5F4FADE80AF92D495AF5A50C8E +OutputLen = 23 +Output = E3B7F0D721C05663166B43A75F2997F9F029886FC069D0 + +KDF = TLS-PRF +Secret = A7421C0D96D2455E57408C2BF02E86DCEE71B060 +Salt = BD2623716653B538C885FA2ED4B0A2 +OutputLen = 24 +Output = 46948B1DD4C7977AA7241ABD74A88E7838E575DD34AA9B75 + +KDF = TLS-PRF +Secret = 56DAD2D1AF95F938E073D10A1A779F80BB0F76FE +Salt = D1DA1DEF7BD5C327894B7A992AA7A694664470F642 +OutputLen = 25 +Output = 53B1169FA52AABC427D1C41501B612DF6D726F55DAD9D246E9 + +KDF = TLS-PRF +Secret = 4F2E4F77820A686894B90A0AFD0ABA772D0CC6B0 +Salt = 062577E22854BAF0E68A51A27644FFB0 +OutputLen = 26 +Output = 30ED285AE596143BE7998901C2F35530D81CA4DD14E03D17DF2C + +KDF = TLS-PRF +Secret = 86173BD0F3C5E7052482B53BD8604E197112F3D8 +Salt = 12B4E5F24ADC8A +OutputLen = 27 +Output = BB3BD1CBFA7889441E930C4B5E8EC7AB00D9612E9D762D42427AD9 + +KDF = TLS-PRF +Secret = 2B9CE8B0AB3041D6A1803BDD342E6537E40BE305 +Salt = 517D3D00850F48912B713E653CB4F38703B6A6 +OutputLen = 28 +Output = 88F8AFCB8109C7B359B18CCED73A1B09404CC9EABB23695BF353ED9E + +KDF = TLS-PRF +Secret = 819CB722AA4475D8301A8E24DCD9D82DF2B081F4 +Salt = 56872A31A10E8C +OutputLen = 29 +Output = 83FD6F33AD11819019E086F0683E26D59D57C9E5AF26C81738E44D47A3 + +KDF = TLS-PRF +Secret = 80F1F9B0D05F41C448E5306E41833918B9E688ED +Salt = 6175CDE230DF6691F4E8A36B265C53CAD736AD6F34F895D5C6633D66B5 +OutputLen = 30 +Output = 0C00B5F50565FDD5345C63773D5FCC8B3C8E412DFFF23B95490EFB4E53FA + +KDF = TLS-PRF +Secret = 0AE876A7BB96C24CEFA6ED53CEE7B0A41B8FF7B3 +Salt = +OutputLen = 31 +Output = 881B99C3E43B1A42F096CF556D3143D5C5DBC4E984D26C5F3075BCB08B73DA + +KDF = TLS-PRF +Secret = 2212169D33FADC6FF94A3E5E0020587953CF1964 +Salt = FCD5C9637A21E43F3CFF6ECF65B6E2F97933779F101AD6 +OutputLen = 32 +Output = 1E1C646C2BFBDC62FA4C81F1D0781F5F269D3F45E5C33CAC8A2640226C8C5D16 + +KDF = X9.42-PRF(KeyWrap.TripleDES) +Secret = 000102030405060708090A0B0C0D0E0F10111213 +Salt = +OutputLen = 24 +Output = A09661392376F7044D9052A397883246B67F5F1EF63EB5FB + +KDF = X9.42-PRF(1.2.840.113549.1.9.16.3.6) +Secret = 000102030405060708090A0B0C0D0E0F10111213 +Salt = +OutputLen = 24 +Output = A09661392376F7044D9052A397883246B67F5F1EF63EB5FB + +KDF = X9.42-PRF(KeyWrap.RC2) +Secret = 000102030405060708090A0B0C0D0E0F10111213 +Salt = 0123456789ABCDEFFEDCBA98765432010123456789ABCDEFFEDCBA98765432010123456789ABCDEFFEDCBA98765432010123456789ABCDEFFEDCBA9876543201 +OutputLen = 16 +Output = 48950C46E0530075403CCE72889604E0 diff --git a/checks/pbkdf.cpp b/checks/pbkdf.cpp new file mode 100644 index 000000000..936422bb0 --- /dev/null +++ b/checks/pbkdf.cpp @@ -0,0 +1,49 @@ +#include "validate.h" + +#include <botan/libstate.h> +#include <botan/lookup.h> +#include <botan/hex.h> +#include <iostream> +#include <fstream> + +using namespace Botan; + +namespace { + +secure_vector<byte> pbkdf(const std::string& algo, + const std::string& pass, + const secure_vector<byte>& salt, + size_t iterations, size_t outlen) + { + std::unique_ptr<PBKDF> pbkdf(get_pbkdf(algo)); + return pbkdf->derive_key(outlen, pass, + &salt[0], salt.size(), + iterations).bits_of(); + } + +std::string pbkdf_test(const std::string& algo, + const std::string& pass, + const std::string& salt, + size_t iterations, + size_t outlen) + { + return hex_encode(pbkdf(algo, + pass, + hex_decode_locked(salt), + iterations, + outlen)); + } + +} + +void test_pbkdf() + { + std::ifstream vec("checks/pbkdf.vec"); + + run_tests(vec, "PBKDF", "Output", true, + [](std::map<std::string, std::string> m) + { + return pbkdf_test(m["PBKDF"], m["Passphrase"], m["Salt"], + to_u32bit(m["Iterations"]), to_u32bit(m["OutputLen"])); + }); + } diff --git a/checks/pbkdf.vec b/checks/pbkdf.vec new file mode 100644 index 000000000..f73cd2b60 --- /dev/null +++ b/checks/pbkdf.vec @@ -0,0 +1,139 @@ +PBKDF = PBKDF1(MD2) +Salt = 40CF117C3865E0CF +Iterations = 1000 +Passphrase = qalzsegt +OutputLen = 16 +Output = 7C1991F3F38A09D70CF3B1ACADB70BC6 + +PBKDF = PBKDF1(MD2) +Salt = 3A2484CE5D3E1B4D +Iterations = 1 +Passphrase = vnhazjfsixbomxqu +OutputLen = 14 +Output = 677500EDA9F0C5E96E0A11F90FB9 + +PBKDF = PBKDF1(MD2) +Salt = 5D838B0F4FA22BFA2157F9083D87F8752E0495BB2113012761EF11B66E87C3CB +Iterations = 15 +Passphrase = fheetneqbdmqqqnyywioqjfloivccquj +OutputLen = 14 +Output = 91A5B689156B441BF27DD2BDD276 + +PBKDF = PBKDF1(MD2) +Salt = F22D341361B47E3390107BD973FDC0D3E0BC02A3 +Iterations = 2 +Passphrase = snbyinjpuikqvxxgrlkf +OutputLen = 14 +Output = 49516935CC9F438BAFA30FF038FB + +PBKDF = PBKDF1(SHA-1) +Salt = 40AC5837560251C275AF5E30A6A3074E57CED38E +Iterations = 6 +Passphrase = ftlkfbxdtbjbvllvbwiw +OutputLen = 19 +Output = 768B277DC970F912DBDD3EDAD48AD2F065D25D + +PBKDF = PBKDF1(SHA-1) +Salt = 7008A9DC1B9A81470A2360275C19DAB77F716824 +Iterations = 6 +Passphrase = xnsosmkvhggzspcncpoc +OutputLen = 20 +Output = 4D90E846A4B6AAA02AC548014A00E97E506B2AFB + +PBKDF = PBKDF1(SHA-1) +Salt = CCFC44C09339040E55D3F7F76CA6EF838FDE928717241DEB9AC1A4EF45A27711 +Iterations = 2001 +Passphrase = otilqwlukqts +OutputLen = 20 +Output = 71ED1A995E693EFCD33155935E800037DA74EA28 + +PBKDF = PBKDF1(SHA-1) +Salt = 8108883FC04A01FEB10661651516425DAD1C93E0 +Iterations = 10000 +Passphrase = kzneqfflbtvsthnfctaf +OutputLen = 14 +Output = F345FB8FBD880206B650266661F6 + +PBKDF = PBKDF1(SHA-1) +Salt = BC8BC53D4604977C3ADB1D19C15E87B77A84C2F6 +Iterations = 10000 +Passphrase = qkxhlqpemxhykmyucjbo +OutputLen = 14 +Output = 2D54DFED0C7EF7D20B0945BA414A + +PBKDF = PBKDF2(SHA-1) +Salt = 0001020304050607 +Iterations = 10000 +Passphrase = +OutputLen = 32 +Output = 59B2B1143B4CB1059EC58D9722FB1C72471E0D85C6F7543BA5228526375B0127 + +PBKDF = PBKDF2(SHA-1) +Salt = 9B56E55328A4C97A250738F8DBA1B992E8A1B508 +Iterations = 10000 +Passphrase = jyueqgxrscgglpxdykcf +OutputLen = 14 +Output = DF6D9D72872404BF73E708CF3B7D + +PBKDF = PBKDF2(SHA-1) +Salt = 57487813CDD2220DFC485D932A2979EE8769EA8B +Iterations = 101 +Passphrase = aqrqsznzvvzgtksammgo +OutputLen = 40 +Output = FA13F40AF1ADE2A30F2FFFD66FC8A659EF95E6388C1682FC0FE4D15A70109517A32942E39C371440 + +PBKDF = PBKDF2(SHA-1) +Salt = ED1F39A0A7F3889AAF7E60743B3BC1CC2C738E60 +Iterations = 1000 +Passphrase = ltexmfeyylmlbrsyikaw +OutputLen = 10 +Output = 027AFADD48F4BE8DCC4F + +PBKDF = PBKDF2(SHA-1) +Salt = 94AC88200743FB0F6AC51BE62166CBEF08D94C15 +Iterations = 1 +Passphrase = cxgnyrcgrvllylolsjpo +OutputLen = 32 +Output = 7C0D009FC91B48CB6D19BAFBFCCFF3E2CCABFE725EAA234E56BDE1D551C132F2 + +PBKDF = PBKDF2(SHA-1) +Salt = 24A1A50B17D63EE8394B69FC70887F4F94883D68 +Iterations = 5 +Passphrase = xqyfhrxehiedlhewnvbj +OutputLen = 32 +Output = 4661301D3517CA4443A6A607B32B2A63F69996299DF75DB75F1E0B98DD0EB7D8 + +PBKDF = PBKDF2(SHA-1) +Salt = 9316C80801623CC2734AF74BEC42CF4DBAA3F6D5 +Iterations = 100 +Passphrase = andaqkpjwabvcfnpnjkl +OutputLen = 30 +Output = 82FB44A521448D5AAC94B5158EAD1E4DCD7363081A747B9F7626752BDA2D + +PBKDF = PBKDF2(SHA-1) +Salt = 612CC61DF3CF2BDB36E10C4D8C9D73192BDDEE05 +Iterations = 100 +Passphrase = hsavvyvocloyuztlsniu +OutputLen = 30 +Output = F8EC2B0AC817896AC8189D787C6424ED24A6D881436687A4629802C0ECCE + +PBKDF = PBKDF2(SHA-1) +Salt = 45248F9D0CEBCB86A18243E76C972A1F3B36772A +Iterations = 100 +Passphrase = eaimrbzpcopbusaqtkmw +OutputLen = 34 +Output = C9A0B2622F13916036E29E7462E206E8BA5B50CE9212752EB8EA2A4AA7B40A4CC1BF + +PBKDF = PBKDF2(SHA-1) +Salt = A39B76C6EEC8374A11493AD08C246A3E40DFAE5064F4EE3489C273646178 +Iterations = 1000 +Passphrase = gwrxpqxumsdsmbmhfhmfdcvlcvngzkig +OutputLen = 64 +Output = 4C9DB7BA24955225D5B845F65EF24EF1B0C6E86F2E39C8DDAA4B8ABD26082D1F350381FADEAEB560DC447AFC68A6B47E6EA1E7412F6CF7B2D82342FCCD11D3B4 + +PBKDF = PBKDF2(CMAC(Blowfish)) +Salt = 24A1A50B17D63EE8394B69FC70887F4F94883D68 +Iterations = 5 +Passphrase = xqyfhrxehiedlhewnvbj +OutputLen = 32 +Output = 43734BADB91F5D89DB20B469CD2EF376CAABC226EE3952872050428EFB5E3026 diff --git a/checks/tests.cpp b/checks/tests.cpp new file mode 100644 index 000000000..2c6321415 --- /dev/null +++ b/checks/tests.cpp @@ -0,0 +1,53 @@ +#include "validate.h" +#include <iostream> + +void run_tests(std::istream& src, + const std::string& name_key, + const std::string& output_key, + bool clear_between_cb, + std::function<std::string (std::map<std::string, std::string>)> cb) + { + std::map<std::string, std::string> vars; + size_t test_cnt = 0; + size_t test_fail = 0; + bool verbose = true; + + while(src.good()) + { + std::string line; + std::getline(src, line); + + if(line == "") + continue; + + // FIXME: strip # comments + + // FIXME: Do this right + + const std::string key = line.substr(0, line.find_first_of(' ')); + const std::string val = line.substr(line.find_last_of(' ') + 1, std::string::npos); + + vars[key] = val; + + if(key == output_key) + { + ++test_cnt; + const std::string got = cb(vars); + + if(got != val) + { + ++test_fail; + std::cout << name_key << " #" << test_cnt + << " got " << got << " expected " << val << std::endl; + } + + if(clear_between_cb) + vars.clear(); + } + } + + if(verbose) + std::cout << test_cnt << " " << name_key << " tests completed " + << test_fail << " failed\n"; + } + diff --git a/checks/validate.cpp b/checks/validate.cpp index 8ac35393c..606f3a2c3 100644 --- a/checks/validate.cpp +++ b/checks/validate.cpp @@ -420,6 +420,8 @@ u32bit do_validation_tests(const std::string& filename, { test_ocb(); test_hkdf(); + test_pbkdf(); + test_kdf(); } return errors; diff --git a/checks/validate.dat b/checks/validate.dat index 30575d2de..677890d4c 100644 --- a/checks/validate.dat +++ b/checks/validate.dat @@ -1,8 +1,8 @@ # Main Botan validation file # This has test vectors for block ciphers in ECB mode, stream ciphers, -# hash functions, MACs, KDFs, PBKDFs, encoders/decoders, and block -# cipher modes (CBC, CTS, CFB, OFB, CTR, XTS, and EAX) +# hash functions, MACs, encoders/decoders, and block cipher modes +# (CBC, CTS, CFB, OFB, CTR, XTS, and EAX) # MARKER: Block Ciphers @@ -67156,589 +67156,6 @@ B378F3E7D9C0B3F1C7A0A521BE7289A6EE76BC0DEAC0CB6BF7AA79403CEC62EF\ FBBA5A114489EE6E5DEC57A473E6DA70311C573C2AAA3FE2:\ 31174049F029EB36:214B48AB97E144F1005831C8C97B8EF0 -# MARKER: KDF Algorithms - -# Format: secret:output:salt:out_size - -[KDF1(SHA-1)] -61736F67696A6F7367696A736F69676A736F6964676A6F696A6F736467696A73\ -6F6964676A736F6964676A736F696A:\ -A0D760447F105CE64DB99FF2FC92F961F24E7D9C::0 - -61736F67696A6F7367696A736F69676A736F6964676A6F696A6F736467696A73:\ -A0D760447F105CE64DB99FF2FC92F961F24E7D9C:\ -6F6964676A736F6964676A736F696A:0 - -61736F67696A6F7367696A736F69676A736F6964676A6F696A6F736467696A:\ -A0D760447F105CE64DB99FF2FC92F961F24E7D9C:\ -736F6964676A736F6964676A736F696A:0 - -617361736F67696A6F7367696A736F69676A736F6964676A6F696A6F73646769\ -6A736F6964676A736F6964676A736F696A0A:\ -DBFEFA0EA12D352C4AE5B0AF17D061E0E2C469A8::0 - -617361736F67696A6F7367696A736F69676A736F6964676A6F696A6F73646769:\ -DBFEFA0EA12D352C4AE5B0AF17D061E0E2C469A8:\ -6A736F6964676A736F6964676A736F696A0A:0 - -[KDF2(SHA-1)] -FD7A43EA8A443C580C0DE618ECC013704505EFF8B5A4A9:79:BF0B2ECD1724A348211D8C0CA7:1 - -701F3480DFE95F57941F804B1B2413EF:FBEC:55A4E9DD5F4CA2EF82:2 - -BEEA23BF806E106D0C91F8E87095AB402C433C581088E1236FD20564A8F1AF67DCD2265C40:\ -78F8E7:36C94DC7C2353757E0778323B3DB333BBD57AA8F5C:3 - -5A6999A96594B0989B89CA72B5C0803043D4DE78709B490EB98610:\ -84C92008:5F0F820B69ECA512:4 - -C6E227F3F9BB5227BE37D6CE7433022D5F0DFFE18C5777EBAF396F1E40C4:\ -F518EEE6F2:CC06A6F3F9A0AF4CC76D839D:5 - -CD6356CA771E3FCC4BB548B4E6EE4E3715EB7A4A806E4967B1:\ -E72EC27D6A81:221DA543:6 - -B7FA7917A833B0C0364FAC414D92DA:8E54D1C86DA8A9:\ -DC32AA175531CF88C8D55A51DA5CAFB314A92C2B52:7 - -8A14:A2FC623645F9AD29:65A907357B5CBADC5C5EFF7065AD:8 - -135FF7296DC87F5775B64F8CFF46D366C10A8A98712345CE58CD5839E9:\ -73036FBD1941C7955E:A439FC03312570F9A4C76E5B17FA:9 - -AD499722078DF83AEC1EC23A507B190740B0A6821F8C:\ -A461A98B6BBBB0FDB0BD:3772601ACF052CD530D91EC7:10 - -CF99B7A985C223BE83F999D7:735BFCF26A4357F5642964:\ -055396C3E0EE8190DBE10212AE099FF0BC0A8D:11 - -B640D21A1FECF5E61D79E1E09C2393915D5790EF8080E7F6CC18:\ -6DB9BAE99803B2EB725FA8B3:5AE5506D6306:12 - -F69885268F3DF8488490419F49CD39A54D0D8C9A3861D375A8BE:\ -2A1EB238B7CB39422DE263E4FD:C1:13 - -DCF4DF1F6B5D71DF98ECFFE8A4B7C5E7234AFC10CC0C941D853BFC32487A:\ -FCF8D9D4E43318EFC0056EBCD271:\ -7F246E5F44DABCB5B954A1B83D456F022C924D29A21935:14 - -BD2EDB4CCCB0ED3D01BA03D1A816425E40ACBC7F214126A6775AFE28B0B2646DE040B9ACF0:\ -C669ECC95557FE8E49457576BDABD3:\ -A7E9F261EDC30903056744B123C3D364E979:15 - -3185AFBCFC621B6F9FFCBB75C7E71A4161A0AA39278676:\ -687481BEF8354C8D48D8F5A5F3D9ED3D:80834249A9A4CFFCD655AB92:16 - -15723A13E56CA0FF5EE43D8A4BA8284B4A946D861F:\ -439082061EBAE065C434932D981603AE1B::17 - -92167440112E:3A5DC9AA1C872B4744515AC2702D6396FC2A:\ -45A9BEDED69163123D0348F5185F61ABFB1BF18D6AEA454F:18 - -208AA86616B4133903946BA8:A267CC65619C84EF5FE1744EC3A92A06B99399:\ -CF08208B76D97F:19 - -04879F0DB43E33435D53F0DDDC72BEB957F04F2CA5E8FB38DC4F78:\ -F46E2675B807CC42FC1DD4C84A5BEA3AC175B093:2B688B3F6C12:20 - -AAF175079CB9CD462EB2D4D62440EF18B22AEF1552CE5F04EF0158C177572D21:\ -5A3796C9045712759E6DE769E5049E5829408615DC:\ -48A228E55BF52B89A8FF5FCC3F4EE4F178D406CBA265CF9166:21 - -901BBA708DAE7365ADCCB7AE056729B5DD610226966B084A02D1E8:\ -8A397BBA8EA862DCD004897304B901784513754E9FF6:\ -3FCD4A2A5D65E4CDF29241573F:22 - -D20CD658:5C893F99FE81F1E955F2A7CFEC4F50B7CCC890BEAE4768:\ -17D7E5C9E3DB69B28EC9:23 - -B669EDEC3D9A78:1A4DD8282E8B4D7A739030FF60CD88C4D3C0E5C3A0DEB127:\ -D072D0:24 - -349AD0D9BEA0D29C:678051858CED59674C06B60EE21D18ACD55C10B049B22F5CFF:\ -D4C8D8DB185F7EBBEC046ADC49A26DAA172F81E3:25 - -B809759B369EF9B2F34A0254AAE645:\ -1C2C3C95529E4C8E5677F714E122A2E348810379B09689FA4B30:\ -D3EF4B914359E78F253FFC8B9B6D711E257B94:26 - -20216E8DCC3AA461F9FEFA4BE06F3C63BB:\ -A24D44F5194B4257B92CF85C8493B5BDA52515E18337280C45F005:\ -AD13544336F28B8F1B2615BB9658:27 - -40923A6409592A370301A859F1E797:\ -4C8919843B73BAA06853E1C8D9D4B18518CD857A624BE3EBBD507BCF:\ -C3D9FCE8C68AFD0F97D21AAE826ADC1EAB6F580F78B139B0B43B58:28 - -26541874BEBDA8DB76CCD60DE28E65E91CC5F128B9C56F6609185F108337A4A98B:\ -B16B3FAD79618B39D2FB0983BDE7D3E8C17E2DBF2C2853CE8D92191696:\ -BD1D497AC525F091FBFD7389635DA5284ECE:29 - -5D17A9CFD9994A1CC1F0AAC3C48F60C7DB:\ -1233A118E3B025AF2240F2AB14A61777A1347AE58033B2FFA313946631B3:\ -FC56:30 - -32048974CBE67FE8B4E6C0D4E21035B2A657E7C5E3592A61A2:\ -5301147F08E1D473F82558F815498F7421D8C501056402F77A186779A6C5C8:\ -D6ABF65542:31 - -F4E8338789D14BCD31EAE46199DB1A86AC76B8611809DF4D77279F53CB0F6DBF:\ -90C528975E02E3B5A9970B0074C02A691401A7BCAA94A8B731648A1732806D6D:\ -F7A146807292:32 - -0DE2DADDC876B4B0322B3B995B43B580B4D5DF529F4E29606F825AFA72:\ -41163C646606A0B96EE1FA2783AAD072260670283870BB8A510A693D01F9C0A5D6:\ -BECB7FA1A65C69:33 - -CF00B2A31485DCC4D6F9296D219F4831CE80A0043CA937F9712DCD1C0AF02BD9F0DD7C:\ -EFEAF89E578CFC169570F08452C42157EFB9905D33DCD97DF29A4CD626F9DF539E3E:\ -046259C93952F2:34 - -EE67BFB3A6F4CD:\ -1D02C4CE8D6AF08F2A4E8660718EBF8031C640B7502BE5F1F2EE91CB35241952D63BB4:\ -A85EEB10A12C6B8DE05642:35 - -BC02C1:\ -6D3B84710944B5A4448455C22D5CF21852123816A33269ECB29DBCB10616978FD5200FB6:\ -E2E57EB395:36 - -85B2DFCEC6D020E7DD45933451363AF111346D52E1BA4B168D47BE178F:\ -E43AC0F5353A0ED3C35C1EC0BEA6190C49A9F8925E510DB762441BBAF8B798686C1BE6D84C:\ -CA79147C58E3422803290548BD3999F3738A04A8:37 - -6E757BDFE044D00A96AB79F3CEB27F96:\ -0A18BD32469D8FCA917A80C173C2E01B2C9E2AF978CDE34E5EFF933B563F3B26842778BAD326:\ -:38 - -26E7CF534DAF8F9243C5CE3297D807D1C6B4F0CAB16AB5CED3C737:4A:8AD8F6:1 - -166C66F4B39A17A2:8AEC:81:2 - -8533C513D7D26ECD416DD3DC:030CAC:52474087F2:3 - -E876D64472865C8F4B7F:A83C863B:BA88B207:4 - -15AC949219878463A7B1A6599ED9:AA28AD4916:E79A373588F3:5 - -D288A4BBC027594788F81964C74F:5777F5478B70:06:6 - -84D3564BA0AA5A0DAC7AD62F88D9373B9DB280D026AF0AE5BCA633AE36C24ABA95A005:\ -934CEDC65FDE09:364A60:7 - -5977D030DF4051B9FB03167331C6B6366A0F8CEC71B69FFB1FDC9469B5:\ -F09FE23B9C34EFC1:E734:8 - -26A51955CBF815122460E803F1B399F617A4AE1CEE:\ -17A5BFF10B516A752E:0E33D563:9 - -EFB7C556790493E3C15B513CCD250FEF4BA7878585B8E50E1009C56BB146B5A0:\ -EC92ACB1367E34CF1361:FD7B:10 - -F2EAABA8E42ADCC55CD36A2C78DD0325E55C1B4E9C6BE9F77966BFBD623CD454267FFC0BA9:\ -E0DC1C8E9071A644ADEE46:D8D005AB3A3123:11 - -01A8F53F2BBDFB05D41E9FCCDD85CFBD4BC0502C:\ -1C9D86C49E9F3DBFF9674A11:6E3EAC35BA:12 - -02414433D5734F:EDB45D5FA17F17147645DD8DC2:70:13 - -13EC731CB6C29FC4350FE0DE63FCBB5A6F3568E05250099715795D51C5AC10D89883F44E46:\ -AA07990CEAAB482272FCB3A3AB46:93127BA3F25906:14 - -2BCB12D2E40A5BB81BE4297F9306:3F450384BEB9C9A478F46F051FF152:67:15 - -4DBF180733:0FDFEE8AF8D926763E28AB284C7B8040:54C4:16 - -BD3E9044AD45F1E710529172837597E7BCBC2C27505187:\ -0E4FD5D562490C5FFD0A37588344D86347::17 - -822816:21E8AEDC72151B03D2F9A3E7CD9CA6805FEE:C1:18 - -7FE688:6701CD19F736B12C067D58FBF0D024E695C18B:C9:19 - -1EC869F1476B8C7C537E8B1AC4411A10332A7DD06645C835EBBB3CEFD570A9:\ -F04DCD7617D96283E463511A1A9313006EB6BD4E:F338:20 - -6C78966EAF4DB43ADC3865962F292CDC81:\ -9093D86736C445B12843AD189410984F8B912281A5:D4:21 - -D85C07E05DDA286A4A1B9191A929FBE1D19D:\ -DCB8FF108AAE1B16901CABF9BAF0AFC4ED1B20A72312:\ -138399:22 - -597406:AE58662CFE38E861B289EF9E3146A37393C798BB7ABEE0:D5A5EEBC47:23 - -33460E:6A85B3C6A5A6D0E1734004B788FE84C744BBDDBE42C32ABC:F8A648C9B6E9:24 - -74BF53754034B0DC:BDCADDFCCA599DBB24A2789DEAD088EEA633E8A15A03B65291:89:25 - -F6B3A879AEE95C1604EF005F90D35EC4621F6BE5D52F65F1BF192FAD2D22C223D66B9C8454:\ -9FA401DABDDEFE3B64702DB7395950A357CA32A501E43CF6DFFE:F89A58E89B:26 - -5C90E327068324D80B780A10646E01F1C57D4F67E2BF9322:\ -F95C1618F2F62B9EB4516E0AE68D38658183D30BF3B97B63BBAEB6:C13297:27 - -F88AEB2006224184F1231BF42D63D2BA69C88ACD47C27996232EB2FCF04647E8D03308D6:\ -A7666ACE2515FBF42334F21F48510174CD8944A7397EE0F0BF38262C:\ -55495A:28 - -B98B0026B2D40DD0827B58090D2698140A9CBB3B13F5:\ -ECE9B1E55CCF257F2C7BA2B39BA852DB81FE9B32DD08130CB6041CB349:\ -C1AA:29 - -F8BEF20480916E2762A77D00:\ -1102796B06234073DC6913318D65010A4F4C9E95358DACB3CE0D08857B28:\ -1CE36F6EC8FE:30 - -80C9D5FD0C7BC1278F74975303D1F94600877754FCE3B8:\ -CFE56E573F2933E1728B3367F4EDAA797BE7C843B89250B98C4EB3BAF2E4D7:\ -EA8332DE20:31 - -2EDB67D2CC64BF4B62:\ -52E44DB4B04F9792243508B969FF730779CB2A1EDF764324D11C14235B055D30:\ -38D7ED2715EC6F:32 - -86D77225DB6E5EA176F5DAF433E4C2C804B24FB22F2747FC5D8978189842981F19:\ -02BF3A2F5009054AF526E277EF6AB436BD8B7A53A3E4C2671F1E34556239F97453::33 - -C73E664D445C0C60C59CEF54F10ACEAA456E6BFB:\ -4E984339A1FB20BD73894494B36CE8C1182BCB0D289BBAB3BBBD366B1DD061BB9E16:\ -F8C579F9:34 - -0651E961BA3374DE7248CE52EFC948809C20B8:\ -36AEC134DF567B1FBF448D0C56C6B62E40A375BDC74A2D44E415BCD105B48317145D95:\ -43:35 - -BF5BB2:\ -6F7533ABD09546770D6E71769A645B0D3BFA6D578B7B9B182D25CF8F8B4394C2BBDCECAE:\ -159B4039D67403:36 - -64353C0E4D64C60C3F2FEBE1C6466E57FB28:\ -7B80CD69345CBA9E46186372DD6602F2CB55496364CEEA96823110E28CAA68BB200F56F37F:\ -EF4AAB69:37 - -6FD4C3C0F38E5C7A6F83E99CD9BD:\ -02AEB40A3D4B66FBA540F9D4B20006F2046E0F3A029DEAB201FC692B79EB27CEF7E16069046A:\ -DBB986:38 - -[SSL3-PRF] -6E60:D626B75AB8BD4F5B9458BDDA8589FD39:17FEBCA565786528F84A:16 - -66BEEC6EDE7FCDF50B76EBCD5C0FE0A472F2EA8B1E2BE2971E49CA:\ -EB:5C461D77ACDB631ABAE2E7AFED5E9ABBBAA99B:1 - -1171D78F812512DEFBA258574E41F2832BB9B359EB0CA79E7669:\ -2C8B:73D677854D88F62417774A2A5645CCAE9C1AEF8E9D1B48:2 - -6162DEC990B2132C30C153F2B200:1B9430:2666F0B22E8E48DB1640:3 - -D3C0DD69C18F17D35C5296FE45F0:C7C19FCD:320C9EEC122C19AFB8E90F72:4 - -EE6A733EC671DA7477AE18916895A133CC92E23DBACEE2634846CAEF0B08:\ -C264D9D0C9:B7F9722B37389C11:5 - -97D7F3D2AFB3198862F6FAC8B17CCEFB26:C1CB767626AC:\ -D3583CD13AC119CAFBD44CAEA5AB:6 - -E87A9BBC656884A13295B8D4DD4645905846C249D2470ACD2BE5:\ -3DC5B6402F451C:542D044668EDC104A9266C2EC79EC37F72A0C6B7301EFDF267CF39:7 - -7463F0B9F822E17311E47680DC5B505811E9:FE4B1DA4EDA36820:02AB98439528C994:8 - -EE8999703E5D9C628AA404235F3C94C3A890B1:EF317D3E81DAEF0F89:161DEB5AB705BD15:9 - -AE531918E679D2D7B32C61BA31415484E9725B2905095819:18D5272345C1695BE38C:\ -A162AC0F0AB41CB80735D1EDAEA3C562CF261C0067:10 - -8FE402D6ED0BD018A532FC063E7D81D97CDEA7:D61088CA1CE8944B17CD3E:\ -BF7F091B6E0DDB90897B6BF80A4F:11 - -4279DB52505E7B505BBC26CE0FBF2F4353086C1363:4A84A8E829528393FF890129:\ -8710A8A12B2D18A27A50E5F32C37448A:12 - -B80B58DAB89B1C4D1335C48E479220E253B8EACFD64319544A:1450E50B7D86B76015930BA420:\ -E9158BA5F6E25D013A37B9D65406E989CB77D05D97B2B04F9C7F26DF987A:13 - -965F1BC656F01C1C7F977419A5F99FB54FA34548C332EA79B5B0EE:\ -CEE11A3A9A406FE9DA77FE6FB007:\ -3F6FF94F05596ACBAF5AE7CBD97E3FF3233992D988361E:14 - -657B5F618710AF88BF4F0328E7071D022D02EA5E:8EA957C330D55CC208326CEA06D25A:\ -BD0A575481E823931F68BE84E31DE56B2D95F3ECE4F614CBFD31CE:15 - -33CE7917528009F2A1011CFCD494B80D4BBFD901:2FB1FDD16FCE41C9C563226A564D1647:\ -81851CC61D3E910E04D5EC38A465:16 - -40ED568CFC6C0A17866C67B7660C96BF9DA54C:321118AA031C5C9EFF145542B4426C3C71:\ -A3502B96214854E5AF5720E8970D3F240AAB2E21319A88E901:17 - -12695F5B19541C8B0092418A72A7ED8482F35FCC4A82D4E1C5AE:\ -22BC94F745F6E247054DDA2C772E5D2D3EC4:\ -2CE5F4676C06D0CB61E91F7D751F0F:18 - -F36E535A1C2C6F6771:6004BBD20BB68E2F1FFC65977807EE25A3FBFE:\ -290BE26068D887AA6E86500E85C606:19 - -7C7EE43D46AE85D23F0D5264DBD410:0E1FE69316D67CF65D62196C25CC4F517664BD43:\ -FC4A7F986331A012CBDAD765288C2CEC08AAD045:20 - -C580B05EC577F45434C13640AAB31B:937E22F90D1493317B0B068A44859036905540AF67:\ -6C9F5929EA435A86E117BD586B34F7E4F97794573C0B4C90:21 - -E275AEB758A949CBB11256E74412E1DA3743899F9007DD5D80A7:\ -69C2640797F38E87F1C870891164F0B31F1A3A02627A:\ -585B267A9E08EF4DBF48F6:22 - -DCF06E7AC257DA73CC6FC0A086B4:30CCF63491F642A55E45136E42FDD0355DB272502EA1B0:\ -16F0355230F105EB316F558512EC3B51871741:23 - -C4C38EC6A1EA975D0ECA535B0CC4D6D0:\ -3B50F91EDFDD96CBA8B6329616D4F5964CD8C961CB1D9332:\ -E84EE4D9DC701DE04E250768F2DFB9B6A2:24 - -7B557AC16D60B74ECAA87641887E6467BAC107:\ -CA148D27F3DC362B0F43C68312058C1CD9B92ECAC2CFDD601F:\ -D7B9EB91BCDE1F6C144A0799:25 - -B23EFA7FAA11D0E597F00867992CB3B9DA93D607FAC0:\ -510297144BA4E0FB5C94749576F756AA36F51289CA463419DC06:\ -DA5E3A17C6DDE81CC69A5AC11904D2E9E969D9F2D1731E842C:26 - -1A5063B374A5F7769AD59432CFFA6B:\ -3437D8B56E573E724B72DD08A5D144E86E646BD24EA0795BA2C3BD:\ -FE0314911D4C07803C48A9EA86:27 - -870515C65F0AF7AAB10C365AF8AC535E1AA8997D139645A21F71FD23ABBB:\ -1895554BD0A1DE7F48FA8776D314EAE2B9E8D7E3CF2A418D17659DC1:\ -AA33C0BFF91FC9F1C97BFD00D5F5AC2953C6D1EC43E5838887A2F984C5A53F:28 - -1BAE220F6AFEB0A2F51D44721A7A9B9C:\ -13720151D256DEBAAA668359A876A9A9788D540F509E90372952A91757:\ -11555530CBAECFF82C76147416A50831532A40BD29F15F1E0EA49129:29 - -BC55F2BAC14370BB5832575A233F1FCE32322E5B4CE1955153CAF3C84493DF:\ -972B190F7EC73DA7C5B8B38E9B6DCEE452AB0BC2220F37BEA3FAC596B2F6:\ -00E8D1BAA9142A646C5DBCC680FB:30 - -834CD382FBF84FF54CC8D3BCB778ACD7DDE8FE32ABA212ABB1:\ -6151C82D7384ED41264424827766B6A7279593C86DCBAC9A4D711009E30EC3:\ -EE768F1AAF889EFB5B20F7536FECA037BF:31 - -E0BDEBC1D1EEDB393368D489:\ -F3D8ED6D46280C3694F33D2D4A210248D657277DD78ACD3B34063D085657A58E:\ -5D2B46C7BB5258ABC13514995E518FD4D77BECB738D77909:32 - -[TLS-PRF] -6C81AF87ABD86BE83C37CE981F6BFE11BD53A8:A8:\ -A6D455CB1B2929E43D63CCE55CE89D66F252549729C19C1511:1 - -6BB61D34AF2BCCF45A850850BCDE35E55A92BA:5E75:\ -510194C9C9F90D98452FB914F636D5E5297C:2 - -3CC54F5F3EF82C93CE60EB62DC9DF005280DD1:706F52:\ -7FC24D382379A9CD54D53458947CB28E298A1DCC5EB2556F71ACAC1B:3 - -BD3462DC587DFA992AE48BD7643B62A9971928:841D7339:\ -9F6FAFED1F241A1E40ADEAF2AD80:4 - -1235A061FA3867B8E51511D1E672CE141E2FA6:D856787D41:\ -1026B9224FC59706BEADAE58EBD161FD2EAC:5 - -63A22C3C7C5651103648F5CFC9764A7BDE821F:F13096FEED6E:\ -512FBF47D9DA2915:6 - -AA15082F10F25EC4F96DFFE9DC3D80BBA6361B:B637FCADE57896:\ -519B87DB85FBE92FB4070F3BEF6E3D97DF69B66061EB83B4A334E8EEDC0F8E:7 - -775B727CE679B8696171C7BE60FC2E3F4DE516:3431016193616501:\ -453C2549058B063C83E8B85E5CEF3570DF51B7D79B486F4F33:8 - -AB299AD69DC581F13D86562AE2BE8B08015FF8:A624CC363499B1EA64:5569FC:9 - -AE4947624D877916E5B01EDDAB8E4CDC817630:5B908EB5B2A7F115CF57:\ -7FDE51EFB4044017C95E3608F8FB6F:10 - -4F13EB6FBE1FA2FCD7B5B21C9F20980D1986A4:EE73EEE90E35AF2BC3575D:\ -514DBCE520AB34:11 - -41BC094049008CBAE99CAC0BA901D0B2DD15DF:BD859DAE2729A348774146B5:\ -CB6C0544FF8CF74C71E910F2220D54C509DC442CB3:12 - -95751B37945DD9DE515B45927A229AAB40F7D0:FE310AF0913149D53718AC53E5:\ -75318F49A11F42A24AF48267411FDD0831:13 - -FC250F36E5C1365C3EAD122E63F90612DBBDA7:C0107D144E53227EDE5E677A35BE:\ -8A4B5AEA3AC0B2FF777D77B5EFB6E7D8AF:14 - -F6A8A67ACA60F25080100F3F5C928038936E57:A1FCD686295E3DE32C438A8FFD63CE:\ -F8B663768421BA77861F1EBEBF4C8341DC01ED1F7D4B054B7C:15 - -77BF131D53997B1FB2ACE2137E26992B36BF3E:60D0A09FCFDE24AB73F62A7C9F594766:\ -859D1EE9A694865ECC1830C361D24485AC1026:16 - -39CF412177DD47B8E97A4D92D104138CD4E41C:F7D49D2C112F3EE64411F50B264AE15BB4:\ -9CD35F26E8A89C25410B3394A957B781BBD0D190DA:17 - -5C40AF252D0A4F445E638D954993BCB0673281:\ -FDA100D44E2F839C21199A56ACAF57454C21:\ -2DFB810DC9ED5B291754144937E6052666D476D1F5F94C:18 - -2A8B07B082F2A4C95611B20685A4410E90B8D2:\ -A5CCE186AFDB9C0EB664C719DD1A69C1BA6059:\ -320ADFA586F7EBF346646DE9:19 - -BCBD1EFDA490B9D541BA9DF50FE9A451DD0313:\ -2291E19459725562F106F63FE2F81E73BA23F04A:\ -255230A341E671BC31B1:20 - -B361B123993602D0BA62567BF9B81992DB108EAE:\ -A71CB3E9C58E83414D69775CF7127E9C95AF10B7E2:\ -20878A3A703785DE37846086C097619E9823F7FCD2B7B3A9466FA6:21 - -8E7CC0EED8BFF691B370C08FE0DB32D06700B088:\ -25DA6B3027CBBCA4352EFB85D3FCB9060285BC39ECB8:\ -02F3B9155F5CFF08B9F47A2FDC701BA3F08BCDDF21292911D06FC0A5A99B:22 - -041CC7ED27C01A701A0F15269DA6CA6D806B10C3:\ -E3B7F0D721C05663166B43A75F2997F9F029886FC069D0:\ -8E5F4FADE80AF92D495AF5A50C8E:23 - -A7421C0D96D2455E57408C2BF02E86DCEE71B060:\ -46948B1DD4C7977AA7241ABD74A88E7838E575DD34AA9B75:\ -BD2623716653B538C885FA2ED4B0A2:24 - -56DAD2D1AF95F938E073D10A1A779F80BB0F76FE:\ -53B1169FA52AABC427D1C41501B612DF6D726F55DAD9D246E9:\ -D1DA1DEF7BD5C327894B7A992AA7A694664470F642:25 - -4F2E4F77820A686894B90A0AFD0ABA772D0CC6B0:\ -30ED285AE596143BE7998901C2F35530D81CA4DD14E03D17DF2C:\ -062577E22854BAF0E68A51A27644FFB0:26 - -86173BD0F3C5E7052482B53BD8604E197112F3D8:\ -BB3BD1CBFA7889441E930C4B5E8EC7AB00D9612E9D762D42427AD9:\ -12B4E5F24ADC8A:27 - -2B9CE8B0AB3041D6A1803BDD342E6537E40BE305:\ -88F8AFCB8109C7B359B18CCED73A1B09404CC9EABB23695BF353ED9E:\ -517D3D00850F48912B713E653CB4F38703B6A6:28 - -819CB722AA4475D8301A8E24DCD9D82DF2B081F4:\ -83FD6F33AD11819019E086F0683E26D59D57C9E5AF26C81738E44D47A3:\ -56872A31A10E8C:29 - -80F1F9B0D05F41C448E5306E41833918B9E688ED:\ -0C00B5F50565FDD5345C63773D5FCC8B3C8E412DFFF23B95490EFB4E53FA:\ -6175CDE230DF6691F4E8A36B265C53CAD736AD6F34F895D5C6633D66B5:30 - -0AE876A7BB96C24CEFA6ED53CEE7B0A41B8FF7B3:\ -881B99C3E43B1A42F096CF556D3143D5C5DBC4E984D26C5F3075BCB08B73DA::31 - -2212169D33FADC6FF94A3E5E0020587953CF1964:\ -1E1C646C2BFBDC62FA4C81F1D0781F5F269D3F45E5C33CAC8A2640226C8C5D16:\ -FCD5C9637A21E43F3CFF6ECF65B6E2F97933779F101AD6:32 - -# From RFC 2631 - -[X9.42-PRF(KeyWrap.TripleDES)] -000102030405060708090A0B0C0D0E0F10111213:\ -A09661392376F7044D9052A397883246B67F5F1EF63EB5FB::24 - -# Same as above, just numeric OID instead of name -[X9.42-PRF(1.2.840.113549.1.9.16.3.6)] -000102030405060708090A0B0C0D0E0F10111213:\ -A09661392376F7044D9052A397883246B67F5F1EF63EB5FB::24 - -[X9.42-PRF(KeyWrap.RC2)] -000102030405060708090A0B0C0D0E0F10111213:48950C46E0530075403CCE72889604E0:\ -0123456789ABCDEFFEDCBA98765432010123456789ABCDEFFEDCBA9876543201\ -0123456789ABCDEFFEDCBA98765432010123456789ABCDEFFEDCBA9876543201:16 - -# MARKER: PBKDF Algorithms - -# PBKDF format: passphrase:output:salt:out_len:iterations - -[PBKDF1(MD2)] -71616C7A73656774:7C1991F3F38A09D70CF3B1ACADB70BC6:\ -40CF117C3865E0CF:16:1000 - -766E68617A6A66736978626F6D787175:677500EDA9F0C5E96E0A11F90FB9:\ -3A2484CE5D3E1B4D:14:1 - -66686565746E657162646D7171716E797977696F716A666C6F6976636371756A:\ -91A5B689156B441BF27DD2BDD276:\ -5D838B0F4FA22BFA2157F9083D87F8752E0495BB2113012761EF11B66E87C3CB:14:15 - -736E6279696E6A7075696B7176787867726C6B66:\ -49516935CC9F438BAFA30FF038FB:\ -F22D341361B47E3390107BD973FDC0D3E0BC02A3:14:2 - -[PBKDF1(SHA-1)] -66746C6B6662786474626A62766C6C7662776977:\ -768B277DC970F912DBDD3EDAD48AD2F065D25D:\ -40AC5837560251C275AF5E30A6A3074E57CED38E:19:6 - -786E736F736D6B766867677A7370636E63706F63:\ -4D90E846A4B6AAA02AC548014A00E97E506B2AFB:\ -7008A9DC1B9A81470A2360275C19DAB77F716824:20:6 - -6F74696C71776C756B717473:\ -71ED1A995E693EFCD33155935E800037DA74EA28:\ -CCFC44C09339040E55D3F7F76CA6EF838FDE928717241DEB9AC1A4EF45A27711:20:2001 - -6B7A6E657166666C6274767374686E6663746166:F345FB8FBD880206B650266661F6:\ -8108883FC04A01FEB10661651516425DAD1C93E0:14:10000 - -716B78686C7170656D7868796B6D7975636A626F:\ -2D54DFED0C7EF7D20B0945BA414A:\ -BC8BC53D4604977C3ADB1D19C15E87B77A84C2F6:14:10000 - -[PBKDF2(SHA-1)] -:\ -59B2B1143B4CB1059EC58D9722FB1C72471E0D85C6F7543BA5228526375B0127:\ -0001020304050607:32:10000 - -6A79756571677872736367676C707864796B6366:\ -DF6D9D72872404BF73E708CF3B7D:\ -9B56E55328A4C97A250738F8DBA1B992E8A1B508:14:10000 - -61717271737A6E7A76767A67746B73616D6D676F:\ -FA13F40AF1ADE2A30F2FFFD66FC8A659EF95E6388C1682FC0FE4D15A70109517\ -A32942E39C371440:57487813CDD2220DFC485D932A2979EE8769EA8B:40:101 - -6C7465786D666579796C6D6C62727379696B6177:\ -027AFADD48F4BE8DCC4F:ED1F39A0A7F3889AAF7E60743B3BC1CC2C738E60:10:1000 - -6378676E7972636772766C6C796C6F6C736A706F:\ -7C0D009FC91B48CB6D19BAFBFCCFF3E2CCABFE725EAA234E56BDE1D551C132F2:\ -94AC88200743FB0F6AC51BE62166CBEF08D94C15:32:1 - -7871796668727865686965646C6865776E76626A:\ -4661301D3517CA4443A6A607B32B2A63F69996299DF75DB75F1E0B98DD0EB7D8:\ -24A1A50B17D63EE8394B69FC70887F4F94883D68:32:5 - -616E6461716B706A7761627663666E706E6A6B6C:\ -82FB44A521448D5AAC94B5158EAD1E4DCD7363081A747B9F7626752BDA2D:\ -9316C80801623CC2734AF74BEC42CF4DBAA3F6D5:30:100 - -687361767679766F636C6F79757A746C736E6975:\ -F8EC2B0AC817896AC8189D787C6424ED24A6D881436687A4629802C0ECCE:\ -612CC61DF3CF2BDB36E10C4D8C9D73192BDDEE05:30:100 - -6561696D72627A70636F706275736171746B6D77:\ -C9A0B2622F13916036E29E7462E206E8BA5B50CE9212752EB8EA2A4AA7B40A4CC1BF:\ -45248F9D0CEBCB86A18243E76C972A1F3B36772A:34:100 - -67777278707178756D7364736D626D6866686D666463766C63766E677A6B6967:\ -4C9DB7BA24955225D5B845F65EF24EF1B0C6E86F2E39C8DDAA4B8ABD26082D1F\ -350381FADEAEB560DC447AFC68A6B47E6EA1E7412F6CF7B2D82342FCCD11D3B4:\ -A39B76C6EEC8374A11493AD08C246A3E40DFAE5064F4EE3489C273646178:64:1000 - -[PBKDF2(CMAC(Blowfish))] -7871796668727865686965646C6865776E76626A:\ -43734BADB91F5D89DB20B469CD2EF376CAABC226EE3952872050428EFB5E3026:\ -24A1A50B17D63EE8394B69FC70887F4F94883D68:32:5 - # MARKER: Encoders/Decoders # Format is input:output diff --git a/checks/validate.h b/checks/validate.h index 3499bf8c0..e1a8acfd5 100644 --- a/checks/validate.h +++ b/checks/validate.h @@ -5,6 +5,9 @@ #include <botan/types.h> #include <botan/rng.h> #include <string> +#include <functional> +#include <istream> +#include <map> using Botan::RandomNumberGenerator; @@ -33,5 +36,13 @@ size_t do_tls_tests(RandomNumberGenerator& rng); void test_ocb(); void test_hkdf(); +void test_pbkdf(); +void test_kdf(); + +void run_tests(std::istream& src, + const std::string& name_key, + const std::string& output_key, + bool clear_between_cb, + std::function<std::string (std::map<std::string, std::string>)> cb); #endif |