Add support for signed receipt request printout and generation.
[openssl.git] / crypto / cms / cms.h
index cfe49ec9f47b46f9b7ca8cb159ec625476b446e4..4cc5d93bcfd3ce55b7a1ff5425b0b0d7b256100a 100644 (file)
@@ -70,14 +70,25 @@ typedef struct CMS_ContentInfo_st CMS_ContentInfo;
 typedef struct CMS_SignerInfo_st CMS_SignerInfo;
 typedef struct CMS_CertificateChoices CMS_CertificateChoices;
 typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice;
+typedef struct CMS_RecipientInfo_st CMS_RecipientInfo;
+typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest;
+typedef struct CMS_Receipt_st CMS_Receipt;
 
 DECLARE_STACK_OF(CMS_SignerInfo)
+DECLARE_STACK_OF(GENERAL_NAMES)
 DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo)
+DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest)
 DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo)
 
 #define CMS_SIGNERINFO_ISSUER_SERIAL   0
 #define CMS_SIGNERINFO_KEYIDENTIFIER   1
 
+#define CMS_RECIPINFO_TRANS            0
+#define CMS_RECIPINFO_AGREE            1
+#define CMS_RECIPINFO_KEK              2
+#define CMS_RECIPINFO_PASS             3
+#define CMS_RECIPINFO_OTHER            4
+
 /* S/MIME related flags */
 
 #define CMS_TEXT                       0x1
@@ -102,7 +113,6 @@ DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo)
 #define CMS_USE_KEYID                  0x10000
 
 const ASN1_OBJECT *CMS_get0_type(CMS_ContentInfo *cms);
-CMS_ContentInfo *CMS_Data_Create(void);
 
 BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont);
 int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio);
@@ -142,6 +152,10 @@ int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms,
                                const unsigned char *key, size_t keylen,
                                BIO *dcont, BIO *out, unsigned int flags);
 
+CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher,
+                                       const unsigned char *key, size_t keylen,
+                                       unsigned int flags);
+
 int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph,
                                const unsigned char *key, size_t keylen);
 
@@ -153,9 +167,51 @@ STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms);
 CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in,
                                const EVP_CIPHER *cipher, unsigned int flags);
 
-int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, BIO *data,
+int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert,
+                               BIO *data, BIO *dcont,
                                unsigned int flags);
+       
+int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert);
+int CMS_decrypt_set1_key(CMS_ContentInfo *cms, 
+                               unsigned char *key, size_t keylen,
+                               unsigned char *id, size_t idlen);
+
+STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms);
+int CMS_RecipientInfo_type(CMS_RecipientInfo *ri);
+CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher);
+CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms,
+                                       X509 *recip, unsigned int flags);
+int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey);
+int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert);
+int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri,
+                                       EVP_PKEY **pk, X509 **recip,
+                                       X509_ALGOR **palg);
+int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri,
+                                       ASN1_OCTET_STRING **keyid,
+                                       X509_NAME **issuer, ASN1_INTEGER **sno);
+
+CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid,
+                                       unsigned char *key, size_t keylen,
+                                       unsigned char *id, size_t idlen,
+                                       ASN1_GENERALIZEDTIME *date,
+                                       ASN1_OBJECT *otherTypeId,
+                                       ASN1_TYPE *otherType);
+
+int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri,
+                                       X509_ALGOR **palg,
+                                       ASN1_OCTET_STRING **pid,
+                                       ASN1_GENERALIZEDTIME **pdate,
+                                       ASN1_OBJECT **potherid,
+                                       ASN1_TYPE **pothertype);
 
+int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, 
+                               unsigned char *key, size_t keylen);
+
+int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, 
+                                       const unsigned char *id, size_t idlen);
+
+int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);
+       
 int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out,
                                                        unsigned int flags);
 CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags);
@@ -236,6 +292,22 @@ int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si,
 void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid,
                                        int lastpos, int type);
 
+#ifdef HEADER_X509V3_H
+
+int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr);
+CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen,
+                               int allorfirst,
+                               STACK_OF(GENERAL_NAMES) *receiptList,
+                               STACK_OF(GENERAL_NAMES) *receiptsTo);
+int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr);
+void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr,
+                                       ASN1_STRING **pcid,
+                                       int *pallorfirst,
+                                       STACK_OF(GENERAL_NAMES) **plist,
+                                       STACK_OF(GENERAL_NAMES) **prto);
+
+#endif
+
 /* BEGIN ERROR CODES */
 /* The following lines are auto generated by the script mkerr.pl. Any changes
  * made after this point may be overwritten when the script is next run.
@@ -245,103 +317,131 @@ void ERR_load_CMS_strings(void);
 /* Error codes for the CMS functions. */
 
 /* Function codes. */
