aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlloyd <[email protected]>2013-11-18 01:43:02 +0000
committerlloyd <[email protected]>2013-11-18 01:43:02 +0000
commitc83790b5bc35cd186da81276afcf6b17a4269520 (patch)
tree33c1d0f502cc8b57bf3ef70d60dacebc4f6bd1d1
parent6162cefdbe4df65a4ab1046950874a7319158e06 (diff)
Generalize file reading test runner, use it for KDF and PBKDF
-rw-r--r--checks/dolook.cpp143
-rw-r--r--checks/hkdf.vec1
-rw-r--r--checks/kdf.cpp44
-rw-r--r--checks/kdf.vec893
-rw-r--r--checks/pbkdf.cpp49
-rw-r--r--checks/pbkdf.vec139
-rw-r--r--checks/tests.cpp53
-rw-r--r--checks/validate.cpp2
-rw-r--r--checks/validate.dat587
-rw-r--r--checks/validate.h11
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