1*8fb009dcSAndroid Build Coastguard Worker /* Copyright (C) 1995-1997 Eric Young ([email protected]) 2*8fb009dcSAndroid Build Coastguard Worker * All rights reserved. 3*8fb009dcSAndroid Build Coastguard Worker * 4*8fb009dcSAndroid Build Coastguard Worker * This package is an SSL implementation written 5*8fb009dcSAndroid Build Coastguard Worker * by Eric Young ([email protected]). 6*8fb009dcSAndroid Build Coastguard Worker * The implementation was written so as to conform with Netscapes SSL. 7*8fb009dcSAndroid Build Coastguard Worker * 8*8fb009dcSAndroid Build Coastguard Worker * This library is free for commercial and non-commercial use as long as 9*8fb009dcSAndroid Build Coastguard Worker * the following conditions are aheared to. The following conditions 10*8fb009dcSAndroid Build Coastguard Worker * apply to all code found in this distribution, be it the RC4, RSA, 11*8fb009dcSAndroid Build Coastguard Worker * lhash, DES, etc., code; not just the SSL code. The SSL documentation 12*8fb009dcSAndroid Build Coastguard Worker * included with this distribution is covered by the same copyright terms 13*8fb009dcSAndroid Build Coastguard Worker * except that the holder is Tim Hudson ([email protected]). 14*8fb009dcSAndroid Build Coastguard Worker * 15*8fb009dcSAndroid Build Coastguard Worker * Copyright remains Eric Young's, and as such any Copyright notices in 16*8fb009dcSAndroid Build Coastguard Worker * the code are not to be removed. 17*8fb009dcSAndroid Build Coastguard Worker * If this package is used in a product, Eric Young should be given attribution 18*8fb009dcSAndroid Build Coastguard Worker * as the author of the parts of the library used. 19*8fb009dcSAndroid Build Coastguard Worker * This can be in the form of a textual message at program startup or 20*8fb009dcSAndroid Build Coastguard Worker * in documentation (online or textual) provided with the package. 21*8fb009dcSAndroid Build Coastguard Worker * 22*8fb009dcSAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 23*8fb009dcSAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 24*8fb009dcSAndroid Build Coastguard Worker * are met: 25*8fb009dcSAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the copyright 26*8fb009dcSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 27*8fb009dcSAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 28*8fb009dcSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 29*8fb009dcSAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 30*8fb009dcSAndroid Build Coastguard Worker * 3. All advertising materials mentioning features or use of this software 31*8fb009dcSAndroid Build Coastguard Worker * must display the following acknowledgement: 32*8fb009dcSAndroid Build Coastguard Worker * "This product includes cryptographic software written by 33*8fb009dcSAndroid Build Coastguard Worker * Eric Young ([email protected])" 34*8fb009dcSAndroid Build Coastguard Worker * The word 'cryptographic' can be left out if the rouines from the library 35*8fb009dcSAndroid Build Coastguard Worker * being used are not cryptographic related :-). 36*8fb009dcSAndroid Build Coastguard Worker * 4. If you include any Windows specific code (or a derivative thereof) from 37*8fb009dcSAndroid Build Coastguard Worker * the apps directory (application code) you must include an acknowledgement: 38*8fb009dcSAndroid Build Coastguard Worker * "This product includes software written by Tim Hudson ([email protected])" 39*8fb009dcSAndroid Build Coastguard Worker * 40*8fb009dcSAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41*8fb009dcSAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42*8fb009dcSAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43*8fb009dcSAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 44*8fb009dcSAndroid Build Coastguard Worker * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 45*8fb009dcSAndroid Build Coastguard Worker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 46*8fb009dcSAndroid Build Coastguard Worker * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47*8fb009dcSAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 48*8fb009dcSAndroid Build Coastguard Worker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 49*8fb009dcSAndroid Build Coastguard Worker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 50*8fb009dcSAndroid Build Coastguard Worker * SUCH DAMAGE. 51*8fb009dcSAndroid Build Coastguard Worker * 52*8fb009dcSAndroid Build Coastguard Worker * The licence and distribution terms for any publically available version or 53*8fb009dcSAndroid Build Coastguard Worker * derivative of this code cannot be changed. i.e. this code cannot simply be 54*8fb009dcSAndroid Build Coastguard Worker * copied and put under another distribution licence 55*8fb009dcSAndroid Build Coastguard Worker * [including the GNU Public Licence.] */ 56*8fb009dcSAndroid Build Coastguard Worker 57*8fb009dcSAndroid Build Coastguard Worker #ifndef OPENSSL_HEADER_PEM_H 58*8fb009dcSAndroid Build Coastguard Worker #define OPENSSL_HEADER_PEM_H 59*8fb009dcSAndroid Build Coastguard Worker 60*8fb009dcSAndroid Build Coastguard Worker #include <openssl/base64.h> 61*8fb009dcSAndroid Build Coastguard Worker #include <openssl/bio.h> 62*8fb009dcSAndroid Build Coastguard Worker #include <openssl/cipher.h> 63*8fb009dcSAndroid Build Coastguard Worker #include <openssl/digest.h> 64*8fb009dcSAndroid Build Coastguard Worker #include <openssl/evp.h> 65*8fb009dcSAndroid Build Coastguard Worker #include <openssl/pkcs7.h> 66*8fb009dcSAndroid Build Coastguard Worker #include <openssl/stack.h> 67*8fb009dcSAndroid Build Coastguard Worker #include <openssl/x509.h> 68*8fb009dcSAndroid Build Coastguard Worker 69*8fb009dcSAndroid Build Coastguard Worker // For compatibility with open-iscsi, which assumes that it can get 70*8fb009dcSAndroid Build Coastguard Worker // |OPENSSL_malloc| from pem.h or err.h 71*8fb009dcSAndroid Build Coastguard Worker #include <openssl/crypto.h> 72*8fb009dcSAndroid Build Coastguard Worker 73*8fb009dcSAndroid Build Coastguard Worker #ifdef __cplusplus 74*8fb009dcSAndroid Build Coastguard Worker extern "C" { 75*8fb009dcSAndroid Build Coastguard Worker #endif 76*8fb009dcSAndroid Build Coastguard Worker 77*8fb009dcSAndroid Build Coastguard Worker 78*8fb009dcSAndroid Build Coastguard Worker #define PEM_BUFSIZE 1024 79*8fb009dcSAndroid Build Coastguard Worker 80*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_X509_OLD "X509 CERTIFICATE" 81*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_X509 "CERTIFICATE" 82*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_X509_PAIR "CERTIFICATE PAIR" 83*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE" 84*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST" 85*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_X509_REQ "CERTIFICATE REQUEST" 86*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_X509_CRL "X509 CRL" 87*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY" 88*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_PUBLIC "PUBLIC KEY" 89*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_RSA "RSA PRIVATE KEY" 90*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY" 91*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_DSA "DSA PRIVATE KEY" 92*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY" 93*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_EC "EC PRIVATE KEY" 94*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_PKCS7 "PKCS7" 95*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA" 96*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY" 97*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_PKCS8INF "PRIVATE KEY" 98*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_DHPARAMS "DH PARAMETERS" 99*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" 100*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_DSAPARAMS "DSA PARAMETERS" 101*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY" 102*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY" 103*8fb009dcSAndroid Build Coastguard Worker #define PEM_STRING_CMS "CMS" 104*8fb009dcSAndroid Build Coastguard Worker 105*8fb009dcSAndroid Build Coastguard Worker // enc_type is one off 106*8fb009dcSAndroid Build Coastguard Worker #define PEM_TYPE_ENCRYPTED 10 107*8fb009dcSAndroid Build Coastguard Worker #define PEM_TYPE_MIC_ONLY 20 108*8fb009dcSAndroid Build Coastguard Worker #define PEM_TYPE_MIC_CLEAR 30 109*8fb009dcSAndroid Build Coastguard Worker #define PEM_TYPE_CLEAR 40 110*8fb009dcSAndroid Build Coastguard Worker 111*8fb009dcSAndroid Build Coastguard Worker // These macros make the PEM_read/PEM_write functions easier to maintain and 112*8fb009dcSAndroid Build Coastguard Worker // write. Now they are all implemented with either: 113*8fb009dcSAndroid Build Coastguard Worker // IMPLEMENT_PEM_rw(...) or IMPLEMENT_PEM_rw_cb(...) 114*8fb009dcSAndroid Build Coastguard Worker 115*8fb009dcSAndroid Build Coastguard Worker 116*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ 117*8fb009dcSAndroid Build Coastguard Worker static void *pem_read_##name##_d2i(void **x, const unsigned char **inp, \ 118*8fb009dcSAndroid Build Coastguard Worker long len) { \ 119*8fb009dcSAndroid Build Coastguard Worker return d2i_##asn1((type **)x, inp, len); \ 120*8fb009dcSAndroid Build Coastguard Worker } \ 121*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT type *PEM_read_##name(FILE *fp, type **x, \ 122*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, void *u) { \ 123*8fb009dcSAndroid Build Coastguard Worker return (type *)PEM_ASN1_read(pem_read_##name##_d2i, str, fp, (void **)x, \ 124*8fb009dcSAndroid Build Coastguard Worker cb, u); \ 125*8fb009dcSAndroid Build Coastguard Worker } 126*8fb009dcSAndroid Build Coastguard Worker 127*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ 128*8fb009dcSAndroid Build Coastguard Worker static int pem_write_##name##_i2d(const void *x, unsigned char **outp) { \ 129*8fb009dcSAndroid Build Coastguard Worker return i2d_##asn1((type *)x, outp); \ 130*8fb009dcSAndroid Build Coastguard Worker } \ 131*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_##name(FILE *fp, type *x) { \ 132*8fb009dcSAndroid Build Coastguard Worker return PEM_ASN1_write(pem_write_##name##_i2d, str, fp, x, NULL, NULL, 0, \ 133*8fb009dcSAndroid Build Coastguard Worker NULL, NULL); \ 134*8fb009dcSAndroid Build Coastguard Worker } 135*8fb009dcSAndroid Build Coastguard Worker 136*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ 137*8fb009dcSAndroid Build Coastguard Worker static int pem_write_##name##_i2d(const void *x, unsigned char **outp) { \ 138*8fb009dcSAndroid Build Coastguard Worker return i2d_##asn1((const type *)x, outp); \ 139*8fb009dcSAndroid Build Coastguard Worker } \ 140*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_##name(FILE *fp, const type *x) { \ 141*8fb009dcSAndroid Build Coastguard Worker return PEM_ASN1_write(pem_write_##name##_i2d, str, fp, (void *)x, NULL, \ 142*8fb009dcSAndroid Build Coastguard Worker NULL, 0, NULL, NULL); \ 143*8fb009dcSAndroid Build Coastguard Worker } 144*8fb009dcSAndroid Build Coastguard Worker 145*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ 146*8fb009dcSAndroid Build Coastguard Worker static int pem_write_##name##_i2d(const void *x, unsigned char **outp) { \ 147*8fb009dcSAndroid Build Coastguard Worker return i2d_##asn1((type *)x, outp); \ 148*8fb009dcSAndroid Build Coastguard Worker } \ 149*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_##name( \ 150*8fb009dcSAndroid Build Coastguard Worker FILE *fp, type *x, const EVP_CIPHER *enc, const unsigned char *pass, \ 151*8fb009dcSAndroid Build Coastguard Worker int pass_len, pem_password_cb *cb, void *u) { \ 152*8fb009dcSAndroid Build Coastguard Worker return PEM_ASN1_write(pem_write_##name##_i2d, str, fp, x, enc, pass, \ 153*8fb009dcSAndroid Build Coastguard Worker pass_len, cb, u); \ 154*8fb009dcSAndroid Build Coastguard Worker } 155*8fb009dcSAndroid Build Coastguard Worker 156*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ 157*8fb009dcSAndroid Build Coastguard Worker static int pem_write_##name##_i2d(const void *x, unsigned char **outp) { \ 158*8fb009dcSAndroid Build Coastguard Worker return i2d_##asn1((const type *)x, outp); \ 159*8fb009dcSAndroid Build Coastguard Worker } \ 160*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_##name( \ 161*8fb009dcSAndroid Build Coastguard Worker FILE *fp, type *x, const EVP_CIPHER *enc, const unsigned char *pass, \ 162*8fb009dcSAndroid Build Coastguard Worker int pass_len, pem_password_cb *cb, void *u) { \ 163*8fb009dcSAndroid Build Coastguard Worker return PEM_ASN1_write(pem_write_##name##_i2d, str, fp, x, enc, pass, \ 164*8fb009dcSAndroid Build Coastguard Worker pass_len, cb, u); \ 165*8fb009dcSAndroid Build Coastguard Worker } 166*8fb009dcSAndroid Build Coastguard Worker 167*8fb009dcSAndroid Build Coastguard Worker 168*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ 169*8fb009dcSAndroid Build Coastguard Worker static void *pem_read_bio_##name##_d2i(void **x, const unsigned char **inp, \ 170*8fb009dcSAndroid Build Coastguard Worker long len) { \ 171*8fb009dcSAndroid Build Coastguard Worker return d2i_##asn1((type **)x, inp, len); \ 172*8fb009dcSAndroid Build Coastguard Worker } \ 173*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT type *PEM_read_bio_##name(BIO *bp, type **x, \ 174*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, void *u) { \ 175*8fb009dcSAndroid Build Coastguard Worker return (type *)PEM_ASN1_read_bio(pem_read_bio_##name##_d2i, str, bp, \ 176*8fb009dcSAndroid Build Coastguard Worker (void **)x, cb, u); \ 177*8fb009dcSAndroid Build Coastguard Worker } 178*8fb009dcSAndroid Build Coastguard Worker 179*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ 180*8fb009dcSAndroid Build Coastguard Worker static int pem_write_bio_##name##_i2d(const void *x, unsigned char **outp) { \ 181*8fb009dcSAndroid Build Coastguard Worker return i2d_##asn1((type *)x, outp); \ 182*8fb009dcSAndroid Build Coastguard Worker } \ 183*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, type *x) { \ 184*8fb009dcSAndroid Build Coastguard Worker return PEM_ASN1_write_bio(pem_write_bio_##name##_i2d, str, bp, x, NULL, \ 185*8fb009dcSAndroid Build Coastguard Worker NULL, 0, NULL, NULL); \ 186*8fb009dcSAndroid Build Coastguard Worker } 187*8fb009dcSAndroid Build Coastguard Worker 188*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ 189*8fb009dcSAndroid Build Coastguard Worker static int pem_write_bio_##name##_i2d(const void *x, unsigned char **outp) { \ 190*8fb009dcSAndroid Build Coastguard Worker return i2d_##asn1((const type *)x, outp); \ 191*8fb009dcSAndroid Build Coastguard Worker } \ 192*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, const type *x) { \ 193*8fb009dcSAndroid Build Coastguard Worker return PEM_ASN1_write_bio(pem_write_bio_##name##_i2d, str, bp, (void *)x, \ 194*8fb009dcSAndroid Build Coastguard Worker NULL, NULL, 0, NULL, NULL); \ 195*8fb009dcSAndroid Build Coastguard Worker } 196*8fb009dcSAndroid Build Coastguard Worker 197*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ 198*8fb009dcSAndroid Build Coastguard Worker static int pem_write_bio_##name##_i2d(const void *x, unsigned char **outp) { \ 199*8fb009dcSAndroid Build Coastguard Worker return i2d_##asn1((type *)x, outp); \ 200*8fb009dcSAndroid Build Coastguard Worker } \ 201*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_bio_##name( \ 202*8fb009dcSAndroid Build Coastguard Worker BIO *bp, type *x, const EVP_CIPHER *enc, const unsigned char *pass, \ 203*8fb009dcSAndroid Build Coastguard Worker int pass_len, pem_password_cb *cb, void *u) { \ 204*8fb009dcSAndroid Build Coastguard Worker return PEM_ASN1_write_bio(pem_write_bio_##name##_i2d, str, bp, x, enc, \ 205*8fb009dcSAndroid Build Coastguard Worker pass, pass_len, cb, u); \ 206*8fb009dcSAndroid Build Coastguard Worker } 207*8fb009dcSAndroid Build Coastguard Worker 208*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ 209*8fb009dcSAndroid Build Coastguard Worker static int pem_write_bio_##name##_i2d(const void *x, unsigned char **outp) { \ 210*8fb009dcSAndroid Build Coastguard Worker return i2d_##asn1((const type *)x, outp); \ 211*8fb009dcSAndroid Build Coastguard Worker } \ 212*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_bio_##name( \ 213*8fb009dcSAndroid Build Coastguard Worker BIO *bp, type *x, const EVP_CIPHER *enc, const unsigned char *pass, \ 214*8fb009dcSAndroid Build Coastguard Worker int pass_len, pem_password_cb *cb, void *u) { \ 215*8fb009dcSAndroid Build Coastguard Worker return PEM_ASN1_write_bio(pem_write_bio_##name##_i2d, str, bp, (void *)x, \ 216*8fb009dcSAndroid Build Coastguard Worker enc, pass, pass_len, cb, u); \ 217*8fb009dcSAndroid Build Coastguard Worker } 218*8fb009dcSAndroid Build Coastguard Worker 219*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_write(name, type, str, asn1) \ 220*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ 221*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_write_fp(name, type, str, asn1) 222*8fb009dcSAndroid Build Coastguard Worker 223*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ 224*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ 225*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) 226*8fb009dcSAndroid Build Coastguard Worker 227*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ 228*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ 229*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) 230*8fb009dcSAndroid Build Coastguard Worker 231*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ 232*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ 233*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) 234*8fb009dcSAndroid Build Coastguard Worker 235*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_read(name, type, str, asn1) \ 236*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ 237*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_read_fp(name, type, str, asn1) 238*8fb009dcSAndroid Build Coastguard Worker 239*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_rw(name, type, str, asn1) \ 240*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_read(name, type, str, asn1) \ 241*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_write(name, type, str, asn1) 242*8fb009dcSAndroid Build Coastguard Worker 243*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ 244*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_read(name, type, str, asn1) \ 245*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_write_const(name, type, str, asn1) 246*8fb009dcSAndroid Build Coastguard Worker 247*8fb009dcSAndroid Build Coastguard Worker #define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ 248*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_read(name, type, str, asn1) \ 249*8fb009dcSAndroid Build Coastguard Worker IMPLEMENT_PEM_write_cb(name, type, str, asn1) 250*8fb009dcSAndroid Build Coastguard Worker 251*8fb009dcSAndroid Build Coastguard Worker // These are the same except they are for the declarations 252*8fb009dcSAndroid Build Coastguard Worker 253*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_read_fp(name, type) \ 254*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT type *PEM_read_##name(FILE *fp, type **x, \ 255*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, void *u); 256*8fb009dcSAndroid Build Coastguard Worker 257*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_write_fp(name, type) \ 258*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_##name(FILE *fp, type *x); 259*8fb009dcSAndroid Build Coastguard Worker 260*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_write_fp_const(name, type) \ 261*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_##name(FILE *fp, const type *x); 262*8fb009dcSAndroid Build Coastguard Worker 263*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_write_cb_fp(name, type) \ 264*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_##name( \ 265*8fb009dcSAndroid Build Coastguard Worker FILE *fp, type *x, const EVP_CIPHER *enc, const unsigned char *pass, \ 266*8fb009dcSAndroid Build Coastguard Worker int pass_len, pem_password_cb *cb, void *u); 267*8fb009dcSAndroid Build Coastguard Worker 268*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_read_bio(name, type) \ 269*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT type *PEM_read_bio_##name(BIO *bp, type **x, \ 270*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, void *u); 271*8fb009dcSAndroid Build Coastguard Worker 272*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_write_bio(name, type) \ 273*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, type *x); 274*8fb009dcSAndroid Build Coastguard Worker 275*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_write_bio_const(name, type) \ 276*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, const type *x); 277*8fb009dcSAndroid Build Coastguard Worker 278*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_write_cb_bio(name, type) \ 279*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_bio_##name( \ 280*8fb009dcSAndroid Build Coastguard Worker BIO *bp, type *x, const EVP_CIPHER *enc, const unsigned char *pass, \ 281*8fb009dcSAndroid Build Coastguard Worker int pass_len, pem_password_cb *cb, void *u); 282*8fb009dcSAndroid Build Coastguard Worker 283*8fb009dcSAndroid Build Coastguard Worker 284*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_write(name, type) \ 285*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_write_bio(name, type) \ 286*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_write_fp(name, type) 287*8fb009dcSAndroid Build Coastguard Worker 288*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_write_const(name, type) \ 289*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_write_bio_const(name, type) \ 290*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_write_fp_const(name, type) 291*8fb009dcSAndroid Build Coastguard Worker 292*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_write_cb(name, type) \ 293*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_write_cb_bio(name, type) \ 294*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_write_cb_fp(name, type) 295*8fb009dcSAndroid Build Coastguard Worker 296*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_read(name, type) \ 297*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_read_bio(name, type) \ 298*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_read_fp(name, type) 299*8fb009dcSAndroid Build Coastguard Worker 300*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_rw(name, type) \ 301*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_read(name, type) \ 302*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_write(name, type) 303*8fb009dcSAndroid Build Coastguard Worker 304*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_rw_const(name, type) \ 305*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_read(name, type) \ 306*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_write_const(name, type) 307*8fb009dcSAndroid Build Coastguard Worker 308*8fb009dcSAndroid Build Coastguard Worker #define DECLARE_PEM_rw_cb(name, type) \ 309*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_read(name, type) \ 310*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_write_cb(name, type) 311*8fb009dcSAndroid Build Coastguard Worker 312*8fb009dcSAndroid Build Coastguard Worker // "userdata": new with OpenSSL 0.9.4 313*8fb009dcSAndroid Build Coastguard Worker typedef int pem_password_cb(char *buf, int size, int rwflag, void *userdata); 314*8fb009dcSAndroid Build Coastguard Worker 315*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_get_EVP_CIPHER_INFO(char *header, 316*8fb009dcSAndroid Build Coastguard Worker EVP_CIPHER_INFO *cipher); 317*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, 318*8fb009dcSAndroid Build Coastguard Worker long *len, pem_password_cb *callback, void *u); 319*8fb009dcSAndroid Build Coastguard Worker 320*8fb009dcSAndroid Build Coastguard Worker // PEM_read_bio reads from |bp|, until the next PEM block. If one is found, it 321*8fb009dcSAndroid Build Coastguard Worker // returns one and sets |*name|, |*header|, and |*data| to newly-allocated 322*8fb009dcSAndroid Build Coastguard Worker // buffers containing the PEM type, the header block, and the decoded data, 323*8fb009dcSAndroid Build Coastguard Worker // respectively. |*name| and |*header| are NUL-terminated C strings, while 324*8fb009dcSAndroid Build Coastguard Worker // |*data| has |*len| bytes. The caller must release each of |*name|, |*header|, 325*8fb009dcSAndroid Build Coastguard Worker // and |*data| with |OPENSSL_free| when done. If no PEM block is found, this 326*8fb009dcSAndroid Build Coastguard Worker // function returns zero and pushes |PEM_R_NO_START_LINE| to the error queue. If 327*8fb009dcSAndroid Build Coastguard Worker // one is found, but there is an error decoding it, it returns zero and pushes 328*8fb009dcSAndroid Build Coastguard Worker // some other error to the error queue. 329*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_read_bio(BIO *bp, char **name, char **header, 330*8fb009dcSAndroid Build Coastguard Worker unsigned char **data, long *len); 331*8fb009dcSAndroid Build Coastguard Worker 332*8fb009dcSAndroid Build Coastguard Worker // PEM_write_bio writes a PEM block to |bp|, containing |len| bytes from |data| 333*8fb009dcSAndroid Build Coastguard Worker // as data. |name| and |hdr| are NUL-terminated C strings containing the PEM 334*8fb009dcSAndroid Build Coastguard Worker // type and header block, respectively. This function returns zero on error and 335*8fb009dcSAndroid Build Coastguard Worker // the number of bytes written on success. 336*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_bio(BIO *bp, const char *name, const char *hdr, 337*8fb009dcSAndroid Build Coastguard Worker const unsigned char *data, long len); 338*8fb009dcSAndroid Build Coastguard Worker 339*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_bytes_read_bio(unsigned char **pdata, long *plen, 340*8fb009dcSAndroid Build Coastguard Worker char **pnm, const char *name, BIO *bp, 341*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, void *u); 342*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, 343*8fb009dcSAndroid Build Coastguard Worker BIO *bp, void **x, pem_password_cb *cb, 344*8fb009dcSAndroid Build Coastguard Worker void *u); 345*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, 346*8fb009dcSAndroid Build Coastguard Worker BIO *bp, void *x, const EVP_CIPHER *enc, 347*8fb009dcSAndroid Build Coastguard Worker const unsigned char *pass, int pass_len, 348*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, void *u); 349*8fb009dcSAndroid Build Coastguard Worker 350*8fb009dcSAndroid Build Coastguard Worker // PEM_X509_INFO_read_bio reads PEM blocks from |bp| and decodes any 351*8fb009dcSAndroid Build Coastguard Worker // certificates, CRLs, and private keys found. It returns a 352*8fb009dcSAndroid Build Coastguard Worker // |STACK_OF(X509_INFO)| structure containing the results, or NULL on error. 353*8fb009dcSAndroid Build Coastguard Worker // 354*8fb009dcSAndroid Build Coastguard Worker // If |sk| is NULL, the result on success will be a newly-allocated 355*8fb009dcSAndroid Build Coastguard Worker // |STACK_OF(X509_INFO)| structure which should be released with 356*8fb009dcSAndroid Build Coastguard Worker // |sk_X509_INFO_pop_free| and |X509_INFO_free| when done. 357*8fb009dcSAndroid Build Coastguard Worker // 358*8fb009dcSAndroid Build Coastguard Worker // If |sk| is non-NULL, it appends the results to |sk| instead and returns |sk| 359*8fb009dcSAndroid Build Coastguard Worker // on success. In this case, the caller retains ownership of |sk| in both 360*8fb009dcSAndroid Build Coastguard Worker // success and failure. 361*8fb009dcSAndroid Build Coastguard Worker // 362*8fb009dcSAndroid Build Coastguard Worker // WARNING: If the input contains "TRUSTED CERTIFICATE" PEM blocks, this 363*8fb009dcSAndroid Build Coastguard Worker // function parses auxiliary properties as in |d2i_X509_AUX|. Passing untrusted 364*8fb009dcSAndroid Build Coastguard Worker // input to this function allows an attacker to influence those properties. See 365*8fb009dcSAndroid Build Coastguard Worker // |d2i_X509_AUX| for details. 366*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio( 367*8fb009dcSAndroid Build Coastguard Worker BIO *bp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u); 368*8fb009dcSAndroid Build Coastguard Worker 369*8fb009dcSAndroid Build Coastguard Worker // PEM_X509_INFO_read behaves like |PEM_X509_INFO_read_bio| but reads from a 370*8fb009dcSAndroid Build Coastguard Worker // |FILE|. 371*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, 372*8fb009dcSAndroid Build Coastguard Worker STACK_OF(X509_INFO) *sk, 373*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, 374*8fb009dcSAndroid Build Coastguard Worker void *u); 375*8fb009dcSAndroid Build Coastguard Worker 376*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_read(FILE *fp, char **name, char **header, 377*8fb009dcSAndroid Build Coastguard Worker unsigned char **data, long *len); 378*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write(FILE *fp, const char *name, const char *hdr, 379*8fb009dcSAndroid Build Coastguard Worker const unsigned char *data, long len); 380*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, 381*8fb009dcSAndroid Build Coastguard Worker void **x, pem_password_cb *cb, void *u); 382*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, 383*8fb009dcSAndroid Build Coastguard Worker void *x, const EVP_CIPHER *enc, 384*8fb009dcSAndroid Build Coastguard Worker const unsigned char *pass, int pass_len, 385*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *callback, void *u); 386*8fb009dcSAndroid Build Coastguard Worker 387*8fb009dcSAndroid Build Coastguard Worker // PEM_def_callback treats |userdata| as a string and copies it into |buf|, 388*8fb009dcSAndroid Build Coastguard Worker // assuming its |size| is sufficient. Returns the length of the string, or 0 389*8fb009dcSAndroid Build Coastguard Worker // if there is not enough room. If either |buf| or |userdata| is NULL, 0 is 390*8fb009dcSAndroid Build Coastguard Worker // returned. Note that this is different from OpenSSL, which prompts for a 391*8fb009dcSAndroid Build Coastguard Worker // password. 392*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_def_callback(char *buf, int size, int rwflag, 393*8fb009dcSAndroid Build Coastguard Worker void *userdata); 394*8fb009dcSAndroid Build Coastguard Worker 395*8fb009dcSAndroid Build Coastguard Worker 396*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw(X509, X509) 397*8fb009dcSAndroid Build Coastguard Worker 398*8fb009dcSAndroid Build Coastguard Worker // TODO(crbug.com/boringssl/426): When documenting these, copy the warning 399*8fb009dcSAndroid Build Coastguard Worker // about auxiliary properties from |PEM_X509_INFO_read_bio|. 400*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw(X509_AUX, X509) 401*8fb009dcSAndroid Build Coastguard Worker 402*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw(X509_REQ, X509_REQ) 403*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) 404*8fb009dcSAndroid Build Coastguard Worker 405*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw(X509_CRL, X509_CRL) 406*8fb009dcSAndroid Build Coastguard Worker 407*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw(PKCS7, PKCS7) 408*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw(PKCS8, X509_SIG) 409*8fb009dcSAndroid Build Coastguard Worker 410*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) 411*8fb009dcSAndroid Build Coastguard Worker 412*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) 413*8fb009dcSAndroid Build Coastguard Worker 414*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw_const(RSAPublicKey, RSA) 415*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw(RSA_PUBKEY, RSA) 416*8fb009dcSAndroid Build Coastguard Worker 417*8fb009dcSAndroid Build Coastguard Worker #ifndef OPENSSL_NO_DSA 418*8fb009dcSAndroid Build Coastguard Worker 419*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) 420*8fb009dcSAndroid Build Coastguard Worker 421*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw(DSA_PUBKEY, DSA) 422*8fb009dcSAndroid Build Coastguard Worker 423*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw_const(DSAparams, DSA) 424*8fb009dcSAndroid Build Coastguard Worker 425*8fb009dcSAndroid Build Coastguard Worker #endif 426*8fb009dcSAndroid Build Coastguard Worker 427*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) 428*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) 429*8fb009dcSAndroid Build Coastguard Worker 430*8fb009dcSAndroid Build Coastguard Worker 431*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw_const(DHparams, DH) 432*8fb009dcSAndroid Build Coastguard Worker 433*8fb009dcSAndroid Build Coastguard Worker 434*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) 435*8fb009dcSAndroid Build Coastguard Worker 436*8fb009dcSAndroid Build Coastguard Worker DECLARE_PEM_rw(PUBKEY, EVP_PKEY) 437*8fb009dcSAndroid Build Coastguard Worker 438*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, const EVP_PKEY *x, 439*8fb009dcSAndroid Build Coastguard Worker int nid, const char *pass, 440*8fb009dcSAndroid Build Coastguard Worker int pass_len, 441*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, 442*8fb009dcSAndroid Build Coastguard Worker void *u); 443*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_bio_PKCS8PrivateKey(BIO *bp, const EVP_PKEY *x, 444*8fb009dcSAndroid Build Coastguard Worker const EVP_CIPHER *enc, 445*8fb009dcSAndroid Build Coastguard Worker const char *pass, int pass_len, 446*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, void *u); 447*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int i2d_PKCS8PrivateKey_bio(BIO *bp, const EVP_PKEY *x, 448*8fb009dcSAndroid Build Coastguard Worker const EVP_CIPHER *enc, 449*8fb009dcSAndroid Build Coastguard Worker const char *pass, int pass_len, 450*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, void *u); 451*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, const EVP_PKEY *x, 452*8fb009dcSAndroid Build Coastguard Worker int nid, const char *pass, 453*8fb009dcSAndroid Build Coastguard Worker int pass_len, 454*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, void *u); 455*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, 456*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, void *u); 457*8fb009dcSAndroid Build Coastguard Worker 458*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int i2d_PKCS8PrivateKey_fp(FILE *fp, const EVP_PKEY *x, 459*8fb009dcSAndroid Build Coastguard Worker const EVP_CIPHER *enc, 460*8fb009dcSAndroid Build Coastguard Worker const char *pass, int pass_len, 461*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, void *u); 462*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, const EVP_PKEY *x, 463*8fb009dcSAndroid Build Coastguard Worker int nid, const char *pass, 464*8fb009dcSAndroid Build Coastguard Worker int pass_len, pem_password_cb *cb, 465*8fb009dcSAndroid Build Coastguard Worker void *u); 466*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_PKCS8PrivateKey_nid(FILE *fp, const EVP_PKEY *x, 467*8fb009dcSAndroid Build Coastguard Worker int nid, const char *pass, 468*8fb009dcSAndroid Build Coastguard Worker int pass_len, 469*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, void *u); 470*8fb009dcSAndroid Build Coastguard Worker 471*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, 472*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cb, void *u); 473*8fb009dcSAndroid Build Coastguard Worker 474*8fb009dcSAndroid Build Coastguard Worker OPENSSL_EXPORT int PEM_write_PKCS8PrivateKey(FILE *fp, const EVP_PKEY *x, 475*8fb009dcSAndroid Build Coastguard Worker const EVP_CIPHER *enc, 476*8fb009dcSAndroid Build Coastguard Worker const char *pass, int pass_len, 477*8fb009dcSAndroid Build Coastguard Worker pem_password_cb *cd, void *u); 478*8fb009dcSAndroid Build Coastguard Worker 479*8fb009dcSAndroid Build Coastguard Worker 480*8fb009dcSAndroid Build Coastguard Worker #ifdef __cplusplus 481*8fb009dcSAndroid Build Coastguard Worker } // extern "C" 482*8fb009dcSAndroid Build Coastguard Worker #endif 483*8fb009dcSAndroid Build Coastguard Worker 484*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_BAD_BASE64_DECODE 100 485*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_BAD_DECRYPT 101 486*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_BAD_END_LINE 102 487*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_BAD_IV_CHARS 103 488*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_BAD_PASSWORD_READ 104 489*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_CIPHER_IS_NULL 105 490*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 106 491*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_NOT_DEK_INFO 107 492*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_NOT_ENCRYPTED 108 493*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_NOT_PROC_TYPE 109 494*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_NO_START_LINE 110 495*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_READ_KEY 111 496*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_SHORT_HEADER 112 497*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_UNSUPPORTED_CIPHER 113 498*8fb009dcSAndroid Build Coastguard Worker #define PEM_R_UNSUPPORTED_ENCRYPTION 114 499*8fb009dcSAndroid Build Coastguard Worker 500*8fb009dcSAndroid Build Coastguard Worker #endif // OPENSSL_HEADER_PEM_H 501