-#define CMS_F_CMS_ADD1_RECIPIENT_CERT                   99
-#define CMS_F_CMS_ADD1_SIGNER                           100
-#define CMS_F_CMS_ADD1_SIGNINGTIME                      101
-#define CMS_F_CMS_BIO_TO_ENCRYPTEDCONTENT               137
-#define CMS_F_CMS_BIO_TO_ENCRYPTEDCONTENT_BIO           142
-#define CMS_F_CMS_COMPRESS                              102
-#define CMS_F_CMS_COMPRESSEDDATA_CREATE                         103
-#define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO               104
-#define CMS_F_CMS_COPY_CONTENT                          105
-#define CMS_F_CMS_COPY_MESSAGEDIGEST                    106
-#define CMS_F_CMS_DATA                                  107
-#define CMS_F_CMS_DATAFINAL                             108
-#define CMS_F_CMS_DATAINIT                              109
-#define CMS_F_CMS_DECRYPTEDCONTENT_DECRYPT_BIO          145
-#define CMS_F_CMS_DECRYPTEDCONTENT_ENCRYPT_BIO          143
-#define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX              110
-#define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO              111
-#define CMS_F_CMS_DIGESTEDDATA_DO_FINAL                         112
-#define CMS_F_CMS_DIGEST_VERIFY                                 113
-#define CMS_F_CMS_ENCRYPTEDCONTENT_DECRYPT_BIO          146
-#define CMS_F_CMS_ENCRYPTEDCONTENT_ENCRYPT_BIO          144
-#define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO             148
-#define CMS_F_CMS_ENCRYPTEDCONTENT_TO_BIO               138
-#define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT                         140
-#define CMS_F_CMS_ENCRYPTEDDATA_INIT_BIO                147
-#define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY                141
-#define CMS_F_CMS_ENCRYPTED_DATA_DECRYPT                139
-#define CMS_F_CMS_ENVELOPED_DATA_INIT                   114
-#define CMS_F_CMS_FINAL                                         115
-#define CMS_F_CMS_GET0_CERTIFICATE_CHOICES              116
-#define CMS_F_CMS_GET0_CONTENT                          117
-#define CMS_F_CMS_GET0_ECONTENT_TYPE                    118
-#define CMS_F_CMS_GET0_ENVELOPED                        119
-#define CMS_F_CMS_GET0_REVOCATION_CHOICES               120
-#define CMS_F_CMS_GET0_SIGNED                           121
-#define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP           122
-#define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS          123
-#define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID     124
-#define CMS_F_CMS_SET1_SIGNERIDENTIFIER                         125
-#define CMS_F_CMS_SET_DETACHED                          126
-#define CMS_F_CMS_SIGN                                  127
-#define CMS_F_CMS_SIGNED_DATA_INIT                      128
-#define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN               129
-#define CMS_F_CMS_SIGNERINFO_SIGN                       130
-#define CMS_F_CMS_SIGNERINFO_VERIFY                     131
-#define CMS_F_CMS_SIGNERINFO_VERIFY_CERT                132
-#define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT             133
-#define CMS_F_CMS_STREAM                                134
-#define CMS_F_CMS_UNCOMPRESS                            135
-#define CMS_F_CMS_VERIFY                                136
+#define CMS_F_CHECK_CONTENT                             99
+#define CMS_F_CMS_ADD0_RECIPIENT_KEY                    100
+#define CMS_F_CMS_ADD1_RECEIPTREQUEST                   158
+#define CMS_F_CMS_ADD1_RECIPIENT_CERT                   101
+#define CMS_F_CMS_ADD1_SIGNER                           102
+#define CMS_F_CMS_ADD1_SIGNINGTIME                      103
+#define CMS_F_CMS_COMPRESS                              104
+#define CMS_F_CMS_COMPRESSEDDATA_CREATE                         105
+#define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO               106
+#define CMS_F_CMS_COPY_CONTENT                          107
+#define CMS_F_CMS_COPY_MESSAGEDIGEST                    108
+#define CMS_F_CMS_DATA                                  109
+#define CMS_F_CMS_DATAFINAL                             110
+#define CMS_F_CMS_DATAINIT                              111
+#define CMS_F_CMS_DECRYPT                               112
+#define CMS_F_CMS_DECRYPT_SET1_KEY                      113
+#define CMS_F_CMS_DECRYPT_SET1_PKEY                     114
+#define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX              115
+#define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO              116
+#define CMS_F_CMS_DIGESTEDDATA_DO_FINAL                         117
+#define CMS_F_CMS_DIGEST_VERIFY                                 118
+#define CMS_F_CMS_ENCRYPT                               119
+#define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO             120
+#define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT                         121
+#define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT                         122
+#define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY                123
+#define CMS_F_CMS_ENVELOPEDDATA_CREATE                  124
+#define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO                125
+#define CMS_F_CMS_ENVELOPED_DATA_INIT                   126
+#define CMS_F_CMS_FINAL                                         127
+#define CMS_F_CMS_GET0_CERTIFICATE_CHOICES              128
+#define CMS_F_CMS_GET0_CONTENT                          129
+#define CMS_F_CMS_GET0_ECONTENT_TYPE                    130
+#define CMS_F_CMS_GET0_ENVELOPED                        131
+#define CMS_F_CMS_GET0_REVOCATION_CHOICES               132
+#define CMS_F_CMS_GET0_SIGNED                           133
+#define CMS_F_CMS_RECEIPTREQUEST_CREATE0                159
+#define CMS_F_CMS_RECIPIENTINFO_DECRYPT                         134
+#define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT           135
+#define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT           136
+#define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID           137
+#define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP            138
+#define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP           139
+#define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT            140
+#define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT            141
+#define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS          142
+#define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID     143
+#define CMS_F_CMS_RECIPIENTINFO_SET0_KEY                144
+#define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY               145
+#define CMS_F_CMS_SET1_SIGNERIDENTIFIER                         146
+#define CMS_F_CMS_SET_DETACHED                          147
+#define CMS_F_CMS_SIGN                                  148
+#define CMS_F_CMS_SIGNED_DATA_INIT                      149
+#define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN               150
+#define CMS_F_CMS_SIGNERINFO_SIGN                       151
+#define CMS_F_CMS_SIGNERINFO_VERIFY                     152
+#define CMS_F_CMS_SIGNERINFO_VERIFY_CERT                153
+#define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT             154
+#define CMS_F_CMS_STREAM                                155
+#define CMS_F_CMS_UNCOMPRESS                            156
+#define CMS_F_CMS_VERIFY                                157
 
 /* Reason codes. */
 #define CMS_R_ADD_SIGNER_ERROR                          99
