PKCS12_SAFEBAG_GET1_CERT(3SSL)

πŸ’– PKCS12_SAFEBAG_GET1_CERT β€” the 3SSL girlies' guide to digging stuff out of a PKCS#12 safeBag πŸ’–

okay so bestie. you've got a PKCS12_SAFEBAG and you wanna know what's inside it. that's it. that's the whole page. it's giving "unboxing video but for ASN.1" and honestly? iconic. let's go πŸŽ€


✨ NAME ✨

PKCS12_SAFEBAG_get0_attr, PKCS12_SAFEBAG_get0_type, PKCS12_SAFEBAG_get_nid, PKCS12_SAFEBAG_get_bag_nid, PKCS12_SAFEBAG_get0_bag_obj, PKCS12_SAFEBAG_get0_bag_type, PKCS12_SAFEBAG_get1_cert_ex, PKCS12_SAFEBAG_get1_cert, PKCS12_SAFEBAG_get1_crl_ex, PKCS12_SAFEBAG_get1_crl, PKCS12_SAFEBAG_get0_safes, PKCS12_SAFEBAG_get0_p8inf, PKCS12_SAFEBAG_get0_pkcs8 β€” literally all of them just Get objects from a PKCS#12 safeBag 🫢

🌸 SYNOPSIS 🌸

#include <openssl/pkcs12.h>

const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag,
                                          int attr_nid);
const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag);
int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag);
int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag);
const ASN1_TYPE *PKCS12_SAFEBAG_get0_bag_obj(const PKCS12_SAFEBAG *bag);
const ASN1_OBJECT *PKCS12_SAFEBAG_get0_bag_type(const PKCS12_SAFEBAG *bag);
X509_CRL *PKCS12_SAFEBAG_get1_cert_ex(const PKCS12_SAFEBAG *bag,
                                      OSSL_LIB_CTX *libctx, const char *propq);
X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag);
X509_CRL *PKCS12_SAFEBAG_get1_crl_ex(const PKCS12_SAFEBAG *bag,
                                     OSSL_LIB_CTX *libctx, const char *propq);
X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag);
const STACK_OF(PKCS12_SAFEBAG) *PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag);
const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag);
const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag);

no cap, type those signatures exactly as written. copy-paste is your bestie here. πŸ’…


πŸ¦‹ DESCRIPTION πŸ¦‹

okay so, one by one, main character by main character:

PKCS12_SAFEBAG_get0_attr() gets the attribute value corresponding to the attr_nid. like, you name the NID, it hands you the attr. obsessed.

PKCS12_SAFEBAG_get0_type() gets the safeBag type as an OID, whereas PKCS12_SAFEBAG_get_nid() gets the safeBag type as an NID, which could be NID_certBag, NID_crlBag, NID_keyBag, NID_secretBag, NID_safeContentsBag or NID_pkcs8ShroudedKeyBag. so like… same bag, two different fits. OID outfit vs NID outfit. both slay. ✨

PKCS12_SAFEBAG_get_bag_nid() gets the type of the object contained within the PKCS12_SAFEBAG. this corresponds to the bag type for most bags, but can be arbitrary for secretBags. (secretBags stay mysterious, lowkey on brand πŸ“)

PKCS12_SAFEBAG_get0_bag_type() gets this type as an OID.

PKCS12_SAFEBAG_get0_bag_obj() retrieves the object contained within the safeBag. it's right there, bestie, it's in the bag.

PKCS12_SAFEBAG_get1_cert_ex() and PKCS12_SAFEBAG_get1_crl_ex() return new X509 or X509_CRL objects from the item in the safeBag. libctx and propq are used when fetching algorithms, and may optionally be set to NULL. no drama, no pressure.

PKCS12_SAFEBAG_get1_cert() and PKCS12_SAFEBAG_get1_crl() are the same as PKCS12_SAFEBAG_get1_cert_ex() and PKCS12_SAFEBAG_get1_crl_ex() and set the libctx and prop to NULL. This will use the default library context. it's the "no thoughts, just defaults" version and honestly? valid.

PKCS12_SAFEBAG_get0_p8inf() and PKCS12_SAFEBAG_get0_pkcs8() return the PKCS8 object from a PKCS8shroudedKeyBag or a keyBag.

PKCS12_SAFEBAG_get0_safes() retrieves the set of safeBags contained within a safeContentsBag. bags in bags in bags. it's giving infinite nesting, it's giving matryoshka, it's giving recursion-core 🧚


πŸ”₯ RETURN VALUES πŸ”₯

PKCS12_SAFEBAG_get_nid() and PKCS12_SAFEBAG_get_bag_nid() return the NID of the safeBag or bag object, or -1 if there is no corresponding NID.

Other functions return a valid object of the specified type or NULL if an error occurred. so like… check for NULL, bestie. that's the vibe check. πŸ’€


πŸ‘‘ SEE ALSO πŸ‘‘

PKCS12_create(3), PKCS12_add_safe(3), PKCS12_add_safes(3)

go read those too. the lore is deep and i'm not gatekeeping. iykyk. 🌈


πŸ’œ HISTORY πŸ’œ

The functions PKCS12_SAFEBAG_get1_cert_ex() and PKCS12_SAFEBAG_get1_crl_ex() were added in OpenSSL 3.2. newer girls on the block. periodt. ✨


Copyright 2019-2023 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>.

fr fr, read the license. it's short. it's giving responsible.

and that's the whole page bestie πŸ’– this one's from 4.0.3, dated 2026-09-29, and the manual name is PKCS12_SAFEBAG_GET1_CERT(3SSL) β€” mwah, no notes, go get those objects out of those bags πŸ«ΆπŸ’…πŸŒΈ

πŸ“¦ where this page comes from