Merge tag 'for-5.14-rc3-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave...
[linux-2.6-microblaze.git] / crypto / asymmetric_keys / pkcs7_parser.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /* PKCS#7 crypto data parser internal definitions
3  *
4  * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved.
5  * Written by David Howells (dhowells@redhat.com)
6  */
7
8 #include <linux/oid_registry.h>
9 #include <crypto/pkcs7.h>
10 #include "x509_parser.h"
11
12 #define kenter(FMT, ...) \
13         pr_devel("==> %s("FMT")\n", __func__, ##__VA_ARGS__)
14 #define kleave(FMT, ...) \
15         pr_devel("<== %s()"FMT"\n", __func__, ##__VA_ARGS__)
16
17 struct pkcs7_signed_info {
18         struct pkcs7_signed_info *next;
19         struct x509_certificate *signer; /* Signing certificate (in msg->certs) */
20         unsigned        index;
21         bool            unsupported_crypto;     /* T if not usable due to missing crypto */
22         bool            blacklisted;
23
24         /* Message digest - the digest of the Content Data (or NULL) */
25         const void      *msgdigest;
26         unsigned        msgdigest_len;
27
28         /* Authenticated Attribute data (or NULL) */
29         unsigned        authattrs_len;
30         const void      *authattrs;
31         unsigned long   aa_set;
32 #define sinfo_has_content_type          0
33 #define sinfo_has_signing_time          1
34 #define sinfo_has_message_digest        2
35 #define sinfo_has_smime_caps            3
36 #define sinfo_has_ms_opus_info          4
37 #define sinfo_has_ms_statement_type     5
38         time64_t        signing_time;
39
40         /* Message signature.
41          *
42          * This contains the generated digest of _either_ the Content Data or
43          * the Authenticated Attributes [RFC2315 9.3].  If the latter, one of
44          * the attributes contains the digest of the Content Data within it.
45          *
46          * This also contains the issuing cert serial number and issuer's name
47          * [PKCS#7 or CMS ver 1] or issuing cert's SKID [CMS ver 3].
48          */
49         struct public_key_signature *sig;
50 };
51
52 struct pkcs7_message {
53         struct x509_certificate *certs; /* Certificate list */
54         struct x509_certificate *crl;   /* Revocation list */
55         struct pkcs7_signed_info *signed_infos;
56         u8              version;        /* Version of cert (1 -> PKCS#7 or CMS; 3 -> CMS) */
57         bool            have_authattrs; /* T if have authattrs */
58
59         /* Content Data (or NULL) */
60         enum OID        data_type;      /* Type of Data */
61         size_t          data_len;       /* Length of Data */
62         size_t          data_hdrlen;    /* Length of Data ASN.1 header */
63         const void      *data;          /* Content Data (or 0) */
64 };