+#define CMS_R_CERTIFICATE_HAS_NO_KEYID                  160
 #define CMS_R_CERTIFICATE_VERIFY_ERROR                  100
-#define CMS_R_CIPHER_INITIALISATION_ERROR               138
-#define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR     139
-#define CMS_R_CMS_DATAFINAL_ERROR                       101
-#define CMS_R_CONTENT_NOT_FOUND                                 102
-#define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA          103
-#define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA           104
-#define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA              105
-#define CMS_R_CONTENT_VERIFY_ERROR                      106
-#define CMS_R_CTRL_ERROR                                107
-#define CMS_R_CTRL_FAILURE                              108
-#define CMS_R_ERROR_GETTING_PUBLIC_KEY                  109
-#define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE     110
-#define CMS_R_INVALID_KEY_LENGTH                        140
-#define CMS_R_MD_BIO_INIT_ERROR                                 111
-#define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH      112
-#define CMS_R_MESSAGEDIGEST_WRONG_LENGTH                113
-#define CMS_R_NOT_ENCRYPTED_DATA                        143
-#define CMS_R_NOT_KEY_TRANSPORT                                 114
-#define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE           115
-#define CMS_R_NO_CONTENT                                116
-#define CMS_R_NO_DEFAULT_DIGEST                                 117
-#define CMS_R_NO_DIGEST_SET                             118
-#define CMS_R_NO_MATCHING_DIGEST                        119
-#define CMS_R_NO_PRIVATE_KEY                            120
-#define CMS_R_NO_PUBLIC_KEY                             121
-#define CMS_R_NO_SIGNERS                                122
-#define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE    123
-#define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND              124
-#define CMS_R_SIGNFINAL_ERROR                           125
-#define CMS_R_SMIME_TEXT_ERROR                          126
-#define CMS_R_STORE_INIT_ERROR                          127
-#define CMS_R_TYPE_NOT_COMPRESSED_DATA                  128
-#define CMS_R_TYPE_NOT_DATA                             129
-#define CMS_R_TYPE_NOT_DIGESTED_DATA                    130
-#define CMS_R_TYPE_NOT_ENCRYPTED_DATA                   142
-#define CMS_R_UNABLE_TO_FINALIZE_CONTEXT                131
-#define CMS_R_UNKNOWN_CIPHER                            141
-#define CMS_R_UNKNOWN_DIGEST_ALGORIHM                   132
-#define CMS_R_UNKNOWN_ID                                133
-#define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM                 134
-#define CMS_R_UNSUPPORTED_CONTENT_TYPE                  135
-#define CMS_R_UNSUPPORTED_TYPE                          136
-#define CMS_R_VERIFICATION_FAILURE                      137
+#define CMS_R_CIPHER_INITIALISATION_ERROR               101
+#define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR     102
+#define CMS_R_CMS_DATAFINAL_ERROR                       103
+#define CMS_R_CMS_LIB                                   104
+#define CMS_R_CONTENT_NOT_FOUND                                 105
+#define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA          106
+#define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA           107
+#define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA              108
+#define CMS_R_CONTENT_VERIFY_ERROR                      109
+#define CMS_R_CTRL_ERROR                                110
+#define CMS_R_CTRL_FAILURE                              111
+#define CMS_R_DECRYPT_ERROR                             112
+#define CMS_R_ERROR_GETTING_PUBLIC_KEY                  113
+#define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE     114
+#define CMS_R_ERROR_SETTING_KEY                                 115
+#define CMS_R_ERROR_SETTING_RECIPIENTINFO               116
+#define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH              117
+#define CMS_R_INVALID_KEY_LENGTH                        118
+#define CMS_R_MD_BIO_INIT_ERROR                                 119
+#define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH      120
+#define CMS_R_MESSAGEDIGEST_WRONG_LENGTH                121
+#define CMS_R_NOT_ENCRYPTED_DATA                        122
+#define CMS_R_NOT_KEK                                   123
+#define CMS_R_NOT_KEY_TRANSPORT                                 124
+#define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE           125
+#define CMS_R_NO_CIPHER                                         126
+#define CMS_R_NO_CONTENT                                127
+#define CMS_R_NO_DEFAULT_DIGEST                                 128
+#define CMS_R_NO_DIGEST_SET                             129
+#define CMS_R_NO_KEY                                    130
+#define CMS_R_NO_MATCHING_DIGEST                        131
+#define CMS_R_NO_MATCHING_RECIPIENT                     132
+#define CMS_R_NO_PRIVATE_KEY                            133
+#define CMS_R_NO_PUBLIC_KEY                             134
+#define CMS_R_NO_SIGNERS                                135
+#define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE    136
+#define CMS_R_RECIPIENT_ERROR                           137
+#define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND              138
+#define CMS_R_SIGNFINAL_ERROR                           139
+#define CMS_R_SMIME_TEXT_ERROR                          140
+#define CMS_R_STORE_INIT_ERROR                          141
+#define CMS_R_TYPE_NOT_COMPRESSED_DATA                  142
+#define CMS_R_TYPE_NOT_DATA                             143
+#define CMS_R_TYPE_NOT_DIGESTED_DATA                    144
+#define CMS_R_TYPE_NOT_ENCRYPTED_DATA                   145
+#define CMS_R_TYPE_NOT_ENVELOPED_DATA                   146
+#define CMS_R_UNABLE_TO_FINALIZE_CONTEXT                147
+#define CMS_R_UNKNOWN_CIPHER                            148
+#define CMS_R_UNKNOWN_DIGEST_ALGORIHM                   149
+#define CMS_R_UNKNOWN_ID                                150
+#define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM                 151
+#define CMS_R_UNSUPPORTED_CONTENT_TYPE                  152
+#define CMS_R_UNSUPPORTED_KEK_ALGORITHM                         153
+#define CMS_R_UNSUPPORTED_RECIPIENT_TYPE                154
+#define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE             155
+#define CMS_R_UNSUPPORTED_TYPE                          156
+#define CMS_R_UNWRAP_ERROR                              157
+#define CMS_R_VERIFICATION_FAILURE                      158
+#define CMS_R_WRAP_ERROR                                159
 
 #ifdef  __cplusplus
 }