File pkcs7.h
PKCS #7 generic defines and structures https://tools.ietf.org/html/rfc2315.
PKCS #7 Module Error codes
Note: For the time being, this implementation of the PKCS #7 cryptographic message syntax is a partial implementation of RFC 2315. Differences include:
The RFC specifies 6 different content types. The only type currently supported in Mbed TLS is the signed-data content type.
The only supported PKCS #7 Signed Data syntax version is version 1
The RFC specifies support for BER. This implementation is limited to DER only.
The RFC specifies that multiple digest algorithms can be specified in the Signed Data type. Only one digest algorithm is supported in Mbed TLS.
The RFC specifies the Signed Data type can contain multiple X.509 or PKCS #6 extended certificates. In Mbed TLS, this list can only contain 0 or 1 certificates and they must be in X.509 format.
The RFC specifies the Signed Data type can contain certificate-revocation lists (CRLs). This implementation has no support for CRLs so it is assumed to be an empty list.
The RFC allows for SignerInfo structure to optionally contain unauthenticatedAttributes and authenticatedAttributes. In Mbed TLS it is assumed these fields are empty.
The RFC allows for the signed Data type to contain contentInfo. This implementation assumes the type is DATA and the content is empty.
-
MBEDTLS_ERR_PKCS7_INVALID_FORMAT
The format is invalid, e.g. different type expected.
-
MBEDTLS_ERR_PKCS7_FEATURE_UNAVAILABLE
Unavailable feature, e.g. anything other than signed data.
-
MBEDTLS_ERR_PKCS7_INVALID_VERSION
The PKCS #7 version element is invalid or cannot be parsed.
-
MBEDTLS_ERR_PKCS7_INVALID_CONTENT_INFO
The PKCS #7 content info is invalid or cannot be parsed.
-
MBEDTLS_ERR_PKCS7_INVALID_ALG
The algorithm tag or value is invalid or cannot be parsed.
-
MBEDTLS_ERR_PKCS7_INVALID_CERT
The certificate tag or value is invalid or cannot be parsed.
-
MBEDTLS_ERR_PKCS7_INVALID_SIGNATURE
Error parsing the signature
-
MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO
Error parsing the signer’s info
-
MBEDTLS_ERR_PKCS7_BAD_INPUT_DATA
Input invalid.
-
MBEDTLS_ERR_PKCS7_ALLOC_FAILED
Allocation of memory failed.
-
MBEDTLS_ERR_PKCS7_VERIFY_FAIL
Verification Failed
-
MBEDTLS_ERR_PKCS7_CERT_DATE_INVALID
The PKCS #7 date issued/expired dates are invalid
PKCS #7 Supported Version
-
MBEDTLS_PKCS7_SUPPORTED_VERSION
-
enum mbedtls_pkcs7_type
PKCS #7 types
Values:
-
enumerator MBEDTLS_PKCS7_NONE
-
enumerator MBEDTLS_PKCS7_DATA
-
enumerator MBEDTLS_PKCS7_SIGNED_DATA
-
enumerator MBEDTLS_PKCS7_ENVELOPED_DATA
-
enumerator MBEDTLS_PKCS7_SIGNED_AND_ENVELOPED_DATA
-
enumerator MBEDTLS_PKCS7_DIGESTED_DATA
-
enumerator MBEDTLS_PKCS7_ENCRYPTED_DATA
-
enumerator MBEDTLS_PKCS7_NONE
-
typedef mbedtls_asn1_buf mbedtls_pkcs7_buf
Type-length-value structure that allows for ASN.1 using DER.
-
typedef mbedtls_asn1_named_data mbedtls_pkcs7_name
Container for ASN.1 named information objects. It allows for Relative Distinguished Names (e.g. cn=localhost,ou=code,etc.).
-
typedef mbedtls_asn1_sequence mbedtls_pkcs7_sequence
Container for a sequence of ASN.1 items
-
typedef struct mbedtls_pkcs7_signer_info mbedtls_pkcs7_signer_info
Structure holding PKCS #7 signer info
-
typedef struct mbedtls_pkcs7_signed_data mbedtls_pkcs7_signed_data
Structure holding the signed data section
-
typedef struct mbedtls_pkcs7 mbedtls_pkcs7
Structure holding PKCS #7 structure, only signed data for now
-
void mbedtls_pkcs7_init(mbedtls_pkcs7 *pkcs7)
Initialize mbedtls_pkcs7 structure.
- Parameters:
pkcs7 – mbedtls_pkcs7 structure.
-
int mbedtls_pkcs7_parse_der(mbedtls_pkcs7 *pkcs7, const unsigned char *buf, const size_t buflen)
Parse a single DER formatted PKCS #7 detached signature.
Note
This function makes an internal copy of the PKCS #7 buffer
buf
. In particular,buf
may be destroyed or reused after this call returns.Note
Signatures with internal data are not supported.
- Parameters:
pkcs7 – The mbedtls_pkcs7 structure to be filled by the parser.
buf – The buffer holding only the DER encoded PKCS #7 content.
buflen – The size in bytes of
buf
. The size must be exactly the length of the DER encoded PKCS #7 content.
- Returns:
The
mbedtls_pkcs7_type
ofbuf
, if successful.- Returns:
A negative error code on failure.
-
int mbedtls_pkcs7_signed_data_verify(mbedtls_pkcs7 *pkcs7, const mbedtls_x509_crt *cert, const unsigned char *data, size_t datalen)
Verification of PKCS #7 signature against a caller-supplied certificate.
For each signer in the PKCS structure, this function computes a signature over the supplied data, using the supplied certificate and the same digest algorithm as specified by the signer. It then compares this signature against the signer’s signature; verification succeeds if any comparison matches.
This function does not use the certificates held within the PKCS #7 structure itself, and does not check that the certificate is signed by a trusted certification authority.
Note
This function internally calculates the hash on the supplied plain data for signature verification.
- Parameters:
pkcs7 – mbedtls_pkcs7 structure containing signature.
cert – Certificate containing key to verify signature.
data – Plain data on which signature has to be verified.
datalen – Length of the data.
- Returns:
0 if the signature verifies, or a negative error code on failure.
-
int mbedtls_pkcs7_signed_hash_verify(mbedtls_pkcs7 *pkcs7, const mbedtls_x509_crt *cert, const unsigned char *hash, size_t hashlen)
Verification of PKCS #7 signature against a caller-supplied certificate.
For each signer in the PKCS structure, this function validates a signature over the supplied hash, using the supplied certificate and the same digest algorithm as specified by the signer. Verification succeeds if any signature is good.
This function does not use the certificates held within the PKCS #7 structure itself, and does not check that the certificate is signed by a trusted certification authority.
Note
This function is different from mbedtls_pkcs7_signed_data_verify() in that it is directly passed the hash of the data.
- Parameters:
pkcs7 – PKCS #7 structure containing signature.
cert – Certificate containing key to verify signature.
hash – Hash of the plain data on which signature has to be verified.
hashlen – Length of the hash.
- Returns:
0 if the signature verifies, or a negative error code on failure.
-
void mbedtls_pkcs7_free(mbedtls_pkcs7 *pkcs7)
Unallocate all PKCS #7 data and zeroize the memory. It doesn’t free
pkcs7
itself. This should be done by the caller.- Parameters:
pkcs7 – mbedtls_pkcs7 structure to free.
-
struct mbedtls_pkcs7_signer_info
- #include <pkcs7.h>
Structure holding PKCS #7 signer info
Public Members
-
int private_version
-
mbedtls_x509_buf private_serial
-
mbedtls_x509_name private_issuer
-
mbedtls_x509_buf private_issuer_raw
-
mbedtls_x509_buf private_alg_identifier
-
mbedtls_x509_buf private_sig_alg_identifier
-
mbedtls_x509_buf private_sig
-
struct mbedtls_pkcs7_signer_info *private_next
-
int private_version
-
struct mbedtls_pkcs7_signed_data
- #include <pkcs7.h>
Structure holding the signed data section
Public Members
-
int private_version
-
mbedtls_pkcs7_buf private_digest_alg_identifiers
-
int private_no_of_certs
-
mbedtls_x509_crt private_certs
-
int private_no_of_crls
-
mbedtls_x509_crl private_crl
-
int private_no_of_signers
-
mbedtls_pkcs7_signer_info private_signers
-
int private_version
-
struct mbedtls_pkcs7
- #include <pkcs7.h>
Structure holding PKCS #7 structure, only signed data for now