summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/pkcs12/pkcs12.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/pkcs12/pkcs12.h')
-rw-r--r--src/lib/libcrypto/pkcs12/pkcs12.h57
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
63extern "C" { 66extern "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;
108PKCS7 *authsafes; 108PKCS7 *authsafes;
109} PKCS12; 109} PKCS12;
110 110
111PREDECLARE_STACK_OF(PKCS12_SAFEBAG)
112
111typedef struct { 113typedef struct {
112ASN1_OBJECT *type; 114ASN1_OBJECT *type;
113union { 115union {
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;
120STACK_OF(X509_ATTRIBUTE) *attrib; 122STACK_OF(X509_ATTRIBUTE) *attrib;
121ASN1_TYPE *rest; 123ASN1_TYPE *rest;
122} PKCS12_SAFEBAG; 124} PKCS12_SAFEBAG;
123 125
126DECLARE_STACK_OF(PKCS12_SAFEBAG)
127DECLARE_ASN1_SET_OF(PKCS12_SAFEBAG)
128DECLARE_PKCS12_STACK_OF(PKCS12_SAFEBAG)
129
124typedef struct pkcs12_bag_st { 130typedef struct pkcs12_bag_st {
125ASN1_OBJECT *type; 131ASN1_OBJECT *type;
126union { 132union {
@@ -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) \
143PKCS12_pack_safebag ((char *)(x509), i2d_X509, NID_x509Certificate, NID_certBag) 149PKCS12_pack_safebag((char *)(x509), i2d_X509, NID_x509Certificate, NID_certBag)
144 150
145#define M_PKCS12_x509crl2certbag(crl) \ 151#define M_PKCS12_x509crl2certbag(crl) \
146PKCS12_pack_safebag ((char *)(crl), i2d_X509CRL, NID_x509Crl, NID_crlBag) 152PKCS12_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) \
160ASN1_seq_unpack ((p7)->d.data->data, p7->d.data->length, \ 166ASN1_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) \
164ASN1_seq_pack((safes), (int (*)())i2d_PKCS7,\ 170ASN1_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) \
168ASN1_seq_unpack((p12)->authsafes->d.data->data, \ 174ASN1_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,\ 178PKCS12_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);
208PKCS7 *PKCS12_pack_p7data(STACK *sk); 213PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk);
209PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, 214PKCS7 *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);
212int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, int namelen); 217int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, int namelen);
213int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, 218int 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);
223char *PKCS12_decrypt_d2i(X509_ALGOR *algor, char *(*d2i)(), 228char *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);
226ASN1_STRING *PKCS12_i2d_encrypt(X509_ALGOR *algor, int (*i2d)(), 231ASN1_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,