Search code examples
cmacosopensslmacos-sierra

EVP_get_cipherbyname always returns null


I have a problem when calling EVP_get_cipherbyname on macOS:

const char *cipher_str = "aes-256-cbc";
const evp_cipher_st *cipher1 = EVP_aes_256_cbc();
const evp_cipher_st *cipher2 = EVP_get_cipherbyname(cipher_str);

In the code above, cipher1 will always be set to a valid evp_cipher_st * object, and cipher2 will always be null. I haven't found a single instance of cipher_str that produces a non-null cipher2.

Am I doing something wrong? Are there some other calls I should be making to get this to work?


Solution

  • You need to initialize the OpenSSL library first. If you just use libcrypto, call:

    OpenSSL_add_all_algorithms();
    

    Refer to https://wiki.openssl.org/index.php/Library_Initialization for how to handle other situations or openssl versions.