/** @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      mEdDsaTestNum;
extern TEST_DESC  mEdDsaTest[];

extern UINTN      mMlDsaTestNum;
extern TEST_DESC  mMlDsaTest[];

extern UINTN      mSlhDsaTestNum;
extern TEST_DESC  mSlhDsaTest[];

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
  );
