2021-02-17 15:56:36 +08:00
|
|
|
=pod
|
|
|
|
|
|
|
|
=head1 NAME
|
|
|
|
|
2021-04-30 07:11:42 +08:00
|
|
|
PKCS12_gen_mac, PKCS12_setup_mac, PKCS12_set_mac,
|
2024-06-07 20:38:40 +08:00
|
|
|
PKCS12_set_pbmac1_pbkdf2, PKCS12_verify_mac, PKCS12_get0_mac -
|
|
|
|
Functions to create and manipulate a PKCS#12 MAC structure
|
2021-02-17 15:56:36 +08:00
|
|
|
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
|
|
|
|
#include <openssl/pkcs12.h>
|
|
|
|
|
|
|
|
int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen,
|
|
|
|
unsigned char *mac, unsigned int *maclen);
|
|
|
|
int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen);
|
|
|
|
int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen,
|
|
|
|
unsigned char *salt, int saltlen, int iter,
|
|
|
|
const EVP_MD *md_type);
|
2024-06-07 20:38:40 +08:00
|
|
|
int PKCS12_set_pbmac1_pbkdf2(PKCS12 *p12, const char *pass, int passlen,
|
|
|
|
unsigned char *salt, int saltlen, int iter,
|
|
|
|
const EVP_MD *md_type,
|
|
|
|
const char *prf_md_name);
|
2021-02-17 15:56:36 +08:00
|
|
|
int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt,
|
|
|
|
int saltlen, const EVP_MD *md_type);
|
|
|
|
|
2024-06-07 20:38:40 +08:00
|
|
|
void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac,
|
|
|
|
const X509_ALGOR **pmacalg,
|
|
|
|
const ASN1_OCTET_STRING **psalt,
|
|
|
|
const ASN1_INTEGER **piter,
|
|
|
|
const PKCS12 *p12);
|
|
|
|
|
2021-02-17 15:56:36 +08:00
|
|
|
=head1 DESCRIPTION
|
|
|
|
|
|
|
|
PKCS12_gen_mac() generates an HMAC over the entire PKCS#12 object using the
|
2022-01-03 07:00:27 +08:00
|
|
|
supplied password along with a set of already configured parameters.
|
2023-09-05 17:13:47 +08:00
|
|
|
The default key generation mechanism used is PKCS12KDF.
|
2021-02-17 15:56:36 +08:00
|
|
|
|
|
|
|
PKCS12_verify_mac() verifies the PKCS#12 object's HMAC using the supplied
|
|
|
|
password.
|
|
|
|
|
|
|
|
PKCS12_setup_mac() sets the MAC part of the PKCS#12 structure with the supplied
|
|
|
|
parameters.
|
|
|
|
|
|
|
|
PKCS12_set_mac() sets the MAC and MAC parameters into the PKCS#12 object.
|
2024-06-07 20:38:40 +08:00
|
|
|
PKCS12_set_pbmac1_pbkdf2() sets the MAC and MAC parameters into the PKCS#12
|
|
|
|
object when B<PBMAC1> with PBKDF2 is used for protection of the PKCS#12 object.
|
2021-02-17 15:56:36 +08:00
|
|
|
|
|
|
|
I<pass> is the passphrase to use in the HMAC. I<salt> is the salt value to use,
|
2024-06-07 20:38:40 +08:00
|
|
|
I<iter> is the iteration count and I<md_type> is the message digest function to
|
|
|
|
use. I<prf_md_name> specifies the digest used for the PBKDF2 in PBMAC1 KDF.
|
|
|
|
|
|
|
|
PKCS12_get0_mac() retrieves any included MAC value, B<X509_ALGOR> object,
|
|
|
|
I<salt>, and I<iter> count from the PKCS12 object.
|
2021-02-17 15:56:36 +08:00
|
|
|
|
|
|
|
=head1 NOTES
|
|
|
|
|
|
|
|
If I<salt> is NULL then a suitable salt will be generated and used.
|
|
|
|
|
|
|
|
If I<iter> is 1 then an iteration count will be omitted from the PKCS#12
|
|
|
|
structure.
|
|
|
|
|
2024-06-07 20:38:40 +08:00
|
|
|
PKCS12_gen_mac(), PKCS12_verify_mac(), PKCS12_set_mac() and
|
|
|
|
PKCS12_set_pbmac1_pbkdf2() make assumptions regarding the encoding of the
|
|
|
|
given passphrase. See L<passphrase-encoding(7)> for more information.
|
2021-02-17 15:56:36 +08:00
|
|
|
|
|
|
|
=head1 RETURN VALUES
|
|
|
|
|
2024-06-07 20:38:40 +08:00
|
|
|
All functions returning an integer return 1 on success and 0 if an error occurred.
|
2021-02-17 15:56:36 +08:00
|
|
|
|
2025-07-12 01:23:39 +08:00
|
|
|
=head1 ENVIRONMENT
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item B<LEGACY_GOST_PKCS12>
|
|
|
|
|
|
|
|
=for comment
|
|
|
|
https://tc26.ru/standarts/metodicheskie-rekomendatsii/transportnyy-klyuchevoy-konteyner.html section 5.1
|
|
|
|
https://tc26.ru/standard/rs/%D0%A0%2050.1.112-2016.pdf section 5
|
|
|
|
https://meganorm.ru/mega_doc/norm/prikaz/25/r_1323565_1_041-2022_rekomendatsii_po_standartizatsii.html section 7.1
|
|
|
|
|
|
|
|
If this environment variable is set, MAC generation that utilises
|
|
|
|
GOST R 34.11-94 or GOST 34.11-2012 hashing algorithms is performed the usual
|
|
|
|
way and not in accordance with the specification provided in the methodical
|
|
|
|
recommendation MP 26.2.002-2012 (or in its later versions, standartisation
|
|
|
|
recommendation P 50.1.112-2016 or P 1323565.1.041-2022)
|
|
|
|
of Technical Committee 26, that specifies that the key used for MAC
|
|
|
|
generation should be the last 32 bytes of the 96-byte sequence generated
|
|
|
|
by L<PKCS5_PBKDF2_HMAC(3)> and not the whole sequence.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
2021-02-17 15:56:36 +08:00
|
|
|
=head1 CONFORMING TO
|
|
|
|
|
|
|
|
IETF RFC 7292 (L<https://tools.ietf.org/html/rfc7292>)
|
2024-06-07 20:38:40 +08:00
|
|
|
IETF RFC 9579 (L<https://tools.ietf.org/html/rfc9579>)
|
2021-02-17 15:56:36 +08:00
|
|
|
|
|
|
|
=head1 SEE ALSO
|
|
|
|
|
|
|
|
L<d2i_PKCS12(3)>,
|
2023-09-05 17:13:47 +08:00
|
|
|
L<EVP_KDF-PKCS12KDF(7)>,
|
2021-02-17 15:56:36 +08:00
|
|
|
L<PKCS12_create(3)>,
|
|
|
|
L<passphrase-encoding(7)>
|
|
|
|
|
2024-06-07 20:38:40 +08:00
|
|
|
=head1 HISTORY
|
|
|
|
|
|
|
|
The I<PKCS12_set_pbmac1_pbkdf2> function was added in OpenSSL 3.4.
|
|
|
|
|
2021-02-17 15:56:36 +08:00
|
|
|
=head1 COPYRIGHT
|
|
|
|
|
2024-06-07 20:38:40 +08:00
|
|
|
Copyright 2021-2024 The OpenSSL Project Authors. All Rights Reserved.
|
2021-02-17 15:56:36 +08:00
|
|
|
|
|
|
|
Licensed under the Apache License 2.0 (the "License"). You may not use
|
|
|
|
this file except in compliance with the License. You can obtain a copy
|
|
|
|
in the file LICENSE in the source distribution or at
|
|
|
|
L<https://www.openssl.org/source/license.html>.
|
|
|
|
|
|
|
|
=cut
|