key/aziot-key-openssl-engine/build/engine.c (44 lines of code) (raw):

/* Copyright (c) Microsoft. All rights reserved. */ #include <openssl/crypto.h> #if OPENSSL_VERSION_NUMBER >= 0x10100000L #include <openssl/ec.h> #else #include <openssl/ecdsa.h> #endif #include <openssl/engine.h> #include <openssl/rsa.h> /** * The *_get_ex_new_index functions are defined as functions in 1.0.0 and as macros in 1.1.0, * so invoke them from C instead of creating complicated bindings. */ #if OPENSSL_VERSION_NUMBER >= 0x30000000L int aziot_key_dupf_engine_ex_data(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, void **from_d, int idx, long argl, void *argp); #elif OPENSSL_VERSION_NUMBER >= 0x10100000L int aziot_key_dupf_engine_ex_data(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, void *from_d, int idx, long argl, void *argp); #else int aziot_key_dupf_engine_ex_data(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d, int idx, long argl, void *argp); #endif int aziot_key_get_engine_ex_index() { /* This engine might be loaded using the dynamic engine (if it's being used as aziot-key-openssl-engine-shared). * In that case, we don't want to use freef to free the Engine ex data, because freef will run after the dynamic engine has * already unloaded the engine library, which means the function freef points to will also have been unloaded. * * Instead, this engine uses the ENGINE_destroy hook to clean up its ex data. */ return ENGINE_get_ex_new_index(0, NULL, NULL, aziot_key_dupf_engine_ex_data, NULL); } #if OPENSSL_VERSION_NUMBER >= 0x30000000L int aziot_key_dupf_ec_key_ex_data(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, void **from_d, int idx, long argl, void *argp); #elif OPENSSL_VERSION_NUMBER >= 0x10100000L int aziot_key_dupf_ec_key_ex_data(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, void *from_d, int idx, long argl, void *argp); #else int aziot_key_dupf_ec_key_ex_data(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d, int idx, long argl, void *argp); #endif void aziot_key_freef_ec_key_ex_data(void* parent, void* ptr, CRYPTO_EX_DATA* ad, int idx, long argl, void* argp); int aziot_key_get_ec_key_ex_index() { #if OPENSSL_VERSION_NUMBER >= 0x10100000L return EC_KEY_get_ex_new_index(0, NULL, NULL, aziot_key_dupf_ec_key_ex_data, aziot_key_freef_ec_key_ex_data); #else return ECDSA_get_ex_new_index(0, NULL, NULL, aziot_key_dupf_ec_key_ex_data, aziot_key_freef_ec_key_ex_data); #endif } #if OPENSSL_VERSION_NUMBER >= 0x30000000L int aziot_key_dupf_rsa_ex_data(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, void **from_d, int idx, long argl, void *argp); #elif OPENSSL_VERSION_NUMBER >= 0x10100000L int aziot_key_dupf_rsa_ex_data(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, void *from_d, int idx, long argl, void *argp); #else int aziot_key_dupf_rsa_ex_data(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d, int idx, long argl, void *argp); #endif void aziot_key_freef_rsa_ex_data(void* parent, void* ptr, CRYPTO_EX_DATA* ad, int idx, long argl, void* argp); int aziot_key_get_rsa_ex_index() { return RSA_get_ex_new_index(0, NULL, NULL, aziot_key_dupf_rsa_ex_data, aziot_key_freef_rsa_ex_data); }