OLD | NEW |
1 /* crypto/asn1/t_x509.c */ | 1 /* crypto/asn1/t_x509.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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags, unsigned long cflag) | 104 int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags, unsigned long cflag) |
105 { | 105 { |
106 long l; | 106 long l; |
107 int ret=0,i; | 107 int ret=0,i; |
108 char *m=NULL,mlch = ' '; | 108 char *m=NULL,mlch = ' '; |
109 int nmindent = 0; | 109 int nmindent = 0; |
110 X509_CINF *ci; | 110 X509_CINF *ci; |
111 ASN1_INTEGER *bs; | 111 ASN1_INTEGER *bs; |
112 EVP_PKEY *pkey=NULL; | 112 EVP_PKEY *pkey=NULL; |
113 const char *neg; | 113 const char *neg; |
114 ASN1_STRING *str=NULL; | |
115 | 114 |
116 if((nmflags & XN_FLAG_SEP_MASK) == XN_FLAG_SEP_MULTILINE) { | 115 if((nmflags & XN_FLAG_SEP_MASK) == XN_FLAG_SEP_MULTILINE) { |
117 mlch = '\n'; | 116 mlch = '\n'; |
118 nmindent = 12; | 117 nmindent = 12; |
119 } | 118 } |
120 | 119 |
121 if(nmflags == X509_FLAG_COMPAT) | 120 if(nmflags == X509_FLAG_COMPAT) |
122 nmindent = 16; | 121 nmindent = 16; |
123 | 122 |
124 ci=x->cert_info; | 123 ci=x->cert_info; |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 if (BIO_puts(bp, "\n") <= 0) | 207 if (BIO_puts(bp, "\n") <= 0) |
209 goto err; | 208 goto err; |
210 | 209 |
211 pkey=X509_get_pubkey(x); | 210 pkey=X509_get_pubkey(x); |
212 if (pkey == NULL) | 211 if (pkey == NULL) |
213 { | 212 { |
214 BIO_printf(bp,"%12sUnable to load Public Key\n",""); | 213 BIO_printf(bp,"%12sUnable to load Public Key\n",""); |
215 ERR_print_errors(bp); | 214 ERR_print_errors(bp); |
216 } | 215 } |
217 else | 216 else |
218 #ifndef OPENSSL_NO_RSA | |
219 if (pkey->type == EVP_PKEY_RSA) | |
220 { | 217 { |
221 » » » BIO_printf(bp,"%12sRSA Public Key: (%d bit)\n","", | 218 » » » EVP_PKEY_print_public(bp, pkey, 16, NULL); |
222 » » » BN_num_bits(pkey->pkey.rsa->n)); | 219 » » » EVP_PKEY_free(pkey); |
223 » » » RSA_print(bp,pkey->pkey.rsa,16); | |
224 } | 220 } |
225 else | |
226 #endif | |
227 #ifndef OPENSSL_NO_DSA | |
228 if (pkey->type == EVP_PKEY_DSA) | |
229 { | |
230 BIO_printf(bp,"%12sDSA Public Key:\n",""); | |
231 DSA_print(bp,pkey->pkey.dsa,16); | |
232 } | |
233 else | |
234 #endif | |
235 #ifndef OPENSSL_NO_EC | |
236 if (pkey->type == EVP_PKEY_EC) | |
237 { | |
238 BIO_printf(bp, "%12sEC Public Key:\n",""); | |
239 EC_KEY_print(bp, pkey->pkey.ec, 16); | |
240 } | |
241 else | |
242 #endif | |
243 BIO_printf(bp,"%12sUnknown Public Key:\n",""); | |
244 | |
245 EVP_PKEY_free(pkey); | |
246 } | 221 } |
247 | 222 |
248 if (!(cflag & X509_FLAG_NO_EXTENSIONS)) | 223 if (!(cflag & X509_FLAG_NO_EXTENSIONS)) |
249 X509V3_extensions_print(bp, "X509v3 extensions", | 224 X509V3_extensions_print(bp, "X509v3 extensions", |
250 ci->extensions, cflag, 8); | 225 ci->extensions, cflag, 8); |
251 | 226 |
252 if(!(cflag & X509_FLAG_NO_SIGDUMP)) | 227 if(!(cflag & X509_FLAG_NO_SIGDUMP)) |
253 { | 228 { |
254 if(X509_signature_print(bp, x->sig_alg, x->signature) <= 0) goto
err; | 229 if(X509_signature_print(bp, x->sig_alg, x->signature) <= 0) goto
err; |
255 } | 230 } |
256 if(!(cflag & X509_FLAG_NO_AUX)) | 231 if(!(cflag & X509_FLAG_NO_AUX)) |
257 { | 232 { |
258 if (!X509_CERT_AUX_print(bp, x->aux, 0)) goto err; | 233 if (!X509_CERT_AUX_print(bp, x->aux, 0)) goto err; |
259 } | 234 } |
260 ret=1; | 235 ret=1; |
261 err: | 236 err: |
262 if (str != NULL) ASN1_STRING_free(str); | |
263 if (m != NULL) OPENSSL_free(m); | 237 if (m != NULL) OPENSSL_free(m); |
264 return(ret); | 238 return(ret); |
265 } | 239 } |
266 | 240 |
267 int X509_ocspid_print (BIO *bp, X509 *x) | 241 int X509_ocspid_print (BIO *bp, X509 *x) |
268 { | 242 { |
269 unsigned char *der=NULL ; | 243 unsigned char *der=NULL ; |
270 unsigned char *dertmp; | 244 unsigned char *dertmp; |
271 int derlen; | 245 int derlen; |
272 int i; | 246 int i; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 { | 296 { |
323 if ((i%18) == 0) | 297 if ((i%18) == 0) |
324 if (BIO_write(bp,"\n ",9) <= 0) return 0; | 298 if (BIO_write(bp,"\n ",9) <= 0) return 0; |
325 if (BIO_printf(bp,"%02x%s",s[i], | 299 if (BIO_printf(bp,"%02x%s",s[i], |
326 ((i+1) == n)?"":":") <= 0) return 0; | 300 ((i+1) == n)?"":":") <= 0) return 0; |
327 } | 301 } |
328 if (BIO_write(bp,"\n",1) != 1) return 0; | 302 if (BIO_write(bp,"\n",1) != 1) return 0; |
329 return 1; | 303 return 1; |
330 } | 304 } |
331 | 305 |
332 int ASN1_STRING_print(BIO *bp, ASN1_STRING *v) | 306 int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v) |
333 { | 307 { |
334 int i,n; | 308 int i,n; |
335 » char buf[80],*p; | 309 » char buf[80]; |
| 310 » const char *p; |
336 | 311 |
337 if (v == NULL) return(0); | 312 if (v == NULL) return(0); |
338 n=0; | 313 n=0; |
339 » p=(char *)v->data; | 314 » p=(const char *)v->data; |
340 for (i=0; i<v->length; i++) | 315 for (i=0; i<v->length; i++) |
341 { | 316 { |
342 if ((p[i] > '~') || ((p[i] < ' ') && | 317 if ((p[i] > '~') || ((p[i] < ' ') && |
343 (p[i] != '\n') && (p[i] != '\r'))) | 318 (p[i] != '\n') && (p[i] != '\r'))) |
344 buf[n]='.'; | 319 buf[n]='.'; |
345 else | 320 else |
346 buf[n]=p[i]; | 321 buf[n]=p[i]; |
347 n++; | 322 n++; |
348 if (n >= 80) | 323 if (n >= 80) |
349 { | 324 { |
350 if (BIO_write(bp,buf,n) <= 0) | 325 if (BIO_write(bp,buf,n) <= 0) |
351 return(0); | 326 return(0); |
352 n=0; | 327 n=0; |
353 } | 328 } |
354 } | 329 } |
355 if (n > 0) | 330 if (n > 0) |
356 if (BIO_write(bp,buf,n) <= 0) | 331 if (BIO_write(bp,buf,n) <= 0) |
357 return(0); | 332 return(0); |
358 return(1); | 333 return(1); |
359 } | 334 } |
360 | 335 |
361 int ASN1_TIME_print(BIO *bp, ASN1_TIME *tm) | 336 int ASN1_TIME_print(BIO *bp, const ASN1_TIME *tm) |
362 { | 337 { |
363 if(tm->type == V_ASN1_UTCTIME) return ASN1_UTCTIME_print(bp, tm); | 338 if(tm->type == V_ASN1_UTCTIME) return ASN1_UTCTIME_print(bp, tm); |
364 if(tm->type == V_ASN1_GENERALIZEDTIME) | 339 if(tm->type == V_ASN1_GENERALIZEDTIME) |
365 return ASN1_GENERALIZEDTIME_print(bp, tm); | 340 return ASN1_GENERALIZEDTIME_print(bp, tm); |
366 BIO_write(bp,"Bad time value",14); | 341 BIO_write(bp,"Bad time value",14); |
367 return(0); | 342 return(0); |
368 } | 343 } |
369 | 344 |
370 static const char *mon[12]= | 345 static const char *mon[12]= |
371 { | 346 { |
372 "Jan","Feb","Mar","Apr","May","Jun", | 347 "Jan","Feb","Mar","Apr","May","Jun", |
373 "Jul","Aug","Sep","Oct","Nov","Dec" | 348 "Jul","Aug","Sep","Oct","Nov","Dec" |
374 }; | 349 }; |
375 | 350 |
376 int ASN1_GENERALIZEDTIME_print(BIO *bp, ASN1_GENERALIZEDTIME *tm) | 351 int ASN1_GENERALIZEDTIME_print(BIO *bp, const ASN1_GENERALIZEDTIME *tm) |
377 { | 352 { |
378 char *v; | 353 char *v; |
379 int gmt=0; | 354 int gmt=0; |
380 int i; | 355 int i; |
381 int y=0,M=0,d=0,h=0,m=0,s=0; | 356 int y=0,M=0,d=0,h=0,m=0,s=0; |
382 char *f = NULL; | 357 char *f = NULL; |
383 int f_len = 0; | 358 int f_len = 0; |
384 | 359 |
385 i=tm->length; | 360 i=tm->length; |
386 v=(char *)tm->data; | 361 v=(char *)tm->data; |
(...skipping 27 matching lines...) Expand all Loading... |
414 if (BIO_printf(bp,"%s %2d %02d:%02d:%02d%.*s %d%s", | 389 if (BIO_printf(bp,"%s %2d %02d:%02d:%02d%.*s %d%s", |
415 mon[M-1],d,h,m,s,f_len,f,y,(gmt)?" GMT":"") <= 0) | 390 mon[M-1],d,h,m,s,f_len,f,y,(gmt)?" GMT":"") <= 0) |
416 return(0); | 391 return(0); |
417 else | 392 else |
418 return(1); | 393 return(1); |
419 err: | 394 err: |
420 BIO_write(bp,"Bad time value",14); | 395 BIO_write(bp,"Bad time value",14); |
421 return(0); | 396 return(0); |
422 } | 397 } |
423 | 398 |
424 int ASN1_UTCTIME_print(BIO *bp, ASN1_UTCTIME *tm) | 399 int ASN1_UTCTIME_print(BIO *bp, const ASN1_UTCTIME *tm) |
425 { | 400 { |
426 » char *v; | 401 » const char *v; |
427 int gmt=0; | 402 int gmt=0; |
428 int i; | 403 int i; |
429 int y=0,M=0,d=0,h=0,m=0,s=0; | 404 int y=0,M=0,d=0,h=0,m=0,s=0; |
430 | 405 |
431 i=tm->length; | 406 i=tm->length; |
432 » v=(char *)tm->data; | 407 » v=(const char *)tm->data; |
433 | 408 |
434 if (i < 10) goto err; | 409 if (i < 10) goto err; |
435 if (v[i-1] == 'Z') gmt=1; | 410 if (v[i-1] == 'Z') gmt=1; |
436 for (i=0; i<10; i++) | 411 for (i=0; i<10; i++) |
437 if ((v[i] > '9') || (v[i] < '0')) goto err; | 412 if ((v[i] > '9') || (v[i] < '0')) goto err; |
438 y= (v[0]-'0')*10+(v[1]-'0'); | 413 y= (v[0]-'0')*10+(v[1]-'0'); |
439 if (y < 50) y+=100; | 414 if (y < 50) y+=100; |
440 M= (v[2]-'0')*10+(v[3]-'0'); | 415 M= (v[2]-'0')*10+(v[3]-'0'); |
441 if ((M > 12) || (M < 1)) goto err; | 416 if ((M > 12) || (M < 1)) goto err; |
442 d= (v[4]-'0')*10+(v[5]-'0'); | 417 d= (v[4]-'0')*10+(v[5]-'0'); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
509 | 484 |
510 ret=1; | 485 ret=1; |
511 if (0) | 486 if (0) |
512 { | 487 { |
513 err: | 488 err: |
514 X509err(X509_F_X509_NAME_PRINT,ERR_R_BUF_LIB); | 489 X509err(X509_F_X509_NAME_PRINT,ERR_R_BUF_LIB); |
515 } | 490 } |
516 OPENSSL_free(b); | 491 OPENSSL_free(b); |
517 return(ret); | 492 return(ret); |
518 } | 493 } |
OLD | NEW |