/** @file
  Application for Diffie-Hellman Primitives Validation.

Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2026, Arm Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#include "TestBaseCryptLib.h"

#define EC_CURVE_NUM_SUPPORTED  3
UINTN  EcCurveList[EC_CURVE_NUM_SUPPORTED]   = { CRYPTO_NID_SECP256R1, CRYPTO_NID_SECP384R1, CRYPTO_NID_SECP521R1 };
UINTN  EcKeyHalfSize[EC_CURVE_NUM_SUPPORTED] = { 32, 48, 66 };

struct Generator {
  UINT8    X[66];
  UINT8    Y[66];
};

// Generator points of all ec curve
struct Generator  EcCurveGenerator[EC_CURVE_NUM_SUPPORTED] =
{
  // CRYPTO_NID_SECP256R1
  {
    { 0x6B, 0x17, 0xD1, 0xF2, 0xE1, 0x2C, 0x42, 0x47, 0xF8, 0xBC, 0xE6, 0xE5,
      0x63, 0xA4, 0x40, 0xF2, 0x77, 0x03, 0x7D, 0x81, 0x2D, 0xEB, 0x33, 0xA0,
      0xF4, 0xA1, 0x39, 0x45, 0xD8, 0x98, 0xC2, 0x96 },

    { 0x4f, 0xe3, 0x42, 0xe2, 0xfe, 0x1a, 0x7f, 0x9b, 0x8e, 0xe7, 0xeb, 0x4a,
      0x7c, 0x0f, 0x9e, 0x16, 0x2b, 0xce, 0x33, 0x57, 0x6b, 0x31, 0x5e, 0xce,
      0xcb, 0xb6, 0x40, 0x68, 0x37, 0xbf, 0x51, 0xf5 }
  },
  // CRYPTO_NID_SECP384R1
  {
    { 0xAA, 0x87, 0xCA, 0x22, 0xBE, 0x8B, 0x05, 0x37, 0x8E, 0xB1, 0xC7, 0x1E,
      0xF3, 0x20, 0xAD, 0x74, 0x6E, 0x1D, 0x3B, 0x62, 0x8B, 0xA7, 0x9B, 0x98,
      0x59, 0xF7, 0x41, 0xE0, 0x82, 0x54, 0x2A, 0x38, 0x55, 0x02, 0xF2, 0x5D,
      0xBF, 0x55, 0x29, 0x6C, 0x3A, 0x54, 0x5E, 0x38, 0x72, 0x76, 0x0A, 0xB7 },

    { 0x36, 0x17, 0xde, 0x4a, 0x96, 0x26, 0x2c, 0x6f, 0x5d, 0x9e, 0x98, 0xbf,
      0x92, 0x92, 0xdc, 0x29, 0xf8, 0xf4, 0x1d, 0xbd, 0x28, 0x9a, 0x14, 0x7c,
      0xe9, 0xda, 0x31, 0x13, 0xb5, 0xf0, 0xb8, 0xc0, 0x0a, 0x60, 0xb1, 0xce,
      0x1d, 0x7e, 0x81, 0x9d, 0x7a, 0x43, 0x1d, 0x7c, 0x90, 0xea, 0x0e, 0x5f }
  },
  // CRYPTO_NID_SECP521R1
  {
    { 0x00, 0xC6, 0x85, 0x8E, 0x06, 0xB7, 0x04, 0x04, 0xE9, 0xCD, 0x9E, 0x3E,
      0xCB, 0x66, 0x23, 0x95, 0xB4, 0x42, 0x9C, 0x64, 0x81, 0x39, 0x05, 0x3F,
      0xB5, 0x21, 0xF8, 0x28, 0xAF, 0x60, 0x6B, 0x4D, 0x3D, 0xBA, 0xA1, 0x4B,
      0x5E, 0x77, 0xEF, 0xE7, 0x59, 0x28, 0xFE, 0x1D, 0xC1, 0x27, 0xA2, 0xFF,
      0xA8, 0xDE, 0x33, 0x48, 0xB3, 0xC1, 0x85, 0x6A, 0x42, 0x9B, 0xF9, 0x7E,
      0x7E, 0x31, 0xC2, 0xE5, 0xBD, 0x66 },

    { 0x01, 0x18, 0x39, 0x29, 0x6a, 0x78, 0x9a, 0x3b, 0xc0, 0x04, 0x5c, 0x8a,
      0x5f, 0xb4, 0x2c, 0x7d, 0x1b, 0xd9, 0x98, 0xf5, 0x44, 0x49, 0x57, 0x9b,
      0x44, 0x68, 0x17, 0xaf, 0xbd, 0x17, 0x27, 0x3e, 0x66, 0x2c, 0x97, 0xee,
      0x72, 0x99, 0x5e, 0xf4, 0x26, 0x40, 0xc5, 0x50, 0xb9, 0x01, 0x3f, 0xad,
      0x07, 0x61, 0x35, 0x3c, 0x70, 0x86, 0xa2, 0x72, 0xc2, 0x40, 0x88, 0xbe,
      0x94, 0x76, 0x9f, 0xd1, 0x66, 0x50 }
  }
};

//
// Root CA X509 Certificate for X509 Verification Routine (Generated by OpenSSL utility).
//
GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8  mEccTestRootCer[] = {
  0x30, 0x82, 0x01, 0xd2, 0x30, 0x82, 0x01, 0x77, 0xa0, 0x03, 0x02, 0x01,
  0x02, 0x02, 0x09, 0x00, 0xcc, 0x10, 0x45, 0x50, 0xaf, 0x50, 0x1b, 0xe2,
  0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02,
  0x30, 0x45, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
  0x02, 0x41, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08,
  0x0c, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65,
  0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49,
  0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x57, 0x69, 0x64, 0x67,
  0x69, 0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74, 0x64, 0x30,
  0x1e, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x32, 0x32, 0x37, 0x31, 0x32, 0x30,
  0x32, 0x31, 0x30, 0x5a, 0x17, 0x0d, 0x33, 0x30, 0x30, 0x32, 0x32, 0x34,
  0x31, 0x32, 0x30, 0x32, 0x31, 0x30, 0x5a, 0x30, 0x45, 0x31, 0x0b, 0x30,
  0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41, 0x55, 0x31, 0x13,
  0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0a, 0x53, 0x6f, 0x6d,
  0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x21, 0x30, 0x1f, 0x06,
  0x03, 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
  0x65, 0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 0x69, 0x74, 0x73, 0x20, 0x50,
  0x74, 0x79, 0x20, 0x4c, 0x74, 0x64, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07,
  0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48,
  0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x11, 0xa4, 0x06,
  0x65, 0xb6, 0x79, 0x6e, 0x72, 0xb6, 0xd8, 0x09, 0x84, 0x92, 0x86, 0x11,
  0x09, 0xde, 0xea, 0xd0, 0x0c, 0x60, 0xf1, 0x8a, 0xff, 0x7c, 0xde, 0xce,
  0xec, 0x07, 0xba, 0xa5, 0xb8, 0xd5, 0x17, 0xe5, 0x62, 0x33, 0x2d, 0x88,
  0xb1, 0x9a, 0xe6, 0xf3, 0x09, 0x43, 0x0e, 0xa9, 0xf7, 0x3c, 0xe9, 0x20,
  0xba, 0xbd, 0xb1, 0x3c, 0x03, 0x89, 0x1e, 0x2a, 0xff, 0x6e, 0x08, 0xff,
  0x2e, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e,
  0x04, 0x16, 0x04, 0x14, 0x62, 0xe6, 0xd9, 0xa0, 0xee, 0x38, 0x18, 0x83,
  0xfa, 0xe3, 0xed, 0x44, 0xa4, 0x37, 0xfd, 0x4a, 0x04, 0xdf, 0xe1, 0xd5,
  0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80,
  0x14, 0x62, 0xe6, 0xd9, 0xa0, 0xee, 0x38, 0x18, 0x83, 0xfa, 0xe3, 0xed,
  0x44, 0xa4, 0x37, 0xfd, 0x4a, 0x04, 0xdf, 0xe1, 0xd5, 0x30, 0x0c, 0x06,
  0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30,
  0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03,
  0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0x99, 0x2f, 0x43, 0xeb, 0xdc,
  0x4e, 0x53, 0xc7, 0xc1, 0xbd, 0xed, 0x95, 0xdc, 0xae, 0xd3, 0x75, 0xfa,
  0xc4, 0xf7, 0xa4, 0x61, 0x00, 0x57, 0xce, 0xf3, 0xe0, 0x23, 0xf6, 0xf0,
  0x41, 0x6f, 0xb5, 0x02, 0x21, 0x00, 0xf3, 0x97, 0x11, 0x06, 0x61, 0x10,
  0xc7, 0x35, 0xe9, 0xf8, 0x3b, 0x59, 0xec, 0xf5, 0x51, 0xa0, 0xa6, 0x64,
  0x6e, 0xe1, 0x44, 0xc7, 0xe1, 0xa2, 0xce, 0x90, 0x7f, 0xae, 0xad, 0xf4,
  0xa9, 0xfa,
};

//
// PEM key data for EC Private key Retrieving. (Generated by OpenSSL utility).
//
GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT8  mEccTestPemKey[] = {
  0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x45,
  0x43, 0x20, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x53,
  0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x42, 0x67, 0x67, 0x71, 0x68, 0x6b,
  0x6a, 0x4f, 0x50, 0x51, 0x4d, 0x42, 0x42, 0x77, 0x3d, 0x3d, 0x0a, 0x2d,
  0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x45, 0x43, 0x20, 0x50,
  0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x53, 0x2d, 0x2d, 0x2d,
  0x2d, 0x2d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49,
  0x4e, 0x20, 0x45, 0x43, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45,
  0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x48,
  0x63, 0x43, 0x41, 0x51, 0x45, 0x45, 0x49, 0x4d, 0x4a, 0x54, 0x69, 0x75,
  0x34, 0x56, 0x54, 0x54, 0x57, 0x68, 0x78, 0x4b, 0x62, 0x51, 0x65, 0x78,
  0x6e, 0x30, 0x43, 0x58, 0x41, 0x77, 0x33, 0x44, 0x57, 0x6b, 0x6f, 0x78,
  0x79, 0x77, 0x6b, 0x7a, 0x46, 0x50, 0x62, 0x32, 0x48, 0x68, 0x5a, 0x6e,
  0x5a, 0x52, 0x6f, 0x41, 0x6f, 0x47, 0x43, 0x43, 0x71, 0x47, 0x53, 0x4d,
  0x34, 0x39, 0x0a, 0x41, 0x77, 0x45, 0x48, 0x6f, 0x55, 0x51, 0x44, 0x51,
  0x67, 0x41, 0x45, 0x45, 0x61, 0x51, 0x47, 0x5a, 0x62, 0x5a, 0x35, 0x62,
  0x6e, 0x4b, 0x32, 0x32, 0x41, 0x6d, 0x45, 0x6b, 0x6f, 0x59, 0x52, 0x43,
  0x64, 0x37, 0x71, 0x30, 0x41, 0x78, 0x67, 0x38, 0x59, 0x72, 0x2f, 0x66,
  0x4e, 0x37, 0x4f, 0x37, 0x41, 0x65, 0x36, 0x70, 0x62, 0x6a, 0x56, 0x46,
  0x2b, 0x56, 0x69, 0x4d, 0x79, 0x32, 0x49, 0x0a, 0x73, 0x5a, 0x72, 0x6d,
  0x38, 0x77, 0x6c, 0x44, 0x44, 0x71, 0x6e, 0x33, 0x50, 0x4f, 0x6b, 0x67,
  0x75, 0x72, 0x32, 0x78, 0x50, 0x41, 0x4f, 0x4a, 0x48, 0x69, 0x72, 0x2f,
  0x62, 0x67, 0x6a, 0x2f, 0x4c, 0x67, 0x3d, 0x3d, 0x0a, 0x2d, 0x2d, 0x2d,
  0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x45, 0x43, 0x20, 0x50, 0x52, 0x49,
  0x56, 0x41, 0x54, 0x45, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d,
  0x2d, 0x0a,
};

//
// Payload for PKCS#7 Signing & Verification Validation.
//
CONST CHAR8  *mEcPayload = "payload data for PKCS#7 EC Signing";

VOID  *Ec1;
VOID  *Ec2;
VOID  *Group;
VOID  *Point1;
VOID  *Point2;
VOID  *PointRes;
VOID  *BnX;
VOID  *BnY;
VOID  *BnP;
VOID  *BnOrder;

UNIT_TEST_STATUS
EFIAPI
TestVerifyEcPreReq (
  UNIT_TEST_CONTEXT  Context
  )
{
  Ec1      = NULL;
  Ec2      = NULL;
  Group    = NULL;
  Point1   = NULL;
  Point2   = NULL;
  PointRes = NULL;
  BnX      = NULL;
  BnY      = NULL;
  BnP      = BigNumInit ();
  BnOrder  = BigNumInit ();
  if ((BnP == NULL) || (BnOrder == NULL)) {
    return UNIT_TEST_ERROR_TEST_FAILED;
  }

  return UNIT_TEST_PASSED;
}

VOID
EFIAPI
TestVerifyEcCleanUp (
  UNIT_TEST_CONTEXT  Context
  )
{
  BigNumFree (BnX, TRUE);
  BigNumFree (BnY, TRUE);
  BigNumFree (BnP, TRUE);
  BigNumFree (BnOrder, TRUE);
  EcGroupFree (Group);
  EcPointDeInit (Point1, TRUE);
  EcPointDeInit (Point2, TRUE);
  EcPointDeInit (PointRes, TRUE);
  EcFree (Ec1);
  EcFree (Ec2);
}

UNIT_TEST_STATUS
EFIAPI
TestVerifyEcBasic (
  UNIT_TEST_CONTEXT  Context
  )
{
  UINTN    CurveCount;
  BOOLEAN  Status;

  //
  // Initialize BigNumbers
  //
  for (CurveCount = 0; CurveCount < EC_CURVE_NUM_SUPPORTED; CurveCount++) {
    //
    // Basic EC functions unit test
    //
    Group = EcGroupInit (EcCurveList[CurveCount]);
    if (Group == NULL) {
      return UNIT_TEST_ERROR_TEST_FAILED;
    }

    Point1   = EcPointInit (Group);
    Point2   = EcPointInit (Group);
    PointRes = EcPointInit (Group);
    BnX      = BigNumFromBin (EcCurveGenerator[CurveCount].X, EcKeyHalfSize[CurveCount]);
    BnY      = BigNumFromBin (EcCurveGenerator[CurveCount].Y, EcKeyHalfSize[CurveCount]);
    if ((Point1 == NULL) || (Point2 == NULL) || (PointRes == NULL) || (BnX == NULL) || (BnY == NULL)) {
      return UNIT_TEST_ERROR_TEST_FAILED;
    }

    Status = EcGroupGetCurve (Group, BnP, NULL, NULL, NULL);
    UT_ASSERT_TRUE (Status);

    Status = EcGroupGetOrder (Group, BnOrder);
    UT_ASSERT_TRUE (Status);

    // Point G should on curve
    Status = EcPointSetAffineCoordinates (Group, Point1, BnX, BnY, NULL);
    UT_ASSERT_TRUE (Status);

    Status = EcPointSetAffineCoordinates (Group, Point2, BnX, BnY, NULL);
    UT_ASSERT_TRUE (Status);

    Status = EcPointEqual (Group, Point1, Point2, NULL);
    UT_ASSERT_TRUE (Status);

    Status = EcPointIsOnCurve (Group, Point1, NULL);
    UT_ASSERT_TRUE (Status);

    Status = EcPointIsAtInfinity (Group, Point1);
    UT_ASSERT_FALSE (Status);

    // Point 2G should on curve
    Status = EcPointAdd (Group, PointRes, Point1, Point1, NULL);
    UT_ASSERT_TRUE (Status);

    Status = EcPointIsOnCurve (Group, PointRes, NULL);
    UT_ASSERT_TRUE (Status);

    // Point Order * G should at infinity
    Status = EcPointMul (Group, PointRes, Point1, BnOrder, NULL);
    UT_ASSERT_TRUE (Status);

    Status = EcPointIsAtInfinity (Group, PointRes);
    UT_ASSERT_TRUE (Status);

    // -(-G) == G
    Status = EcPointInvert (Group, Point2, NULL);
    UT_ASSERT_TRUE (Status);

    Status = EcPointEqual (Group, Point2, Point1, NULL);
    UT_ASSERT_FALSE (Status);

    Status = EcPointInvert (Group, Point2, NULL);
    UT_ASSERT_TRUE (Status);

    Status = EcPointEqual (Group, Point2, Point1, NULL);
    UT_ASSERT_TRUE (Status);

    // Compress point test
    Status = EcPointSetCompressedCoordinates (Group, Point1, BnX, 0, NULL);
    UT_ASSERT_TRUE (Status);

    Status = EcPointSetCompressedCoordinates (Group, Point2, BnX, 1, NULL);
    UT_ASSERT_TRUE (Status);

    Status = EcPointEqual (Group, Point2, Point1, NULL);
    UT_ASSERT_FALSE (Status);

    Status = EcPointInvert (Group, Point2, NULL);
    UT_ASSERT_TRUE (Status);

    Status = EcPointEqual (Group, Point2, Point1, NULL);
    UT_ASSERT_TRUE (Status);
  }

  return UNIT_TEST_PASSED;
}

UNIT_TEST_STATUS
EFIAPI
TestVerifyEcDh (
  UNIT_TEST_CONTEXT  Context
  )
{
  UINT8    Public1[66 * 2];
  UINTN    Public1Length;
  UINT8    Public2[66 * 2];
  UINTN    Public2Length;
  UINT8    Key1[66];
  UINTN    Key1Length;
  UINT8    Key2[66];
  UINTN    Key2Length;
  UINTN    CurveCount;
  BOOLEAN  Status;

  for (CurveCount = 0; CurveCount < EC_CURVE_NUM_SUPPORTED; CurveCount++) {
    //
    // Initial key length
    //
    Public1Length = sizeof (Public1);
    Public2Length = sizeof (Public2);
    Key1Length    = sizeof (Key1);
    Key2Length    = sizeof (Key2);
    //
    // ECDH functions unit test
    //
    Ec1 = EcNewByNid (EcCurveList[CurveCount]);
    if (Ec1 == NULL) {
      return UNIT_TEST_ERROR_TEST_FAILED;
    }

    Ec2 = EcNewByNid (EcCurveList[CurveCount]);
    if (Ec2 == NULL) {
      return UNIT_TEST_ERROR_TEST_FAILED;
    }

    Status = EcGenerateKey (Ec1, Public1, &Public1Length);
    UT_ASSERT_TRUE (Status);
    UT_ASSERT_EQUAL (Public1Length, EcKeyHalfSize[CurveCount] * 2);

    Status = EcGenerateKey (Ec2, Public2, &Public2Length);
    UT_ASSERT_TRUE (Status);
    UT_ASSERT_EQUAL (Public2Length, EcKeyHalfSize[CurveCount] * 2);

    Status = EcDhComputeKey (Ec1, Public2, Public2Length, NULL, Key1, &Key1Length);
    UT_ASSERT_TRUE (Status);
    UT_ASSERT_EQUAL (Key1Length, EcKeyHalfSize[CurveCount]);

    Status = EcDhComputeKey (Ec2, Public1, Public1Length, NULL, Key2, &Key2Length);
    UT_ASSERT_TRUE (Status);
    UT_ASSERT_EQUAL (Key2Length, EcKeyHalfSize[CurveCount]);

    UT_ASSERT_EQUAL (Key1Length, Key2Length);
    UT_ASSERT_MEM_EQUAL (Key1, Key2, Key1Length);

    Status = EcGetPubKey (Ec1, Public2, &Public2Length);
    UT_ASSERT_TRUE (Status);
    UT_ASSERT_EQUAL (Public2Length, EcKeyHalfSize[CurveCount] * 2);

    UT_ASSERT_EQUAL (Public1Length, Public2Length);
    UT_ASSERT_MEM_EQUAL (Public1, Public2, Public1Length);
  }

  return UNIT_TEST_PASSED;
}

UNIT_TEST_STATUS
EFIAPI
TestVerifyEcKey (
  UNIT_TEST_CONTEXT  Context
  )
{
  BOOLEAN  Status;
  VOID     *EcPrivKey;
  VOID     *EcPubKey;
  UINT8    HashValue[SHA256_DIGEST_SIZE];
  UINTN    HashSize;
  UINT8    Signature[66 * 2];
  UINTN    SigSize;

  //
  // Retrieve EC private key from PEM data.
  //
  Status = EcGetPrivateKeyFromPem (
             mEccTestPemKey,
             sizeof (mEccTestPemKey),
             NULL,
             &EcPrivKey
             );
  UT_ASSERT_TRUE (Status);

  //
  // Retrieve EC public key from X509 Certificate.
  //
  Status = EcGetPublicKeyFromX509 (
             mEccTestRootCer,
             sizeof (mEccTestRootCer),
             &EcPubKey
             );
  UT_ASSERT_TRUE (Status);

  //
  // Verify EC-DSA
  //
  HashSize = sizeof (HashValue);
  SigSize  = sizeof (Signature);
  //
  // EC-DSA Signing ...
  //
  Status = EcDsaSign (
             EcPrivKey,
             CRYPTO_NID_SHA256,
             HashValue,
             HashSize,
             Signature,
             &SigSize
             );
  UT_ASSERT_TRUE (Status);

  //
  // EC-DSA Verification ...
  //
  Status = EcDsaVerify (
             EcPubKey,
             CRYPTO_NID_SHA256,
             HashValue,
             HashSize,
             Signature,
             SigSize
             );
  UT_ASSERT_TRUE (Status);

  EcFree (EcPrivKey);
  EcFree (EcPubKey);

  return UNIT_TEST_PASSED;
}

UNIT_TEST_STATUS
EFIAPI
TestVerifyEcPublicKeyPem (
  UNIT_TEST_CONTEXT  Context
  )
{
  BOOLEAN  Status;
  VOID     *EcPubKey;
  VOID     *EcPubKeyFromPem;
  VOID     *EcNoKey;
  UINT8    *PemData;
  UINTN    PemSize;
  UINTN    RequiredPemSize;
  UINT8    PemSmall[1];
  UINTN    PublicKeySize;
  UINTN    PublicKeyFromPemSize;

  // For P-256, the PublicSize is 64. First 32-byte is X, Second 32-byte is Y.
  // For P-384, the PublicSize is 96. First 48-byte is X, Second 48-byte is Y.
  // For P-521, the PublicSize is 132. First 66-byte is X, Second 66-byte is Y.
  UINT8  PublicKeyFromPem[66 * 2];
  UINT8  PublicKey[66 * 2];

  EcPubKey        = NULL;
  EcPubKeyFromPem = NULL;
  EcNoKey         = NULL;
  PemData         = NULL;

  //
  // Retrieve EC public key context from X509 Certificate.
  //
  Status = EcGetPublicKeyFromX509 (
             mEccTestRootCer,
             sizeof (mEccTestRootCer),
             &EcPubKey
             );
  UT_ASSERT_TRUE (Status);
  UT_ASSERT_NOT_NULL (EcPubKey);

  //
  // Get the PEM data size.
  //
  PemSize = 0;
  Status  = EcPublicKeyToPEM (
              EcPubKey,
              NULL,
              &PemSize
              );
  UT_ASSERT_FALSE (Status);
  UT_ASSERT_TRUE (PemSize > 0);
  RequiredPemSize = PemSize;

  //
  // Test for PEM size less than required size.
  //
  PemSize = sizeof (PemSmall);
  Status  = EcPublicKeyToPEM (
              EcPubKey,
              PemSmall,
              &PemSize
              );
  UT_ASSERT_FALSE (Status);
  UT_ASSERT_EQUAL (PemSize, RequiredPemSize);

  //
  // Test if EcContext is NULL.
  //
  Status = EcPublicKeyToPEM (
             NULL,
             PemSmall,
             &PemSize
             );
  UT_ASSERT_FALSE (Status);

  //
  // Test if PEM size passed is NULL.
  //
  Status = EcPublicKeyToPEM (
             EcPubKey,
             PemSmall,
             NULL
             );
  UT_ASSERT_FALSE (Status);

  //
  // Test a fresh EC context with no key (PEM data).
  //
  EcNoKey = EcNewByNid (CRYPTO_NID_SECP256R1);
  UT_ASSERT_NOT_NULL (EcNoKey);

  PemSize = 0;
  Status  = EcPublicKeyToPEM (
              EcNoKey,
              NULL,
              &PemSize
              );
  UT_ASSERT_FALSE (Status);
  UT_ASSERT_EQUAL (PemSize, 0);
  EcFree (EcNoKey);
  EcNoKey = NULL;

  //
  // Retrieve the PEM data.
  //
  PemSize = RequiredPemSize;
  PemData = AllocateZeroPool (PemSize);
  UT_ASSERT_NOT_NULL (PemData);
  Status = EcPublicKeyToPEM (
             EcPubKey,
             PemData,
             &PemSize
             );
  UT_ASSERT_TRUE (Status);
  UT_ASSERT_TRUE (PemSize > 0);

  //
  // Retrieve EC public key from PEM data.
  //
  Status = EcGetPublicKeyFromPem (
             PemData,
             PemSize,
             NULL,
             &EcPubKeyFromPem
             );
  UT_ASSERT_TRUE (Status);
  UT_ASSERT_NOT_NULL (EcPubKeyFromPem);

  //
  // Get the public key data from the EcPubKey.
  //
  PublicKeySize = sizeof (PublicKey);
  Status        = EcGetPubKey (
                    EcPubKey,
                    PublicKey,
                    &PublicKeySize
                    );
  UT_ASSERT_TRUE (Status);

  //
  // Get the public key data from the EcPubKeyFromPem.
  //
  PublicKeyFromPemSize = sizeof (PublicKeyFromPem);
  Status               = EcGetPubKey (
                           EcPubKeyFromPem,
                           PublicKeyFromPem,
                           &PublicKeyFromPemSize
                           );
  UT_ASSERT_TRUE (Status);

  //
  // Compare the key size and data for the public keys.
  //
  UT_ASSERT_EQUAL (PublicKeyFromPemSize, PublicKeySize);
  UT_ASSERT_MEM_EQUAL (PublicKeyFromPem, PublicKey, PublicKeySize);

  //
  // Test if PemData is NULL.
  //
  Status = EcGetPublicKeyFromPem (
             NULL,
             PemSize,
             NULL,
             &EcNoKey
             );
  UT_ASSERT_FALSE (Status);
  UT_ASSERT_EQUAL ((UINTN)EcNoKey, (UINTN)NULL);

  //
  // Test if EcContext is NULL.
  //
  Status = EcGetPublicKeyFromPem (
             PemData,
             PemSize,
             NULL,
             NULL
             );
  UT_ASSERT_FALSE (Status);

  //
  // Free the resources.
  //
  FreePool (PemData);
  EcFree (EcPubKey);
  EcFree (EcPubKeyFromPem);
  return UNIT_TEST_PASSED;
}

TEST_DESC  mEcTest[] = {
  //
  // -----Description-----------------Class------------------Function----Pre----Post----Context
  //
  { "TestVerifyEcBasic()",        "CryptoPkg.BaseCryptLib.Ec", TestVerifyEcBasic,        TestVerifyEcPreReq, TestVerifyEcCleanUp, NULL },
  { "TestVerifyEcDh()",           "CryptoPkg.BaseCryptLib.Ec", TestVerifyEcDh,           TestVerifyEcPreReq, TestVerifyEcCleanUp, NULL },
  { "TestVerifyEcKey()",          "CryptoPkg.BaseCryptLib.Ec", TestVerifyEcKey,          NULL,               NULL,                NULL },
  { "TestVerifyEcPublicKeyPem()", "CryptoPkg.BaseCryptLib.Ec", TestVerifyEcPublicKeyPem, NULL,               NULL,                NULL },
};

UINTN  mEcTestNum = ARRAY_SIZE (mEcTest);
