#include #include #include #include #include char *prime1080="FBE1022E23D213E8ACFA9AE8B9DFADA3EA6B7AC7A7B7E95AB5EB2DF858921FEADE95E6AC7BE7DE6ADBAB8A783E7AF7A7FA6A2B7BEB1E72EAE2B72F9FA2BFB2A2EFBEFAC868BADB3E828FA8BADFADA3E4CC1BE7E8AFE85E9698A783EB68FA07A77AB6AD7BEB618ACF9CA2897EB28A6189EFA07AB99A8A7FA9AE299EFA7BA66DEAFEFBEFBF0B7D8B"; char *generator = "2"; int main() { SSL_load_error_strings(); SSL_library_init(); OpenSSL_add_all_algorithms(); DH *dhA = DH_new(); DH *dhB = DH_new(); unsigned char* keyA = NULL; unsigned char* keyB = NULL; BIGNUM *bn_prime1080 = BN_new(); BIGNUM *bn_generator = BN_new(); BN_init(bn_prime1080); BN_init(bn_generator); BN_hex2bn(&bn_prime1080, prime1080); BN_hex2bn(&bn_generator, generator); dhA->p = dhB->p = bn_prime1080; dhB->g = dhB->g = bn_generator; DH_generate_key(dhA); DH_generate_key(dhB); keyA = (unsigned char*)malloc(DH_size(dhA)); keyB = (unsigned char*)malloc(DH_size(dhB)); DH_compute_key(keyA,dhB->pub_key, dhA); DH_compute_key(keyB,dhA->pub_key, dhB); printf("key a: %s\n",keyA); printf("key b: %s\n",keyB); free(keyA); free(keyB); DH_free(dhA); DH_free(dhB); BN_free(bn_prime1080); BN_free(bn_generator); return 0; }