mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +01:00
Import from upstream yaSSL
extra/yassl/src/template_instnt.cpp: Import patch yassl.diff extra/yassl/taocrypt/include/misc.hpp: Import patch yassl.diff extra/yassl/taocrypt/src/template_instnt.cpp: Import patch yassl.diff extra/yassl/taocrypt/test/test.cpp: Import patch yassl.diff
This commit is contained in:
parent
eb196d0604
commit
8b37d8f6bf
4 changed files with 55 additions and 58 deletions
|
@ -87,6 +87,8 @@ template void ysDelete<BulkCipher>(BulkCipher*);
|
|||
template void ysDelete<Digest>(Digest*);
|
||||
template void ysDelete<X509>(X509*);
|
||||
template void ysDelete<Message>(Message*);
|
||||
template void ysDelete<sslFactory>(sslFactory*);
|
||||
template void ysDelete<Sessions>(Sessions*);
|
||||
template void ysArrayDelete<unsigned char>(unsigned char*);
|
||||
template void ysArrayDelete<char>(char*);
|
||||
}
|
||||
|
|
|
@ -81,7 +81,7 @@ void CleanUp();
|
|||
::operator delete[](ptr, TaoCrypt::tc);
|
||||
}
|
||||
|
||||
#define NEW_TC new (tc)
|
||||
#define NEW_TC new (TaoCrypt::tc)
|
||||
|
||||
|
||||
// to resolve compiler generated operator delete on base classes with
|
||||
|
|
|
@ -46,6 +46,7 @@ template class RSA_Decryptor<RSA_BlockType2>;
|
|||
template class RSA_Encryptor<RSA_BlockType1>;
|
||||
template class RSA_Encryptor<RSA_BlockType2>;
|
||||
template void tcDelete<HASH>(HASH*);
|
||||
template void tcDelete<Integer>(Integer*);
|
||||
template void tcArrayDelete<byte>(byte*);
|
||||
template AllocatorWithCleanup<byte>::pointer StdReallocate<byte, AllocatorWithCleanup<byte> >(AllocatorWithCleanup<byte>&, byte*, AllocatorWithCleanup<byte>::size_type, AllocatorWithCleanup<byte>::size_type, bool);
|
||||
template void tcArrayDelete<word>(word*);
|
||||
|
|
|
@ -71,6 +71,7 @@ using TaoCrypt::DH;
|
|||
using TaoCrypt::EncodeDSA_Signature;
|
||||
using TaoCrypt::DecodeDSA_Signature;
|
||||
using TaoCrypt::PBKDF2_HMAC;
|
||||
using TaoCrypt::tcArrayDelete;
|
||||
|
||||
|
||||
|
||||
|
@ -117,10 +118,36 @@ struct func_args {
|
|||
};
|
||||
|
||||
|
||||
/*
|
||||
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()) )
|
||||
|
@ -193,6 +220,9 @@ void taocrypt_test(void* args)
|
|||
else
|
||||
printf( "PBKDF2 test passed!\n");
|
||||
|
||||
tcArrayDelete(cipher);
|
||||
tcArrayDelete(plain);
|
||||
tcArrayDelete(msg);
|
||||
|
||||
((func_args*)args)->return_code = ret;
|
||||
}
|
||||
|
@ -507,35 +537,26 @@ int des_test()
|
|||
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 };
|
||||
|
||||
const byte vector[] = { // "Now is the time for all " w/o trailing 0
|
||||
0x4e,0x6f,0x77,0x20,0x69,0x73,0x20,0x74,
|
||||
0x68,0x65,0x20,0x74,0x69,0x6d,0x65,0x20,
|
||||
0x66,0x6f,0x72,0x20,0x61,0x6c,0x6c,0x20
|
||||
};
|
||||
|
||||
byte plain[24];
|
||||
byte cipher[24];
|
||||
|
||||
enc.SetKey(key, sizeof(key));
|
||||
enc.Process(cipher, vector, sizeof(vector));
|
||||
enc.Process(cipher, msg, sz);
|
||||
dec.SetKey(key, sizeof(key));
|
||||
dec.Process(plain, cipher, sizeof(cipher));
|
||||
dec.Process(plain, cipher, sz);
|
||||
|
||||
if (memcmp(plain, vector, sizeof(plain)))
|
||||
if (memcmp(plain, msg, sz))
|
||||
return -50;
|
||||
|
||||
const byte verify1[] =
|
||||
{
|
||||
0x3f,0xa4,0x0e,0x8a,0x98,0x4d,0x48,0x15,
|
||||
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, sizeof(cipher)))
|
||||
if (memcmp(cipher, verify1, sz))
|
||||
return -51;
|
||||
|
||||
// CBC mode
|
||||
|
@ -543,21 +564,21 @@ int des_test()
|
|||
DES_CBC_Decryption dec2;
|
||||
|
||||
enc2.SetKey(key, sizeof(key), iv);
|
||||
enc2.Process(cipher, vector, sizeof(vector));
|
||||
enc2.Process(cipher, msg, sz);
|
||||
dec2.SetKey(key, sizeof(key), iv);
|
||||
dec2.Process(plain, cipher, sizeof(cipher));
|
||||
dec2.Process(plain, cipher, sz);
|
||||
|
||||
if (memcmp(plain, vector, sizeof(plain)))
|
||||
if (memcmp(plain, msg, sz))
|
||||
return -52;
|
||||
|
||||
const byte verify2[] =
|
||||
{
|
||||
0xe5,0xc7,0xcd,0xde,0x87,0x2b,0xf2,0x7c,
|
||||
0x43,0xe9,0x34,0x00,0x8c,0x38,0x9c,0x0f,
|
||||
0x68,0x37,0x88,0x49,0x9a,0x7c,0x05,0xf6
|
||||
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, sizeof(cipher)))
|
||||
if (memcmp(cipher, verify2, sz))
|
||||
return -53;
|
||||
|
||||
// EDE3 CBC mode
|
||||
|
@ -579,21 +600,21 @@ int des_test()
|
|||
};
|
||||
|
||||
enc3.SetKey(key3, sizeof(key3), iv3);
|
||||
enc3.Process(cipher, vector, sizeof(vector));
|
||||
enc3.Process(cipher, msg, sz);
|
||||
dec3.SetKey(key3, sizeof(key3), iv3);
|
||||
dec3.Process(plain, cipher, sizeof(cipher));
|
||||
dec3.Process(plain, cipher, sz);
|
||||
|
||||
if (memcmp(plain, vector, sizeof(plain)))
|
||||
if (memcmp(plain, msg, sz))
|
||||
return -54;
|
||||
|
||||
const byte verify3[] =
|
||||
{
|
||||
0x43,0xa0,0x29,0x7e,0xd1,0x84,0xf8,0x0e,
|
||||
0x89,0x64,0x84,0x32,0x12,0xd5,0x08,0x98,
|
||||
0x18,0x94,0x15,0x74,0x87,0x12,0x7d,0xb0
|
||||
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, sizeof(cipher)))
|
||||
if (memcmp(cipher, verify3, sz))
|
||||
return -55;
|
||||
|
||||
return 0;
|
||||
|
@ -606,18 +627,9 @@ int aes_test()
|
|||
AES_CBC_Decryption dec;
|
||||
const int bs(TaoCrypt::AES::BLOCK_SIZE);
|
||||
|
||||
const byte msg[] = { // "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 key[] = "0123456789abcdef "; // align
|
||||
byte iv[] = "1234567890abcdef "; // align
|
||||
|
||||
byte cipher[bs];
|
||||
byte plain [bs];
|
||||
|
||||
enc.SetKey(key, bs, iv);
|
||||
dec.SetKey(key, bs, iv);
|
||||
|
||||
|
@ -667,18 +679,9 @@ int twofish_test()
|
|||
Twofish_CBC_Decryption dec;
|
||||
const int bs(TaoCrypt::Twofish::BLOCK_SIZE);
|
||||
|
||||
const byte msg[] = { // "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 key[] = "0123456789abcdef "; // align
|
||||
byte iv[] = "1234567890abcdef "; // align
|
||||
|
||||
byte cipher[bs];
|
||||
byte plain [bs];
|
||||
|
||||
enc.SetKey(key, bs, iv);
|
||||
dec.SetKey(key, bs, iv);
|
||||
|
||||
|
@ -728,18 +731,9 @@ int blowfish_test()
|
|||
Blowfish_CBC_Decryption dec;
|
||||
const int bs(TaoCrypt::Blowfish::BLOCK_SIZE);
|
||||
|
||||
const byte msg[] = { // "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 key[] = "0123456789abcdef "; // align
|
||||
byte iv[] = "1234567890abcdef "; // align
|
||||
|
||||
byte cipher[bs * 2];
|
||||
byte plain [bs * 2];
|
||||
|
||||
enc.SetKey(key, 16, iv);
|
||||
dec.SetKey(key, 16, iv);
|
||||
|
||||
|
@ -805,7 +799,7 @@ int rsa_test()
|
|||
|
||||
RSAES_Decryptor dec(priv);
|
||||
byte plain[64];
|
||||
dec.Decrypt(cipher, sizeof(cipher), plain, rng);
|
||||
dec.Decrypt(cipher, sizeof(plain), plain, rng);
|
||||
|
||||
if (memcmp(plain, message, len))
|
||||
return -70;
|
||||
|
|
Loading…
Reference in a new issue