]> git.proxmox.com Git - mirror_edk2.git/blame - CryptoPkg/Application/Cryptest/HashVerify.c
1. Add new API supports for PEM & X509 key retrieving & verification;
[mirror_edk2.git] / CryptoPkg / Application / Cryptest / HashVerify.c
CommitLineData
a8c44645 1/** @file \r
2 Application for Hash Primitives Validation.\r
3\r
4Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
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// Message string for digest validation\r
24//\r
25GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *HashData = "abc";\r
26\r
4a567c96 27//\r
28// Result for MD4("abc"). (From "A.5 Test suite" of IETF RFC1320)\r
29//\r
30GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Md4Digest[MD4_DIGEST_SIZE] = {\r
31 0xa4, 0x48, 0x01, 0x7a, 0xaf, 0x21, 0xd8, 0x52, 0x5f, 0xc1, 0x0a, 0xe8, 0x7a, 0xa6, 0x72, 0x9d\r
32 };\r
33\r
a8c44645 34//\r
35// Result for MD5("abc"). (From "A.5 Test suite" of IETF RFC1321)\r
36//\r
37GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Md5Digest[MD5_DIGEST_SIZE] = {\r
38 0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0, 0xd6, 0x96, 0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72\r
39 };\r
40\r
41//\r
42// Result for SHA-1("abc"). (From "A.1 SHA-1 Example" of NIST FIPS 180-2)\r
43//\r
44GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Sha1Digest[SHA1_DIGEST_SIZE] = {\r
45 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, 0xba, 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c,\r
46 0x9c, 0xd0, 0xd8, 0x9d\r
47 };\r
48\r
49//\r
50// Result for SHA-256("abc"). (From "B.1 SHA-256 Example" of NIST FIPS 180-2)\r
51//\r
52GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Sha256Digest[SHA256_DIGEST_SIZE] = {\r
53 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,\r
54 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad\r
55 };\r
56\r
57/**\r
58 Validate UEFI-OpenSSL Digest Interfaces.\r
59\r
60 @retval EFI_SUCCESS Validation succeeded.\r
61 @retval EFI_ABORTED Validation failed.\r
62\r
63**/\r
64EFI_STATUS\r
65ValidateCryptDigest (\r
66 VOID\r
67 )\r
68{\r
69 UINTN CtxSize;\r
70 VOID *HashCtx;\r
71 UINTN DataSize;\r
72 UINT8 Digest[MAX_DIGEST_SIZE];\r
73 BOOLEAN Status;\r
74\r
75 Print (L" UEFI-OpenSSL Hash Engine Testing:\n");\r
76 DataSize = AsciiStrLen (HashData);\r
77\r
4a567c96 78 Print (L"- MD4: ");\r
79 \r
80 //\r
81 // MD4 Digest Validation\r
82 //\r
83 ZeroMem (Digest, MAX_DIGEST_SIZE);\r
84 CtxSize = Md4GetContextSize ();\r
85 HashCtx = AllocatePool (CtxSize);\r
86\r
87 Print (L"Init... ");\r
88 Status = Md4Init (HashCtx);\r
89 if (!Status) {\r
90 Print (L"[Fail]");\r
91 return EFI_ABORTED;\r
92 }\r
93\r
94 Print (L"Update... ");\r
95 Status = Md4Update (HashCtx, HashData, DataSize);\r
96 if (!Status) {\r
97 Print (L"[Fail]");\r
98 return EFI_ABORTED;\r
99 }\r
100\r
101 Print (L"Finalize... ");\r
102 Status = Md4Final (HashCtx, Digest);\r
103 if (!Status) {\r
104 Print (L"[Fail]");\r
105 return EFI_ABORTED;\r
106 }\r
107\r
108 FreePool (HashCtx);\r
109\r
110 Print (L"Check Value... ");\r
111 if (CompareMem (Digest, Md4Digest, MD5_DIGEST_SIZE) != 0) {\r
112 Print (L"[Fail]");\r
113 return EFI_ABORTED;\r
114 }\r
115\r
116 Print (L"[Pass]\n");\r
117\r
a8c44645 118 Print (L"- MD5: ");\r
119\r
120 //\r
121 // MD5 Digest Validation\r
122 //\r
123 ZeroMem (Digest, MAX_DIGEST_SIZE);\r
124 CtxSize = Md5GetContextSize ();\r
125 HashCtx = AllocatePool (CtxSize);\r
126\r
127 Print (L"Init... ");\r
128 Status = Md5Init (HashCtx);\r
129 if (!Status) {\r
130 Print (L"[Fail]");\r
131 return EFI_ABORTED;\r
132 }\r
133\r
134 Print (L"Update... ");\r
135 Status = Md5Update (HashCtx, HashData, DataSize);\r
136 if (!Status) {\r
137 Print (L"[Fail]");\r
138 return EFI_ABORTED;\r
139 }\r
140\r
141 Print (L"Finalize... ");\r
142 Status = Md5Final (HashCtx, Digest);\r
143 if (!Status) {\r
144 Print (L"[Fail]");\r
145 return EFI_ABORTED;\r
146 }\r
147\r
148 FreePool (HashCtx);\r
149\r
150 Print (L"Check Value... ");\r
151 if (CompareMem (Digest, Md5Digest, MD5_DIGEST_SIZE) != 0) {\r
152 Print (L"[Fail]");\r
153 return EFI_ABORTED;\r
154 }\r
155\r
156 Print (L"[Pass]\n");\r
157\r
158 Print (L"- SHA1: ");\r
159\r
160 //\r
161 // SHA-1 Digest Validation\r
162 //\r
163 ZeroMem (Digest, MAX_DIGEST_SIZE);\r
164 CtxSize = Sha1GetContextSize ();\r
165 HashCtx = AllocatePool (CtxSize);\r
166\r
167 Print (L"Init... ");\r
168 Status = Sha1Init (HashCtx);\r
169 if (!Status) {\r
170 Print (L"[Fail]");\r
171 return EFI_ABORTED;\r
172 }\r
173\r
174 Print (L"Update... ");\r
175 Status = Sha1Update (HashCtx, HashData, DataSize);\r
176 if (!Status) {\r
177 Print (L"[Fail]");\r
178 return EFI_ABORTED;\r
179 }\r
180\r
181 Print (L"Finalize... ");\r
182 Status = Sha1Final (HashCtx, Digest);\r
183 if (!Status) {\r
184 Print (L"[Fail]");\r
185 return EFI_ABORTED;\r
186 }\r
187\r
188 FreePool (HashCtx);\r
189\r
190 Print (L"Check Value... ");\r
191 if (CompareMem (Digest, Sha1Digest, SHA1_DIGEST_SIZE) != 0) {\r
192 Print (L"[Fail]");\r
193 return EFI_ABORTED;\r
194 }\r
195\r
196 Print (L"[Pass]\n");\r
197\r
198 Print (L"- SHA256: ");\r
199\r
200 //\r
201 // SHA256 Digest Validation\r
202 //\r
203 ZeroMem (Digest, MAX_DIGEST_SIZE);\r
204 CtxSize = Sha256GetContextSize ();\r
205 HashCtx = AllocatePool (CtxSize);\r
206\r
207 Print (L"Init... ");\r
208 Status = Sha256Init (HashCtx);\r
209 if (!Status) {\r
210 Print (L"[Fail]");\r
211 return EFI_ABORTED;\r
212 }\r
213\r
214 Print (L"Update... ");\r
215 Status = Sha256Update (HashCtx, HashData, DataSize);\r
216 if (!Status) {\r
217 Print (L"[Fail]");\r
218 return EFI_ABORTED;\r
219 }\r
220\r
221 Print (L"Finalize... ");\r
222 Status = Sha256Final (HashCtx, Digest);\r
223 if (!Status) {\r
224 Print (L"[Fail]");\r
225 return EFI_ABORTED;\r
226 }\r
227\r
228 FreePool (HashCtx);\r
229\r
230 Print (L"Check Value... ");\r
231 if (CompareMem (Digest, Sha256Digest, SHA256_DIGEST_SIZE) != 0) {\r
232 Print (L"[Fail]");\r
233 return EFI_ABORTED;\r
234 }\r
235\r
236 Print (L"[Pass]\n");\r
237 \r
238 return EFI_SUCCESS;\r
239}\r