]> git.proxmox.com Git - mirror_edk2.git/blame - CryptoPkg/Application/Cryptest/HashVerify.c
Update CryptoPkg for new ciphers (HMAC, Block Cipher, etc) supports.
[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
27//\r
28// Result for MD5("abc"). (From "A.5 Test suite" of IETF RFC1321)\r
29//\r
30GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Md5Digest[MD5_DIGEST_SIZE] = {\r
31 0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0, 0xd6, 0x96, 0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72\r
32 };\r
33\r
34//\r
35// Result for SHA-1("abc"). (From "A.1 SHA-1 Example" of NIST FIPS 180-2)\r
36//\r
37GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Sha1Digest[SHA1_DIGEST_SIZE] = {\r
38 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, 0xba, 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c,\r
39 0x9c, 0xd0, 0xd8, 0x9d\r
40 };\r
41\r
42//\r
43// Result for SHA-256("abc"). (From "B.1 SHA-256 Example" of NIST FIPS 180-2)\r
44//\r
45GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 Sha256Digest[SHA256_DIGEST_SIZE] = {\r
46 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,\r
47 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad\r
48 };\r
49\r
50/**\r
51 Validate UEFI-OpenSSL Digest Interfaces.\r
52\r
53 @retval EFI_SUCCESS Validation succeeded.\r
54 @retval EFI_ABORTED Validation failed.\r
55\r
56**/\r
57EFI_STATUS\r
58ValidateCryptDigest (\r
59 VOID\r
60 )\r
61{\r
62 UINTN CtxSize;\r
63 VOID *HashCtx;\r
64 UINTN DataSize;\r
65 UINT8 Digest[MAX_DIGEST_SIZE];\r
66 BOOLEAN Status;\r
67\r
68 Print (L" UEFI-OpenSSL Hash Engine Testing:\n");\r
69 DataSize = AsciiStrLen (HashData);\r
70\r
71 Print (L"- MD5: ");\r
72\r
73 //\r
74 // MD5 Digest Validation\r
75 //\r
76 ZeroMem (Digest, MAX_DIGEST_SIZE);\r
77 CtxSize = Md5GetContextSize ();\r
78 HashCtx = AllocatePool (CtxSize);\r
79\r
80 Print (L"Init... ");\r
81 Status = Md5Init (HashCtx);\r
82 if (!Status) {\r
83 Print (L"[Fail]");\r
84 return EFI_ABORTED;\r
85 }\r
86\r
87 Print (L"Update... ");\r
88 Status = Md5Update (HashCtx, HashData, DataSize);\r
89 if (!Status) {\r
90 Print (L"[Fail]");\r
91 return EFI_ABORTED;\r
92 }\r
93\r
94 Print (L"Finalize... ");\r
95 Status = Md5Final (HashCtx, Digest);\r
96 if (!Status) {\r
97 Print (L"[Fail]");\r
98 return EFI_ABORTED;\r
99 }\r
100\r
101 FreePool (HashCtx);\r
102\r
103 Print (L"Check Value... ");\r
104 if (CompareMem (Digest, Md5Digest, MD5_DIGEST_SIZE) != 0) {\r
105 Print (L"[Fail]");\r
106 return EFI_ABORTED;\r
107 }\r
108\r
109 Print (L"[Pass]\n");\r
110\r
111 Print (L"- SHA1: ");\r
112\r
113 //\r
114 // SHA-1 Digest Validation\r
115 //\r
116 ZeroMem (Digest, MAX_DIGEST_SIZE);\r
117 CtxSize = Sha1GetContextSize ();\r
118 HashCtx = AllocatePool (CtxSize);\r
119\r
120 Print (L"Init... ");\r
121 Status = Sha1Init (HashCtx);\r
122 if (!Status) {\r
123 Print (L"[Fail]");\r
124 return EFI_ABORTED;\r
125 }\r
126\r
127 Print (L"Update... ");\r
128 Status = Sha1Update (HashCtx, HashData, DataSize);\r
129 if (!Status) {\r
130 Print (L"[Fail]");\r
131 return EFI_ABORTED;\r
132 }\r
133\r
134 Print (L"Finalize... ");\r
135 Status = Sha1Final (HashCtx, Digest);\r
136 if (!Status) {\r
137 Print (L"[Fail]");\r
138 return EFI_ABORTED;\r
139 }\r
140\r
141 FreePool (HashCtx);\r
142\r
143 Print (L"Check Value... ");\r
144 if (CompareMem (Digest, Sha1Digest, SHA1_DIGEST_SIZE) != 0) {\r
145 Print (L"[Fail]");\r
146 return EFI_ABORTED;\r
147 }\r
148\r
149 Print (L"[Pass]\n");\r
150\r
151 Print (L"- SHA256: ");\r
152\r
153 //\r
154 // SHA256 Digest Validation\r
155 //\r
156 ZeroMem (Digest, MAX_DIGEST_SIZE);\r
157 CtxSize = Sha256GetContextSize ();\r
158 HashCtx = AllocatePool (CtxSize);\r
159\r
160 Print (L"Init... ");\r
161 Status = Sha256Init (HashCtx);\r
162 if (!Status) {\r
163 Print (L"[Fail]");\r
164 return EFI_ABORTED;\r
165 }\r
166\r
167 Print (L"Update... ");\r
168 Status = Sha256Update (HashCtx, HashData, DataSize);\r
169 if (!Status) {\r
170 Print (L"[Fail]");\r
171 return EFI_ABORTED;\r
172 }\r
173\r
174 Print (L"Finalize... ");\r
175 Status = Sha256Final (HashCtx, Digest);\r
176 if (!Status) {\r
177 Print (L"[Fail]");\r
178 return EFI_ABORTED;\r
179 }\r
180\r
181 FreePool (HashCtx);\r
182\r
183 Print (L"Check Value... ");\r
184 if (CompareMem (Digest, Sha256Digest, SHA256_DIGEST_SIZE) != 0) {\r
185 Print (L"[Fail]");\r
186 return EFI_ABORTED;\r
187 }\r
188\r
189 Print (L"[Pass]\n");\r
190 \r
191 return EFI_SUCCESS;\r
192}\r