mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-02 12:14:38 +02:00
Added method to encode PKCS7 data type messages.
This commit is contained in:
@@ -55,7 +55,7 @@ CYASSL_LOCAL int SetContentType(int pkcs7TypeOID, byte* output)
|
|||||||
byte ID_Length[MAX_LENGTH_SZ];
|
byte ID_Length[MAX_LENGTH_SZ];
|
||||||
|
|
||||||
switch (pkcs7TypeOID) {
|
switch (pkcs7TypeOID) {
|
||||||
case PKCS7:
|
case PKCS7_MSG:
|
||||||
typeSz = sizeof(pkcs7);
|
typeSz = sizeof(pkcs7);
|
||||||
typeName = pkcs7;
|
typeName = pkcs7;
|
||||||
break;
|
break;
|
||||||
@@ -122,6 +122,65 @@ int Pkcs7_encrypt(const byte* certs, word32 certSz, byte* data, word32 dataSz,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int PKCS7_InitWithCert(PKCS7* pkcs7, byte* cert, word32 certSz)
|
||||||
|
{
|
||||||
|
XMEMSET(pkcs7, 0, sizeof(PKCS7));
|
||||||
|
pkcs7->singleCert = cert;
|
||||||
|
pkcs7->singleCertSz = certSz;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int PKCS7_EncodeData(PKCS7* pkcs7, byte* output, word32 outputSz)
|
||||||
|
{
|
||||||
|
static const byte oid[] =
|
||||||
|
{ ASN_OBJECT_ID, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
|
||||||
|
0x07, 0x01 };
|
||||||
|
byte seq[MAX_SEQ_SZ];
|
||||||
|
byte octetStr[MAX_OCTET_STR_SZ];
|
||||||
|
word32 seqSz;
|
||||||
|
word32 octetStrSz;
|
||||||
|
int idx = 0;
|
||||||
|
|
||||||
|
octetStrSz = SetOctetString(pkcs7->contentSz, octetStr);
|
||||||
|
seqSz = SetSequence(pkcs7->contentSz + octetStrSz + sizeof(oid), seq);
|
||||||
|
|
||||||
|
if (outputSz < pkcs7->contentSz + octetStrSz + sizeof(oid) + seqSz)
|
||||||
|
return BUFFER_E;
|
||||||
|
|
||||||
|
XMEMCPY(output, seq, seqSz);
|
||||||
|
idx += seqSz;
|
||||||
|
XMEMCPY(output + idx, oid, sizeof(oid));
|
||||||
|
idx += sizeof(oid);
|
||||||
|
XMEMCPY(output + idx, octetStr, octetStrSz);
|
||||||
|
idx += octetStrSz;
|
||||||
|
XMEMCPY(output + idx, pkcs7->content, pkcs7->contentSz);
|
||||||
|
idx += pkcs7->contentSz;
|
||||||
|
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int PKCS7_EncodeSignedData(PKCS7* pkcs7, byte* output, word32 outputSz)
|
||||||
|
{
|
||||||
|
(void)pkcs7;
|
||||||
|
(void)output;
|
||||||
|
(void)outputSz;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int PKCS7_EncodeEnvelopeData(PKCS7* pkcs7, byte* output, word32 outputSz)
|
||||||
|
{
|
||||||
|
(void)pkcs7;
|
||||||
|
(void)output;
|
||||||
|
(void)outputSz;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#else /* HAVE_PKCS7 */
|
#else /* HAVE_PKCS7 */
|
||||||
|
|
||||||
|
|
||||||
|
@@ -36,7 +36,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum PKCS7_TYPES {
|
enum PKCS7_TYPES {
|
||||||
PKCS7 = 650, /* 1.2.840.113549.1.7 */
|
PKCS7_MSG = 650, /* 1.2.840.113549.1.7 */
|
||||||
DATA = 651, /* 1.2.840.113549.1.7.1 */
|
DATA = 651, /* 1.2.840.113549.1.7.1 */
|
||||||
SIGNED_DATA = 652, /* 1.2.840.113549.1.7.2 */
|
SIGNED_DATA = 652, /* 1.2.840.113549.1.7.2 */
|
||||||
ENVELOPED_DATA = 653, /* 1.2.840.113549.1.7.3 */
|
ENVELOPED_DATA = 653, /* 1.2.840.113549.1.7.3 */
|
||||||
@@ -53,6 +53,33 @@ enum Pkcs7_Misc {
|
|||||||
MAX_SEQ_SZ + MAX_ALGO_SZ + 1 + MAX_ENCRYPTED_KEY_SZ
|
MAX_SEQ_SZ + MAX_ALGO_SZ + 1 + MAX_ENCRYPTED_KEY_SZ
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct PKCS7Attrib {
|
||||||
|
byte* oid;
|
||||||
|
word32 oidSz;
|
||||||
|
byte* value;
|
||||||
|
word32 valueSz;
|
||||||
|
} PKCS7Attrib;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct PKCS7 {
|
||||||
|
byte* content;
|
||||||
|
word32 contentSz;
|
||||||
|
int contentOID;
|
||||||
|
|
||||||
|
int hashOID;
|
||||||
|
int encryptOID;
|
||||||
|
|
||||||
|
byte* singleCert;
|
||||||
|
word32 singleCertSz;
|
||||||
|
byte* issuer;
|
||||||
|
word32 issuerSz;
|
||||||
|
|
||||||
|
PKCS7Attrib** signedAttribs;
|
||||||
|
word32 signedAttribsSz; /* Number of attribs in list */
|
||||||
|
} PKCS7;
|
||||||
|
|
||||||
|
|
||||||
CYASSL_API int Pkcs7_encrypt(const byte* certs, word32 certSz, byte* data,
|
CYASSL_API int Pkcs7_encrypt(const byte* certs, word32 certSz, byte* data,
|
||||||
word32 dataSz, int cipher, byte* out,
|
word32 dataSz, int cipher, byte* out,
|
||||||
word32* outSz, word32 flags);
|
word32* outSz, word32 flags);
|
||||||
@@ -64,6 +91,13 @@ CYASSL_LOCAL int CreateRecipientInfo(const byte* cert, word32 certSz,
|
|||||||
byte* contentKeyEnc,
|
byte* contentKeyEnc,
|
||||||
int* keyEncSz, byte* out, word32 outSz);
|
int* keyEncSz, byte* out, word32 outSz);
|
||||||
|
|
||||||
|
CYASSL_API int PKCS7_InitWithCert(PKCS7* pkcs7, byte* cert, word32 certSz);
|
||||||
|
CYASSL_API int PKCS7_EncodeData(PKCS7* pkcs7, byte* output, word32 outputSz);
|
||||||
|
CYASSL_API int PKCS7_EncodeSignedData(PKCS7* pkcs7,
|
||||||
|
byte* output, word32 outputSz);
|
||||||
|
CYASSL_API int PKCS7_EncodeEnvelopeData(PKCS7* pkcs7,
|
||||||
|
byte* output, word32 outputSz);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user