xref: /freebsd/crypto/openssl/doc/man3/PKCS12_create.pod (revision b077aed33b7b6aefca7b17ddb250cf521f938613)
1e71b7053SJung-uk Kim=pod
2e71b7053SJung-uk Kim
3e71b7053SJung-uk Kim=head1 NAME
4e71b7053SJung-uk Kim
5*b077aed3SPierre ProncheryPKCS12_create, PKCS12_create_ex - create a PKCS#12 structure
6e71b7053SJung-uk Kim
7e71b7053SJung-uk Kim=head1 SYNOPSIS
8e71b7053SJung-uk Kim
9e71b7053SJung-uk Kim #include <openssl/pkcs12.h>
10e71b7053SJung-uk Kim
11e71b7053SJung-uk Kim PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey,
12e71b7053SJung-uk Kim                       X509 *cert, STACK_OF(X509) *ca,
13e71b7053SJung-uk Kim                       int nid_key, int nid_cert, int iter, int mac_iter, int keytype);
14*b077aed3SPierre Pronchery PKCS12 *PKCS12_create_ex(const char *pass, const char *name, EVP_PKEY *pkey,
15*b077aed3SPierre Pronchery                          X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert,
16*b077aed3SPierre Pronchery                          int iter, int mac_iter, int keytype,
17*b077aed3SPierre Pronchery                          OSSL_LIB_CTX *ctx, const char *propq);
18e71b7053SJung-uk Kim
19e71b7053SJung-uk Kim=head1 DESCRIPTION
20e71b7053SJung-uk Kim
21e71b7053SJung-uk KimPKCS12_create() creates a PKCS#12 structure.
22e71b7053SJung-uk Kim
23*b077aed3SPierre ProncheryI<pass> is the passphrase to use. I<name> is the B<friendlyName> to use for
24*b077aed3SPierre Proncherythe supplied certificate and key. I<pkey> is the private key to include in
25*b077aed3SPierre Proncherythe structure and I<cert> its corresponding certificates. I<ca>, if not B<NULL>
26e71b7053SJung-uk Kimis an optional set of certificates to also include in the structure.
27e71b7053SJung-uk Kim
28*b077aed3SPierre ProncheryI<nid_key> and I<nid_cert> are the encryption algorithms that should be used
29e71b7053SJung-uk Kimfor the key and certificate respectively. The modes
30*b077aed3SPierre ProncheryGCM, CCM, XTS, and OCB are unsupported. I<iter> is the encryption algorithm
31*b077aed3SPierre Proncheryiteration count to use and I<mac_iter> is the MAC iteration count to use.
32*b077aed3SPierre ProncheryI<keytype> is the type of key.
33*b077aed3SPierre Pronchery
34*b077aed3SPierre ProncheryPKCS12_create_ex() is identical to PKCS12_create() but allows for a library context
35*b077aed3SPierre ProncheryI<ctx> and property query I<propq> to be used to select algorithm implementations.
36e71b7053SJung-uk Kim
37e71b7053SJung-uk Kim=head1 NOTES
38e71b7053SJung-uk Kim
39*b077aed3SPierre ProncheryThe parameters I<nid_key>, I<nid_cert>, I<iter>, I<mac_iter> and I<keytype>
40e71b7053SJung-uk Kimcan all be set to zero and sensible defaults will be used.
41e71b7053SJung-uk Kim
42*b077aed3SPierre ProncheryThese defaults are: AES password based encryption (PBES2 with PBKDF2 and
43*b077aed3SPierre ProncheryAES-256-CBC) for private keys and certificates, the PBKDF2 and MAC key
44*b077aed3SPierre Proncheryderivation iteration count of B<PKCS12_DEFAULT_ITER> (currently 2048), and
45*b077aed3SPierre ProncheryMAC algorithm HMAC with SHA2-256.
46e71b7053SJung-uk Kim
47e71b7053SJung-uk KimThe default MAC iteration count is 1 in order to retain compatibility with
48e71b7053SJung-uk Kimold software which did not interpret MAC iteration counts. If such compatibility
49*b077aed3SPierre Proncheryis not required then I<mac_iter> should be set to PKCS12_DEFAULT_ITER.
50e71b7053SJung-uk Kim
51*b077aed3SPierre ProncheryI<keytype> adds a flag to the store private key. This is a non standard extension
52e71b7053SJung-uk Kimthat is only currently interpreted by MSIE. If set to zero the flag is omitted,
53e71b7053SJung-uk Kimif set to B<KEY_SIG> the key can be used for signing only, if set to B<KEY_EX>
54e71b7053SJung-uk Kimit can be used for signing and encryption. This option was useful for old
55e71b7053SJung-uk Kimexport grade software which could use signing only keys of arbitrary size but
56e71b7053SJung-uk Kimhad restrictions on the permissible sizes of keys which could be used for
57e71b7053SJung-uk Kimencryption.
58e71b7053SJung-uk Kim
59*b077aed3SPierre ProncheryIf a certificate contains an I<alias> or I<keyid> then this will be
60e71b7053SJung-uk Kimused for the corresponding B<friendlyName> or B<localKeyID> in the
61e71b7053SJung-uk KimPKCS12 structure.
62e71b7053SJung-uk Kim
63*b077aed3SPierre ProncheryEither I<pkey>, I<cert> or both can be B<NULL> to indicate that no key or
64e71b7053SJung-uk Kimcertificate is required. In previous versions both had to be present or
65e71b7053SJung-uk Kima fatal error is returned.
66e71b7053SJung-uk Kim
67*b077aed3SPierre ProncheryI<nid_key> or I<nid_cert> can be set to -1 indicating that no encryption
68e71b7053SJung-uk Kimshould be used.
69e71b7053SJung-uk Kim
70*b077aed3SPierre ProncheryI<mac_iter> can be set to -1 and the MAC will then be omitted entirely.
71e71b7053SJung-uk Kim
72e71b7053SJung-uk KimPKCS12_create() makes assumptions regarding the encoding of the given pass
73e71b7053SJung-uk Kimphrase.
74e71b7053SJung-uk KimSee L<passphrase-encoding(7)> for more information.
75e71b7053SJung-uk Kim
76e71b7053SJung-uk Kim=head1 RETURN VALUES
77e71b7053SJung-uk Kim
78e71b7053SJung-uk KimPKCS12_create() returns a valid B<PKCS12> structure or NULL if an error occurred.
79e71b7053SJung-uk Kim
80*b077aed3SPierre Pronchery=head1 CONFORMING TO
81*b077aed3SPierre Pronchery
82*b077aed3SPierre ProncheryIETF RFC 7292 (L<https://tools.ietf.org/html/rfc7292>)
83*b077aed3SPierre Pronchery
84e71b7053SJung-uk Kim=head1 SEE ALSO
85e71b7053SJung-uk Kim
86e71b7053SJung-uk KimL<d2i_PKCS12(3)>,
87e71b7053SJung-uk KimL<passphrase-encoding(7)>
88e71b7053SJung-uk Kim
89*b077aed3SPierre Pronchery=head1 HISTORY
90*b077aed3SPierre Pronchery
91*b077aed3SPierre ProncheryPKCS12_create_ex() was added in OpenSSL 3.0.
92*b077aed3SPierre Pronchery
93*b077aed3SPierre ProncheryThe defaults for encryption algorithms, MAC algorithm, and the MAC key
94*b077aed3SPierre Proncheryderivation iteration count were changed in OpenSSL 3.0 to more modern
95*b077aed3SPierre Proncherystandards.
96*b077aed3SPierre Pronchery
97e71b7053SJung-uk Kim=head1 COPYRIGHT
98e71b7053SJung-uk Kim
99*b077aed3SPierre ProncheryCopyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved.
100e71b7053SJung-uk Kim
101*b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License").  You may not use
102e71b7053SJung-uk Kimthis file except in compliance with the License.  You can obtain a copy
103e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at
104e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>.
105e71b7053SJung-uk Kim
106e71b7053SJung-uk Kim=cut
107