]> git.proxmox.com Git - mirror_edk2.git/blame - CryptoPkg/Application/Cryptest/HmacVerify.c
SecurityPkg: Remove RngTest Application from SecurityPkg
[mirror_edk2.git] / CryptoPkg / Application / Cryptest / HmacVerify.c
CommitLineData
a8c44645 1/** @file \r
2 Application for HMAC Primitives Validation.\r
3\r
72009c62 4Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>\r
a8c44645 5This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#include "Cryptest.h"\r
16\r
17//\r
18// Max Known Digest Size is SHA512 Output (64 bytes) by far\r
19//\r
20#define MAX_DIGEST_SIZE 64\r
21\r
22//\r
23// Data string for HMAC validation\r
24//\r
25GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *HmacData = "Hi There";\r
26\r
27//\r
28// Key value for HMAC-MD5 validation. (From "2. Test Cases for HMAC-MD5" of IETF RFC2202)\r
29//\r
30GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacMd5Key[16] = {\r
31 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b\r
32 };\r
33\r
34//\r
35// Result for HMAC-MD5("Hi There"). (From "2. Test Cases for HMAC-MD5" of IETF RFC2202)\r
36//\r
37GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacMd5Digest[] = {\r
38 0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c, 0x13, 0xf4, 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d\r
39 };\r
40\r
41//\r
42// Key value for HMAC-SHA-1 validation. (From "3. Test Cases for HMAC-SHA-1" of IETF RFC2202)\r
43//\r
44GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha1Key[20] = {\r
45 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,\r
46 0x0b, 0x0b, 0x0b, 0x0b\r
47 };\r
48\r
49//\r
50// Result for HMAC-SHA-1 ("Hi There"). (From "3. Test Cases for HMAC-SHA-1" of IETF RFC2202)\r
51//\r
52GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha1Digest[] = {\r
53 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xe2, 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e,\r
54 0xf1, 0x46, 0xbe, 0x00\r
55 };\r
56\r
72009c62
QL
57//\r
58// Key value for HMAC-SHA-256 validation. (From "4. Test Vectors" of IETF RFC4231)\r
59//\r
60GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha256Key[20] = {\r
61 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,\r
62 0x0b, 0x0b, 0x0b, 0x0b\r
63 };\r
64\r
65//\r
66// Result for HMAC-SHA-256 ("Hi There"). (From "4. Test Vectors" of IETF RFC4231)\r
67//\r
68GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 HmacSha256Digest[] = {\r
69 0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, 0x5c, 0xa8, 0xaf, 0xce, 0xaf, 0x0b, 0xf1, 0x2b,\r
70 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, 0x26, 0xe9, 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7\r
71 };\r
72\r
a8c44645 73/**\r
74 Validate UEFI-OpenSSL Message Authentication Codes Interfaces.\r
75\r
76 @retval EFI_SUCCESS Validation succeeded.\r
77 @retval EFI_ABORTED Validation failed.\r
78\r
79**/\r
80EFI_STATUS\r
81ValidateCryptHmac (\r
82 VOID\r
83 )\r
84{\r
85 UINTN CtxSize;\r
86 VOID *HmacCtx;\r
87 UINT8 Digest[MAX_DIGEST_SIZE];\r
88 BOOLEAN Status;\r
89\r
90 Print (L" \nUEFI-OpenSSL HMAC Engine Testing:\n");\r
91\r
72009c62 92 Print (L"- HMAC-MD5: ");\r
a8c44645 93\r
94 //\r
95 // HMAC-MD5 Digest Validation\r
96 //\r
97 ZeroMem (Digest, MAX_DIGEST_SIZE);\r
98 CtxSize = HmacMd5GetContextSize ();\r
99 HmacCtx = AllocatePool (CtxSize);\r
100\r
101 Print (L"Init... ");\r
102 Status = HmacMd5Init (HmacCtx, HmacMd5Key, sizeof (HmacMd5Key));\r
103 if (!Status) {\r
104 Print (L"[Fail]");\r
105 return EFI_ABORTED;\r
106 }\r
107\r
108 Print (L"Update... ");\r
109 Status = HmacMd5Update (HmacCtx, HmacData, 8);\r
110 if (!Status) {\r
111 Print (L"[Fail]");\r
112 return EFI_ABORTED;\r
113 }\r
114\r
115 Print (L"Finalize... ");\r
116 Status = HmacMd5Final (HmacCtx, Digest);\r
117 if (!Status) {\r
118 Print (L"[Fail]");\r
119 return EFI_ABORTED;\r
120 }\r
121\r
122 FreePool (HmacCtx);\r
123\r
124 Print (L"Check Value... ");\r
125 if (CompareMem (Digest, HmacMd5Digest, MD5_DIGEST_SIZE) != 0) {\r
126 Print (L"[Fail]");\r
127 return EFI_ABORTED;\r
128 }\r
129\r
130 Print (L"[Pass]\n");\r
131\r
72009c62 132 Print (L"- HMAC-SHA1: ");\r
a8c44645 133\r
134 //\r
135 // HMAC-SHA1 Digest Validation\r
136 //\r
137 ZeroMem (Digest, MAX_DIGEST_SIZE);\r
138 CtxSize = HmacSha1GetContextSize ();\r
139 HmacCtx = AllocatePool (CtxSize);\r
140\r
141 Print (L"Init... ");\r
142 Status = HmacSha1Init (HmacCtx, HmacSha1Key, sizeof (HmacSha1Key));\r
143 if (!Status) {\r
144 Print (L"[Fail]");\r
145 return EFI_ABORTED;\r
146 }\r
147\r
148 Print (L"Update... ");\r
149 Status = HmacSha1Update (HmacCtx, HmacData, 8);\r
150 if (!Status) {\r
151 Print (L"[Fail]");\r
152 return EFI_ABORTED;\r
153 }\r
154\r
155 Print (L"Finalize... ");\r
156 Status = HmacSha1Final (HmacCtx, Digest);\r
157 if (!Status) {\r
158 Print (L"[Fail]");\r
159 return EFI_ABORTED;\r
160 }\r
161\r
162 FreePool (HmacCtx);\r
163\r
164 Print (L"Check Value... ");\r
165 if (CompareMem (Digest, HmacSha1Digest, SHA1_DIGEST_SIZE) != 0) {\r
166 Print (L"[Fail]");\r
167 return EFI_ABORTED;\r
168 }\r
169\r
170 Print (L"[Pass]\n");\r
171\r
72009c62
QL
172 Print (L"- HMAC-SHA256: ");\r
173 //\r
174 // HMAC-SHA-256 Digest Validation\r
175 //\r
176 ZeroMem (Digest, MAX_DIGEST_SIZE);\r
177 CtxSize = HmacSha256GetContextSize ();\r
178 HmacCtx = AllocatePool (CtxSize);\r
179\r
180 Print (L"Init... ");\r
181 Status = HmacSha256Init (HmacCtx, HmacSha256Key, sizeof (HmacSha256Key));\r
182 if (!Status) {\r
183 Print (L"[Fail]");\r
184 return EFI_ABORTED;\r
185 }\r
186\r
187 Print (L"Update... ");\r
188 Status = HmacSha256Update (HmacCtx, HmacData, 8);\r
189 if (!Status) {\r
190 Print (L"[Fail]");\r
191 return EFI_ABORTED;\r
192 }\r
193\r
194 Print (L"Finalize... ");\r
195 Status = HmacSha256Final (HmacCtx, Digest);\r
196 if (!Status) {\r
197 Print (L"[Fail]");\r
198 return EFI_ABORTED;\r
199 }\r
200\r
201 FreePool (HmacCtx);\r
202\r
203 Print (L"Check Value... ");\r
204 if (CompareMem (Digest, HmacSha256Digest, SHA256_DIGEST_SIZE) != 0) {\r
205 Print (L"[Fail]");\r
206 return EFI_ABORTED;\r
207 }\r
208\r
209 Print (L"[Pass]\n");\r
210\r
a8c44645 211 return EFI_SUCCESS;\r
212}\r