PKCS12_SAFEBAG_GET1_CERT(3ossl)
π 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 β get objects from a PKCS#12 safeBag π
okay bestie, this is the OpenSSL manual page for PKCS12_SAFEBAG_GET1_CERT(3ossl) β it's giving β¨"I just want to peek inside the bag"β¨ and honestly? iconic.
β¨ 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);
π¦ DESCRIPTION π¦
so like. a PKCS12_SAFEBAG is a little bag π and every function here is basically you unzipping the bag and going "what's in here tho". let's go one by one, no cap:
PKCS12_SAFEBAG_get0_attr()β grabs the attribute value that corresponds to theattr_nid. like, you say "give me the thing tagged with this NID" and it hands it over. πPKCS12_SAFEBAG_get0_type()β gets the safeBag type as an OID. meanwhilePKCS12_SAFEBAG_get_nid()gets the safeBag type as an NID, which could beNID_certBag,NID_crlBag,NID_keyBag,NID_secretBag,NID_safeContentsBagorNID_pkcs8ShroudedKeyBag. same vibe, different flavour of identifier β¨PKCS12_SAFEBAG_get_bag_nid()β gets the type of the object contained within thePKCS12_SAFEBAG. for most bags this matches the bag type, but for secretBags it can be arbitrary (yes really, it's giving chaos π). andPKCS12_SAFEBAG_get0_bag_type()gets this same type but as an OID. πPKCS12_SAFEBAG_get0_bag_obj()β retrieves the actual object chillin' inside the safeBag. the main character of the bag, fr fr. πPKCS12_SAFEBAG_get1_cert_ex()andPKCS12_SAFEBAG_get1_crl_ex()β return newX509orX509_CRLobjects made from the item in the safeBag.libctxandpropqget used when fetching algorithms, and both may optionally be set toNULL. π§PKCS12_SAFEBAG_get1_cert()andPKCS12_SAFEBAG_get1_crl()β literally the same asPKCS12_SAFEBAG_get1_cert_ex()andPKCS12_SAFEBAG_get1_crl_ex(), except they set the libctx and prop toNULL. which means they use the default library context. slay, convenience. πPKCS12_SAFEBAG_get0_p8inf()andPKCS12_SAFEBAG_get0_pkcs8()β return the PKCS8 object from aPKCS8shroudedKeyBagor akeyBag. πPKCS12_SAFEBAG_get0_safes()β retrieves the set of safeBags contained within asafeContentsBag. bags inside bags inside bags, it's giving inception πβ¨
π RETURN VALUES π
PKCS12_SAFEBAG_get_nid()andPKCS12_SAFEBAG_get_bag_nid()return the NID of the safeBag or bag object, or-1if there's no corresponding NID. π- every other function here returns a valid object of the specified type, or
NULLif an error occurred. π
π SEE ALSO π
PKCS12_create(3), PKCS12_add_safe(3), PKCS12_add_safes(3)
π 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, and we're obsessed π«Ά
π COPYRIGHT π
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>.
and that's the whole page bestie!! π this was the OpenSSL 3.5.9 version, dated 2026-09-29 β go forth and peek inside your safeBags responsibly, mwah πβ¨π
π¦ where this page comes from
- fedora 43: openssl-devel 1:3.5.9-1.fc43 Β· Apache-2.0
- fedora 43: openssl-devel 1:3.5.9-1.fc43 Β· Apache-2.0
- fedora 44: openssl-devel 1:3.5.9-1.fc44 Β· Apache-2.0
- fedora 44: openssl-devel 1:3.5.9-1.fc44 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms