alder_lake_bios/Insyde/InsydeModulePkg/Universal/Security/CryptoServiceRuntimeDxe/CryptoServiceProtocol.c

211 lines
7.5 KiB
C

/** @file
CryptoService common function defination
;******************************************************************************
;* Copyright (c) 2012 - 2021, Insyde Software Corp. All Rights Reserved.
;*
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
;* transmit, broadcast, present, recite, release, license or otherwise exploit
;* any part of this publication in any form, by any means, without the prior
;* written permission of Insyde Software Corporation.
;*
;******************************************************************************
*/
#include <Uefi.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#include "CryptoHash.h"
#include "CryptoServiceProtocol.h"
/*
Setup CryptoService Protocol Functions
@parma ImageHandle Image Handle
@parma ProtocolServices Protocol Services Interface
@parma ByProtocol @TRUE, the CryptoService protocol will replace with HashProtocol and CryptoService.
@FALSE, it will be put driver's function.
@parma HashProtocol Replace Hash protocol
@parma HashProtocol Replace Hash2 protocol
@parma CryptoService Replace CryptoService protocol
*/
VOID
SetupCryptoService (
IN EFI_HANDLE ImageHandle,
IN OUT CRYPTO_SERVICE *ProtocolServices,
IN BOOLEAN ByProtocol,
IN EFI_HASH_PROTOCOL *HashProtocol,
IN EFI_HASH2_PROTOCOL *Hash2Protocol,
IN CRYPTO_SERVICES_PROTOCOL *CryptoProtocol,
IN CRYPTO_SERVICES2_PROTOCOL *Crypto2Protocol
)
{
EFI_HASH_PROTOCOL *Hash;
EFI_HASH2_PROTOCOL *Hash2;
CRYPTO_SERVICES_PROTOCOL *Crypto;
CRYPTO_SERVICES2_PROTOCOL *Crypto2;
if (ByProtocol) {
if ((HashProtocol == NULL) || (CryptoProtocol == NULL) || (Crypto2Protocol == NULL)) {
ASSERT_EFI_ERROR (EFI_INVALID_PARAMETER);
return;
}
}
ZeroMem (ProtocolServices, sizeof (CRYPTO_SERVICE));
Crypto = &(ProtocolServices->CryptoServiceProtocol);
Crypto2 = &(ProtocolServices->CryptoService2Protocol);
Hash = &(ProtocolServices->HashInstance.HashProtocol);
Hash2 = &(ProtocolServices->Hash2Instance.Hash2Protocol);
ProtocolServices->Signature = CRYPTO_SERVICE_SIGNATURE;
ProtocolServices->Handle = ImageHandle;
ProtocolServices->HashInstance.Signature = CRYPTO_HASH_SIGNATURE;
ProtocolServices->HashInstance.IsRoot = TRUE;
ProtocolServices->Hash2Instance.Signature = HASH2_INSTANCE_DATA_SIGNATURE;
ProtocolServices->Hash2Instance.IsRoot = TRUE;
ProtocolServices->CryptoService2Protocol.Size = sizeof (CRYPTO_SERVICES2_PROTOCOL);
//
// Hash Protocol Initial
//
Hash->GetHashSize = (!ByProtocol) ? CryptGetHashSize : HashProtocol->GetHashSize;
Hash->Hash = (!ByProtocol) ? CryptHash : HashProtocol->Hash;
//
// Hash2 Protocol Initial
//
Hash2->GetHashSize = (!ByProtocol) ? BaseCrypto2GetHashSize : Hash2Protocol->GetHashSize;
Hash2->Hash = (!ByProtocol) ? BaseCrypto2Hash : Hash2Protocol->Hash;
Hash2->HashInit = (!ByProtocol) ? BaseCrypto2HashInit : Hash2Protocol->HashInit;
Hash2->HashUpdate = (!ByProtocol) ? BaseCrypto2HashUpdate : Hash2Protocol->HashUpdate;
Hash2->HashFinal = (!ByProtocol) ? BaseCrypto2HashFinal : Hash2Protocol->HashFinal;
//
// Crytpto Services Protocol Initial
//
SET_CRYPTO_FUNCTION (Sha1GetContextSize);
SET_CRYPTO_FUNCTION (Sha1Init);
SET_CRYPTO_FUNCTION (Sha1Duplicate);
SET_CRYPTO_FUNCTION (Sha1Update);
SET_CRYPTO_FUNCTION (Sha1Final);
SET_CRYPTO_FUNCTION (HmacSha1GetContextSize);
SET_CRYPTO_FUNCTION (HmacSha1Init);
SET_CRYPTO_FUNCTION (HmacSha1Duplicate);
SET_CRYPTO_FUNCTION (HmacSha1Update);
SET_CRYPTO_FUNCTION (HmacSha1Final);
SET_CRYPTO_FUNCTION (TdesGetContextSize);
SET_CRYPTO_FUNCTION (TdesInit);
SET_CRYPTO_FUNCTION (TdesEcbEncrypt);
SET_CRYPTO_FUNCTION (TdesEcbDecrypt);
SET_CRYPTO_FUNCTION (TdesCbcEncrypt);
SET_CRYPTO_FUNCTION (TdesCbcDecrypt);
SET_CRYPTO_FUNCTION (AesGetContextSize);
SET_CRYPTO_FUNCTION (AesInit);
SET_CRYPTO_FUNCTION (AesEcbEncrypt);
SET_CRYPTO_FUNCTION (AesEcbDecrypt);
SET_CRYPTO_FUNCTION (AesCbcEncrypt);
SET_CRYPTO_FUNCTION (AesCbcDecrypt);
SET_CRYPTO_FUNCTION (RsaNew);
SET_CRYPTO_FUNCTION (RsaFree);
SET_CRYPTO_FUNCTION (RsaGetKey);
SET_CRYPTO_FUNCTION (RsaSetKey);
SET_CRYPTO_FUNCTION (RsaPkcs1Sign);
SET_CRYPTO_FUNCTION (RsaPkcs1Verify);
SET_CRYPTO_FUNCTION (Pkcs7Verify);
SET_CRYPTO_FUNCTION (Pkcs7VerifyUsingPubKey);
SET_CRYPTO_FUNCTION (RsaGetPrivateKeyFromPem);
SET_CRYPTO_FUNCTION (RsaGetPublicKeyFromX509);
SET_CRYPTO_FUNCTION (X509GetSubjectName);
SET_CRYPTO_FUNCTION (X509VerifyCert);
SET_CRYPTO_FUNCTION (DhNew);
SET_CRYPTO_FUNCTION (DhFree);
SET_CRYPTO_FUNCTION (DhGenerateParameter);
SET_CRYPTO_FUNCTION (DhSetParameter);
SET_CRYPTO_FUNCTION (DhGenerateKey);
SET_CRYPTO_FUNCTION (DhComputeKey);
SET_CRYPTO_FUNCTION (RandomSeed);
SET_CRYPTO_FUNCTION (RandomBytes);
SET_CRYPTO_FUNCTION (AuthenticodeVerify);
SET_CRYPTO_FUNCTION (Pkcs7GetSigners);
SET_CRYPTO_FUNCTION (Pkcs7FreeSigners);
SET_CRYPTO_FUNCTION (RsaPkcs1Decrypt);
SET_CRYPTO_FUNCTION (X509GetIssuerName);
SET_CRYPTO_FUNCTION (ImageTimestampVerify);
SET_CRYPTO_FUNCTION (X509GetTBSCert);
SET_CRYPTO_FUNCTION (HmacSha256GetContextSize);
SET_CRYPTO_FUNCTION (HmacSha256Init);
SET_CRYPTO_FUNCTION (HmacSha256Duplicate);
SET_CRYPTO_FUNCTION (HmacSha256Update);
SET_CRYPTO_FUNCTION (HmacSha256Final);
SET_CRYPTO_FUNCTION (Pkcs7GetCertificatesList);
SET_CRYPTO_FUNCTION (Pbkdf2CreateKey);
SET_CRYPTO_FUNCTION (Sm3GetContextSize);
SET_CRYPTO_FUNCTION (Sm3Init);
SET_CRYPTO_FUNCTION (Sm3Duplicate);
SET_CRYPTO_FUNCTION (Sm3Update);
SET_CRYPTO_FUNCTION (Sm3Final);
SET_CRYPTO_FUNCTION (RsaPkcs1Encrypt);
SET_CRYPTO_FUNCTION (RsaPkcs1OaepEncrypt);
SET_CRYPTO_FUNCTION (RsaPkcs1OaepDecrypt);
SET_CRYPTO_FUNCTION (RsaPkcs1PssVerify);
SET_CRYPTO_FUNCTION (HkdfExtractAndExpand);
SET_CRYPTO_FUNCTION (X509GetCaCertificateFromPemToDer);
SET_CRYPTO_FUNCTION (X509GetSubjectNameEx);
SET_CRYPTO_FUNCTION (X509GetIssuerNameEx);
SET_CRYPTO_FUNCTION (HmacMd5New);
SET_CRYPTO_FUNCTION (HmacMd5Free);
SET_CRYPTO_FUNCTION (HmacSha1New);
SET_CRYPTO_FUNCTION (HmacSha1Free);
SET_CRYPTO_FUNCTION (HmacSha256New);
SET_CRYPTO_FUNCTION (HmacSha256Free);
SET_CRYPTO_FUNCTION (EccNewKey);
SET_CRYPTO_FUNCTION (EccFree);
SET_CRYPTO_FUNCTION (EccSetKey);
SET_CRYPTO_FUNCTION (EcdsaVerify);
SET_CRYPTO_FUNCTION (Sha256GetContextSize);
SET_CRYPTO_FUNCTION (Sha256Init);
SET_CRYPTO_FUNCTION (Sha256Duplicate);
SET_CRYPTO_FUNCTION (Sha256Update);
SET_CRYPTO_FUNCTION (Sha256Final);
SET_CRYPTO_FUNCTION (Sha384GetContextSize);
SET_CRYPTO_FUNCTION (Sha384Init);
SET_CRYPTO_FUNCTION (Sha384Duplicate);
SET_CRYPTO_FUNCTION (Sha384Update);
SET_CRYPTO_FUNCTION (Sha384Final);
SET_CRYPTO_FUNCTION (Sha512GetContextSize);
SET_CRYPTO_FUNCTION (Sha512Init);
SET_CRYPTO_FUNCTION (Sha512Duplicate);
SET_CRYPTO_FUNCTION (Sha512Update);
SET_CRYPTO_FUNCTION (Sha512Final);
SET_CRYPTO_FUNCTION (RsaPssVerify);
SET_CRYPTO_FUNCTION (RsaPssSign);
SET_CRYPTO_FUNCTION (HashDataUsingPkc7DataHashType);
SET_CRYPTO_FUNCTION (Pkcs7VerifyUsingHash);
}