pkcs7_format.h
Go to the documentation of this file.
1 /**
2  * @file pkcs7_format.h
3  * @brief PKCS #7 message formatting
4  *
5  * @section License
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  *
9  * Copyright (C) 2010-2025 Oryx Embedded SARL. All rights reserved.
10  *
11  * This file is part of CycloneCRYPTO Open.
12  *
13  * This program is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU General Public License
15  * as published by the Free Software Foundation; either version 2
16  * of the License, or (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software Foundation,
25  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
26  *
27  * @author Oryx Embedded SARL (www.oryx-embedded.com)
28  * @version 2.5.2
29  **/
30 
31 #ifndef _PKCS7_FORMAT_H
32 #define _PKCS7_FORMAT_H
33 
34 //Dependencies
35 #include "core/crypto.h"
36 #include "pkcs7/pkcs7_common.h"
37 
38 //C++ guard
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 //PKCS #7 related functions
45  uint8_t *output, size_t *written);
46 
47 error_t pkcs7FormatSignedData(const PrngAlgo *prngAlgo, void *prngContext,
48  const Pkcs7SignedData *signedData, const void *signerPrivateKey,
49  uint8_t *output, size_t *written);
50 
51 error_t pkcs7FormatEnvelopedData(const PrngAlgo *prngAlgo, void *prngContext,
52  const X509CertInfo *recipientCertInfo, const Pkcs7EnvelopedData *envelopedData,
53  const uint8_t *plaintext, size_t plaintextLen, uint8_t *output, size_t *written);
54 
56  uint8_t *output, size_t *written);
57 
59  uint8_t *output, size_t *written);
60 
61 error_t pkcs7FormatCrls(const Pkcs7Crls *crls, uint8_t *output,
62  size_t *written);
63 
64 error_t pkcs7FormatSignerInfos(const PrngAlgo *prngAlgo, void *prngContext,
65  const Pkcs7SignerInfos *signerInfos, const void *signerPrivateKey,
66  uint8_t *output, size_t *written);
67 
68 error_t pkcs7FormatSignerInfo(const PrngAlgo *prngAlgo, void *prngContext,
69  const Pkcs7SignerInfo *signerInfo, const void *signerPrivateKey,
70  uint8_t *output, size_t *written);
71 
73  uint8_t *output, size_t *written);
74 
76  uint8_t *output, size_t *written);
77 
78 error_t pkcs7FormatDigestEncryptionAlgo(const X509SignAlgoId *digestEncryptionAlgo,
79  uint8_t *output, size_t *written);
80 
81 error_t pkcs7FormatEncryptedDigest(const PrngAlgo *prngAlgo, void *prngContext,
82  const uint8_t *digest, const Pkcs7SignerInfo *signerInfo,
83  const void *signerPrivateKey, uint8_t *output, size_t *written);
84 
86  uint8_t *output, size_t *written);
87 
88 error_t pkcs7FormatAttribute(const Pkcs7Attribute *attribute, uint8_t *output,
89  size_t *written);
90 
91 error_t pkcs7AddAttribute(const Pkcs7Attribute *attribute, uint8_t *attributes,
92  size_t *length);
93 
94 error_t pkcs7FormatRecipientInfos(const PrngAlgo *prngAlgo, void *prngContext,
95  const Pkcs7RecipientInfos *recipientInfos, const X509CertInfo *recipientCertInfo,
96  const uint8_t *key, size_t keyLen, uint8_t *output, size_t *written);
97 
98 error_t pkcs7FormatRecipientInfo(const PrngAlgo *prngAlgo, void *prngContext,
99  const Pkcs7RecipientInfo *recipientInfo, const X509CertInfo *recipientCertInfo,
100  const uint8_t *key, size_t keyLen, uint8_t *output, size_t *written);
101 
102 error_t pkcs7FormatEncryptedKey(const PrngAlgo *prngAlgo, void *prngContext,
103  const X509CertInfo *recipientCertInfo, const uint8_t *key, size_t keyLen,
104  uint8_t *output, size_t *written);
105 
107  const uint8_t *key, size_t keyLen, const uint8_t *plaintext, size_t plaintextLen,
108  uint8_t *output, size_t *written);
109 
111  uint8_t *output, size_t *written);
112 
113 error_t pkcs7FormatAlgoId(const X509AlgoId *algoId, uint8_t *output,
114  size_t *written);
115 
116 //C++ guard
117 #ifdef __cplusplus
118 }
119 #endif
120 
121 #endif
error_t pkcs7FormatEncryptedKey(const PrngAlgo *prngAlgo, void *prngContext, const X509CertInfo *recipientCertInfo, const uint8_t *key, size_t keyLen, uint8_t *output, size_t *written)
Format encryptedKey structure.
#define PrngAlgo
Definition: crypto.h:980
error_t pkcs7FormatSignerInfo(const PrngAlgo *prngAlgo, void *prngContext, const Pkcs7SignerInfo *signerInfo, const void *signerPrivateKey, uint8_t *output, size_t *written)
Format SignerInfo structure.
Definition: pkcs7_format.c:761
error_t pkcs7FormatSignedData(const PrngAlgo *prngAlgo, void *prngContext, const Pkcs7SignedData *signedData, const void *signerPrivateKey, uint8_t *output, size_t *written)
Format signed-data content.
Definition: pkcs7_format.c:205
uint8_t attributes[]
Definition: radius.h:88
Content information.
Definition: pkcs7_common.h:317
error_t pkcs7FormatSignerInfos(const PrngAlgo *prngAlgo, void *prngContext, const Pkcs7SignerInfos *signerInfos, const void *signerPrivateKey, uint8_t *output, size_t *written)
Format SignerInfos structure.
Definition: pkcs7_format.c:697
error_t pkcs7FormatDigestEncryptionAlgo(const X509SignAlgoId *digestEncryptionAlgo, uint8_t *output, size_t *written)
Format digestEncryptionAlgorithm structure.
Content encryption algorithm.
Definition: pkcs7_common.h:328
error_t pkcs7FormatAuthenticatedAttributes(const Pkcs7AuthenticatedAttributes *authenticatedAttributes, uint8_t *output, size_t *written)
Format authenticatedAttributes structure.
Definition: pkcs7_format.c:962
error_t pkcs7FormatAttribute(const Pkcs7Attribute *attribute, uint8_t *output, size_t *written)
Format attribute.
PKCS #7 common definitions.
X.509 certificate.
Definition: x509_common.h:1119
error_t
Error codes.
Definition: error.h:43
Encrypted content information.
Definition: pkcs7_common.h:339
uint8_t algoId[]
Definition: ike.h:1537
Signer information.
Definition: pkcs7_common.h:264
General definitions for cryptographic algorithms.
error_t pkcs7FormatIssuerAndSerialNumber(const Pkcs7IssuerAndSerialNumber *issuerAndSerialNumber, uint8_t *output, size_t *written)
Format IssuerAndSerialNumber structure.
Definition: pkcs7_format.c:899
uint8_t length
Definition: tcp.h:375
Recipient information.
Definition: pkcs7_common.h:292
Collection of digest algorithm identifiers.
Definition: pkcs7_common.h:179
error_t pkcs7FormatUnauthenticatedAttributes(const Pkcs7UnauthenticatedAttributes *unauthenticatedAttributes, uint8_t *output, size_t *written)
Format unauthenticatedAttributes structure.
Signed data content.
Definition: pkcs7_common.h:351
Collection of signer informations.
Definition: pkcs7_common.h:280
Issuer and serial number.
Definition: pkcs7_common.h:214
error_t pkcs7FormatRecipientInfo(const PrngAlgo *prngAlgo, void *prngContext, const Pkcs7RecipientInfo *recipientInfo, const X509CertInfo *recipientCertInfo, const uint8_t *key, size_t keyLen, uint8_t *output, size_t *written)
Format RecipientInfo structure.
error_t pkcs7FormatCertificates(const Pkcs7Certificates *certificates, uint8_t *output, size_t *written)
Format certificates.
Definition: pkcs7_format.c:525
error_t pkcs7FormatContentInfo(const Pkcs7ContentInfo *contentInfo, uint8_t *output, size_t *written)
Format contentInfo structure.
Definition: pkcs7_format.c:57
error_t pkcs7FormatEnvelopedData(const PrngAlgo *prngAlgo, void *prngContext, const X509CertInfo *recipientCertInfo, const Pkcs7EnvelopedData *envelopedData, const uint8_t *plaintext, size_t plaintextLen, uint8_t *output, size_t *written)
Format enveloped-data content.
Definition: pkcs7_format.c:349
Unauthenticated attributes.
Definition: pkcs7_common.h:252
error_t pkcs7FormatEncryptedContentInfo(const Pkcs7EncryptedContentInfo *encryptedContentInfo, const uint8_t *key, size_t keyLen, const uint8_t *plaintext, size_t plaintextLen, uint8_t *output, size_t *written)
Format encryptedContentInfo structure.
error_t pkcs7FormatDigestAlgos(const Pkcs7DigestAlgos *digestAlgos, uint8_t *output, size_t *written)
Format digestAlgos structure.
Definition: pkcs7_format.c:466
Collection of CRLs.
Definition: pkcs7_common.h:202
error_t pkcs7FormatEncryptedDigest(const PrngAlgo *prngAlgo, void *prngContext, const uint8_t *digest, const Pkcs7SignerInfo *signerInfo, const void *signerPrivateKey, uint8_t *output, size_t *written)
Format encryptedDigest structure.
Collection of certificates.
Definition: pkcs7_common.h:190
error_t pkcs7FormatCrls(const Pkcs7Crls *crls, uint8_t *output, size_t *written)
Format CRLs.
Definition: pkcs7_format.c:610
error_t pkcs7AddAttribute(const Pkcs7Attribute *attribute, uint8_t *attributes, size_t *length)
Add attribute.
Authenticated attributes.
Definition: pkcs7_common.h:237
Collection of recipient informations.
Definition: pkcs7_common.h:305
Enveloped data content.
Definition: pkcs7_common.h:366
error_t pkcs7FormatContentEncrAlgo(const Pkcs7ContentEncrAlgo *contentEncrAlgo, uint8_t *output, size_t *written)
Format contentEncryptionAlgorithm structure.
Signature algorithm identifier.
Definition: x509_common.h:1088
Algorithm identifier.
Definition: x509_common.h:774
error_t pkcs7FormatAlgoId(const X509AlgoId *algoId, uint8_t *output, size_t *written)
Format AlgorithmIdentifier structure.
error_t pkcs7FormatRecipientInfos(const PrngAlgo *prngAlgo, void *prngContext, const Pkcs7RecipientInfos *recipientInfos, const X509CertInfo *recipientCertInfo, const uint8_t *key, size_t keyLen, uint8_t *output, size_t *written)
Format recipientInfos structure.
Attribute.
Definition: pkcs7_common.h:225