PEM_READ_BIO_EX(3ossl)
okay bestie, welcome to OpenSSLβs PEM_READ_BIO_EX(3ossl) manual page β this one is lowkey niche but honestly kind of iconic if youβre doing custom PEM processing. π
β¨ NAME β¨
PEM_read_bio_ex,PEM_FLAG_SECURE,PEM_FLAG_EAY_COMPATIBLE,PEM_FLAG_ONLY_B64β read PEM format files with custom processing. no cap, thatβs the whole vibe. π
π οΈ SYNOPSIS π οΈ
#include <openssl/pem.h>
#define PEM_FLAG_SECURE 0x1
#define PEM_FLAG_EAY_COMPATIBLE 0x2
#define PEM_FLAG_ONLY_B64 0x4
int PEM_read_bio_ex(BIO *in, char **name, char **header,
unsigned char **data, long *len, unsigned int flags);
π DESCRIPTION π
PEM_read_bio_ex() reads in PEM formatted data from an input BIO, and it outputs these three things, bestie:
- the name of the type of contained data,
- the header information regarding the possibly encrypted data, and
- the binary data payload (after base64 decoding).
It should generally only be used to implement PEM_read_bio_-family functions for specific data types or other usage, but is exposed to allow greater flexibility over how processing is performed, if needed. β¨
Now letβs talk flags, because the flags are literally the main character here:
PEM_FLAG_SECUREβ if this is set, the intermediate buffers used to read in lines of input are allocated from the secure heap. π‘οΈPEM_FLAG_EAY_COMPATIBLEβ if this is set, a simple algorithm is used to remove whitespace and control characters from the end of each line, so as to be compatible with the historical behavior ofPEM_read_bio(). π°οΈPEM_FLAG_ONLY_B64β if this is set, all characters are required to be valid base64 characters (or newlines); non-base64 characters are treated as end of input. π§Ό- If neither
PEM_FLAG_EAY_COMPATIBLEorPEM_FLAG_ONLY_B64is set, control characters are ignored. π - If both
PEM_FLAG_EAY_COMPATIBLEandPEM_FLAG_ONLY_B64are set, an error is returned; these options are not compatible with each other. π
bestie, do not mixPEM_FLAG_EAY_COMPATIBLEandPEM_FLAG_ONLY_B64β that combo is a no-go and it will error out. periodt. π«
π NOTES π
The caller must release the storage allocated for *name, *header, and *data. If PEM_FLAG_SECURE was set, use OPENSSL_secure_free(); otherwise, OPENSSL_free() is used. π«Ά
donβt leave that storage hanging, bestie β free it with the right free-er. π
π«Ά RETURN VALUES π«Ά
PEM_read_bio_ex() returns 1 for success or 0 for failure. thatβs it, thatβs the return value story. π
π SEE ALSO π
PEM_bytes_read_bio(3) β go peek if you need the related lore. π¦
πΈ HISTORY πΈ
The PEM_read_bio_ex() function was added in OpenSSL 1.1.1. π
Β©οΈ COPYRIGHT Β©οΈ
Copyright 2017 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.
okay bestie, thatβs the whole page! π this is OpenSSL 3.5.6, dated 2026-04-07, and you were reading PEM_READ_BIO_EX(3ossl) β now go be the main character of your PEM parsing. πβ¨
π¦ where this page comes from
- freebsd 15.1: base 15.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms