There are 3 cases of "structure of NULL" where the "of" should be "or". The "NULL" is actually "B<NULL>" in the pod file. doc/man3/EVP_PKEY_CTX_new.pod doc/man3/X509_NAME_add_entry_by_txt.pod doc/man3/X509V3_get_d2i.pod ---------- There are several bugs/typos in the example code at the end of doc/man3/EVP_MAC.pod These lines have an extra NULL parameter. OSSL_PARAM_construct_utf8_string("cipher", cipher, 0, NULL); OSSL_PARAM_construct_utf8_string("digest", digest, 0, NULL); OSSL_PARAM_construct_octet_string("key", key, strlen(key), NULL); ---------- That man page describes EVP_MAC_set_ctx_params and uses it in the example: || EVP_MAC_set_ctx_params(ctx, params) <= 0) evp.h has: int EVP_MAC_CTX_set_params(EVP_MAC_CTX *ctx, const OSSL_PARAM params[]); That's "set_ctx" vs "CTX_set" in case your eyes doesn't instantly lock on to the difference. There are similar problems with many other ctx routines. EVP_MAC_new_ctx => EVP_MAC_CTX_new EVP_MAC_free_ctx => EVP_MAC_CTX_free EVP_MAC_get_ctx_params ... -- These are my opinions. I hate spam.