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

Side by Side Diff: openssl/crypto/pem/pem_pkey.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/pem/pem_lib.c ('k') | openssl/crypto/pem/pem_x509.c » ('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/pem/pem_pkey.c */ 1 /* crypto/pem/pem_pkey.c */
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 58
59 #include <stdio.h> 59 #include <stdio.h>
60 #include "cryptlib.h" 60 #include "cryptlib.h"
61 #include <openssl/buffer.h> 61 #include <openssl/buffer.h>
62 #include <openssl/objects.h> 62 #include <openssl/objects.h>
63 #include <openssl/evp.h> 63 #include <openssl/evp.h>
64 #include <openssl/rand.h> 64 #include <openssl/rand.h>
65 #include <openssl/x509.h> 65 #include <openssl/x509.h>
66 #include <openssl/pkcs12.h> 66 #include <openssl/pkcs12.h>
67 #include <openssl/pem.h> 67 #include <openssl/pem.h>
68 #ifndef OPENSSL_NO_ENGINE
69 #include <openssl/engine.h>
70 #endif
71 #include "asn1_locl.h"
68 72
73 int pem_check_suffix(const char *pem_str, const char *suffix);
69 74
70 EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, vo id *u) 75 EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, vo id *u)
71 { 76 {
72 char *nm=NULL; 77 char *nm=NULL;
73 const unsigned char *p=NULL; 78 const unsigned char *p=NULL;
74 unsigned char *data=NULL; 79 unsigned char *data=NULL;
75 long len; 80 long len;
81 int slen;
76 EVP_PKEY *ret=NULL; 82 EVP_PKEY *ret=NULL;
77 83
78 if (!PEM_bytes_read_bio(&data, &len, &nm, PEM_STRING_EVP_PKEY, bp, cb, u )) 84 if (!PEM_bytes_read_bio(&data, &len, &nm, PEM_STRING_EVP_PKEY, bp, cb, u ))
79 return NULL; 85 return NULL;
80 p = data; 86 p = data;
81 87
82 » if (strcmp(nm,PEM_STRING_RSA) == 0) 88 » if (strcmp(nm,PEM_STRING_PKCS8INF) == 0) {
83 » » ret=d2i_PrivateKey(EVP_PKEY_RSA,x,&p,len);
84 » else if (strcmp(nm,PEM_STRING_DSA) == 0)
85 » » ret=d2i_PrivateKey(EVP_PKEY_DSA,x,&p,len);
86 » else if (strcmp(nm,PEM_STRING_ECPRIVATEKEY) == 0)
87 » » ret=d2i_PrivateKey(EVP_PKEY_EC,x,&p,len);
88 » else if (strcmp(nm,PEM_STRING_PKCS8INF) == 0) {
89 PKCS8_PRIV_KEY_INFO *p8inf; 89 PKCS8_PRIV_KEY_INFO *p8inf;
90 p8inf=d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, len); 90 p8inf=d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, len);
91 if(!p8inf) goto p8err; 91 if(!p8inf) goto p8err;
92 ret = EVP_PKCS82PKEY(p8inf); 92 ret = EVP_PKCS82PKEY(p8inf);
93 if(x) { 93 if(x) {
94 if(*x) EVP_PKEY_free((EVP_PKEY *)*x); 94 if(*x) EVP_PKEY_free((EVP_PKEY *)*x);
95 *x = ret; 95 *x = ret;
96 } 96 }
97 PKCS8_PRIV_KEY_INFO_free(p8inf); 97 PKCS8_PRIV_KEY_INFO_free(p8inf);
98 } else if (strcmp(nm,PEM_STRING_PKCS8) == 0) { 98 } else if (strcmp(nm,PEM_STRING_PKCS8) == 0) {
(...skipping 13 matching lines...) Expand all
112 } 112 }
113 p8inf = PKCS8_decrypt(p8, psbuf, klen); 113 p8inf = PKCS8_decrypt(p8, psbuf, klen);
114 X509_SIG_free(p8); 114 X509_SIG_free(p8);
115 if(!p8inf) goto p8err; 115 if(!p8inf) goto p8err;
116 ret = EVP_PKCS82PKEY(p8inf); 116 ret = EVP_PKCS82PKEY(p8inf);
117 if(x) { 117 if(x) {
118 if(*x) EVP_PKEY_free((EVP_PKEY *)*x); 118 if(*x) EVP_PKEY_free((EVP_PKEY *)*x);
119 *x = ret; 119 *x = ret;
120 } 120 }
121 PKCS8_PRIV_KEY_INFO_free(p8inf); 121 PKCS8_PRIV_KEY_INFO_free(p8inf);
122 » } 122 » } else if ((slen = pem_check_suffix(nm, "PRIVATE KEY")) > 0)
123 » » {
124 » » const EVP_PKEY_ASN1_METHOD *ameth;
125 » » ameth = EVP_PKEY_asn1_find_str(NULL, nm, slen);
126 » » if (!ameth || !ameth->old_priv_decode)
127 » » » goto p8err;
128 » » ret=d2i_PrivateKey(ameth->pkey_id,x,&p,len);
129 » » }
123 p8err: 130 p8err:
124 if (ret == NULL) 131 if (ret == NULL)
125 PEMerr(PEM_F_PEM_READ_BIO_PRIVATEKEY,ERR_R_ASN1_LIB); 132 PEMerr(PEM_F_PEM_READ_BIO_PRIVATEKEY,ERR_R_ASN1_LIB);
126 err: 133 err:
127 OPENSSL_free(nm); 134 OPENSSL_free(nm);
128 OPENSSL_cleanse(data, len); 135 OPENSSL_cleanse(data, len);
129 OPENSSL_free(data); 136 OPENSSL_free(data);
130 return(ret); 137 return(ret);
131 } 138 }
132 139
140 int PEM_write_bio_PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
141 unsigned char *kstr, int klen,
142 pem_password_cb *cb, void *u)
143 {
144 char pem_str[80];
145 if (!x->ameth || x->ameth->priv_encode)
146 return PEM_write_bio_PKCS8PrivateKey(bp, x, enc,
147 (char *)kstr, klen,
148 cb, u);
149
150 BIO_snprintf(pem_str, 80, "%s PRIVATE KEY", x->ameth->pem_str);
151 return PEM_ASN1_write_bio((i2d_of_void *)i2d_PrivateKey,
152 pem_str,bp,x,enc,kstr,klen,cb,u);
153 }
154
155 EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x)
156 {
157 char *nm=NULL;
158 const unsigned char *p=NULL;
159 unsigned char *data=NULL;
160 long len;
161 int slen;
162 EVP_PKEY *ret=NULL;
163
164 if (!PEM_bytes_read_bio(&data, &len, &nm, PEM_STRING_PARAMETERS,
165 bp, 0, NULL))
166 return NULL;
167 p = data;
168
169 if ((slen = pem_check_suffix(nm, "PARAMETERS")) > 0)
170 {
171 ret = EVP_PKEY_new();
172 if (!ret)
173 goto err;
174 if (!EVP_PKEY_set_type_str(ret, nm, slen)
175 || !ret->ameth->param_decode
176 || !ret->ameth->param_decode(ret, &p, len))
177 {
178 EVP_PKEY_free(ret);
179 ret = NULL;
180 goto err;
181 }
182 if(x)
183 {
184 if(*x) EVP_PKEY_free((EVP_PKEY *)*x);
185 *x = ret;
186 }
187 }
188 err:
189 if (ret == NULL)
190 PEMerr(PEM_F_PEM_READ_BIO_PARAMETERS,ERR_R_ASN1_LIB);
191 OPENSSL_free(nm);
192 OPENSSL_free(data);
193 return(ret);
194 }
195
196 int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x)
197 {
198 char pem_str[80];
199 if (!x->ameth || !x->ameth->param_encode)
200 return 0;
201
202 BIO_snprintf(pem_str, 80, "%s PARAMETERS", x->ameth->pem_str);
203 return PEM_ASN1_write_bio(
204 (i2d_of_void *)x->ameth->param_encode,
205 pem_str,bp,x,NULL,NULL,0,0,NULL);
206 }
207
133 #ifndef OPENSSL_NO_FP_API 208 #ifndef OPENSSL_NO_FP_API
134 EVP_PKEY *PEM_read_PrivateKey(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u) 209 EVP_PKEY *PEM_read_PrivateKey(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u)
135 { 210 {
136 BIO *b; 211 BIO *b;
137 EVP_PKEY *ret; 212 EVP_PKEY *ret;
138 213
139 if ((b=BIO_new(BIO_s_file())) == NULL) 214 if ((b=BIO_new(BIO_s_file())) == NULL)
140 { 215 {
141 PEMerr(PEM_F_PEM_READ_PRIVATEKEY,ERR_R_BUF_LIB); 216 PEMerr(PEM_F_PEM_READ_PRIVATEKEY,ERR_R_BUF_LIB);
142 return(0); 217 return(0);
143 } 218 }
144 BIO_set_fp(b,fp,BIO_NOCLOSE); 219 BIO_set_fp(b,fp,BIO_NOCLOSE);
145 ret=PEM_read_bio_PrivateKey(b,x,cb,u); 220 ret=PEM_read_bio_PrivateKey(b,x,cb,u);
146 BIO_free(b); 221 BIO_free(b);
147 return(ret); 222 return(ret);
148 } 223 }
224
225 int PEM_write_PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
226 unsigned char *kstr, int klen,
227 pem_password_cb *cb, void *u)
228 {
229 BIO *b;
230 int ret;
231
232 if ((b=BIO_new_fp(fp, BIO_NOCLOSE)) == NULL)
233 {
234 PEMerr(PEM_F_PEM_WRITE_PRIVATEKEY,ERR_R_BUF_LIB);
235 return 0;
236 }
237 ret=PEM_write_bio_PrivateKey(b, x, enc, kstr, klen, cb, u);
238 BIO_free(b);
239 return ret;
240 }
241
149 #endif 242 #endif
OLDNEW
« no previous file with comments | « openssl/crypto/pem/pem_lib.c ('k') | openssl/crypto/pem/pem_x509.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698