svn commit: r494948 - head/security/john/files
Alexey Dokuchaev
danfe at FreeBSD.org
Thu Mar 7 14:09:37 UTC 2019
Author: danfe
Date: Thu Mar 7 14:09:35 2019
New Revision: 494948
URL: https://svnweb.freebsd.org/changeset/ports/494948
Log:
Unbreak GPG format plugin against newer versions of OpenSSL.
Obtained from: https://github.com/magnumripper/JohnTheRipper/commit/c0557e7
Added:
head/security/john/files/patch-gpg__fmt__plug.c (contents, props changed)
Added: head/security/john/files/patch-gpg__fmt__plug.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/security/john/files/patch-gpg__fmt__plug.c Thu Mar 7 14:09:35 2019 (r494948)
@@ -0,0 +1,117 @@
+--- gpg_fmt_plug.c.orig 2014-12-18 07:59:02 UTC
++++ gpg_fmt_plug.c
+@@ -930,8 +930,12 @@ static int check_dsa_secret_key(DSA *dsa)
+ {
+ int error;
+ int rc = -1;
++#if OPENSSL_VERSION_NUMBER >= 0x10100000
++ const BIGNUM *p, *q, *g, *pub_key, *priv_key;
++#endif
+ BIGNUM *res = BN_new();
+ BN_CTX *ctx = BN_CTX_new();
++
+ if (!res) {
+ fprintf(stderr, "failed to allocate result BN in check_dsa_secret_key()\n");
+ exit(-1);
+@@ -941,23 +945,35 @@ static int check_dsa_secret_key(DSA *dsa)
+ exit(-1);
+ }
+
++#if OPENSSL_VERSION_NUMBER >= 0x10100000
++ DSA_get0_pqg(dsa, &p, &q, &g);
++ DSA_get0_key(dsa, &pub_key, &priv_key);
++ error = BN_mod_exp(res, g, priv_key, p, ctx);
++#else
+ error = BN_mod_exp(res, dsa->g, dsa->priv_key, dsa->p, ctx);
++#endif
++
+ if ( error == 0 ) {
+ goto freestuff;
+ }
+
++#if OPENSSL_VERSION_NUMBER >= 0x10100000
++ rc = BN_cmp(res, pub_key);
++#else
+ rc = BN_cmp(res, dsa->pub_key);
++#endif
+
+ freestuff:
+
+ BN_CTX_free(ctx);
+ BN_free(res);
++#if OPENSSL_VERSION_NUMBER < 0x10100000
+ BN_free(dsa->g);
+ BN_free(dsa->q);
+ BN_free(dsa->p);
+ BN_free(dsa->pub_key);
+ BN_free(dsa->priv_key);
+-
++#endif
+ return rc;
+ }
+
+@@ -1212,9 +1228,7 @@ static int check(unsigned char *keydata, int ks)
+ return 0;
+ if (blen < cur_salt->datalen && ((b = BN_bin2bn(out + 2, blen, NULL)) != NULL)) {
+ char *str = BN_bn2hex(b);
+- DSA dsa;
+- ElGamal_secret_key elg;
+- RSA_secret_key rsa;
++
+ if (strlen(str) != blen * 2) { /* verifier 2 */
+ OPENSSL_free(str);
+ return 0;
+@@ -1222,6 +1236,28 @@ static int check(unsigned char *keydata, int ks)
+ OPENSSL_free(str);
+
+ if (cur_salt->pk_algorithm == 17) { /* DSA check */
++#if OPENSSL_VERSION_NUMBER >= 0x10100000
++ DSA *dsa = DSA_new();
++ BIGNUM *p, *q, *g, *pub_key, *priv_key;
++
++ p = BN_bin2bn(cur_salt->p, cur_salt->pl, NULL);
++ // puts(BN_bn2hex(dsa.p));
++ q = BN_bin2bn(cur_salt->q, cur_salt->ql, NULL);
++ // puts(BN_bn2hex(dsa.q));
++ g = BN_bin2bn(cur_salt->g, cur_salt->gl, NULL);
++ // puts(BN_bn2hex(dsa.g));
++ priv_key = b;
++ pub_key = BN_bin2bn(cur_salt->y, cur_salt->yl, NULL);
++
++ DSA_set0_pqg(dsa, p, q, g);
++ DSA_set0_key(dsa, pub_key, priv_key);
++
++ // puts(BN_bn2hex(dsa.pub_key));
++ ret = check_dsa_secret_key(dsa); /* verifier 3 */
++ DSA_free(dsa);
++#else
++ DSA dsa;
++
+ dsa.p = BN_bin2bn(cur_salt->p, cur_salt->pl, NULL);
+ // puts(BN_bn2hex(dsa.p));
+ dsa.q = BN_bin2bn(cur_salt->q, cur_salt->ql, NULL);
+@@ -1232,10 +1268,13 @@ static int check(unsigned char *keydata, int ks)
+ dsa.pub_key = BN_bin2bn(cur_salt->y, cur_salt->yl, NULL);
+ // puts(BN_bn2hex(dsa.pub_key));
+ ret = check_dsa_secret_key(&dsa); /* verifier 3 */
++#endif
+ if (ret != 0)
+ return 0;
+ }
+ if (cur_salt->pk_algorithm == 16 || cur_salt->pk_algorithm == 20) { /* ElGamal check */
++ ElGamal_secret_key elg;
++
+ elg.p = BN_bin2bn(cur_salt->p, cur_salt->pl, NULL);
+ // puts(BN_bn2hex(elg.p));
+ elg.g = BN_bin2bn(cur_salt->g, cur_salt->gl, NULL);
+@@ -1249,8 +1288,10 @@ static int check(unsigned char *keydata, int ks)
+ return 0;
+ }
+ if (cur_salt->pk_algorithm == 1) { /* RSA check */
++ RSA_secret_key rsa;
+ // http://www.ietf.org/rfc/rfc4880.txt
+ int length = 0;
++
+ length += give_multi_precision_integer(out, length, &cur_salt->dl, cur_salt->d);
+ length += give_multi_precision_integer(out, length, &cur_salt->pl, cur_salt->p);
+ length += give_multi_precision_integer(out, length, &cur_salt->ql, cur_salt->q);
More information about the svn-ports-all
mailing list