Provide DSA_set0_pqg.
authortb <tb@openbsd.org>
Sun, 18 Feb 2018 12:50:58 +0000 (12:50 +0000)
committertb <tb@openbsd.org>
Sun, 18 Feb 2018 12:50:58 +0000 (12:50 +0000)
ok jsing

lib/libcrypto/Symbols.list
lib/libcrypto/dsa/dsa.h
lib/libcrypto/dsa/dsa_lib.c

index aeafb88..79b2e94 100644 (file)
@@ -795,6 +795,7 @@ DSA_new
 DSA_new_method
 DSA_print
 DSA_print_fp
+DSA_set0_pqg
 DSA_set_default_method
 DSA_set_ex_data
 DSA_set_method
index 608c15d..21e5baa 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: dsa.h,v 1.24 2018/02/17 14:35:40 jsing Exp $ */
+/* $OpenBSD: dsa.h,v 1.25 2018/02/18 12:50:58 tb Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -259,6 +259,7 @@ DH *DSA_dup_DH(const DSA *r);
 
 void DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q,
     const BIGNUM **g);
+int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g);
 void DSA_get0_key(const DSA *d, const BIGNUM **pub_key, const BIGNUM **priv_key);
 
 #define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \
index ae9155c..2dec856 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: dsa_lib.c,v 1.24 2018/02/17 13:47:36 tb Exp $ */
+/* $OpenBSD: dsa_lib.c,v 1.25 2018/02/18 12:50:58 tb Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -315,6 +315,29 @@ DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g)
                *g = d->g;
 }
 
+int
+DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g)
+{
+       if ((d->p == NULL && p == NULL) || (d->q == NULL && q == NULL) ||
+           (d->g == NULL && g == NULL))
+               return 0;
+
+       if (p != NULL) {
+               BN_free(d->p);
+               d->p = p;
+       }
+       if (q != NULL) {
+               BN_free(d->q);
+               d->q = q;
+       }
+       if (g != NULL) {
+               BN_free(d->g);
+               d->g = g;
+       }
+
+       return 1;
+}
+
 void
 DSA_get0_key(const DSA *d, const BIGNUM **pub_key, const BIGNUM **priv_key)
 {