thank you since you are talking about size optimization, would you please share the result?
thank you! Yao, Jiewen > 在 2022年1月30日,上午6:10,Li, Yi1 <yi1...@intel.com> 写道: > > This patch is used to add CryptBnNull library, which is used to > optimize code size. > > Signed-off-by: yi1 li <yi1...@intel.com> > > Cc: Jiewen Yao <jiewen....@intel.com> > Cc: Jian J Wang <jian.j.w...@intel.com> > Cc: Xiaoyu Lu <xiaoyux...@intel.com> > Cc: Guomin Jiang <guomin.ji...@intel.com> > --- > .../Library/BaseCryptLib/Bn/CryptBnNull.c | 525 ++++++++++++++++++ > .../Library/BaseCryptLib/PeiCryptLib.inf | 2 +- > .../Library/BaseCryptLib/SmmCryptLib.inf | 2 +- > .../BaseCryptLibNull/BaseCryptLibNull.inf | 1 + > .../Library/BaseCryptLibNull/Bn/CryptBnNull.c | 525 ++++++++++++++++++ > 5 files changed, 1053 insertions(+), 2 deletions(-) > create mode 100644 CryptoPkg/Library/BaseCryptLib/Bn/CryptBnNull.c > create mode 100644 CryptoPkg/Library/BaseCryptLibNull/Bn/CryptBnNull.c > > diff --git a/CryptoPkg/Library/BaseCryptLib/Bn/CryptBnNull.c > b/CryptoPkg/Library/BaseCryptLib/Bn/CryptBnNull.c > new file mode 100644 > index 000000000000..9f220ba41058 > --- /dev/null > +++ b/CryptoPkg/Library/BaseCryptLib/Bn/CryptBnNull.c > @@ -0,0 +1,525 @@ > +/** @file > + Big number API implementation based on OpenSSL > + > + Copyright (c) 2022, Intel Corporation. All rights reserved.<BR> > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include <Library/BaseCryptLib.h> > +#include <Library/DebugLib.h> > + > +/** > + Allocate new Big Number. > + > + @retval New BigNum opaque structure or NULL on failure. > +**/ > +VOID * > +EFIAPI > +BigNumInit ( > + VOID > + ) > +{ > + ASSERT (FALSE); > + return NULL; > +} > + > +/** > + Allocate new Big Number and assign the provided value to it. > + > + @param[in] Buf Big endian encoded buffer. > + @param[in] Len Buffer length. > + > + @retval New BigNum opaque structure or NULL on failure. > +**/ > +VOID * > +EFIAPI > +BigNumFromBin ( > + IN CONST UINT8 *Buf, > + IN UINTN Len > + ) > +{ > + ASSERT (FALSE); > + return NULL; > +} > + > +/** > + Convert the absolute value of Bn into big-endian form and store it at Buf. > + The Buf array should have at least BigNumBytes() in it. > + > + @param[in] Bn Big number to convert. > + @param[out] Buf Output buffer. > + > + @retval The length of the big-endian number placed at Buf or -1 on error. > +**/ > +INTN > +EFIAPI > +BigNumToBin ( > + IN VOID *Bn, > + OUT UINT8 *Buf > + ) > +{ > + ASSERT (FALSE); > + return -1; > +} > + > +/** > + Free the Big Number. > + > + @param[in] Bn Big number to free. > + @param[in] Clear TRUE if the buffer should be cleared. > +**/ > +VOID > +EFIAPI > +BigNumFree ( > + IN VOID *Bn, > + IN BOOLEAN Clear > + ) > +{ > + ASSERT (FALSE); > +} > + > +/** > + Calculate the sum of two Big Numbers. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnB Big number. > + @param[out] BnRes The result of BnA + BnB. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumAdd ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnB, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Subtract two Big Numbers. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnB Big number. > + @param[out] BnRes The result of BnA - BnB. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumSub ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnB, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Calculate remainder: BnRes = BnA % BnB. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnB Big number. > + @param[out] BnRes The result of BnA % BnB. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumMod ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnB, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Compute BnA to the BnP-th power modulo BnM. > + Please note, all "out" Big number arguments should be properly initialized. > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnP Big number (power). > + @param[in] BnM Big number (modulo). > + @param[out] BnRes The result of (BnA ^ BnP) % BnM. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumExpMod ( > + IN VOID *BnA, > + IN VOID *BnP, > + IN VOID *BnM, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Compute BnA inverse modulo BnM. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnM Big number (modulo). > + @param[out] BnRes The result, such that (BnA * BnRes) % BnM == 1. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumInverseMod ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnM, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Divide two Big Numbers. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnM Big number (modulo). > + @param[out] BnRes The result, such that BnA / BnB. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumDiv ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnM, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Multiply two Big Numbers modulo BnM. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnB Big number. > + @param[in] BnM Big number (modulo). > + @param[out] BnRes The result, such that (BnA * BnB) % BnM. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumMulMod ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnB, > + IN CONST VOID *BnM, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Compare two Big Numbers. > + > + @param[in] BnA Big number. > + @param[in] BnB Big number. > + > + @retval 0 BnA == BnB. > + @retval 1 BnA > BnB. > + @retval -1 BnA < BnB. > +**/ > +INTN > +EFIAPI > +BigNumCmp ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnB > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > +/** > + Get number of bits in Bn. > + > + @param[in] Bn Big number. > + > + @retval Number of bits. > +**/ > +UINTN > +EFIAPI > +BigNumBits ( > + IN CONST VOID *Bn > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > +/** > + Get number of bytes in Bn. > + > + @param[in] Bn Big number. > + > + @retval Number of bytes. > +**/ > +UINTN > +EFIAPI > +BigNumBytes ( > + IN CONST VOID *Bn > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > +/** > + Checks if Big Number equals to the given Num. > + > + @param[in] Bn Big number. > + @param[in] Num Number. > + > + @retval TRUE iff Bn == Num. > + @retval FALSE otherwise. > +**/ > +BOOLEAN > +EFIAPI > +BigNumIsWord ( > + IN CONST VOID *Bn, > + IN UINTN Num > + ) > +{ > + ASSERT (FALSE); > + return FALSE; > +} > + > +/** > + Checks if Big Number is odd. > + > + @param[in] Bn Big number. > + > + @retval TRUE Bn is odd (Bn % 2 == 1). > + @retval FALSE otherwise. > +**/ > +BOOLEAN > +EFIAPI > +BigNumIsOdd ( > + IN CONST VOID *Bn > + ) > +{ > + ASSERT (FALSE); > + return FALSE; > +} > + > +/** > + Copy Big number. > + > + @param[out] BnDst Destination. > + @param[in] BnSrc Source. > + > + @retval BnDst on success. > + @retval NULL otherwise. > +**/ > +VOID * > +EFIAPI > +BigNumCopy ( > + OUT VOID *BnDst, > + IN CONST VOID *BnSrc > + ) > +{ > + ASSERT (FALSE); > + return NULL; > +} > + > +/** > + Get constant Big number with value of "1". > + This may be used to save expensive allocations. > + > + @retval Big Number with value of 1. > +**/ > +CONST VOID * > +EFIAPI > +BigNumValueOne ( > + VOID > + ) > +{ > + ASSERT (FALSE); > + return NULL; > +} > + > +/** > + Shift right Big Number. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] Bn Big number. > + @param[in] n Number of bits to shift. > + @param[out] BnRes The result. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumRShift ( > + IN CONST VOID *Bn, > + IN UINTN n, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Mark Big Number for constant time computations. > + This function should be called before any constant time computations are > + performed on the given Big number. > + > + @param[in] Bn Big number. > +**/ > +VOID > +EFIAPI > +BigNumConsttime ( > + IN VOID *Bn > + ) > +{ > + ASSERT (FALSE); > +} > + > +/** > + Calculate square modulo. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnM Big number (modulo). > + @param[out] BnRes The result, such that (BnA ^ 2) % BnM. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumSqrMod ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnM, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Create new Big Number computation context. This is an opaque structure > + which should be passed to any function that requires it. The BN context is > + needed to optimize calculations and expensive allocations. > + > + @retval Big Number context struct or NULL on failure. > +**/ > +VOID * > +EFIAPI > +BigNumNewContext ( > + VOID > + ) > +{ > + ASSERT (FALSE); > + return NULL; > +} > + > +/** > + Free Big Number context that was allocated with BigNumNewContext(). > + > + @param[in] BnCtx Big number context to free. > +**/ > +VOID > +EFIAPI > +BigNumContextFree ( > + IN VOID *BnCtx > + ) > +{ > + ASSERT (FALSE); > +} > + > +/** > + Set Big Number to a given value. > + > + @param[in] Bn Big number to set. > + @param[in] Val Value to set. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumSetUint ( > + IN VOID *Bn, > + IN UINTN Val > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Add two Big Numbers modulo BnM. > + > + @param[in] BnA Big number. > + @param[in] BnB Big number. > + @param[in] BnM Big number (modulo). > + @param[out] BnRes The result, such that (BnA + BnB) % BnM. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumAddMod ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnB, > + IN CONST VOID *BnM, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > diff --git a/CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf > b/CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf > index 75d87afbdc03..d080e665c218 100644 > --- a/CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf > +++ b/CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf > @@ -59,7 +59,7 @@ > Pk/CryptRsaPssSignNull.c > Pem/CryptPemNull.c > Rand/CryptRandNull.c > - Bn/CryptBn.c > + Bn/CryptBnNull.c > > SysCall/CrtWrapper.c > SysCall/ConstantTimeClock.c > diff --git a/CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf > b/CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf > index 420cef88efb1..8a3fec9b076c 100644 > --- a/CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf > +++ b/CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf > @@ -56,7 +56,7 @@ > Pk/CryptRsaPss.c > Pk/CryptRsaPssSignNull.c > Pem/CryptPem.c > - Bn/CryptBn.c > + Bn/CryptBnNull.c > SysCall/CrtWrapper.c > SysCall/ConstantTimeClock.c > SysCall/BaseMemAllocation.c > diff --git a/CryptoPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf > b/CryptoPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf > index faf959827b90..1fb4d5c54d4f 100644 > --- a/CryptoPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf > +++ b/CryptoPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf > @@ -52,6 +52,7 @@ > Rand/CryptRandNull.c > Pk/CryptRsaPssNull.c > Pk/CryptRsaPssSignNull.c > + Bn/CryptBnNull.c > > [Packages] > MdePkg/MdePkg.dec > diff --git a/CryptoPkg/Library/BaseCryptLibNull/Bn/CryptBnNull.c > b/CryptoPkg/Library/BaseCryptLibNull/Bn/CryptBnNull.c > new file mode 100644 > index 000000000000..9f220ba41058 > --- /dev/null > +++ b/CryptoPkg/Library/BaseCryptLibNull/Bn/CryptBnNull.c > @@ -0,0 +1,525 @@ > +/** @file > + Big number API implementation based on OpenSSL > + > + Copyright (c) 2022, Intel Corporation. All rights reserved.<BR> > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include <Library/BaseCryptLib.h> > +#include <Library/DebugLib.h> > + > +/** > + Allocate new Big Number. > + > + @retval New BigNum opaque structure or NULL on failure. > +**/ > +VOID * > +EFIAPI > +BigNumInit ( > + VOID > + ) > +{ > + ASSERT (FALSE); > + return NULL; > +} > + > +/** > + Allocate new Big Number and assign the provided value to it. > + > + @param[in] Buf Big endian encoded buffer. > + @param[in] Len Buffer length. > + > + @retval New BigNum opaque structure or NULL on failure. > +**/ > +VOID * > +EFIAPI > +BigNumFromBin ( > + IN CONST UINT8 *Buf, > + IN UINTN Len > + ) > +{ > + ASSERT (FALSE); > + return NULL; > +} > + > +/** > + Convert the absolute value of Bn into big-endian form and store it at Buf. > + The Buf array should have at least BigNumBytes() in it. > + > + @param[in] Bn Big number to convert. > + @param[out] Buf Output buffer. > + > + @retval The length of the big-endian number placed at Buf or -1 on error. > +**/ > +INTN > +EFIAPI > +BigNumToBin ( > + IN VOID *Bn, > + OUT UINT8 *Buf > + ) > +{ > + ASSERT (FALSE); > + return -1; > +} > + > +/** > + Free the Big Number. > + > + @param[in] Bn Big number to free. > + @param[in] Clear TRUE if the buffer should be cleared. > +**/ > +VOID > +EFIAPI > +BigNumFree ( > + IN VOID *Bn, > + IN BOOLEAN Clear > + ) > +{ > + ASSERT (FALSE); > +} > + > +/** > + Calculate the sum of two Big Numbers. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnB Big number. > + @param[out] BnRes The result of BnA + BnB. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumAdd ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnB, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Subtract two Big Numbers. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnB Big number. > + @param[out] BnRes The result of BnA - BnB. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumSub ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnB, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Calculate remainder: BnRes = BnA % BnB. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnB Big number. > + @param[out] BnRes The result of BnA % BnB. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumMod ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnB, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Compute BnA to the BnP-th power modulo BnM. > + Please note, all "out" Big number arguments should be properly initialized. > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnP Big number (power). > + @param[in] BnM Big number (modulo). > + @param[out] BnRes The result of (BnA ^ BnP) % BnM. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumExpMod ( > + IN VOID *BnA, > + IN VOID *BnP, > + IN VOID *BnM, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Compute BnA inverse modulo BnM. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnM Big number (modulo). > + @param[out] BnRes The result, such that (BnA * BnRes) % BnM == 1. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumInverseMod ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnM, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Divide two Big Numbers. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnM Big number (modulo). > + @param[out] BnRes The result, such that BnA / BnB. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumDiv ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnM, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Multiply two Big Numbers modulo BnM. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnB Big number. > + @param[in] BnM Big number (modulo). > + @param[out] BnRes The result, such that (BnA * BnB) % BnM. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumMulMod ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnB, > + IN CONST VOID *BnM, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Compare two Big Numbers. > + > + @param[in] BnA Big number. > + @param[in] BnB Big number. > + > + @retval 0 BnA == BnB. > + @retval 1 BnA > BnB. > + @retval -1 BnA < BnB. > +**/ > +INTN > +EFIAPI > +BigNumCmp ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnB > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > +/** > + Get number of bits in Bn. > + > + @param[in] Bn Big number. > + > + @retval Number of bits. > +**/ > +UINTN > +EFIAPI > +BigNumBits ( > + IN CONST VOID *Bn > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > +/** > + Get number of bytes in Bn. > + > + @param[in] Bn Big number. > + > + @retval Number of bytes. > +**/ > +UINTN > +EFIAPI > +BigNumBytes ( > + IN CONST VOID *Bn > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > +/** > + Checks if Big Number equals to the given Num. > + > + @param[in] Bn Big number. > + @param[in] Num Number. > + > + @retval TRUE iff Bn == Num. > + @retval FALSE otherwise. > +**/ > +BOOLEAN > +EFIAPI > +BigNumIsWord ( > + IN CONST VOID *Bn, > + IN UINTN Num > + ) > +{ > + ASSERT (FALSE); > + return FALSE; > +} > + > +/** > + Checks if Big Number is odd. > + > + @param[in] Bn Big number. > + > + @retval TRUE Bn is odd (Bn % 2 == 1). > + @retval FALSE otherwise. > +**/ > +BOOLEAN > +EFIAPI > +BigNumIsOdd ( > + IN CONST VOID *Bn > + ) > +{ > + ASSERT (FALSE); > + return FALSE; > +} > + > +/** > + Copy Big number. > + > + @param[out] BnDst Destination. > + @param[in] BnSrc Source. > + > + @retval BnDst on success. > + @retval NULL otherwise. > +**/ > +VOID * > +EFIAPI > +BigNumCopy ( > + OUT VOID *BnDst, > + IN CONST VOID *BnSrc > + ) > +{ > + ASSERT (FALSE); > + return NULL; > +} > + > +/** > + Get constant Big number with value of "1". > + This may be used to save expensive allocations. > + > + @retval Big Number with value of 1. > +**/ > +CONST VOID * > +EFIAPI > +BigNumValueOne ( > + VOID > + ) > +{ > + ASSERT (FALSE); > + return NULL; > +} > + > +/** > + Shift right Big Number. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] Bn Big number. > + @param[in] n Number of bits to shift. > + @param[out] BnRes The result. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumRShift ( > + IN CONST VOID *Bn, > + IN UINTN n, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Mark Big Number for constant time computations. > + This function should be called before any constant time computations are > + performed on the given Big number. > + > + @param[in] Bn Big number. > +**/ > +VOID > +EFIAPI > +BigNumConsttime ( > + IN VOID *Bn > + ) > +{ > + ASSERT (FALSE); > +} > + > +/** > + Calculate square modulo. > + Please note, all "out" Big number arguments should be properly initialized > + by calling to BigNumInit() or BigNumFromBin() functions. > + > + @param[in] BnA Big number. > + @param[in] BnM Big number (modulo). > + @param[out] BnRes The result, such that (BnA ^ 2) % BnM. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumSqrMod ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnM, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Create new Big Number computation context. This is an opaque structure > + which should be passed to any function that requires it. The BN context is > + needed to optimize calculations and expensive allocations. > + > + @retval Big Number context struct or NULL on failure. > +**/ > +VOID * > +EFIAPI > +BigNumNewContext ( > + VOID > + ) > +{ > + ASSERT (FALSE); > + return NULL; > +} > + > +/** > + Free Big Number context that was allocated with BigNumNewContext(). > + > + @param[in] BnCtx Big number context to free. > +**/ > +VOID > +EFIAPI > +BigNumContextFree ( > + IN VOID *BnCtx > + ) > +{ > + ASSERT (FALSE); > +} > + > +/** > + Set Big Number to a given value. > + > + @param[in] Bn Big number to set. > + @param[in] Val Value to set. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumSetUint ( > + IN VOID *Bn, > + IN UINTN Val > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > + > +/** > + Add two Big Numbers modulo BnM. > + > + @param[in] BnA Big number. > + @param[in] BnB Big number. > + @param[in] BnM Big number (modulo). > + @param[out] BnRes The result, such that (BnA + BnB) % BnM. > + > + @retval EFI_SUCCESS On success. > + @retval EFI_OUT_OF_RESOURCES In case of internal allocation failures. > + @retval EFI_PROTOCOL_ERROR Otherwise. > +**/ > +EFI_STATUS > +EFIAPI > +BigNumAddMod ( > + IN CONST VOID *BnA, > + IN CONST VOID *BnB, > + IN CONST VOID *BnM, > + OUT VOID *BnRes > + ) > +{ > + ASSERT (FALSE); > + return EFI_UNSUPPORTED; > +} > -- > 2.33.0.windows.2 > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#86221): https://edk2.groups.io/g/devel/message/86221 Mute This Topic: https://groups.io/mt/88776239/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-