/** @file
  Application for Cryptographic Primitives Validation.

Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#pragma once

#include <PiPei.h>
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/DebugLib.h>
#include <Library/UnitTestLib.h>
#include <Library/PrintLib.h>
#include <Library/BaseCryptLib.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/MemoryAllocationLib.h>
// #include <UnitTestTypes.h>
#include <Library/UnitTestLib.h>
// #include <Library/UnitTestAssertLib.h>

#define UNIT_TEST_NAME     "BaseCryptLib Unit Test"
#define UNIT_TEST_VERSION  "1.0"

typedef struct {
  CHAR8                     *Description;
  CHAR8                     *ClassName;
  UNIT_TEST_FUNCTION        Func;
  UNIT_TEST_PREREQUISITE    PreReq;
  UNIT_TEST_CLEANUP         CleanUp;
  UNIT_TEST_CONTEXT         Context;
} TEST_DESC;

typedef struct {
  CHAR8                       *Title;
  CHAR8                       *Package;
  UNIT_TEST_SUITE_SETUP       Sup;
  UNIT_TEST_SUITE_TEARDOWN    Tdn;
  UINTN                       *TestNum;
  TEST_DESC                   *TestDesc;
} SUITE_DESC;

extern UINTN      mPkcs7EkuTestNum;
extern TEST_DESC  mPkcs7EkuTest[];

extern UINTN      mHashTestNum;
extern TEST_DESC  mHashTest[];

extern UINTN      mHmacTestNum;
extern TEST_DESC  mHmacTest[];

extern UINTN      mBlockCipherTestNum;
extern TEST_DESC  mBlockCipherTest[];

extern UINTN      mRsaTestNum;
extern TEST_DESC  mRsaTest[];

extern UINTN      mRsaCertTestNum;
extern TEST_DESC  mRsaCertTest[];

extern UINTN      mPkcs7TestNum;
extern TEST_DESC  mPkcs7Test[];

extern UINTN      mPkcs5TestNum;
extern TEST_DESC  mPkcs5Test[];

extern UINTN      mAuthenticodeTestNum;
extern TEST_DESC  mAuthenticodeTest[];

extern UINTN      mImageTimestampTestNum;
extern TEST_DESC  mImageTimestampTest[];

extern UINTN      mDhTestNum;
extern TEST_DESC  mDhTest[];

extern UINTN      mPrngTestNum;
extern TEST_DESC  mPrngTest[];

extern UINTN      mOaepTestNum;
extern TEST_DESC  mOaepTest[];

extern UINTN      mRsaPssTestNum;
extern TEST_DESC  mRsaPssTest[];

extern UINTN      mHkdfTestNum;
extern TEST_DESC  mHkdfTest[];

extern UINTN      mAeadAesGcmTestNum;
extern TEST_DESC  mAeadAesGcmTest[];

extern UINTN      mBnTestNum;
extern TEST_DESC  mBnTest[];

extern UINTN      mEcTestNum;
extern TEST_DESC  mEcTest[];

extern UINTN      mX509TestNum;
extern TEST_DESC  mX509Test[];

extern UINTN      mPkcs7ContentTestNum;
extern TEST_DESC  mPkcs7ContentTest[];

//
// Test Case only for MbedTls.
//
extern UINTN      mPkcs7EkuTestMbedTlsNum;
extern TEST_DESC  mPkcs7EkuTestMbedTls[];

extern UINTN      mRsaTestMbedTlsNum;
extern TEST_DESC  mRsaTestMbedTls[];

extern UINTN      mPkcs7TestMbedTlsNum;
extern TEST_DESC  mPkcs7TestMbedTls[];

extern UINTN      mOaepTestMbedTlsNum;
extern TEST_DESC  mOaepTestMbedTls[];

extern UINTN      mPkcs7ContentTestMbedTlsNum;
extern TEST_DESC  mPkcs7ContentTestMbedTls[];

/** Creates a framework you can use */
EFI_STATUS
EFIAPI
CreateUnitTest (
  IN     CHAR8                       *UnitTestName,
  IN     CHAR8                       *UnitTestVersion,
  IN OUT UNIT_TEST_FRAMEWORK_HANDLE  *Framework
  );

/**
  Validate UEFI-OpenSSL DH Interfaces.

  @retval  EFI_SUCCESS  Validation succeeded.
  @retval  EFI_ABORTED  Validation failed.

**/
EFI_STATUS
ValidateCryptDh (
  VOID
  );

/**
  Validate UEFI-OpenSSL pseudorandom number generator interfaces.

  @retval  EFI_SUCCESS  Validation succeeded.
  @retval  EFI_ABORTED  Validation failed.

**/
EFI_STATUS
ValidateCryptPrng (
  VOID
  );

/**
  Initialize the unit test framework, suite, and unit tests for the
  sample unit tests and run the unit tests.

  @retval  EFI_SUCCESS           All test cases were dispatched.
  @retval  EFI_OUT_OF_RESOURCES  There are not enough resources available to
                                 initialize the unit tests.
**/
EFI_STATUS
EFIAPI
UefiTestMain (
  VOID
  );
