return CALL_BASECRYPTLIB (Bn.Services.AddMod, BigNumAddMod, (BnA, BnB, BnM, BnRes), FALSE);\r
}\r
\r
+// =====================================================================================\r
+// Basic Elliptic Curve Primitives\r
+// =====================================================================================\r
+\r
+/**\r
+ Initialize new opaque EcGroup object. This object represents an EC curve and\r
+ and is used for calculation within this group. This object should be freed\r
+ using EcGroupFree() function.\r
+\r
+ @param[in] CryptoNid Identifying number for the ECC curve (Defined in\r
+ BaseCryptLib.h).\r
+\r
+ @retval EcGroup object On success.\r
+ @retval NULL On failure.\r
+**/\r
+VOID *\r
+EFIAPI\r
+CryptoServiceEcGroupInit (\r
+ IN UINTN CryptoNid\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.GroupInit, EcGroupInit, (CryptoNid), NULL);\r
+}\r
+\r
+/**\r
+ Get EC curve parameters. While elliptic curve equation is Y^2 mod P = (X^3 + AX + B) Mod P.\r
+ This function will set the provided Big Number objects to the corresponding\r
+ values. The caller needs to make sure all the "out" BigNumber parameters\r
+ are properly initialized.\r
+ @param[in] EcGroup EC group object.\r
+ @param[out] BnPrime Group prime number.\r
+ @param[out] BnA A coefficient.\r
+ @param[out] BnB B coefficient.\r
+ @param[in] BnCtx BN context.\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CryptoServiceEcGroupGetCurve (\r
+ IN CONST VOID *EcGroup,\r
+ OUT VOID *BnPrime,\r
+ OUT VOID *BnA,\r
+ OUT VOID *BnB,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.GroupGetCurve, EcGroupGetCurve, (EcGroup, BnPrime, BnA, BnB, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Get EC group order.\r
+ This function will set the provided Big Number object to the corresponding\r
+ value. The caller needs to make sure that the "out" BigNumber parameter\r
+ is properly initialized.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[out] BnOrder Group prime number.\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CryptoServiceEcGroupGetOrder (\r
+ IN VOID *EcGroup,\r
+ OUT VOID *BnOrder\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.GroupGetOrder, EcGroupGetOrder, (EcGroup, BnOrder), FALSE);\r
+}\r
+\r
+/**\r
+ Free previously allocated EC group object using EcGroupInit().\r
+\r
+ @param[in] EcGroup EC group object to free.\r
+**/\r
+VOID\r
+EFIAPI\r
+CryptoServiceEcGroupFree (\r
+ IN VOID *EcGroup\r
+ )\r
+{\r
+ CALL_VOID_BASECRYPTLIB (Ec.Services.GroupFree, EcGroupFree, (EcGroup));\r
+}\r
+\r
+/**\r
+ Initialize new opaque EC Point object. This object represents an EC point\r
+ within the given EC group (curve).\r
+\r
+ @param[in] EC Group, properly initialized using EcGroupInit().\r
+\r
+ @retval EC Point object On success.\r
+ @retval NULL On failure.\r
+**/\r
+VOID *\r
+EFIAPI\r
+CryptoServiceEcPointInit (\r
+ IN CONST VOID *EcGroup\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.PointInit, EcPointInit, (EcGroup), NULL);\r
+}\r
+\r
+/**\r
+ Free previously allocated EC Point object using EcPointInit().\r
+\r
+ @param[in] EcPoint EC Point to free.\r
+ @param[in] Clear TRUE iff the memory should be cleared.\r
+**/\r
+VOID\r
+EFIAPI\r
+CryptoServiceEcPointDeInit (\r
+ IN VOID *EcPoint,\r
+ IN BOOLEAN Clear\r
+ )\r
+{\r
+ CALL_VOID_BASECRYPTLIB (Ec.Services.PointDeInit, EcPointDeInit, (EcPoint, Clear));\r
+}\r
+\r
+/**\r
+ Get EC point affine (x,y) coordinates.\r
+ This function will set the provided Big Number objects to the corresponding\r
+ values. The caller needs to make sure all the "out" BigNumber parameters\r
+ are properly initialized.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[in] EcPoint EC point object.\r
+ @param[out] BnX X coordinate.\r
+ @param[out] BnY Y coordinate.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CryptoServiceEcPointGetAffineCoordinates (\r
+ IN CONST VOID *EcGroup,\r
+ IN CONST VOID *EcPoint,\r
+ OUT VOID *BnX,\r
+ OUT VOID *BnY,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.PointGetAffineCoordinates, EcPointGetAffineCoordinates, (EcGroup, EcPoint, BnX, BnY, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Set EC point affine (x,y) coordinates.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[in] EcPoint EC point object.\r
+ @param[in] BnX X coordinate.\r
+ @param[in] BnY Y coordinate.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CryptoServiceEcPointSetAffineCoordinates (\r
+ IN CONST VOID *EcGroup,\r
+ IN VOID *EcPoint,\r
+ IN CONST VOID *BnX,\r
+ IN CONST VOID *BnY,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.PointSetAffineCoordinates, EcPointSetAffineCoordinates, (EcGroup, EcPoint, BnX, BnY, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ EC Point addition. EcPointResult = EcPointA + EcPointB.\r
+ @param[in] EcGroup EC group object.\r
+ @param[out] EcPointResult EC point to hold the result. The point should\r
+ be properly initialized.\r
+ @param[in] EcPointA EC Point.\r
+ @param[in] EcPointB EC Point.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CryptoServiceEcPointAdd (\r
+ IN CONST VOID *EcGroup,\r
+ OUT VOID *EcPointResult,\r
+ IN CONST VOID *EcPointA,\r
+ IN CONST VOID *EcPointB,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.PointAdd, EcPointAdd, (EcGroup, EcPointResult, EcPointA, EcPointB, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Variable EC point multiplication. EcPointResult = EcPoint * BnPScalar.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[out] EcPointResult EC point to hold the result. The point should\r
+ be properly initialized.\r
+ @param[in] EcPoint EC Point.\r
+ @param[in] BnPScalar P Scalar.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CryptoServiceEcPointMul (\r
+ IN CONST VOID *EcGroup,\r
+ OUT VOID *EcPointResult,\r
+ IN CONST VOID *EcPoint,\r
+ IN CONST VOID *BnPScalar,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.PointMul, EcPointMul, (EcGroup, EcPointResult, EcPoint, BnPScalar, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Calculate the inverse of the supplied EC point.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[in,out] EcPoint EC point to invert.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CryptoServiceEcPointInvert (\r
+ IN CONST VOID *EcGroup,\r
+ IN OUT VOID *EcPoint,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.PointInvert, EcPointInvert, (EcGroup, EcPoint, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Check if the supplied point is on EC curve.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[in] EcPoint EC point to check.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE On curve.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CryptoServiceEcPointIsOnCurve (\r
+ IN CONST VOID *EcGroup,\r
+ IN CONST VOID *EcPoint,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.PointIsOnCurve, EcPointIsOnCurve, (EcGroup, EcPoint, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Check if the supplied point is at infinity.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[in] EcPoint EC point to check.\r
+\r
+ @retval TRUE At infinity.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CryptoServiceEcPointIsAtInfinity (\r
+ IN CONST VOID *EcGroup,\r
+ IN CONST VOID *EcPoint\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.PointIsAtInfinity, EcPointIsAtInfinity, (EcGroup, EcPoint), FALSE);\r
+}\r
+\r
+/**\r
+ Check if EC points are equal.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[in] EcPointA EC point A.\r
+ @param[in] EcPointB EC point B.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE A == B.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CryptoServiceEcPointEqual (\r
+ IN CONST VOID *EcGroup,\r
+ IN CONST VOID *EcPointA,\r
+ IN CONST VOID *EcPointB,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.PointEqual, EcPointEqual, (EcGroup, EcPointA, EcPointB, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Set EC point compressed coordinates. Points can be described in terms of\r
+ their compressed coordinates. For a point (x, y), for any given value for x\r
+ such that the point is on the curve there will only ever be two possible\r
+ values for y. Therefore, a point can be set using this function where BnX is\r
+ the x coordinate and YBit is a value 0 or 1 to identify which of the two\r
+ possible values for y should be used.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[in] EcPoint EC Point.\r
+ @param[in] BnX X coordinate.\r
+ @param[in] YBit 0 or 1 to identify which Y value is used.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CryptoServiceEcPointSetCompressedCoordinates (\r
+ IN CONST VOID *EcGroup,\r
+ IN VOID *EcPoint,\r
+ IN CONST VOID *BnX,\r
+ IN UINT8 YBit,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.PointSetCompressedCoordinates, EcPointSetCompressedCoordinates, (EcGroup, EcPoint, BnX, YBit, BnCtx), FALSE);\r
+}\r
+\r
+// =====================================================================================\r
+// Elliptic Curve Diffie Hellman Primitives\r
+// =====================================================================================\r
+\r
+/**\r
+ Allocates and Initializes one Elliptic Curve Context for subsequent use\r
+ with the NID.\r
+\r
+ @param[in] Nid cipher NID\r
+ @return Pointer to the Elliptic Curve Context that has been initialized.\r
+ If the allocations fails, EcNewByNid() returns NULL.\r
+**/\r
+VOID *\r
+EFIAPI\r
+CryptoServiceEcNewByNid (\r
+ IN UINTN Nid\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.NewByNid, EcNewByNid, (Nid), NULL);\r
+}\r
+\r
+/**\r
+ Release the specified EC context.\r
+\r
+ @param[in] EcContext Pointer to the EC context to be released.\r
+**/\r
+VOID\r
+EFIAPI\r
+CryptoServiceEcFree (\r
+ IN VOID *EcContext\r
+ )\r
+{\r
+ CALL_VOID_BASECRYPTLIB (Ec.Services.Free, EcFree, (EcContext));\r
+}\r
+\r
+/**\r
+ Generates EC key and returns EC public key (X, Y), Please note, this function uses\r
+ pseudo random number generator. The caller must make sure RandomSeed()\r
+ function was properly called before.\r
+ The Ec context should be correctly initialized by EcNewByNid.\r
+ This function generates random secret, and computes the public key (X, Y), which is\r
+ returned via parameter Public, PublicSize.\r
+ X is the first half of Public with size being PublicSize / 2,\r
+ Y is the second half of Public with size being PublicSize / 2.\r
+ EC context is updated accordingly.\r
+ If the Public buffer is too small to hold the public X, Y, FALSE is returned and\r
+ PublicSize is set to the required buffer size to obtain the public X, Y.\r
+ For P-256, the PublicSize is 64. First 32-byte is X, Second 32-byte is Y.\r
+ For P-384, the PublicSize is 96. First 48-byte is X, Second 48-byte is Y.\r
+ For P-521, the PublicSize is 132. First 66-byte is X, Second 66-byte is Y.\r
+ If EcContext is NULL, then return FALSE.\r
+ If PublicSize is NULL, then return FALSE.\r
+ If PublicSize is large enough but Public is NULL, then return FALSE.\r
+ @param[in, out] EcContext Pointer to the EC context.\r
+ @param[out] PublicKey Pointer to t buffer to receive generated public X,Y.\r
+ @param[in, out] PublicKeySize On input, the size of Public buffer in bytes.\r
+ On output, the size of data returned in Public buffer in bytes.\r
+ @retval TRUE EC public X,Y generation succeeded.\r
+ @retval FALSE EC public X,Y generation failed.\r
+ @retval FALSE PublicKeySize is not large enough.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CryptoServiceEcGenerateKey (\r
+ IN OUT VOID *EcContext,\r
+ OUT UINT8 *PublicKey,\r
+ IN OUT UINTN *PublicKeySize\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.GenerateKey, EcGenerateKey, (EcContext, PublicKey, PublicKeySize), FALSE);\r
+}\r
+\r
+/**\r
+ Gets the public key component from the established EC context.\r
+ The Ec context should be correctly initialized by EcNewByNid, and successfully\r
+ generate key pair from EcGenerateKey().\r
+ For P-256, the PublicSize is 64. First 32-byte is X, Second 32-byte is Y.\r
+ For P-384, the PublicSize is 96. First 48-byte is X, Second 48-byte is Y.\r
+ For P-521, the PublicSize is 132. First 66-byte is X, Second 66-byte is Y.\r
+ @param[in, out] EcContext Pointer to EC context being set.\r
+ @param[out] PublicKey Pointer to t buffer to receive generated public X,Y.\r
+ @param[in, out] PublicKeySize On input, the size of Public buffer in bytes.\r
+ On output, the size of data returned in Public buffer in bytes.\r
+ @retval TRUE EC key component was retrieved successfully.\r
+ @retval FALSE Invalid EC key component.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CryptoServiceEcGetPubKey (\r
+ IN OUT VOID *EcContext,\r
+ OUT UINT8 *PublicKey,\r
+ IN OUT UINTN *PublicKeySize\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.GetPubKey, EcGetPubKey, (EcContext, PublicKey, PublicKeySize), FALSE);\r
+}\r
+\r
+/**\r
+ Computes exchanged common key.\r
+ Given peer's public key (X, Y), this function computes the exchanged common key,\r
+ based on its own context including value of curve parameter and random secret.\r
+ X is the first half of PeerPublic with size being PeerPublicSize / 2,\r
+ Y is the second half of PeerPublic with size being PeerPublicSize / 2.\r
+ If EcContext is NULL, then return FALSE.\r
+ If PeerPublic is NULL, then return FALSE.\r
+ If PeerPublicSize is 0, then return FALSE.\r
+ If Key is NULL, then return FALSE.\r
+ If KeySize is not large enough, then return FALSE.\r
+ For P-256, the PeerPublicSize is 64. First 32-byte is X, Second 32-byte is Y.\r
+ For P-384, the PeerPublicSize is 96. First 48-byte is X, Second 48-byte is Y.\r
+ For P-521, the PeerPublicSize is 132. First 66-byte is X, Second 66-byte is Y.\r
+ @param[in, out] EcContext Pointer to the EC context.\r
+ @param[in] PeerPublic Pointer to the peer's public X,Y.\r
+ @param[in] PeerPublicSize Size of peer's public X,Y in bytes.\r
+ @param[in] CompressFlag Flag of PeerPublic is compressed or not.\r
+ @param[out] Key Pointer to the buffer to receive generated key.\r
+ @param[in, out] KeySize On input, the size of Key buffer in bytes.\r
+ On output, the size of data returned in Key buffer in bytes.\r
+ @retval TRUE EC exchanged key generation succeeded.\r
+ @retval FALSE EC exchanged key generation failed.\r
+ @retval FALSE KeySize is not large enough.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CryptoServiceEcDhComputeKey (\r
+ IN OUT VOID *EcContext,\r
+ IN CONST UINT8 *PeerPublic,\r
+ IN UINTN PeerPublicSize,\r
+ IN CONST INT32 *CompressFlag,\r
+ OUT UINT8 *Key,\r
+ IN OUT UINTN *KeySize\r
+ )\r
+{\r
+ return CALL_BASECRYPTLIB (Ec.Services.DhComputeKey, EcDhComputeKey, (EcContext, PeerPublic, PeerPublicSize, CompressFlag, Key, KeySize), FALSE);\r
+}\r
+\r
const EDKII_CRYPTO_PROTOCOL mEdkiiCrypto = {\r
/// Version\r
CryptoServiceGetCryptoVersion,\r
CryptoServiceBigNumContextFree,\r
CryptoServiceBigNumSetUint,\r
CryptoServiceBigNumAddMod,\r
+ /// EC\r
+ CryptoServiceEcGroupInit,\r
+ CryptoServiceEcGroupGetCurve,\r
+ CryptoServiceEcGroupGetOrder,\r
+ CryptoServiceEcGroupFree,\r
+ CryptoServiceEcPointInit,\r
+ CryptoServiceEcPointDeInit,\r
+ CryptoServiceEcPointGetAffineCoordinates,\r
+ CryptoServiceEcPointSetAffineCoordinates,\r
+ CryptoServiceEcPointAdd,\r
+ CryptoServiceEcPointMul,\r
+ CryptoServiceEcPointInvert,\r
+ CryptoServiceEcPointIsOnCurve,\r
+ CryptoServiceEcPointIsAtInfinity,\r
+ CryptoServiceEcPointEqual,\r
+ CryptoServiceEcPointSetCompressedCoordinates,\r
+ CryptoServiceEcNewByNid,\r
+ CryptoServiceEcFree,\r
+ CryptoServiceEcGenerateKey,\r
+ CryptoServiceEcGetPubKey,\r
+ CryptoServiceEcDhComputeKey,\r
};\r
{\r
CALL_CRYPTO_SERVICE (BigNumAddMod, (BnA, BnB, BnM, BnRes), FALSE);\r
}\r
+\r
+/**\r
+ Initialize new opaque EcGroup object. This object represents an EC curve and\r
+ and is used for calculation within this group. This object should be freed\r
+ using EcGroupFree() function.\r
+\r
+ @param[in] CryptoNid Identifying number for the ECC curve (Defined in\r
+ BaseCryptLib.h).\r
+\r
+ @retval EcGroup object On success.\r
+ @retval NULL On failure.\r
+**/\r
+VOID *\r
+EFIAPI\r
+EcGroupInit (\r
+ IN UINTN CryptoNid\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcGroupInit, (CryptoNid), NULL);\r
+}\r
+\r
+/**\r
+ Get EC curve parameters. While elliptic curve equation is Y^2 mod P = (X^3 + AX + B) Mod P.\r
+ This function will set the provided Big Number objects to the corresponding\r
+ values. The caller needs to make sure all the "out" BigNumber parameters\r
+ are properly initialized.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[out] BnPrime Group prime number.\r
+ @param[out] BnA A coefficient.\r
+ @param[out] BnB B coefficient.\r
+ @param[in] BnCtx BN context.\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EcGroupGetCurve (\r
+ IN CONST VOID *EcGroup,\r
+ OUT VOID *BnPrime,\r
+ OUT VOID *BnA,\r
+ OUT VOID *BnB,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcGroupGetCurve, (EcGroup, BnPrime, BnA, BnB, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Get EC group order.\r
+ This function will set the provided Big Number object to the corresponding\r
+ value. The caller needs to make sure that the "out" BigNumber parameter\r
+ is properly initialized.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[out] BnOrder Group prime number.\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EcGroupGetOrder (\r
+ IN VOID *EcGroup,\r
+ OUT VOID *BnOrder\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcGroupGetOrder, (EcGroup, BnOrder), FALSE);\r
+}\r
+\r
+/**\r
+ Free previously allocated EC group object using EcGroupInit().\r
+\r
+ @param[in] EcGroup EC group object to free.\r
+**/\r
+VOID\r
+EFIAPI\r
+EcGroupFree (\r
+ IN VOID *EcGroup\r
+ )\r
+{\r
+ CALL_VOID_CRYPTO_SERVICE (EcGroupFree, (EcGroup));\r
+}\r
+\r
+/**\r
+ Initialize new opaque EC Point object. This object represents an EC point\r
+ within the given EC group (curve).\r
+\r
+ @param[in] EC Group, properly initialized using EcGroupInit().\r
+\r
+ @retval EC Point object On success.\r
+ @retval NULL On failure.\r
+**/\r
+VOID *\r
+EFIAPI\r
+EcPointInit (\r
+ IN CONST VOID *EcGroup\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcPointInit, (EcGroup), NULL);\r
+}\r
+\r
+/**\r
+ Free previously allocated EC Point object using EcPointInit().\r
+\r
+ @param[in] EcPoint EC Point to free.\r
+ @param[in] Clear TRUE iff the memory should be cleared.\r
+**/\r
+VOID\r
+EFIAPI\r
+EcPointDeInit (\r
+ IN VOID *EcPoint,\r
+ IN BOOLEAN Clear\r
+ )\r
+{\r
+ CALL_VOID_CRYPTO_SERVICE (EcPointDeInit, (EcPoint, Clear));\r
+}\r
+\r
+/**\r
+ Get EC point affine (x,y) coordinates.\r
+ This function will set the provided Big Number objects to the corresponding\r
+ values. The caller needs to make sure all the "out" BigNumber parameters\r
+ are properly initialized.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[in] EcPoint EC point object.\r
+ @param[out] BnX X coordinate.\r
+ @param[out] BnY Y coordinate.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EcPointGetAffineCoordinates (\r
+ IN CONST VOID *EcGroup,\r
+ IN CONST VOID *EcPoint,\r
+ OUT VOID *BnX,\r
+ OUT VOID *BnY,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcPointGetAffineCoordinates, (EcGroup, EcPoint, BnX, BnY, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Set EC point affine (x,y) coordinates.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[in] EcPoint EC point object.\r
+ @param[in] BnX X coordinate.\r
+ @param[in] BnY Y coordinate.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EcPointSetAffineCoordinates (\r
+ IN CONST VOID *EcGroup,\r
+ IN VOID *EcPoint,\r
+ IN CONST VOID *BnX,\r
+ IN CONST VOID *BnY,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcPointSetAffineCoordinates, (EcGroup, EcPoint, BnX, BnY, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ EC Point addition. EcPointResult = EcPointA + EcPointB.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[out] EcPointResult EC point to hold the result. The point should\r
+ be properly initialized.\r
+ @param[in] EcPointA EC Point.\r
+ @param[in] EcPointB EC Point.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EcPointAdd (\r
+ IN CONST VOID *EcGroup,\r
+ OUT VOID *EcPointResult,\r
+ IN CONST VOID *EcPointA,\r
+ IN CONST VOID *EcPointB,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcPointAdd, (EcGroup, EcPointResult, EcPointA, EcPointB, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Variable EC point multiplication. EcPointResult = EcPoint * BnPScalar.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[out] EcPointResult EC point to hold the result. The point should\r
+ be properly initialized.\r
+ @param[in] EcPoint EC Point.\r
+ @param[in] BnPScalar P Scalar.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EcPointMul (\r
+ IN CONST VOID *EcGroup,\r
+ OUT VOID *EcPointResult,\r
+ IN CONST VOID *EcPoint,\r
+ IN CONST VOID *BnPScalar,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcPointMul, (EcGroup, EcPointResult, EcPoint, BnPScalar, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Calculate the inverse of the supplied EC point.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[in,out] EcPoint EC point to invert.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EcPointInvert (\r
+ IN CONST VOID *EcGroup,\r
+ IN OUT VOID *EcPoint,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcPointInvert, (EcGroup, EcPoint, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Check if the supplied point is on EC curve.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[in] EcPoint EC point to check.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE On curve.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EcPointIsOnCurve (\r
+ IN CONST VOID *EcGroup,\r
+ IN CONST VOID *EcPoint,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcPointIsOnCurve, (EcGroup, EcPoint, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Check if the supplied point is at infinity.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[in] EcPoint EC point to check.\r
+\r
+ @retval TRUE At infinity.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EcPointIsAtInfinity (\r
+ IN CONST VOID *EcGroup,\r
+ IN CONST VOID *EcPoint\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcPointIsAtInfinity, (EcGroup, EcPoint), FALSE);\r
+}\r
+\r
+/**\r
+ Check if EC points are equal.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[in] EcPointA EC point A.\r
+ @param[in] EcPointB EC point B.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE A == B.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EcPointEqual (\r
+ IN CONST VOID *EcGroup,\r
+ IN CONST VOID *EcPointA,\r
+ IN CONST VOID *EcPointB,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcPointEqual, (EcGroup, EcPointA, EcPointB, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Set EC point compressed coordinates. Points can be described in terms of\r
+ their compressed coordinates. For a point (x, y), for any given value for x\r
+ such that the point is on the curve there will only ever be two possible\r
+ values for y. Therefore, a point can be set using this function where BnX is\r
+ the x coordinate and YBit is a value 0 or 1 to identify which of the two\r
+ possible values for y should be used.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[in] EcPoint EC Point.\r
+ @param[in] BnX X coordinate.\r
+ @param[in] YBit 0 or 1 to identify which Y value is used.\r
+ @param[in] BnCtx BN context, created with BigNumNewContext().\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EcPointSetCompressedCoordinates (\r
+ IN CONST VOID *EcGroup,\r
+ IN VOID *EcPoint,\r
+ IN CONST VOID *BnX,\r
+ IN UINT8 YBit,\r
+ IN VOID *BnCtx\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcPointSetCompressedCoordinates, (EcGroup, EcPoint, BnX, YBit, BnCtx), FALSE);\r
+}\r
+\r
+/**\r
+ Allocates and Initializes one Elliptic Curve Context for subsequent use\r
+ with the NID.\r
+\r
+ @param[in] Nid cipher NID\r
+ @return Pointer to the Elliptic Curve Context that has been initialized.\r
+ If the allocations fails, EcNewByNid() returns NULL.\r
+**/\r
+VOID *\r
+EFIAPI\r
+EcNewByNid (\r
+ IN UINTN Nid\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcNewByNid, (Nid), NULL);\r
+}\r
+\r
+/**\r
+ Release the specified EC context.\r
+\r
+ @param[in] EcContext Pointer to the EC context to be released.\r
+**/\r
+VOID\r
+EFIAPI\r
+EcFree (\r
+ IN VOID *EcContext\r
+ )\r
+{\r
+ CALL_VOID_CRYPTO_SERVICE (EcFree, (EcContext));\r
+}\r
+\r
+/**\r
+ Generates EC key and returns EC public key (X, Y), Please note, this function uses\r
+ pseudo random number generator. The caller must make sure RandomSeed()\r
+ function was properly called before.\r
+ The Ec context should be correctly initialized by EcNewByNid.\r
+ This function generates random secret, and computes the public key (X, Y), which is\r
+ returned via parameter Public, PublicSize.\r
+ X is the first half of Public with size being PublicSize / 2,\r
+ Y is the second half of Public with size being PublicSize / 2.\r
+ EC context is updated accordingly.\r
+ If the Public buffer is too small to hold the public X, Y, FALSE is returned and\r
+ PublicSize is set to the required buffer size to obtain the public X, Y.\r
+ For P-256, the PublicSize is 64. First 32-byte is X, Second 32-byte is Y.\r
+ For P-384, the PublicSize is 96. First 48-byte is X, Second 48-byte is Y.\r
+ For P-521, the PublicSize is 132. First 66-byte is X, Second 66-byte is Y.\r
+ If EcContext is NULL, then return FALSE.\r
+ If PublicSize is NULL, then return FALSE.\r
+ If PublicSize is large enough but Public is NULL, then return FALSE.\r
+ @param[in, out] EcContext Pointer to the EC context.\r
+ @param[out] PublicKey Pointer to the buffer to receive generated public X,Y.\r
+ @param[in, out] PublicKeySize On input, the size of Public buffer in bytes.\r
+ On output, the size of data returned in Public buffer in bytes.\r
+ @retval TRUE EC public X,Y generation succeeded.\r
+ @retval FALSE EC public X,Y generation failed.\r
+ @retval FALSE PublicKeySize is not large enough.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EcGenerateKey (\r
+ IN OUT VOID *EcContext,\r
+ OUT UINT8 *PublicKey,\r
+ IN OUT UINTN *PublicKeySize\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcGenerateKey, (EcContext, PublicKey, PublicKeySize), FALSE);\r
+}\r
+\r
+/**\r
+ Gets the public key component from the established EC context.\r
+ The Ec context should be correctly initialized by EcNewByNid, and successfully\r
+ generate key pair from EcGenerateKey().\r
+ For P-256, the PublicSize is 64. First 32-byte is X, Second 32-byte is Y.\r
+ For P-384, the PublicSize is 96. First 48-byte is X, Second 48-byte is Y.\r
+ For P-521, the PublicSize is 132. First 66-byte is X, Second 66-byte is Y.\r
+ @param[in, out] EcContext Pointer to EC context being set.\r
+ @param[out] PublicKey Pointer to t buffer to receive generated public X,Y.\r
+ @param[in, out] PublicKeySize On input, the size of Public buffer in bytes.\r
+ On output, the size of data returned in Public buffer in bytes.\r
+ @retval TRUE EC key component was retrieved successfully.\r
+ @retval FALSE Invalid EC key component.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EcGetPubKey (\r
+ IN OUT VOID *EcContext,\r
+ OUT UINT8 *PublicKey,\r
+ IN OUT UINTN *PublicKeySize\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcGetPubKey, (EcContext, PublicKey, PublicKeySize), FALSE);\r
+}\r
+\r
+/**\r
+ Computes exchanged common key.\r
+ Given peer's public key (X, Y), this function computes the exchanged common key,\r
+ based on its own context including value of curve parameter and random secret.\r
+ X is the first half of PeerPublic with size being PeerPublicSize / 2,\r
+ Y is the second half of PeerPublic with size being PeerPublicSize / 2.\r
+ If EcContext is NULL, then return FALSE.\r
+ If PeerPublic is NULL, then return FALSE.\r
+ If PeerPublicSize is 0, then return FALSE.\r
+ If Key is NULL, then return FALSE.\r
+ If KeySize is not large enough, then return FALSE.\r
+ For P-256, the PeerPublicSize is 64. First 32-byte is X, Second 32-byte is Y.\r
+ For P-384, the PeerPublicSize is 96. First 48-byte is X, Second 48-byte is Y.\r
+ For P-521, the PeerPublicSize is 132. First 66-byte is X, Second 66-byte is Y.\r
+ @param[in, out] EcContext Pointer to the EC context.\r
+ @param[in] PeerPublic Pointer to the peer's public X,Y.\r
+ @param[in] PeerPublicSize Size of peer's public X,Y in bytes.\r
+ @param[in] CompressFlag Flag of PeerPublic is compressed or not.\r
+ @param[out] Key Pointer to the buffer to receive generated key.\r
+ @param[in, out] KeySize On input, the size of Key buffer in bytes.\r
+ On output, the size of data returned in Key buffer in bytes.\r
+ @retval TRUE EC exchanged key generation succeeded.\r
+ @retval FALSE EC exchanged key generation failed.\r
+ @retval FALSE KeySize is not large enough.\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+EcDhComputeKey (\r
+ IN OUT VOID *EcContext,\r
+ IN CONST UINT8 *PeerPublic,\r
+ IN UINTN PeerPublicSize,\r
+ IN CONST INT32 *CompressFlag,\r
+ OUT UINT8 *Key,\r
+ IN OUT UINTN *KeySize\r
+ )\r
+{\r
+ CALL_CRYPTO_SERVICE (EcDhComputeKey, (EcContext, PeerPublic, PeerPublicSize, CompressFlag, Key, KeySize), FALSE);\r
+}\r
/// the EDK II Crypto Protocol is extended, this version define must be\r
/// increased.\r
///\r
-#define EDKII_CRYPTO_VERSION 12\r
+#define EDKII_CRYPTO_VERSION 13\r
\r
///\r
/// EDK II Crypto Protocol forward declaration\r
OUT VOID *BnRes\r
);\r
\r
+/**\r
+ Initialize new opaque EcGroup object. This object represents an EC curve and\r
+ and is used for calculation within this group. This object should be freed\r
+ using EcGroupFree() function.\r
+\r
+ @param[in] CryptoNid Identifying number for the ECC curve (Defined in\r
+ BaseCryptLib.h).\r
+\r
+ @retval EcGroup object On success\r
+ @retval NULL On failure\r
+**/\r
+typedef\r
+VOID *\r
+(EFIAPI *EDKII_CRYPTO_EC_GROUP_INIT)(\r
+ IN UINTN CryptoNid\r
+ );\r
+\r
+/**\r
+ Get EC curve parameters. While elliptic curve equation is Y^2 mod P = (X^3 + AX + B) Mod P.\r
+ This function will set the provided Big Number objects to the corresponding\r
+ values. The caller needs to make sure all the "out" BigNumber parameters\r
+ are properly initialized.\r
+\r
+ @param[in] EcGroup EC group object.\r
+ @param[out] BnPrime Group prime number.\r
+ @param[out] BnA A coefficient.\r
+ @param[out] BnB B coefficient.\r
+ @param[in] BnCtx BN context.\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *EDKII_CRYPTO_EC_GROUP_GET_CURVE)(\r
+ IN CONST VOID *EcGroup,\r
+ OUT VOID *BnPrime,\r
+ OUT VOID *BnA,\r
+ OUT VOID *BnB,\r
+ IN VOID *BnCtx\r
+ );\r
+\r
+/**\r
+ Get EC group order.\r
+ This function will set the provided Big Number object to the corresponding\r
+ value. The caller needs to make sure that the "out" BigNumber parameter\r
+ is properly initialized.\r
+\r
+ @param[in] EcGroup EC group object\r
+ @param[out] BnOrder Group prime number\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *EDKII_CRYPTO_EC_GROUP_GET_ORDER)(\r
+ IN VOID *EcGroup,\r
+ OUT VOID *BnOrder\r
+ );\r
+\r
+/**\r
+ Free previously allocated EC group object using EcGroupInit()\r
+\r
+ @param[in] EcGroup EC group object to free\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *EDKII_CRYPTO_EC_GROUP_FREE)(\r
+ IN VOID *EcGroup\r
+ );\r
+\r
+/**\r
+ Initialize new opaque EC Point object. This object represents an EC point\r
+ within the given EC group (curve).\r
+\r
+ @param[in] EC Group, properly initialized using EcGroupInit()\r
+\r
+ @retval EC Point object On success\r
+ @retval NULL On failure\r
+**/\r
+typedef\r
+VOID *\r
+(EFIAPI *EDKII_CRYPTO_EC_POINT_INIT)(\r
+ IN CONST VOID *EcGroup\r
+ );\r
+\r
+/**\r
+ Free previously allocated EC Point object using EcPointInit()\r
+\r
+ @param[in] EcPoint EC Point to free\r
+ @param[in] Clear TRUE iff the memory should be cleared\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *EDKII_CRYPTO_EC_POINT_DE_INIT)(\r
+ IN VOID *EcPoint,\r
+ IN BOOLEAN Clear\r
+ );\r
+\r
+/**\r
+ Get EC point affine (x,y) coordinates.\r
+ This function will set the provided Big Number objects to the corresponding\r
+ values. The caller needs to make sure all the "out" BigNumber parameters\r
+ are properly initialized.\r
+\r
+ @param[in] EcGroup EC group object\r
+ @param[in] EcPoint EC point object\r
+ @param[out] BnX X coordinate\r
+ @param[out] BnY Y coordinate\r
+ @param[in] BnCtx BN context, created with BigNumNewContext()\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *EDKII_CRYPTO_EC_POINT_GET_AFFINE_COORDINATES)(\r
+ IN CONST VOID *EcGroup,\r
+ IN CONST VOID *EcPoint,\r
+ OUT VOID *BnX,\r
+ OUT VOID *BnY,\r
+ IN VOID *BnCtx\r
+ );\r
+\r
+/**\r
+ Set EC point affine (x,y) coordinates.\r
+\r
+ @param[in] EcGroup EC group object\r
+ @param[in] EcPoint EC point object\r
+ @param[in] BnX X coordinate\r
+ @param[in] BnY Y coordinate\r
+ @param[in] BnCtx BN context, created with BigNumNewContext()\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *EDKII_CRYPTO_EC_POINT_SET_AFFINE_COORDINATES)(\r
+ IN CONST VOID *EcGroup,\r
+ IN VOID *EcPoint,\r
+ IN CONST VOID *BnX,\r
+ IN CONST VOID *BnY,\r
+ IN VOID *BnCtx\r
+ );\r
+\r
+/**\r
+ EC Point addition. EcPointResult = EcPointA + EcPointB\r
+\r
+ @param[in] EcGroup EC group object\r
+ @param[out] EcPointResult EC point to hold the result. The point should\r
+ be properly initialized.\r
+ @param[in] EcPointA EC Point\r
+ @param[in] EcPointB EC Point\r
+ @param[in] BnCtx BN context, created with BigNumNewContext()\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *EDKII_CRYPTO_EC_POINT_ADD)(\r
+ IN CONST VOID *EcGroup,\r
+ OUT VOID *EcPointResult,\r
+ IN CONST VOID *EcPointA,\r
+ IN CONST VOID *EcPointB,\r
+ IN VOID *BnCtx\r
+ );\r
+\r
+/**\r
+ Variable EC point multiplication. EcPointResult = EcPoint * BnPScalar\r
+\r
+ @param[in] EcGroup EC group object\r
+ @param[out] EcPointResult EC point to hold the result. The point should\r
+ be properly initialized.\r
+ @param[in] EcPoint EC Point\r
+ @param[in] BnPScalar P Scalar\r
+ @param[in] BnCtx BN context, created with BigNumNewContext()\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *EDKII_CRYPTO_EC_POINT_MUL)(\r
+ IN CONST VOID *EcGroup,\r
+ OUT VOID *EcPointResult,\r
+ IN CONST VOID *EcPoint,\r
+ IN CONST VOID *BnPScalar,\r
+ IN VOID *BnCtx\r
+ );\r
+\r
+/**\r
+ Calculate the inverse of the supplied EC point.\r
+\r
+ @param[in] EcGroup EC group object\r
+ @param[in,out] EcPoint EC point to invert\r
+ @param[in] BnCtx BN context, created with BigNumNewContext()\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *EDKII_CRYPTO_EC_POINT_INVERT)(\r
+ IN CONST VOID *EcGroup,\r
+ IN OUT VOID *EcPoint,\r
+ IN VOID *BnCtx\r
+ );\r
+\r
+/**\r
+ Check if the supplied point is on EC curve\r
+\r
+ @param[in] EcGroup EC group object\r
+ @param[in] EcPoint EC point to check\r
+ @param[in] BnCtx BN context, created with BigNumNewContext()\r
+\r
+ @retval TRUE On curve\r
+ @retval FALSE Otherwise\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *EDKII_CRYPTO_EC_POINT_IS_ON_CURVE)(\r
+ IN CONST VOID *EcGroup,\r
+ IN CONST VOID *EcPoint,\r
+ IN VOID *BnCtx\r
+ );\r
+\r
+/**\r
+ Check if the supplied point is at infinity\r
+\r
+ @param[in] EcGroup EC group object\r
+ @param[in] EcPoint EC point to check\r
+ @param[in] BnCtx BN context, created with BigNumNewContext()\r
+\r
+ @retval TRUE At infinity\r
+ @retval FALSE Otherwise\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *EDKII_CRYPTO_EC_POINT_IS_AT_INFINITY)(\r
+ IN CONST VOID *EcGroup,\r
+ IN CONST VOID *EcPoint\r
+ );\r
+\r
+/**\r
+ Check if EC points are equal\r
+\r
+ @param[in] EcGroup EC group object\r
+ @param[in] EcPointA EC point A\r
+ @param[in] EcPointB EC point B\r
+ @param[in] BnCtx BN context, created with BigNumNewContext()\r
+\r
+ @retval TRUE A == B\r
+ @retval FALSE Otherwise\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *EDKII_CRYPTO_EC_POINT_EQUAL)(\r
+ IN CONST VOID *EcGroup,\r
+ IN CONST VOID *EcPointA,\r
+ IN CONST VOID *EcPointB,\r
+ IN VOID *BnCtx\r
+ );\r
+\r
+/**\r
+ Set EC point compressed coordinates. Points can be described in terms of\r
+ their compressed coordinates. For a point (x, y), for any given value for x\r
+ such that the point is on the curve there will only ever be two possible\r
+ values for y. Therefore, a point can be set using this function where BnX is\r
+ the x coordinate and YBit is a value 0 or 1 to identify which of the two\r
+ possible values for y should be used.\r
+\r
+ @param[in] EcGroup EC group object\r
+ @param[in] EcPoint EC Point\r
+ @param[in] BnX X coordinate\r
+ @param[in] YBit 0 or 1 to identify which Y value is used\r
+ @param[in] BnCtx BN context, created with BigNumNewContext()\r
+\r
+ @retval TRUE On success.\r
+ @retval FALSE Otherwise.\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *EDKII_CRYPTO_EC_POINT_SET_COMPRESSED_COORDINATES)(\r
+ IN CONST VOID *EcGroup,\r
+ IN VOID *EcPoint,\r
+ IN CONST VOID *BnX,\r
+ IN UINT8 YBit,\r
+ IN VOID *BnCtx\r
+ );\r
+\r
+/**\r
+ Allocates and Initializes one Elliptic Curve Context for subsequent use\r
+ with the NID.\r
+\r
+ @param[in] Nid cipher NID\r
+ @return Pointer to the Elliptic Curve Context that has been initialized.\r
+ If the allocations fails, EcNewByNid() returns NULL.\r
+**/\r
+typedef\r
+VOID *\r
+(EFIAPI *EDKII_CRYPTO_EC_NEW_BY_NID)(\r
+ IN UINTN Nid\r
+ );\r
+\r
+/**\r
+ Release the specified EC context.\r
+\r
+ @param[in] EcContext Pointer to the EC context to be released.\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *EDKII_CRYPTO_EC_FREE)(\r
+ IN VOID *EcContext\r
+ );\r
+\r
+/**\r
+ Generates EC key and returns EC public key (X, Y), Please note, this function uses\r
+ pseudo random number generator. The caller must make sure RandomSeed()\r
+ function was properly called before.\r
+ The Ec context should be correctly initialized by EcNewByNid.\r
+ This function generates random secret, and computes the public key (X, Y), which is\r
+ returned via parameter Public, PublicSize.\r
+ X is the first half of Public with size being PublicSize / 2,\r
+ Y is the second half of Public with size being PublicSize / 2.\r
+ EC context is updated accordingly.\r
+ If the Public buffer is too small to hold the public X, Y, FALSE is returned and\r
+ PublicSize is set to the required buffer size to obtain the public X, Y.\r
+ For P-256, the PublicSize is 64. First 32-byte is X, Second 32-byte is Y.\r
+ For P-384, the PublicSize is 96. First 48-byte is X, Second 48-byte is Y.\r
+ For P-521, the PublicSize is 132. First 66-byte is X, Second 66-byte is Y.\r
+ If EcContext is NULL, then return FALSE.\r
+ If PublicSize is NULL, then return FALSE.\r
+ If PublicSize is large enough but Public is NULL, then return FALSE.\r
+ @param[in, out] EcContext Pointer to the EC context.\r
+ @param[out] PublicKey Pointer to t buffer to receive generated public X,Y.\r
+ @param[in, out] PublicKeySize On input, the size of Public buffer in bytes.\r
+ On output, the size of data returned in Public buffer in bytes.\r
+ @retval TRUE EC public X,Y generation succeeded.\r
+ @retval FALSE EC public X,Y generation failed.\r
+ @retval FALSE PublicKeySize is not large enough.\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *EDKII_CRYPTO_EC_GENERATE_KEY)(\r
+ IN OUT VOID *EcContext,\r
+ OUT UINT8 *PublicKey,\r
+ IN OUT UINTN *PublicKeySize\r
+ );\r
+\r
+/**\r
+ Gets the public key component from the established EC context.\r
+ The Ec context should be correctly initialized by EcNewByNid, and successfully\r
+ generate key pair from EcGenerateKey().\r
+ For P-256, the PublicSize is 64. First 32-byte is X, Second 32-byte is Y.\r
+ For P-384, the PublicSize is 96. First 48-byte is X, Second 48-byte is Y.\r
+ For P-521, the PublicSize is 132. First 66-byte is X, Second 66-byte is Y.\r
+ @param[in, out] EcContext Pointer to EC context being set.\r
+ @param[out] PublicKey Pointer to t buffer to receive generated public X,Y.\r
+ @param[in, out] PublicKeySize On input, the size of Public buffer in bytes.\r
+ On output, the size of data returned in Public buffer in bytes.\r
+ @retval TRUE EC key component was retrieved successfully.\r
+ @retval FALSE Invalid EC key component.\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *EDKII_CRYPTO_EC_GET_PUB_KEY)(\r
+ IN OUT VOID *EcContext,\r
+ OUT UINT8 *PublicKey,\r
+ IN OUT UINTN *PublicKeySize\r
+ );\r
+\r
+/**\r
+ Computes exchanged common key.\r
+ Given peer's public key (X, Y), this function computes the exchanged common key,\r
+ based on its own context including value of curve parameter and random secret.\r
+ X is the first half of PeerPublic with size being PeerPublicSize / 2,\r
+ Y is the second half of PeerPublic with size being PeerPublicSize / 2.\r
+ If EcContext is NULL, then return FALSE.\r
+ If PeerPublic is NULL, then return FALSE.\r
+ If PeerPublicSize is 0, then return FALSE.\r
+ If Key is NULL, then return FALSE.\r
+ If KeySize is not large enough, then return FALSE.\r
+ For P-256, the PeerPublicSize is 64. First 32-byte is X, Second 32-byte is Y.\r
+ For P-384, the PeerPublicSize is 96. First 48-byte is X, Second 48-byte is Y.\r
+ For P-521, the PeerPublicSize is 132. First 66-byte is X, Second 66-byte is Y.\r
+ @param[in, out] EcContext Pointer to the EC context.\r
+ @param[in] PeerPublic Pointer to the peer's public X,Y.\r
+ @param[in] PeerPublicSize Size of peer's public X,Y in bytes.\r
+ @param[in] CompressFlag Flag of PeerPublic is compressed or not.\r
+ @param[out] Key Pointer to the buffer to receive generated key.\r
+ @param[in, out] KeySize On input, the size of Key buffer in bytes.\r
+ On output, the size of data returned in Key buffer in bytes.\r
+ @retval TRUE EC exchanged key generation succeeded.\r
+ @retval FALSE EC exchanged key generation failed.\r
+ @retval FALSE KeySize is not large enough.\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *EDKII_CRYPTO_EC_DH_COMPUTE_KEY)(\r
+ IN OUT VOID *EcContext,\r
+ IN CONST UINT8 *PeerPublic,\r
+ IN UINTN PeerPublicSize,\r
+ IN CONST INT32 *CompressFlag,\r
+ OUT UINT8 *Key,\r
+ IN OUT UINTN *KeySize\r
+ );\r
+\r
///\r
/// EDK II Crypto Protocol\r
///\r
struct _EDKII_CRYPTO_PROTOCOL {\r
/// Version\r
- EDKII_CRYPTO_GET_VERSION GetVersion;\r
+ EDKII_CRYPTO_GET_VERSION GetVersion;\r
/// HMAC MD5 - deprecated and unsupported\r
- DEPRECATED_EDKII_CRYPTO_HMAC_MD5_NEW DeprecatedHmacMd5New;\r
- DEPRECATED_EDKII_CRYPTO_HMAC_MD5_FREE DeprecatedHmacMd5Free;\r
- DEPRECATED_EDKII_CRYPTO_HMAC_MD5_SET_KEY DeprecatedHmacMd5SetKey;\r
- DEPRECATED_EDKII_CRYPTO_HMAC_MD5_DUPLICATE DeprecatedHmacMd5Duplicate;\r
- DEPRECATED_EDKII_CRYPTO_HMAC_MD5_UPDATE DeprecatedHmacMd5Update;\r
- DEPRECATED_EDKII_CRYPTO_HMAC_MD5_FINAL DeprecatedHmacMd5Final;\r
+ DEPRECATED_EDKII_CRYPTO_HMAC_MD5_NEW DeprecatedHmacMd5New;\r
+ DEPRECATED_EDKII_CRYPTO_HMAC_MD5_FREE DeprecatedHmacMd5Free;\r
+ DEPRECATED_EDKII_CRYPTO_HMAC_MD5_SET_KEY DeprecatedHmacMd5SetKey;\r
+ DEPRECATED_EDKII_CRYPTO_HMAC_MD5_DUPLICATE DeprecatedHmacMd5Duplicate;\r
+ DEPRECATED_EDKII_CRYPTO_HMAC_MD5_UPDATE DeprecatedHmacMd5Update;\r
+ DEPRECATED_EDKII_CRYPTO_HMAC_MD5_FINAL DeprecatedHmacMd5Final;\r
/// HMAC SHA1 - deprecated and unsupported\r
- DEPRECATED_EDKII_CRYPTO_HMAC_SHA1_NEW DeprecatedHmacSha1New;\r
- DEPRECATED_EDKII_CRYPTO_HMAC_SHA1_FREE DeprecatedHmacSha1Free;\r
- DEPRECATED_EDKII_CRYPTO_HMAC_SHA1_SET_KEY DeprecatedHmacSha1SetKey;\r
- DEPRECATED_EDKII_CRYPTO_HMAC_SHA1_DUPLICATE DeprecatedHmacSha1Duplicate;\r
- DEPRECATED_EDKII_CRYPTO_HMAC_SHA1_UPDATE DeprecatedHmacSha1Update;\r
- DEPRECATED_EDKII_CRYPTO_HMAC_SHA1_FINAL DeprecatedHmacSha1Final;\r
+ DEPRECATED_EDKII_CRYPTO_HMAC_SHA1_NEW DeprecatedHmacSha1New;\r
+ DEPRECATED_EDKII_CRYPTO_HMAC_SHA1_FREE DeprecatedHmacSha1Free;\r
+ DEPRECATED_EDKII_CRYPTO_HMAC_SHA1_SET_KEY DeprecatedHmacSha1SetKey;\r
+ DEPRECATED_EDKII_CRYPTO_HMAC_SHA1_DUPLICATE DeprecatedHmacSha1Duplicate;\r
+ DEPRECATED_EDKII_CRYPTO_HMAC_SHA1_UPDATE DeprecatedHmacSha1Update;\r
+ DEPRECATED_EDKII_CRYPTO_HMAC_SHA1_FINAL DeprecatedHmacSha1Final;\r
/// HMAC SHA256\r
- EDKII_CRYPTO_HMAC_SHA256_NEW HmacSha256New;\r
- EDKII_CRYPTO_HMAC_SHA256_FREE HmacSha256Free;\r
- EDKII_CRYPTO_HMAC_SHA256_SET_KEY HmacSha256SetKey;\r
- EDKII_CRYPTO_HMAC_SHA256_DUPLICATE HmacSha256Duplicate;\r
- EDKII_CRYPTO_HMAC_SHA256_UPDATE HmacSha256Update;\r
- EDKII_CRYPTO_HMAC_SHA256_FINAL HmacSha256Final;\r
+ EDKII_CRYPTO_HMAC_SHA256_NEW HmacSha256New;\r
+ EDKII_CRYPTO_HMAC_SHA256_FREE HmacSha256Free;\r
+ EDKII_CRYPTO_HMAC_SHA256_SET_KEY HmacSha256SetKey;\r
+ EDKII_CRYPTO_HMAC_SHA256_DUPLICATE HmacSha256Duplicate;\r
+ EDKII_CRYPTO_HMAC_SHA256_UPDATE HmacSha256Update;\r
+ EDKII_CRYPTO_HMAC_SHA256_FINAL HmacSha256Final;\r
/// Md4 - deprecated and unsupported\r
- DEPRECATED_EDKII_CRYPTO_MD4_GET_CONTEXT_SIZE DeprecatedMd4GetContextSize;\r
- DEPRECATED_EDKII_CRYPTO_MD4_INIT DeprecatedMd4Init;\r
- DEPRECATED_EDKII_CRYPTO_MD4_DUPLICATE DeprecatedMd4Duplicate;\r
- DEPRECATED_EDKII_CRYPTO_MD4_UPDATE DeprecatedMd4Update;\r
- DEPRECATED_EDKII_CRYPTO_MD4_FINAL DeprecatedMd4Final;\r
- DEPRECATED_EDKII_CRYPTO_MD4_HASH_ALL DeprecatedMd4HashAll;\r
+ DEPRECATED_EDKII_CRYPTO_MD4_GET_CONTEXT_SIZE DeprecatedMd4GetContextSize;\r
+ DEPRECATED_EDKII_CRYPTO_MD4_INIT DeprecatedMd4Init;\r
+ DEPRECATED_EDKII_CRYPTO_MD4_DUPLICATE DeprecatedMd4Duplicate;\r
+ DEPRECATED_EDKII_CRYPTO_MD4_UPDATE DeprecatedMd4Update;\r
+ DEPRECATED_EDKII_CRYPTO_MD4_FINAL DeprecatedMd4Final;\r
+ DEPRECATED_EDKII_CRYPTO_MD4_HASH_ALL DeprecatedMd4HashAll;\r
/// Md5\r
- EDKII_CRYPTO_MD5_GET_CONTEXT_SIZE Md5GetContextSize;\r
- EDKII_CRYPTO_MD5_INIT Md5Init;\r
- EDKII_CRYPTO_MD5_DUPLICATE Md5Duplicate;\r
- EDKII_CRYPTO_MD5_UPDATE Md5Update;\r
- EDKII_CRYPTO_MD5_FINAL Md5Final;\r
- EDKII_CRYPTO_MD5_HASH_ALL Md5HashAll;\r
+ EDKII_CRYPTO_MD5_GET_CONTEXT_SIZE Md5GetContextSize;\r
+ EDKII_CRYPTO_MD5_INIT Md5Init;\r
+ EDKII_CRYPTO_MD5_DUPLICATE Md5Duplicate;\r
+ EDKII_CRYPTO_MD5_UPDATE Md5Update;\r
+ EDKII_CRYPTO_MD5_FINAL Md5Final;\r
+ EDKII_CRYPTO_MD5_HASH_ALL Md5HashAll;\r
/// Pkcs\r
- EDKII_CRYPTO_PKCS1_ENCRYPT_V2 Pkcs1v2Encrypt;\r
- EDKII_CRYPTO_PKCS5_PW_HASH Pkcs5HashPassword;\r
- EDKII_CRYPTO_PKCS7_VERIFY Pkcs7Verify;\r
- EDKII_CRYPTO_PKCS7_VERIFY_EKU VerifyEKUsInPkcs7Signature;\r
- EDKII_CRYPTO_PKCS7_GET_SIGNERS Pkcs7GetSigners;\r
- EDKII_CRYPTO_PKCS7_FREE_SIGNERS Pkcs7FreeSigners;\r
- EDKII_CRYPTO_PKCS7_SIGN Pkcs7Sign;\r
- EDKII_CRYPTO_PKCS7_GET_ATTACHED_CONTENT Pkcs7GetAttachedContent;\r
- EDKII_CRYPTO_PKCS7_GET_CERTIFICATES_LIST Pkcs7GetCertificatesList;\r
- EDKII_CRYPTO_AUTHENTICODE_VERIFY AuthenticodeVerify;\r
- EDKII_CRYPTO_IMAGE_TIMESTAMP_VERIFY ImageTimestampVerify;\r
+ EDKII_CRYPTO_PKCS1_ENCRYPT_V2 Pkcs1v2Encrypt;\r
+ EDKII_CRYPTO_PKCS5_PW_HASH Pkcs5HashPassword;\r
+ EDKII_CRYPTO_PKCS7_VERIFY Pkcs7Verify;\r
+ EDKII_CRYPTO_PKCS7_VERIFY_EKU VerifyEKUsInPkcs7Signature;\r
+ EDKII_CRYPTO_PKCS7_GET_SIGNERS Pkcs7GetSigners;\r
+ EDKII_CRYPTO_PKCS7_FREE_SIGNERS Pkcs7FreeSigners;\r
+ EDKII_CRYPTO_PKCS7_SIGN Pkcs7Sign;\r
+ EDKII_CRYPTO_PKCS7_GET_ATTACHED_CONTENT Pkcs7GetAttachedContent;\r
+ EDKII_CRYPTO_PKCS7_GET_CERTIFICATES_LIST Pkcs7GetCertificatesList;\r
+ EDKII_CRYPTO_AUTHENTICODE_VERIFY AuthenticodeVerify;\r
+ EDKII_CRYPTO_IMAGE_TIMESTAMP_VERIFY ImageTimestampVerify;\r
/// DH\r
- EDKII_CRYPTO_DH_NEW DhNew;\r
- EDKII_CRYPTO_DH_FREE DhFree;\r
- EDKII_CRYPTO_DH_GENERATE_PARAMETER DhGenerateParameter;\r
- EDKII_CRYPTO_DH_SET_PARAMETER DhSetParameter;\r
- EDKII_CRYPTO_DH_GENERATE_KEY DhGenerateKey;\r
- EDKII_CRYPTO_DH_COMPUTE_KEY DhComputeKey;\r
+ EDKII_CRYPTO_DH_NEW DhNew;\r
+ EDKII_CRYPTO_DH_FREE DhFree;\r
+ EDKII_CRYPTO_DH_GENERATE_PARAMETER DhGenerateParameter;\r
+ EDKII_CRYPTO_DH_SET_PARAMETER DhSetParameter;\r
+ EDKII_CRYPTO_DH_GENERATE_KEY DhGenerateKey;\r
+ EDKII_CRYPTO_DH_COMPUTE_KEY DhComputeKey;\r
/// Random\r
- EDKII_CRYPTO_RANDOM_SEED RandomSeed;\r
- EDKII_CRYPTO_RANDOM_BYTES RandomBytes;\r
+ EDKII_CRYPTO_RANDOM_SEED RandomSeed;\r
+ EDKII_CRYPTO_RANDOM_BYTES RandomBytes;\r
/// RSA\r
- EDKII_CRYPTO_RSA_VERIFY_PKCS1 RsaVerifyPkcs1;\r
- EDKII_CRYPTO_RSA_NEW RsaNew;\r
- EDKII_CRYPTO_RSA_FREE RsaFree;\r
- EDKII_CRYPTO_RSA_SET_KEY RsaSetKey;\r
- EDKII_CRYPTO_RSA_GET_KEY RsaGetKey;\r
- EDKII_CRYPTO_RSA_GENERATE_KEY RsaGenerateKey;\r
- EDKII_CRYPTO_RSA_CHECK_KEY RsaCheckKey;\r
- EDKII_CRYPTO_RSA_PKCS1_SIGN RsaPkcs1Sign;\r
- EDKII_CRYPTO_RSA_PKCS1_VERIFY RsaPkcs1Verify;\r
- EDKII_CRYPTO_RSA_GET_PRIVATE_KEY_FROM_PEM RsaGetPrivateKeyFromPem;\r
- EDKII_CRYPTO_RSA_GET_PUBLIC_KEY_FROM_X509 RsaGetPublicKeyFromX509;\r
+ EDKII_CRYPTO_RSA_VERIFY_PKCS1 RsaVerifyPkcs1;\r
+ EDKII_CRYPTO_RSA_NEW RsaNew;\r
+ EDKII_CRYPTO_RSA_FREE RsaFree;\r
+ EDKII_CRYPTO_RSA_SET_KEY RsaSetKey;\r
+ EDKII_CRYPTO_RSA_GET_KEY RsaGetKey;\r
+ EDKII_CRYPTO_RSA_GENERATE_KEY RsaGenerateKey;\r
+ EDKII_CRYPTO_RSA_CHECK_KEY RsaCheckKey;\r
+ EDKII_CRYPTO_RSA_PKCS1_SIGN RsaPkcs1Sign;\r
+ EDKII_CRYPTO_RSA_PKCS1_VERIFY RsaPkcs1Verify;\r
+ EDKII_CRYPTO_RSA_GET_PRIVATE_KEY_FROM_PEM RsaGetPrivateKeyFromPem;\r
+ EDKII_CRYPTO_RSA_GET_PUBLIC_KEY_FROM_X509 RsaGetPublicKeyFromX509;\r
/// Sha1\r
- EDKII_CRYPTO_SHA1_GET_CONTEXT_SIZE Sha1GetContextSize;\r
- EDKII_CRYPTO_SHA1_INIT Sha1Init;\r
- EDKII_CRYPTO_SHA1_DUPLICATE Sha1Duplicate;\r
- EDKII_CRYPTO_SHA1_UPDATE Sha1Update;\r
- EDKII_CRYPTO_SHA1_FINAL Sha1Final;\r
- EDKII_CRYPTO_SHA1_HASH_ALL Sha1HashAll;\r
+ EDKII_CRYPTO_SHA1_GET_CONTEXT_SIZE Sha1GetContextSize;\r
+ EDKII_CRYPTO_SHA1_INIT Sha1Init;\r
+ EDKII_CRYPTO_SHA1_DUPLICATE Sha1Duplicate;\r
+ EDKII_CRYPTO_SHA1_UPDATE Sha1Update;\r
+ EDKII_CRYPTO_SHA1_FINAL Sha1Final;\r
+ EDKII_CRYPTO_SHA1_HASH_ALL Sha1HashAll;\r
/// Sha256\r
- EDKII_CRYPTO_SHA256_GET_CONTEXT_SIZE Sha256GetContextSize;\r
- EDKII_CRYPTO_SHA256_INIT Sha256Init;\r
- EDKII_CRYPTO_SHA256_DUPLICATE Sha256Duplicate;\r
- EDKII_CRYPTO_SHA256_UPDATE Sha256Update;\r
- EDKII_CRYPTO_SHA256_FINAL Sha256Final;\r
- EDKII_CRYPTO_SHA256_HASH_ALL Sha256HashAll;\r
+ EDKII_CRYPTO_SHA256_GET_CONTEXT_SIZE Sha256GetContextSize;\r
+ EDKII_CRYPTO_SHA256_INIT Sha256Init;\r
+ EDKII_CRYPTO_SHA256_DUPLICATE Sha256Duplicate;\r
+ EDKII_CRYPTO_SHA256_UPDATE Sha256Update;\r
+ EDKII_CRYPTO_SHA256_FINAL Sha256Final;\r
+ EDKII_CRYPTO_SHA256_HASH_ALL Sha256HashAll;\r
/// Sha384\r
- EDKII_CRYPTO_SHA384_GET_CONTEXT_SIZE Sha384GetContextSize;\r
- EDKII_CRYPTO_SHA384_INIT Sha384Init;\r
- EDKII_CRYPTO_SHA384_DUPLICATE Sha384Duplicate;\r
- EDKII_CRYPTO_SHA384_UPDATE Sha384Update;\r
- EDKII_CRYPTO_SHA384_FINAL Sha384Final;\r
- EDKII_CRYPTO_SHA384_HASH_ALL Sha384HashAll;\r
+ EDKII_CRYPTO_SHA384_GET_CONTEXT_SIZE Sha384GetContextSize;\r
+ EDKII_CRYPTO_SHA384_INIT Sha384Init;\r
+ EDKII_CRYPTO_SHA384_DUPLICATE Sha384Duplicate;\r
+ EDKII_CRYPTO_SHA384_UPDATE Sha384Update;\r
+ EDKII_CRYPTO_SHA384_FINAL Sha384Final;\r
+ EDKII_CRYPTO_SHA384_HASH_ALL Sha384HashAll;\r
/// Sha512\r
- EDKII_CRYPTO_SHA512_GET_CONTEXT_SIZE Sha512GetContextSize;\r
- EDKII_CRYPTO_SHA512_INIT Sha512Init;\r
- EDKII_CRYPTO_SHA512_DUPLICATE Sha512Duplicate;\r
- EDKII_CRYPTO_SHA512_UPDATE Sha512Update;\r
- EDKII_CRYPTO_SHA512_FINAL Sha512Final;\r
- EDKII_CRYPTO_SHA512_HASH_ALL Sha512HashAll;\r
+ EDKII_CRYPTO_SHA512_GET_CONTEXT_SIZE Sha512GetContextSize;\r
+ EDKII_CRYPTO_SHA512_INIT Sha512Init;\r
+ EDKII_CRYPTO_SHA512_DUPLICATE Sha512Duplicate;\r
+ EDKII_CRYPTO_SHA512_UPDATE Sha512Update;\r
+ EDKII_CRYPTO_SHA512_FINAL Sha512Final;\r
+ EDKII_CRYPTO_SHA512_HASH_ALL Sha512HashAll;\r
/// X509\r
- EDKII_CRYPTO_X509_GET_SUBJECT_NAME X509GetSubjectName;\r
- EDKII_CRYPTO_X509_GET_COMMON_NAME X509GetCommonName;\r
- EDKII_CRYPTO_X509_GET_ORGANIZATION_NAME X509GetOrganizationName;\r
- EDKII_CRYPTO_X509_VERIFY_CERT X509VerifyCert;\r
- EDKII_CRYPTO_X509_CONSTRUCT_CERTIFICATE X509ConstructCertificate;\r
- EDKII_CRYPTO_X509_CONSTRUCT_CERTIFICATE_STACK X509ConstructCertificateStack;\r
- EDKII_CRYPTO_X509_FREE X509Free;\r
- EDKII_CRYPTO_X509_STACK_FREE X509StackFree;\r
- EDKII_CRYPTO_X509_GET_TBS_CERT X509GetTBSCert;\r
+ EDKII_CRYPTO_X509_GET_SUBJECT_NAME X509GetSubjectName;\r
+ EDKII_CRYPTO_X509_GET_COMMON_NAME X509GetCommonName;\r
+ EDKII_CRYPTO_X509_GET_ORGANIZATION_NAME X509GetOrganizationName;\r
+ EDKII_CRYPTO_X509_VERIFY_CERT X509VerifyCert;\r
+ EDKII_CRYPTO_X509_CONSTRUCT_CERTIFICATE X509ConstructCertificate;\r
+ EDKII_CRYPTO_X509_CONSTRUCT_CERTIFICATE_STACK X509ConstructCertificateStack;\r
+ EDKII_CRYPTO_X509_FREE X509Free;\r
+ EDKII_CRYPTO_X509_STACK_FREE X509StackFree;\r
+ EDKII_CRYPTO_X509_GET_TBS_CERT X509GetTBSCert;\r
/// TDES - deprecated and unsupported\r
- DEPRECATED_EDKII_CRYPTO_TDES_GET_CONTEXT_SIZE DeprecatedTdesGetContextSize;\r
- DEPRECATED_EDKII_CRYPTO_TDES_INIT DeprecatedTdesInit;\r
- DEPRECATED_EDKII_CRYPTO_TDES_ECB_ENCRYPT DeprecatedTdesEcbEncrypt;\r
- DEPRECATED_EDKII_CRYPTO_TDES_ECB_DECRYPT DeprecatedTdesEcbDecrypt;\r
- DEPRECATED_EDKII_CRYPTO_TDES_CBC_ENCRYPT DeprecatedTdesCbcEncrypt;\r
- DEPRECATED_EDKII_CRYPTO_TDES_CBC_DECRYPT DeprecatedTdesCbcDecrypt;\r
+ DEPRECATED_EDKII_CRYPTO_TDES_GET_CONTEXT_SIZE DeprecatedTdesGetContextSize;\r
+ DEPRECATED_EDKII_CRYPTO_TDES_INIT DeprecatedTdesInit;\r
+ DEPRECATED_EDKII_CRYPTO_TDES_ECB_ENCRYPT DeprecatedTdesEcbEncrypt;\r
+ DEPRECATED_EDKII_CRYPTO_TDES_ECB_DECRYPT DeprecatedTdesEcbDecrypt;\r
+ DEPRECATED_EDKII_CRYPTO_TDES_CBC_ENCRYPT DeprecatedTdesCbcEncrypt;\r
+ DEPRECATED_EDKII_CRYPTO_TDES_CBC_DECRYPT DeprecatedTdesCbcDecrypt;\r
/// AES - ECB Mode is deprecated and unsupported\r
- EDKII_CRYPTO_AES_GET_CONTEXT_SIZE AesGetContextSize;\r
- EDKII_CRYPTO_AES_INIT AesInit;\r
- DEPRECATED_EDKII_CRYPTO_AES_ECB_ENCRYPT DeprecatedAesEcbEncrypt;\r
- DEPRECATED_EDKII_CRYPTO_AES_ECB_DECRYPT DeprecatedAesEcbDecrypt;\r
- EDKII_CRYPTO_AES_CBC_ENCRYPT AesCbcEncrypt;\r
- EDKII_CRYPTO_AES_CBC_DECRYPT AesCbcDecrypt;\r
+ EDKII_CRYPTO_AES_GET_CONTEXT_SIZE AesGetContextSize;\r
+ EDKII_CRYPTO_AES_INIT AesInit;\r
+ DEPRECATED_EDKII_CRYPTO_AES_ECB_ENCRYPT DeprecatedAesEcbEncrypt;\r
+ DEPRECATED_EDKII_CRYPTO_AES_ECB_DECRYPT DeprecatedAesEcbDecrypt;\r
+ EDKII_CRYPTO_AES_CBC_ENCRYPT AesCbcEncrypt;\r
+ EDKII_CRYPTO_AES_CBC_DECRYPT AesCbcDecrypt;\r
/// Arc4 - deprecated and unsupported\r
- DEPRECATED_EDKII_CRYPTO_ARC4_GET_CONTEXT_SIZE DeprecatedArc4GetContextSize;\r
- DEPRECATED_EDKII_CRYPTO_ARC4_INIT DeprecatedArc4Init;\r
- DEPRECATED_EDKII_CRYPTO_ARC4_ENCRYPT DeprecatedArc4Encrypt;\r
- DEPRECATED_EDKII_CRYPTO_ARC4_DECRYPT DeprecatedArc4Decrypt;\r
- DEPRECATED_EDKII_CRYPTO_ARC4_RESET DeprecatedArc4Reset;\r
+ DEPRECATED_EDKII_CRYPTO_ARC4_GET_CONTEXT_SIZE DeprecatedArc4GetContextSize;\r
+ DEPRECATED_EDKII_CRYPTO_ARC4_INIT DeprecatedArc4Init;\r
+ DEPRECATED_EDKII_CRYPTO_ARC4_ENCRYPT DeprecatedArc4Encrypt;\r
+ DEPRECATED_EDKII_CRYPTO_ARC4_DECRYPT DeprecatedArc4Decrypt;\r
+ DEPRECATED_EDKII_CRYPTO_ARC4_RESET DeprecatedArc4Reset;\r
/// SM3\r
- EDKII_CRYPTO_SM3_GET_CONTEXT_SIZE Sm3GetContextSize;\r
- EDKII_CRYPTO_SM3_INIT Sm3Init;\r
- EDKII_CRYPTO_SM3_DUPLICATE Sm3Duplicate;\r
- EDKII_CRYPTO_SM3_UPDATE Sm3Update;\r
- EDKII_CRYPTO_SM3_FINAL Sm3Final;\r
- EDKII_CRYPTO_SM3_HASH_ALL Sm3HashAll;\r
+ EDKII_CRYPTO_SM3_GET_CONTEXT_SIZE Sm3GetContextSize;\r
+ EDKII_CRYPTO_SM3_INIT Sm3Init;\r
+ EDKII_CRYPTO_SM3_DUPLICATE Sm3Duplicate;\r
+ EDKII_CRYPTO_SM3_UPDATE Sm3Update;\r
+ EDKII_CRYPTO_SM3_FINAL Sm3Final;\r
+ EDKII_CRYPTO_SM3_HASH_ALL Sm3HashAll;\r
/// HKDF\r
- EDKII_CRYPTO_HKDF_SHA_256_EXTRACT_AND_EXPAND HkdfSha256ExtractAndExpand;\r
+ EDKII_CRYPTO_HKDF_SHA_256_EXTRACT_AND_EXPAND HkdfSha256ExtractAndExpand;\r
/// X509 (Continued)\r
- EDKII_CRYPTO_X509_CONSTRUCT_CERTIFICATE_STACK_V X509ConstructCertificateStackV;\r
+ EDKII_CRYPTO_X509_CONSTRUCT_CERTIFICATE_STACK_V X509ConstructCertificateStackV;\r
/// TLS\r
- EDKII_CRYPTO_TLS_INITIALIZE TlsInitialize;\r
- EDKII_CRYPTO_TLS_CTX_FREE TlsCtxFree;\r
- EDKII_CRYPTO_TLS_CTX_NEW TlsCtxNew;\r
- EDKII_CRYPTO_TLS_FREE TlsFree;\r
- EDKII_CRYPTO_TLS_NEW TlsNew;\r
- EDKII_CRYPTO_TLS_IN_HANDSHAKE TlsInHandshake;\r
- EDKII_CRYPTO_TLS_DO_HANDSHAKE TlsDoHandshake;\r
- EDKII_CRYPTO_TLS_HANDLE_ALERT TlsHandleAlert;\r
- EDKII_CRYPTO_TLS_CLOSE_NOTIFY TlsCloseNotify;\r
- EDKII_CRYPTO_TLS_CTRL_TRAFFIC_OUT TlsCtrlTrafficOut;\r
- EDKII_CRYPTO_TLS_CTRL_TRAFFIC_IN TlsCtrlTrafficIn;\r
- EDKII_CRYPTO_TLS_READ TlsRead;\r
- EDKII_CRYPTO_TLS_WRITE TlsWrite;\r
+ EDKII_CRYPTO_TLS_INITIALIZE TlsInitialize;\r
+ EDKII_CRYPTO_TLS_CTX_FREE TlsCtxFree;\r
+ EDKII_CRYPTO_TLS_CTX_NEW TlsCtxNew;\r
+ EDKII_CRYPTO_TLS_FREE TlsFree;\r
+ EDKII_CRYPTO_TLS_NEW TlsNew;\r
+ EDKII_CRYPTO_TLS_IN_HANDSHAKE TlsInHandshake;\r
+ EDKII_CRYPTO_TLS_DO_HANDSHAKE TlsDoHandshake;\r
+ EDKII_CRYPTO_TLS_HANDLE_ALERT TlsHandleAlert;\r
+ EDKII_CRYPTO_TLS_CLOSE_NOTIFY TlsCloseNotify;\r
+ EDKII_CRYPTO_TLS_CTRL_TRAFFIC_OUT TlsCtrlTrafficOut;\r
+ EDKII_CRYPTO_TLS_CTRL_TRAFFIC_IN TlsCtrlTrafficIn;\r
+ EDKII_CRYPTO_TLS_READ TlsRead;\r
+ EDKII_CRYPTO_TLS_WRITE TlsWrite;\r
/// TLS Set\r
- EDKII_CRYPTO_TLS_SET_VERSION TlsSetVersion;\r
- EDKII_CRYPTO_TLS_SET_CONNECTION_END TlsSetConnectionEnd;\r
- EDKII_CRYPTO_TLS_SET_CIPHER_LIST TlsSetCipherList;\r
- EDKII_CRYPTO_TLS_SET_COMPRESSION_METHOD TlsSetCompressionMethod;\r
- EDKII_CRYPTO_TLS_SET_VERIFY TlsSetVerify;\r
- EDKII_CRYPTO_TLS_SET_VERIFY_HOST TlsSetVerifyHost;\r
- EDKII_CRYPTO_TLS_SET_SESSIONID TlsSetSessionId;\r
- EDKII_CRYPTO_TLS_SET_CA_CERTIFICATE TlsSetCaCertificate;\r
- EDKII_CRYPTO_TLS_SET_HOST_PUBLIC_CERT TlsSetHostPublicCert;\r
- EDKII_CRYPTO_TLS_SET_HOST_PRIVATE_KEY TlsSetHostPrivateKey;\r
- EDKII_CRYPTO_TLS_SET_CERT_REVOCATION_LIST TlsSetCertRevocationList;\r
+ EDKII_CRYPTO_TLS_SET_VERSION TlsSetVersion;\r
+ EDKII_CRYPTO_TLS_SET_CONNECTION_END TlsSetConnectionEnd;\r
+ EDKII_CRYPTO_TLS_SET_CIPHER_LIST TlsSetCipherList;\r
+ EDKII_CRYPTO_TLS_SET_COMPRESSION_METHOD TlsSetCompressionMethod;\r
+ EDKII_CRYPTO_TLS_SET_VERIFY TlsSetVerify;\r
+ EDKII_CRYPTO_TLS_SET_VERIFY_HOST TlsSetVerifyHost;\r
+ EDKII_CRYPTO_TLS_SET_SESSIONID TlsSetSessionId;\r
+ EDKII_CRYPTO_TLS_SET_CA_CERTIFICATE TlsSetCaCertificate;\r
+ EDKII_CRYPTO_TLS_SET_HOST_PUBLIC_CERT TlsSetHostPublicCert;\r
+ EDKII_CRYPTO_TLS_SET_HOST_PRIVATE_KEY TlsSetHostPrivateKey;\r
+ EDKII_CRYPTO_TLS_SET_CERT_REVOCATION_LIST TlsSetCertRevocationList;\r
/// TLS Get\r
- EDKII_CRYPTO_TLS_GET_VERSION TlsGetVersion;\r
- EDKII_CRYPTO_TLS_GET_CONNECTION_END TlsGetConnectionEnd;\r
- EDKII_CRYPTO_TLS_GET_CURRENT_CIPHER TlsGetCurrentCipher;\r
- EDKII_CRYPTO_TLS_GET_CURRENT_COMPRESSION_ID TlsGetCurrentCompressionId;\r
- EDKII_CRYPTO_TLS_GET_VERIFY TlsGetVerify;\r
- EDKII_CRYPTO_TLS_GET_SESSION_ID TlsGetSessionId;\r
- EDKII_CRYPTO_TLS_GET_CLIENT_RANDOM TlsGetClientRandom;\r
- EDKII_CRYPTO_TLS_GET_SERVER_RANDOM TlsGetServerRandom;\r
- EDKII_CRYPTO_TLS_GET_KEY_MATERIAL TlsGetKeyMaterial;\r
- EDKII_CRYPTO_TLS_GET_CA_CERTIFICATE TlsGetCaCertificate;\r
- EDKII_CRYPTO_TLS_GET_HOST_PUBLIC_CERT TlsGetHostPublicCert;\r
- EDKII_CRYPTO_TLS_GET_HOST_PRIVATE_KEY TlsGetHostPrivateKey;\r
- EDKII_CRYPTO_TLS_GET_CERT_REVOCATION_LIST TlsGetCertRevocationList;\r
+ EDKII_CRYPTO_TLS_GET_VERSION TlsGetVersion;\r
+ EDKII_CRYPTO_TLS_GET_CONNECTION_END TlsGetConnectionEnd;\r
+ EDKII_CRYPTO_TLS_GET_CURRENT_CIPHER TlsGetCurrentCipher;\r
+ EDKII_CRYPTO_TLS_GET_CURRENT_COMPRESSION_ID TlsGetCurrentCompressionId;\r
+ EDKII_CRYPTO_TLS_GET_VERIFY TlsGetVerify;\r
+ EDKII_CRYPTO_TLS_GET_SESSION_ID TlsGetSessionId;\r
+ EDKII_CRYPTO_TLS_GET_CLIENT_RANDOM TlsGetClientRandom;\r
+ EDKII_CRYPTO_TLS_GET_SERVER_RANDOM TlsGetServerRandom;\r
+ EDKII_CRYPTO_TLS_GET_KEY_MATERIAL TlsGetKeyMaterial;\r
+ EDKII_CRYPTO_TLS_GET_CA_CERTIFICATE TlsGetCaCertificate;\r
+ EDKII_CRYPTO_TLS_GET_HOST_PUBLIC_CERT TlsGetHostPublicCert;\r
+ EDKII_CRYPTO_TLS_GET_HOST_PRIVATE_KEY TlsGetHostPrivateKey;\r
+ EDKII_CRYPTO_TLS_GET_CERT_REVOCATION_LIST TlsGetCertRevocationList;\r
/// RSA PSS\r
- EDKII_CRYPTO_RSA_PSS_SIGN RsaPssSign;\r
- EDKII_CRYPTO_RSA_PSS_VERIFY RsaPssVerify;\r
+ EDKII_CRYPTO_RSA_PSS_SIGN RsaPssSign;\r
+ EDKII_CRYPTO_RSA_PSS_VERIFY RsaPssVerify;\r
/// Parallel hash\r
- EDKII_CRYPTO_PARALLEL_HASH_ALL ParallelHash256HashAll;\r
+ EDKII_CRYPTO_PARALLEL_HASH_ALL ParallelHash256HashAll;\r
/// HMAC SHA256 (continued)\r
- EDKII_CRYPTO_HMAC_SHA256_ALL HmacSha256All;\r
+ EDKII_CRYPTO_HMAC_SHA256_ALL HmacSha256All;\r
/// HMAC SHA384\r
- EDKII_CRYPTO_HMAC_SHA384_NEW HmacSha384New;\r
- EDKII_CRYPTO_HMAC_SHA384_FREE HmacSha384Free;\r
- EDKII_CRYPTO_HMAC_SHA384_SET_KEY HmacSha384SetKey;\r
- EDKII_CRYPTO_HMAC_SHA384_DUPLICATE HmacSha384Duplicate;\r
- EDKII_CRYPTO_HMAC_SHA384_UPDATE HmacSha384Update;\r
- EDKII_CRYPTO_HMAC_SHA384_FINAL HmacSha384Final;\r
- EDKII_CRYPTO_HMAC_SHA384_ALL HmacSha384All;\r
+ EDKII_CRYPTO_HMAC_SHA384_NEW HmacSha384New;\r
+ EDKII_CRYPTO_HMAC_SHA384_FREE HmacSha384Free;\r
+ EDKII_CRYPTO_HMAC_SHA384_SET_KEY HmacSha384SetKey;\r
+ EDKII_CRYPTO_HMAC_SHA384_DUPLICATE HmacSha384Duplicate;\r
+ EDKII_CRYPTO_HMAC_SHA384_UPDATE HmacSha384Update;\r
+ EDKII_CRYPTO_HMAC_SHA384_FINAL HmacSha384Final;\r
+ EDKII_CRYPTO_HMAC_SHA384_ALL HmacSha384All;\r
/// HKDF (continued)\r
- EDKII_CRYPTO_HKDF_SHA_256_EXTRACT HkdfSha256Extract;\r
- EDKII_CRYPTO_HKDF_SHA_256_EXPAND HkdfSha256Expand;\r
- EDKII_CRYPTO_HKDF_SHA_384_EXTRACT_AND_EXPAND HkdfSha384ExtractAndExpand;\r
- EDKII_CRYPTO_HKDF_SHA_384_EXTRACT HkdfSha384Extract;\r
- EDKII_CRYPTO_HKDF_SHA_384_EXPAND HkdfSha384Expand;\r
+ EDKII_CRYPTO_HKDF_SHA_256_EXTRACT HkdfSha256Extract;\r
+ EDKII_CRYPTO_HKDF_SHA_256_EXPAND HkdfSha256Expand;\r
+ EDKII_CRYPTO_HKDF_SHA_384_EXTRACT_AND_EXPAND HkdfSha384ExtractAndExpand;\r
+ EDKII_CRYPTO_HKDF_SHA_384_EXTRACT HkdfSha384Extract;\r
+ EDKII_CRYPTO_HKDF_SHA_384_EXPAND HkdfSha384Expand;\r
/// AEAD AES-GCM\r
- EDKII_AEAD_AES_GCM_ENCRYPT AeadAesGcmEncrypt;\r
- EDKII_AEAD_AES_GCM_DECRYPT AeadAesGcmDecrypt;\r
+ EDKII_AEAD_AES_GCM_ENCRYPT AeadAesGcmEncrypt;\r
+ EDKII_AEAD_AES_GCM_DECRYPT AeadAesGcmDecrypt;\r
/// BIGNUM\r
- EDKII_CRYPTO_BIGNUM_INIT BigNumInit;\r
- EDKII_CRYPTO_BIGNUM_FROM_BIN BigNumFromBin;\r
- EDKII_CRYPTO_BIGNUM_TO_BIN BigNumToBin;\r
- EDKII_CRYPTO_BIGNUM_FREE BigNumFree;\r
- EDKII_CRYPTO_BIGNUM_ADD BigNumAdd;\r
- EDKII_CRYPTO_BIGNUM_SUB BigNumSub;\r
- EDKII_CRYPTO_BIGNUM_MOD BigNumMod;\r
- EDKII_CRYPTO_BIGNUM_EXP_MOD BigNumExpMod;\r
- EDKII_CRYPTO_BIGNUM_INVERSE_MOD BigNumInverseMod;\r
- EDKII_CRYPTO_BIGNUM_DIV BigNumDiv;\r
- EDKII_CRYPTO_BIGNUM_MUL_MOD BigNumMulMod;\r
- EDKII_CRYPTO_BIGNUM_CMP BigNumCmp;\r
- EDKII_CRYPTO_BIGNUM_BITS BigNumBits;\r
- EDKII_CRYPTO_BIGNUM_BYTES BigNumBytes;\r
- EDKII_CRYPTO_BIGNUM_IS_WORD BigNumIsWord;\r
- EDKII_CRYPTO_BIGNUM_IS_ODD BigNumIsOdd;\r
- EDKII_CRYPTO_BIGNUM_COPY BigNumCopy;\r
- EDKII_CRYPTO_BIGNUM_VALUE_ONE BigNumValueOne;\r
- EDKII_CRYPTO_BIGNUM_R_SHIFT BigNumRShift;\r
- EDKII_CRYPTO_BIGNUM_CONST_TIME BigNumConstTime;\r
- EDKII_CRYPTO_BIGNUM_SQR_MOD BigNumSqrMod;\r
- EDKII_CRYPTO_BIGNUM_NEW_CONTEXT BigNumNewContext;\r
- EDKII_CRYPTO_BIGNUM_CONTEXT_FREE BigNumContextFree;\r
- EDKII_CRYPTO_BIGNUM_SET_UINT BigNumSetUint;\r
- EDKII_CRYPTO_BIGNUM_ADD_MOD BigNumAddMod;\r
+ EDKII_CRYPTO_BIGNUM_INIT BigNumInit;\r
+ EDKII_CRYPTO_BIGNUM_FROM_BIN BigNumFromBin;\r
+ EDKII_CRYPTO_BIGNUM_TO_BIN BigNumToBin;\r
+ EDKII_CRYPTO_BIGNUM_FREE BigNumFree;\r
+ EDKII_CRYPTO_BIGNUM_ADD BigNumAdd;\r
+ EDKII_CRYPTO_BIGNUM_SUB BigNumSub;\r
+ EDKII_CRYPTO_BIGNUM_MOD BigNumMod;\r
+ EDKII_CRYPTO_BIGNUM_EXP_MOD BigNumExpMod;\r
+ EDKII_CRYPTO_BIGNUM_INVERSE_MOD BigNumInverseMod;\r
+ EDKII_CRYPTO_BIGNUM_DIV BigNumDiv;\r
+ EDKII_CRYPTO_BIGNUM_MUL_MOD BigNumMulMod;\r
+ EDKII_CRYPTO_BIGNUM_CMP BigNumCmp;\r
+ EDKII_CRYPTO_BIGNUM_BITS BigNumBits;\r
+ EDKII_CRYPTO_BIGNUM_BYTES BigNumBytes;\r
+ EDKII_CRYPTO_BIGNUM_IS_WORD BigNumIsWord;\r
+ EDKII_CRYPTO_BIGNUM_IS_ODD BigNumIsOdd;\r
+ EDKII_CRYPTO_BIGNUM_COPY BigNumCopy;\r
+ EDKII_CRYPTO_BIGNUM_VALUE_ONE BigNumValueOne;\r
+ EDKII_CRYPTO_BIGNUM_R_SHIFT BigNumRShift;\r
+ EDKII_CRYPTO_BIGNUM_CONST_TIME BigNumConstTime;\r
+ EDKII_CRYPTO_BIGNUM_SQR_MOD BigNumSqrMod;\r
+ EDKII_CRYPTO_BIGNUM_NEW_CONTEXT BigNumNewContext;\r
+ EDKII_CRYPTO_BIGNUM_CONTEXT_FREE BigNumContextFree;\r
+ EDKII_CRYPTO_BIGNUM_SET_UINT BigNumSetUint;\r
+ EDKII_CRYPTO_BIGNUM_ADD_MOD BigNumAddMod;\r
+ /// EC\r
+ EDKII_CRYPTO_EC_GROUP_INIT EcGroupInit;\r
+ EDKII_CRYPTO_EC_GROUP_GET_CURVE EcGroupGetCurve;\r
+ EDKII_CRYPTO_EC_GROUP_GET_ORDER EcGroupGetOrder;\r
+ EDKII_CRYPTO_EC_GROUP_FREE EcGroupFree;\r
+ EDKII_CRYPTO_EC_POINT_INIT EcPointInit;\r
+ EDKII_CRYPTO_EC_POINT_DE_INIT EcPointDeInit;\r
+ EDKII_CRYPTO_EC_POINT_GET_AFFINE_COORDINATES EcPointGetAffineCoordinates;\r
+ EDKII_CRYPTO_EC_POINT_SET_AFFINE_COORDINATES EcPointSetAffineCoordinates;\r
+ EDKII_CRYPTO_EC_POINT_ADD EcPointAdd;\r
+ EDKII_CRYPTO_EC_POINT_MUL EcPointMul;\r
+ EDKII_CRYPTO_EC_POINT_INVERT EcPointInvert;\r
+ EDKII_CRYPTO_EC_POINT_IS_ON_CURVE EcPointIsOnCurve;\r
+ EDKII_CRYPTO_EC_POINT_IS_AT_INFINITY EcPointIsAtInfinity;\r
+ EDKII_CRYPTO_EC_POINT_EQUAL EcPointEqual;\r
+ EDKII_CRYPTO_EC_POINT_SET_COMPRESSED_COORDINATES EcPointSetCompressedCoordinates;\r
+ EDKII_CRYPTO_EC_NEW_BY_NID EcNewByNid;\r
+ EDKII_CRYPTO_EC_FREE EcFree;\r
+ EDKII_CRYPTO_EC_GENERATE_KEY EcGenerateKey;\r
+ EDKII_CRYPTO_EC_GET_PUB_KEY EcGetPubKey;\r
+ EDKII_CRYPTO_EC_DH_COMPUTE_KEY EcDhComputeKey;\r
};\r
\r
extern GUID gEdkiiCryptoProtocolGuid;\r