PKCS12_ADD_SAFE(3SSL)

πŸ’– PKCS12_ADD_SAFE β€” the OpenSSL girlies' guide πŸ’–

okay bestie, so this one lives in section 3SSL of the OpenSSL manual, and it's literally all about building PKCS#12 structures piece by piece πŸŽ€ like, you're not making the whole smoothie at once, you're adding the lil ingredients and then blending.

✨ NAME ✨

PKCS12_add_safe, PKCS12_add_safe_ex, PKCS12_add_safes, PKCS12_add_safes_ex β€” Create and add objects to a PKCS#12 structure 🫢


✨ SYNOPSIS ✨

#include <openssl/pkcs12.h>

int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags,
                   int safe_nid, int iter, const char *pass);
int PKCS12_add_safe_ex(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags,
                       int safe_nid, int iter, const char *pass,
                       OSSL_LIB_CTX *ctx, const char *propq);

PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid);
PKCS12 *PKCS12_add_safes_ex(STACK_OF(PKCS7) *safes, int p7_nid,
                            OSSL_LIB_CTX *ctx, const char *propq);

like, yes, four of them πŸ’… two of them are the "normal" ones and two of them are the _ex glow-ups.


✨ DESCRIPTION ✨

🌸 PKCS12_add_safe() β€” the little one

PKCS12_add_safe() creates a brand new PKCS7 contentInfo containing the supplied PKCS12_SAFEBAGs and adds this to a set of PKCS7 contentInfos. and its type?? that depends entirely on the value of safe_nid, no cap:

  • If safe_nid is -1, a plain PKCS7 data contentInfo is created. simple. clean. minimal. her main character era πŸ¦‹
  • If safe_nid is a valid PBE algorithm NID, a PKCS7 encryptedData contentInfo is created. The algorithm uses pass as the passphrase and iter as the iteration count. If iter is zero then a default value for iteration count of 2048 is used. she'll pick for you bestie, she's generous ✨
  • If safe_nid is 0, a PKCS7 encryptedData contentInfo is created using a default encryption algorithm, currently NID_pbe_WithSHA1And3_Key_TripleDES_CBC. that's the vibe she defaults to πŸ”₯

🌸 PKCS12_add_safe_ex() β€” the same but with options

PKCS12_add_safe_ex() is identical to PKCS12_add_safe() but allows for a library context ctx and property query propq to be used to select algorithm implementations. so like, same energy, but now you get to choose whose algorithm implementation you're pulling from πŸ‘‘

🌸 PKCS12_add_safes() β€” the wrapper

PKCS12_add_safes() creates a PKCS12 structure containing the supplied set of PKCS7 contentInfos. The safes are enclosed first within a PKCS7 contentInfo of type p7_nid. Currently the only supported type is NID_pkcs7_data β€” that's it, that's the whole guest list πŸ’€

🌸 PKCS12_add_safes_ex() β€” the wrapper, but ✨fancy✨

PKCS12_add_safes_ex() is identical to PKCS12_add_safes() but allows for a library context ctx and property query propq to be used to select algorithm implementations. yeah you saw this coming 🌈


✨ NOTES ✨

⚠️ bestie, listen: PKCS12_add_safe() makes assumptions regarding the encoding of the given pass phrase. See passphrase-encoding(7) for more information. don't just yolo your passphrase in, go read that one πŸ™ˆ

✨ RETURN VALUES ✨

  • PKCS12_add_safe() returns a value of 1 indicating success or 0 for failure. binary queen, no in between πŸ’…
  • PKCS12_add_safes() returns a valid PKCS12 structure or NULL if an error occurred. hi, NULL is not a personality 🫠

✨ CONFORMING TO ✨

IETF RFC 7292 (https://tools.ietf.org/html/rfc7292) πŸ“œ β€” she's certified, she's standards-compliant, she read the whole spec (okay she skimmed it but she got the important bits).


✨ SEE ALSO ✨

  • PKCS12_create(3) 🌟 β€” like, go read her too, they're literally sisters

✨ HISTORY ✨

PKCS12_add_safe_ex() and PKCS12_add_safes_ex() were added in OpenSSL 3.0. so the _ex girlies are the newer sisters in the family, born in the 3.0 era πŸŽ€


Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. πŸ’–

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 https://www.openssl.org/source/license.html. yes bestie, actually read the license, it's giving legal and it's giving necessary ⭐


okay that's the whole page!! πŸ¦‹ this was OpenSSL docs, version 4.0.3, dated 2026-09-29, and she ate, no crumbs. mwah, go build your PKCS#12 structures responsibly, ily, bye πŸ’œβœ¨

πŸ“¦ where this page comes from