Index: openssl/crypto/cms/cms_asn1.c |
=================================================================== |
--- openssl/crypto/cms/cms_asn1.c (revision 105093) |
+++ openssl/crypto/cms/cms_asn1.c (working copy) |
@@ -87,7 +87,8 @@ |
} ASN1_NDEF_SEQUENCE_END(CMS_EncapsulatedContentInfo) |
/* Minor tweak to operation: free up signer key, cert */ |
-static int cms_si_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it) |
+static int cms_si_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, |
+ void *exarg) |
{ |
if(operation == ASN1_OP_FREE_POST) |
{ |
@@ -213,7 +214,8 @@ |
} ASN1_SEQUENCE_END(CMS_OtherRecipientInfo) |
/* Free up RecipientInfo additional data */ |
-static int cms_ri_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it) |
+static int cms_ri_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, |
+ void *exarg) |
{ |
if(operation == ASN1_OP_FREE_PRE) |
{ |
@@ -300,10 +302,42 @@ |
ADB_ENTRY(NID_id_smime_ct_compressedData, ASN1_NDEF_EXP(CMS_ContentInfo, d.compressedData, CMS_CompressedData, 0)), |
} ASN1_ADB_END(CMS_ContentInfo, 0, contentType, 0, &cms_default_tt, NULL); |
-ASN1_NDEF_SEQUENCE(CMS_ContentInfo) = { |
+/* CMS streaming support */ |
+static int cms_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, |
+ void *exarg) |
+ { |
+ ASN1_STREAM_ARG *sarg = exarg; |
+ CMS_ContentInfo *cms = NULL; |
+ if (pval) |
+ cms = (CMS_ContentInfo *)*pval; |
+ else |
+ return 1; |
+ switch(operation) |
+ { |
+ |
+ case ASN1_OP_STREAM_PRE: |
+ if (CMS_stream(&sarg->boundary, cms) <= 0) |
+ return 0; |
+ case ASN1_OP_DETACHED_PRE: |
+ sarg->ndef_bio = CMS_dataInit(cms, sarg->out); |
+ if (!sarg->ndef_bio) |
+ return 0; |
+ break; |
+ |
+ case ASN1_OP_STREAM_POST: |
+ case ASN1_OP_DETACHED_POST: |
+ if (CMS_dataFinal(cms, sarg->ndef_bio) <= 0) |
+ return 0; |
+ break; |
+ |
+ } |
+ return 1; |
+ } |
+ |
+ASN1_NDEF_SEQUENCE_cb(CMS_ContentInfo, cms_cb) = { |
ASN1_SIMPLE(CMS_ContentInfo, contentType, ASN1_OBJECT), |
ASN1_ADB_OBJECT(CMS_ContentInfo) |
-} ASN1_NDEF_SEQUENCE_END(CMS_ContentInfo) |
+} ASN1_NDEF_SEQUENCE_END_cb(CMS_ContentInfo, CMS_ContentInfo) |
/* Specials for signed attributes */ |