Home | History | Annotate | Download | only in Cryptest
      1 /** @file
      2   Application for Pseudorandom Number Generator Validation.
      3 
      4 Copyright (c) 2010, 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 #define  RANDOM_NUMBER_SIZE  256
     18 
     19 CONST  UINT8  SeedString[] = "This is the random seed for PRNG verification.";
     20 
     21 UINT8  PreviousRandomBuffer[RANDOM_NUMBER_SIZE] = { 0x0 };
     22 
     23 UINT8  RandomBuffer[RANDOM_NUMBER_SIZE] = { 0x0 };
     24 
     25 /**
     26   Validate UEFI-OpenSSL pseudorandom number generator interfaces.
     27 
     28   @retval  EFI_SUCCESS  Validation succeeded.
     29   @retval  EFI_ABORTED  Validation failed.
     30 
     31 **/
     32 EFI_STATUS
     33 ValidateCryptPrng (
     34   VOID
     35   )
     36 {
     37   UINTN    Index;
     38   BOOLEAN  Status;
     39 
     40   Print (L" \nUEFI-OpenSSL PRNG Engine Testing:\n");
     41 
     42   Print (L"- Random Generation...");
     43 
     44   Status = RandomSeed (SeedString, sizeof (SeedString));
     45   if (!Status) {
     46     Print (L"[Fail]");
     47     return EFI_ABORTED;
     48   }
     49 
     50   for (Index = 0; Index < 10; Index ++) {
     51     Status = RandomBytes (RandomBuffer, RANDOM_NUMBER_SIZE);
     52     if (!Status) {
     53       Print (L"[Fail]");
     54       return EFI_ABORTED;
     55     }
     56 
     57     if (CompareMem (PreviousRandomBuffer, RandomBuffer, RANDOM_NUMBER_SIZE) == 0) {
     58       Print (L"[Fail]");
     59       return EFI_ABORTED;
     60     }
     61 
     62     CopyMem (PreviousRandomBuffer, RandomBuffer, RANDOM_NUMBER_SIZE);
     63   }
     64 
     65   Print (L"[Pass]\n");
     66 
     67   return EFI_SUCCESS;
     68 
     69 }
     70