PKCS12_gen_mac(3ssl)

PKCS12_gen_mac3ssl

Functions to create and manipulate a pkcs#12 mac structure

Usage

 #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);
 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);
 int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt,
                      int saltlen, const EVP_MD *md_type);
 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);

Overview

PKCS12_gen_mac() generates an HMAC over the entire PKCS#12 object using the supplied password along with a set of already configured parameters. The default key generation mechanism used is PKCS12KDF.

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. PKCS12_set_pbmac1_pbkdf2() sets the MAC and MAC parameters into the PKCS#12 object when PBMAC1 with PBKDF2 is used for protection of the PKCS#12 object.

pass is the passphrase to use in the HMAC. salt is the salt value to use, iter is the iteration count and md_type is the message digest function to use. prf_md_name specifies the digest used for the PBKDF2 in PBMAC1 KDF.

PKCS12_get0_mac() retrieves any included MAC value, X509_ALGOR object, salt, and iter count from the PKCS12 object.

Notes

If salt is NULL then a suitable salt will be generated and used.

If iter is 1 then an iteration count will be omitted from the PKCS#12 structure.

PKCS12_gen_mac(), PKCS12_verify_mac(), PKCS12_set_mac() and PKCS12_set_pbmac1_pbkdf2() make assumptions regarding the encoding of the given passphrase. See passphrase-encoding(7) for more information.

Return values

All functions returning an integer return 1 on success and 0 if an error occurred.

Environment

LEGACY_GOST_PKCS12

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, standardisation 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 PKCS5_PBKDF2_HMAC(3) and not the whole sequence.

Releases

3 releases since Debian 12 (Bookworm); the text changed 2 times.

  1. 12
  2. 13
  3. Arch

Conforming to

IETF RFC 7292 (<https://tools.ietf.org/html/rfc7292>) IETF RFC 9579 (<https://tools.ietf.org/html/rfc9579>)

History

The PKCS12_set_pbmac1_pbkdf2 function was added in OpenSSL 3.4.

From openssl 3.6.5-1 in Arch Linux 2026-11-01. Parsed by carta from the page's man source.