diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2008-03-26 17:40:22 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2008-03-26 17:40:22 +0000 |
commit | f5e2354c9d46c3abbc0afcab704ea4fb051d3c76 (patch) | |
tree | 44ee1aa6b0eab6a206745da47c962d33d1dd65c3 /crypto/cms | |
parent | f4cc56f494b3f42642ea3b322e57737da80f889a (diff) |
Add support for signed receipt request printout and generation.
Diffstat (limited to 'crypto/cms')
-rw-r--r-- | crypto/cms/cms.h | 12 | ||||
-rw-r--r-- | crypto/cms/cms_env.c | 3 | ||||
-rw-r--r-- | crypto/cms/cms_err.c | 3 | ||||
-rw-r--r-- | crypto/cms/cms_ess.c | 49 |
4 files changed, 41 insertions, 26 deletions
diff --git a/crypto/cms/cms.h b/crypto/cms/cms.h index 15205bba47..4cc5d93bcf 100644 --- a/crypto/cms/cms.h +++ b/crypto/cms/cms.h @@ -197,6 +197,13 @@ CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, 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); @@ -288,11 +295,11 @@ void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, #ifdef HEADER_X509V3_H int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); -int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, - unsigned char *id, int idlen, +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, @@ -346,6 +353,7 @@ void ERR_load_CMS_strings(void); #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 diff --git a/crypto/cms/cms_env.c b/crypto/cms/cms_env.c index 0a0b772ded..b3237d4b94 100644 --- a/crypto/cms/cms_env.c +++ b/crypto/cms/cms_env.c @@ -581,7 +581,6 @@ CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, } -#if 0 int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, X509_ALGOR **palg, ASN1_OCTET_STRING **pid, @@ -618,8 +617,6 @@ int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, } return 1; } -#endif - int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, unsigned char *key, size_t keylen) diff --git a/crypto/cms/cms_err.c b/crypto/cms/cms_err.c index 7b1294cac0..93e15e33fc 100644 --- a/crypto/cms/cms_err.c +++ b/crypto/cms/cms_err.c @@ -72,7 +72,7 @@ static ERR_STRING_DATA CMS_str_functs[]= { {ERR_FUNC(CMS_F_CHECK_CONTENT), "CHECK_CONTENT"}, {ERR_FUNC(CMS_F_CMS_ADD0_RECIPIENT_KEY), "CMS_add0_recipient_key"}, -{ERR_FUNC(CMS_F_CMS_ADD1_RECEIPTREQUEST), "CMS_ADD1_RECEIPTREQUEST"}, +{ERR_FUNC(CMS_F_CMS_ADD1_RECEIPTREQUEST), "CMS_add1_ReceiptRequest"}, {ERR_FUNC(CMS_F_CMS_ADD1_RECIPIENT_CERT), "CMS_add1_recipient_cert"}, {ERR_FUNC(CMS_F_CMS_ADD1_SIGNER), "CMS_add1_signer"}, {ERR_FUNC(CMS_F_CMS_ADD1_SIGNINGTIME), "CMS_ADD1_SIGNINGTIME"}, @@ -106,6 +106,7 @@ static ERR_STRING_DATA CMS_str_functs[]= {ERR_FUNC(CMS_F_CMS_GET0_ENVELOPED), "CMS_GET0_ENVELOPED"}, {ERR_FUNC(CMS_F_CMS_GET0_REVOCATION_CHOICES), "CMS_GET0_REVOCATION_CHOICES"}, {ERR_FUNC(CMS_F_CMS_GET0_SIGNED), "CMS_GET0_SIGNED"}, +{ERR_FUNC(CMS_F_CMS_RECEIPTREQUEST_CREATE0), "CMS_ReceiptRequest_create0"}, {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_DECRYPT), "CMS_RecipientInfo_decrypt"}, {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT), "CMS_RECIPIENTINFO_KEKRI_DECRYPT"}, {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT), "CMS_RECIPIENTINFO_KEKRI_ENCRYPT"}, diff --git a/crypto/cms/cms_ess.c b/crypto/cms/cms_ess.c index 00cd9dcb43..9377217e33 100644 --- a/crypto/cms/cms_ess.c +++ b/crypto/cms/cms_ess.c @@ -89,26 +89,18 @@ int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr) return 1; } -int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, - unsigned char *id, int idlen, +CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, int allorfirst, STACK_OF(GENERAL_NAMES) *receiptList, STACK_OF(GENERAL_NAMES) *receiptsTo) { CMS_ReceiptRequest *rr = NULL; - STACK_OF(GENERAL_NAMES) *tmpto = NULL; - unsigned char *rrder = NULL; - int rrderlen; - int r = 0; rr = CMS_ReceiptRequest_new(); if (!rr) goto merr; if (id) - { - if (!ASN1_STRING_set(rr->signedContentIdentifier, id, idlen)) - goto merr; - } + ASN1_STRING_set0(rr->signedContentIdentifier, id, idlen); else { if (!ASN1_STRING_set(rr->signedContentIdentifier, NULL, 32)) @@ -118,7 +110,7 @@ int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, goto err; } - tmpto = rr->receiptsTo; + sk_GENERAL_NAMES_pop_free(rr->receiptsTo, GENERAL_NAMES_free); rr->receiptsTo = receiptsTo; if (receiptList) @@ -132,21 +124,38 @@ int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, rr->receiptsFrom->d.allOrFirstTier = allorfirst; } - rrderlen = i2d_CMS_ReceiptRequest(rr, &rrder); - - r = CMS_signed_add1_attr_by_NID(si, NID_id_smime_aa_receiptRequest, - V_ASN1_SEQUENCE, rrder, rrderlen); + return rr; merr: - CMSerr(CMS_F_CMS_ADD1_RECEIPTREQUEST, ERR_R_MALLOC_FAILURE); + CMSerr(CMS_F_CMS_RECEIPTREQUEST_CREATE0, ERR_R_MALLOC_FAILURE); err: if (rr) - { - rr->receiptsTo = tmpto; - rr->receiptsFrom->type = 0; CMS_ReceiptRequest_free(rr); - } + + return NULL; + + } + +int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr) + { + unsigned char *rrder = NULL; + int rrderlen, r = 0; + + rrderlen = i2d_CMS_ReceiptRequest(rr, &rrder); + if (rrderlen < 0) + goto merr; + + if (!CMS_signed_add1_attr_by_NID(si, NID_id_smime_aa_receiptRequest, + V_ASN1_SEQUENCE, rrder, rrderlen)) + goto merr; + + r = 1; + + merr: + if (!r) + CMSerr(CMS_F_CMS_ADD1_RECEIPTREQUEST, ERR_R_MALLOC_FAILURE); + if (rrder) OPENSSL_free(rrder); |