// Create the OpenSSL representation of the key void OSSLDHPublicKey::createOSSLKey() { if (dh != NULL) return; dh = DH_new(); if (dh == NULL) { ERROR_MSG("Could not create DH object"); return; } // Use the OpenSSL implementation and not any engine #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) #ifdef WITH_FIPS if (FIPS_mode()) DH_set_method(dh, FIPS_dh_openssl()); else DH_set_method(dh, DH_OpenSSL()); #else DH_set_method(dh, DH_OpenSSL()); #endif #else DH_set_method(dh, DH_OpenSSL()); #endif BIGNUM* bn_p = OSSL::byteString2bn(p); BIGNUM* bn_g = OSSL::byteString2bn(g); BIGNUM* bn_pub_key = OSSL::byteString2bn(y); DH_set0_pqg(dh, bn_p, NULL, bn_g); DH_set0_key(dh, bn_pub_key, NULL); }
const DH_METHOD *DH_get_default_method (void) { if (!default_DH_method) { #ifdef OPENSSL_FIPS if (FIPS_mode ()) return FIPS_dh_openssl (); else return DH_OpenSSL (); #else default_DH_method = DH_OpenSSL (); #endif } return default_DH_method; }