28 #define MAC_STATE_SIZE sizeof( MAC_STATE )
30 #ifndef SHA384_DIGEST_SIZE
32 #define SHA384_DIGEST_SIZE 48
33 #define SHA512_DIGEST_SIZE 64
34 #define sha2_begin( size, ctx ) sha256_begin( ( ctx )->uu->ctx256 )
35 #define sha2_hash( data, len, ctx ) sha256_hash( data, len, ( ctx )->uu->ctx256 )
36 #define sha2_end( hash, ctx ) sha256_end( hash, ( ctx )->uu->ctx256 )
45 #ifndef CONFIG_NO_SELFTEST
56 {
"\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B"
57 "\x0B\x0B\x0B\x0B", 20,
59 { 0xB0, 0x34, 0x4C, 0x61, 0xD8, 0xDB, 0x38, 0x53,
60 0x5C, 0xA8, 0xAF, 0xCE, 0xAF, 0x0B, 0xF1, 0x2B,
61 0x88, 0x1D, 0xC2, 0x00, 0xC9, 0x83, 0x3D, 0xA7,
62 0x26, 0xE9, 0x37, 0x6C, 0x2E, 0x32, 0xCF, 0xF7 } },
64 "what do ya want for nothing?", 28,
65 { 0x5B, 0xDC, 0xC1, 0x46, 0xBF, 0x60, 0x75, 0x4E,
66 0x6A, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xC7,
67 0x5A, 0x00, 0x3F, 0x08, 0x9D, 0x27, 0x39, 0x83,
68 0x9D, 0xEC, 0x58, 0xB9, 0x64, 0xEC, 0x38, 0x43 } },
69 {
"\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
70 "\xAA\xAA\xAA\xAA", 20,
71 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
72 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
73 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
74 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
75 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD", 50,
76 { 0x77, 0x3E, 0xA9, 0x1E, 0x36, 0x80, 0x0E, 0x46,
77 0x85, 0x4D, 0xB8, 0xEB, 0xD0, 0x91, 0x81, 0xA7,
78 0x29, 0x59, 0x09, 0x8B, 0x3E, 0xF8, 0xC1, 0x22,
79 0xD9, 0x63, 0x55, 0x14, 0xCE, 0xD5, 0x65, 0xFE } },
80 {
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10"
81 "\x11\x12\x13\x14\x15\x16\x17\x18\x19", 25,
82 "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD"
83 "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD"
84 "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD"
85 "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD"
86 "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD", 50,
87 { 0x82, 0x55, 0x8A, 0x38, 0x9A, 0x44, 0x3C, 0x0E,
88 0xA4, 0xCC, 0x81, 0x98, 0x99, 0xF2, 0x08, 0x3A,
89 0x85, 0xF0, 0xFA, 0xA3, 0xE5, 0x78, 0xF8, 0x07,
90 0x7A, 0x2E, 0x3F, 0xF4, 0x67, 0x29, 0x66, 0x5B } },
92 {
"\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C"
93 "\x0C\x0C\x0C\x0C", 20,
94 "Test With Truncation", 20,
95 { 0xA3, 0xB6, 0x16, 0x74, 0x73, 0x10, 0x0E, 0xE0,
96 0x6E, 0x0C, 0x79, 0x6C, 0x29, 0x55, 0x55, 0x2B } },
98 {
"\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
99 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
100 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
101 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
102 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
103 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
104 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
105 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
106 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
107 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
108 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
109 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
110 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
112 "Test Using Larger Than Block-Size Key - Hash Key First", 54,
113 { 0x60, 0xE4, 0x31, 0x59, 0x1E, 0xE0, 0xB6, 0x7F,
114 0x0D, 0x8A, 0x26, 0xAA, 0xCB, 0xF5, 0xB7, 0x7F,
115 0x8E, 0x0B, 0xC6, 0x21, 0x37, 0x28, 0xC5, 0x14,
116 0x05, 0x46, 0x04, 0x0F, 0x0E, 0xE3, 0x7F, 0x54 } },
118 {
"", 0, NULL, 0, { 0 } }
121 static int selfTest(
void )
128 for( i = 0; hmacValues[ i ].data != NULL; i++ )
130 status = testMAC( capabilityInfo, macState, hmacValues[ i ].
key,
140 #define selfTest NULL
157 assert( contextInfoPtr == NULL || \
159 assert( ( length == 0 &&
isWritePtr( data,
sizeof(
int ) ) ) || \
160 ( length > 0 &&
isWritePtr( data, length ) ) );
173 return( getDefaultInfo( type, contextInfoPtr, data, length ) );
186 MAC_INFO *macInfo = contextInfoPtr->ctxMAC;
200 sha2_hash( buffer, noBytes, shaInfo );
209 sha2_end( digestBuffer, shaInfo );
214 memcpy( hashBuffer, macInfo->userKey,
218 sha2_begin( digestSize, shaInfo );
221 sha2_hash( digestBuffer, digestSize, shaInfo );
222 memset( digestBuffer, 0, digestSize );
223 sha2_end( macInfo->mac, shaInfo );
240 MAC_INFO *macInfo = contextInfoPtr->ctxMAC;
246 sha2_begin( digestSize, shaInfo );
256 sha2_hash( (
void * ) key, keyLength, shaInfo );
257 sha2_end( macInfo->userKey, shaInfo );
261 sha2_begin( digestSize, shaInfo );
266 if( macInfo->userKey != key )
267 memcpy( macInfo->userKey, key, keyLength );
274 memcpy( hashBuffer, macInfo->userKey,
311 selfTest, getInfo, NULL, NULL, initKey, NULL, hash, hash
317 selfTest, getInfo, NULL, NULL, initKey, NULL, hash, hash
333 if( dataLength != SHA384_DIGEST_SIZE )
335 contextInfoPtr->capabilityInfo = &capabilityInfo;
337 if( dataLength != SHA512_DIGEST_SIZE )
339 contextInfoPtr->capabilityInfo = &capabilityInfo;
349 return( initGenericParams( contextInfoPtr, paramType, data,
362 selfTest, getInfo, NULL,
initParams, initKey, NULL, hash, hash
367 return( &capabilityInfo );