]> git.proxmox.com Git - mirror_edk2.git/blobdiff - CryptoPkg/Library/BaseCryptLibOnProtocolPpi/CryptLib.c
CryptoPkg: Change OPTIONAL keyword usage style
[mirror_edk2.git] / CryptoPkg / Library / BaseCryptLibOnProtocolPpi / CryptLib.c
index dfe7fb7e91d34feb88c199cbc01baba81539a42b..6b2a5b11b5bcc581b2ebe67176f92a40da01d226 100644 (file)
@@ -99,6 +99,7 @@ CryptoServiceNotAvailable (
 //    One-Way Cryptographic Hash Primitives\r
 //=====================================================================================\r
 \r
+#ifdef ENABLE_MD5_DEPRECATED_INTERFACES\r
 /**\r
   Retrieves the size, in bytes, of the context buffer required for MD5 hash operations.\r
 \r
@@ -256,7 +257,9 @@ Md5HashAll (
 {\r
   CALL_CRYPTO_SERVICE (Md5HashAll, (Data, DataSize, HashValue), FALSE);\r
 }\r
+#endif\r
 \r
+#ifndef DISABLE_SHA1_DEPRECATED_INTERFACES\r
 /**\r
   Retrieves the size, in bytes, of the context buffer required for SHA-1 hash operations.\r
 \r
@@ -414,6 +417,7 @@ Sha1HashAll (
 {\r
   CALL_CRYPTO_SERVICE (Sha1HashAll, (Data, DataSize, HashValue), FALSE);\r
 }\r
+#endif\r
 \r
 /**\r
   Retrieves the size, in bytes, of the context buffer required for SHA-256 hash operations.\r
@@ -1015,157 +1019,6 @@ Sm3HashAll (
 //    MAC (Message Authentication Code) Primitive\r
 //=====================================================================================\r
 \r
-/**\r
-  Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA1 use.\r
-\r
-  If this interface is not supported, then return NULL.\r
-\r
-  @return  Pointer to the HMAC_CTX context that has been initialized.\r
-           If the allocations fails, HmacSha1New() returns NULL.\r
-  @return  NULL   This interface is not supported.\r
-\r
-**/\r
-VOID *\r
-EFIAPI\r
-HmacSha1New (\r
-  VOID\r
-  )\r
-{\r
-  CALL_CRYPTO_SERVICE (HmacSha1New, (), NULL);\r
-}\r
-\r
-/**\r
-  Release the specified HMAC_CTX context.\r
-\r
-  If this interface is not supported, then do nothing.\r
-\r
-  @param[in]  HmacSha1Ctx  Pointer to the HMAC_CTX context to be released.\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-HmacSha1Free (\r
-  IN  VOID  *HmacSha1Ctx\r
-  )\r
-{\r
-  CALL_VOID_CRYPTO_SERVICE (HmacSha1Free, (HmacSha1Ctx));\r
-}\r
-\r
-/**\r
-  Set user-supplied key for subsequent use. It must be done before any\r
-  calling to HmacSha1Update().\r
-\r
-  If HmacSha1Context is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[out]  HmacSha1Context  Pointer to HMAC-SHA1 context.\r
-  @param[in]   Key              Pointer to the user-supplied key.\r
-  @param[in]   KeySize          Key size in bytes.\r
-\r
-  @retval TRUE   The Key is set successfully.\r
-  @retval FALSE  The Key is set unsuccessfully.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-HmacSha1SetKey (\r
-  OUT  VOID         *HmacSha1Context,\r
-  IN   CONST UINT8  *Key,\r
-  IN   UINTN        KeySize\r
-  )\r
-{\r
-  CALL_CRYPTO_SERVICE (HmacSha1SetKey, (HmacSha1Context, Key, KeySize), FALSE);\r
-}\r
-\r
-/**\r
-  Makes a copy of an existing HMAC-SHA1 context.\r
-\r
-  If HmacSha1Context is NULL, then return FALSE.\r
-  If NewHmacSha1Context is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in]  HmacSha1Context     Pointer to HMAC-SHA1 context being copied.\r
-  @param[out] NewHmacSha1Context  Pointer to new HMAC-SHA1 context.\r
-\r
-  @retval TRUE   HMAC-SHA1 context copy succeeded.\r
-  @retval FALSE  HMAC-SHA1 context copy failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-HmacSha1Duplicate (\r
-  IN   CONST VOID  *HmacSha1Context,\r
-  OUT  VOID        *NewHmacSha1Context\r
-  )\r
-{\r
-  CALL_CRYPTO_SERVICE (HmacSha1Duplicate, (HmacSha1Context, NewHmacSha1Context), FALSE);\r
-}\r
-\r
-/**\r
-  Digests the input data and updates HMAC-SHA1 context.\r
-\r
-  This function performs HMAC-SHA1 digest on a data buffer of the specified size.\r
-  It can be called multiple times to compute the digest of long or discontinuous data streams.\r
-  HMAC-SHA1 context should be initialized by HmacSha1New(), and should not be finalized by\r
-  HmacSha1Final(). Behavior with invalid context is undefined.\r
-\r
-  If HmacSha1Context is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in, out]  HmacSha1Context Pointer to the HMAC-SHA1 context.\r
-  @param[in]       Data            Pointer to the buffer containing the data to be digested.\r
-  @param[in]       DataSize        Size of Data buffer in bytes.\r
-\r
-  @retval TRUE   HMAC-SHA1 data digest succeeded.\r
-  @retval FALSE  HMAC-SHA1 data digest failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-HmacSha1Update (\r
-  IN OUT  VOID        *HmacSha1Context,\r
-  IN      CONST VOID  *Data,\r
-  IN      UINTN       DataSize\r
-  )\r
-{\r
-  CALL_CRYPTO_SERVICE (HmacSha1Update, (HmacSha1Context, Data, DataSize), FALSE);\r
-}\r
-\r
-/**\r
-  Completes computation of the HMAC-SHA1 digest value.\r
-\r
-  This function completes HMAC-SHA1 hash computation and retrieves the digest value into\r
-  the specified memory. After this function has been called, the HMAC-SHA1 context cannot\r
-  be used again.\r
-  HMAC-SHA1 context should be initialized by HmacSha1New(), and should not be finalized\r
-  by HmacSha1Final(). Behavior with invalid HMAC-SHA1 context is undefined.\r
-\r
-  If HmacSha1Context is NULL, then return FALSE.\r
-  If HmacValue is NULL, then return FALSE.\r
-  If this interface is not supported, then return FALSE.\r
-\r
-  @param[in, out]  HmacSha1Context  Pointer to the HMAC-SHA1 context.\r
-  @param[out]      HmacValue        Pointer to a buffer that receives the HMAC-SHA1 digest\r
-                                    value (20 bytes).\r
-\r
-  @retval TRUE   HMAC-SHA1 digest computation succeeded.\r
-  @retval FALSE  HMAC-SHA1 digest computation failed.\r
-  @retval FALSE  This interface is not supported.\r
-\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-HmacSha1Final (\r
-  IN OUT  VOID   *HmacSha1Context,\r
-  OUT     UINT8  *HmacValue\r
-  )\r
-{\r
-  CALL_CRYPTO_SERVICE (HmacSha1Final, (HmacSha1Context, HmacValue), FALSE);\r
-}\r
-\r
 /**\r
   Allocates and initializes one HMAC_CTX context for subsequent HMAC-SHA256 use.\r
 \r
@@ -1699,6 +1552,84 @@ RsaPkcs1Verify (
   CALL_CRYPTO_SERVICE (RsaPkcs1Verify, (RsaContext, MessageHash, HashSize, Signature, SigSize), FALSE);\r
 }\r
 \r
+/**\r
+  Verifies the RSA signature with RSASSA-PSS signature scheme defined in RFC 8017.\r
+  Implementation determines salt length automatically from the signature encoding.\r
+  Mask generation function is the same as the message digest algorithm.\r
+  Salt length should be equal to digest length.\r
+\r
+  @param[in]  RsaContext      Pointer to RSA context for signature verification.\r
+  @param[in]  Message         Pointer to octet message to be verified.\r
+  @param[in]  MsgSize         Size of the message in bytes.\r
+  @param[in]  Signature       Pointer to RSASSA-PSS signature to be verified.\r
+  @param[in]  SigSize         Size of signature in bytes.\r
+  @param[in]  DigestLen       Length of digest for RSA operation.\r
+  @param[in]  SaltLen         Salt length for PSS encoding.\r
+\r
+  @retval  TRUE   Valid signature encoded in RSASSA-PSS.\r
+  @retval  FALSE  Invalid signature or invalid RSA context.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+RsaPssVerify (\r
+  IN  VOID         *RsaContext,\r
+  IN  CONST UINT8  *Message,\r
+  IN  UINTN        MsgSize,\r
+  IN  CONST UINT8  *Signature,\r
+  IN  UINTN        SigSize,\r
+  IN  UINT16       DigestLen,\r
+  IN  UINT16       SaltLen\r
+  )\r
+{\r
+  CALL_CRYPTO_SERVICE (RsaPssVerify, (RsaContext, Message, MsgSize, Signature, SigSize, DigestLen, SaltLen), FALSE);\r
+}\r
+\r
+/**\r
+  This function carries out the RSA-SSA signature generation with EMSA-PSS encoding scheme defined in\r
+  RFC 8017.\r
+  Mask generation function is the same as the message digest algorithm.\r
+  If the Signature buffer is too small to hold the contents of signature, FALSE\r
+  is returned and SigSize is set to the required buffer size to obtain the signature.\r
+\r
+  If RsaContext is NULL, then return FALSE.\r
+  If Message is NULL, then return FALSE.\r
+  If MsgSize is zero or > INT_MAX, then return FALSE.\r
+  If DigestLen is NOT 32, 48 or 64, return FALSE.\r
+  If SaltLen is not equal to DigestLen, then return FALSE.\r
+  If SigSize is large enough but Signature is NULL, then return FALSE.\r
+  If this interface is not supported, then return FALSE.\r
+\r
+  @param[in]      RsaContext   Pointer to RSA context for signature generation.\r
+  @param[in]      Message      Pointer to octet message to be signed.\r
+  @param[in]      MsgSize      Size of the message in bytes.\r
+  @param[in]      DigestLen    Length of the digest in bytes to be used for RSA signature operation.\r
+  @param[in]      SaltLen      Length of the salt in bytes to be used for PSS encoding.\r
+  @param[out]     Signature    Pointer to buffer to receive RSA PSS signature.\r
+  @param[in, out] SigSize      On input, the size of Signature buffer in bytes.\r
+                               On output, the size of data returned in Signature buffer in bytes.\r
+\r
+  @retval  TRUE   Signature successfully generated in RSASSA-PSS.\r
+  @retval  FALSE  Signature generation failed.\r
+  @retval  FALSE  SigSize is too small.\r
+  @retval  FALSE  This interface is not supported.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+RsaPssSign (\r
+  IN      VOID         *RsaContext,\r
+  IN      CONST UINT8  *Message,\r
+  IN      UINTN        MsgSize,\r
+  IN      UINT16       DigestLen,\r
+  IN      UINT16       SaltLen,\r
+  OUT     UINT8        *Signature,\r
+  IN OUT  UINTN        *SigSize\r
+  )\r
+{\r
+  CALL_CRYPTO_SERVICE (RsaPssSign, (RsaContext, Message, MsgSize, DigestLen, SaltLen, Signature, SigSize), FALSE);\r
+}\r
+\r
 /**\r
   Retrieve the RSA Private Key from the password-protected PEM key data.\r
 \r
@@ -1821,7 +1752,7 @@ EFIAPI
 X509GetCommonName (\r
   IN      CONST UINT8  *Cert,\r
   IN      UINTN        CertSize,\r
-  OUT     CHAR8        *CommonName,  OPTIONAL\r
+  OUT     CHAR8        *CommonName   OPTIONAL,\r
   IN OUT  UINTN        *CommonNameSize\r
   )\r
 {\r
@@ -1859,7 +1790,7 @@ EFIAPI
 X509GetOrganizationName (\r
   IN      CONST UINT8   *Cert,\r
   IN      UINTN         CertSize,\r
-  OUT     CHAR8         *NameBuffer,  OPTIONAL\r
+  OUT     CHAR8         *NameBuffer   OPTIONAL,\r
   IN OUT  UINTN         *NameBufferSize\r
   )\r
 {\r
@@ -2129,8 +2060,8 @@ Pkcs1v2Encrypt (
   IN   UINTN        PublicKeySize,\r
   IN   UINT8        *InData,\r
   IN   UINTN        InDataSize,\r
-  IN   CONST UINT8  *PrngSeed,  OPTIONAL\r
-  IN   UINTN        PrngSeedSize,  OPTIONAL\r
+  IN   CONST UINT8  *PrngSeed   OPTIONAL,\r
+  IN   UINTN        PrngSeedSize   OPTIONAL,\r
   OUT  UINT8        **EncryptedData,\r
   OUT  UINTN        *EncryptedDataSize\r
   )\r
@@ -2881,9 +2812,9 @@ EFI_STATUS
 EFIAPI\r
 TlsDoHandshake (\r
   IN     VOID                     *Tls,\r
-  IN     UINT8                    *BufferIn, OPTIONAL\r
-  IN     UINTN                    BufferInSize, OPTIONAL\r
-     OUT UINT8                    *BufferOut, OPTIONAL\r
+  IN     UINT8                    *BufferIn  OPTIONAL,\r
+  IN     UINTN                    BufferInSize  OPTIONAL,\r
+     OUT UINT8                    *BufferOut  OPTIONAL,\r
   IN OUT UINTN                    *BufferOutSize\r
   )\r
 {\r
@@ -2919,9 +2850,9 @@ EFI_STATUS
 EFIAPI\r
 TlsHandleAlert (\r
   IN     VOID                     *Tls,\r
-  IN     UINT8                    *BufferIn, OPTIONAL\r
-  IN     UINTN                    BufferInSize, OPTIONAL\r
-     OUT UINT8                    *BufferOut, OPTIONAL\r
+  IN     UINT8                    *BufferIn  OPTIONAL,\r
+  IN     UINTN                    BufferInSize  OPTIONAL,\r
+     OUT UINT8                    *BufferOut  OPTIONAL,\r
   IN OUT UINTN                    *BufferOutSize\r
   )\r
 {\r