瀏覽代碼

Update dhparam for OpenSSL 1.1.

This is based on the output from 'openssl dhparam -C'
Bryan Drewery 8 年之前
父節點
當前提交
e43cfc5432
共有 2 個文件被更改,包括 46 次插入6 次删除
  1. 45 6
      src/dhparam.cc
  2. 1 0
      src/libcrypto.cc

+ 45 - 6
src/dhparam.cc

@@ -27,12 +27,25 @@ DH *get_dh2048() {
     0x02,
   };
   DH *dh;
+  BIGNUM *dhp_bn, *dhg_bn;
 
   if ((dh=DH_new()) == NULL) return(NULL);
-  dh->p=BN_bin2bn(dh2048_p,sizeof(dh2048_p),NULL);
-  dh->g=BN_bin2bn(dh2048_g,sizeof(dh2048_g),NULL);
+  dhp_bn = BN_bin2bn(dh2048_p, sizeof(dh2048_p), NULL);
+  dhg_bn = BN_bin2bn(dh2048_g, sizeof(dh2048_g), NULL);
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+  if (dhp_bn == NULL || dhg_bn == NULL
+      || !DH_set0_pqg(dh, dhp_bn, NULL, dhg_bn)) {
+    DH_free(dh);
+    BN_free(dhp_bn);
+    BN_free(dhg_bn);
+    return NULL;
+  }
+#else
+  dh->p = dhp_bn;
+  dh->g = dhg_bn;
   if ((dh->p == NULL) || (dh->g == NULL))
   { DH_free(dh); return(NULL); }
+#endif
   return(dh);
 }
 /*
@@ -64,12 +77,25 @@ DH *get_dh1024() {
     0x02,
   };
   DH *dh;
+  BIGNUM *dhp_bn, *dhg_bn;
 
   if ((dh=DH_new()) == NULL) return(NULL);
-  dh->p=BN_bin2bn(dh1024_p,sizeof(dh1024_p),NULL);
-  dh->g=BN_bin2bn(dh1024_g,sizeof(dh1024_g),NULL);
+  dhp_bn = BN_bin2bn(dh1024_p, sizeof(dh1024_p), NULL);
+  dhg_bn = BN_bin2bn(dh1024_g, sizeof(dh1024_g), NULL);
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+  if (dhp_bn == NULL || dhg_bn == NULL
+      || !DH_set0_pqg(dh, dhp_bn, NULL, dhg_bn)) {
+    DH_free(dh);
+    BN_free(dhp_bn);
+    BN_free(dhg_bn);
+    return NULL;
+  }
+#else
+  dh->p = dhp_bn;
+  dh->g = dhg_bn;
   if ((dh->p == NULL) || (dh->g == NULL))
   { DH_free(dh); return(NULL); }
+#endif
   return(dh);
 }
 /*
@@ -92,12 +118,25 @@ DH *get_dh512() {
     0x02,
   };
   DH *dh;
+  BIGNUM *dhp_bn, *dhg_bn;
 
   if ((dh=DH_new()) == NULL) return(NULL);
-  dh->p=BN_bin2bn(dh512_p,sizeof(dh512_p),NULL);
-  dh->g=BN_bin2bn(dh512_g,sizeof(dh512_g),NULL);
+  dhp_bn = BN_bin2bn(dh512_p, sizeof(dh512_p), NULL);
+  dhg_bn = BN_bin2bn(dh512_g, sizeof(dh512_g), NULL);
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+  if (dhp_bn == NULL || dhg_bn == NULL
+      || !DH_set0_pqg(dh, dhp_bn, NULL, dhg_bn)) {
+    DH_free(dh);
+    BN_free(dhp_bn);
+    BN_free(dhg_bn);
+    return NULL;
+  }
+#else
+  dh->p = dhp_bn;
+  dh->g = dhg_bn;
   if ((dh->p == NULL) || (dh->g == NULL))
   { DH_free(dh); return(NULL); }
+#endif
   return(dh);
 }
 /*

+ 1 - 0
src/libcrypto.cc

@@ -86,6 +86,7 @@ static int load_symbols(void *handle) {
   DLSYM_GLOBAL(handle, DH_get0_key);
   DLSYM_GLOBAL(handle, DH_set0_key);
   DLSYM_GLOBAL(handle, DH_set0_pqg);
+  DLSYM_GLOBAL(handle, BN_free);
 #endif
   DLSYM_GLOBAL(handle, EVP_cleanup);
   DLSYM_GLOBAL(handle, CRYPTO_cleanup_all_ex_data);