Beispiel #1
0
static const struct ccdigest_info *sslCipherSuiteGetDigestInfo(uint16_t selectedCipher)
{
    HMAC_Algs alg = sslCipherSuiteGetMacAlgorithm(selectedCipher);

    switch (alg) {
        case HA_Null:
            return &null_di;
        case HA_MD5:
            return ccmd5_di();
        case HA_SHA1:
            return ccsha1_di();
        case HA_SHA256:
            return ccsha256_di();
        case HA_SHA384:
            return ccsha384_di();
        default:
            sslErrorLog("Invalid hashAlgorithm %d", alg);
            check(0);
            return NULL;
    }
}
Beispiel #2
0
static int HMAC_POST()
{
	int result = -1;	
    
	typedef struct
	{
		const struct ccdigest_info*  digest_info;
		size_t			key_size;
		unsigned char*	key_buffer;
		size_t			msg_size;
		unsigned char*	msg_buffer;
		size_t			digest_size;
		unsigned char*	digest_buffer;
	} hmac_test;
	
	
	// HMAC-SHA1 Test Data
#ifdef FORCE_FAIL
	unsigned char* hmacSha1KeyBuffer = (unsigned char*)"\x0f\x00\x00\x81\x31\x2a\x16\xfa\xc6\xa8\x1e\x98\x05\xe1\xd7\x84\x44\x5b\xff\x8c\xe6\x84\x99\xbe\x95\xeb\x4a\x36\xcb\xb0\x03\x34\x97\x3a\xe0\x72\x9e\x27\x50\xb4\x60\x89\x77\xa0\xbc\x4f\xd0\xd0\xb6\x01";
#else
	unsigned char* hmacSha1KeyBuffer = (unsigned char*)"\xee\xd8\x1b\x81\x31\x2a\x16\xfa\xc6\xa8\x1e\x98\x05\xe1\xd7\x84\x44\x5b\xff\x8c\xe6\x84\x99\xbe\x95\xeb\x4a\x36\xcb\xb0\x03\x34\x97\x3a\xe0\x72\x9e\x27\x50\xb4\x60\x89\x77\xa0\xbc\x4f\xd0\xd0\xb6\x01";
#endif
	size_t hmacSha1KeyBufferLength = 50;
	unsigned char* sha1MsgBuffer = (unsigned char*)"\xf0\x6b\xb4\x5b\xd0\x60\x58\x27\x82\x4c\xd0\x4d\xa7\x5b\x68\x7a\x86\xc9\x39\xef\xaf\xf9\xf1\x32\xdd\xc1\xd7\x04\x21\x08\x09\x94\x3d\x94\x08\xf2\x4e\x1d\x77\xc6\xaf\xa6\x20\x42\x19\x0d\x38\x55\x0f\xe0\xe4\x22\x79\x72\xfc\xb0\x8f\x2e\x0e\xe3\xf8\x2c\xa6\xab\x33\x02\xcc\x7b\x37\xdd\xcf\xfd\x56\xd0\x41\x04\x67\x6b\x43\xc2\x24\x90\x03\x3b\xd1\x82\x82\xf9\x1f\x3f\x9b\x01\x4f\x10\x41\x07\x9a\x5e\x08\xde\xd1\xc7\xe6\x32\x41\x71\x3b\x79\xd9\x9e\x10\x27\x8f\x81\x9c\x21\xff\x51\x0d\x75\x55\x9b\x85\x48\x6e\xdc\x62\x10";
	size_t sha1MsgBufferLength = 128;
	unsigned char* sha1DigestBuffer = (unsigned char*)"\x88\x6e\xae\x70\xf3\x6b\xd3\x80\x5e\xeb\x12\x74\xb3\x24\x8f\xcc\xf5\xe1\x5b\x80";
	size_t sha1DigestBufferLength = 20;	
	
	// HMAC-SHA224 Test Data
	unsigned char*  hmacSha224KeyBuffer = (unsigned char*)"\x76\x67\xba\x7e\x64\xcc\x36\x44\xa6\x8e\xa0\x3e\x54\xef\x7b\xef\xb7\xa5\xf7\xdd\x0b\x8e\xcd\xe7\x83\xa0\x6b\xd9\x8e\x1f\x51\x3e\x59\x12\xbb\x76\x95\xf7\x80\x08\x7a\xb6\x3a\x39\x0c\xd4\xa7\xdd\x9d\xe9";
	size_t hmacSha224KeyBufferLength = 50;
	unsigned char*  sha224MsgBuffer = (unsigned char*)"\xd3\x9b\x1f\xae\xa3\x0e\x5f\x64\x5b\x94\xfe\x32\x2d\xab\x54\xa3\xc6\x59\x1d\x0d\x76\xc0\xc4\xc4\x91\xf3\xe1\x8d\x15\x08\x00\x55\x8c\x6e\xa4\x23\x34\x81\x8b\x4c\x5e\x5c\x34\xe6\x14\xee\x9f\x7e\xfe\x51\x54\x0e\x87\x56\xa6\x29\x3b\x65\x39\x79\x73\x84\xc2\x6b\x35\xb5\x0e\x29\x56\x85\x46\xc9\xe1\xe2\x71\xc3\xbd\x2d\x3a\xa9\x89\x90\xf3\x12\xcb\x92\xdb\xd8\x4a\xe8\x9c\x83\xb8\x8e\x18\x04\x94\x17\x65\xa7\x4f\x42\x16\x43\xae\xcd\xbd\xb3\x6f\x8e\xae\x8a\x2f\xbf\x05\x03\x8b\x9a\xea\x37\x86\x26\x13\x93\x2a\x50\x8b\x88";
	size_t sha224MsgBufferLength = 128;
	unsigned char* sha224DigestBuffer = (unsigned char*)"\xcb\xff\xc6\x5b\x24\x8c\x87\x8c\x85\xac\xf9\x4d\x1c\x0b\xfb\x1f\xe6\x8c\x22\x85\x76\x62\xac\x20\x2e\x9b\x47\xc1";
	size_t sha224DigestBufferLength = 28;
	
	// HMAC-SHA256 Test Data
	unsigned char*  hmacSha256KeyBuffer = (unsigned char*)"\xf3\xd9\x84\x1c\x78\x2e\x1d\xc8\x4d\x5f\xbd\x95\x23\x68\x3b\x8d\x29\xd1\xd5\x85\x2d\x3a\x74\x52\x04\x38\x32\x3a\x2d\x5f\x19\xa9\xb1\xa0\x2d\x25\x4d\xd6\xad\x84\xd3\x9b\x97\x5d\xce\x60\x6a\xbc\x65\xbd";
	size_t hmacSha256KeyBufferLength = 50;
	unsigned char*  sha256MsgBuffer = (unsigned char*)"\xce\xb6\xa4\x96\x7c\xc8\x60\xd3\xb8\x7a\x53\x1c\xb2\x4f\xc5\x31\x76\x35\xbf\x80\x11\x13\x5b\x50\xf6\xa1\x3d\x40\xa0\x7c\x62\xf0\x78\x7a\x19\xfe\xf8\x3a\x4e\x34\x11\x00\x0e\xff\xca\xc0\x48\x23\x2b\x79\xd1\xae\x59\xc5\xab\x2a\x02\xad\x87\x17\xfb\xc1\x88\x99\x28\x69\x4a\x6d\x9d\x76\x23\x21\x02\xfc\xa9\x85\x3c\x64\x74\x5d\x4a\xbd\x25\x58\x6c\x53\xa6\x46\x8b\x83\xb4\x85\xd5\xcd\x9b\xbc\xa8\x2b\x41\xcc\xb1\xa1\x66\x04\x55\x16\x2a\x95\x4f\x62\xd0\x45\x9b\xa8\xc1\x67\x93\xe6\xd4\x0a\x59\xca\xcc\x71\x74\xc8\x23\xc3";
	size_t sha256MsgBufferLength = 128;
	unsigned char*  sha256DigestBuffer = (unsigned char*)"\xc1\xcc\xf9\x1e\x8e\xa5\x8a\x16\x75\x6b\xe8\xe4\x08\xf3\x08\xc9\xe1\x02\xea\xe3\x54\x4f\xb6\x36\xdb\x18\x29\x34\x80\xae\xd1\xe1";
	size_t sha256DigestBufferLength = 32;
	
	// HMAC-SHA384 Test Data
	unsigned char*  hmacSha384KeyBuffer = (unsigned char*)"\xc6\xc9\xe0\x68\xd4\x39\x02\xee\xc3\x2b\x2f\x9f\x48\x0e\x69\x83\x1e\x47\xd2\x4b\x03\x26\xca\xe2\x03\x19\x58\x44\xf8\x20\xcb\x93\x52\x81\xa1\x68\x14\xbd\xa7\x67\x1f\xc2\x62\x16\xb3\x62\xae\xef\x33\x04\xa5\xb3\x28\x9a\xc2\x02\x89\xd3\x46\x29\x3a\x91\xdb\x3b\xd2\x9d\x78\x63\xa1\x9a\x84\x78\xf2\x37\x3e\xd2\x8d\xa9\x5c\x5c\x80\x59\xf2\xeb\x1f\xd9\x96\xce\x4a\x1d\xc2\xa7\xee\xe8\x7a\x79\xce\x84\x2e\x01\x84\xb6\xe1\x4a\xc2\xf1\x8b\x7c\xde\xca";
	size_t hmacSha384KeyBufferLength = 110;
	unsigned char* sha384MsgBuffer =  (unsigned char*)"\xd3\x69\xd5\x7c\x74\xb3\xac\x14\x97\xca\x2b\x8b\x92\xfb\x7a\x3d\xe0\x20\x17\x7e\x19\xc7\x6d\xda\x21\x90\xa9\xa1\xa0\xd7\xc9\xa4\xb3\x93\xf5\x39\xe2\x7e\x13\x85\x51\x77\x96\xfa\x3a\x24\x96\x1e\x9a\xdb\x26\x8e\x2b\xc3\xe2\x43\x93\x36\xc7\x15\xdb\x6a\x48\x7d\x22\x51\x9d\x9f\x93\xbd\x5f\x88\x94\xc8\x52\xb4\x40\x73\x82\xd3\x18\x8d\x91\xcc\xf5\xd7\x4f\x03\x42\x65\x8b\xd8\x67\x47\x29\x70\x88\x69\x75\xb7\x70\xb8\xb7\xa5\xc8\x86\x08\xc1\x8d\x30\x63\xe4\xc1\xfe\xff\x40\x60\x4a\xdc\xa0\x95\xe5\x9c\xf1\x2e\xb6\x95\x02";
	size_t sha384MsgBufferLength = 128;
	unsigned char* sha384DigestBuffer = (unsigned char*)"\x01\x96\x0e\xcb\xda\xdb\x6c\x2f\x6a\xcd\xeb\x4c\x90\xb8\x74\x4c\x15\xe8\x17\x3e\x84\x2b\x47\x33\x7d\x9c\xf2\x28\x3c\x37\x9c\x6f\xca\x93\xe6\x00\x3c\x80\x3c\xcd\x7c\x75\x30\xb7\xdc\x4a\x7f\x7a";
	size_t sha384DigestBufferLength = 48;
	
	// HMAC-SHA512 Test Data
	unsigned char*  hmacSha512KeyBuffer = (unsigned char*)"\x14\x62\x37\xf2\xc2\x3c\x3c\x65\x22\x30\x60\x33\x44\x60\x4f\x29\x56\x92\xc7\xe0\x18\xd5\xa6\x88\x90\x66\x48\xe3\xfe\xd4\x0f\x94\x12\x63\x43\x9a\x5d\xae\x1d\x18\x06\x91\x1e\x57\xbe\x46\xa5\x0d\xf5\xce\xc1\xe0\x4e\x93\x44\x26\x51\x4b\x19\xef\x61\x1f\xd7\x45\xed\x0d\x95\xb2\xea\x8b\x01\x03\x80\x6d\xac\x4c\x03\x08\xa8\x2c\x26\x98\x55\x52\x6b\xdf\x78\x40\xde\x0f\x8d\x4f\x03\xea\x5f\xf4\x0d\x28\xd5\x41\x50\x19\x0f\xaf\xf9\x8b\xb1\x1a\xfd\xee";
	size_t hmacSha512KeyBufferLength = 110;
	unsigned char* sha512MsgBuffer = (unsigned char*)"\x94\x14\x7a\x46\xd6\x7e\xef\x0b\x5e\x9f\x99\x24\x0a\xf4\xd3\x14\xa3\x30\x4d\x58\x02\xd6\x54\x9a\x77\x06\x54\x27\x6b\x97\x9b\xa3\x43\x67\x5f\xfc\x88\xef\x03\x9c\x45\x1b\x96\xe3\xb1\x58\x9d\xd4\x0e\xee\x12\x0e\xd1\x90\xac\xfe\x03\x31\x61\x54\xe7\x1a\x2a\xb3\xdd\x3a\x06\xad\x86\xbd\x41\xee\x29\xe0\xf6\xb7\x56\x03\xd3\x8f\xc9\xff\x1c\x35\x90\xbb\xf2\xd8\x71\xfa\xd6\x8a\x86\x77\x69\xf3\x2a\x34\x75\x42\x19\x0f\x31\x69\xd2\x96\xc1\x8a\x40\x1c\xfd\xac\x9a\x0d\x73\xb3\x88\x7e\xaf\x8f\x87\x08\xba\xb3\x8e\xd7\xe0\xc9";
	size_t sha512MsgBufferLength = 128;
	unsigned char* sha512DigestBuffer = (unsigned char*)"\x57\x05\xbf\xd5\x85\x4b\x7c\xc3\xb7\xc8\xea\xca\x32\x41\x88\x40\xae\xde\x68\xe7\xcd\x62\x1e\x43\x8f\x6d\x61\x58\x3b\x45\x61\xfc\xa5\x47\x19\x04\xbd\x79\x22\x89\x59\xa3\x90\x86\x4c\x8a\x70\xa5\x30\x69\xda\x41\x72\xca\x34\xc0\xea\x49\x6e\x12\x8d\xcd\xb8\xc3";
	size_t sha512DigestBufferLength = 64;
    
	uint8_t outputDigestBuffer[sha512DigestBufferLength];
	memset(outputDigestBuffer, 0, sha512DigestBufferLength);
    
    const struct ccdigest_info* sha1Impl = ccsha1_di();
    const struct ccdigest_info* sha224Impl = ccsha224_di();
    const struct ccdigest_info* sha256Impl = ccsha256_di();
    const struct ccdigest_info* sha384Impl = ccsha384_di();
    const struct ccdigest_info* sha512Impl = ccsha512_di();
    
	
	hmac_test testToRun[] =
	{
		{sha1Impl,  hmacSha1KeyBufferLength, hmacSha1KeyBuffer, sha1MsgBufferLength, sha1MsgBuffer, sha1DigestBufferLength, sha1DigestBuffer},
		{sha224Impl,  hmacSha224KeyBufferLength, hmacSha224KeyBuffer, sha224MsgBufferLength, sha224MsgBuffer, sha224DigestBufferLength, sha224DigestBuffer},
		{sha256Impl,  hmacSha256KeyBufferLength, hmacSha256KeyBuffer, sha256MsgBufferLength, sha256MsgBuffer, sha256DigestBufferLength, sha256DigestBuffer},
		{sha384Impl,  hmacSha384KeyBufferLength, hmacSha384KeyBuffer, sha384MsgBufferLength, sha384MsgBuffer, sha384DigestBufferLength, sha384DigestBuffer},
		{sha512Impl,  hmacSha512KeyBufferLength, hmacSha512KeyBuffer, sha512MsgBufferLength, sha512MsgBuffer, sha512DigestBufferLength, sha512DigestBuffer}		
	};
	
	int numTestToRun = 5;
	for (int iCnt = 0; iCnt < numTestToRun; iCnt++)
	{
		hmac_test* currentTest = &(testToRun[iCnt]);
        const struct ccdigest_info* di_ptr = currentTest->digest_info;
        cchmac(di_ptr, currentTest->key_size, currentTest->key_buffer, 
               currentTest->msg_size, currentTest->msg_buffer, outputDigestBuffer);
        
        if (memcmp(outputDigestBuffer, currentTest->digest_buffer, currentTest->digest_size))
        {
            return result;
        }
        
    }
    
	return 0;
}
Beispiel #3
0
static int SHA_POST()
{
    int result = -1;
	size_t messageSize = 10;
    
    const struct ccdigest_info* sha1Impl = ccsha1_di();
    const struct ccdigest_info* sha224Impl = ccsha224_di();
    const struct ccdigest_info* sha256Impl = ccsha256_di();
    const struct ccdigest_info* sha384Impl = ccsha384_di();
    const struct ccdigest_info* sha512Impl = ccsha512_di();
    
    
	typedef struct
	{
		const struct ccdigest_info*  digest_info;
		unsigned char*	msgBuffer;
		unsigned char*	digestBuffer;
		size_t			digestBufferLength;	
	} digest_test;
    
	// SHA1 Test Data
	unsigned char* sha1MsgBuffer = (unsigned char*)"\xd2\x32\xb4\x7e\xa4\x52\xd5\xd7\xa0\x89";
#ifdef FORCE_FAIL
	unsigned char*	shaDigestBuffer = (unsigned char*)"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13";
#else
	unsigned char*	shaDigestBuffer = (unsigned char*)"\xb3\x31\xfe\x2c\xda\xc9\xc5\x2b\x0f\xae\xff\xfb\x04\x09\xa7\x3a\xaf\x86\xb3\x28";
#endif

	size_t sha1DigestBufferLength = 20;
	
	// SHA224 Test Data
	unsigned char* sha224MsgBuffer = (unsigned char*)"\x1e\x3b\x6a\x3b\xdc\x28\x69\x2a\x91\xcb";
	unsigned char* sha224DigestBuffer = (unsigned char*)"\x15\x11\x75\xc0\x02\x80\x87\x3a\x2a\xc1\x62\x8d\x84\x4b\x7b\x67\x42\xa0\x39\x2d\xc5\xbd\x3a\xa7\x2b\x31\xed\x0b";
	size_t sha224DigestBufferLength = 28;
	
	// SHA256 Test Data
	unsigned char* sha256MsgBuffer = (unsigned char*)"\xbe\x3b\x88\x4a\x36\x46\x4d\x88\x14\x28";
	unsigned char* sha256DigestBuffer = (unsigned char*)"\xb3\x34\x8a\x1a\x93\x23\xbe\xef\x01\x77\x47\x99\xa2\x46\xea\xd9\x4b\xd8\x97\x41\x54\x09\xc7\xec\x3f\xb1\xa4\x5c\x62\x89\x85\xaa";
	size_t sha256DigestBufferLength = 32;
	
	// SHA384 Test Data
	unsigned char* sha384MsgBuffer = (unsigned char*)"\x23\xcb\xcb\x15\xc6\xb5\xd3\xe7\xcc\x6a";
	unsigned char* sha384DigestBuffer = (unsigned char*)"\x83\x3d\xdc\xf2\xf2\x9e\x7e\x3c\x3f\x73\x16\xa2\xdc\x10\x8c\x83\x1f\xbd\x4f\x7b\x61\x59\x53\x0d\xa9\x63\x64\xc8\xcd\x9e\xcf\xbe\x98\x9d\x7e\x97\x4b\xed\xba\xa0\x03\xa8\x2e\xd7\x06\x0b\xb3\xc8";
	size_t sha384DigestBufferLength = 48;
	
	// SHA512 Test Data
	unsigned char* sha512MsgBuffer = (unsigned char*)"\x44\xc8\x73\x00\x21\x13\x2b\x4a\x2b\x7e";
	unsigned char* sha512DigestBuffer = (unsigned char*)"\xbd\x5c\xa4\x21\xe4\x85\x8d\x3f\x1e\x11\xdf\xfb\x27\x38\xb0\x54\x7f\xec\xdb\xc1\x66\x7c\xed\x6a\x69\x44\x9b\x69\xcd\xf9\xb3\x91\x29\x55\x78\xb3\x80\xab\xde\x52\x48\x96\x6a\xd0\x7a\xf9\x5c\x77\x70\x7c\xc1\x5f\xf9\x08\xf6\xef\xb5\x9e\xf7\xc2\x45\x95\x46\x02";
	size_t sha512DigestBufferLength = 64;
    
	uint8_t outputDigestBuffer[sha512DigestBufferLength];
	memset(outputDigestBuffer, 0, sha512DigestBufferLength);
	
	digest_test testToRun[] =
	{
		// SHA1
		{sha1Impl, sha1MsgBuffer, shaDigestBuffer, sha1DigestBufferLength},
		// SHA224
		{sha224Impl, sha224MsgBuffer, sha224DigestBuffer, sha224DigestBufferLength},
		// SHA356
		{sha256Impl, sha256MsgBuffer, sha256DigestBuffer, sha256DigestBufferLength},
		// SHA384
		{sha384Impl, sha384MsgBuffer, sha384DigestBuffer, sha384DigestBufferLength},
		// SHA512
		{sha512Impl, sha512MsgBuffer, sha512DigestBuffer, sha512DigestBufferLength}
	};
	
	int numTestToRun = 5;
	for (int iCnt = 0; iCnt < numTestToRun; iCnt++)
	{
		digest_test* currentTest = &(testToRun[iCnt]);
        const struct ccdigest_info* di_ptr = currentTest->digest_info;
        ccdigest(di_ptr, messageSize, currentTest->msgBuffer, outputDigestBuffer);
        if (0 != memcmp(currentTest->digestBuffer, outputDigestBuffer, currentTest->digestBufferLength))
        {
            return result;
        }        
		
	}
	return 0;
}