| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 1 | /** | 
|  | 2 | * \file pkcs7.h | 
|  | 3 | * | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 4 | * \brief PKCS #7 generic defines and structures | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 5 | *  https://tools.ietf.org/html/rfc2315 | 
|  | 6 | */ | 
|  | 7 | /* | 
| Nick Child | 5d881c3 | 2022-02-28 10:09:16 -0600 | [diff] [blame] | 8 | *  Copyright The Mbed TLS Contributors | 
| Dave Rodgman | 16799db | 2023-11-02 19:47:20 +0000 | [diff] [blame] | 9 | *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 10 | */ | 
|  | 11 |  | 
|  | 12 | /** | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 13 | * Note: For the time being, this implementation of the PKCS #7 cryptographic | 
|  | 14 | * message syntax is a partial implementation of RFC 2315. | 
| Dave Rodgman | 25b2dfa | 2023-03-11 13:00:41 +0000 | [diff] [blame] | 15 | * Differences include: | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 16 | *  - The RFC specifies 6 different content types. The only type currently | 
| Dave Rodgman | bcc92d4 | 2023-03-14 07:13:44 +0000 | [diff] [blame] | 17 | *    supported in Mbed TLS is the signed-data content type. | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 18 | *  - The only supported PKCS #7 Signed Data syntax version is version 1 | 
| Nick Child | 8ce1b1a | 2022-09-14 14:51:23 -0500 | [diff] [blame] | 19 | *  - The RFC specifies support for BER. This implementation is limited to | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 20 | *    DER only. | 
|  | 21 | *  - The RFC specifies that multiple digest algorithms can be specified | 
| Nick Child | 8ce1b1a | 2022-09-14 14:51:23 -0500 | [diff] [blame] | 22 | *    in the Signed Data type. Only one digest algorithm is supported in Mbed TLS. | 
| Dave Rodgman | cdaaef5 | 2023-03-14 07:13:50 +0000 | [diff] [blame] | 23 | *  - The RFC specifies the Signed Data type can contain multiple X.509 or PKCS #6 extended | 
| Nick Child | 8ce1b1a | 2022-09-14 14:51:23 -0500 | [diff] [blame] | 24 | *    certificates. In Mbed TLS, this list can only contain 0 or 1 certificates | 
| Dave Rodgman | efbc5f7 | 2023-03-13 12:15:49 +0000 | [diff] [blame] | 25 | *    and they must be in X.509 format. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 26 | *  - The RFC specifies the Signed Data type can contain | 
| Dave Rodgman | efbc5f7 | 2023-03-13 12:15:49 +0000 | [diff] [blame] | 27 | *    certificate-revocation lists (CRLs). This implementation has no support | 
|  | 28 | *    for CRLs so it is assumed to be an empty list. | 
| Nick Child | bb82ab7 | 2022-10-28 12:28:54 -0500 | [diff] [blame] | 29 | *  - The RFC allows for SignerInfo structure to optionally contain | 
|  | 30 | *    unauthenticatedAttributes and authenticatedAttributes. In Mbed TLS it is | 
|  | 31 | *    assumed these fields are empty. | 
| Nick Child | 3dafc6c | 2023-02-07 19:59:58 +0000 | [diff] [blame] | 32 | *  - The RFC allows for the signed Data type to contain contentInfo. This | 
|  | 33 | *    implementation assumes the type is DATA and the content is empty. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 34 | */ | 
|  | 35 |  | 
|  | 36 | #ifndef MBEDTLS_PKCS7_H | 
|  | 37 | #define MBEDTLS_PKCS7_H | 
|  | 38 |  | 
| Nick Child | 390e61a | 2021-08-09 13:33:14 -0400 | [diff] [blame] | 39 | #include "mbedtls/private_access.h" | 
|  | 40 |  | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 41 | #include "mbedtls/build_info.h" | 
|  | 42 |  | 
| Nick Child | 7dbe852 | 2022-09-30 17:24:29 -0500 | [diff] [blame] | 43 | #include "mbedtls/asn1.h" | 
| Nick Child | 7dbe852 | 2022-09-30 17:24:29 -0500 | [diff] [blame] | 44 | #include "mbedtls/x509_crt.h" | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 45 |  | 
|  | 46 | /** | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 47 | * \name PKCS #7 Module Error codes | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 48 | * \{ | 
|  | 49 | */ | 
|  | 50 | #define MBEDTLS_ERR_PKCS7_INVALID_FORMAT                   -0x5300  /**< The format is invalid, e.g. different type expected. */ | 
| Nick Child | 9512bde | 2022-09-16 09:49:06 -0500 | [diff] [blame] | 51 | #define MBEDTLS_ERR_PKCS7_FEATURE_UNAVAILABLE              -0x5380  /**< Unavailable feature, e.g. anything other than signed data. */ | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 52 | #define MBEDTLS_ERR_PKCS7_INVALID_VERSION                  -0x5400  /**< The PKCS #7 version element is invalid or cannot be parsed. */ | 
|  | 53 | #define MBEDTLS_ERR_PKCS7_INVALID_CONTENT_INFO             -0x5480  /**< The PKCS #7 content info is invalid or cannot be parsed. */ | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 54 | #define MBEDTLS_ERR_PKCS7_INVALID_ALG                      -0x5500  /**< The algorithm tag or value is invalid or cannot be parsed. */ | 
| Nick Child | 9512bde | 2022-09-16 09:49:06 -0500 | [diff] [blame] | 55 | #define MBEDTLS_ERR_PKCS7_INVALID_CERT                     -0x5580  /**< The certificate tag or value is invalid or cannot be parsed. */ | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 56 | #define MBEDTLS_ERR_PKCS7_INVALID_SIGNATURE                -0x5600  /**< Error parsing the signature */ | 
| Nick Child | 9512bde | 2022-09-16 09:49:06 -0500 | [diff] [blame] | 57 | #define MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO              -0x5680  /**< Error parsing the signer's info */ | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 58 | #define MBEDTLS_ERR_PKCS7_BAD_INPUT_DATA                   -0x5700  /**< Input invalid. */ | 
| Nick Child | 9512bde | 2022-09-16 09:49:06 -0500 | [diff] [blame] | 59 | #define MBEDTLS_ERR_PKCS7_ALLOC_FAILED                     -0x5780  /**< Allocation of memory failed. */ | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 60 | #define MBEDTLS_ERR_PKCS7_VERIFY_FAIL                      -0x5800  /**< Verification Failed */ | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 61 | #define MBEDTLS_ERR_PKCS7_CERT_DATE_INVALID                -0x5880  /**< The PKCS #7 date issued/expired dates are invalid */ | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 62 | /* \} name */ | 
|  | 63 |  | 
|  | 64 | /** | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 65 | * \name PKCS #7 Supported Version | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 66 | * \{ | 
|  | 67 | */ | 
|  | 68 | #define MBEDTLS_PKCS7_SUPPORTED_VERSION                           0x01 | 
|  | 69 | /* \} name */ | 
|  | 70 |  | 
|  | 71 | #ifdef __cplusplus | 
|  | 72 | extern "C" { | 
|  | 73 | #endif | 
|  | 74 |  | 
|  | 75 | /** | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 76 | * Type-length-value structure that allows for ASN.1 using DER. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 77 | */ | 
|  | 78 | typedef mbedtls_asn1_buf mbedtls_pkcs7_buf; | 
|  | 79 |  | 
|  | 80 | /** | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 81 | * Container for ASN.1 named information objects. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 82 | * It allows for Relative Distinguished Names (e.g. cn=localhost,ou=code,etc.). | 
|  | 83 | */ | 
|  | 84 | typedef mbedtls_asn1_named_data mbedtls_pkcs7_name; | 
|  | 85 |  | 
|  | 86 | /** | 
|  | 87 | * Container for a sequence of ASN.1 items | 
|  | 88 | */ | 
|  | 89 | typedef mbedtls_asn1_sequence mbedtls_pkcs7_sequence; | 
|  | 90 |  | 
|  | 91 | /** | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 92 | * PKCS #7 types | 
| Nayna Jain | 673a226 | 2020-12-14 22:44:49 +0000 | [diff] [blame] | 93 | */ | 
|  | 94 | typedef enum { | 
|  | 95 | MBEDTLS_PKCS7_NONE=0, | 
|  | 96 | MBEDTLS_PKCS7_DATA, | 
|  | 97 | MBEDTLS_PKCS7_SIGNED_DATA, | 
|  | 98 | MBEDTLS_PKCS7_ENVELOPED_DATA, | 
|  | 99 | MBEDTLS_PKCS7_SIGNED_AND_ENVELOPED_DATA, | 
|  | 100 | MBEDTLS_PKCS7_DIGESTED_DATA, | 
|  | 101 | MBEDTLS_PKCS7_ENCRYPTED_DATA, | 
|  | 102 | } | 
|  | 103 | mbedtls_pkcs7_type; | 
|  | 104 |  | 
|  | 105 | /** | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 106 | * Structure holding PKCS #7 signer info | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 107 | */ | 
| Gilles Peskine | 449bd83 | 2023-01-11 14:50:10 +0100 | [diff] [blame] | 108 | typedef struct mbedtls_pkcs7_signer_info { | 
| Nick Child | 390e61a | 2021-08-09 13:33:14 -0400 | [diff] [blame] | 109 | int MBEDTLS_PRIVATE(version); | 
|  | 110 | mbedtls_x509_buf MBEDTLS_PRIVATE(serial); | 
|  | 111 | mbedtls_x509_name MBEDTLS_PRIVATE(issuer); | 
|  | 112 | mbedtls_x509_buf MBEDTLS_PRIVATE(issuer_raw); | 
|  | 113 | mbedtls_x509_buf MBEDTLS_PRIVATE(alg_identifier); | 
|  | 114 | mbedtls_x509_buf MBEDTLS_PRIVATE(sig_alg_identifier); | 
|  | 115 | mbedtls_x509_buf MBEDTLS_PRIVATE(sig); | 
|  | 116 | struct mbedtls_pkcs7_signer_info *MBEDTLS_PRIVATE(next); | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 117 | } | 
|  | 118 | mbedtls_pkcs7_signer_info; | 
|  | 119 |  | 
|  | 120 | /** | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 121 | * Structure holding the signed data section | 
|  | 122 | */ | 
| Gilles Peskine | 449bd83 | 2023-01-11 14:50:10 +0100 | [diff] [blame] | 123 | typedef struct mbedtls_pkcs7_signed_data { | 
| Nick Child | 390e61a | 2021-08-09 13:33:14 -0400 | [diff] [blame] | 124 | int MBEDTLS_PRIVATE(version); | 
|  | 125 | mbedtls_pkcs7_buf MBEDTLS_PRIVATE(digest_alg_identifiers); | 
| Nick Child | 390e61a | 2021-08-09 13:33:14 -0400 | [diff] [blame] | 126 | int MBEDTLS_PRIVATE(no_of_certs); | 
|  | 127 | mbedtls_x509_crt MBEDTLS_PRIVATE(certs); | 
|  | 128 | int MBEDTLS_PRIVATE(no_of_crls); | 
|  | 129 | mbedtls_x509_crl MBEDTLS_PRIVATE(crl); | 
|  | 130 | int MBEDTLS_PRIVATE(no_of_signers); | 
|  | 131 | mbedtls_pkcs7_signer_info MBEDTLS_PRIVATE(signers); | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 132 | } | 
|  | 133 | mbedtls_pkcs7_signed_data; | 
|  | 134 |  | 
|  | 135 | /** | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 136 | * Structure holding PKCS #7 structure, only signed data for now | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 137 | */ | 
| Gilles Peskine | 449bd83 | 2023-01-11 14:50:10 +0100 | [diff] [blame] | 138 | typedef struct mbedtls_pkcs7 { | 
| Nick Child | 390e61a | 2021-08-09 13:33:14 -0400 | [diff] [blame] | 139 | mbedtls_pkcs7_buf MBEDTLS_PRIVATE(raw); | 
| Nick Child | 390e61a | 2021-08-09 13:33:14 -0400 | [diff] [blame] | 140 | mbedtls_pkcs7_signed_data MBEDTLS_PRIVATE(signed_data); | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 141 | } | 
|  | 142 | mbedtls_pkcs7; | 
|  | 143 |  | 
|  | 144 | /** | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 145 | * \brief          Initialize mbedtls_pkcs7 structure. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 146 | * | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 147 | * \param pkcs7    mbedtls_pkcs7 structure. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 148 | */ | 
| Gilles Peskine | 449bd83 | 2023-01-11 14:50:10 +0100 | [diff] [blame] | 149 | void mbedtls_pkcs7_init(mbedtls_pkcs7 *pkcs7); | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 150 |  | 
|  | 151 | /** | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 152 | * \brief          Parse a single DER formatted PKCS #7 detached signature. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 153 | * | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 154 | * \param pkcs7    The mbedtls_pkcs7 structure to be filled by the parser. | 
|  | 155 | * \param buf      The buffer holding only the DER encoded PKCS #7 content. | 
| Nick Child | ec81709 | 2022-12-15 15:54:03 -0600 | [diff] [blame] | 156 | * \param buflen   The size in bytes of \p buf. The size must be exactly the | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 157 | *                 length of the DER encoded PKCS #7 content. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 158 | * | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 159 | * \note           This function makes an internal copy of the PKCS #7 buffer | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 160 | *                 \p buf. In particular, \p buf may be destroyed or reused | 
|  | 161 | *                 after this call returns. | 
| Demi Marie Obenour | 6cfc469 | 2022-11-28 00:46:00 -0500 | [diff] [blame] | 162 | * \note           Signatures with internal data are not supported. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 163 | * | 
| Nayna Jain | 673a226 | 2020-12-14 22:44:49 +0000 | [diff] [blame] | 164 | * \return         The \c mbedtls_pkcs7_type of \p buf, if successful. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 165 | * \return         A negative error code on failure. | 
|  | 166 | */ | 
| Gilles Peskine | 449bd83 | 2023-01-11 14:50:10 +0100 | [diff] [blame] | 167 | int mbedtls_pkcs7_parse_der(mbedtls_pkcs7 *pkcs7, const unsigned char *buf, | 
|  | 168 | const size_t buflen); | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 169 |  | 
|  | 170 | /** | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 171 | * \brief          Verification of PKCS #7 signature against a caller-supplied | 
| Dave Rodgman | bc5f03d | 2022-12-01 12:36:57 +0000 | [diff] [blame] | 172 | *                 certificate. | 
|  | 173 | * | 
|  | 174 | *                 For each signer in the PKCS structure, this function computes | 
|  | 175 | *                 a signature over the supplied data, using the supplied | 
|  | 176 | *                 certificate and the same digest algorithm as specified by the | 
|  | 177 | *                 signer. It then compares this signature against the | 
|  | 178 | *                 signer's signature; verification succeeds if any comparison | 
|  | 179 | *                 matches. | 
|  | 180 | * | 
|  | 181 | *                 This function does not use the certificates held within the | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 182 | *                 PKCS #7 structure itself, and does not check that the | 
| Demi Marie Obenour | 6cfc469 | 2022-11-28 00:46:00 -0500 | [diff] [blame] | 183 | *                 certificate is signed by a trusted certification authority. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 184 | * | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 185 | * \param pkcs7    mbedtls_pkcs7 structure containing signature. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 186 | * \param cert     Certificate containing key to verify signature. | 
|  | 187 | * \param data     Plain data on which signature has to be verified. | 
|  | 188 | * \param datalen  Length of the data. | 
|  | 189 | * | 
|  | 190 | * \note           This function internally calculates the hash on the supplied | 
|  | 191 | *                 plain data for signature verification. | 
|  | 192 | * | 
| Dave Rodgman | 235d1d8 | 2022-12-01 18:45:02 +0000 | [diff] [blame] | 193 | * \return         0 if the signature verifies, or a negative error code on failure. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 194 | */ | 
| Gilles Peskine | 449bd83 | 2023-01-11 14:50:10 +0100 | [diff] [blame] | 195 | int mbedtls_pkcs7_signed_data_verify(mbedtls_pkcs7 *pkcs7, | 
|  | 196 | const mbedtls_x509_crt *cert, | 
|  | 197 | const unsigned char *data, | 
|  | 198 | size_t datalen); | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 199 |  | 
|  | 200 | /** | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 201 | * \brief          Verification of PKCS #7 signature against a caller-supplied | 
| Dave Rodgman | bc5f03d | 2022-12-01 12:36:57 +0000 | [diff] [blame] | 202 | *                 certificate. | 
|  | 203 | * | 
| Demi Marie Obenour | 6cfc469 | 2022-11-28 00:46:00 -0500 | [diff] [blame] | 204 | *                 For each signer in the PKCS structure, this function | 
|  | 205 | *                 validates a signature over the supplied hash, using the | 
|  | 206 | *                 supplied certificate and the same digest algorithm as | 
|  | 207 | *                 specified by the signer. Verification succeeds if any | 
|  | 208 | *                 signature is good. | 
| Dave Rodgman | bc5f03d | 2022-12-01 12:36:57 +0000 | [diff] [blame] | 209 | * | 
|  | 210 | *                 This function does not use the certificates held within the | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 211 | *                 PKCS #7 structure itself, and does not check that the | 
| Demi Marie Obenour | 6cfc469 | 2022-11-28 00:46:00 -0500 | [diff] [blame] | 212 | *                 certificate is signed by a trusted certification authority. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 213 | * | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 214 | * \param pkcs7    PKCS #7 structure containing signature. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 215 | * \param cert     Certificate containing key to verify signature. | 
|  | 216 | * \param hash     Hash of the plain data on which signature has to be verified. | 
|  | 217 | * \param hashlen  Length of the hash. | 
|  | 218 | * | 
|  | 219 | * \note           This function is different from mbedtls_pkcs7_signed_data_verify() | 
| Demi Marie Obenour | 6cfc469 | 2022-11-28 00:46:00 -0500 | [diff] [blame] | 220 | *                 in that it is directly passed the hash of the data. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 221 | * | 
| Dave Rodgman | 235d1d8 | 2022-12-01 18:45:02 +0000 | [diff] [blame] | 222 | * \return         0 if the signature verifies, or a negative error code on failure. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 223 | */ | 
| Gilles Peskine | 449bd83 | 2023-01-11 14:50:10 +0100 | [diff] [blame] | 224 | int mbedtls_pkcs7_signed_hash_verify(mbedtls_pkcs7 *pkcs7, | 
|  | 225 | const mbedtls_x509_crt *cert, | 
|  | 226 | const unsigned char *hash, size_t hashlen); | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 227 |  | 
|  | 228 | /** | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 229 | * \brief          Unallocate all PKCS #7 data and zeroize the memory. | 
|  | 230 | *                 It doesn't free \p pkcs7 itself. This should be done by the caller. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 231 | * | 
| Dave Rodgman | 957cc36 | 2023-03-10 17:14:52 +0000 | [diff] [blame] | 232 | * \param pkcs7    mbedtls_pkcs7 structure to free. | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 233 | */ | 
| Gilles Peskine | 449bd83 | 2023-01-11 14:50:10 +0100 | [diff] [blame] | 234 | void mbedtls_pkcs7_free(mbedtls_pkcs7 *pkcs7); | 
| Nayna Jain | c9deb18 | 2020-11-16 19:03:12 +0000 | [diff] [blame] | 235 |  | 
|  | 236 | #ifdef __cplusplus | 
|  | 237 | } | 
|  | 238 | #endif | 
|  | 239 |  | 
|  | 240 | #endif /* pkcs7.h */ |