]> git.proxmox.com Git - mirror_edk2.git/blob - CryptoPkg/Application/Cryptest/Pkcs5Pbkdf2Verify.c
CryptoPkg: Add PKCS5 PBKDF2 interface for password derivation.
[mirror_edk2.git] / CryptoPkg / Application / Cryptest / Pkcs5Pbkdf2Verify.c
1 /** @file
2 Application for PKCS#5 PBKDF2 Function Validation.
3
4 Copyright (c) 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
9
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.
12
13 **/
14
15 #include "Cryptest.h"
16
17 //
18 // PBKDF2 HMAC-SHA1 Test Vector from RFC6070
19 //
20 GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *Password = "password"; // Input Password
21 GLOBAL_REMOVE_IF_UNREFERENCED UINTN PassLen = 8; // Length of Input Password
22 GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 *Salt = "salt"; // Input Salt
23 GLOBAL_REMOVE_IF_UNREFERENCED UINTN SaltLen = 4; // Length of Input Salt
24 GLOBAL_REMOVE_IF_UNREFERENCED CONST UINTN Count = 2; // InterationCount
25 GLOBAL_REMOVE_IF_UNREFERENCED CONST UINTN KeyLen = 20; // Length of derived key
26 GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8 DerivedKey[] = { // Expected output key
27 0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, 0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0,
28 0xd8, 0xde, 0x89, 0x57
29 };
30
31 /**
32 Validate UEFI-OpenSSL PKCS#5 PBKDF2 Interface.
33
34 @retval EFI_SUCCESS Validation succeeded.
35 @retval EFI_ABORTED Validation failed.
36
37 **/
38 EFI_STATUS
39 ValidateCryptPkcs5Pbkdf2 (
40 VOID
41 )
42 {
43 BOOLEAN Status;
44 UINT8 *OutKey;
45
46 Print (L"\nUEFI-OpenSSL PKCS#5 PBKDF2 Testing: ");
47 Print (L"\n- PKCS#5 PBKDF2 Verification: ");
48
49 OutKey = AllocatePool (KeyLen);
50 if (OutKey == NULL) {
51 Print (L"[Fail]");
52 return EFI_ABORTED;
53 }
54
55 //
56 // Verify PKCS#5 PBKDF2 Key Derivation Function
57 //
58 Print (L"Deriving Key... ");
59 Status = Pkcs5HashPassword (
60 PassLen,
61 Password,
62 SaltLen,
63 (CONST UINT8 *)Salt,
64 Count,
65 SHA1_DIGEST_SIZE,
66 KeyLen,
67 OutKey
68 );
69
70 if (!Status) {
71 Print (L"[Fail]");
72 FreePool (OutKey);
73 return EFI_ABORTED;
74 }
75
76 //
77 // Check the output key with the expected key result
78 //
79 Print (L"Check Derived Key... ");
80 if (CompareMem (OutKey, DerivedKey, KeyLen) != 0) {
81 Print (L"[Fail]");
82 FreePool (OutKey);
83 return EFI_ABORTED;
84 }
85
86 Print (L"[Pass]\n");
87
88 //
89 // Release Resources
90 //
91 FreePool (OutKey);
92
93 return EFI_SUCCESS;
94 }