diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/pkcs12/pkcs12.h | 57 |
1 files changed, 31 insertions, 26 deletions
diff --git a/src/lib/libcrypto/pkcs12/pkcs12.h b/src/lib/libcrypto/pkcs12/pkcs12.h index dad356c00f..502fceff95 100644 --- a/src/lib/libcrypto/pkcs12/pkcs12.h +++ b/src/lib/libcrypto/pkcs12/pkcs12.h | |||
| @@ -59,13 +59,13 @@ | |||
| 59 | #ifndef HEADER_PKCS12_H | 59 | #ifndef HEADER_PKCS12_H |
| 60 | #define HEADER_PKCS12_H | 60 | #define HEADER_PKCS12_H |
| 61 | 61 | ||
| 62 | #include <openssl/bio.h> | ||
| 63 | #include <openssl/x509.h> | ||
| 64 | |||
| 62 | #ifdef __cplusplus | 65 | #ifdef __cplusplus |
| 63 | extern "C" { | 66 | extern "C" { |
| 64 | #endif | 67 | #endif |
| 65 | 68 | ||
| 66 | #include <openssl/bio.h> | ||
| 67 | #include <openssl/x509.h> | ||
| 68 | |||
| 69 | #define PKCS12_KEY_ID 1 | 69 | #define PKCS12_KEY_ID 1 |
| 70 | #define PKCS12_IV_ID 2 | 70 | #define PKCS12_IV_ID 2 |
| 71 | #define PKCS12_MAC_ID 3 | 71 | #define PKCS12_MAC_ID 3 |
| @@ -108,19 +108,25 @@ PKCS12_MAC_DATA *mac; | |||
| 108 | PKCS7 *authsafes; | 108 | PKCS7 *authsafes; |
| 109 | } PKCS12; | 109 | } PKCS12; |
| 110 | 110 | ||
| 111 | PREDECLARE_STACK_OF(PKCS12_SAFEBAG) | ||
| 112 | |||
| 111 | typedef struct { | 113 | typedef struct { |
| 112 | ASN1_OBJECT *type; | 114 | ASN1_OBJECT *type; |
| 113 | union { | 115 | union { |
| 114 | struct pkcs12_bag_st *bag; /* secret, crl and certbag */ | 116 | struct pkcs12_bag_st *bag; /* secret, crl and certbag */ |
| 115 | struct pkcs8_priv_key_info_st *keybag; /* keybag */ | 117 | struct pkcs8_priv_key_info_st *keybag; /* keybag */ |
| 116 | X509_SIG *shkeybag; /* shrouded key bag */ | 118 | X509_SIG *shkeybag; /* shrouded key bag */ |
| 117 | STACK /* PKCS12_SAFEBAG */ *safes; | 119 | STACK_OF(PKCS12_SAFEBAG) *safes; |
| 118 | ASN1_TYPE *other; | 120 | ASN1_TYPE *other; |
| 119 | }value; | 121 | }value; |
| 120 | STACK_OF(X509_ATTRIBUTE) *attrib; | 122 | STACK_OF(X509_ATTRIBUTE) *attrib; |
| 121 | ASN1_TYPE *rest; | 123 | ASN1_TYPE *rest; |
| 122 | } PKCS12_SAFEBAG; | 124 | } PKCS12_SAFEBAG; |
| 123 | 125 | ||
| 126 | DECLARE_STACK_OF(PKCS12_SAFEBAG) | ||
| 127 | DECLARE_ASN1_SET_OF(PKCS12_SAFEBAG) | ||
| 128 | DECLARE_PKCS12_STACK_OF(PKCS12_SAFEBAG) | ||
| 129 | |||
| 124 | typedef struct pkcs12_bag_st { | 130 | typedef struct pkcs12_bag_st { |
| 125 | ASN1_OBJECT *type; | 131 | ASN1_OBJECT *type; |
| 126 | union { | 132 | union { |
| @@ -140,50 +146,49 @@ union { | |||
| 140 | #define M_PKCS12_crl_bag_type M_PKCS12_cert_bag_type | 146 | #define M_PKCS12_crl_bag_type M_PKCS12_cert_bag_type |
| 141 | 147 | ||
| 142 | #define M_PKCS12_x5092certbag(x509) \ | 148 | #define M_PKCS12_x5092certbag(x509) \ |
| 143 | PKCS12_pack_safebag ((char *)(x509), i2d_X509, NID_x509Certificate, NID_certBag) | 149 | PKCS12_pack_safebag((char *)(x509), i2d_X509, NID_x509Certificate, NID_certBag) |
| 144 | 150 | ||
| 145 | #define M_PKCS12_x509crl2certbag(crl) \ | 151 | #define M_PKCS12_x509crl2certbag(crl) \ |
| 146 | PKCS12_pack_safebag ((char *)(crl), i2d_X509CRL, NID_x509Crl, NID_crlBag) | 152 | PKCS12_pack_safebag((char *)(crl), i2d_X509CRL, NID_x509Crl, NID_crlBag) |
| 147 | 153 | ||
| 148 | #define M_PKCS12_certbag2x509(bg) \ | 154 | #define M_PKCS12_certbag2x509(bg) \ |
| 149 | (X509 *) ASN1_unpack_string ((bg)->value.bag->value.octet, \ | 155 | (X509 *) ASN1_unpack_string((bg)->value.bag->value.octet, \ |
| 150 | (char *(*)())d2i_X509) | 156 | (char *(*)())d2i_X509) |
| 151 | 157 | ||
| 152 | #define M_PKCS12_certbag2x509crl(bg) \ | 158 | #define M_PKCS12_certbag2x509crl(bg) \ |
| 153 | (X509CRL *) ASN1_unpack_string ((bg)->value.bag->value.octet, \ | 159 | (X509CRL *) ASN1_unpack_string((bg)->value.bag->value.octet, \ |
| 154 | (char *(*)())d2i_X509CRL) | 160 | (char *(*)())d2i_X509CRL) |
| 155 | 161 | ||
| 156 | /*#define M_PKCS12_pkcs82rsa(p8) \ | 162 | /*#define M_PKCS12_pkcs82rsa(p8) \ |
| 157 | (RSA *) ASN1_unpack_string ((p8)->pkey, (char *(*)())d2i_RSAPrivateKey)*/ | 163 | (RSA *) ASN1_unpack_string((p8)->pkey, (char *(*)())d2i_RSAPrivateKey)*/ |
| 158 | 164 | ||
| 159 | #define M_PKCS12_unpack_p7data(p7) \ | 165 | #define M_PKCS12_unpack_p7data(p7) \ |
| 160 | ASN1_seq_unpack ((p7)->d.data->data, p7->d.data->length, \ | 166 | ASN1_seq_unpack_PKCS12_SAFEBAG((p7)->d.data->data, p7->d.data->length, \ |
| 161 | (char *(*)())d2i_PKCS12_SAFEBAG, PKCS12_SAFEBAG_free) | 167 | d2i_PKCS12_SAFEBAG, PKCS12_SAFEBAG_free) |
| 162 | 168 | ||
| 163 | #define M_PKCS12_pack_authsafes(p12, safes) \ | 169 | #define M_PKCS12_pack_authsafes(p12, safes) \ |
| 164 | ASN1_seq_pack((safes), (int (*)())i2d_PKCS7,\ | 170 | ASN1_seq_pack_PKCS7((safes), i2d_PKCS7,\ |
| 165 | &(p12)->authsafes->d.data->data, &(p12)->authsafes->d.data->length) | 171 | &(p12)->authsafes->d.data->data, &(p12)->authsafes->d.data->length) |
| 166 | 172 | ||
| 167 | #define M_PKCS12_unpack_authsafes(p12) \ | 173 | #define M_PKCS12_unpack_authsafes(p12) \ |
| 168 | ASN1_seq_unpack((p12)->authsafes->d.data->data, \ | 174 | ASN1_seq_unpack_PKCS7((p12)->authsafes->d.data->data, \ |
| 169 | (p12)->authsafes->d.data->length, (char *(*)())d2i_PKCS7, \ | 175 | (p12)->authsafes->d.data->length, d2i_PKCS7, PKCS7_free) |
| 170 | PKCS7_free) | ||
| 171 | 176 | ||
| 172 | #define M_PKCS12_unpack_p7encdata(p7, pass, passlen) \ | 177 | #define M_PKCS12_unpack_p7encdata(p7, pass, passlen) \ |
| 173 | (STACK *) PKCS12_decrypt_d2i ((p7)->d.encrypted->enc_data->algorithm,\ | 178 | PKCS12_decrypt_d2i_PKCS12_SAFEBAG((p7)->d.encrypted->enc_data->algorithm,\ |
| 174 | (char *(*)())d2i_PKCS12_SAFEBAG, PKCS12_SAFEBAG_free, \ | 179 | d2i_PKCS12_SAFEBAG, PKCS12_SAFEBAG_free, \ |
| 175 | (pass), (passlen), \ | 180 | (pass), (passlen), \ |
| 176 | (p7)->d.encrypted->enc_data->enc_data, 3) | 181 | (p7)->d.encrypted->enc_data->enc_data, 3) |
| 177 | 182 | ||
| 178 | #define M_PKCS12_decrypt_skey(bag, pass, passlen) \ | 183 | #define M_PKCS12_decrypt_skey(bag, pass, passlen) \ |
| 179 | (PKCS8_PRIV_KEY_INFO *) PKCS12_decrypt_d2i ((bag)->value.shkeybag->algor, \ | 184 | (PKCS8_PRIV_KEY_INFO *) PKCS12_decrypt_d2i((bag)->value.shkeybag->algor, \ |
| 180 | (char *(*)())d2i_PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_free, \ | 185 | (char *(*)())d2i_PKCS8_PRIV_KEY_INFO, (void (*)(void *))PKCS8_PRIV_KEY_INFO_free, \ |
| 181 | (pass), (passlen), \ | 186 | (pass), (passlen), \ |
| 182 | (bag)->value.shkeybag->digest, 2) | 187 | (bag)->value.shkeybag->digest, 2) |
| 183 | 188 | ||
| 184 | #define M_PKCS8_decrypt(p8, pass, passlen) \ | 189 | #define M_PKCS8_decrypt(p8, pass, passlen) \ |
| 185 | (PKCS8_PRIV_KEY_INFO *) PKCS12_decrypt_d2i ((p8)->algor, \ | 190 | (PKCS8_PRIV_KEY_INFO *) PKCS12_decrypt_d2i((p8)->algor, \ |
| 186 | (char *(*)())d2i_PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_free,\ | 191 | (char *(*)())d2i_PKCS8_PRIV_KEY_INFO, (void (*)(void *))PKCS8_PRIV_KEY_INFO_free,\ |
| 187 | (pass), (passlen), (p8)->digest, 2) | 192 | (pass), (passlen), (p8)->digest, 2) |
| 188 | 193 | ||
| 189 | #define PKCS12_get_attr(bag, attr_nid) \ | 194 | #define PKCS12_get_attr(bag, attr_nid) \ |
| @@ -205,10 +210,10 @@ PKCS12_SAFEBAG *PKCS12_MAKE_SHKEYBAG(int pbe_nid, const char *pass, | |||
| 205 | int passlen, unsigned char *salt, | 210 | int passlen, unsigned char *salt, |
| 206 | int saltlen, int iter, | 211 | int saltlen, int iter, |
| 207 | PKCS8_PRIV_KEY_INFO *p8); | 212 | PKCS8_PRIV_KEY_INFO *p8); |
| 208 | PKCS7 *PKCS12_pack_p7data(STACK *sk); | 213 | PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); |
| 209 | PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, | 214 | PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, |
| 210 | unsigned char *salt, int saltlen, int iter, | 215 | unsigned char *salt, int saltlen, int iter, |
| 211 | STACK *bags); | 216 | STACK_OF(PKCS12_SAFEBAG) *bags); |
| 212 | int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, int namelen); | 217 | int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, int namelen); |
| 213 | int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, | 218 | int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, |
| 214 | int namelen); | 219 | int namelen); |
| @@ -221,7 +226,7 @@ unsigned char *PKCS12_pbe_crypt(X509_ALGOR *algor, const char *pass, | |||
| 221 | int passlen, unsigned char *in, int inlen, | 226 | int passlen, unsigned char *in, int inlen, |
| 222 | unsigned char **data, int *datalen, int en_de); | 227 | unsigned char **data, int *datalen, int en_de); |
| 223 | char *PKCS12_decrypt_d2i(X509_ALGOR *algor, char *(*d2i)(), | 228 | char *PKCS12_decrypt_d2i(X509_ALGOR *algor, char *(*d2i)(), |
| 224 | void (*free_func)(), const char *pass, int passlen, | 229 | void (*free_func)(void *), const char *pass, int passlen, |
| 225 | ASN1_STRING *oct, int seq); | 230 | ASN1_STRING *oct, int seq); |
| 226 | ASN1_STRING *PKCS12_i2d_encrypt(X509_ALGOR *algor, int (*i2d)(), | 231 | ASN1_STRING *PKCS12_i2d_encrypt(X509_ALGOR *algor, int (*i2d)(), |
| 227 | const char *pass, int passlen, char *obj, | 232 | const char *pass, int passlen, char *obj, |
