summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/pkcs12
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/pkcs12')
-rw-r--r--src/lib/libcrypto/pkcs12/p12_add.c6
-rw-r--r--src/lib/libcrypto/pkcs12/p12_asn.c10
-rw-r--r--src/lib/libcrypto/pkcs12/p12_decr.c7
-rw-r--r--src/lib/libcrypto/pkcs12/p12_key.c5
-rw-r--r--src/lib/libcrypto/pkcs12/p12_mutl.c3
-rw-r--r--src/lib/libcrypto/pkcs12/p12_p8d.c3
-rw-r--r--src/lib/libcrypto/pkcs12/p12_p8e.c3
-rw-r--r--src/lib/libcrypto/pkcs12/pkcs12.h71
-rw-r--r--src/lib/libcrypto/pkcs12/pkcs12_local.h75
9 files changed, 88 insertions, 95 deletions
diff --git a/src/lib/libcrypto/pkcs12/p12_add.c b/src/lib/libcrypto/pkcs12/p12_add.c
index 8ce1fede74..dd72c99985 100644
--- a/src/lib/libcrypto/pkcs12/p12_add.c
+++ b/src/lib/libcrypto/pkcs12/p12_add.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: p12_add.c,v 1.23 2024/01/25 13:44:08 tb Exp $ */ 1/* $OpenBSD: p12_add.c,v 1.24 2024/03/02 10:15:16 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 1999. 3 * project 1999.
4 */ 4 */
@@ -90,7 +90,6 @@ PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, int nid1, int nid2)
90 safebag->type = OBJ_nid2obj(nid2); 90 safebag->type = OBJ_nid2obj(nid2);
91 return safebag; 91 return safebag;
92} 92}
93LCRYPTO_ALIAS(PKCS12_item_pack_safebag);
94 93
95/* Turn a stack of SAFEBAGS into a PKCS#7 data Contentinfo */ 94/* Turn a stack of SAFEBAGS into a PKCS#7 data Contentinfo */
96PKCS7 * 95PKCS7 *
@@ -118,7 +117,6 @@ err:
118 PKCS7_free(p7); 117 PKCS7_free(p7);
119 return NULL; 118 return NULL;
120} 119}
121LCRYPTO_ALIAS(PKCS12_pack_p7data);
122 120
123/* Unpack SAFEBAGS from PKCS#7 data ContentInfo */ 121/* Unpack SAFEBAGS from PKCS#7 data ContentInfo */
124STACK_OF(PKCS12_SAFEBAG) * 122STACK_OF(PKCS12_SAFEBAG) *
@@ -181,7 +179,6 @@ err:
181 PKCS7_free(p7); 179 PKCS7_free(p7);
182 return NULL; 180 return NULL;
183} 181}
184LCRYPTO_ALIAS(PKCS12_pack_p7encdata);
185 182
186STACK_OF(PKCS12_SAFEBAG) * 183STACK_OF(PKCS12_SAFEBAG) *
187PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, int passlen) 184PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, int passlen)
@@ -214,7 +211,6 @@ PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes)
214 return 1; 211 return 1;
215 return 0; 212 return 0;
216} 213}
217LCRYPTO_ALIAS(PKCS12_pack_authsafes);
218 214
219STACK_OF(PKCS7) * 215STACK_OF(PKCS7) *
220PKCS12_unpack_authsafes(const PKCS12 *p12) 216PKCS12_unpack_authsafes(const PKCS12 *p12)
diff --git a/src/lib/libcrypto/pkcs12/p12_asn.c b/src/lib/libcrypto/pkcs12/p12_asn.c
index a9decccb5b..e6078050be 100644
--- a/src/lib/libcrypto/pkcs12/p12_asn.c
+++ b/src/lib/libcrypto/pkcs12/p12_asn.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: p12_asn.c,v 1.14 2023/02/16 08:38:17 tb Exp $ */ 1/* $OpenBSD: p12_asn.c,v 1.15 2024/03/02 10:15:16 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 1999. 3 * project 1999.
4 */ 4 */
@@ -170,28 +170,24 @@ d2i_PKCS12_MAC_DATA(PKCS12_MAC_DATA **a, const unsigned char **in, long len)
170 return (PKCS12_MAC_DATA *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, 170 return (PKCS12_MAC_DATA *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
171 &PKCS12_MAC_DATA_it); 171 &PKCS12_MAC_DATA_it);
172} 172}
173LCRYPTO_ALIAS(d2i_PKCS12_MAC_DATA);
174 173
175int 174int
176i2d_PKCS12_MAC_DATA(PKCS12_MAC_DATA *a, unsigned char **out) 175i2d_PKCS12_MAC_DATA(PKCS12_MAC_DATA *a, unsigned char **out)
177{ 176{
178 return ASN1_item_i2d((ASN1_VALUE *)a, out, &PKCS12_MAC_DATA_it); 177 return ASN1_item_i2d((ASN1_VALUE *)a, out, &PKCS12_MAC_DATA_it);
179} 178}
180LCRYPTO_ALIAS(i2d_PKCS12_MAC_DATA);
181 179
182PKCS12_MAC_DATA * 180PKCS12_MAC_DATA *
183PKCS12_MAC_DATA_new(void) 181PKCS12_MAC_DATA_new(void)
184{ 182{
185 return (PKCS12_MAC_DATA *)ASN1_item_new(&PKCS12_MAC_DATA_it); 183 return (PKCS12_MAC_DATA *)ASN1_item_new(&PKCS12_MAC_DATA_it);
186} 184}
187LCRYPTO_ALIAS(PKCS12_MAC_DATA_new);
188 185
189void 186void
190PKCS12_MAC_DATA_free(PKCS12_MAC_DATA *a) 187PKCS12_MAC_DATA_free(PKCS12_MAC_DATA *a)
191{ 188{
192 ASN1_item_free((ASN1_VALUE *)a, &PKCS12_MAC_DATA_it); 189 ASN1_item_free((ASN1_VALUE *)a, &PKCS12_MAC_DATA_it);
193} 190}
194LCRYPTO_ALIAS(PKCS12_MAC_DATA_free);
195 191
196static const ASN1_TEMPLATE bag_default_tt = { 192static const ASN1_TEMPLATE bag_default_tt = {
197 .flags = ASN1_TFLG_EXPLICIT, 193 .flags = ASN1_TFLG_EXPLICIT,
@@ -280,28 +276,24 @@ d2i_PKCS12_BAGS(PKCS12_BAGS **a, const unsigned char **in, long len)
280 return (PKCS12_BAGS *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, 276 return (PKCS12_BAGS *)ASN1_item_d2i((ASN1_VALUE **)a, in, len,
281 &PKCS12_BAGS_it); 277 &PKCS12_BAGS_it);
282} 278}
283LCRYPTO_ALIAS(d2i_PKCS12_BAGS);
284 279
285int 280int
286i2d_PKCS12_BAGS(PKCS12_BAGS *a, unsigned char **out) 281i2d_PKCS12_BAGS(PKCS12_BAGS *a, unsigned char **out)
287{ 282{
288 return ASN1_item_i2d((ASN1_VALUE *)a, out, &PKCS12_BAGS_it); 283 return ASN1_item_i2d((ASN1_VALUE *)a, out, &PKCS12_BAGS_it);
289} 284}
290LCRYPTO_ALIAS(i2d_PKCS12_BAGS);
291 285
292PKCS12_BAGS * 286PKCS12_BAGS *
293PKCS12_BAGS_new(void) 287PKCS12_BAGS_new(void)
294{ 288{
295 return (PKCS12_BAGS *)ASN1_item_new(&PKCS12_BAGS_it); 289 return (PKCS12_BAGS *)ASN1_item_new(&PKCS12_BAGS_it);
296} 290}
297LCRYPTO_ALIAS(PKCS12_BAGS_new);
298 291
299void 292void
300PKCS12_BAGS_free(PKCS12_BAGS *a) 293PKCS12_BAGS_free(PKCS12_BAGS *a)
301{ 294{
302 ASN1_item_free((ASN1_VALUE *)a, &PKCS12_BAGS_it); 295 ASN1_item_free((ASN1_VALUE *)a, &PKCS12_BAGS_it);
303} 296}
304LCRYPTO_ALIAS(PKCS12_BAGS_free);
305 297
306static const ASN1_TEMPLATE safebag_default_tt = { 298static const ASN1_TEMPLATE safebag_default_tt = {
307 .flags = ASN1_TFLG_EXPLICIT, 299 .flags = ASN1_TFLG_EXPLICIT,
diff --git a/src/lib/libcrypto/pkcs12/p12_decr.c b/src/lib/libcrypto/pkcs12/p12_decr.c
index 04818acd13..907d4e52a6 100644
--- a/src/lib/libcrypto/pkcs12/p12_decr.c
+++ b/src/lib/libcrypto/pkcs12/p12_decr.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: p12_decr.c,v 1.25 2024/02/18 15:44:10 tb Exp $ */ 1/* $OpenBSD: p12_decr.c,v 1.26 2024/03/02 10:15:16 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 1999. 3 * project 1999.
4 */ 4 */
@@ -116,7 +116,6 @@ err:
116 return out; 116 return out;
117 117
118} 118}
119LCRYPTO_ALIAS(PKCS12_pbe_crypt);
120 119
121/* Decrypt an OCTET STRING and decode ASN1 structure 120/* Decrypt an OCTET STRING and decode ASN1 structure
122 * if zbuf set zero buffer after use. 121 * if zbuf set zero buffer after use.
@@ -145,7 +144,6 @@ PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it,
145 free(out); 144 free(out);
146 return ret; 145 return ret;
147} 146}
148LCRYPTO_ALIAS(PKCS12_item_decrypt_d2i);
149 147
150/* Encode ASN1 structure and encrypt, return OCTET STRING 148/* Encode ASN1 structure and encrypt, return OCTET STRING
151 * if zbuf set zero encoding. 149 * if zbuf set zero encoding.
@@ -184,6 +182,3 @@ err:
184 ASN1_OCTET_STRING_free(oct); 182 ASN1_OCTET_STRING_free(oct);
185 return NULL; 183 return NULL;
186} 184}
187LCRYPTO_ALIAS(PKCS12_item_i2d_encrypt);
188
189IMPLEMENT_PKCS12_STACK_OF(PKCS7)
diff --git a/src/lib/libcrypto/pkcs12/p12_key.c b/src/lib/libcrypto/pkcs12/p12_key.c
index 8812f1c06a..78e7d0450e 100644
--- a/src/lib/libcrypto/pkcs12/p12_key.c
+++ b/src/lib/libcrypto/pkcs12/p12_key.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: p12_key.c,v 1.34 2023/02/16 08:38:17 tb Exp $ */ 1/* $OpenBSD: p12_key.c,v 1.35 2024/03/02 10:15:16 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 1999. 3 * project 1999.
4 */ 4 */
@@ -64,6 +64,7 @@
64#include <openssl/pkcs12.h> 64#include <openssl/pkcs12.h>
65 65
66#include "evp_local.h" 66#include "evp_local.h"
67#include "pkcs12_local.h"
67 68
68/* PKCS12 compatible key/IV generation */ 69/* PKCS12 compatible key/IV generation */
69#ifndef min 70#ifndef min
@@ -93,7 +94,6 @@ PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt,
93 freezero(unipass, uniplen); 94 freezero(unipass, uniplen);
94 return ret; 95 return ret;
95} 96}
96LCRYPTO_ALIAS(PKCS12_key_gen_asc);
97 97
98int 98int
99PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, 99PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
@@ -194,4 +194,3 @@ PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
194 194
195 return ret; 195 return ret;
196} 196}
197LCRYPTO_ALIAS(PKCS12_key_gen_uni);
diff --git a/src/lib/libcrypto/pkcs12/p12_mutl.c b/src/lib/libcrypto/pkcs12/p12_mutl.c
index c71ed735ea..2a728294af 100644
--- a/src/lib/libcrypto/pkcs12/p12_mutl.c
+++ b/src/lib/libcrypto/pkcs12/p12_mutl.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: p12_mutl.c,v 1.36 2024/01/25 13:44:08 tb Exp $ */ 1/* $OpenBSD: p12_mutl.c,v 1.37 2024/03/02 10:15:16 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 1999. 3 * project 1999.
4 */ 4 */
@@ -263,5 +263,4 @@ PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, int saltlen,
263 263
264 return 1; 264 return 1;
265} 265}
266LCRYPTO_ALIAS(PKCS12_setup_mac);
267#endif 266#endif
diff --git a/src/lib/libcrypto/pkcs12/p12_p8d.c b/src/lib/libcrypto/pkcs12/p12_p8d.c
index dd5e8d9875..d4874e3b73 100644
--- a/src/lib/libcrypto/pkcs12/p12_p8d.c
+++ b/src/lib/libcrypto/pkcs12/p12_p8d.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: p12_p8d.c,v 1.11 2023/02/16 08:38:17 tb Exp $ */ 1/* $OpenBSD: p12_p8d.c,v 1.12 2024/03/02 10:15:16 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2001. 3 * project 2001.
4 */ 4 */
@@ -60,6 +60,7 @@
60 60
61#include <openssl/pkcs12.h> 61#include <openssl/pkcs12.h>
62 62
63#include "pkcs12_local.h"
63#include "x509_local.h" 64#include "x509_local.h"
64 65
65PKCS8_PRIV_KEY_INFO * 66PKCS8_PRIV_KEY_INFO *
diff --git a/src/lib/libcrypto/pkcs12/p12_p8e.c b/src/lib/libcrypto/pkcs12/p12_p8e.c
index 87c4be56a3..bf61593266 100644
--- a/src/lib/libcrypto/pkcs12/p12_p8e.c
+++ b/src/lib/libcrypto/pkcs12/p12_p8e.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: p12_p8e.c,v 1.12 2023/02/16 08:38:17 tb Exp $ */ 1/* $OpenBSD: p12_p8e.c,v 1.13 2024/03/02 10:15:16 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2001. 3 * project 2001.
4 */ 4 */
@@ -61,6 +61,7 @@
61#include <openssl/err.h> 61#include <openssl/err.h>
62#include <openssl/pkcs12.h> 62#include <openssl/pkcs12.h>
63 63
64#include "pkcs12_local.h"
64#include "x509_local.h" 65#include "x509_local.h"
65 66
66X509_SIG * 67X509_SIG *
diff --git a/src/lib/libcrypto/pkcs12/pkcs12.h b/src/lib/libcrypto/pkcs12/pkcs12.h
index 44dbb38153..962403976d 100644
--- a/src/lib/libcrypto/pkcs12/pkcs12.h
+++ b/src/lib/libcrypto/pkcs12/pkcs12.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: pkcs12.h,v 1.27 2022/09/11 17:30:13 tb Exp $ */ 1/* $OpenBSD: pkcs12.h,v 1.28 2024/03/02 10:15:16 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 1999. 3 * project 1999.
4 */ 4 */
@@ -161,22 +161,12 @@ void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, const X509_ALGOR **pmacalg,
161 const ASN1_OCTET_STRING **psalt, const ASN1_INTEGER **piter, 161 const ASN1_OCTET_STRING **psalt, const ASN1_INTEGER **piter,
162 const PKCS12 *p12); 162 const PKCS12 *p12);
163 163
164PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509);
165PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl);
166PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8);
167PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8);
168PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid,
169 const char *pass, int passlen, unsigned char *salt, int saltlen, int iter,
170 PKCS8_PRIV_KEY_INFO *p8);
171
172const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag); 164const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag);
173const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); 165const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag);
174const STACK_OF(PKCS12_SAFEBAG) * 166const STACK_OF(PKCS12_SAFEBAG) *
175 PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag); 167 PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag);
176const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); 168const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag);
177 169
178PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it,
179 int nid1, int nid2);
180PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, 170PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass,
181 int passlen); 171 int passlen);
182PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, 172PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag,
@@ -184,53 +174,19 @@ PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag,
184X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, 174X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher,
185 const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, 175 const char *pass, int passlen, unsigned char *salt, int saltlen, int iter,
186 PKCS8_PRIV_KEY_INFO *p8); 176 PKCS8_PRIV_KEY_INFO *p8);
187PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); 177
188STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); 178STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7);
189PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen,
190 unsigned char *salt, int saltlen, int iter, STACK_OF(PKCS12_SAFEBAG) *bags);
191STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, 179STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass,
192 int passlen); 180 int passlen);
193
194int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes);
195STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12); 181STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12);
196 182
197int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name,
198 int namelen);
199int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name,
200 int namelen);
201int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name,
202 int namelen);
203int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, const unsigned char *name,
204 int namelen);
205int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); 183int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage);
206ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs,
207 int attr_nid);
208char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); 184char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag);
209unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, const char *pass,
210 int passlen, const unsigned char *in, int inlen, unsigned char **data,
211 int *datalen, int en_de);
212void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it,
213 const char *pass, int passlen, const ASN1_OCTET_STRING *oct, int zbuf);
214ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor,
215 const ASN1_ITEM *it, const char *pass, int passlen, void *obj, int zbuf);
216PKCS12 *PKCS12_init(int mode);
217int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt,
218 int saltlen, int id, int iter, int n, unsigned char *out,
219 const EVP_MD *md_type);
220int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
221 int saltlen, int id, int iter, int n, unsigned char *out,
222 const EVP_MD *md_type);
223int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
224 ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md_type,
225 int en_de);
226int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen,
227 unsigned char *mac, unsigned int *maclen);
228int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); 185int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen);
229int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, 186int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen,
230 unsigned char *salt, int saltlen, int iter, 187 unsigned char *salt, int saltlen, int iter,
231 const EVP_MD *md_type); 188 const EVP_MD *md_type);
232int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, 189
233 int saltlen, const EVP_MD *md_type);
234unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, 190unsigned char *OPENSSL_asc2uni(const char *asc, int asclen,
235 unsigned char **uni, int *unilen); 191 unsigned char **uni, int *unilen);
236char *OPENSSL_uni2asc(const unsigned char *uni, int unilen); 192char *OPENSSL_uni2asc(const unsigned char *uni, int unilen);
@@ -240,24 +196,12 @@ void PKCS12_free(PKCS12 *a);
240PKCS12 *d2i_PKCS12(PKCS12 **a, const unsigned char **in, long len); 196PKCS12 *d2i_PKCS12(PKCS12 **a, const unsigned char **in, long len);
241int i2d_PKCS12(PKCS12 *a, unsigned char **out); 197int i2d_PKCS12(PKCS12 *a, unsigned char **out);
242extern const ASN1_ITEM PKCS12_it; 198extern const ASN1_ITEM PKCS12_it;
243PKCS12_MAC_DATA *PKCS12_MAC_DATA_new(void); 199
244void PKCS12_MAC_DATA_free(PKCS12_MAC_DATA *a);
245PKCS12_MAC_DATA *d2i_PKCS12_MAC_DATA(PKCS12_MAC_DATA **a, const unsigned char **in, long len);
246int i2d_PKCS12_MAC_DATA(PKCS12_MAC_DATA *a, unsigned char **out);
247extern const ASN1_ITEM PKCS12_MAC_DATA_it;
248PKCS12_SAFEBAG *PKCS12_SAFEBAG_new(void); 200PKCS12_SAFEBAG *PKCS12_SAFEBAG_new(void);
249void PKCS12_SAFEBAG_free(PKCS12_SAFEBAG *a); 201void PKCS12_SAFEBAG_free(PKCS12_SAFEBAG *a);
250PKCS12_SAFEBAG *d2i_PKCS12_SAFEBAG(PKCS12_SAFEBAG **a, const unsigned char **in, long len); 202PKCS12_SAFEBAG *d2i_PKCS12_SAFEBAG(PKCS12_SAFEBAG **a, const unsigned char **in, long len);
251int i2d_PKCS12_SAFEBAG(PKCS12_SAFEBAG *a, unsigned char **out); 203int i2d_PKCS12_SAFEBAG(PKCS12_SAFEBAG *a, unsigned char **out);
252extern const ASN1_ITEM PKCS12_SAFEBAG_it; 204extern const ASN1_ITEM PKCS12_SAFEBAG_it;
253PKCS12_BAGS *PKCS12_BAGS_new(void);
254void PKCS12_BAGS_free(PKCS12_BAGS *a);
255PKCS12_BAGS *d2i_PKCS12_BAGS(PKCS12_BAGS **a, const unsigned char **in, long len);
256int i2d_PKCS12_BAGS(PKCS12_BAGS *a, unsigned char **out);
257extern const ASN1_ITEM PKCS12_BAGS_it;
258
259extern const ASN1_ITEM PKCS12_SAFEBAGS_it;
260extern const ASN1_ITEM PKCS12_AUTHSAFES_it;
261 205
262void PKCS12_PBE_add(void); 206void PKCS12_PBE_add(void);
263int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, 207int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert,
@@ -266,13 +210,6 @@ PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey,
266 X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter, 210 X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter,
267 int mac_iter, int keytype); 211 int mac_iter, int keytype);
268 212
269PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert);
270PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, EVP_PKEY *key,
271 int key_usage, int iter, int key_nid, const char *pass);
272int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags,
273 int safe_nid, int iter, const char *pass);
274PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid);
275
276int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); 213int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12);
277int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); 214int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12);
278PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); 215PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12);
diff --git a/src/lib/libcrypto/pkcs12/pkcs12_local.h b/src/lib/libcrypto/pkcs12/pkcs12_local.h
index 8d82d2f462..dfdcdce1f9 100644
--- a/src/lib/libcrypto/pkcs12/pkcs12_local.h
+++ b/src/lib/libcrypto/pkcs12/pkcs12_local.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: pkcs12_local.h,v 1.4 2024/01/25 13:44:08 tb Exp $ */ 1/* $OpenBSD: pkcs12_local.h,v 1.5 2024/03/02 10:15:16 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 1999. 3 * project 1999.
4 */ 4 */
@@ -96,6 +96,79 @@ struct pkcs12_bag_st {
96 } value; 96 } value;
97}; 97};
98 98
99extern const ASN1_ITEM PKCS12_SAFEBAGS_it;
100extern const ASN1_ITEM PKCS12_AUTHSAFES_it;
101
102PKCS12_BAGS *PKCS12_BAGS_new(void);
103void PKCS12_BAGS_free(PKCS12_BAGS *a);
104PKCS12_BAGS *d2i_PKCS12_BAGS(PKCS12_BAGS **a, const unsigned char **in, long len);
105int i2d_PKCS12_BAGS(PKCS12_BAGS *a, unsigned char **out);
106extern const ASN1_ITEM PKCS12_BAGS_it;
107
108PKCS12_MAC_DATA *PKCS12_MAC_DATA_new(void);
109void PKCS12_MAC_DATA_free(PKCS12_MAC_DATA *a);
110PKCS12_MAC_DATA *d2i_PKCS12_MAC_DATA(PKCS12_MAC_DATA **a, const unsigned char **in, long len);
111int i2d_PKCS12_MAC_DATA(PKCS12_MAC_DATA *a, unsigned char **out);
112extern const ASN1_ITEM PKCS12_MAC_DATA_it;
113
114PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8);
115PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8);
116PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509);
117PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl);
118PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid,
119 const char *pass, int passlen, unsigned char *salt, int saltlen, int iter,
120 PKCS8_PRIV_KEY_INFO *p8);
121
122PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert);
123PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, EVP_PKEY *key,
124 int key_usage, int iter, int key_nid, const char *pass);
125int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags,
126 int safe_nid, int iter, const char *pass);
127PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid);
128
129int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name,
130 int namelen);
131int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name,
132 int namelen);
133int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, const unsigned char *name,
134 int namelen);
135int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name,
136 int namelen);
137
138int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen,
139 unsigned char *mac, unsigned int *maclen);
140
141ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs,
142 int attr_nid);
143
144PKCS12 *PKCS12_init(int mode);
145
146void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it,
147 const char *pass, int passlen, const ASN1_OCTET_STRING *oct, int zbuf);
148ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor,
149 const ASN1_ITEM *it, const char *pass, int passlen, void *obj, int zbuf);
150PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it,
151 int nid1, int nid2);
152
153int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt,
154 int saltlen, int id, int iter, int n, unsigned char *out,
155 const EVP_MD *md_type);
156int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
157 int saltlen, int id, int iter, int n, unsigned char *out,
158 const EVP_MD *md_type);
159
160int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes);
161PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk);
162PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen,
163 unsigned char *salt, int saltlen, int iter, STACK_OF(PKCS12_SAFEBAG) *bags);
164
165unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, const char *pass,
166 int passlen, const unsigned char *in, int inlen, unsigned char **data,
167 int *datalen, int en_de);
168
169int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt,
170 int saltlen, const EVP_MD *md_type);
171
99/* XXX - should go into pkcs7_local.h. */ 172/* XXX - should go into pkcs7_local.h. */
100ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7); 173ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7);
101 174