Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(515)

Side by Side Diff: openssl/crypto/cms/cms_io.c

Issue 9254031: Upgrade chrome's OpenSSL to same version Android ships with. (Closed) Base URL: http://src.chromium.org/svn/trunk/deps/third_party/openssl/
Patch Set: '' Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « openssl/crypto/cms/cms_ess.c ('k') | openssl/crypto/cms/cms_lcl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* crypto/cms/cms_io.c */ 1 /* crypto/cms/cms_io.c */
2 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project. 3 * project.
4 */ 4 */
5 /* ==================================================================== 5 /* ====================================================================
6 * Copyright (c) 2008 The OpenSSL Project. All rights reserved. 6 * Copyright (c) 2008 The OpenSSL Project. All rights reserved.
7 * 7 *
8 * Redistribution and use in source and binary forms, with or without 8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions 9 * modification, are permitted provided that the following conditions
10 * are met: 10 * are met:
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 * ==================================================================== 51 * ====================================================================
52 */ 52 */
53 53
54 #include <openssl/asn1t.h> 54 #include <openssl/asn1t.h>
55 #include <openssl/x509.h> 55 #include <openssl/x509.h>
56 #include <openssl/err.h> 56 #include <openssl/err.h>
57 #include <openssl/pem.h> 57 #include <openssl/pem.h>
58 #include "cms.h" 58 #include "cms.h"
59 #include "cms_lcl.h" 59 #include "cms_lcl.h"
60 60
61 int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms)
62 {
63 ASN1_OCTET_STRING **pos;
64 pos = CMS_get0_content(cms);
65 if (!pos)
66 return 0;
67 if (!*pos)
68 *pos = ASN1_OCTET_STRING_new();
69 if (*pos)
70 {
71 (*pos)->flags |= ASN1_STRING_FLAG_NDEF;
72 (*pos)->flags &= ~ASN1_STRING_FLAG_CONT;
73 *boundary = &(*pos)->data;
74 return 1;
75 }
76 CMSerr(CMS_F_CMS_STREAM, ERR_R_MALLOC_FAILURE);
77 return 0;
78 }
79
61 CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms) 80 CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms)
62 { 81 {
63 return ASN1_item_d2i_bio(ASN1_ITEM_rptr(CMS_ContentInfo), bp, cms); 82 return ASN1_item_d2i_bio(ASN1_ITEM_rptr(CMS_ContentInfo), bp, cms);
64 } 83 }
65 84
66 int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms) 85 int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms)
67 { 86 {
68 return ASN1_item_i2d_bio(ASN1_ITEM_rptr(CMS_ContentInfo), bp, cms); 87 return ASN1_item_i2d_bio(ASN1_ITEM_rptr(CMS_ContentInfo), bp, cms);
69 } 88 }
70 89
71 IMPLEMENT_PEM_rw_const(CMS, CMS_ContentInfo, PEM_STRING_CMS, CMS_ContentInfo) 90 IMPLEMENT_PEM_rw_const(CMS, CMS_ContentInfo, PEM_STRING_CMS, CMS_ContentInfo)
72 91
73 /* Callback for int_smime_write_ASN1 */ 92 BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms)
74
75 static int cms_output_data(BIO *out, BIO *data, ASN1_VALUE *val, int flags,
76 » » » » » const ASN1_ITEM *it)
77 { 93 {
78 » CMS_ContentInfo *cms = (CMS_ContentInfo *)val; 94 » return BIO_new_NDEF(out, (ASN1_VALUE *)cms,
79 » BIO *tmpbio, *cmsbio; 95 » » » » ASN1_ITEM_rptr(CMS_ContentInfo));
80 » int r = 0;
81
82 » if (!(flags & SMIME_DETACHED))
83 » » {
84 » » SMIME_crlf_copy(data, out, flags);
85 » » return 1;
86 » » }
87
88 » /* Let CMS code prepend any needed BIOs */
89
90 » cmsbio = CMS_dataInit(cms, out);
91
92 » if (!cmsbio)
93 » » return 0;
94
95 » /* Copy data across, passing through filter BIOs for processing */
96 » SMIME_crlf_copy(data, cmsbio, flags);
97
98 » /* Finalize structure */
99 » if (CMS_dataFinal(cms, cmsbio) <= 0)
100 » » goto err;
101
102 » r = 1;
103
104 » err:
105
106 » /* Now remove any digests prepended to the BIO */
107
108 » while (cmsbio != out)
109 » » {
110 » » tmpbio = BIO_pop(cmsbio);
111 » » BIO_free(cmsbio);
112 » » cmsbio = tmpbio;
113 » » }
114
115 » return 1;
116
117 } 96 }
118 97
98 /* CMS wrappers round generalised stream and MIME routines */
99
100 int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags)
101 {
102 return i2d_ASN1_bio_stream(out, (ASN1_VALUE *)cms, in, flags,
103 ASN1_ITEM_rptr(CMS_ContentInfo));
104 }
105
106 int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags)
107 {
108 return PEM_write_bio_ASN1_stream(out, (ASN1_VALUE *) cms, in, flags,
109 "CMS",
110 ASN1_ITEM_rptr(CMS_ContentInfo));
111 }
119 112
120 int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags) 113 int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags)
121 { 114 {
122 STACK_OF(X509_ALGOR) *mdalgs; 115 STACK_OF(X509_ALGOR) *mdalgs;
123 int ctype_nid = OBJ_obj2nid(cms->contentType); 116 int ctype_nid = OBJ_obj2nid(cms->contentType);
124 int econt_nid = OBJ_obj2nid(CMS_get0_eContentType(cms)); 117 int econt_nid = OBJ_obj2nid(CMS_get0_eContentType(cms));
125 if (ctype_nid == NID_pkcs7_signed) 118 if (ctype_nid == NID_pkcs7_signed)
126 mdalgs = cms->d.signedData->digestAlgorithms; 119 mdalgs = cms->d.signedData->digestAlgorithms;
127 else 120 else
128 mdalgs = NULL; 121 mdalgs = NULL;
129 122
130 » return int_smime_write_ASN1(bio, (ASN1_VALUE *)cms, data, flags, 123 » return SMIME_write_ASN1(bio, (ASN1_VALUE *)cms, data, flags,
131 ctype_nid, econt_nid, mdalgs, 124 ctype_nid, econt_nid, mdalgs,
132 cms_output_data,
133 ASN1_ITEM_rptr(CMS_ContentInfo)); 125 ASN1_ITEM_rptr(CMS_ContentInfo));
134 } 126 }
135 127
136 CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont) 128 CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont)
137 { 129 {
138 return (CMS_ContentInfo *)SMIME_read_ASN1(bio, bcont, 130 return (CMS_ContentInfo *)SMIME_read_ASN1(bio, bcont,
139 ASN1_ITEM_rptr(CMS_ContentInfo)); 131 ASN1_ITEM_rptr(CMS_ContentInfo));
140 } 132 }
133
OLDNEW
« no previous file with comments | « openssl/crypto/cms/cms_ess.c ('k') | openssl/crypto/cms/cms_lcl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698