#include #include #include void init_openssl(void) { SSL_library_init(); SSL_load_error_strings(); ERR_load_BIO_strings(); OpenSSL_add_all_algorithms(); } SSL_CTX *create_context() { const SSL_METHOD *method; SSL_CTX *ctx; method = SSLv23_server_method(); ctx = SSL_CTX_new(method); if (!ctx) { printf("Unable to create context!\n"); exit(1); } return ctx; } int main(int argc, char **argv) { SSL_CTX *ctx; SSL *ssl; BIO *in_bio; BIO *out_bio; const char *version; init_openssl(); ctx = create_context(); ssl = SSL_new(ctx); in_bio = BIO_new(BIO_s_mem()); out_bio = BIO_new(BIO_s_mem()); if ((in_bio == NULL) || (out_bio == NULL)) { printf("Unable to allocate BIOs\n"); exit(2); } SSL_set_bio(ssl, in_bio, out_bio); SSL_set_connect_state(ssl); version = SSL_get_version(ssl); printf("Version: %s\n", version); SSL_free(ssl); SSL_CTX_free(ctx); return 0; }