CryptoPkg: Add Null functions for building pass
Add Null functions to build. These feature are not supported now. REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4177 Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Yi Li <yi1.li@intel.com> Cc: Xiaoyu Lu <xiaoyu1.lu@intel.com> Cc: Guomin Jiang <guomin.jiang@intel.com> Signed-off-by: Wenxing Hou <wenxing.hou@intel.com> Reviewed-by: Yi Li <yi1.li@intel.com>
This commit is contained in:
committed by
mergify[bot]
parent
b26f7dfe29
commit
4049ca493c
@@ -0,0 +1,45 @@
|
||||
/** @file
|
||||
Authenticode Portable Executable Signature Verification which does not provide
|
||||
real capabilities.
|
||||
|
||||
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "InternalCryptLib.h"
|
||||
|
||||
/**
|
||||
Verifies the validity of a PE/COFF Authenticode Signature as described in "Windows
|
||||
Authenticode Portable Executable Signature Format".
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in] AuthData Pointer to the Authenticode Signature retrieved from signed
|
||||
PE/COFF image to be verified.
|
||||
@param[in] DataSize Size of the Authenticode Signature in bytes.
|
||||
@param[in] TrustedCert Pointer to a trusted/root certificate encoded in DER, which
|
||||
is used for certificate chain verification.
|
||||
@param[in] CertSize Size of the trusted certificate in bytes.
|
||||
@param[in] ImageHash Pointer to the original image file hash value. The procedure
|
||||
for calculating the image hash value is described in Authenticode
|
||||
specification.
|
||||
@param[in] HashSize Size of Image hash value in bytes.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
AuthenticodeVerify (
|
||||
IN CONST UINT8 *AuthData,
|
||||
IN UINTN DataSize,
|
||||
IN CONST UINT8 *TrustedCert,
|
||||
IN UINTN CertSize,
|
||||
IN CONST UINT8 *ImageHash,
|
||||
IN UINTN HashSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
150
CryptoPkg/Library/BaseCryptLibMbedTls/Pk/CryptDhNull.c
Normal file
150
CryptoPkg/Library/BaseCryptLibMbedTls/Pk/CryptDhNull.c
Normal file
@@ -0,0 +1,150 @@
|
||||
/** @file
|
||||
Diffie-Hellman Wrapper Implementation which does not provide
|
||||
real capabilities.
|
||||
|
||||
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "InternalCryptLib.h"
|
||||
|
||||
/**
|
||||
Allocates and Initializes one Diffie-Hellman Context for subsequent use.
|
||||
|
||||
@return Pointer to the Diffie-Hellman Context that has been initialized.
|
||||
If the interface is not supported, DhNew() returns NULL.
|
||||
|
||||
**/
|
||||
VOID *
|
||||
EFIAPI
|
||||
DhNew (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
Release the specified DH context.
|
||||
|
||||
If the interface is not supported, then ASSERT().
|
||||
|
||||
@param[in] DhContext Pointer to the DH context to be released.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
DhFree (
|
||||
IN VOID *DhContext
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
Generates DH parameter.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in, out] DhContext Pointer to the DH context.
|
||||
@param[in] Generator Value of generator.
|
||||
@param[in] PrimeLength Length in bits of prime to be generated.
|
||||
@param[out] Prime Pointer to the buffer to receive the generated prime number.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
DhGenerateParameter (
|
||||
IN OUT VOID *DhContext,
|
||||
IN UINTN Generator,
|
||||
IN UINTN PrimeLength,
|
||||
OUT UINT8 *Prime
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Sets generator and prime parameters for DH.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in, out] DhContext Pointer to the DH context.
|
||||
@param[in] Generator Value of generator.
|
||||
@param[in] PrimeLength Length in bits of prime to be generated.
|
||||
@param[in] Prime Pointer to the prime number.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
DhSetParameter (
|
||||
IN OUT VOID *DhContext,
|
||||
IN UINTN Generator,
|
||||
IN UINTN PrimeLength,
|
||||
IN CONST UINT8 *Prime
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Generates DH public key.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in, out] DhContext Pointer to the DH context.
|
||||
@param[out] PublicKey Pointer to the buffer to receive generated public key.
|
||||
@param[in, out] PublicKeySize On input, the size of PublicKey buffer in bytes.
|
||||
On output, the size of data returned in PublicKey buffer in bytes.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
DhGenerateKey (
|
||||
IN OUT VOID *DhContext,
|
||||
OUT UINT8 *PublicKey,
|
||||
IN OUT UINTN *PublicKeySize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Computes exchanged common key.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in, out] DhContext Pointer to the DH context.
|
||||
@param[in] PeerPublicKey Pointer to the peer's public key.
|
||||
@param[in] PeerPublicKeySize Size of peer's public key in bytes.
|
||||
@param[out] Key Pointer to the buffer to receive generated key.
|
||||
@param[in, out] KeySize On input, the size of Key buffer in bytes.
|
||||
On output, the size of data returned in Key buffer in bytes.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
DhComputeKey (
|
||||
IN OUT VOID *DhContext,
|
||||
IN CONST UINT8 *PeerPublicKey,
|
||||
IN UINTN PeerPublicKeySize,
|
||||
OUT UINT8 *Key,
|
||||
IN OUT UINTN *KeySize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
578
CryptoPkg/Library/BaseCryptLibMbedTls/Pk/CryptEcNull.c
Normal file
578
CryptoPkg/Library/BaseCryptLibMbedTls/Pk/CryptEcNull.c
Normal file
@@ -0,0 +1,578 @@
|
||||
/** @file
|
||||
Elliptic Curve and ECDH API implementation based on MbedTLS
|
||||
|
||||
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include <Library/BaseCryptLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
|
||||
/**
|
||||
Initialize new opaque EcGroup object. This object represents an EC curve and
|
||||
and is used for calculation within this group. This object should be freed
|
||||
using EcGroupFree() function.
|
||||
|
||||
@param[in] CryptoNid Identifying number for the ECC curve (Defined in
|
||||
BaseCryptLib.h).
|
||||
|
||||
@retval EcGroup object On success.
|
||||
@retval NULL On failure.
|
||||
**/
|
||||
VOID *
|
||||
EFIAPI
|
||||
EcGroupInit (
|
||||
IN UINTN CryptoNid
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
Get EC curve parameters. While elliptic curve equation is Y^2 mod P = (X^3 + AX + B) Mod P.
|
||||
This function will set the provided Big Number objects to the corresponding
|
||||
values. The caller needs to make sure all the "out" BigNumber parameters
|
||||
are properly initialized.
|
||||
|
||||
@param[in] EcGroup EC group object.
|
||||
@param[out] BnPrime Group prime number.
|
||||
@param[out] BnA A coefficient.
|
||||
@param[out] BnB B coefficient..
|
||||
@param[in] BnCtx BN context.
|
||||
|
||||
@retval TRUE On success.
|
||||
@retval FALSE Otherwise.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcGroupGetCurve (
|
||||
IN CONST VOID *EcGroup,
|
||||
OUT VOID *BnPrime,
|
||||
OUT VOID *BnA,
|
||||
OUT VOID *BnB,
|
||||
IN VOID *BnCtx
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Get EC group order.
|
||||
This function will set the provided Big Number object to the corresponding
|
||||
value. The caller needs to make sure that the "out" BigNumber parameter
|
||||
is properly initialized.
|
||||
|
||||
@param[in] EcGroup EC group object.
|
||||
@param[out] BnOrder Group prime number.
|
||||
|
||||
@retval TRUE On success.
|
||||
@retval FALSE Otherwise.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcGroupGetOrder (
|
||||
IN VOID *EcGroup,
|
||||
OUT VOID *BnOrder
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Free previously allocated EC group object using EcGroupInit().
|
||||
|
||||
@param[in] EcGroup EC group object to free.
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
EcGroupFree (
|
||||
IN VOID *EcGroup
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
Initialize new opaque EC Point object. This object represents an EC point
|
||||
within the given EC group (curve).
|
||||
|
||||
@param[in] EC Group, properly initialized using EcGroupInit().
|
||||
|
||||
@retval EC Point object On success.
|
||||
@retval NULL On failure.
|
||||
**/
|
||||
VOID *
|
||||
EFIAPI
|
||||
EcPointInit (
|
||||
IN CONST VOID *EcGroup
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
Free previously allocated EC Point object using EcPointInit().
|
||||
|
||||
@param[in] EcPoint EC Point to free.
|
||||
@param[in] Clear TRUE iff the memory should be cleared.
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
EcPointDeInit (
|
||||
IN VOID *EcPoint,
|
||||
IN BOOLEAN Clear
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
Get EC point affine (x,y) coordinates.
|
||||
This function will set the provided Big Number objects to the corresponding
|
||||
values. The caller needs to make sure all the "out" BigNumber parameters
|
||||
are properly initialized.
|
||||
|
||||
@param[in] EcGroup EC group object.
|
||||
@param[in] EcPoint EC point object.
|
||||
@param[out] BnX X coordinate.
|
||||
@param[out] BnY Y coordinate.
|
||||
@param[in] BnCtx BN context, created with BigNumNewContext().
|
||||
|
||||
@retval TRUE On success.
|
||||
@retval FALSE Otherwise.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcPointGetAffineCoordinates (
|
||||
IN CONST VOID *EcGroup,
|
||||
IN CONST VOID *EcPoint,
|
||||
OUT VOID *BnX,
|
||||
OUT VOID *BnY,
|
||||
IN VOID *BnCtx
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Set EC point affine (x,y) coordinates.
|
||||
|
||||
@param[in] EcGroup EC group object.
|
||||
@param[in] EcPoint EC point object.
|
||||
@param[in] BnX X coordinate.
|
||||
@param[in] BnY Y coordinate.
|
||||
@param[in] BnCtx BN context, created with BigNumNewContext().
|
||||
|
||||
@retval TRUE On success.
|
||||
@retval FALSE Otherwise.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcPointSetAffineCoordinates (
|
||||
IN CONST VOID *EcGroup,
|
||||
IN VOID *EcPoint,
|
||||
IN CONST VOID *BnX,
|
||||
IN CONST VOID *BnY,
|
||||
IN VOID *BnCtx
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
EC Point addition. EcPointResult = EcPointA + EcPointB.
|
||||
|
||||
@param[in] EcGroup EC group object.
|
||||
@param[out] EcPointResult EC point to hold the result. The point should
|
||||
be properly initialized.
|
||||
@param[in] EcPointA EC Point.
|
||||
@param[in] EcPointB EC Point.
|
||||
@param[in] BnCtx BN context, created with BigNumNewContext().
|
||||
|
||||
@retval TRUE On success.
|
||||
@retval FALSE Otherwise.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcPointAdd (
|
||||
IN CONST VOID *EcGroup,
|
||||
OUT VOID *EcPointResult,
|
||||
IN CONST VOID *EcPointA,
|
||||
IN CONST VOID *EcPointB,
|
||||
IN VOID *BnCtx
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Variable EC point multiplication. EcPointResult = EcPoint * BnPScalar.
|
||||
|
||||
@param[in] EcGroup EC group object.
|
||||
@param[out] EcPointResult EC point to hold the result. The point should
|
||||
be properly initialized.
|
||||
@param[in] EcPoint EC Point.
|
||||
@param[in] BnPScalar P Scalar.
|
||||
@param[in] BnCtx BN context, created with BigNumNewContext().
|
||||
|
||||
@retval TRUE On success.
|
||||
@retval FALSE Otherwise.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcPointMul (
|
||||
IN CONST VOID *EcGroup,
|
||||
OUT VOID *EcPointResult,
|
||||
IN CONST VOID *EcPoint,
|
||||
IN CONST VOID *BnPScalar,
|
||||
IN VOID *BnCtx
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Calculate the inverse of the supplied EC point.
|
||||
|
||||
@param[in] EcGroup EC group object.
|
||||
@param[in,out] EcPoint EC point to invert.
|
||||
@param[in] BnCtx BN context, created with BigNumNewContext().
|
||||
|
||||
@retval TRUE On success.
|
||||
@retval FALSE Otherwise.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcPointInvert (
|
||||
IN CONST VOID *EcGroup,
|
||||
IN OUT VOID *EcPoint,
|
||||
IN VOID *BnCtx
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Check if the supplied point is on EC curve.
|
||||
|
||||
@param[in] EcGroup EC group object.
|
||||
@param[in] EcPoint EC point to check.
|
||||
@param[in] BnCtx BN context, created with BigNumNewContext().
|
||||
|
||||
@retval TRUE On curve.
|
||||
@retval FALSE Otherwise.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcPointIsOnCurve (
|
||||
IN CONST VOID *EcGroup,
|
||||
IN CONST VOID *EcPoint,
|
||||
IN VOID *BnCtx
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Check if the supplied point is at infinity.
|
||||
|
||||
@param[in] EcGroup EC group object.
|
||||
@param[in] EcPoint EC point to check.
|
||||
|
||||
@retval TRUE At infinity.
|
||||
@retval FALSE Otherwise.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcPointIsAtInfinity (
|
||||
IN CONST VOID *EcGroup,
|
||||
IN CONST VOID *EcPoint
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Check if EC points are equal.
|
||||
|
||||
@param[in] EcGroup EC group object.
|
||||
@param[in] EcPointA EC point A.
|
||||
@param[in] EcPointB EC point B.
|
||||
@param[in] BnCtx BN context, created with BigNumNewContext().
|
||||
|
||||
@retval TRUE A == B.
|
||||
@retval FALSE Otherwise.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcPointEqual (
|
||||
IN CONST VOID *EcGroup,
|
||||
IN CONST VOID *EcPointA,
|
||||
IN CONST VOID *EcPointB,
|
||||
IN VOID *BnCtx
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Set EC point compressed coordinates. Points can be described in terms of
|
||||
their compressed coordinates. For a point (x, y), for any given value for x
|
||||
such that the point is on the curve there will only ever be two possible
|
||||
values for y. Therefore, a point can be set using this function where BnX is
|
||||
the x coordinate and YBit is a value 0 or 1 to identify which of the two
|
||||
possible values for y should be used.
|
||||
|
||||
@param[in] EcGroup EC group object.
|
||||
@param[in] EcPoint EC Point.
|
||||
@param[in] BnX X coordinate.
|
||||
@param[in] YBit 0 or 1 to identify which Y value is used.
|
||||
@param[in] BnCtx BN context, created with BigNumNewContext().
|
||||
|
||||
@retval TRUE On success.
|
||||
@retval FALSE Otherwise.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcPointSetCompressedCoordinates (
|
||||
IN CONST VOID *EcGroup,
|
||||
IN VOID *EcPoint,
|
||||
IN CONST VOID *BnX,
|
||||
IN UINT8 YBit,
|
||||
IN VOID *BnCtx
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Allocates and Initializes one Elliptic Curve Context for subsequent use
|
||||
with the NID.
|
||||
|
||||
@param[in] Nid cipher NID
|
||||
@return Pointer to the Elliptic Curve Context that has been initialized.
|
||||
If the allocations fails, EcNewByNid() returns NULL.
|
||||
**/
|
||||
VOID *
|
||||
EFIAPI
|
||||
EcNewByNid (
|
||||
IN UINTN Nid
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
Release the specified EC context.
|
||||
|
||||
@param[in] EcContext Pointer to the EC context to be released.
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
EcFree (
|
||||
IN VOID *EcContext
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
Generates EC key and returns EC public key (X, Y), Please note, this function uses
|
||||
pseudo random number generator. The caller must make sure RandomSeed()
|
||||
function was properly called before.
|
||||
The Ec context should be correctly initialized by EcNewByNid.
|
||||
This function generates random secret, and computes the public key (X, Y), which is
|
||||
returned via parameter Public, PublicSize.
|
||||
X is the first half of Public with size being PublicSize / 2,
|
||||
Y is the second half of Public with size being PublicSize / 2.
|
||||
EC context is updated accordingly.
|
||||
If the Public buffer is too small to hold the public X, Y, FALSE is returned and
|
||||
PublicSize is set to the required buffer size to obtain the public X, Y.
|
||||
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.
|
||||
If EcContext is NULL, then return FALSE.
|
||||
If PublicSize is NULL, then return FALSE.
|
||||
If PublicSize is large enough but Public is NULL, then return FALSE.
|
||||
@param[in, out] EcContext Pointer to the EC context.
|
||||
@param[out] PublicKey Pointer to t buffer to receive generated public X,Y.
|
||||
@param[in, out] PublicKeySize On input, the size of Public buffer in bytes.
|
||||
On output, the size of data returned in Public buffer in bytes.
|
||||
@retval TRUE EC public X,Y generation succeeded.
|
||||
@retval FALSE EC public X,Y generation failed.
|
||||
@retval FALSE PublicKeySize is not large enough.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcGenerateKey (
|
||||
IN OUT VOID *EcContext,
|
||||
OUT UINT8 *PublicKey,
|
||||
IN OUT UINTN *PublicKeySize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Gets the public key component from the established EC context.
|
||||
The Ec context should be correctly initialized by EcNewByNid, and successfully
|
||||
generate key pair from EcGenerateKey().
|
||||
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.
|
||||
@param[in, out] EcContext Pointer to EC context being set.
|
||||
@param[out] PublicKey Pointer to t buffer to receive generated public X,Y.
|
||||
@param[in, out] PublicKeySize On input, the size of Public buffer in bytes.
|
||||
On output, the size of data returned in Public buffer in bytes.
|
||||
@retval TRUE EC key component was retrieved successfully.
|
||||
@retval FALSE Invalid EC key component.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcGetPubKey (
|
||||
IN OUT VOID *EcContext,
|
||||
OUT UINT8 *PublicKey,
|
||||
IN OUT UINTN *PublicKeySize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Computes exchanged common key.
|
||||
Given peer's public key (X, Y), this function computes the exchanged common key,
|
||||
based on its own context including value of curve parameter and random secret.
|
||||
X is the first half of PeerPublic with size being PeerPublicSize / 2,
|
||||
Y is the second half of PeerPublic with size being PeerPublicSize / 2.
|
||||
If EcContext is NULL, then return FALSE.
|
||||
If PeerPublic is NULL, then return FALSE.
|
||||
If PeerPublicSize is 0, then return FALSE.
|
||||
If Key is NULL, then return FALSE.
|
||||
If KeySize is not large enough, then return FALSE.
|
||||
For P-256, the PeerPublicSize is 64. First 32-byte is X, Second 32-byte is Y.
|
||||
For P-384, the PeerPublicSize is 96. First 48-byte is X, Second 48-byte is Y.
|
||||
For P-521, the PeerPublicSize is 132. First 66-byte is X, Second 66-byte is Y.
|
||||
@param[in, out] EcContext Pointer to the EC context.
|
||||
@param[in] PeerPublic Pointer to the peer's public X,Y.
|
||||
@param[in] PeerPublicSize Size of peer's public X,Y in bytes.
|
||||
@param[in] CompressFlag Flag of PeerPublic is compressed or not.
|
||||
@param[out] Key Pointer to the buffer to receive generated key.
|
||||
@param[in, out] KeySize On input, the size of Key buffer in bytes.
|
||||
On output, the size of data returned in Key buffer in bytes.
|
||||
@retval TRUE EC exchanged key generation succeeded.
|
||||
@retval FALSE EC exchanged key generation failed.
|
||||
@retval FALSE KeySize is not large enough.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcDhComputeKey (
|
||||
IN OUT VOID *EcContext,
|
||||
IN CONST UINT8 *PeerPublic,
|
||||
IN UINTN PeerPublicSize,
|
||||
IN CONST INT32 *CompressFlag,
|
||||
OUT UINT8 *Key,
|
||||
IN OUT UINTN *KeySize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Carries out the EC-DSA signature.
|
||||
|
||||
This function carries out the EC-DSA signature.
|
||||
If the Signature buffer is too small to hold the contents of signature, FALSE
|
||||
is returned and SigSize is set to the required buffer size to obtain the signature.
|
||||
|
||||
If EcContext is NULL, then return FALSE.
|
||||
If MessageHash is NULL, then return FALSE.
|
||||
If HashSize need match the HashNid. HashNid could be SHA256, SHA384, SHA512, SHA3_256, SHA3_384, SHA3_512.
|
||||
If SigSize is large enough but Signature is NULL, then return FALSE.
|
||||
|
||||
For P-256, the SigSize is 64. First 32-byte is R, Second 32-byte is S.
|
||||
For P-384, the SigSize is 96. First 48-byte is R, Second 48-byte is S.
|
||||
For P-521, the SigSize is 132. First 66-byte is R, Second 66-byte is S.
|
||||
|
||||
@param[in] EcContext Pointer to EC context for signature generation.
|
||||
@param[in] HashNid hash NID
|
||||
@param[in] MessageHash Pointer to octet message hash to be signed.
|
||||
@param[in] HashSize Size of the message hash in bytes.
|
||||
@param[out] Signature Pointer to buffer to receive EC-DSA signature.
|
||||
@param[in, out] SigSize On input, the size of Signature buffer in bytes.
|
||||
On output, the size of data returned in Signature buffer in bytes.
|
||||
|
||||
@retval TRUE Signature successfully generated in EC-DSA.
|
||||
@retval FALSE Signature generation failed.
|
||||
@retval FALSE SigSize is too small.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcDsaSign (
|
||||
IN VOID *EcContext,
|
||||
IN UINTN HashNid,
|
||||
IN CONST UINT8 *MessageHash,
|
||||
IN UINTN HashSize,
|
||||
OUT UINT8 *Signature,
|
||||
IN OUT UINTN *SigSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Verifies the EC-DSA signature.
|
||||
|
||||
If EcContext is NULL, then return FALSE.
|
||||
If MessageHash is NULL, then return FALSE.
|
||||
If Signature is NULL, then return FALSE.
|
||||
If HashSize need match the HashNid. HashNid could be SHA256, SHA384, SHA512, SHA3_256, SHA3_384, SHA3_512.
|
||||
|
||||
For P-256, the SigSize is 64. First 32-byte is R, Second 32-byte is S.
|
||||
For P-384, the SigSize is 96. First 48-byte is R, Second 48-byte is S.
|
||||
For P-521, the SigSize is 132. First 66-byte is R, Second 66-byte is S.
|
||||
|
||||
@param[in] EcContext Pointer to EC context for signature verification.
|
||||
@param[in] HashNid hash NID
|
||||
@param[in] MessageHash Pointer to octet message hash to be checked.
|
||||
@param[in] HashSize Size of the message hash in bytes.
|
||||
@param[in] Signature Pointer to EC-DSA signature to be verified.
|
||||
@param[in] SigSize Size of signature in bytes.
|
||||
|
||||
@retval TRUE Valid signature encoded in EC-DSA.
|
||||
@retval FALSE Invalid signature or invalid EC context.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcDsaVerify (
|
||||
IN VOID *EcContext,
|
||||
IN UINTN HashNid,
|
||||
IN CONST UINT8 *MessageHash,
|
||||
IN UINTN HashSize,
|
||||
IN CONST UINT8 *Signature,
|
||||
IN UINTN SigSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
@@ -0,0 +1,51 @@
|
||||
/** @file
|
||||
This file contains UEFI wrapper functions for RSA PKCS1v2 OAEP encryption routines.
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
**/
|
||||
|
||||
#include "InternalCryptLib.h"
|
||||
|
||||
/**
|
||||
Encrypts a blob using PKCS1v2 (RSAES-OAEP) schema. On success, will return the
|
||||
encrypted message in a newly allocated buffer.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in] PublicKey A pointer to the DER-encoded X509 certificate that
|
||||
will be used to encrypt the data.
|
||||
@param[in] PublicKeySize Size of the X509 cert buffer.
|
||||
@param[in] InData Data to be encrypted.
|
||||
@param[in] InDataSize Size of the data buffer.
|
||||
@param[in] PrngSeed [Optional] If provided, a pointer to a random seed buffer
|
||||
to be used when initializing the PRNG. NULL otherwise.
|
||||
@param[in] PrngSeedSize [Optional] If provided, size of the random seed buffer.
|
||||
0 otherwise.
|
||||
@param[out] EncryptedData Pointer to an allocated buffer containing the encrypted
|
||||
message.
|
||||
@param[out] EncryptedDataSize Size of the encrypted message buffer.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
Pkcs1v2Encrypt (
|
||||
IN CONST UINT8 *PublicKey,
|
||||
IN UINTN PublicKeySize,
|
||||
IN UINT8 *InData,
|
||||
IN UINTN InDataSize,
|
||||
IN CONST UINT8 *PrngSeed,
|
||||
OPTIONAL
|
||||
IN UINTN PrngSeedSize,
|
||||
OPTIONAL
|
||||
OUT UINT8 **EncryptedData,
|
||||
OUT UINTN *EncryptedDataSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
@@ -0,0 +1,48 @@
|
||||
/** @file
|
||||
PBKDF2 Key Derivation Function Wrapper Implementation which does not provide real
|
||||
capabilities.
|
||||
|
||||
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "InternalCryptLib.h"
|
||||
|
||||
/**
|
||||
Derives a key from a password using a salt and iteration count, based on PKCS#5 v2.0
|
||||
password based encryption key derivation function PBKDF2, as specified in RFC 2898.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in] PasswordLength Length of input password in bytes.
|
||||
@param[in] Password Pointer to the array for the password.
|
||||
@param[in] SaltLength Size of the Salt in bytes.
|
||||
@param[in] Salt Pointer to the Salt.
|
||||
@param[in] IterationCount Number of iterations to perform. Its value should be
|
||||
greater than or equal to 1.
|
||||
@param[in] DigestSize Size of the message digest to be used (eg. SHA256_DIGEST_SIZE).
|
||||
NOTE: DigestSize will be used to determine the hash algorithm.
|
||||
Only SHA1_DIGEST_SIZE or SHA256_DIGEST_SIZE is supported.
|
||||
@param[in] KeyLength Size of the derived key buffer in bytes.
|
||||
@param[out] OutKey Pointer to the output derived key buffer.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
Pkcs5HashPassword (
|
||||
IN UINTN PasswordLength,
|
||||
IN CONST CHAR8 *Password,
|
||||
IN UINTN SaltLength,
|
||||
IN CONST UINT8 *Salt,
|
||||
IN UINTN IterationCount,
|
||||
IN UINTN DigestSize,
|
||||
IN UINTN KeyLength,
|
||||
OUT UINT8 *OutKey
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
@@ -0,0 +1,83 @@
|
||||
/** @file
|
||||
PKCS#7 SignedData Sign Wrapper and PKCS#7 SignedData Verification Wrapper
|
||||
Implementation over mbedtls, Internal headers.
|
||||
|
||||
RFC 2315 - PKCS #7: Cryptographic Message Syntax Version 1.5
|
||||
|
||||
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#ifndef CRYPT_PKCS7_INTERNAL_H_
|
||||
#define CRYPT_PKCS7_INTERNAL_H_
|
||||
|
||||
#include "InternalCryptLib.h"
|
||||
|
||||
#include "mbedtls/oid.h"
|
||||
#include "mbedtls/asn1.h"
|
||||
#include "mbedtls/asn1write.h"
|
||||
#include "mbedtls/x509.h"
|
||||
#include "mbedtls/x509_crt.h"
|
||||
|
||||
///
|
||||
/// PKCS7 OID
|
||||
///
|
||||
#define MBEDTLS_OID_PKCS7 MBEDTLS_OID_PKCS "\x07"
|
||||
#define MBEDTLS_OID_PKCS7_DATA MBEDTLS_OID_PKCS7 "\x01"
|
||||
#define MBEDTLS_OID_PKCS7_SIGNED_DATA MBEDTLS_OID_PKCS7 "\x02"
|
||||
#define MBEDTLS_OID_PKCS7_ENVELOPED_DATA MBEDTLS_OID_PKCS7 "\x03"
|
||||
#define MBEDTLS_OID_PKCS7_SIGNED_AND_ENVELOPED_DATA MBEDTLS_OID_PKCS7 "\x04"
|
||||
#define MBEDTLS_OID_PKCS7_DIGESTED_DATA MBEDTLS_OID_PKCS7 "\x05"
|
||||
#define MBEDTLS_OID_PKCS7_ENCRYPTED_DATA MBEDTLS_OID_PKCS7 "\x06"
|
||||
|
||||
typedef mbedtls_asn1_buf MBEDTLSPKCS7BUF;
|
||||
typedef mbedtls_asn1_named_data MBEDTLSPKCS7NAME;
|
||||
typedef mbedtls_asn1_sequence MBEDTLSPKCS7SEQUENCE;
|
||||
|
||||
///
|
||||
/// PKCS7 SignerInfo type
|
||||
/// https://tools.ietf.org/html/rfc2315#section-9.2
|
||||
///
|
||||
typedef struct MbedtlsPkcs7SignerInfo {
|
||||
INT32 Version;
|
||||
mbedtls_x509_buf Serial;
|
||||
mbedtls_x509_name Issuer;
|
||||
mbedtls_x509_buf IssuerRaw;
|
||||
mbedtls_x509_buf AlgIdentifier;
|
||||
mbedtls_x509_buf SigAlgIdentifier;
|
||||
mbedtls_x509_buf AuthAttr;
|
||||
mbedtls_x509_buf Sig;
|
||||
struct MBEDTLSPKCS7SIGNERINFO *Next;
|
||||
} MBEDTLSPKCS7SIGNERINFO;
|
||||
|
||||
///
|
||||
/// PKCS7 signed data attached data format
|
||||
///
|
||||
typedef struct MbedtlsPkcs7Data {
|
||||
mbedtls_asn1_buf Oid;
|
||||
mbedtls_asn1_buf Data;
|
||||
} MBEDTLSPKCS7DATA;
|
||||
|
||||
///
|
||||
/// Signed Data
|
||||
/// https://tools.ietf.org/html/rfc2315#section-9.1
|
||||
///
|
||||
typedef struct MbedtlsPkcs7SignedData {
|
||||
INT32 Version;
|
||||
mbedtls_asn1_buf DigestAlgorithms;
|
||||
struct MBEDTLSPKCS7DATA ContentInfo;
|
||||
mbedtls_x509_crt Certificates;
|
||||
mbedtls_x509_crl Crls;
|
||||
struct MbedtlsPkcs7SignerInfo SignerInfos;
|
||||
} MBEDTLSPKCS7SIGNEDDATA;
|
||||
|
||||
///
|
||||
/// PKCS7 struct, only support SignedData
|
||||
///
|
||||
typedef struct MbedtlsPkcs7 {
|
||||
mbedtls_asn1_buf ContentTypeOid;
|
||||
struct MBEDTLSPKCS7SIGNEDDATA SignedData;
|
||||
} MBEDTLSPKCS7;
|
||||
|
||||
#endif
|
@@ -0,0 +1,53 @@
|
||||
/** @file
|
||||
PKCS#7 SignedData Sign Wrapper Implementation which does not provide real
|
||||
capabilities.
|
||||
|
||||
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "InternalCryptLib.h"
|
||||
|
||||
/**
|
||||
Creates a PKCS#7 signedData as described in "PKCS #7: Cryptographic Message
|
||||
Syntax Standard, version 1.5". This interface is only intended to be used for
|
||||
application to perform PKCS#7 functionality validation.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in] PrivateKey Pointer to the PEM-formatted private key data for
|
||||
data signing.
|
||||
@param[in] PrivateKeySize Size of the PEM private key data in bytes.
|
||||
@param[in] KeyPassword NULL-terminated passphrase used for encrypted PEM
|
||||
key data.
|
||||
@param[in] InData Pointer to the content to be signed.
|
||||
@param[in] InDataSize Size of InData in bytes.
|
||||
@param[in] SignCert Pointer to signer's DER-encoded certificate to sign with.
|
||||
@param[in] OtherCerts Pointer to an optional additional set of certificates to
|
||||
include in the PKCS#7 signedData (e.g. any intermediate
|
||||
CAs in the chain).
|
||||
@param[out] SignedData Pointer to output PKCS#7 signedData. It's caller's
|
||||
responsibility to free the buffer with FreePool().
|
||||
@param[out] SignedDataSize Size of SignedData in bytes.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
Pkcs7Sign (
|
||||
IN CONST UINT8 *PrivateKey,
|
||||
IN UINTN PrivateKeySize,
|
||||
IN CONST UINT8 *KeyPassword,
|
||||
IN UINT8 *InData,
|
||||
IN UINTN InDataSize,
|
||||
IN UINT8 *SignCert,
|
||||
IN UINT8 *OtherCerts OPTIONAL,
|
||||
OUT UINT8 **SignedData,
|
||||
OUT UINTN *SignedDataSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
@@ -0,0 +1,152 @@
|
||||
/** @file
|
||||
PKCS7 Verify Null implementation.
|
||||
|
||||
Copyright (C) Microsoft Corporation. All Rights Reserved.
|
||||
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "InternalCryptLib.h"
|
||||
|
||||
/**
|
||||
This function will return the leaf signer certificate in a chain. This is
|
||||
required because certificate chains are not guaranteed to have the
|
||||
certificates in the order that they were issued.
|
||||
|
||||
A typical certificate chain looks like this:
|
||||
|
||||
|
||||
----------------------------
|
||||
| Root |
|
||||
----------------------------
|
||||
^
|
||||
|
|
||||
----------------------------
|
||||
| Policy CA | <-- Typical Trust Anchor.
|
||||
----------------------------
|
||||
^
|
||||
|
|
||||
----------------------------
|
||||
| Issuing CA |
|
||||
----------------------------
|
||||
^
|
||||
|
|
||||
-----------------------------
|
||||
/ End-Entity (leaf) signer / <-- Bottom certificate.
|
||||
----------------------------- EKU: "1.3.6.1.4.1.311.76.9.21.1"
|
||||
(Firmware Signing)
|
||||
|
||||
|
||||
@param[in] CertChain Certificate chain.
|
||||
|
||||
@param[out] SignerCert Last certificate in the chain. For PKCS7 signatures,
|
||||
this will be the end-entity (leaf) signer cert.
|
||||
|
||||
@retval EFI_SUCCESS The required EKUs were found in the signature.
|
||||
@retval EFI_INVALID_PARAMETER A parameter was invalid.
|
||||
@retval EFI_NOT_FOUND The number of signers found was not 1.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
GetSignerCertificate (
|
||||
IN CONST VOID *CertChain,
|
||||
OUT VOID **SignerCert
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return EFI_NOT_READY;
|
||||
}
|
||||
|
||||
/**
|
||||
Determines if the specified EKU represented in ASN1 form is present
|
||||
in a given certificate.
|
||||
|
||||
@param[in] Cert The certificate to check.
|
||||
|
||||
@param[in] Asn1ToFind The EKU to look for.
|
||||
|
||||
@retval EFI_SUCCESS We successfully identified the signing type.
|
||||
@retval EFI_INVALID_PARAMETER A parameter was invalid.
|
||||
@retval EFI_NOT_FOUND One or more EKU's were not found in the signature.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
IsEkuInCertificate (
|
||||
IN CONST VOID *Cert,
|
||||
IN VOID *Asn1ToFind
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return EFI_NOT_READY;
|
||||
}
|
||||
|
||||
/**
|
||||
Determines if the specified EKUs are present in a signing certificate.
|
||||
|
||||
@param[in] SignerCert The certificate to check.
|
||||
@param[in] RequiredEKUs The EKUs to look for.
|
||||
@param[in] RequiredEKUsSize The number of EKUs
|
||||
@param[in] RequireAllPresent If TRUE, then all the specified EKUs
|
||||
must be present in the certificate.
|
||||
|
||||
@retval EFI_SUCCESS We successfully identified the signing type.
|
||||
@retval EFI_INVALID_PARAMETER A parameter was invalid.
|
||||
@retval EFI_NOT_FOUND One or more EKU's were not found in the signature.
|
||||
**/
|
||||
EFI_STATUS
|
||||
CheckEKUs (
|
||||
IN CONST VOID *SignerCert,
|
||||
IN CONST CHAR8 *RequiredEKUs[],
|
||||
IN CONST UINT32 RequiredEKUsSize,
|
||||
IN BOOLEAN RequireAllPresent
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return EFI_NOT_READY;
|
||||
}
|
||||
|
||||
/**
|
||||
This function receives a PKCS#7 formatted signature blob,
|
||||
looks for the EKU SEQUENCE blob, and if found then looks
|
||||
for all the required EKUs. This function was created so that
|
||||
the Surface team can cut down on the number of Certificate
|
||||
Authorities (CA's) by checking EKU's on leaf signers for
|
||||
a specific product. This prevents one product's certificate
|
||||
from signing another product's firmware or unlock blobs.
|
||||
|
||||
Note that this function does not validate the certificate chain.
|
||||
That needs to be done before using this function.
|
||||
|
||||
@param[in] Pkcs7Signature The PKCS#7 signed information content block. An array
|
||||
containing the content block with both the signature,
|
||||
the signer's certificate, and any necessary intermediate
|
||||
certificates.
|
||||
@param[in] Pkcs7SignatureSize Number of bytes in Pkcs7Signature.
|
||||
@param[in] RequiredEKUs Array of null-terminated strings listing OIDs of
|
||||
required EKUs that must be present in the signature.
|
||||
@param[in] RequiredEKUsSize Number of elements in the RequiredEKUs string array.
|
||||
@param[in] RequireAllPresent If this is TRUE, then all of the specified EKU's
|
||||
must be present in the leaf signer. If it is
|
||||
FALSE, then we will succeed if we find any
|
||||
of the specified EKU's.
|
||||
|
||||
@retval EFI_SUCCESS The required EKUs were found in the signature.
|
||||
@retval EFI_INVALID_PARAMETER A parameter was invalid.
|
||||
@retval EFI_NOT_FOUND One or more EKU's were not found in the signature.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VerifyEKUsInPkcs7Signature (
|
||||
IN CONST UINT8 *Pkcs7Signature,
|
||||
IN CONST UINT32 SignatureSize,
|
||||
IN CONST CHAR8 *RequiredEKUs[],
|
||||
IN CONST UINT32 RequiredEKUsSize,
|
||||
IN BOOLEAN RequireAllPresent
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return EFI_NOT_READY;
|
||||
}
|
@@ -0,0 +1,56 @@
|
||||
/** @file
|
||||
This module verifies that Enhanced Key Usages (EKU's) are present within
|
||||
a PKCS7 signature blob using MbedTLS.
|
||||
|
||||
Copyright (C) Microsoft Corporation. All Rights Reserved.
|
||||
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "InternalCryptLib.h"
|
||||
|
||||
/**
|
||||
This function receives a PKCS#7 formatted signature blob,
|
||||
looks for the EKU SEQUENCE blob, and if found then looks
|
||||
for all the required EKUs. This function was created so that
|
||||
the Surface team can cut down on the number of Certificate
|
||||
Authorities (CA's) by checking EKU's on leaf signers for
|
||||
a specific product. This prevents one product's certificate
|
||||
from signing another product's firmware or unlock blobs.
|
||||
|
||||
Return RETURN_UNSUPPORTED to indicate this interface is not supported.
|
||||
|
||||
@param[in] Pkcs7Signature The PKCS#7 signed information content block. An array
|
||||
containing the content block with both the signature,
|
||||
the signer's certificate, and any necessary intermediate
|
||||
certificates.
|
||||
@param[in] Pkcs7SignatureSize Number of bytes in pPkcs7Signature.
|
||||
@param[in] RequiredEKUs Array of null-terminated strings listing OIDs of
|
||||
required EKUs that must be present in the signature.
|
||||
All specified EKU's must be present in order to
|
||||
succeed.
|
||||
@param[in] RequiredEKUsSize Number of elements in the rgRequiredEKUs string.
|
||||
This parameter has a maximum of MAX_EKU_SEARCH.
|
||||
@param[in] RequireAllPresent If this is TRUE, then all of the specified EKU's
|
||||
must be present in the leaf signer. If it is
|
||||
FALSE, then we will succeed if we find any
|
||||
of the specified EKU's.
|
||||
|
||||
@retval RETURN_UNSUPPORTED The operation is not supported.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VerifyEKUsInPkcs7Signature (
|
||||
IN CONST UINT8 *Pkcs7Signature,
|
||||
IN CONST UINT32 SignatureSize,
|
||||
IN CONST CHAR8 *RequiredEKUs[],
|
||||
IN CONST UINT32 RequiredEKUsSize,
|
||||
IN BOOLEAN RequireAllPresent
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return RETURN_UNSUPPORTED;
|
||||
}
|
163
CryptoPkg/Library/BaseCryptLibMbedTls/Pk/CryptPkcs7VerifyNull.c
Normal file
163
CryptoPkg/Library/BaseCryptLibMbedTls/Pk/CryptPkcs7VerifyNull.c
Normal file
@@ -0,0 +1,163 @@
|
||||
/** @file
|
||||
PKCS#7 SignedData Verification Wrapper Implementation which does not provide
|
||||
real capabilities.
|
||||
|
||||
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "InternalCryptLib.h"
|
||||
|
||||
/**
|
||||
Get the signer's certificates from PKCS#7 signed data as described in "PKCS #7:
|
||||
Cryptographic Message Syntax Standard". The input signed data could be wrapped
|
||||
in a ContentInfo structure.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in] P7Data Pointer to the PKCS#7 message to verify.
|
||||
@param[in] P7Length Length of the PKCS#7 message in bytes.
|
||||
@param[out] CertStack Pointer to Signer's certificates retrieved from P7Data.
|
||||
It's caller's responsibility to free the buffer with
|
||||
Pkcs7FreeSigners().
|
||||
This data structure is EFI_CERT_STACK type.
|
||||
@param[out] StackLength Length of signer's certificates in bytes.
|
||||
@param[out] TrustedCert Pointer to a trusted certificate from Signer's certificates.
|
||||
It's caller's responsibility to free the buffer with
|
||||
Pkcs7FreeSigners().
|
||||
@param[out] CertLength Length of the trusted certificate in bytes.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
Pkcs7GetSigners (
|
||||
IN CONST UINT8 *P7Data,
|
||||
IN UINTN P7Length,
|
||||
OUT UINT8 **CertStack,
|
||||
OUT UINTN *StackLength,
|
||||
OUT UINT8 **TrustedCert,
|
||||
OUT UINTN *CertLength
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Wrap function to use free() to free allocated memory for certificates.
|
||||
|
||||
If the interface is not supported, then ASSERT().
|
||||
|
||||
@param[in] Certs Pointer to the certificates to be freed.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
Pkcs7FreeSigners (
|
||||
IN UINT8 *Certs
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieves all embedded certificates from PKCS#7 signed data as described in "PKCS #7:
|
||||
Cryptographic Message Syntax Standard", and outputs two certificate lists chained and
|
||||
unchained to the signer's certificates.
|
||||
The input signed data could be wrapped in a ContentInfo structure.
|
||||
|
||||
@param[in] P7Data Pointer to the PKCS#7 message.
|
||||
@param[in] P7Length Length of the PKCS#7 message in bytes.
|
||||
@param[out] SignerChainCerts Pointer to the certificates list chained to signer's
|
||||
certificate. It's caller's responsibility to free the buffer
|
||||
with Pkcs7FreeSigners().
|
||||
This data structure is EFI_CERT_STACK type.
|
||||
@param[out] ChainLength Length of the chained certificates list buffer in bytes.
|
||||
@param[out] UnchainCerts Pointer to the unchained certificates lists. It's caller's
|
||||
responsibility to free the buffer with Pkcs7FreeSigners().
|
||||
This data structure is EFI_CERT_STACK type.
|
||||
@param[out] UnchainLength Length of the unchained certificates list buffer in bytes.
|
||||
|
||||
@retval TRUE The operation is finished successfully.
|
||||
@retval FALSE Error occurs during the operation.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
Pkcs7GetCertificatesList (
|
||||
IN CONST UINT8 *P7Data,
|
||||
IN UINTN P7Length,
|
||||
OUT UINT8 **SignerChainCerts,
|
||||
OUT UINTN *ChainLength,
|
||||
OUT UINT8 **UnchainCerts,
|
||||
OUT UINTN *UnchainLength
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Verifies the validity of a PKCS#7 signed data as described in "PKCS #7:
|
||||
Cryptographic Message Syntax Standard". The input signed data could be wrapped
|
||||
in a ContentInfo structure.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in] P7Data Pointer to the PKCS#7 message to verify.
|
||||
@param[in] P7Length Length of the PKCS#7 message in bytes.
|
||||
@param[in] TrustedCert Pointer to a trusted/root certificate encoded in DER, which
|
||||
is used for certificate chain verification.
|
||||
@param[in] CertLength Length of the trusted certificate in bytes.
|
||||
@param[in] InData Pointer to the content to be verified.
|
||||
@param[in] DataLength Length of InData in bytes.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
Pkcs7Verify (
|
||||
IN CONST UINT8 *P7Data,
|
||||
IN UINTN P7Length,
|
||||
IN CONST UINT8 *TrustedCert,
|
||||
IN UINTN CertLength,
|
||||
IN CONST UINT8 *InData,
|
||||
IN UINTN DataLength
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Extracts the attached content from a PKCS#7 signed data if existed. The input signed
|
||||
data could be wrapped in a ContentInfo structure.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in] P7Data Pointer to the PKCS#7 signed data to process.
|
||||
@param[in] P7Length Length of the PKCS#7 signed data in bytes.
|
||||
@param[out] Content Pointer to the extracted content from the PKCS#7 signedData.
|
||||
It's caller's responsibility to free the buffer with FreePool().
|
||||
@param[out] ContentSize The size of the extracted content in bytes.
|
||||
|
||||
@retval TRUE The P7Data was correctly formatted for processing.
|
||||
@retval FALSE The P7Data was not correctly formatted for processing.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
Pkcs7GetAttachedContent (
|
||||
IN CONST UINT8 *P7Data,
|
||||
IN UINTN P7Length,
|
||||
OUT VOID **Content,
|
||||
OUT UINTN *ContentSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
@@ -0,0 +1,38 @@
|
||||
/** @file
|
||||
Runtime specific implementation of PKCS#7 SignedData Verification Wrapper.
|
||||
|
||||
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "InternalCryptLib.h"
|
||||
|
||||
/**
|
||||
Extracts the attached content from a PKCS#7 signed data if existed. The input signed
|
||||
data could be wrapped in a ContentInfo structure.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in] P7Data Pointer to the PKCS#7 signed data to process.
|
||||
@param[in] P7Length Length of the PKCS#7 signed data in bytes.
|
||||
@param[out] Content Pointer to the extracted content from the PKCS#7 signedData.
|
||||
It's caller's responsibility to free the buffer with FreePool().
|
||||
@param[out] ContentSize The size of the extracted content in bytes.
|
||||
|
||||
@retval TRUE The P7Data was correctly formatted for processing.
|
||||
@retval FALSE The P7Data was not correctly formatted for processing.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
Pkcs7GetAttachedContent (
|
||||
IN CONST UINT8 *P7Data,
|
||||
IN UINTN P7Length,
|
||||
OUT VOID **Content,
|
||||
OUT UINTN *ContentSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
42
CryptoPkg/Library/BaseCryptLibMbedTls/Pk/CryptTsNull.c
Normal file
42
CryptoPkg/Library/BaseCryptLibMbedTls/Pk/CryptTsNull.c
Normal file
@@ -0,0 +1,42 @@
|
||||
/** @file
|
||||
RFC3161 Timestamp Countersignature Verification Wrapper Implementation which does
|
||||
not provide real capabilities.
|
||||
|
||||
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "InternalCryptLib.h"
|
||||
|
||||
/**
|
||||
Verifies the validity of a RFC3161 Timestamp CounterSignature embedded in PE/COFF Authenticode
|
||||
signature.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in] AuthData Pointer to the Authenticode Signature retrieved from signed
|
||||
PE/COFF image to be verified.
|
||||
@param[in] DataSize Size of the Authenticode Signature in bytes.
|
||||
@param[in] TsaCert Pointer to a trusted/root TSA certificate encoded in DER, which
|
||||
is used for TSA certificate chain verification.
|
||||
@param[in] CertSize Size of the trusted certificate in bytes.
|
||||
@param[out] SigningTime Return the time of timestamp generation time if the timestamp
|
||||
signature is valid.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
ImageTimestampVerify (
|
||||
IN CONST UINT8 *AuthData,
|
||||
IN UINTN DataSize,
|
||||
IN CONST UINT8 *TsaCert,
|
||||
IN UINTN CertSize,
|
||||
OUT EFI_TIME *SigningTime
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
753
CryptoPkg/Library/BaseCryptLibMbedTls/Pk/CryptX509Null.c
Normal file
753
CryptoPkg/Library/BaseCryptLibMbedTls/Pk/CryptX509Null.c
Normal file
@@ -0,0 +1,753 @@
|
||||
/** @file
|
||||
X.509 Certificate Handler Wrapper Implementation which does not provide
|
||||
real capabilities.
|
||||
|
||||
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "InternalCryptLib.h"
|
||||
|
||||
/**
|
||||
Construct a X509 object from DER-encoded certificate data.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded certificate data.
|
||||
@param[in] CertSize The size of certificate data in bytes.
|
||||
@param[out] SingleX509Cert The generated X509 object.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509ConstructCertificate (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
OUT UINT8 **SingleX509Cert
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Construct a X509 stack object from a list of DER-encoded certificate data.
|
||||
|
||||
If X509Stack is NULL, then return FALSE.
|
||||
If this interface is not supported, then return FALSE.
|
||||
|
||||
@param[in, out] X509Stack On input, pointer to an existing or NULL X509 stack object.
|
||||
On output, pointer to the X509 stack object with new
|
||||
inserted X509 certificate.
|
||||
@param[in] Args VA_LIST marker for the variable argument list.
|
||||
A list of DER-encoded single certificate data followed
|
||||
by certificate size. A NULL terminates the list. The
|
||||
pairs are the arguments to X509ConstructCertificate().
|
||||
|
||||
@retval TRUE The X509 stack construction succeeded.
|
||||
@retval FALSE The construction operation failed.
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509ConstructCertificateStackV (
|
||||
IN OUT UINT8 **X509Stack,
|
||||
IN VA_LIST Args
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Construct a X509 stack object from a list of DER-encoded certificate data.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in, out] X509Stack On input, pointer to an existing or NULL X509 stack object.
|
||||
On output, pointer to the X509 stack object with new
|
||||
inserted X509 certificate.
|
||||
@param ... A list of DER-encoded single certificate data followed
|
||||
by certificate size. A NULL terminates the list. The
|
||||
pairs are the arguments to X509ConstructCertificate().
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509ConstructCertificateStack (
|
||||
IN OUT UINT8 **X509Stack,
|
||||
...
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Release the specified X509 object.
|
||||
|
||||
If the interface is not supported, then ASSERT().
|
||||
|
||||
@param[in] X509Cert Pointer to the X509 object to be released.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
X509Free (
|
||||
IN VOID *X509Cert
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
Release the specified X509 stack object.
|
||||
|
||||
If the interface is not supported, then ASSERT().
|
||||
|
||||
@param[in] X509Stack Pointer to the X509 stack object to be released.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
X509StackFree (
|
||||
IN VOID *X509Stack
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the subject bytes from one X.509 certificate.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[out] CertSubject Pointer to the retrieved certificate subject bytes.
|
||||
@param[in, out] SubjectSize The size in bytes of the CertSubject buffer on input,
|
||||
and the size of buffer returned CertSubject on output.
|
||||
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509GetSubjectName (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
OUT UINT8 *CertSubject,
|
||||
IN OUT UINTN *SubjectSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the common name (CN) string from one X.509 certificate.
|
||||
|
||||
Return RETURN_UNSUPPORTED to indicate this interface is not supported.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[out] CommonName Buffer to contain the retrieved certificate common
|
||||
name string (UTF8). At most CommonNameSize bytes will be
|
||||
written and the string will be null terminated. May be
|
||||
NULL in order to determine the size buffer needed.
|
||||
@param[in,out] CommonNameSize The size in bytes of the CommonName buffer on input,
|
||||
and the size of buffer returned CommonName on output.
|
||||
If CommonName is NULL then the amount of space needed
|
||||
in buffer (including the final null) is returned.
|
||||
|
||||
@retval RETURN_UNSUPPORTED The operation is not supported.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
X509GetCommonName (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
OUT CHAR8 *CommonName OPTIONAL,
|
||||
IN OUT UINTN *CommonNameSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return RETURN_UNSUPPORTED;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the organization name (ON) string from one X.509 certificate.
|
||||
|
||||
Return RETURN_UNSUPPORTED to indicate this interface is not supported.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[out] NameBuffer Buffer to contain the retrieved certificate organization
|
||||
name string. At most NameBufferSize bytes will be
|
||||
written and the string will be null terminated. May be
|
||||
NULL in order to determine the size buffer needed.
|
||||
@param[in,out] NameBufferSize The size in bytes of the Name buffer on input,
|
||||
and the size of buffer returned Name on output.
|
||||
If NameBuffer is NULL then the amount of space needed
|
||||
in buffer (including the final null) is returned.
|
||||
|
||||
@retval RETURN_UNSUPPORTED The operation is not supported.
|
||||
|
||||
**/
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
X509GetOrganizationName (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
OUT CHAR8 *NameBuffer OPTIONAL,
|
||||
IN OUT UINTN *NameBufferSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return RETURN_UNSUPPORTED;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the RSA Public Key from one DER-encoded X509 certificate.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[out] RsaContext Pointer to new-generated RSA context which contain the retrieved
|
||||
RSA public key component. Use RsaFree() function to free the
|
||||
resource.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
RsaGetPublicKeyFromX509 (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
OUT VOID **RsaContext
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Verify one X509 certificate was issued by the trusted CA.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate to be verified.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[in] CACert Pointer to the DER-encoded trusted CA certificate.
|
||||
@param[in] CACertSize Size of the CA Certificate in bytes.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509VerifyCert (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
IN CONST UINT8 *CACert,
|
||||
IN UINTN CACertSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the TBSCertificate from one given X.509 certificate.
|
||||
|
||||
Return FALSE to indicate this interface is not supported.
|
||||
|
||||
@param[in] Cert Pointer to the given DER-encoded X509 certificate.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[out] TBSCert DER-Encoded To-Be-Signed certificate.
|
||||
@param[out] TBSCertSize Size of the TBS certificate in bytes.
|
||||
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509GetTBSCert (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
OUT UINT8 **TBSCert,
|
||||
OUT UINTN *TBSCertSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the EC Public Key from one DER-encoded X509 certificate.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[out] EcContext Pointer to new-generated EC DSA context which contain the retrieved
|
||||
EC public key component. Use EcFree() function to free the
|
||||
resource.
|
||||
|
||||
If Cert is NULL, then return FALSE.
|
||||
If EcContext is NULL, then return FALSE.
|
||||
|
||||
@retval TRUE EC Public Key was retrieved successfully.
|
||||
@retval FALSE Fail to retrieve EC public key from X509 certificate.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
EcGetPublicKeyFromX509 (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
OUT VOID **EcContext
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the version from one X.509 certificate.
|
||||
|
||||
If Cert is NULL, then return FALSE.
|
||||
If CertSize is 0, then return FALSE.
|
||||
If this interface is not supported, then return FALSE.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[out] Version Pointer to the retrieved version integer.
|
||||
|
||||
@retval TRUE The certificate version retrieved successfully.
|
||||
@retval FALSE If Cert is NULL or CertSize is Zero.
|
||||
@retval FALSE The operation is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509GetVersion (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
OUT UINTN *Version
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the serialNumber from one X.509 certificate.
|
||||
|
||||
If Cert is NULL, then return FALSE.
|
||||
If CertSize is 0, then return FALSE.
|
||||
If this interface is not supported, then return FALSE.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[out] SerialNumber Pointer to the retrieved certificate SerialNumber bytes.
|
||||
@param[in, out] SerialNumberSize The size in bytes of the SerialNumber buffer on input,
|
||||
and the size of buffer returned SerialNumber on output.
|
||||
|
||||
@retval TRUE The certificate serialNumber retrieved successfully.
|
||||
@retval FALSE If Cert is NULL or CertSize is Zero.
|
||||
If SerialNumberSize is NULL.
|
||||
If Certificate is invalid.
|
||||
@retval FALSE If no SerialNumber exists.
|
||||
@retval FALSE If the SerialNumber is NULL. The required buffer size
|
||||
(including the final null) is returned in the
|
||||
SerialNumberSize parameter.
|
||||
@retval FALSE The operation is not supported.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509GetSerialNumber (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
OUT UINT8 *SerialNumber,
|
||||
OPTIONAL
|
||||
IN OUT UINTN *SerialNumberSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the issuer bytes from one X.509 certificate.
|
||||
|
||||
If Cert is NULL, then return FALSE.
|
||||
If CertIssuerSize is NULL, then return FALSE.
|
||||
If this interface is not supported, then return FALSE.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[out] CertIssuer Pointer to the retrieved certificate subject bytes.
|
||||
@param[in, out] CertIssuerSize The size in bytes of the CertIssuer buffer on input,
|
||||
and the size of buffer returned CertSubject on output.
|
||||
|
||||
@retval TRUE The certificate issuer retrieved successfully.
|
||||
@retval FALSE Invalid certificate, or the CertIssuerSize is too small for the result.
|
||||
The CertIssuerSize will be updated with the required size.
|
||||
@retval FALSE This interface is not supported.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509GetIssuerName (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
OUT UINT8 *CertIssuer,
|
||||
IN OUT UINTN *CertIssuerSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the Signature Algorithm from one X.509 certificate.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[out] Oid Signature Algorithm Object identifier buffer.
|
||||
@param[in,out] OidSize Signature Algorithm Object identifier buffer size
|
||||
|
||||
@retval TRUE The certificate Extension data retrieved successfully.
|
||||
@retval FALSE If Cert is NULL.
|
||||
If OidSize is NULL.
|
||||
If Oid is not NULL and *OidSize is 0.
|
||||
If Certificate is invalid.
|
||||
@retval FALSE If no SignatureType.
|
||||
@retval FALSE If the Oid is NULL. The required buffer size
|
||||
is returned in the OidSize.
|
||||
@retval FALSE The operation is not supported.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509GetSignatureAlgorithm (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
OUT UINT8 *Oid,
|
||||
OPTIONAL
|
||||
IN OUT UINTN *OidSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve Extension data from one X.509 certificate.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[in] Oid Object identifier buffer
|
||||
@param[in] OidSize Object identifier buffer size
|
||||
@param[out] ExtensionData Extension bytes.
|
||||
@param[in, out] ExtensionDataSize Extension bytes size.
|
||||
|
||||
@retval TRUE The certificate Extension data retrieved successfully.
|
||||
@retval FALSE If Cert is NULL.
|
||||
If ExtensionDataSize is NULL.
|
||||
If ExtensionData is not NULL and *ExtensionDataSize is 0.
|
||||
If Certificate is invalid.
|
||||
@retval FALSE If no Extension entry match Oid.
|
||||
@retval FALSE If the ExtensionData is NULL. The required buffer size
|
||||
is returned in the ExtensionDataSize parameter.
|
||||
@retval FALSE The operation is not supported.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509GetExtensionData (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
IN CONST UINT8 *Oid,
|
||||
IN UINTN OidSize,
|
||||
OUT UINT8 *ExtensionData,
|
||||
IN OUT UINTN *ExtensionDataSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the Extended Key Usage from one X.509 certificate.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[out] Usage Key Usage bytes.
|
||||
@param[in, out] UsageSize Key Usage buffer sizs in bytes.
|
||||
|
||||
@retval TRUE The Usage bytes retrieve successfully.
|
||||
@retval FALSE If Cert is NULL.
|
||||
If CertSize is NULL.
|
||||
If Usage is not NULL and *UsageSize is 0.
|
||||
If Cert is invalid.
|
||||
@retval FALSE If the Usage is NULL. The required buffer size
|
||||
is returned in the UsageSize parameter.
|
||||
@retval FALSE The operation is not supported.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509GetExtendedKeyUsage (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
OUT UINT8 *Usage,
|
||||
IN OUT UINTN *UsageSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the Validity from one X.509 certificate
|
||||
|
||||
If Cert is NULL, then return FALSE.
|
||||
If CertIssuerSize is NULL, then return FALSE.
|
||||
If this interface is not supported, then return FALSE.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[in] From notBefore Pointer to DateTime object.
|
||||
@param[in,out] FromSize notBefore DateTime object size.
|
||||
@param[in] To notAfter Pointer to DateTime object.
|
||||
@param[in,out] ToSize notAfter DateTime object size.
|
||||
|
||||
Note: X509CompareDateTime to compare DateTime oject
|
||||
x509SetDateTime to get a DateTime object from a DateTimeStr
|
||||
|
||||
@retval TRUE The certificate Validity retrieved successfully.
|
||||
@retval FALSE Invalid certificate, or Validity retrieve failed.
|
||||
@retval FALSE This interface is not supported.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509GetValidity (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
IN UINT8 *From,
|
||||
IN OUT UINTN *FromSize,
|
||||
IN UINT8 *To,
|
||||
IN OUT UINTN *ToSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Format a DateTimeStr to DataTime object in DataTime Buffer
|
||||
|
||||
If DateTimeStr is NULL, then return FALSE.
|
||||
If DateTimeSize is NULL, then return FALSE.
|
||||
If this interface is not supported, then return FALSE.
|
||||
|
||||
@param[in] DateTimeStr DateTime string like YYYYMMDDhhmmssZ
|
||||
Ref: https://www.w3.org/TR/NOTE-datetime
|
||||
Z stand for UTC time
|
||||
@param[out] DateTime Pointer to a DateTime object.
|
||||
@param[in,out] DateTimeSize DateTime object buffer size.
|
||||
|
||||
@retval TRUE The DateTime object create successfully.
|
||||
@retval FALSE If DateTimeStr is NULL.
|
||||
If DateTimeSize is NULL.
|
||||
If DateTime is not NULL and *DateTimeSize is 0.
|
||||
If Year Month Day Hour Minute Second combination is invalid datetime.
|
||||
@retval FALSE If the DateTime is NULL. The required buffer size
|
||||
(including the final null) is returned in the
|
||||
DateTimeSize parameter.
|
||||
@retval FALSE The operation is not supported.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509FormatDateTime (
|
||||
IN CONST CHAR8 *DateTimeStr,
|
||||
OUT VOID *DateTime,
|
||||
IN OUT UINTN *DateTimeSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Compare DateTime1 object and DateTime2 object.
|
||||
|
||||
If DateTime1 is NULL, then return -2.
|
||||
If DateTime2 is NULL, then return -2.
|
||||
If DateTime1 == DateTime2, then return 0
|
||||
If DateTime1 > DateTime2, then return 1
|
||||
If DateTime1 < DateTime2, then return -1
|
||||
|
||||
@param[in] DateTime1 Pointer to a DateTime Ojbect
|
||||
@param[in] DateTime2 Pointer to a DateTime Object
|
||||
|
||||
@retval 0 If DateTime1 == DateTime2
|
||||
@retval 1 If DateTime1 > DateTime2
|
||||
@retval -1 If DateTime1 < DateTime2
|
||||
**/
|
||||
INT32
|
||||
EFIAPI
|
||||
X509CompareDateTime (
|
||||
IN CONST VOID *DateTime1,
|
||||
IN CONST VOID *DateTime2
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return -3;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the Key Usage from one X.509 certificate.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate.
|
||||
@param[in] CertSize Size of the X509 certificate in bytes.
|
||||
@param[out] Usage Key Usage (CRYPTO_X509_KU_*)
|
||||
|
||||
@retval TRUE The certificate Key Usage retrieved successfully.
|
||||
@retval FALSE Invalid certificate, or Usage is NULL
|
||||
@retval FALSE This interface is not supported.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509GetKeyUsage (
|
||||
IN CONST UINT8 *Cert,
|
||||
IN UINTN CertSize,
|
||||
OUT UINTN *Usage
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Verify one X509 certificate was issued by the trusted CA.
|
||||
@param[in] RootCert Trusted Root Certificate buffer
|
||||
|
||||
@param[in] RootCertLength Trusted Root Certificate buffer length
|
||||
@param[in] CertChain One or more ASN.1 DER-encoded X.509 certificates
|
||||
where the first certificate is signed by the Root
|
||||
Certificate or is the Root Cerificate itself. and
|
||||
subsequent cerificate is signed by the preceding
|
||||
cerificate.
|
||||
@param[in] CertChainLength Total length of the certificate chain, in bytes.
|
||||
|
||||
@retval TRUE All cerificates was issued by the first certificate in X509Certchain.
|
||||
@retval FALSE Invalid certificate or the certificate was not issued by the given
|
||||
trusted CA.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509VerifyCertChain (
|
||||
IN CONST UINT8 *RootCert,
|
||||
IN UINTN RootCertLength,
|
||||
IN CONST UINT8 *CertChain,
|
||||
IN UINTN CertChainLength
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Get one X509 certificate from CertChain.
|
||||
|
||||
@param[in] CertChain One or more ASN.1 DER-encoded X.509 certificates
|
||||
where the first certificate is signed by the Root
|
||||
Certificate or is the Root Cerificate itself. and
|
||||
subsequent cerificate is signed by the preceding
|
||||
cerificate.
|
||||
@param[in] CertChainLength Total length of the certificate chain, in bytes.
|
||||
|
||||
@param[in] CertIndex Index of certificate.
|
||||
|
||||
@param[out] Cert The certificate at the index of CertChain.
|
||||
@param[out] CertLength The length certificate at the index of CertChain.
|
||||
|
||||
@retval TRUE Success.
|
||||
@retval FALSE Failed to get certificate from certificate chain.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509GetCertFromCertChain (
|
||||
IN CONST UINT8 *CertChain,
|
||||
IN UINTN CertChainLength,
|
||||
IN CONST INT32 CertIndex,
|
||||
OUT CONST UINT8 **Cert,
|
||||
OUT UINTN *CertLength
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the tag and length of the tag.
|
||||
|
||||
@param Ptr The position in the ASN.1 data
|
||||
@param End End of data
|
||||
@param Length The variable that will receive the length
|
||||
@param Tag The expected tag
|
||||
|
||||
@retval TRUE Get tag successful
|
||||
@retval FALSe Failed to get tag or tag not match
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
Asn1GetTag (
|
||||
IN OUT UINT8 **Ptr,
|
||||
IN CONST UINT8 *End,
|
||||
OUT UINTN *Length,
|
||||
IN UINT32 Tag
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieve the basic constraints from one X.509 certificate.
|
||||
|
||||
@param[in] Cert Pointer to the DER-encoded X509 certificate.
|
||||
@param[in] CertSize size of the X509 certificate in bytes.
|
||||
@param[out] BasicConstraints basic constraints bytes.
|
||||
@param[in, out] BasicConstraintsSize basic constraints buffer sizs in bytes.
|
||||
|
||||
@retval TRUE The basic constraints retrieve successfully.
|
||||
@retval FALSE If cert is NULL.
|
||||
If cert_size is NULL.
|
||||
If basic_constraints is not NULL and *basic_constraints_size is 0.
|
||||
If cert is invalid.
|
||||
@retval FALSE The required buffer size is small.
|
||||
The return buffer size is basic_constraints_size parameter.
|
||||
@retval FALSE If no Extension entry match oid.
|
||||
@retval FALSE The operation is not supported.
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
X509GetExtendedBasicConstraints (
|
||||
CONST UINT8 *Cert,
|
||||
UINTN CertSize,
|
||||
UINT8 *BasicConstraints,
|
||||
UINTN *BasicConstraintsSize
|
||||
)
|
||||
{
|
||||
ASSERT (FALSE);
|
||||
return FALSE;
|
||||
}
|
Reference in New Issue
Block a user