aboutsummaryrefslogtreecommitdiffstats
path: root/checks
diff options
context:
space:
mode:
Diffstat (limited to 'checks')
-rw-r--r--checks/dolook.cpp4
-rw-r--r--checks/ec_tests.cpp18
-rw-r--r--checks/ecdsa.cpp10
-rw-r--r--checks/nist_tests/x509test.cpp93
-rw-r--r--checks/pk_bench.cpp9
-rw-r--r--checks/validate.cpp21
-rw-r--r--checks/validate.dat157
7 files changed, 215 insertions, 97 deletions
diff --git a/checks/dolook.cpp b/checks/dolook.cpp
index 1015f4240..a8e08a96b 100644
--- a/checks/dolook.cpp
+++ b/checks/dolook.cpp
@@ -55,6 +55,8 @@ using namespace Botan;
#include "common.h"
+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
@@ -279,6 +281,8 @@ Filter* lookup_encoder(const std::string& algname)
return 0;
}
+}
+
Filter* lookup(const std::string& algname,
const std::vector<std::string>& params)
{
diff --git a/checks/ec_tests.cpp b/checks/ec_tests.cpp
index bad0d8912..8ed975603 100644
--- a/checks/ec_tests.cpp
+++ b/checks/ec_tests.cpp
@@ -5,12 +5,16 @@
*/
-#include <botan/build.h>
+#include <botan/rng.h>
+
+#if defined(BOTAN_HAS_ECC_GROUP)
+
#include <botan/bigint.h>
#include <botan/numthry.h>
#include <botan/curve_gfp.h>
#include <botan/point_gfp.h>
-#include <botan/ecdsa.h>
+#include <botan/ec_group.h>
+#include <botan/reducer.h>
#include <botan/oids.h>
using namespace Botan;
@@ -22,6 +26,7 @@ using namespace Botan;
#include "validate.h"
#include "common.h"
+
#define CHECK_MESSAGE(expr, print) try { if(!(expr)) std::cout << print << "\n"; } catch(std::exception& e) { std::cout << __FUNCTION__ << ": " << e.what() << "\n"; }
#define CHECK(expr) try { if(!(expr)) std::cout << #expr << "\n"; } catch(std::exception& e) { std::cout << __FUNCTION__ << ": " << e.what() << "\n"; }
@@ -38,7 +43,7 @@ PointGFp create_random_point(RandomNumberGenerator& rng,
{
const BigInt& p = curve.get_p();
- const Modular_Reducer& mod_p = curve.mod_p();
+ Modular_Reducer mod_p(p);
while(true)
{
@@ -813,3 +818,10 @@ void do_ec_tests(RandomNumberGenerator& rng)
std::cout << std::endl;
}
+#else
+
+void do_ec_tests(Botan::RandomNumberGenerator& rng)
+ {
+ }
+
+#endif
diff --git a/checks/ecdsa.cpp b/checks/ecdsa.cpp
index 58f76c9ba..5cf353e58 100644
--- a/checks/ecdsa.cpp
+++ b/checks/ecdsa.cpp
@@ -172,12 +172,12 @@ bool test_ec_sign(RandomNumberGenerator& rng)
PK_Signer signer(priv_key, "EMSA1(SHA-224)");
PK_Verifier verifier(priv_key, "EMSA1(SHA-224)");
- for(u32bit i = 0; i != 256; ++i)
- signer.update((byte)i);
+ for(size_t i = 0; i != 256; ++i)
+ signer.update(static_cast<byte>(i));
SecureVector<byte> sig = signer.signature(rng);
for(u32bit i = 0; i != 256; ++i)
- verifier.update((byte)i);
+ verifier.update(static_cast<byte>(i));
if(!verifier.check_signature(sig))
{
std::cout << "ECDSA self-test failed!";
@@ -186,7 +186,7 @@ bool test_ec_sign(RandomNumberGenerator& rng)
// now check valid signature, different input
for(u32bit i = 1; i != 256; ++i) //starting from 1
- verifier.update((byte)i);
+ verifier.update(static_cast<byte>(i));
if(verifier.check_signature(sig))
{
@@ -198,7 +198,7 @@ bool test_ec_sign(RandomNumberGenerator& rng)
sig[sig.size()/2]++;
for(u32bit i = 0; i != 256; ++i)
- verifier.update((byte)i);
+ verifier.update(static_cast<byte>(i));
if(verifier.check_signature(sig))
{
diff --git a/checks/nist_tests/x509test.cpp b/checks/nist_tests/x509test.cpp
index d89e7c341..66b274c6c 100644
--- a/checks/nist_tests/x509test.cpp
+++ b/checks/nist_tests/x509test.cpp
@@ -1,7 +1,7 @@
/*
- Code to run the X.509v3 processing tests described in "Conformance Testing of
- Relying Party Client Certificate Path Proccessing Logic", which is available
- on NIST's web site.
+ Code to run the X.509v3 processing tests described in "Conformance
+ Testing of Relying Party Client Certificate Path Proccessing Logic",
+ which is available on NIST's web site.
*/
#include <botan/x509path.h>
@@ -18,10 +18,6 @@ using namespace Botan;
#include <dirent.h>
-#define POLICY_TEST1 1000
-#define POLICY_TEST2 2000
-#define POLICY_TEST3 3000
-
std::vector<std::string> dir_listing(const std::string&);
void run_one_test(u32bit, X509_Code,
@@ -263,13 +259,14 @@ void populate_expected_results()
expected_results[33] = VERIFIED;
/*
- Policy tests: a little trickier because there are other inputs which
- affect the result.
+ Policy tests: a little trickier because there are other inputs
+ which affect the result.
- In the case of the tests currently in the suite, the default method (with
- acceptable policy being "any-policy" and with no explict policy required),
- will almost always result in a verified status. This is not particularly
- helpful. So, we do several different tests for each test set:
+ In the case of the tests currently in the suite, the default
+ method (with acceptable policy being "any-policy" and with no
+ explict policy required), will almost always result in a verified
+ status. This is not particularly helpful. So, we should do several
+ different tests for each test set:
1) With the user policy as any-policy and no explicit policy
2) With the user policy as any-policy and an explicit policy required
@@ -281,88 +278,28 @@ void populate_expected_results()
This provides reasonably good coverage of the possible outcomes.
*/
- /*
expected_results[34] = VERIFIED;
- expected_results[34+POLICY_TEST1] = ;
- expected_results[34+POLICY_TEST2] = ;
- expected_results[34+POLICY_TEST3] = ;
expected_results[35] = VERIFIED;
- expected_results[35+POLICY_TEST1] = ;
- expected_results[35+POLICY_TEST2] = ;
- expected_results[35+POLICY_TEST3] = ;
expected_results[36] = VERIFIED;
- expected_results[36+POLICY_TEST1] = ;
- expected_results[36+POLICY_TEST2] = ;
- expected_results[36+POLICY_TEST3] = ;
expected_results[37] = VERIFIED;
- expected_results[37+POLICY_TEST1] = ;
- expected_results[37+POLICY_TEST2] = ;
- expected_results[37+POLICY_TEST3] = ;
expected_results[38] = VERIFIED;
- expected_results[38+POLICY_TEST1] = ;
- expected_results[38+POLICY_TEST2] = ;
- expected_results[38+POLICY_TEST3] = ;
expected_results[39] = VERIFIED;
- expected_results[39+POLICY_TEST1] = ;
- expected_results[39+POLICY_TEST2] = ;
- expected_results[39+POLICY_TEST3] = ;
expected_results[40] = VERIFIED;
- expected_results[40+POLICY_TEST1] = ;
- expected_results[40+POLICY_TEST2] = ;
- expected_results[40+POLICY_TEST3] = ;
expected_results[41] = VERIFIED;
- expected_results[41+POLICY_TEST1] = ;
- expected_results[41+POLICY_TEST2] = ;
- expected_results[41+POLICY_TEST3] = ;
expected_results[42] = VERIFIED;
- expected_results[42+POLICY_TEST1] = ;
- expected_results[42+POLICY_TEST2] = ;
- expected_results[42+POLICY_TEST3] = ;
expected_results[43] = VERIFIED;
- expected_results[43+POLICY_TEST1] = ;
- expected_results[43+POLICY_TEST2] = ;
- expected_results[43+POLICY_TEST3] = ;
expected_results[44] = VERIFIED;
- expected_results[44+POLICY_TEST1] = ;
- expected_results[44+POLICY_TEST2] = ;
- expected_results[44+POLICY_TEST3] = ;
- expected_results[45] = EXPLICT_POLICY_REQUIRED;
- expected_results[45+POLICY_TEST1] = ;
- expected_results[45+POLICY_TEST2] = ;
- expected_results[45+POLICY_TEST3] = ;
- expected_results[46] = ACCEPT;
- expected_results[46+POLICY_TEST1] = ;
- expected_results[46+POLICY_TEST2] = ;
- expected_results[46+POLICY_TEST3] = ;
- expected_results[47] = EXPLICT_POLICY_REQUIRED;
- expected_results[47+POLICY_TEST1] = ;
- expected_results[47+POLICY_TEST2] = ;
- expected_results[47+POLICY_TEST3] = ;
+
+ //expected_results[45] = EXPLICT_POLICY_REQUIRED;
+ //expected_results[46] = ACCEPT;
+ //expected_results[47] = EXPLICT_POLICY_REQUIRED;
+
expected_results[48] = VERIFIED;
- expected_results[48+POLICY_TEST1] = ;
- expected_results[48+POLICY_TEST2] = ;
- expected_results[48+POLICY_TEST3] = ;
expected_results[49] = VERIFIED;
- expected_results[49+POLICY_TEST1] = ;
- expected_results[49+POLICY_TEST2] = ;
- expected_results[49+POLICY_TEST3] = ;
expected_results[50] = VERIFIED;
- expected_results[50+POLICY_TEST1] = ;
- expected_results[50+POLICY_TEST2] = ;
- expected_results[50+POLICY_TEST3] = ;
expected_results[51] = VERIFIED;
- expected_results[51+POLICY_TEST1] = ;
- expected_results[51+POLICY_TEST2] = ;
- expected_results[51+POLICY_TEST3] = ;
expected_results[52] = VERIFIED;
- expected_results[52+POLICY_TEST1] = ;
- expected_results[52+POLICY_TEST2] = ;
- expected_results[52+POLICY_TEST3] = ;
expected_results[53] = VERIFIED;
- expected_results[53+POLICY_TEST1] = ;
- expected_results[53+POLICY_TEST2] = ;
- expected_results[53+POLICY_TEST3] = ;
- */
expected_results[54] = CERT_CHAIN_TOO_LONG;
expected_results[55] = CERT_CHAIN_TOO_LONG;
diff --git a/checks/pk_bench.cpp b/checks/pk_bench.cpp
index b0e689b0c..de8ad0730 100644
--- a/checks/pk_bench.cpp
+++ b/checks/pk_bench.cpp
@@ -65,6 +65,9 @@ using namespace Botan;
#include <memory>
#include <set>
+#define BENCH_FAULT_PROT DISABLE_FAULT_PROTECTION
+//#define BENCH_FAULT_PROT ENABLE_FAULT_PROTECTION
+
namespace {
const char* ec_domains[] = {
@@ -329,7 +332,7 @@ void benchmark_ecdsa(RandomNumberGenerator& rng,
ECDSA_PrivateKey key(rng, params);
keygen_timer.stop();
- PK_Signer sig(key, padding, IEEE_1363, DISABLE_FAULT_PROTECTION);
+ PK_Signer sig(key, padding, IEEE_1363, BENCH_FAULT_PROT);
PK_Verifier ver(key, padding);
benchmark_sig_ver(ver, sig, verify_timer,
@@ -371,7 +374,7 @@ void benchmark_gost_3410(RandomNumberGenerator& rng,
GOST_3410_PrivateKey key(rng, params);
keygen_timer.stop();
- PK_Signer sig(key, padding, IEEE_1363, DISABLE_FAULT_PROTECTION);
+ PK_Signer sig(key, padding, IEEE_1363, BENCH_FAULT_PROT);
PK_Verifier ver(key, padding);
benchmark_sig_ver(ver, sig, verify_timer,
@@ -478,7 +481,7 @@ void benchmark_dsa_nr(RandomNumberGenerator& rng,
algo_name = key.algo_name();
keygen_timer.stop();
- PK_Signer sig(key, padding, IEEE_1363, DISABLE_FAULT_PROTECTION);
+ PK_Signer sig(key, padding, IEEE_1363, BENCH_FAULT_PROT);
PK_Verifier ver(key, padding);
benchmark_sig_ver(ver, sig, verify_timer,
diff --git a/checks/validate.cpp b/checks/validate.cpp
index d79f9783a..65317604e 100644
--- a/checks/validate.cpp
+++ b/checks/validate.cpp
@@ -183,19 +183,23 @@ bool test_bcrypt(RandomNumberGenerator& rng)
#if defined(BOTAN_HAS_BCRYPT)
std::cout << "Testing Bcrypt: " << std::flush;
- const std::string input = "abc";
+ bool ok = true;
// Generated by jBCrypt 0.3
- const std::string fixed_hash =
- "$2a$05$DfPyLs.G6.To9fXEFgUL1O6HpYw3jIXgPcl/L3Qt3jESuWmhxtmpS";
+ if(!check_bcrypt("abc",
+ "$2a$05$DfPyLs.G6.To9fXEFgUL1O6HpYw3jIXgPcl/L3Qt3jESuWmhxtmpS"))
+ {
+ std::cout << "Fixed bcrypt test failed\n";
+ ok = false;
+ }
std::cout << "." << std::flush;
- bool ok = true;
-
- if(!check_bcrypt(input, fixed_hash))
+ // http://www.openwall.com/lists/john-dev/2011/06/19/2
+ if(!check_bcrypt("\xA3",
+ "$2a$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq"))
{
- std::cout << "Fixed bcrypt test failed\n";
+ std::cout << "Fixed bcrypt test 2 failed\n";
ok = false;
}
@@ -203,7 +207,8 @@ bool test_bcrypt(RandomNumberGenerator& rng)
for(u16bit level = 1; level != 5; ++level)
{
- std::string gen_hash = generate_bcrypt(input, rng, level);
+ const std::string input = "some test passphrase 123";
+ const std::string gen_hash = generate_bcrypt(input, rng, level);
if(!check_bcrypt(input, gen_hash))
{
diff --git a/checks/validate.dat b/checks/validate.dat
index 41e5bf61f..6b9a49e52 100644
--- a/checks/validate.dat
+++ b/checks/validate.dat
@@ -4123,6 +4123,26 @@ F0E1D2C3B4A5968778695A4B3C2D1E0F00112233445566
FEDCBA9876543210:05044B62FA52D080:\
F0E1D2C3B4A5968778695A4B3C2D1E0F0011223344556677
+[Camellia]
+# From RFC 3713
+
+0123456789ABCDEFFEDCBA9876543210:67673138549669730857065648EABE43:\
+0123456789ABCDEFFEDCBA9876543210
+
+0123456789ABCDEFFEDCBA9876543210:B4993401B3E996F84EE5CEE7D79B09B9:\
+0123456789ABCDEFFEDCBA98765432100011223344556677
+
+0123456789ABCDEFFEDCBA9876543210:9ACC237DFF16D76C20EF7C919E3A7509:\
+0123456789ABCDEFFEDCBA987654321000112233445566778899AABBCCDDEEFF
+
+# From NESSIE
+
+00000000000000000000000000000000:6C227F749319A3AA7DA235A9BBA05A2C:\
+80000000000000000000000000000000
+
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:25DD9EB9DD67FBC6E8431F56F4FBE651:\
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+
# First one is from RFC 2144. The rest were done with OpenSSL and bits taken
# from /dev/urandom
[CAST-128]
@@ -4406,6 +4426,61 @@ D2FD8867D50D2DFE:0000000000000004:0101010101010101
0000000000000000:E2F5728F0995013C:1002911598100201
0000000000000000:1AEAC39A61F0A464:1002911698100101
+# Tests all sboxes
+01A1D6D039776742:690F5B0D9A26939B:7CA110454A1A6E57
+5CD54CA83DEF57DA:7A389D10354BD271:0131D9619DC1376E
+0248D43806F67172:868EBB51CAB4599A:07A1133E4A0B2686
+51454B582DDF440A:7178876E01F19B2A:3849674C2602319E
+42FD443059577FA2:AF37FB421F8C4095:04B915BA43FEB5B6
+059B5E0851CF143A:86A560F10EC6D85B:0113B970FD34F2CE
+0756D8E0774761D2:0CD3DA020021DC09:0170F175468FB5E6
+762514B829BF486A:EA676B2CB7DB2B7A:43297FAD38E373FE
+3BDD119049372802:DFD64A815CAF1A0F:07A7137045DA2A16
+26955F6835AF609A:5C513C9C4886C088:04689104C2FD3B2F
+164D5E404F275232:0A2AEEAE3FF4AB77:37D06BB516CB7546
+6B056E18759F5CCA:EF1BF03E5DFA575A:1F08260D1AC2465E
+004BD6EF09176062:88BF0DB6D70DEE56:584023641ABA6176
+480D39006EE762F2:A1F9915541020B56:025816164629B007
+437540C8698F3CFA:6FBF1CAFCFFD0556:49793EBC79B3258F
+072D43A077075292:2F22E49BAB7CA1AC:4FB05E1515AB73A7
+02FE55778117F12A:5A6B612CC26CCE4A:49E95D6D4CA229BF
+1D9D5C5018F728C2:5F4C038ED12B2E41:018310DC409B26D6
+305532286D6F295A:63FAC0D034D9F793:1C587F1C13924FEF
+
+# Tests the permutation
+0000000000000000:88D55E54F54C97B4:1046913489980131
+0000000000000000:0C0CC00C83EA48FD:1007103489988020
+0000000000000000:83BC8EF3A6570183:10071034C8980120
+0000000000000000:DF725DCAD94EA2E9:1046103489988020
+0000000000000000:E652B53B550BE8B0:1086911519190101
+0000000000000000:AF527120C485CBB0:1086911519580101
+0000000000000000:0F04CE393DB926D5:5107B01519580101
+0000000000000000:C9F00FFC74079067:1007B01519190101
+0000000000000000:7CFD82A593252B4E:3107915498080101
+0000000000000000:CB49A2F9E91363E3:3107919498080101
+0000000000000000:00B588BE70D23F56:10079115B9080140
+0000000000000000:406A9A6AB43399AE:3107911598080140
+0000000000000000:6CB773611DCA9ADA:1007D01589980101
+0000000000000000:67FD21C17DBB5D70:9107911589980101
+0000000000000000:9592CB4110430787:9107D01589190101
+0000000000000000:A6B7FF68A318DDD3:1007D01598980120
+0000000000000000:4D102196C914CA16:1007940498190101
+0000000000000000:2DFA9F4573594965:0107910491190401
+0000000000000000:B46604816C0E0774:0107910491190101
+0000000000000000:6E7E6221A4F34E87:0107940491190401
+0000000000000000:AA85E74643233199:19079210981A0101
+0000000000000000:2E5A19DB4D1962D6:1007911998190801
+0000000000000000:23A866A809D30894:10079119981A0801
+0000000000000000:D812D961F017D320:1007921098190101
+0000000000000000:055605816E58608F:100791159819010B
+0000000000000000:ABD88E8B1B7716F1:1004801598190101
+0000000000000000:537AC95BE69DA1E1:1004801598190102
+0000000000000000:AED0F6AE3C25CDD8:1004801598190108
+0000000000000000:B3E35A5EE53E7B8D:1002911598100104
+0000000000000000:61C79C71921A2EF8:1002911598190104
+0000000000000000:E2F5728F0995013C:1002911598100201
+0000000000000000:1AEAC39A61F0A464:1002911698100101
+
# Vectors randomly generated using OpenSSL
0CEB1136A85AD37A:9CE3A1058A483F55:309A4B21A2067196
@@ -4693,6 +4768,8 @@ D6A025B07C037A6E1E0653E828FB9E3A3587CDDA5325D4DAA743D113D995D6AF
E07306086FA442A42B107F7F355359DD972BF070C0C71FF5C37FA7C259C7E039
[IDEA]
+7409000000000000:E18315C171B83765:ED1BCC9E9267925F3132BA3A8CF9B764
+
D53FABBF94FF8B5F:1D0CB2AF1654820A:729A27ED8F5C3E8BAF16560D14C90B43
848F836780938169:D7E0468226D0FC56:729A27ED8F5C3E8BAF16560D14C90B43
819440CA2065D112:264A8BBA66959075:729A27ED8F5C3E8BAF16560D14C90B43
@@ -4720,6 +4797,86 @@ FAE6D2BEAA96826E0A141E28323C4650050A0F14191E2328050A0F14191E2328:\
85DF52005608193D2F7DE750212FB7347B7314925DE59C097B7314925DE59C09:\
00010002000300040005000600070008
+C309000000000000A02A000000000000B03D000000000000C942000000000000\
+2B4C000000000000A04E0000000000009857000000000000C860000000000000\
+0063000000000000F2660000000000008698000000000000729D000000000000\
+34A000000000000023A500000000000010AE00000000000025AE000000000000\
+30D600000000000064DB000000000000BCE1000000000000F6E7000000000000\
+4AEC00000000000080F9000000000000E0FE00000000000061FF000000000000:\
+9C3C4F44BB50DF7367DAD70E6FED04E0AEB0344116C6E41F66A1A304E822132D\
+8AFCC1727259D93DD6E742EAEF2FD8C03EAD7890DC4EFACBB8776F3439A3DB1B\
+55D47DC6BC4A43349BA9E85FE178CD1ADBDD4E9D19CA1E7659341251586E1386\
+4A8C4E93A2616A0C18890A622452AD9FD09CB1A9CDC83ABF2FCFA325FA011731\
+9C924852D426132D05DA82EEBC3C261A6036C6477FBE3F65C40B8B02C2F9D8C8\
+B3084034AB3873CF22F20759C145ECCE92CE6B557D6DB959DA0B8AD4E0DFBCEA:\
+F2022315280960F16FD09741D13F693A
+
+7CC254F81BE8E78D765A2E63339FC99A66320DB73158A35A255D051758E95ED4\
+ABB2CDC69BB454110E827441213DDC8770E93EA141E1FC673E017E97EADC6B96\
+8F385C2AECB03BFB32AF3C54EC18DB5C021AFE43FBFAAA3AFB29D1E6053C7C94\
+75D8BE6189F95CBBA8990F95B1EBF1B305EFF700E9A13AE5CA0BCBD0484764BD\
+1F231EA81C7B64C514735AC55E4B79633B706424119E09DCAAD4ACF21B10AF3B\
+33CDE3504847155CBB6F2219BA9B7DF50BE11A1C7F23F829F8A41B13B5CA4EE8\
+983238E0794D3D34BC5F4E77FACB6C05AC86212BAA1A55A2BE70B5733B045CD3\
+3694B3AFE2F0E49E4F321549FD824EA90870D4B28A2954489A0ABCD50E18A844\
+AC5BF38E4CD72D9B0942E506C433AFCDA3847F2DADD47647DE321CEC4AC430F6\
+2023856CFBB20704F4EC0BB920BA86C33E05F1ECD96733B79950A3E314D3D934\
+F75EA0F210A8F6059401BEB4BC4478FA4969E623D01ADA696A7E4C7E5125B348\
+84533A94FB319990325744EE9BBCE9E525CF08F5E9E25E5360AAD2B2D085FA54\
+D835E8D466826498D9A8877565705A8A3F62802944DE7CA5894E5759D351ADAC\
+869580EC17E485F18C0C66F17CC07CBB22FCE466DA610B63AF62BC83B4692F3A\
+FFAF271693AC071FB86D11342D8DEF4F89D4B66335C1C7E4248367D8ED9612EC\
+453902D8E50AF89D7709D1A596C1F41F95AA82CA6C49AE90CD1668BAAC7AA6F2\
+B4A8CA99B2C2372ACB08CF61C9C3805E6E0328DA4CD76A19EDD2D3994C798B00\
+22569AD418D1FEE4D9CD45A391C601FFC92AD91501432FEE150287617C13629E\
+69FC7281CD7165A63EAB49CF714BCE3A75A74F76EA7E64FF81EB61FDFEC39B67\
+BF0DE98C7E4E32BDF97C8C6AC75BA43C02F4B2ED7216ECF3014DF000108B67CF\
+99505B179F8ED4980A6103D1BCA70DBE9BBFAB0ED59801D6E5F2D6F67D3EC516\
+8E212E2DAF02C6B963C98A1F7097DE0C56891A2B211B01070DD8FD8B16C2A1A4\
+E3CFD292D2984B3561D555D16C33DDC2BCF7EDDE13EFE520C7E2ABDDA44D8188\
+1C531AEEEB66244C3B791EA8ACFB6A68F3584606472B260E0DD2EBB21F6C3A3B\
+C0542AABBA4EF8F6C7169E731108DB0460220AA74D31B55B03A00D220D475DCD\
+9B877856D5704C9C86EA0F98F2EB9C530DA7FA5AD8B0B5DB50C2FD5D095A2AA5\
+E2A3FBB71347549A316332234ECE765B7571B64D216B28712E25CF3780F9DC62\
+9CD719B01E6D4A4FD17C731F4AE97BC05A310D7B9C36EDCA5BBC02DBB5DE3D52\
+B65702D4C44C2495C897B5128030D2DB61E056FD1643C871FFCA4DB5A88A075E\
+E10933A655573B1DEEF02F6E20024981E2A07FF8E34769E311B698B9419F1822\
+A84BC8FDA2041A90F449FE154B48962DE81525CB5C8FAE6D45462786E53FA98D\
+8A718A2C75A4BC6AEEBA7F39021567EA2B8CB6871B64F561AB1CE7905B901EE5:\
+9C142A22EDF81444F47272B80A037C169E304393537CECE8003BD80F7B054406\
+3B4A141F9A99D3C6820BAD98BECD914804F389EB2A50E1E2CF22161FC78B9366\
+0E07E2686E70AC0715299C4796F3559FDA802E61CB4ABBF42BAE516BD09FA410\
+085A0A92C6F32A3797D19808D3B3D049B605852E970E5A1B8031D3DC34B5A273\
+F54ED35E21D780204F4B3C512596237153BE9FAF74A44E9A9DCBE96D628AA58B\
+1E3363A94DF540230B38A1ACA440432640E5387D92F1CC1A16F8628A4CB6229F\
+513AB926300668CF97B27643C9C9D0C3030D0CDFBBCB69C3DB199E5D392A97A5\
+1DE6C9881AE5612A69FA0EA026F2F254B929201AFB3AFC8D977C3ED6E12F0118\
+92037D0F49B0144E07A0F0556F0BAC9B3F829C233265439AF711E0B5DD6EC813\
+FD51281E8AA6F031B096C64EE8F03E041FE4DC6B5441141F2D4A308CE8EA77C6\
+483E3CF565EC49CF27A0B13F28D3C63AD7FB6B3A96579D30C9D65F7BA86E56DA\
+6D14AF3C7D170CB5BF5F21C70C1771354DA2850CFF8D9250273828C1FE60C4AC\
+086049404E3D63E04935F03B057B4783B13CF49757A8B5ABB3D2E37E54B881D2\
+36F7DF7FE80E4AE33E9125F54AA96D96BFB15607F0800B215CBF9BB0F7E29080\
+D8504E9BC1F78256593B9565E5AA5FA22032A47041B453D1B154A8D24CD59CF9\
+AA6A8E55363F3DF2B6307ABA5134D67B0DF0AE4FE77F23BF7DF8504FE9DC7F32\
+A8562E2DF585E639847DD624E55B0D0DCCDA72D0F1E072D82D4BC135DC5F7F91\
+30956D401FAB1456527FE087A436C1511CDFEA58202D200E1817E360E8400AAE\
+83B073A63596B033D7E83C6CAB7FDD7069C3B1718EAF60B937CD2458255E68FC\
+D9514FD14AA6E27EC76E75F95F0A678A0F64D49C1B9B8F8DA56DDB8CE640FF6E\
+7195F4A679165F9996F3DDF992E3CB4ED9E9084AFC0038E4BEFB467CC8170AF8\
+F004082BBCB137BBD45C124BE8CEDC89DD565A24830889CE4B9781FC18803BDA\
+1A0A4EB70DA35887B02F18CFF9329E2B7C31B0F5F0648E0508379B52C8FF91CE\
+F939A040A8C20F2F27ED65553680729A2181B3B3C4AA02BFF8DF0A9228A87BBF\
+52B48F473D0F9070C76E4DB6F09FFDFEB629BD0E1944B7016AF34187E2985AEA\
+E30D6480A58F649A0C858E1F1458388A9E822A306AC1AA7465882DE78F242EF7\
+B0CB45D68A057F00D8609587922C8FAD6F1A7FFA34BF2175FC516730A61CF82C\
+6F866C978CC292BCC1F91E6AF1785FCDAA9A43A01E6AEE91E222F8AF8C989F2A\
+4C50B7A1D45BC15E11E5E6E6EF720506B8DF564648BEBFE272C0A77D41295865\
+108150CDB3620970A37DB94F1CC35E434DC33434D99871F6141EB57C9E648AD1\
+BF70E2B7FCEB81EA871DD92F19C366EA532CA4A7BEF9242128B7ADDD308B58FF\
+F5594CB4156A03C6A6ED3F27E8DB20FB2F4208422B7E9E0A4E63A0122560CFBC:\
+67C6697351FF4AEC29CDBAABF2FBE346
+
# Randomly generated by OpenSSL
A1F4C5FC0AF894FB:1F88AD254A1653CB:69E2F555209FCA21ED36E0243F043537
55E31A38B2C91116:8D57CB7AFB401E55:BC0ED7C4A90FE4760B3D971F0F2589F6