1 /** @file 2 Application for Diffie-Hellman Primitives Validation. 3 4 Copyright (c) 2010 - 2014, 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 Validate UEFI-OpenSSL DH Interfaces. 19 20 @retval EFI_SUCCESS Validation succeeded. 21 @retval EFI_ABORTED Validation failed. 22 23 **/ 24 EFI_STATUS 25 ValidateCryptDh ( 26 VOID 27 ) 28 { 29 VOID *Dh1; 30 VOID *Dh2; 31 UINT8 Prime[64]; 32 UINT8 PublicKey1[64]; 33 UINTN PublicKey1Length; 34 UINT8 PublicKey2[64]; 35 UINTN PublicKey2Length; 36 UINT8 Key1[64]; 37 UINTN Key1Length; 38 UINT8 Key2[64]; 39 UINTN Key2Length; 40 BOOLEAN Status; 41 42 Print (L"\nUEFI-OpenSSL DH Engine Testing:\n"); 43 44 // 45 // Initialize Key Length 46 // 47 PublicKey1Length = sizeof (PublicKey1); 48 PublicKey2Length = sizeof (PublicKey2); 49 Key1Length = sizeof (Key1); 50 Key2Length = sizeof (Key2); 51 52 // 53 // Generate & Initialize DH Context 54 // 55 Print (L"- Context1 ... "); 56 Dh1 = DhNew (); 57 if (Dh1 == NULL) { 58 Print (L"[Fail]"); 59 return EFI_ABORTED; 60 } 61 62 Print (L"Context2 ... "); 63 Dh2 = DhNew (); 64 if (Dh2 == NULL) { 65 Print (L"[Fail]"); 66 return EFI_ABORTED; 67 } 68 69 Print (L"Parameter1 ... "); 70 Status = DhGenerateParameter (Dh1, 2, 64, Prime); 71 if (!Status) { 72 Print (L"[Fail]"); 73 return EFI_ABORTED; 74 } 75 76 Print (L"Parameter2 ... "); 77 Status = DhSetParameter (Dh2, 2, 64, Prime); 78 if (!Status) { 79 Print (L"[Fail]"); 80 return EFI_ABORTED; 81 } 82 83 Print (L"Generate key1 ... "); 84 Status = DhGenerateKey (Dh1, PublicKey1, &PublicKey1Length); 85 if (!Status) { 86 Print (L"[Fail]"); 87 return EFI_ABORTED; 88 } 89 90 Print (L"Generate key2 ... "); 91 Status = DhGenerateKey (Dh2, PublicKey2, &PublicKey2Length); 92 if (!Status) { 93 Print (L"[Fail]"); 94 return EFI_ABORTED; 95 } 96 97 Print (L"Compute key1 ... "); 98 Status = DhComputeKey (Dh1, PublicKey2, PublicKey2Length, Key1, &Key1Length); 99 if (!Status) { 100 Print (L"[Fail]"); 101 return EFI_ABORTED; 102 } 103 104 Print (L"Compute key2 ... "); 105 Status = DhComputeKey (Dh2, PublicKey1, PublicKey1Length, Key2, &Key2Length); 106 if (!Status) { 107 Print (L"[Fail]"); 108 return EFI_ABORTED; 109 } 110 111 Print (L"Compare Keys ... "); 112 if (Key1Length != Key2Length) { 113 Print (L"[Fail]"); 114 return EFI_ABORTED; 115 } 116 117 if (CompareMem (Key1, Key2, Key1Length) != 0) { 118 Print (L"[Fail]"); 119 return EFI_ABORTED; 120 } 121 122 Print (L"[Pass]\n"); 123 124 return EFI_SUCCESS; 125 }