2 Application for HMAC Primitives Validation.
4 Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 // Max Known Digest Size is SHA512 Output (64 bytes) by far
20 #define MAX_DIGEST_SIZE 64
23 // Data string for HMAC validation
25 GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8
*HmacData
= "Hi There";
28 // Key value for HMAC-MD5 validation. (From "2. Test Cases for HMAC-MD5" of IETF RFC2202)
30 GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacMd5Key
[16] = {
31 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b
35 // Result for HMAC-MD5("Hi There"). (From "2. Test Cases for HMAC-MD5" of IETF RFC2202)
37 GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacMd5Digest
[] = {
38 0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c, 0x13, 0xf4, 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d
42 // Key value for HMAC-SHA-1 validation. (From "3. Test Cases for HMAC-SHA-1" of IETF RFC2202)
44 GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha1Key
[20] = {
45 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
46 0x0b, 0x0b, 0x0b, 0x0b
50 // Result for HMAC-SHA-1 ("Hi There"). (From "3. Test Cases for HMAC-SHA-1" of IETF RFC2202)
52 GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha1Digest
[] = {
53 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xe2, 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e,
54 0xf1, 0x46, 0xbe, 0x00
58 // Key value for HMAC-SHA-256 validation. (From "4. Test Vectors" of IETF RFC4231)
60 GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha256Key
[20] = {
61 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
62 0x0b, 0x0b, 0x0b, 0x0b
66 // Result for HMAC-SHA-256 ("Hi There"). (From "4. Test Vectors" of IETF RFC4231)
68 GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha256Digest
[] = {
69 0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, 0x0b, 0xf1, 0x2b,
70 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7
74 Validate UEFI-OpenSSL Message Authentication Codes Interfaces.
76 @retval EFI_SUCCESS Validation succeeded.
77 @retval EFI_ABORTED Validation failed.
87 UINT8 Digest
[MAX_DIGEST_SIZE
];
90 Print (L
" \nUEFI-OpenSSL HMAC Engine Testing:\n");
92 Print (L
"- HMAC-MD5: ");
95 // HMAC-MD5 Digest Validation
97 ZeroMem (Digest
, MAX_DIGEST_SIZE
);
98 CtxSize
= HmacMd5GetContextSize ();
99 HmacCtx
= AllocatePool (CtxSize
);
102 Status
= HmacMd5Init (HmacCtx
, HmacMd5Key
, sizeof (HmacMd5Key
));
108 Print (L
"Update... ");
109 Status
= HmacMd5Update (HmacCtx
, HmacData
, 8);
115 Print (L
"Finalize... ");
116 Status
= HmacMd5Final (HmacCtx
, Digest
);
124 Print (L
"Check Value... ");
125 if (CompareMem (Digest
, HmacMd5Digest
, MD5_DIGEST_SIZE
) != 0) {
132 Print (L
"- HMAC-SHA1: ");
135 // HMAC-SHA1 Digest Validation
137 ZeroMem (Digest
, MAX_DIGEST_SIZE
);
138 CtxSize
= HmacSha1GetContextSize ();
139 HmacCtx
= AllocatePool (CtxSize
);
142 Status
= HmacSha1Init (HmacCtx
, HmacSha1Key
, sizeof (HmacSha1Key
));
148 Print (L
"Update... ");
149 Status
= HmacSha1Update (HmacCtx
, HmacData
, 8);
155 Print (L
"Finalize... ");
156 Status
= HmacSha1Final (HmacCtx
, Digest
);
164 Print (L
"Check Value... ");
165 if (CompareMem (Digest
, HmacSha1Digest
, SHA1_DIGEST_SIZE
) != 0) {
172 Print (L
"- HMAC-SHA256: ");
174 // HMAC-SHA-256 Digest Validation
176 ZeroMem (Digest
, MAX_DIGEST_SIZE
);
177 CtxSize
= HmacSha256GetContextSize ();
178 HmacCtx
= AllocatePool (CtxSize
);
181 Status
= HmacSha256Init (HmacCtx
, HmacSha256Key
, sizeof (HmacSha256Key
));
187 Print (L
"Update... ");
188 Status
= HmacSha256Update (HmacCtx
, HmacData
, 8);
194 Print (L
"Finalize... ");
195 Status
= HmacSha256Final (HmacCtx
, Digest
);
203 Print (L
"Check Value... ");
204 if (CompareMem (Digest
, HmacSha256Digest
, SHA256_DIGEST_SIZE
) != 0) {