1*de0e0e4dSAntonio Huete Jimenez /* $OpenBSD: pkcs12.h,v 1.27 2022/09/11 17:30:13 tb Exp $ */ 2f5b1c8a1SJohn Marino /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 3f5b1c8a1SJohn Marino * project 1999. 4f5b1c8a1SJohn Marino */ 5f5b1c8a1SJohn Marino /* ==================================================================== 6f5b1c8a1SJohn Marino * Copyright (c) 1999 The OpenSSL Project. All rights reserved. 7f5b1c8a1SJohn Marino * 8f5b1c8a1SJohn Marino * Redistribution and use in source and binary forms, with or without 9f5b1c8a1SJohn Marino * modification, are permitted provided that the following conditions 10f5b1c8a1SJohn Marino * are met: 11f5b1c8a1SJohn Marino * 12f5b1c8a1SJohn Marino * 1. Redistributions of source code must retain the above copyright 13f5b1c8a1SJohn Marino * notice, this list of conditions and the following disclaimer. 14f5b1c8a1SJohn Marino * 15f5b1c8a1SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 16f5b1c8a1SJohn Marino * notice, this list of conditions and the following disclaimer in 17f5b1c8a1SJohn Marino * the documentation and/or other materials provided with the 18f5b1c8a1SJohn Marino * distribution. 19f5b1c8a1SJohn Marino * 20f5b1c8a1SJohn Marino * 3. All advertising materials mentioning features or use of this 21f5b1c8a1SJohn Marino * software must display the following acknowledgment: 22f5b1c8a1SJohn Marino * "This product includes software developed by the OpenSSL Project 23f5b1c8a1SJohn Marino * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 24f5b1c8a1SJohn Marino * 25f5b1c8a1SJohn Marino * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 26f5b1c8a1SJohn Marino * endorse or promote products derived from this software without 27f5b1c8a1SJohn Marino * prior written permission. For written permission, please contact 28f5b1c8a1SJohn Marino * licensing@OpenSSL.org. 29f5b1c8a1SJohn Marino * 30f5b1c8a1SJohn Marino * 5. Products derived from this software may not be called "OpenSSL" 31f5b1c8a1SJohn Marino * nor may "OpenSSL" appear in their names without prior written 32f5b1c8a1SJohn Marino * permission of the OpenSSL Project. 33f5b1c8a1SJohn Marino * 34f5b1c8a1SJohn Marino * 6. Redistributions of any form whatsoever must retain the following 35f5b1c8a1SJohn Marino * acknowledgment: 36f5b1c8a1SJohn Marino * "This product includes software developed by the OpenSSL Project 37f5b1c8a1SJohn Marino * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 38f5b1c8a1SJohn Marino * 39f5b1c8a1SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 40f5b1c8a1SJohn Marino * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 41f5b1c8a1SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 42f5b1c8a1SJohn Marino * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 43f5b1c8a1SJohn Marino * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 44f5b1c8a1SJohn Marino * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 45f5b1c8a1SJohn Marino * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 46f5b1c8a1SJohn Marino * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47f5b1c8a1SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 48f5b1c8a1SJohn Marino * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 49f5b1c8a1SJohn Marino * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 50f5b1c8a1SJohn Marino * OF THE POSSIBILITY OF SUCH DAMAGE. 51f5b1c8a1SJohn Marino * ==================================================================== 52f5b1c8a1SJohn Marino * 53f5b1c8a1SJohn Marino * This product includes cryptographic software written by Eric Young 54f5b1c8a1SJohn Marino * (eay@cryptsoft.com). This product includes software written by Tim 55f5b1c8a1SJohn Marino * Hudson (tjh@cryptsoft.com). 56f5b1c8a1SJohn Marino * 57f5b1c8a1SJohn Marino */ 58f5b1c8a1SJohn Marino 59f5b1c8a1SJohn Marino #ifndef HEADER_PKCS12_H 60f5b1c8a1SJohn Marino #define HEADER_PKCS12_H 61f5b1c8a1SJohn Marino 62f5b1c8a1SJohn Marino #include <openssl/bio.h> 63f5b1c8a1SJohn Marino #include <openssl/x509.h> 64f5b1c8a1SJohn Marino 65f5b1c8a1SJohn Marino #ifdef __cplusplus 66f5b1c8a1SJohn Marino extern "C" { 67f5b1c8a1SJohn Marino #endif 68f5b1c8a1SJohn Marino 69f5b1c8a1SJohn Marino #define PKCS12_KEY_ID 1 70f5b1c8a1SJohn Marino #define PKCS12_IV_ID 2 71f5b1c8a1SJohn Marino #define PKCS12_MAC_ID 3 72f5b1c8a1SJohn Marino 73f5b1c8a1SJohn Marino /* Default iteration count */ 74f5b1c8a1SJohn Marino #ifndef PKCS12_DEFAULT_ITER 75f5b1c8a1SJohn Marino #define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER 76f5b1c8a1SJohn Marino #endif 77f5b1c8a1SJohn Marino 78f5b1c8a1SJohn Marino #define PKCS12_MAC_KEY_LENGTH 20 79f5b1c8a1SJohn Marino 80f5b1c8a1SJohn Marino #define PKCS12_SALT_LEN 8 81f5b1c8a1SJohn Marino 82f5b1c8a1SJohn Marino /* Uncomment out next line for unicode password and names, otherwise ASCII */ 83f5b1c8a1SJohn Marino 84f5b1c8a1SJohn Marino /*#define PBE_UNICODE*/ 85f5b1c8a1SJohn Marino 86f5b1c8a1SJohn Marino #ifdef PBE_UNICODE 87f5b1c8a1SJohn Marino #define PKCS12_key_gen PKCS12_key_gen_uni 88f5b1c8a1SJohn Marino #define PKCS12_add_friendlyname PKCS12_add_friendlyname_uni 89f5b1c8a1SJohn Marino #else 90f5b1c8a1SJohn Marino #define PKCS12_key_gen PKCS12_key_gen_asc 91f5b1c8a1SJohn Marino #define PKCS12_add_friendlyname PKCS12_add_friendlyname_asc 92f5b1c8a1SJohn Marino #endif 93f5b1c8a1SJohn Marino 94f5b1c8a1SJohn Marino /* MS key usage constants */ 95f5b1c8a1SJohn Marino 96f5b1c8a1SJohn Marino #define KEY_EX 0x10 97f5b1c8a1SJohn Marino #define KEY_SIG 0x80 98f5b1c8a1SJohn Marino 99*de0e0e4dSAntonio Huete Jimenez typedef struct PKCS12_MAC_DATA_st PKCS12_MAC_DATA; 100f5b1c8a1SJohn Marino 101*de0e0e4dSAntonio Huete Jimenez typedef struct PKCS12_st PKCS12; 102f5b1c8a1SJohn Marino 103*de0e0e4dSAntonio Huete Jimenez typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; 104f5b1c8a1SJohn Marino 105f5b1c8a1SJohn Marino DECLARE_STACK_OF(PKCS12_SAFEBAG) 106f5b1c8a1SJohn Marino DECLARE_PKCS12_STACK_OF(PKCS12_SAFEBAG) 107f5b1c8a1SJohn Marino 108*de0e0e4dSAntonio Huete Jimenez typedef struct pkcs12_bag_st PKCS12_BAGS; 109f5b1c8a1SJohn Marino 110f5b1c8a1SJohn Marino #define PKCS12_ERROR 0 111f5b1c8a1SJohn Marino #define PKCS12_OK 1 112f5b1c8a1SJohn Marino 11372c33676SMaxim Ag #ifndef LIBRESSL_INTERNAL 11472c33676SMaxim Ag 115f5b1c8a1SJohn Marino /* Compatibility macros */ 116f5b1c8a1SJohn Marino 117f5b1c8a1SJohn Marino #define M_PKCS12_x5092certbag PKCS12_x5092certbag 118f5b1c8a1SJohn Marino #define M_PKCS12_x509crl2certbag PKCS12_x509crl2certbag 119f5b1c8a1SJohn Marino 120f5b1c8a1SJohn Marino #define M_PKCS12_certbag2x509 PKCS12_certbag2x509 121f5b1c8a1SJohn Marino #define M_PKCS12_certbag2x509crl PKCS12_certbag2x509crl 122f5b1c8a1SJohn Marino 123f5b1c8a1SJohn Marino #define M_PKCS12_unpack_p7data PKCS12_unpack_p7data 124f5b1c8a1SJohn Marino #define M_PKCS12_pack_authsafes PKCS12_pack_authsafes 125f5b1c8a1SJohn Marino #define M_PKCS12_unpack_authsafes PKCS12_unpack_authsafes 126f5b1c8a1SJohn Marino #define M_PKCS12_unpack_p7encdata PKCS12_unpack_p7encdata 127f5b1c8a1SJohn Marino 128f5b1c8a1SJohn Marino #define M_PKCS12_decrypt_skey PKCS12_decrypt_skey 129f5b1c8a1SJohn Marino #define M_PKCS8_decrypt PKCS8_decrypt 130f5b1c8a1SJohn Marino 13172c33676SMaxim Ag #endif /* !LIBRESSL_INTERNAL */ 13272c33676SMaxim Ag 133*de0e0e4dSAntonio Huete Jimenez #define M_PKCS12_bag_type PKCS12_bag_type 134*de0e0e4dSAntonio Huete Jimenez #define M_PKCS12_cert_bag_type PKCS12_cert_bag_type 135*de0e0e4dSAntonio Huete Jimenez #define M_PKCS12_crl_bag_type PKCS12_cert_bag_type 136f5b1c8a1SJohn Marino 137*de0e0e4dSAntonio Huete Jimenez #define PKCS12_bag_type PKCS12_SAFEBAG_get_nid 138*de0e0e4dSAntonio Huete Jimenez #define PKCS12_cert_bag_type PKCS12_SAFEBAG_get_bag_nid 139f5b1c8a1SJohn Marino 140*de0e0e4dSAntonio Huete Jimenez #define PKCS12_certbag2x509 PKCS12_SAFEBAG_get1_cert 141*de0e0e4dSAntonio Huete Jimenez #define PKCS12_certbag2x509crl PKCS12_SAFEBAG_get1_crl 142f5b1c8a1SJohn Marino 143*de0e0e4dSAntonio Huete Jimenez #define PKCS12_x5092certbag PKCS12_SAFEBAG_create_cert 144*de0e0e4dSAntonio Huete Jimenez #define PKCS12_x509crl2certbag PKCS12_SAFEBAG_create_crl 145*de0e0e4dSAntonio Huete Jimenez #define PKCS12_MAKE_KEYBAG PKCS12_SAFEBAG_create0_p8inf 146*de0e0e4dSAntonio Huete Jimenez #define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt 147f5b1c8a1SJohn Marino 148*de0e0e4dSAntonio Huete Jimenez const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, 149*de0e0e4dSAntonio Huete Jimenez int attr_nid); 150*de0e0e4dSAntonio Huete Jimenez const STACK_OF(X509_ATTRIBUTE) * 151*de0e0e4dSAntonio Huete Jimenez PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag); 152*de0e0e4dSAntonio Huete Jimenez int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); 153*de0e0e4dSAntonio Huete Jimenez int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); 154*de0e0e4dSAntonio Huete Jimenez 155*de0e0e4dSAntonio Huete Jimenez X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); 156*de0e0e4dSAntonio Huete Jimenez X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); 157*de0e0e4dSAntonio Huete Jimenez 158*de0e0e4dSAntonio Huete Jimenez ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); 159*de0e0e4dSAntonio Huete Jimenez int PKCS12_mac_present(const PKCS12 *p12); 160*de0e0e4dSAntonio Huete Jimenez void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, const X509_ALGOR **pmacalg, 161*de0e0e4dSAntonio Huete Jimenez const ASN1_OCTET_STRING **psalt, const ASN1_INTEGER **piter, 162*de0e0e4dSAntonio Huete Jimenez const PKCS12 *p12); 163*de0e0e4dSAntonio Huete Jimenez 164*de0e0e4dSAntonio Huete Jimenez PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); 165*de0e0e4dSAntonio Huete Jimenez PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); 166*de0e0e4dSAntonio Huete Jimenez PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); 167*de0e0e4dSAntonio Huete Jimenez PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); 168*de0e0e4dSAntonio Huete Jimenez PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, 169*de0e0e4dSAntonio Huete Jimenez const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, 170*de0e0e4dSAntonio Huete Jimenez PKCS8_PRIV_KEY_INFO *p8); 171*de0e0e4dSAntonio Huete Jimenez 172*de0e0e4dSAntonio Huete Jimenez const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag); 173*de0e0e4dSAntonio Huete Jimenez const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); 174*de0e0e4dSAntonio Huete Jimenez const STACK_OF(PKCS12_SAFEBAG) * 175*de0e0e4dSAntonio Huete Jimenez PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag); 176*de0e0e4dSAntonio Huete Jimenez const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); 177f5b1c8a1SJohn Marino 178f5b1c8a1SJohn Marino PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, 179f5b1c8a1SJohn Marino int nid1, int nid2); 18072c33676SMaxim Ag PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, 181f5b1c8a1SJohn Marino int passlen); 18272c33676SMaxim Ag PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, 18372c33676SMaxim Ag const char *pass, int passlen); 184f5b1c8a1SJohn Marino X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, 185f5b1c8a1SJohn Marino const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, 186f5b1c8a1SJohn Marino PKCS8_PRIV_KEY_INFO *p8); 187f5b1c8a1SJohn Marino PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); 188f5b1c8a1SJohn Marino STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); 189f5b1c8a1SJohn Marino PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, 190f5b1c8a1SJohn Marino unsigned char *salt, int saltlen, int iter, STACK_OF(PKCS12_SAFEBAG) *bags); 191f5b1c8a1SJohn Marino STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, 192f5b1c8a1SJohn Marino int passlen); 193f5b1c8a1SJohn Marino 194f5b1c8a1SJohn Marino int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); 19572c33676SMaxim Ag STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12); 196f5b1c8a1SJohn Marino 197f5b1c8a1SJohn Marino int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, 198f5b1c8a1SJohn Marino int namelen); 199f5b1c8a1SJohn Marino int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, 200f5b1c8a1SJohn Marino int namelen); 201f5b1c8a1SJohn Marino int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, 202f5b1c8a1SJohn Marino int namelen); 203f5b1c8a1SJohn Marino int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, const unsigned char *name, 204f5b1c8a1SJohn Marino int namelen); 205f5b1c8a1SJohn Marino int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); 20672c33676SMaxim Ag ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, 20772c33676SMaxim Ag int attr_nid); 208f5b1c8a1SJohn Marino char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); 20972c33676SMaxim Ag unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, const char *pass, 21072c33676SMaxim Ag int passlen, const unsigned char *in, int inlen, unsigned char **data, 211f5b1c8a1SJohn Marino int *datalen, int en_de); 21272c33676SMaxim Ag void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, 21372c33676SMaxim Ag const char *pass, int passlen, const ASN1_OCTET_STRING *oct, int zbuf); 214f5b1c8a1SJohn Marino ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, 215f5b1c8a1SJohn Marino const ASN1_ITEM *it, const char *pass, int passlen, void *obj, int zbuf); 216f5b1c8a1SJohn Marino PKCS12 *PKCS12_init(int mode); 217f5b1c8a1SJohn Marino int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, 218f5b1c8a1SJohn Marino int saltlen, int id, int iter, int n, unsigned char *out, 219f5b1c8a1SJohn Marino const EVP_MD *md_type); 220f5b1c8a1SJohn Marino int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, 221f5b1c8a1SJohn Marino int saltlen, int id, int iter, int n, unsigned char *out, 222f5b1c8a1SJohn Marino const EVP_MD *md_type); 223f5b1c8a1SJohn Marino int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, 224f5b1c8a1SJohn Marino ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md_type, 225f5b1c8a1SJohn Marino int en_de); 226f5b1c8a1SJohn Marino int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, 227f5b1c8a1SJohn Marino unsigned char *mac, unsigned int *maclen); 228f5b1c8a1SJohn Marino int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); 229f5b1c8a1SJohn Marino int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, 230f5b1c8a1SJohn Marino unsigned char *salt, int saltlen, int iter, 231f5b1c8a1SJohn Marino const EVP_MD *md_type); 232f5b1c8a1SJohn Marino int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, 233f5b1c8a1SJohn Marino int saltlen, const EVP_MD *md_type); 234f5b1c8a1SJohn Marino unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, 235f5b1c8a1SJohn Marino unsigned char **uni, int *unilen); 23672c33676SMaxim Ag char *OPENSSL_uni2asc(const unsigned char *uni, int unilen); 237f5b1c8a1SJohn Marino 23872c33676SMaxim Ag PKCS12 *PKCS12_new(void); 23972c33676SMaxim Ag void PKCS12_free(PKCS12 *a); 24072c33676SMaxim Ag PKCS12 *d2i_PKCS12(PKCS12 **a, const unsigned char **in, long len); 24172c33676SMaxim Ag int i2d_PKCS12(PKCS12 *a, unsigned char **out); 24272c33676SMaxim Ag extern const ASN1_ITEM PKCS12_it; 24372c33676SMaxim Ag PKCS12_MAC_DATA *PKCS12_MAC_DATA_new(void); 24472c33676SMaxim Ag void PKCS12_MAC_DATA_free(PKCS12_MAC_DATA *a); 24572c33676SMaxim Ag PKCS12_MAC_DATA *d2i_PKCS12_MAC_DATA(PKCS12_MAC_DATA **a, const unsigned char **in, long len); 24672c33676SMaxim Ag int i2d_PKCS12_MAC_DATA(PKCS12_MAC_DATA *a, unsigned char **out); 24772c33676SMaxim Ag extern const ASN1_ITEM PKCS12_MAC_DATA_it; 24872c33676SMaxim Ag PKCS12_SAFEBAG *PKCS12_SAFEBAG_new(void); 24972c33676SMaxim Ag void PKCS12_SAFEBAG_free(PKCS12_SAFEBAG *a); 25072c33676SMaxim Ag PKCS12_SAFEBAG *d2i_PKCS12_SAFEBAG(PKCS12_SAFEBAG **a, const unsigned char **in, long len); 25172c33676SMaxim Ag int i2d_PKCS12_SAFEBAG(PKCS12_SAFEBAG *a, unsigned char **out); 25272c33676SMaxim Ag extern const ASN1_ITEM PKCS12_SAFEBAG_it; 25372c33676SMaxim Ag PKCS12_BAGS *PKCS12_BAGS_new(void); 25472c33676SMaxim Ag void PKCS12_BAGS_free(PKCS12_BAGS *a); 25572c33676SMaxim Ag PKCS12_BAGS *d2i_PKCS12_BAGS(PKCS12_BAGS **a, const unsigned char **in, long len); 25672c33676SMaxim Ag int i2d_PKCS12_BAGS(PKCS12_BAGS *a, unsigned char **out); 25772c33676SMaxim Ag extern const ASN1_ITEM PKCS12_BAGS_it; 258f5b1c8a1SJohn Marino 25972c33676SMaxim Ag extern const ASN1_ITEM PKCS12_SAFEBAGS_it; 26072c33676SMaxim Ag extern const ASN1_ITEM PKCS12_AUTHSAFES_it; 261f5b1c8a1SJohn Marino 262f5b1c8a1SJohn Marino void PKCS12_PBE_add(void); 263f5b1c8a1SJohn Marino int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, 264f5b1c8a1SJohn Marino STACK_OF(X509) **ca); 26572c33676SMaxim Ag PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, 26672c33676SMaxim Ag X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter, 267f5b1c8a1SJohn Marino int mac_iter, int keytype); 268f5b1c8a1SJohn Marino 269f5b1c8a1SJohn Marino PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); 270f5b1c8a1SJohn Marino PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, EVP_PKEY *key, 27172c33676SMaxim Ag int key_usage, int iter, int key_nid, const char *pass); 272f5b1c8a1SJohn Marino int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, 27372c33676SMaxim Ag int safe_nid, int iter, const char *pass); 274f5b1c8a1SJohn Marino PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); 275f5b1c8a1SJohn Marino 276f5b1c8a1SJohn Marino int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); 277f5b1c8a1SJohn Marino int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); 278f5b1c8a1SJohn Marino PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); 279f5b1c8a1SJohn Marino PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); 28072c33676SMaxim Ag int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); 281f5b1c8a1SJohn Marino 282f5b1c8a1SJohn Marino void ERR_load_PKCS12_strings(void); 283f5b1c8a1SJohn Marino 284f5b1c8a1SJohn Marino /* Error codes for the PKCS12 functions. */ 285f5b1c8a1SJohn Marino 286f5b1c8a1SJohn Marino /* Function codes. */ 287f5b1c8a1SJohn Marino #define PKCS12_F_PARSE_BAG 129 288f5b1c8a1SJohn Marino #define PKCS12_F_PARSE_BAGS 103 289f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_ADD_FRIENDLYNAME 100 290f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_ASC 127 291f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI 102 292f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_ADD_LOCALKEYID 104 293f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_CREATE 105 294f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_GEN_MAC 107 295f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_INIT 109 296f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 297f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 298f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 299f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_KEY_GEN_ASC 110 300f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_KEY_GEN_UNI 111 301f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_MAKE_KEYBAG 112 302f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_MAKE_SHKEYBAG 113 303f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_NEWPASS 128 304f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_PACK_P7DATA 114 305f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 306f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_PARSE 118 307f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_PBE_CRYPT 119 308f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 309f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_SETUP_MAC 122 310f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_SET_MAC 123 311f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 312f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_UNPACK_P7DATA 131 313f5b1c8a1SJohn Marino #define PKCS12_F_PKCS12_VERIFY_MAC 126 314f5b1c8a1SJohn Marino #define PKCS12_F_PKCS8_ADD_KEYUSAGE 124 315f5b1c8a1SJohn Marino #define PKCS12_F_PKCS8_ENCRYPT 125 316f5b1c8a1SJohn Marino 317f5b1c8a1SJohn Marino /* Reason codes. */ 318f5b1c8a1SJohn Marino #define PKCS12_R_CANT_PACK_STRUCTURE 100 319f5b1c8a1SJohn Marino #define PKCS12_R_CONTENT_TYPE_NOT_DATA 121 320f5b1c8a1SJohn Marino #define PKCS12_R_DECODE_ERROR 101 321f5b1c8a1SJohn Marino #define PKCS12_R_ENCODE_ERROR 102 322f5b1c8a1SJohn Marino #define PKCS12_R_ENCRYPT_ERROR 103 323f5b1c8a1SJohn Marino #define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 324f5b1c8a1SJohn Marino #define PKCS12_R_INVALID_NULL_ARGUMENT 104 325f5b1c8a1SJohn Marino #define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 326f5b1c8a1SJohn Marino #define PKCS12_R_IV_GEN_ERROR 106 327f5b1c8a1SJohn Marino #define PKCS12_R_KEY_GEN_ERROR 107 328f5b1c8a1SJohn Marino #define PKCS12_R_MAC_ABSENT 108 329f5b1c8a1SJohn Marino #define PKCS12_R_MAC_GENERATION_ERROR 109 330f5b1c8a1SJohn Marino #define PKCS12_R_MAC_SETUP_ERROR 110 331f5b1c8a1SJohn Marino #define PKCS12_R_MAC_STRING_SET_ERROR 111 332f5b1c8a1SJohn Marino #define PKCS12_R_MAC_VERIFY_ERROR 112 333f5b1c8a1SJohn Marino #define PKCS12_R_MAC_VERIFY_FAILURE 113 334f5b1c8a1SJohn Marino #define PKCS12_R_PARSE_ERROR 114 335f5b1c8a1SJohn Marino #define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 336f5b1c8a1SJohn Marino #define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 337f5b1c8a1SJohn Marino #define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 338f5b1c8a1SJohn Marino #define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 339f5b1c8a1SJohn Marino #define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 340f5b1c8a1SJohn Marino 341f5b1c8a1SJohn Marino #ifdef __cplusplus 342f5b1c8a1SJohn Marino } 343f5b1c8a1SJohn Marino #endif 344f5b1c8a1SJohn Marino #endif 345