-/**\r
- Performs the PKCS1-v1_5 encoding methods defined in RSA PKCS #1.\r
-\r
- @param[in] Message Message buffer to be encoded.\r
- @param[in] MessageSize Size of message buffer in bytes.\r
- @param[out] DigestInfo Pointer to buffer of digest info for output.\r
- @param[in,out] DigestInfoSize On input, the size of DigestInfo buffer in bytes.\r
- On output, the size of data returned in DigestInfo\r
- buffer in bytes.\r
-\r
- @retval TRUE PKCS1-v1_5 encoding finished successfully.\r
- @retval FALSE Any input parameter is invalid.\r
- @retval FALSE DigestInfo buffer is not large enough.\r
-\r
-**/ \r
-BOOLEAN\r
-DigestInfoEncoding (\r
- IN CONST UINT8 *Message,\r
- IN UINTN MessageSize,\r
- OUT UINT8 *DigestInfo,\r
- IN OUT UINTN *DigestInfoSize\r
- )\r
-{\r
- CONST UINT8 *HashDer;\r
- UINTN DerSize;\r
-\r
- //\r
- // Check input parameters.\r
- //\r
- if (Message == NULL || DigestInfo == NULL || DigestInfoSize == NULL) {\r
- return FALSE;\r
- }\r
-\r
- //\r
- // The original message length is used to determine the hash algorithm since\r
- // message is digest value hashed by the specified algorithm.\r
- //\r
- switch (MessageSize) {\r
- case MD5_DIGEST_SIZE:\r
- HashDer = Asn1IdMd5;\r
- DerSize = sizeof (Asn1IdMd5);\r
- break;\r
- \r
- case SHA1_DIGEST_SIZE:\r
- HashDer = Asn1IdSha1;\r
- DerSize = sizeof (Asn1IdSha1);\r
- break;\r
- \r
- case SHA256_DIGEST_SIZE:\r
- HashDer = Asn1IdSha256;\r
- DerSize = sizeof (Asn1IdSha256);\r
- break;\r
- \r
- default:\r
- return FALSE;\r
- }\r
-\r
- if (*DigestInfoSize < DerSize + MessageSize) {\r
- *DigestInfoSize = DerSize + MessageSize;\r
- return FALSE;\r
- }\r
-\r
- CopyMem (DigestInfo, HashDer, DerSize);\r
- CopyMem (DigestInfo + DerSize, Message, MessageSize);\r
-\r
- *DigestInfoSize = DerSize + MessageSize;\r
- return TRUE;\r
-}\r
-\r