• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
ValidateCryptPkcs5Pbkdf2(VOID)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 }
95