Fix build with opaque DH in LibreSSL 3.5.

Index: src/std/crypto/libcrypto-rfc5114.c
--- src/std/crypto/libcrypto-rfc5114.c.orig
+++ src/std/crypto/libcrypto-rfc5114.c
@@ -107,11 +107,22 @@ static BIGNUM* get_bn(BIGNUM **bn, const char *hex) {
 #define make_dh(param)                          \
   DH *DH_get_##param(void) {                    \
     DH *dh = DH_new ();                         \
+    BIGNUM *p, *q, *g;                          \
     if (!dh) return NULL;                       \
-    dh->p = get_bn(&bn_dh##param##_p, dh##param##_p); \
-    dh->g = get_bn(&bn_dh##param##_g, dh##param##_g); \
-    dh->q = get_bn(&bn_dh##param##_q, dh##param##_q); \
-    if (!dh->p || !dh->q || !dh->g) {                 \
+    p = get_bn(&bn_dh##param##_p, dh##param##_p); \
+    g = get_bn(&bn_dh##param##_g, dh##param##_g); \
+    q = get_bn(&bn_dh##param##_q, dh##param##_q); \
+    if (!p || !q || !g) {                             \
+      BN_free(p);                                     \
+      BN_free(q);                                     \
+      BN_free(g);                                     \
+      DH_free(dh);                                    \
+      return NULL;                                    \
+    }                                                 \
+    if (!DH_set0_pqg(dh, p, q, g)) {                  \
+      BN_free(p);                                     \
+      BN_free(q);                                     \
+      BN_free(g);                                     \
       DH_free(dh);                                    \
       return NULL;                                    \
     }                                                 \
