mirror of https://github.com/acidanthera/audk.git
752 lines
25 KiB
C
752 lines
25 KiB
C
/** @file
|
|
X.509 Certificate Handler Wrapper Implementation which does not provide
|
|
real capabilities.
|
|
|
|
Copyright (c) 2012 - 2020, 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;
|
|
}
|