summaryrefslogtreecommitdiff
path: root/extra/yassl/taocrypt/test/test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'extra/yassl/taocrypt/test/test.cpp')
-rw-r--r--extra/yassl/taocrypt/test/test.cpp1358
1 files changed, 0 insertions, 1358 deletions
diff --git a/extra/yassl/taocrypt/test/test.cpp b/extra/yassl/taocrypt/test/test.cpp
deleted file mode 100644
index cf1ec551fe3..00000000000
--- a/extra/yassl/taocrypt/test/test.cpp
+++ /dev/null
@@ -1,1358 +0,0 @@
-/*
- Copyright (c) 2006, 2014, Oracle and/or its affiliates.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- MA 02110-1335 USA.
-*/
-
-// test.cpp
-// test taocrypt functionality
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <stdio.h>
-
-#include "runtime.hpp"
-#include "sha.hpp"
-#include "md5.hpp"
-#include "md2.hpp"
-#include "md4.hpp"
-#include "ripemd.hpp"
-#include "hmac.hpp"
-#include "arc4.hpp"
-#include "des.hpp"
-#include "rsa.hpp"
-#include "dsa.hpp"
-#include "aes.hpp"
-#include "twofish.hpp"
-#include "blowfish.hpp"
-#include "asn.hpp"
-#include "dh.hpp"
-#include "coding.hpp"
-#include "random.hpp"
-#include "pwdbased.hpp"
-#include "rabbit.hpp"
-#include "hc128.hpp"
-
-
-
-using TaoCrypt::byte;
-using TaoCrypt::word32;
-using TaoCrypt::SHA;
-using TaoCrypt::SHA256;
-using TaoCrypt::SHA224;
-#ifdef WORD64_AVAILABLE
- using TaoCrypt::SHA512;
- using TaoCrypt::SHA384;
-#endif
-using TaoCrypt::MD5;
-using TaoCrypt::MD2;
-using TaoCrypt::MD4;
-using TaoCrypt::RIPEMD160;
-using TaoCrypt::HMAC;
-using TaoCrypt::ARC4;
-using TaoCrypt::DES_EDE3_CBC_Encryption;
-using TaoCrypt::DES_EDE3_CBC_Decryption;
-using TaoCrypt::DES_CBC_Encryption;
-using TaoCrypt::DES_CBC_Decryption;
-using TaoCrypt::DES_ECB_Encryption;
-using TaoCrypt::DES_ECB_Decryption;
-using TaoCrypt::AES_CBC_Encryption;
-using TaoCrypt::AES_CBC_Decryption;
-using TaoCrypt::AES_ECB_Encryption;
-using TaoCrypt::AES_ECB_Decryption;
-using TaoCrypt::Twofish_CBC_Encryption;
-using TaoCrypt::Twofish_CBC_Decryption;
-using TaoCrypt::Twofish_ECB_Encryption;
-using TaoCrypt::Twofish_ECB_Decryption;
-using TaoCrypt::Blowfish_CBC_Encryption;
-using TaoCrypt::Blowfish_CBC_Decryption;
-using TaoCrypt::Blowfish_ECB_Encryption;
-using TaoCrypt::Blowfish_ECB_Decryption;
-using TaoCrypt::RSA_PrivateKey;
-using TaoCrypt::RSA_PublicKey;
-using TaoCrypt::DSA_PrivateKey;
-using TaoCrypt::DSA_PublicKey;
-using TaoCrypt::DSA_Signer;
-using TaoCrypt::DSA_Verifier;
-using TaoCrypt::RSAES_Encryptor;
-using TaoCrypt::RSAES_Decryptor;
-using TaoCrypt::Source;
-using TaoCrypt::FileSource;
-using TaoCrypt::FileSource;
-using TaoCrypt::HexDecoder;
-using TaoCrypt::HexEncoder;
-using TaoCrypt::Base64Decoder;
-using TaoCrypt::Base64Encoder;
-using TaoCrypt::CertDecoder;
-using TaoCrypt::DH;
-using TaoCrypt::EncodeDSA_Signature;
-using TaoCrypt::DecodeDSA_Signature;
-using TaoCrypt::PBKDF2_HMAC;
-using TaoCrypt::tcArrayDelete;
-using TaoCrypt::GetCert;
-using TaoCrypt::GetPKCS_Cert;
-using TaoCrypt::Rabbit;
-using TaoCrypt::HC128;
-
-struct testVector {
- byte* input_;
- byte* output_;
- word32 inLen_;
- word32 outLen_;
-
- testVector(const char* in, const char* out) : input_((byte*)in),
- output_((byte*)out), inLen_((word32)strlen(in)),
- outLen_((word32)strlen(out)) {}
-};
-
-int sha_test();
-int sha256_test();
-#ifdef WORD64_AVAILABLE
- int sha512_test();
- int sha384_test();
-#endif
-int sha224_test();
-int md5_test();
-int md2_test();
-int md4_test();
-int ripemd_test();
-int hmac_test();
-int arc4_test();
-int des_test();
-int aes_test();
-int twofish_test();
-int blowfish_test();
-int rsa_test();
-int dsa_test();
-int dh_test();
-int pwdbased_test();
-int pkcs12_test();
-int rabbit_test();
-int hc128_test();
-
-TaoCrypt::RandomNumberGenerator rng;
-
-
-void err_sys(const char* msg, int es)
-{
- printf("%s\n", msg);
- exit(es);
-}
-
-// func_args from test.hpp, so don't have to pull in other junk
-struct func_args {
- int argc;
- char** argv;
- int return_code;
-};
-
-
-/*
- DES, AES, Blowfish, and Twofish need aligned (4 byte) input/output for
- processing, can turn this off by setting gpBlock(assumeAligned = false)
- but would hurt performance. yaSSL always uses dynamic memory so we have
- at least 8 byte alignment. This test tried to force alignment for stack
- variables (for convenience) but some compiler versions and optimizations
- seemed to be off. So we have msgTmp variable which we copy into dynamic
- memory at runtime to ensure proper alignment, along with plain/cipher.
- Whew!
-*/
-const byte msgTmp[] = { // "now is the time for all " w/o trailing 0
- 0x6e,0x6f,0x77,0x20,0x69,0x73,0x20,0x74,
- 0x68,0x65,0x20,0x74,0x69,0x6d,0x65,0x20,
- 0x66,0x6f,0x72,0x20,0x61,0x6c,0x6c,0x20
-};
-
-byte* msg = 0; // for block cipher input
-byte* plain = 0; // for cipher decrypt comparison
-byte* cipher = 0; // block output
-
-
-void taocrypt_test(void* args)
-{
- ((func_args*)args)->return_code = -1; // error state
-
- msg = NEW_TC byte[24];
- plain = NEW_TC byte[24];
- cipher = NEW_TC byte[24];
-
- memcpy(msg, msgTmp, 24);
-
- int ret = 0;
- if ( (ret = sha_test()) )
- err_sys("SHA test failed!\n", ret);
- else
- printf( "SHA test passed!\n");
-
- if ( (ret = sha256_test()) )
- err_sys("SHA-256 test failed!\n", ret);
- else
- printf( "SHA-256 test passed!\n");
-
- if ( (ret = sha224_test()) )
- err_sys("SHA-224 test failed!\n", ret);
- else
- printf( "SHA-224 test passed!\n");
-
-#ifdef WORD64_AVAILABLE
-
- if ( (ret = sha512_test()) )
- err_sys("SHA-512 test failed!\n", ret);
- else
- printf( "SHA-512 test passed!\n");
-
- if ( (ret = sha384_test()) )
- err_sys("SHA-384 test failed!\n", ret);
- else
- printf( "SHA-384 test passed!\n");
-
-#endif
-
- if ( (ret = md5_test()) )
- err_sys("MD5 test failed!\n", ret);
- else
- printf( "MD5 test passed!\n");
-
- if ( (ret = md2_test()) )
- err_sys("MD2 test failed!\n", ret);
- else
- printf( "MD2 test passed!\n");
-
- if ( (ret = md4_test()) )
- err_sys("MD4 test failed!\n", ret);
- else
- printf( "MD4 test passed!\n");
-
- if ( (ret = ripemd_test()) )
- err_sys("RIPEMD test failed!\n", ret);
- else
- printf( "RIPEMD test passed!\n");
-
- if ( ( ret = hmac_test()) )
- err_sys("HMAC test failed!\n", ret);
- else
- printf( "HMAC test passed!\n");
-
- if ( (ret = arc4_test()) )
- err_sys("ARC4 test failed!\n", ret);
- else
- printf( "ARC4 test passed!\n");
-
- if ( (ret = rabbit_test()) )
- err_sys("Rabbit test failed!\n", ret);
- else
- printf( "Rabbit test passed!\n");
-
- if ( (ret = hc128_test()) )
- err_sys("HC128 test failed!\n", ret);
- else
- printf( "HC128 test passed!\n");
-
- if ( (ret = des_test()) )
- err_sys("DES test failed!\n", ret);
- else
- printf( "DES test passed!\n");
-
- if ( (ret = aes_test()) )
- err_sys("AES test failed!\n", ret);
- else
- printf( "AES test passed!\n");
-
- if ( (ret = twofish_test()) )
- err_sys("Twofish test failed!\n", ret);
- else
- printf( "Twofish test passed!\n");
-
- if ( (ret = blowfish_test()) )
- err_sys("Blowfish test failed!\n", ret);
- else
- printf( "Blowfish test passed!\n");
-
- if ( (ret = rsa_test()) )
- err_sys("RSA test failed!\n", ret);
- else
- printf( "RSA test passed!\n");
-
- if ( (ret = dh_test()) )
- err_sys("DH test failed!\n", ret);
- else
- printf( "DH test passed!\n");
-
- if ( (ret = dsa_test()) )
- err_sys("DSA test failed!\n", ret);
- else
- printf( "DSA test passed!\n");
-
- if ( (ret = pwdbased_test()) )
- err_sys("PBKDF2 test failed!\n", ret);
- else
- printf( "PBKDF2 test passed!\n");
-
- /* not ready yet
- if ( (ret = pkcs12_test()) )
- err_sys("PKCS12 test failed!\n", ret);
- else
- printf( "PKCS12 test passed!\n");
- */
-
- tcArrayDelete(cipher);
- tcArrayDelete(plain);
- tcArrayDelete(msg);
-
- ((func_args*)args)->return_code = ret;
-}
-
-
-// so overall tests can pull in test function
-#ifndef NO_MAIN_DRIVER
-
- int main(int argc, char** argv)
- {
- func_args args;
-
- args.argc = argc;
- args.argv = argv;
-
- taocrypt_test(&args);
- TaoCrypt::CleanUp();
-
- return args.return_code;
- }
-
-#endif // NO_MAIN_DRIVER
-
-
-void file_test(const char* file, byte* check)
-{
- FILE* f;
- int i = 0;
- MD5 md5;
- byte buf[1024];
- byte md5sum[MD5::DIGEST_SIZE];
-
- if( !( f = fopen( file, "rb" ) )) {
- printf("Can't open %s\n", file);
- return;
- }
- while( ( i = (int)fread(buf, 1, sizeof(buf), f )) > 0 )
- md5.Update(buf, i);
-
- md5.Final(md5sum);
- memcpy(check, md5sum, sizeof(md5sum));
-
- for(int j = 0; j < MD5::DIGEST_SIZE; ++j )
- printf( "%02x", md5sum[j] );
-
- printf(" %s\n", file);
-
- fclose(f);
-}
-
-
-int sha_test()
-{
- SHA sha;
- byte hash[SHA::DIGEST_SIZE];
-
- testVector test_sha[] =
- {
- testVector("abc",
- "\xA9\x99\x3E\x36\x47\x06\x81\x6A\xBA\x3E\x25\x71\x78\x50\xC2"
- "\x6C\x9C\xD0\xD8\x9D"),
- testVector("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
- "\x84\x98\x3E\x44\x1C\x3B\xD2\x6E\xBA\xAE\x4A\xA1\xF9\x51\x29"
- "\xE5\xE5\x46\x70\xF1"),
- testVector("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaa",
- "\x00\x98\xBA\x82\x4B\x5C\x16\x42\x7B\xD7\xA1\x12\x2A\x5A\x44"
- "\x2A\x25\xEC\x64\x4D"),
- testVector("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- "aaaaaaaaaa",
- "\xAD\x5B\x3F\xDB\xCB\x52\x67\x78\xC2\x83\x9D\x2F\x15\x1E\xA7"
- "\x53\x99\x5E\x26\xA0")
- };
-
- int times( sizeof(test_sha) / sizeof(testVector) );
- for (int i = 0; i < times; ++i) {
- sha.Update(test_sha[i].input_, test_sha[i].inLen_);
- sha.Final(hash);
-
- if (memcmp(hash, test_sha[i].output_, SHA::DIGEST_SIZE) != 0)
- return -1 - i;
- }
-
- return 0;
-}
-
-
-int sha256_test()
-{
- SHA256 sha;
- byte hash[SHA256::DIGEST_SIZE];
-
- testVector test_sha[] =
- {
- testVector("abc",
- "\xBA\x78\x16\xBF\x8F\x01\xCF\xEA\x41\x41\x40\xDE\x5D\xAE\x22"
- "\x23\xB0\x03\x61\xA3\x96\x17\x7A\x9C\xB4\x10\xFF\x61\xF2\x00"
- "\x15\xAD"),
- testVector("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
- "\x24\x8D\x6A\x61\xD2\x06\x38\xB8\xE5\xC0\x26\x93\x0C\x3E\x60"
- "\x39\xA3\x3C\xE4\x59\x64\xFF\x21\x67\xF6\xEC\xED\xD4\x19\xDB"
- "\x06\xC1")
- };
-
- int times( sizeof(test_sha) / sizeof(testVector) );
- for (int i = 0; i < times; ++i) {
- sha.Update(test_sha[i].input_, test_sha[i].inLen_);
- sha.Final(hash);
-
- if (memcmp(hash, test_sha[i].output_, SHA256::DIGEST_SIZE) != 0)
- return -1 - i;
- }
-
- return 0;
-}
-
-
-#ifdef WORD64_AVAILABLE
-
-int sha512_test()
-{
- SHA512 sha;
- byte hash[SHA512::DIGEST_SIZE];
-
- testVector test_sha[] =
- {
- testVector("abc",
- "\xdd\xaf\x35\xa1\x93\x61\x7a\xba\xcc\x41\x73\x49\xae\x20\x41"
- "\x31\x12\xe6\xfa\x4e\x89\xa9\x7e\xa2\x0a\x9e\xee\xe6\x4b\x55"
- "\xd3\x9a\x21\x92\x99\x2a\x27\x4f\xc1\xa8\x36\xba\x3c\x23\xa3"
- "\xfe\xeb\xbd\x45\x4d\x44\x23\x64\x3c\xe8\x0e\x2a\x9a\xc9\x4f"
- "\xa5\x4c\xa4\x9f"),
- testVector("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhi"
- "jklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
- "\x8e\x95\x9b\x75\xda\xe3\x13\xda\x8c\xf4\xf7\x28\x14\xfc\x14"
- "\x3f\x8f\x77\x79\xc6\xeb\x9f\x7f\xa1\x72\x99\xae\xad\xb6\x88"
- "\x90\x18\x50\x1d\x28\x9e\x49\x00\xf7\xe4\x33\x1b\x99\xde\xc4"
- "\xb5\x43\x3a\xc7\xd3\x29\xee\xb6\xdd\x26\x54\x5e\x96\xe5\x5b"
- "\x87\x4b\xe9\x09")
- };
-
- int times( sizeof(test_sha) / sizeof(testVector) );
- for (int i = 0; i < times; ++i) {
- sha.Update(test_sha[i].input_, test_sha[i].inLen_);
- sha.Final(hash);
-
- if (memcmp(hash, test_sha[i].output_, SHA512::DIGEST_SIZE) != 0)
- return -1 - i;
- }
-
- return 0;
-}
-
-
-int sha384_test()
-{
- SHA384 sha;
- byte hash[SHA384::DIGEST_SIZE];
-
- testVector test_sha[] =
- {
- testVector("abc",
- "\xcb\x00\x75\x3f\x45\xa3\x5e\x8b\xb5\xa0\x3d\x69\x9a\xc6\x50"
- "\x07\x27\x2c\x32\xab\x0e\xde\xd1\x63\x1a\x8b\x60\x5a\x43\xff"
- "\x5b\xed\x80\x86\x07\x2b\xa1\xe7\xcc\x23\x58\xba\xec\xa1\x34"
- "\xc8\x25\xa7"),
- testVector("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhi"
- "jklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
- "\x09\x33\x0c\x33\xf7\x11\x47\xe8\x3d\x19\x2f\xc7\x82\xcd\x1b"
- "\x47\x53\x11\x1b\x17\x3b\x3b\x05\xd2\x2f\xa0\x80\x86\xe3\xb0"
- "\xf7\x12\xfc\xc7\xc7\x1a\x55\x7e\x2d\xb9\x66\xc3\xe9\xfa\x91"
- "\x74\x60\x39")
- };
-
- int times( sizeof(test_sha) / sizeof(testVector) );
- for (int i = 0; i < times; ++i) {
- sha.Update(test_sha[i].input_, test_sha[i].inLen_);
- sha.Final(hash);
-
- if (memcmp(hash, test_sha[i].output_, SHA384::DIGEST_SIZE) != 0)
- return -1 - i;
- }
-
- return 0;
-}
-
-#endif // WORD64_AVAILABLE
-
-
-int sha224_test()
-{
- SHA224 sha;
- byte hash[SHA224::DIGEST_SIZE];
-
- testVector test_sha[] =
- {
- testVector("abc",
- "\x23\x09\x7d\x22\x34\x05\xd8\x22\x86\x42\xa4\x77\xbd\xa2\x55"
- "\xb3\x2a\xad\xbc\xe4\xbd\xa0\xb3\xf7\xe3\x6c\x9d\xa7"),
- testVector("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
- "\x75\x38\x8b\x16\x51\x27\x76\xcc\x5d\xba\x5d\xa1\xfd\x89\x01"
- "\x50\xb0\xc6\x45\x5c\xb4\xf5\x8b\x19\x52\x52\x25\x25")
- };
-
- int times( sizeof(test_sha) / sizeof(testVector) );
- for (int i = 0; i < times; ++i) {
- sha.Update(test_sha[i].input_, test_sha[i].inLen_);
- sha.Final(hash);
-
- if (memcmp(hash, test_sha[i].output_, SHA224::DIGEST_SIZE) != 0)
- return -1 - i;
- }
-
- return 0;
-}
-
-
-int md5_test()
-{
- MD5 md5;
- byte hash[MD5::DIGEST_SIZE];
-
- testVector test_md5[] =
- {
- testVector("abc",
- "\x90\x01\x50\x98\x3c\xd2\x4f\xb0\xd6\x96\x3f\x7d\x28\xe1\x7f"
- "\x72"),
- testVector("message digest",
- "\xf9\x6b\x69\x7d\x7c\xb7\x93\x8d\x52\x5a\x2f\x31\xaa\xf1\x61"
- "\xd0"),
- testVector("abcdefghijklmnopqrstuvwxyz",
- "\xc3\xfc\xd3\xd7\x61\x92\xe4\x00\x7d\xfb\x49\x6c\xca\x67\xe1"
- "\x3b"),
- testVector("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345"
- "6789",
- "\xd1\x74\xab\x98\xd2\x77\xd9\xf5\xa5\x61\x1c\x2c\x9f\x41\x9d"
- "\x9f"),
- testVector("1234567890123456789012345678901234567890123456789012345678"
- "9012345678901234567890",
- "\x57\xed\xf4\xa2\x2b\xe3\xc9\x55\xac\x49\xda\x2e\x21\x07\xb6"
- "\x7a")
- };
-
- int times( sizeof(test_md5) / sizeof(testVector) );
- for (int i = 0; i < times; ++i) {
- md5.Update(test_md5[i].input_, test_md5[i].inLen_);
- md5.Final(hash);
-
- if (memcmp(hash, test_md5[i].output_, MD5::DIGEST_SIZE) != 0)
- return -5 - i;
- }
-
- return 0;
-}
-
-
-int md4_test()
-{
- MD4 md4;
- byte hash[MD4::DIGEST_SIZE];
-
- testVector test_md4[] =
- {
- testVector("",
- "\x31\xd6\xcf\xe0\xd1\x6a\xe9\x31\xb7\x3c\x59\xd7\xe0\xc0\x89"
- "\xc0"),
- testVector("a",
- "\xbd\xe5\x2c\xb3\x1d\xe3\x3e\x46\x24\x5e\x05\xfb\xdb\xd6\xfb"
- "\x24"),
- testVector("abc",
- "\xa4\x48\x01\x7a\xaf\x21\xd8\x52\x5f\xc1\x0a\xe8\x7a\xa6\x72"
- "\x9d"),
- testVector("message digest",
- "\xd9\x13\x0a\x81\x64\x54\x9f\xe8\x18\x87\x48\x06\xe1\xc7\x01"
- "\x4b"),
- testVector("abcdefghijklmnopqrstuvwxyz",
- "\xd7\x9e\x1c\x30\x8a\xa5\xbb\xcd\xee\xa8\xed\x63\xdf\x41\x2d"
- "\xa9"),
- testVector("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345"
- "6789",
- "\x04\x3f\x85\x82\xf2\x41\xdb\x35\x1c\xe6\x27\xe1\x53\xe7\xf0"
- "\xe4"),
- testVector("1234567890123456789012345678901234567890123456789012345678"
- "9012345678901234567890",
- "\xe3\x3b\x4d\xdc\x9c\x38\xf2\x19\x9c\x3e\x7b\x16\x4f\xcc\x05"
- "\x36")
- };
-
- int times( sizeof(test_md4) / sizeof(testVector) );
- for (int i = 0; i < times; ++i) {
- md4.Update(test_md4[i].input_, test_md4[i].inLen_);
- md4.Final(hash);
-
- if (memcmp(hash, test_md4[i].output_, MD4::DIGEST_SIZE) != 0)
- return -5 - i;
- }
-
- return 0;
-}
-
-
-int md2_test()
-{
- MD2 md5;
- byte hash[MD2::DIGEST_SIZE];
-
- testVector test_md2[] =
- {
- testVector("",
- "\x83\x50\xe5\xa3\xe2\x4c\x15\x3d\xf2\x27\x5c\x9f\x80\x69"
- "\x27\x73"),
- testVector("a",
- "\x32\xec\x01\xec\x4a\x6d\xac\x72\xc0\xab\x96\xfb\x34\xc0"
- "\xb5\xd1"),
- testVector("abc",
- "\xda\x85\x3b\x0d\x3f\x88\xd9\x9b\x30\x28\x3a\x69\xe6\xde"
- "\xd6\xbb"),
- testVector("message digest",
- "\xab\x4f\x49\x6b\xfb\x2a\x53\x0b\x21\x9f\xf3\x30\x31\xfe"
- "\x06\xb0"),
- testVector("abcdefghijklmnopqrstuvwxyz",
- "\x4e\x8d\xdf\xf3\x65\x02\x92\xab\x5a\x41\x08\xc3\xaa\x47"
- "\x94\x0b"),
- testVector("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
- "0123456789",
- "\xda\x33\xde\xf2\xa4\x2d\xf1\x39\x75\x35\x28\x46\xc3\x03"
- "\x38\xcd"),
- testVector("12345678901234567890123456789012345678901234567890123456"
- "789012345678901234567890",
- "\xd5\x97\x6f\x79\xd8\x3d\x3a\x0d\xc9\x80\x6c\x3c\x66\xf3"
- "\xef\xd8")
- };
-
- int times( sizeof(test_md2) / sizeof(testVector) );
- for (int i = 0; i < times; ++i) {
- md5.Update(test_md2[i].input_, test_md2[i].inLen_);
- md5.Final(hash);
-
- if (memcmp(hash, test_md2[i].output_, MD2::DIGEST_SIZE) != 0)
- return -10 - i;
- }
-
- return 0;
-}
-
-
-int ripemd_test()
-{
- RIPEMD160 ripe160;
- byte hash[RIPEMD160::DIGEST_SIZE];
-
- testVector test_ripemd[] =
- {
- testVector("",
- "\x9c\x11\x85\xa5\xc5\xe9\xfc\x54\x61\x28\x08\x97\x7e\xe8"
- "\xf5\x48\xb2\x25\x8d\x31"),
- testVector("a",
- "\x0b\xdc\x9d\x2d\x25\x6b\x3e\xe9\xda\xae\x34\x7b\xe6\xf4"
- "\xdc\x83\x5a\x46\x7f\xfe"),
- testVector("abc",
- "\x8e\xb2\x08\xf7\xe0\x5d\x98\x7a\x9b\x04\x4a\x8e\x98\xc6"
- "\xb0\x87\xf1\x5a\x0b\xfc"),
- testVector("message digest",
- "\x5d\x06\x89\xef\x49\xd2\xfa\xe5\x72\xb8\x81\xb1\x23\xa8"
- "\x5f\xfa\x21\x59\x5f\x36"),
- testVector("abcdefghijklmnopqrstuvwxyz",
- "\xf7\x1c\x27\x10\x9c\x69\x2c\x1b\x56\xbb\xdc\xeb\x5b\x9d"
- "\x28\x65\xb3\x70\x8d\xbc"),
- testVector("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
- "\x12\xa0\x53\x38\x4a\x9c\x0c\x88\xe4\x05\xa0\x6c\x27\xdc"
- "\xf4\x9a\xda\x62\xeb\x2b"),
- testVector("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123"
- "456789",
- "\xb0\xe2\x0b\x6e\x31\x16\x64\x02\x86\xed\x3a\x87\xa5\x71"
- "\x30\x79\xb2\x1f\x51\x89"),
- testVector("12345678901234567890123456789012345678901234567890123456"
- "789012345678901234567890",
- "\x9b\x75\x2e\x45\x57\x3d\x4b\x39\xf4\xdb\xd3\x32\x3c\xab"
- "\x82\xbf\x63\x32\x6b\xfb"),
- };
-
- int times( sizeof(test_ripemd) / sizeof(testVector) );
- for (int i = 0; i < times; ++i) {
- ripe160.Update(test_ripemd[i].input_, test_ripemd[i].inLen_);
- ripe160.Final(hash);
-
- if (memcmp(hash, test_ripemd[i].output_, RIPEMD160::DIGEST_SIZE) != 0)
- return -100 - i;
- }
-
- return 0;
-}
-
-
-int hmac_test()
-{
- HMAC<MD5> hmacMD5;
- byte hash[MD5::DIGEST_SIZE];
-
- const char* keys[]=
- {
- "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
- "Jefe",
- "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
- };
-
- testVector test_hmacMD5[] =
- {
- testVector("Hi There",
- "\x92\x94\x72\x7a\x36\x38\xbb\x1c\x13\xf4\x8e\xf8\x15\x8b\xfc"
- "\x9d"),
- testVector("what do ya want for nothing?",
- "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03\xea\xa8\x6e\x31\x0a\x5d\xb7"
- "\x38"),
- testVector("\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
- "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
- "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
- "\xDD\xDD\xDD\xDD\xDD\xDD",
- "\x56\xbe\x34\x52\x1d\x14\x4c\x88\xdb\xb8\xc7\x33\xf0\xe8\xb3"
- "\xf6")
- };
-
- int times( sizeof(test_hmacMD5) / sizeof(testVector) );
- for (int i = 0; i < times; ++i) {
- hmacMD5.SetKey((byte*)keys[i], (word32)strlen(keys[i]));
- hmacMD5.Update(test_hmacMD5[i].input_, test_hmacMD5[i].inLen_);
- hmacMD5.Final(hash);
-
- if (memcmp(hash, test_hmacMD5[i].output_, MD5::DIGEST_SIZE) != 0)
- return -20 - i;
- }
-
- return 0;
-}
-
-
-int arc4_test()
-{
- byte cipher[16];
- byte plain[16];
-
- const char* keys[] =
- {
- "\x01\x23\x45\x67\x89\xab\xcd\xef",
- "\x01\x23\x45\x67\x89\xab\xcd\xef",
- "\x00\x00\x00\x00\x00\x00\x00\x00",
- "\xef\x01\x23\x45"
- };
-
- testVector test_arc4[] =
- {
- testVector("\x01\x23\x45\x67\x89\xab\xcd\xef",
- "\x75\xb7\x87\x80\x99\xe0\xc5\x96"),
- testVector("\x00\x00\x00\x00\x00\x00\x00\x00",
- "\x74\x94\xc2\xe7\x10\x4b\x08\x79"),
- testVector("\x00\x00\x00\x00\x00\x00\x00\x00",
- "\xde\x18\x89\x41\xa3\x37\x5d\x3a"),
- testVector("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
- "\xd6\xa1\x41\xa7\xec\x3c\x38\xdf\xbd\x61")
- };
-
-
- int times( sizeof(test_arc4) / sizeof(testVector) );
- for (int i = 0; i < times; ++i) {
- ARC4::Encryption enc;
- ARC4::Decryption dec;
-
- enc.SetKey((byte*)keys[i], (word32)strlen(keys[i]));
- dec.SetKey((byte*)keys[i], (word32)strlen(keys[i]));
-
- enc.Process(cipher, test_arc4[i].input_, test_arc4[i].outLen_);
- dec.Process(plain, cipher, test_arc4[i].outLen_);
-
- if (memcmp(plain, test_arc4[i].input_, test_arc4[i].outLen_))
- return -30 - i;
-
- if (memcmp(cipher, test_arc4[i].output_, test_arc4[i].outLen_))
- return -40 - i;
- }
-
- return 0;
-}
-
-
-int rabbit_test()
-{
- byte cipher[16];
- byte plain[16];
-
- const char* keys[] =
- {
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
- "\xAC\xC3\x51\xDC\xF1\x62\xFC\x3B\xFE\x36\x3D\x2E\x29\x13\x28\x91"
- };
-
- const char* ivs[] =
- {
- "\x00\x00\x00\x00\x00\x00\x00\x00",
- "\x59\x7E\x26\xC1\x75\xF5\x73\xC3",
- 0
- };
-
-
- testVector test_rabbit[] =
- {
- testVector("\x00\x00\x00\x00\x00\x00\x00\x00",
- "\xED\xB7\x05\x67\x37\x5D\xCD\x7C"),
- testVector("\x00\x00\x00\x00\x00\x00\x00\x00",
- "\x6D\x7D\x01\x22\x92\xCC\xDC\xE0"),
- testVector("\x00\x00\x00\x00\x00\x00\x00\x00",
- "\x9C\x51\xE2\x87\x84\xC3\x7F\xE9")
- };
-
-
- int times( sizeof(test_rabbit) / sizeof(testVector) );
- for (int i = 0; i < times; ++i) {
- Rabbit::Encryption enc;
- Rabbit::Decryption dec;
-
- enc.SetKey((byte*)keys[i], (byte*)ivs[i]);
- dec.SetKey((byte*)keys[i], (byte*)ivs[i]);
-
- enc.Process(cipher, test_rabbit[i].input_, test_rabbit[i].outLen_);
- dec.Process(plain, cipher, test_rabbit[i].outLen_);
-
- if (memcmp(plain, test_rabbit[i].input_, test_rabbit[i].outLen_))
- return -230 - i;
-
- if (memcmp(cipher, test_rabbit[i].output_, test_rabbit[i].outLen_))
- return -240 - i;
- }
-
- return 0;
-}
-
-
-int hc128_test()
-{
- byte cipher[16];
- byte plain[16];
-
- const char* keys[] =
- {
- "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
- "\x00\x53\xA6\xF9\x4C\x9F\xF2\x45\x98\xEB\x3E\x91\xE4\x37\x8A\xDD",
- "\x0F\x62\xB5\x08\x5B\xAE\x01\x54\xA7\xFA\x4D\xA0\xF3\x46\x99\xEC"
- };
-
- const char* ivs[] =
- {
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
- "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
- "\x0D\x74\xDB\x42\xA9\x10\x77\xDE\x45\xAC\x13\x7A\xE1\x48\xAF\x16",
- "\x28\x8F\xF6\x5D\xC4\x2B\x92\xF9\x60\xC7\x2E\x95\xFC\x63\xCA\x31"
- };
-
- testVector test_hc128[] =
- {
- testVector("\x00\x00\x00\x00\x00\x00\x00\x00",
- "\x37\x86\x02\xB9\x8F\x32\xA7\x48"),
- testVector("\x00\x00\x00\x00\x00\x00\x00\x00",
- "\x33\x7F\x86\x11\xC6\xED\x61\x5F"),
- testVector("\x00\x00\x00\x00\x00\x00\x00\x00",
- "\x2E\x1E\xD1\x2A\x85\x51\xC0\x5A"),
- testVector("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
- "\x1C\xD8\xAE\xDD\xFE\x52\xE2\x17\xE8\x35\xD0\xB7\xE8\x4E\x29")
- };
-
- int times( sizeof(test_hc128) / sizeof(testVector) );
- for (int i = 0; i < times; ++i) {
- HC128::Encryption enc;
- HC128::Decryption dec;
-
- enc.SetKey((byte*)keys[i], (byte*)ivs[i]);
- dec.SetKey((byte*)keys[i], (byte*)ivs[i]);
-
- enc.Process(cipher, test_hc128[i].input_, test_hc128[i].outLen_);
- dec.Process(plain, cipher, test_hc128[i].outLen_);
-
- if (memcmp(plain, test_hc128[i].input_, test_hc128[i].outLen_))
- return -330 - i;
-
- if (memcmp(cipher, test_hc128[i].output_, test_hc128[i].outLen_))
- return -340 - i;
- }
-
- return 0;
-}
-
-
-int des_test()
-{
- //ECB mode
- DES_ECB_Encryption enc;
- DES_ECB_Decryption dec;
-
- const int sz = TaoCrypt::DES_BLOCK_SIZE * 3;
- const byte key[] = { 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef };
- const byte iv[] = { 0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef };
-
- enc.SetKey(key, sizeof(key));
- enc.Process(cipher, msg, sz);
- dec.SetKey(key, sizeof(key));
- dec.Process(plain, cipher, sz);
-
- if (memcmp(plain, msg, sz))
- return -50;
-
- const byte verify1[] =
- {
- 0xf9,0x99,0xb8,0x8e,0xaf,0xea,0x71,0x53,
- 0x6a,0x27,0x17,0x87,0xab,0x88,0x83,0xf9,
- 0x89,0x3d,0x51,0xec,0x4b,0x56,0x3b,0x53
- };
-
- if (memcmp(cipher, verify1, sz))
- return -51;
-
- // CBC mode
- DES_CBC_Encryption enc2;
- DES_CBC_Decryption dec2;
-
- enc2.SetKey(key, sizeof(key), iv);
- enc2.Process(cipher, msg, sz);
- dec2.SetKey(key, sizeof(key), iv);
- dec2.Process(plain, cipher, sz);
-
- if (memcmp(plain, msg, sz))
- return -52;
-
- const byte verify2[] =
- {
- 0x8b,0x7c,0x52,0xb0,0x01,0x2b,0x6c,0xb8,
- 0x4f,0x0f,0xeb,0xf3,0xfb,0x5f,0x86,0x73,
- 0x15,0x85,0xb3,0x22,0x4b,0x86,0x2b,0x4b
- };
-
- if (memcmp(cipher, verify2, sz))
- return -53;
-
- // EDE3 CBC mode
- DES_EDE3_CBC_Encryption enc3;
- DES_EDE3_CBC_Decryption dec3;
-
- const byte key3[] =
- {
- 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
- 0xfe,0xde,0xba,0x98,0x76,0x54,0x32,0x10,
- 0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67
- };
- const byte iv3[] =
- {
- 0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
- 0x11,0x21,0x31,0x41,0x51,0x61,0x71,0x81
-
- };
-
- enc3.SetKey(key3, sizeof(key3), iv3);
- enc3.Process(cipher, msg, sz);
- dec3.SetKey(key3, sizeof(key3), iv3);
- dec3.Process(plain, cipher, sz);
-
- if (memcmp(plain, msg, sz))
- return -54;
-
- const byte verify3[] =
- {
- 0x08,0x8a,0xae,0xe6,0x9a,0xa9,0xc1,0x13,
- 0x93,0x7d,0xf7,0x3a,0x11,0x56,0x66,0xb3,
- 0x18,0xbc,0xbb,0x6d,0xd2,0xb1,0x16,0xda
- };
-
- if (memcmp(cipher, verify3, sz))
- return -55;
-
- return 0;
-}
-
-
-int aes_test()
-{
- AES_CBC_Encryption enc;
- AES_CBC_Decryption dec;
- const int bs(TaoCrypt::AES::BLOCK_SIZE);
-
- byte key[] = "0123456789abcdef "; // align
- byte iv[] = "1234567890abcdef "; // align
-
- enc.SetKey(key, bs, iv);
- dec.SetKey(key, bs, iv);
-
- enc.Process(cipher, msg, bs);
- dec.Process(plain, cipher, bs);
-
- if (memcmp(plain, msg, bs))
- return -60;
-
- const byte verify[] =
- {
- 0x95,0x94,0x92,0x57,0x5f,0x42,0x81,0x53,
- 0x2c,0xcc,0x9d,0x46,0x77,0xa2,0x33,0xcb
- };
-
- if (memcmp(cipher, verify, bs))
- return -61;
-
- AES_ECB_Encryption enc2;
- AES_ECB_Decryption dec2;
-
- enc2.SetKey(key, bs, iv);
- dec2.SetKey(key, bs, iv);
-
- enc2.Process(cipher, msg, bs);
- dec2.Process(plain, cipher, bs);
-
- if (memcmp(plain, msg, bs))
- return -62;
-
- const byte verify2[] =
- {
- 0xd0,0xc9,0xd9,0xc9,0x40,0xe8,0x97,0xb6,
- 0xc8,0x8c,0x33,0x3b,0xb5,0x8f,0x85,0xd1
- };
-
- if (memcmp(cipher, verify2, bs))
- return -63;
-
- return 0;
-}
-
-
-int twofish_test()
-{
- Twofish_CBC_Encryption enc;
- Twofish_CBC_Decryption dec;
- const int bs(TaoCrypt::Twofish::BLOCK_SIZE);
-
- byte key[] = "0123456789abcdef "; // align
- byte iv[] = "1234567890abcdef "; // align
-
- enc.SetKey(key, bs, iv);
- dec.SetKey(key, bs, iv);
-
- enc.Process(cipher, msg, bs);
- dec.Process(plain, cipher, bs);
-
- if (memcmp(plain, msg, bs))
- return -60;
-
- const byte verify[] =
- {
- 0xD2,0xD7,0x47,0x47,0x4A,0x65,0x4E,0x16,
- 0x21,0x03,0x58,0x79,0x5F,0x02,0x27,0x2C
- };
-
- if (memcmp(cipher, verify, bs))
- return -61;
-
- Twofish_ECB_Encryption enc2;
- Twofish_ECB_Decryption dec2;
-
- enc2.SetKey(key, bs, iv);
- dec2.SetKey(key, bs, iv);
-
- enc2.Process(cipher, msg, bs);
- dec2.Process(plain, cipher, bs);
-
- if (memcmp(plain, msg, bs))
- return -62;
-
- const byte verify2[] =
- {
- 0x3B,0x6C,0x63,0x10,0x34,0xAB,0xB2,0x87,
- 0xC4,0xCD,0x6B,0x91,0x14,0xC5,0x3A,0x09
- };
-
- if (memcmp(cipher, verify2, bs))
- return -63;
-
- return 0;
-}
-
-
-int blowfish_test()
-{
- Blowfish_CBC_Encryption enc;
- Blowfish_CBC_Decryption dec;
- const int bs(TaoCrypt::Blowfish::BLOCK_SIZE);
-
- byte key[] = "0123456789abcdef "; // align
- byte iv[] = "1234567890abcdef "; // align
-
- enc.SetKey(key, 16, iv);
- dec.SetKey(key, 16, iv);
-
- enc.Process(cipher, msg, bs * 2);
- dec.Process(plain, cipher, bs * 2);
-
- if (memcmp(plain, msg, bs))
- return -60;
-
- const byte verify[] =
- {
- 0x0E,0x26,0xAA,0x29,0x11,0x25,0xAB,0xB5,
- 0xBC,0xD9,0x08,0xC4,0x94,0x6C,0x89,0xA3
- };
-
- if (memcmp(cipher, verify, bs))
- return -61;
-
- Blowfish_ECB_Encryption enc2;
- Blowfish_ECB_Decryption dec2;
-
- enc2.SetKey(key, 16, iv);
- dec2.SetKey(key, 16, iv);
-
- enc2.Process(cipher, msg, bs * 2);
- dec2.Process(plain, cipher, bs * 2);
-
- if (memcmp(plain, msg, bs))
- return -62;
-
- const byte verify2[] =
- {
- 0xE7,0x42,0xB9,0x37,0xC8,0x7D,0x93,0xCA,
- 0x8F,0xCE,0x39,0x32,0xDE,0xD7,0xBC,0x5B
- };
-
- if (memcmp(cipher, verify2, bs))
- return -63;
-
- return 0;
-}
-
-
-int rsa_test()
-{
- Source source;
- FileSource("../certs/client-key.der", source);
- if (source.size() == 0) {
- FileSource("../../certs/client-key.der", source); // for testsuite
- if (source.size() == 0) {
- FileSource("../../../certs/client-key.der", source); // Debug dir
- if (source.size() == 0)
- err_sys("where's your certs dir?", -79);
- }
- }
- RSA_PrivateKey priv(source);
-
- RSAES_Encryptor enc(priv);
- byte message[] = "Everyone gets Friday off.";
- const word32 len = (word32)strlen((char*)message);
- byte cipher[512];
- enc.Encrypt(message, len, cipher, rng);
-
- RSAES_Decryptor dec(priv);
- byte plain[512];
- dec.Decrypt(cipher, priv.FixedCiphertextLength(), plain, rng);
-
- if (memcmp(plain, message, len))
- return -70;
-
- dec.SSL_Sign(message, len, cipher, rng);
- if (!enc.SSL_Verify(message, len, cipher))
- return -71;
-
-
- // test decode
- Source source2;
- FileSource("../certs/client-cert.der", source2);
- if (source2.size() == 0) {
- FileSource("../../certs/client-cert.der", source2); // for testsuite
- if (source2.size() == 0) {
- FileSource("../../../certs/client-cert.der", source2); // Debug dir
- if (source2.size() == 0)
- err_sys("where's your certs dir?", -79);
- }
- }
- CertDecoder cd(source2, true, 0, false, CertDecoder::CA);
- if (cd.GetError().What())
- err_sys("cert error", -80);
- Source source3(cd.GetPublicKey().GetKey(), cd.GetPublicKey().size());
- RSA_PublicKey pub(source3);
-
- return 0;
-}
-
-
-int dh_test()
-{
- Source source;
- FileSource("../certs/dh1024.dat", source);
- if (source.size() == 0) {
- FileSource("../../certs/dh1024.dat", source); // for testsuite
- if (source.size() == 0) {
- FileSource("../../../certs/dh1024.dat", source); // win32 Debug dir
- if (source.size() == 0)
- err_sys("where's your certs dir?", -79);
- }
- }
- HexDecoder hDec(source);
-
- DH dh(source);
-
- byte pub[128];
- byte priv[128];
- byte agree[128];
- byte pub2[128];
- byte priv2[128];
- byte agree2[128];
-
- DH dh2(dh);
-
- dh.GenerateKeyPair(rng, priv, pub);
- dh2.GenerateKeyPair(rng, priv2, pub2);
- dh.Agree(agree, priv, pub2);
- dh2.Agree(agree2, priv2, pub);
-
-
- if ( memcmp(agree, agree2, dh.GetByteLength()) )
- return -80;
-
- return 0;
-}
-
-
-int dsa_test()
-{
- Source source;
- FileSource("../certs/dsa1024.der", source);
- if (source.size() == 0) {
- FileSource("../../certs/dsa1024.der", source); // for testsuite
- if (source.size() == 0) {
- FileSource("../../../certs/dsa1024.der", source); // win32 Debug dir
- if (source.size() == 0)
- err_sys("where's your certs dir?", -89);
- }
- }
-
- const char msg[] = "this is the message";
- byte signature[40];
-
- DSA_PrivateKey priv(source);
- DSA_Signer signer(priv);
-
- SHA sha;
- byte digest[SHA::DIGEST_SIZE];
- sha.Update((byte*)msg, sizeof(msg));
- sha.Final(digest);
-
- signer.Sign(digest, signature, rng);
-
- byte encoded[sizeof(signature) + 6];
- byte decoded[40];
-
- word32 encSz = EncodeDSA_Signature(signer.GetR(), signer.GetS(), encoded);
- DecodeDSA_Signature(decoded, encoded, encSz);
-
- DSA_PublicKey pub(priv);
- DSA_Verifier verifier(pub);
-
- if (!verifier.Verify(digest, decoded))
- return -90;
-
- if (!verifier.Verify(digest, signature))
- return -91;
-
- return 0;
-}
-
-
-int pwdbased_test()
-{
- PBKDF2_HMAC<SHA> pb;
-
- byte derived[32];
- const byte pwd1[] = "password "; // align
- const byte salt[] = { 0x12, 0x34, 0x56, 0x78, 0x78, 0x56, 0x34, 0x12 };
-
- pb.DeriveKey(derived, 8, pwd1, 8, salt, sizeof(salt), 5);
-
- const byte verify1[] = { 0xD1, 0xDA, 0xA7, 0x86, 0x15, 0xF2, 0x87, 0xE6 };
-
- if ( memcmp(derived, verify1, sizeof(verify1)) )
- return -101;
-
-
- const byte pwd2[] = "All n-entities must communicate with other n-entities"
- " via n-1 entiteeheehees "; // align
-
- pb.DeriveKey(derived, 24, pwd2, 76, salt, sizeof(salt), 500);
-
- const byte verify2[] = { 0x6A, 0x89, 0x70, 0xBF, 0x68, 0xC9, 0x2C, 0xAE,
- 0xA8, 0x4A, 0x8D, 0xF2, 0x85, 0x10, 0x85, 0x86,
- 0x07, 0x12, 0x63, 0x80, 0xCC, 0x47, 0xAB, 0x2D
- };
-
- if ( memcmp(derived, verify2, sizeof(verify2)) )
- return -102;
-
- return 0;
-}
-
-
-/*
-int pkcs12_test()
-{
- Source cert;
- FileSource("../certs/server-cert.pem", cert);
- if (cert.size() == 0) {
- FileSource("../../certs/server-cert.pem", cert); // for testsuite
- if (cert.size() == 0) {
- FileSource("../../../certs/server-cert.pem", cert); // Debug dir
- if (cert.size() == 0)
- err_sys("where's your certs dir?", -109);
- }
- }
-
- if (GetCert(cert) != 0)
- return -110;
-
- Source source;
- FileSource("../certs/server.p12", source);
- if (source.size() == 0) {
- FileSource("../../certs/server.p12", source); // for testsuite
- if (source.size() == 0) {
- FileSource("../../../certs/server.p12", source); // Debug dir
- if (source.size() == 0)
- err_sys("where's your certs dir?", -111);
- }
- }
-
- if (GetPKCS_Cert("password", source) != 0)
- return -112;
-
- return 0;
-}
-*/
-