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 enclevel is 1 then a password obtained via pem_password_cb is used to encrypt the private key. πŸ”
  • If enclevel is 0 then 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() and b2i_PVK_bio_ex() return a valid EVP_KEY structure, or NULL if an error occurs. The error code can be obtained by calling ERR_get_error(3).
  • i2b_PVK_bio() and i2b_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 calling ERR_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 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