Generate Diffie-Hellman keys
$ cat main.c
#include <stdlib.h>
#include <stdio.h>
#include <openssl/dh.h>
#include <openssl/engine.h>
typedef struct dh_st DH;
# gcc main.c -lssl -lcrypto -o main
int generateDHKey(int);
int main(int argc, char *argv[]){
printf("Hello\n");
generateDHKey(2048);
return 0;
}
int generateDHKey(int keySize){
DH *tempPrivKey = NULL;
int res = 0;
int sizeDH = 0;
FILE *f = NULL;
tempPrivKey = DH_new();
DH_generate_parameters_ex(tempPrivKey, keySize, DH_GENERATOR_2, NULL);
if (tempPrivKey == NULL){
printf("Failed to generate DH\n");
return -1;
}
res = DH_generate_key(tempPrivKey);
if (res != 1){
printf("Failed to generate private key");
return -1;
}
sizeDH = DH_size(tempPrivKey);
printf("Size: %d\n", sizeDH);
f = fopen("dhparam", "w");
DHparams_print_fp(f, tempPrivKey);
fclose(f);
f = fopen("dhKey", "w");
PEM_write_DHparams(f, tempPrivKey);
fclose(f);
DH_free(tempPrivKey);
return 0;
}
$ gcc main.c -lssl -lcrypto -o main