B2I_PVK_BIO_EX(3ossl)
π B2I_PVK_BIO_EX π
okay so bestie, this is the manual page for B2I_PVK_BIO_EX(3ossl) β yes that's a whole mouthful, it's an OpenSSL thing, don't worry, we're gonna get through it together π«Ά
It's the decode-and-encode girlies for reading and writing MSBLOB format private keys. Lowkey niche, highkey useful. Let's go β¨
πΈ NAME πΈ
b2i_PVK_bio, b2i_PVK_bio_ex, i2b_PVK_bio, i2b_PVK_bio_ex β the decode and encode functions for reading and writing MSBLOB format private keys. that's the whole vibe π
β¨ SYNOPSIS β¨
#include <openssl/pem.h>
EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u);
EVP_PKEY *b2i_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u,
OSSL_LIB_CTX *libctx, const char *propq);
int i2b_PVK_bio(BIO *out, const EVP_PKEY *pk, int enclevel,
pem_password_cb *cb, void *u);
int i2b_PVK_bio_ex(BIO *out, const EVP_PKEY *pk, int enclevel,
pem_password_cb *cb, void *u,
OSSL_LIB_CTX *libctx, const char *propq);
no cap, that's the whole signature set. copy it exactly, don't freestyle it π
π¦ DESCRIPTION π¦
okay so the way this works is split into two halves: the b2i girls (BIO β key, i.e. reading) and the i2b girls (key β BIO, i.e. writing). iconic symmetry, honestly. π
π the b2i side (decoding, aka reading)
b2i_PVK_bio_ex() decodes a private key of MSBLOB format read from a BIO. It attempts to automatically determine the key type β so you don't have to tell it, it just knows, main character energy fr fr.
If the key is encrypted then cb is called with the user data u in order to obtain a password to decrypt the key. The supplied library context libctx and property query string propq are used in any decrypt operation.
b2i_PVK_bio() does the same as b2i_PVK_bio_ex() except that the default library context and property query string are used. it's the "i don't wanna think about it" version, and honestly? valid.
π the i2b side (encoding, aka writing)
i2b_PVK_bio_ex() encodes pk using MSBLOB format.
- If
enclevelis1then a password obtained viapem_password_cbis used to encrypt the private key. π - If
enclevelis0then no encryption is applied. π³ (yes, plaintext. be so serious about this one.)
The user data in u is passed to the password callback. The supplied library context libctx and property query string propq are used in any decrypt operation.
i2b_PVK_bio() does the same as i2b_PVK_bio_ex() except that the default library context and property query string are used.
π RETURN VALUES π
pay attention bestie, this is the part where people get humbled:
b2i_PVK_bio()andb2i_PVK_bio_ex()return a validEVP_KEYstructure, orNULLif an error occurs. The error code can be obtained by callingERR_get_error(3).i2b_PVK_bio()andi2b_PVK_bio_ex()return the number of bytes successfully encoded, or a negative value if an error occurs. The error code can be obtained by callingERR_get_error(3).
so likeβ¦ check your returns. always. NULL and "negative number" are the two ways these functions say "bestie, something went wrong" π
π SEE ALSO π
go read those too, they're the cousins π
β HISTORY β
b2i_PVK_bio_ex() and i2b_PVK_bio_ex() were added in OpenSSL 3.0. so if you're on something olderβ¦ the _ex versions simply do not exist for you, sorry babe π
π COPYRIGHT π
Copyright 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>.
and that's the whole page, bestie!! π this was OpenSSL 3.5.9, dated 2026-09-29, from the B2I_PVK_BIO_EX(3ossl) manual. slay, go encrypt something (or don't, enclevel 0 is right there π«Άβ¨)
π¦ 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