275
258
#define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \
276
259
type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\
278
return (type*)PEM_ASN1_read_bio(CHECKED_D2I_OF(type, d2i_##asn1), \
280
CHECKED_PPTR_OF(type, x), \
261
return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \
284
264
#define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \
285
265
int PEM_write_bio_##name(BIO *bp, type *x) \
287
return PEM_ASN1_write_bio(CHECKED_I2D_OF(type, i2d_##asn1), \
289
CHECKED_PTR_OF(type, x), \
290
NULL, NULL, 0, NULL, NULL); \
267
return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \
293
270
#define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \
294
271
int PEM_write_bio_##name(BIO *bp, const type *x) \
296
return PEM_ASN1_write_bio(CHECKED_I2D_OF(const type, i2d_##asn1), \
298
CHECKED_PTR_OF(const type, x), \
299
NULL, NULL, 0, NULL, NULL); \
273
return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \
302
276
#define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \
303
277
int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \
304
278
unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \
306
return PEM_ASN1_write_bio(CHECKED_I2D_OF(type, i2d_##asn1), \
308
CHECKED_PTR_OF(type, x), \
309
enc, kstr, klen, cb, u); \
280
return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \
312
283
#define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \
313
284
int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \
314
285
unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \
316
return PEM_ASN1_write_bio(CHECKED_I2D_OF(const type, i2d_##asn1), \
318
CHECKED_PTR_OF(const type, x), \
319
enc, kstr, klen, cb, u); \
287
return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \
322
290
#define IMPLEMENT_PEM_write(name, type, str, asn1) \
428
395
DECLARE_PEM_read(name, type) \
429
396
DECLARE_PEM_write_cb(name, type)
433
#define PEM_write_SSL_SESSION(fp,x) \
434
PEM_ASN1_write((int (*)())i2d_SSL_SESSION, \
435
PEM_STRING_SSL_SESSION,fp, (char *)x, NULL,NULL,0,NULL,NULL)
436
#define PEM_write_X509(fp,x) \
437
PEM_ASN1_write((int (*)())i2d_X509,PEM_STRING_X509,fp, \
438
(char *)x, NULL,NULL,0,NULL,NULL)
439
#define PEM_write_X509_REQ(fp,x) PEM_ASN1_write( \
440
(int (*)())i2d_X509_REQ,PEM_STRING_X509_REQ,fp,(char *)x, \
441
NULL,NULL,0,NULL,NULL)
442
#define PEM_write_X509_CRL(fp,x) \
443
PEM_ASN1_write((int (*)())i2d_X509_CRL,PEM_STRING_X509_CRL, \
444
fp,(char *)x, NULL,NULL,0,NULL,NULL)
445
#define PEM_write_RSAPrivateKey(fp,x,enc,kstr,klen,cb,u) \
446
PEM_ASN1_write((int (*)())i2d_RSAPrivateKey,PEM_STRING_RSA,fp,\
447
(char *)x,enc,kstr,klen,cb,u)
448
#define PEM_write_RSAPublicKey(fp,x) \
449
PEM_ASN1_write((int (*)())i2d_RSAPublicKey,\
450
PEM_STRING_RSA_PUBLIC,fp,(char *)x,NULL,NULL,0,NULL,NULL)
451
#define PEM_write_DSAPrivateKey(fp,x,enc,kstr,klen,cb,u) \
452
PEM_ASN1_write((int (*)())i2d_DSAPrivateKey,PEM_STRING_DSA,fp,\
453
(char *)x,enc,kstr,klen,cb,u)
454
#define PEM_write_PrivateKey(bp,x,enc,kstr,klen,cb,u) \
455
PEM_ASN1_write((int (*)())i2d_PrivateKey,\
456
(((x)->type == EVP_PKEY_DSA)?PEM_STRING_DSA:PEM_STRING_RSA),\
457
bp,(char *)x,enc,kstr,klen,cb,u)
458
#define PEM_write_PKCS7(fp,x) \
459
PEM_ASN1_write((int (*)())i2d_PKCS7,PEM_STRING_PKCS7,fp, \
460
(char *)x, NULL,NULL,0,NULL,NULL)
461
#define PEM_write_DHparams(fp,x) \
462
PEM_ASN1_write((int (*)())i2d_DHparams,PEM_STRING_DHPARAMS,fp,\
463
(char *)x,NULL,NULL,0,NULL,NULL)
465
#define PEM_write_NETSCAPE_CERT_SEQUENCE(fp,x) \
466
PEM_ASN1_write((int (*)())i2d_NETSCAPE_CERT_SEQUENCE, \
467
PEM_STRING_X509,fp, \
468
(char *)x, NULL,NULL,0,NULL,NULL)
470
#define PEM_read_SSL_SESSION(fp,x,cb,u) (SSL_SESSION *)PEM_ASN1_read( \
471
(char *(*)())d2i_SSL_SESSION,PEM_STRING_SSL_SESSION,fp,(char **)x,cb,u)
472
#define PEM_read_X509(fp,x,cb,u) (X509 *)PEM_ASN1_read( \
473
(char *(*)())d2i_X509,PEM_STRING_X509,fp,(char **)x,cb,u)
474
#define PEM_read_X509_REQ(fp,x,cb,u) (X509_REQ *)PEM_ASN1_read( \
475
(char *(*)())d2i_X509_REQ,PEM_STRING_X509_REQ,fp,(char **)x,cb,u)
476
#define PEM_read_X509_CRL(fp,x,cb,u) (X509_CRL *)PEM_ASN1_read( \
477
(char *(*)())d2i_X509_CRL,PEM_STRING_X509_CRL,fp,(char **)x,cb,u)
478
#define PEM_read_RSAPrivateKey(fp,x,cb,u) (RSA *)PEM_ASN1_read( \
479
(char *(*)())d2i_RSAPrivateKey,PEM_STRING_RSA,fp,(char **)x,cb,u)
480
#define PEM_read_RSAPublicKey(fp,x,cb,u) (RSA *)PEM_ASN1_read( \
481
(char *(*)())d2i_RSAPublicKey,PEM_STRING_RSA_PUBLIC,fp,(char **)x,cb,u)
482
#define PEM_read_DSAPrivateKey(fp,x,cb,u) (DSA *)PEM_ASN1_read( \
483
(char *(*)())d2i_DSAPrivateKey,PEM_STRING_DSA,fp,(char **)x,cb,u)
484
#define PEM_read_PrivateKey(fp,x,cb,u) (EVP_PKEY *)PEM_ASN1_read( \
485
(char *(*)())d2i_PrivateKey,PEM_STRING_EVP_PKEY,fp,(char **)x,cb,u)
486
#define PEM_read_PKCS7(fp,x,cb,u) (PKCS7 *)PEM_ASN1_read( \
487
(char *(*)())d2i_PKCS7,PEM_STRING_PKCS7,fp,(char **)x,cb,u)
488
#define PEM_read_DHparams(fp,x,cb,u) (DH *)PEM_ASN1_read( \
489
(char *(*)())d2i_DHparams,PEM_STRING_DHPARAMS,fp,(char **)x,cb,u)
491
#define PEM_read_NETSCAPE_CERT_SEQUENCE(fp,x,cb,u) \
492
(NETSCAPE_CERT_SEQUENCE *)PEM_ASN1_read( \
493
(char *(*)())d2i_NETSCAPE_CERT_SEQUENCE,PEM_STRING_X509,fp,\
496
#define PEM_write_bio_X509(bp,x) \
497
PEM_ASN1_write_bio((int (*)())i2d_X509,PEM_STRING_X509,bp, \
498
(char *)x, NULL,NULL,0,NULL,NULL)
499
#define PEM_write_bio_X509_REQ(bp,x) PEM_ASN1_write_bio( \
500
(int (*)())i2d_X509_REQ,PEM_STRING_X509_REQ,bp,(char *)x, \
501
NULL,NULL,0,NULL,NULL)
502
#define PEM_write_bio_X509_CRL(bp,x) \
503
PEM_ASN1_write_bio((int (*)())i2d_X509_CRL,PEM_STRING_X509_CRL,\
504
bp,(char *)x, NULL,NULL,0,NULL,NULL)
505
#define PEM_write_bio_RSAPrivateKey(bp,x,enc,kstr,klen,cb,u) \
506
PEM_ASN1_write_bio((int (*)())i2d_RSAPrivateKey,PEM_STRING_RSA,\
507
bp,(char *)x,enc,kstr,klen,cb,u)
508
#define PEM_write_bio_RSAPublicKey(bp,x) \
509
PEM_ASN1_write_bio((int (*)())i2d_RSAPublicKey, \
510
PEM_STRING_RSA_PUBLIC,\
511
bp,(char *)x,NULL,NULL,0,NULL,NULL)
512
#define PEM_write_bio_DSAPrivateKey(bp,x,enc,kstr,klen,cb,u) \
513
PEM_ASN1_write_bio((int (*)())i2d_DSAPrivateKey,PEM_STRING_DSA,\
514
bp,(char *)x,enc,kstr,klen,cb,u)
515
#define PEM_write_bio_PrivateKey(bp,x,enc,kstr,klen,cb,u) \
516
PEM_ASN1_write_bio((int (*)())i2d_PrivateKey,\
517
(((x)->type == EVP_PKEY_DSA)?PEM_STRING_DSA:PEM_STRING_RSA),\
518
bp,(char *)x,enc,kstr,klen,cb,u)
519
#define PEM_write_bio_PKCS7(bp,x) \
520
PEM_ASN1_write_bio((int (*)())i2d_PKCS7,PEM_STRING_PKCS7,bp, \
521
(char *)x, NULL,NULL,0,NULL,NULL)
522
#define PEM_write_bio_DHparams(bp,x) \
523
PEM_ASN1_write_bio((int (*)())i2d_DHparams,PEM_STRING_DHPARAMS,\
524
bp,(char *)x,NULL,NULL,0,NULL,NULL)
525
#define PEM_write_bio_DSAparams(bp,x) \
526
PEM_ASN1_write_bio((int (*)())i2d_DSAparams, \
527
PEM_STRING_DSAPARAMS,bp,(char *)x,NULL,NULL,0,NULL,NULL)
529
#define PEM_write_bio_NETSCAPE_CERT_SEQUENCE(bp,x) \
530
PEM_ASN1_write_bio((int (*)())i2d_NETSCAPE_CERT_SEQUENCE, \
531
PEM_STRING_X509,bp, \
532
(char *)x, NULL,NULL,0,NULL,NULL)
534
#define PEM_read_bio_X509(bp,x,cb,u) (X509 *)PEM_ASN1_read_bio( \
535
(char *(*)())d2i_X509,PEM_STRING_X509,bp,(char **)x,cb,u)
536
#define PEM_read_bio_X509_REQ(bp,x,cb,u) (X509_REQ *)PEM_ASN1_read_bio( \
537
(char *(*)())d2i_X509_REQ,PEM_STRING_X509_REQ,bp,(char **)x,cb,u)
538
#define PEM_read_bio_X509_CRL(bp,x,cb,u) (X509_CRL *)PEM_ASN1_read_bio( \
539
(char *(*)())d2i_X509_CRL,PEM_STRING_X509_CRL,bp,(char **)x,cb,u)
540
#define PEM_read_bio_RSAPrivateKey(bp,x,cb,u) (RSA *)PEM_ASN1_read_bio( \
541
(char *(*)())d2i_RSAPrivateKey,PEM_STRING_RSA,bp,(char **)x,cb,u)
542
#define PEM_read_bio_RSAPublicKey(bp,x,cb,u) (RSA *)PEM_ASN1_read_bio( \
543
(char *(*)())d2i_RSAPublicKey,PEM_STRING_RSA_PUBLIC,bp,(char **)x,cb,u)
544
#define PEM_read_bio_DSAPrivateKey(bp,x,cb,u) (DSA *)PEM_ASN1_read_bio( \
545
(char *(*)())d2i_DSAPrivateKey,PEM_STRING_DSA,bp,(char **)x,cb,u)
546
#define PEM_read_bio_PrivateKey(bp,x,cb,u) (EVP_PKEY *)PEM_ASN1_read_bio( \
547
(char *(*)())d2i_PrivateKey,PEM_STRING_EVP_PKEY,bp,(char **)x,cb,u)
549
#define PEM_read_bio_PKCS7(bp,x,cb,u) (PKCS7 *)PEM_ASN1_read_bio( \
550
(char *(*)())d2i_PKCS7,PEM_STRING_PKCS7,bp,(char **)x,cb,u)
551
#define PEM_read_bio_DHparams(bp,x,cb,u) (DH *)PEM_ASN1_read_bio( \
552
(char *(*)())d2i_DHparams,PEM_STRING_DHPARAMS,bp,(char **)x,cb,u)
553
#define PEM_read_bio_DSAparams(bp,x,cb,u) (DSA *)PEM_ASN1_read_bio( \
554
(char *(*)())d2i_DSAparams,PEM_STRING_DSAPARAMS,bp,(char **)x,cb,u)
556
#define PEM_read_bio_NETSCAPE_CERT_SEQUENCE(bp,x,cb,u) \
557
(NETSCAPE_CERT_SEQUENCE *)PEM_ASN1_read_bio( \
558
(char *(*)())d2i_NETSCAPE_CERT_SEQUENCE,PEM_STRING_X509,bp,\
564
399
/* "userdata": new with OpenSSL 0.9.4 */
565
400
typedef int pem_password_cb(char *buf, int size, int rwflag, void *userdata);
581
416
pem_password_cb *cb, void *u);
582
417
void * PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp,
583
418
void **x, pem_password_cb *cb, void *u);
585
#define PEM_ASN1_read_bio_of(type,d2i,name,bp,x,cb,u) \
586
((type*)PEM_ASN1_read_bio(CHECKED_D2I_OF(type, d2i), \
588
CHECKED_PPTR_OF(type, x), \
591
int PEM_ASN1_write_bio(i2d_of_void *i2d,const char *name,BIO *bp,char *x,
419
int PEM_ASN1_write_bio(i2d_of_void *i2d,const char *name,BIO *bp, void *x,
592
420
const EVP_CIPHER *enc,unsigned char *kstr,int klen,
593
421
pem_password_cb *cb, void *u);
595
#define PEM_ASN1_write_bio_of(type,i2d,name,bp,x,enc,kstr,klen,cb,u) \
596
(PEM_ASN1_write_bio(CHECKED_I2D_OF(type, i2d), \
598
CHECKED_PTR_OF(type, x), \
599
enc, kstr, klen, cb, u))
601
423
STACK_OF(X509_INFO) * PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u);
602
424
int PEM_X509_INFO_write_bio(BIO *bp,X509_INFO *xi, EVP_CIPHER *enc,
603
425
unsigned char *kstr, int klen, pem_password_cb *cd, void *u);
606
#ifndef OPENSSL_SYS_WIN16
607
428
int PEM_read(FILE *fp, char **name, char **header,
608
429
unsigned char **data,long *len);
609
430
int PEM_write(FILE *fp,char *name,char *hdr,unsigned char *data,long len);
610
431
void * PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x,
611
432
pem_password_cb *cb, void *u);
612
433
int PEM_ASN1_write(i2d_of_void *i2d,const char *name,FILE *fp,
613
char *x,const EVP_CIPHER *enc,unsigned char *kstr,
434
void *x,const EVP_CIPHER *enc,unsigned char *kstr,
614
435
int klen,pem_password_cb *callback, void *u);
615
436
STACK_OF(X509_INFO) * PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk,
616
437
pem_password_cb *cb, void *u);
619
439
int PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type,
620
440
EVP_MD *md_type, unsigned char **ek, int *ekl,