[openssl] master update

tomas at openssl.org tomas at openssl.org
Thu Feb 18 10:02:48 UTC 2021


The branch master has been updated
       via  ba37b82045b1b2fbcbf7580b317de5e3b52c8035 (commit)
       via  ebcaf110b250cd55281500fa1debef806ab490f0 (commit)
      from  e36b3c2f757cc7d68dc24174a00476104428b099 (commit)


- Log -----------------------------------------------------------------
commit ba37b82045b1b2fbcbf7580b317de5e3b52c8035
Author: Tomas Mraz <tomas at openssl.org>
Date:   Wed Feb 10 18:44:00 2021 +0100

    dsa_check: Perform simple parameter check if seed is not available
    
    Added primality check on p and q in the ossl_ffc_params_simple_validate().
    Checking for p and q sizes in the default provider is made more
    lenient.
    Added two testcases for invalid parameters.
    
    Fixes #13950
    
    Reviewed-by: Shane Lontis <shane.lontis at oracle.com>
    (Merged from https://github.com/openssl/openssl/pull/14148)

commit ebcaf110b250cd55281500fa1debef806ab490f0
Author: Dmitry Belyavskiy <beldmit at gmail.com>
Date:   Fri Jan 22 13:44:16 2021 +0100

    DSA parameter check using pkeyparam
    
    Reviewed-by: Shane Lontis <shane.lontis at oracle.com>
    Reviewed-by: Tomas Mraz <tomas at openssl.org>
    (Merged from https://github.com/openssl/openssl/pull/14148)

-----------------------------------------------------------------------

Summary of changes:
 crypto/dh/dh_key.c                                 |  2 +-
 crypto/dsa/dsa_check.c                             | 19 +++--
 crypto/dsa/dsa_err.c                               |  1 +
 crypto/dsa/dsa_key.c                               |  2 +-
 crypto/err/openssl.txt                             |  1 +
 crypto/ffc/ffc_params_generate.c                   | 10 +--
 crypto/ffc/ffc_params_validate.c                   | 98 ++++++++++++++++++----
 include/crypto/dsa.h                               |  2 +-
 include/internal/ffc.h                             |  8 +-
 include/openssl/dsaerr.h                           |  1 +
 providers/implementations/keymgmt/dsa_kmgmt.c      |  6 +-
 test/recipes/15-test_dsaparam.t                    | 78 +++++++++++++++++
 .../invalid/p2048_q256_bad_q.pem                   | 14 ++++
 .../invalid/p768_q160_too_small.pem                |  7 ++
 .../valid/p1024_q160_t1862.pem                     |  9 ++
 .../valid/p1024_q160_t1862_gind1.pem               |  9 ++
 .../valid/p1024_q160_t1864.pem                     |  9 ++
 .../valid/p1024_q160_t1864_gind1.pem               |  9 ++
 .../valid/p1024_q224_t1862.pem                     |  9 ++
 .../valid/p1024_q224_t1862_gind1.pem               |  9 ++
 .../valid/p1024_q256_t1862.pem                     |  9 ++
 .../valid/p1024_q256_t1862_gind1.pem               |  9 ++
 .../valid/p2048_q160_t1862.pem                     | 14 ++++
 .../valid/p2048_q160_t1862_gind1.pem               | 14 ++++
 .../valid/p2048_q224_t1862.pem                     | 14 ++++
 .../valid/p2048_q224_t1862_gind1.pem               | 14 ++++
 .../valid/p2048_q224_t1864.pem                     | 14 ++++
 .../valid/p2048_q224_t1864_gind1.pem               | 14 ++++
 .../valid/p2048_q256_t1862.pem                     | 14 ++++
 .../valid/p2048_q256_t1862_gind1.pem               | 14 ++++
 .../valid/p2048_q256_t1864.pem                     | 14 ++++
 .../valid/p2048_q256_t1864_gind1.pem               | 14 ++++
 .../valid/p3072_q160_t1862.pem                     | 19 +++++
 .../valid/p3072_q160_t1862_gind1.pem               | 19 +++++
 .../valid/p3072_q224_t1862.pem                     | 19 +++++
 .../valid/p3072_q224_t1862_gind1.pem               | 19 +++++
 .../valid/p3072_q256_t1862.pem                     | 19 +++++
 .../valid/p3072_q256_t1862_gind1.pem               | 19 +++++
 .../valid/p3072_q256_t1864.pem                     | 19 +++++
 .../valid/p3072_q256_t1864_gind1.pem               | 19 +++++
 40 files changed, 577 insertions(+), 36 deletions(-)
 create mode 100644 test/recipes/15-test_dsaparam.t
 create mode 100644 test/recipes/15-test_dsaparam_data/invalid/p2048_q256_bad_q.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/invalid/p768_q160_too_small.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862_gind1.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864_gind1.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862_gind1.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862_gind1.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862_gind1.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862_gind1.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864_gind1.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862_gind1.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864_gind1.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862_gind1.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862_gind1.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862_gind1.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864.pem
 create mode 100644 test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864_gind1.pem

diff --git a/crypto/dh/dh_key.c b/crypto/dh/dh_key.c
index be940456cd..f8cbbd593b 100644
--- a/crypto/dh/dh_key.c
+++ b/crypto/dh/dh_key.c
@@ -328,7 +328,7 @@ static int generate_key(DH *dh)
             {
                 /* Do a partial check for invalid p, q, g */
                 if (!ossl_ffc_params_simple_validate(dh->libctx, &dh->params,
-                                                     FFC_PARAM_TYPE_DH))
+                                                     FFC_PARAM_TYPE_DH, NULL))
                     goto err;
                 /*
                  * For FFC FIPS 186-4 keygen
diff --git a/crypto/dsa/dsa_check.c b/crypto/dsa/dsa_check.c
index 9a1b129df8..7f56a785ab 100644
--- a/crypto/dsa/dsa_check.c
+++ b/crypto/dsa/dsa_check.c
@@ -19,14 +19,19 @@
 #include "dsa_local.h"
 #include "crypto/dsa.h"
 
-int dsa_check_params(const DSA *dsa, int *ret)
+int dsa_check_params(const DSA *dsa, int checktype, int *ret)
 {
-    /*
-     * (2b) FFC domain params conform to FIPS-186-4 explicit domain param
-     * validity tests.
-     */
-    return ossl_ffc_params_FIPS186_4_validate(dsa->libctx, &dsa->params,
-                                              FFC_PARAM_TYPE_DSA, ret, NULL);
+    if (checktype == OSSL_KEYMGMT_VALIDATE_QUICK_CHECK)
+        return ossl_ffc_params_simple_validate(dsa->libctx, &dsa->params,
+                                               FFC_PARAM_TYPE_DSA, ret);
+    else
+        /*
+         * Do full FFC domain params validation according to FIPS-186-4
+         *  - always in FIPS_MODULE
+         *  - only if possible (i.e., seed is set) in default provider
+         */
+        return ossl_ffc_params_full_validate(dsa->libctx, &dsa->params,
+                                             FFC_PARAM_TYPE_DSA, ret);
 }
 
 /*
diff --git a/crypto/dsa/dsa_err.c b/crypto/dsa/dsa_err.c
index 99fc0e80fb..6481e2dc58 100644
--- a/crypto/dsa/dsa_err.c
+++ b/crypto/dsa/dsa_err.c
@@ -32,6 +32,7 @@ static const ERR_STRING_DATA DSA_str_reasons[] = {
     {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_NO_PARAMETERS_SET), "no parameters set"},
     {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_PARAMETER_ENCODING_ERROR),
     "parameter encoding error"},
+    {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_P_NOT_PRIME), "p not prime"},
     {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_Q_NOT_PRIME), "q not prime"},
     {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_SEED_LEN_SMALL),
     "seed_len is less than the length of q"},
diff --git a/crypto/dsa/dsa_key.c b/crypto/dsa/dsa_key.c
index 899663353f..8646d01957 100644
--- a/crypto/dsa/dsa_key.c
+++ b/crypto/dsa/dsa_key.c
@@ -77,7 +77,7 @@ static int dsa_keygen(DSA *dsa, int pairwise_test)
 
     /* Do a partial check for invalid p, q, g */
     if (!ossl_ffc_params_simple_validate(dsa->libctx, &dsa->params,
-                                         FFC_PARAM_TYPE_DSA))
+                                         FFC_PARAM_TYPE_DSA, NULL))
         goto err;
 
     /*
diff --git a/crypto/err/openssl.txt b/crypto/err/openssl.txt
index 002a7a0f10..530e3217e4 100644
--- a/crypto/err/openssl.txt
+++ b/crypto/err/openssl.txt
@@ -502,6 +502,7 @@ DSA_R_MISSING_PRIVATE_KEY:111:missing private key
 DSA_R_MODULUS_TOO_LARGE:103:modulus too large
 DSA_R_NO_PARAMETERS_SET:107:no parameters set
 DSA_R_PARAMETER_ENCODING_ERROR:105:parameter encoding error
+DSA_R_P_NOT_PRIME:115:p not prime
 DSA_R_Q_NOT_PRIME:113:q not prime
 DSA_R_SEED_LEN_SMALL:110:seed_len is less than the length of q
 DSO_R_CTRL_FAILED:100:control command failed
diff --git a/crypto/ffc/ffc_params_generate.c b/crypto/ffc/ffc_params_generate.c
index 9285f93c05..2e50c2b801 100644
--- a/crypto/ffc/ffc_params_generate.c
+++ b/crypto/ffc/ffc_params_generate.c
@@ -77,12 +77,12 @@ static int ffc_validate_LN(size_t L, size_t N, int type, int verify)
         ERR_raise(ERR_LIB_DH, DH_R_BAD_FFC_PARAMETERS);
 # endif
     } else if (type == FFC_PARAM_TYPE_DSA) {
-        if (L == 1024 && N == 160)
-            return 80;
-        if (L == 2048 && (N == 224 || N == 256))
-            return 112;
-        if (L == 3072 && N == 256)
+        if (L >= 3072 && N >= 256)
             return 128;
+        if (L >= 2048 && N >= 224)
+            return 112;
+        if (L >= 1024 && N >= 160)
+            return 80;
 # ifndef OPENSSL_NO_DSA
         ERR_raise(ERR_LIB_DSA, DSA_R_BAD_FFC_PARAMETERS);
 # endif
diff --git a/crypto/ffc/ffc_params_validate.c b/crypto/ffc/ffc_params_validate.c
index 22983d62ef..a2bfe22da2 100644
--- a/crypto/ffc/ffc_params_validate.c
+++ b/crypto/ffc/ffc_params_validate.c
@@ -13,6 +13,10 @@
  * It calls the same functions as the generation as the code is very similar.
  */
 
+#include <openssl/err.h>
+#include <openssl/bn.h>
+#include <openssl/dsaerr.h>
+#include <openssl/dherr.h>
 #include "internal/ffc.h"
 
 /* FIPS186-4 A.2.2 Unverifiable partial validation of Generator g */
@@ -88,30 +92,92 @@ int ossl_ffc_params_FIPS186_2_validate(OSSL_LIB_CTX *libctx,
  * extra parameters such as the digest and seed, which may not be available for
  * this test.
  */
-int ossl_ffc_params_simple_validate(OSSL_LIB_CTX *libctx, FFC_PARAMS *params,
-                                    int type)
+int ossl_ffc_params_simple_validate(OSSL_LIB_CTX *libctx, const FFC_PARAMS *params,
+                                    int paramstype, int *res)
 {
-    int ret, res = 0;
-    int save_gindex;
-    unsigned int save_flags;
+    int ret;
+    int tmpres = 0;
+    FFC_PARAMS tmpparams = {0};
 
     if (params == NULL)
         return 0;
 
-    save_flags = params->flags;
-    save_gindex = params->gindex;
-    params->flags = FFC_PARAM_FLAG_VALIDATE_G;
-    params->gindex = FFC_UNVERIFIABLE_GINDEX;
+    if (res == NULL)
+        res = &tmpres;
+
+    if (!ossl_ffc_params_copy(&tmpparams, params))
+        return 0;
+
+    tmpparams.flags = FFC_PARAM_FLAG_VALIDATE_G;
+    tmpparams.gindex = FFC_UNVERIFIABLE_GINDEX;
 
 #ifndef FIPS_MODULE
-    if (save_flags & FFC_PARAM_FLAG_VALIDATE_LEGACY)
-        ret = ossl_ffc_params_FIPS186_2_validate(libctx, params, type, &res,
-                                                 NULL);
+    if (params->flags & FFC_PARAM_FLAG_VALIDATE_LEGACY)
+        ret = ossl_ffc_params_FIPS186_2_validate(libctx, &tmpparams, paramstype,
+                                                 res, NULL);
     else
 #endif
-        ret = ossl_ffc_params_FIPS186_4_validate(libctx, params, type, &res,
-                                                 NULL);
-    params->flags = save_flags;
-    params->gindex = save_gindex;
+        ret = ossl_ffc_params_FIPS186_4_validate(libctx, &tmpparams, paramstype,
+                                                 res, NULL);
+#ifndef OPENSSL_NO_DH
+    if (ret == FFC_PARAM_RET_STATUS_FAILED
+        && (*res & FFC_ERROR_NOT_SUITABLE_GENERATOR) != 0) {
+        ERR_raise(ERR_LIB_DH, DH_R_NOT_SUITABLE_GENERATOR);
+    }
+#endif
+
+    ossl_ffc_params_cleanup(&tmpparams);
+
     return ret != FFC_PARAM_RET_STATUS_FAILED;
 }
+
+/*
+ * If possible (or always in FIPS_MODULE) do full FIPS 186-4 validation.
+ * Otherwise do simple check but in addition also check the primality of the
+ * p and q.
+ */
+int ossl_ffc_params_full_validate(OSSL_LIB_CTX *libctx, const FFC_PARAMS *params,
+                                  int paramstype, int *res)
+{
+    int tmpres = 0;
+
+    if (params == NULL)
+        return 0;
+
+    if (res == NULL)
+        res = &tmpres;
+
+#ifdef FIPS_MODULE
+    return ossl_ffc_params_FIPS186_4_validate(libctx, params, paramstype,
+                                              res, NULL);
+#else
+    if (params->seed != NULL) {
+        return ossl_ffc_params_FIPS186_4_validate(libctx, params, paramstype,
+                                                  res, NULL);
+    } else {
+        int ret = 0;
+
+        ret = ossl_ffc_params_simple_validate(libctx, params, paramstype, res);
+        if (ret) {
+            BN_CTX *ctx;
+
+            if ((ctx = BN_CTX_new_ex(libctx)) == NULL)
+                return 0;
+            if (BN_check_prime(params->q, ctx, NULL) != 1) {
+# ifndef OPENSSL_NO_DSA
+                ERR_raise(ERR_LIB_DSA, DSA_R_Q_NOT_PRIME);
+# endif
+                ret = 0;
+            }
+            if (ret && BN_check_prime(params->p, ctx, NULL) != 1) {
+# ifndef OPENSSL_NO_DSA
+                ERR_raise(ERR_LIB_DSA, DSA_R_P_NOT_PRIME);
+# endif
+                ret = 0;
+            }
+            BN_CTX_free(ctx);
+        }
+        return ret;
+    }
+#endif
+}
diff --git a/include/crypto/dsa.h b/include/crypto/dsa.h
index 8d282ab188..3da5696795 100644
--- a/include/crypto/dsa.h
+++ b/include/crypto/dsa.h
@@ -33,7 +33,7 @@ int dsa_key_fromdata(DSA *dsa, const OSSL_PARAM params[]);
 
 int dsa_generate_public_key(BN_CTX *ctx, const DSA *dsa, const BIGNUM *priv_key,
                             BIGNUM *pub_key);
-int dsa_check_params(const DSA *dsa, int *ret);
+int dsa_check_params(const DSA *dsa, int checktype, int *ret);
 int dsa_check_pub_key(const DSA *dsa, const BIGNUM *pub_key, int *ret);
 int dsa_check_pub_key_partial(const DSA *dsa, const BIGNUM *pub_key, int *ret);
 int dsa_check_priv_key(const DSA *dsa, const BIGNUM *priv_key, int *ret);
diff --git a/include/internal/ffc.h b/include/internal/ffc.h
index 7653b6e2fa..4cffc720a6 100644
--- a/include/internal/ffc.h
+++ b/include/internal/ffc.h
@@ -162,8 +162,12 @@ int ossl_ffc_params_FIPS186_2_gen_verify(OSSL_LIB_CTX *libctx,
                                          size_t L, size_t N, int *res,
                                          BN_GENCB *cb);
 
-int ossl_ffc_params_simple_validate(OSSL_LIB_CTX *libctx, FFC_PARAMS *params,
-                                    int type);
+int ossl_ffc_params_simple_validate(OSSL_LIB_CTX *libctx,
+                                    const FFC_PARAMS *params,
+                                    int paramstype, int *res);
+int ossl_ffc_params_full_validate(OSSL_LIB_CTX *libctx,
+                                  const FFC_PARAMS *params,
+                                  int paramstype, int *res);
 int ossl_ffc_params_FIPS186_4_validate(OSSL_LIB_CTX *libctx,
                                        const FFC_PARAMS *params,
                                        int type, int *res, BN_GENCB *cb);
diff --git a/include/openssl/dsaerr.h b/include/openssl/dsaerr.h
index 49dabbf575..669cd6c87f 100644
--- a/include/openssl/dsaerr.h
+++ b/include/openssl/dsaerr.h
@@ -35,6 +35,7 @@
 #  define DSA_R_MODULUS_TOO_LARGE                          103
 #  define DSA_R_NO_PARAMETERS_SET                          107
 #  define DSA_R_PARAMETER_ENCODING_ERROR                   105
+#  define DSA_R_P_NOT_PRIME                                115
 #  define DSA_R_Q_NOT_PRIME                                113
 #  define DSA_R_SEED_LEN_SMALL                             110
 
diff --git a/providers/implementations/keymgmt/dsa_kmgmt.c b/providers/implementations/keymgmt/dsa_kmgmt.c
index 28e8409aa2..467f75bb55 100644
--- a/providers/implementations/keymgmt/dsa_kmgmt.c
+++ b/providers/implementations/keymgmt/dsa_kmgmt.c
@@ -309,11 +309,11 @@ static const OSSL_PARAM *dsa_gettable_params(void *provctx)
     return dsa_params;
 }
 
-static int dsa_validate_domparams(const DSA *dsa)
+static int dsa_validate_domparams(const DSA *dsa, int checktype)
 {
     int status = 0;
 
-    return dsa_check_params(dsa, &status);
+    return dsa_check_params(dsa, checktype, &status);
 }
 
 static int dsa_validate_public(const DSA *dsa)
@@ -350,7 +350,7 @@ static int dsa_validate(const void *keydata, int selection, int checktype)
         ok = 1;
 
     if ((selection & OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS) != 0)
-        ok = ok && dsa_validate_domparams(dsa);
+        ok = ok && dsa_validate_domparams(dsa, checktype);
 
     if ((selection & OSSL_KEYMGMT_SELECT_PUBLIC_KEY) != 0)
         ok = ok && dsa_validate_public(dsa);
diff --git a/test/recipes/15-test_dsaparam.t b/test/recipes/15-test_dsaparam.t
new file mode 100644
index 0000000000..c34d8ec9cd
--- /dev/null
+++ b/test/recipes/15-test_dsaparam.t
@@ -0,0 +1,78 @@
+#! /usr/bin/env perl
+# Copyright 2017-2020 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License").  You may not use
+# this file except in compliance with the License.  You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use File::Spec;
+use OpenSSL::Glob;
+use OpenSSL::Test qw/:DEFAULT data_file/;
+use OpenSSL::Test::Utils;
+
+setup("test_dsaparam");
+
+=pod Generation script
+
+#!/bin/sh
+
+TESTDIR=test/recipes/15-test_dsaparam_data/valid
+rm -rf $TESTDIR
+mkdir -p $TESTDIR
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:160 -pkeyopt type:fips186_4 -out $TESTDIR/p1024_q160_t1864.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:224 -pkeyopt type:fips186_4 -out $TESTDIR/p2048_q224_t1864.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:256 -pkeyopt type:fips186_4 -out $TESTDIR/p2048_q256_t1864.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:256 -pkeyopt type:fips186_4 -out $TESTDIR/p3072_q256_t1864.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:160 -pkeyopt type:fips186_4 -pkeyopt gindex:1 -out $TESTDIR/p1024_q160_t1864_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:224 -pkeyopt type:fips186_4 -pkeyopt gindex:1 -out $TESTDIR/p2048_q224_t1864_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:256 -pkeyopt type:fips186_4 -pkeyopt gindex:1 -out $TESTDIR/p2048_q256_t1864_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:256 -pkeyopt type:fips186_4 -pkeyopt gindex:1 -out $TESTDIR/p3072_q256_t1864_gind1.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -out $TESTDIR/p1024_q160_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -out $TESTDIR/p1024_q224_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -out $TESTDIR/p1024_q256_t1862.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -out $TESTDIR/p2048_q160_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -out $TESTDIR/p2048_q224_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -out $TESTDIR/p2048_q256_t1862.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -out $TESTDIR/p3072_q160_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -out $TESTDIR/p3072_q224_t1862.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -out $TESTDIR/p3072_q256_t1862.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p1024_q160_t1862_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p1024_q224_t1862_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p1024_q256_t1862_gind1.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p2048_q160_t1862_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p2048_q224_t1862_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p2048_q256_t1862_gind1.pem
+
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:160 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p3072_q160_t1862_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:224 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p3072_q224_t1862_gind1.pem
+./util/opensslwrap.sh genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:3072 -pkeyopt qbits:256 -pkeyopt type:fips186_2 -pkeyopt gindex:1 -out $TESTDIR/p3072_q256_t1862_gind1.pem
+
+=cut
+
+plan skip_all => "DSA isn't supported in this build"
+    if disabled("dsa");
+
+my @valid = glob(data_file("valid", "*.pem"));
+my @invalid = glob(data_file("invalid", "*.pem"));
+
+my $num_tests = scalar @valid + scalar @invalid;
+plan tests => $num_tests;
+
+foreach (@valid) {
+    ok(run(app([qw{openssl pkeyparam -noout -check -in}, $_])));
+}
+
+foreach (@invalid) {
+    ok(!run(app([qw{openssl pkeyparam -noout -check -in}, $_])));
+}
diff --git a/test/recipes/15-test_dsaparam_data/invalid/p2048_q256_bad_q.pem b/test/recipes/15-test_dsaparam_data/invalid/p2048_q256_bad_q.pem
new file mode 100644
index 0000000000..6f7d98ddfb
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/invalid/p2048_q256_bad_q.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICLAKCAQEAwmWp4Y+deYlczoQUPiioJt6Qxthrk6L1CAVpGH2uRRlHfTl41WUX
+JHIJyCMBgRDtVVQdyAQ7AZ+CxOl1wpazvGJddyQVynhmIFsaUwHF2fYIT00MvBRL
+9VA5PQqUmX2Tnog5ezu35CTsEqlBTOYcGqkQ7ctNVjfvjYCkwzvTxJS/Qsvki+dA
+fE7NDWe+9r5QjSGEFZtH45alIM4qUnBS1mcN2Az5+S8JxPiivY5Jkt0pXoRQnvCM
+In4bHjM8ZOVmLxFCIrpB0dNgKDg+2zEjRjmL7B4aZRcO7wDyrtDPc7jiYPH/rlt/
+wU1o/Y1fnzN9+R3f0AMeWR44bqf5Ol9jVQIhAKDEbXZJcYLbvkUYWBr8TKsVu2hc
+H57M3PwkTsq+v2/dAoIBADKkGYUe9qsp4mqxkBKaEdpcjmjfLrvtE+3ikipPPGHh
+tbAX7NwZc9WCyhniKYskEbJBWsuAZJXDgIRNaSpCVLK7dd9fx8ZnIKJESO6Htv1z
+JfSIST57xW8L6m78Lq2kxpr5dVcm7I4pelTfL5jscTURm/1Ua+2skI9YlZU/Vgux
+Wrr30H8bp4fUgWjcgPJbeirSY7xVI8FKrQaES0s4NRFbgGMFUrEGddBF0bgaGkwd
+mFEpcXAEQDTJV7SPJp3rbjFug3CF4Atw3RmkV2T/sHAbplyr9YsQDmAQDhPsaWjQ
+eSsoRUq0aQ4aa2V4X/gSzSj9It3Q4ngQwkGGOPJEo44=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/invalid/p768_q160_too_small.pem b/test/recipes/15-test_dsaparam_data/invalid/p768_q160_too_small.pem
new file mode 100644
index 0000000000..c717c917a1
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/invalid/p768_q160_too_small.pem
@@ -0,0 +1,7 @@
+-----BEGIN DSA PARAMETERS-----
+MIHcAmEA702xO4DjQl4WxLId1FR8Q0tZ+FQDEqyhzfYheBnLra8Uaf3gLp7V0g52
+aQqDTeY1TK76ZmNo/SvESDcYTHjlgKphYCKLRxAhvuyGfX1RRPWa80BrM76wYtJD
+mwB9KSBnAhUArp9BUvskZ9/K8Bzo0MVejsHC6AkCYEugdq5OD0HjCrxt3hFMD3sJ
+ZQ7VAZa+Fnu9SJNjCeMYLEww4/A6fktqokDWITjSQpdJAAxwc+r8OlDRwBb0q7jT
+w1IDvvbF/xGex5VzHHBZmQU1G1jH+Lq3h7dQ6d4l+g==
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862.pem
new file mode 100644
index 0000000000..a348548d69
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBHgKBgQD9xYIlQ/DsVYRe/mLETy7f7U3uKakTOPPDUcmd1Oyaopii0hKek+kN
+Uo8gKEMrakJfJcWQmHwGrxbbPRndY7t/3VcNDukETNlrTeHenkIUOfGzE/+mMsr/
+yS0r8xKjsZU886tWU22ngQoftPZ3a+P4sm84yjBzWbOKMKKSw3G3TQIVAMiAYpYu
+M8Yh1gu5xsa6GHugzBBTAoGAOxWSatlBZLsMYzqJmzlhzQpc3yJ4RTu2tBZKZbP0
+1AOfLCOD3XXgvVWBEaY0t3sfTqv+iJw5qvmtfkYGeFyU6U3z/pTtDUcSenykU2Rf
++FM00ZgsjHSFCV80V95SaHIEEjqsrvfq6g3GHElxaSJ1ov/D9UrB4fiFJk15B4jd
+vP8=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862_gind1.pem
new file mode 100644
index 0000000000..9b8522f847
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1862_gind1.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBHgKBgQDSK3iZ8B7b7aqw8u4h5frUf0245I7CqfIP1smwcCPuPpsrGAIpto2R
+/VjaPxTljGyg+DoKBHh8+g3GyIDTCF95KZITZFnNhdgszulUMOBo6BVIcow2xb5P
+5OuEEs8SI8msPJ+DELktb4k7R7ErmQkFJkw+js7Cp+OynJXFEeM1/QIVAP0eH8DN
+0CVrbBWIKTni5GYMq9w1AoGAS71s2Qtb3i18BTjQpvircllI1JJg2KM0PSrd395l
+U5QzWLlOiagq3VxZasl/xVPRWLEjsjJvW0br0+etaK/RUCRh9umiKtAA6ej0CU8H
+en/LyRimo/62jB9OUGmNeIlMbDCmTBj0wSicbxTFnyMmnExyRhpmpwxB4R5D1Do9
+7no=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864.pem
new file mode 100644
index 0000000000..2ee282a775
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBHwKBgQC0mfNiG3j2s4OVjBSfxcHRAKm0Pq1EMInOH08H6rGDv2z+jxjpcV8M
+trTPH+edBXpcPIfj/g8W4uHzQbrhkgBD5oVFgxeNkdx4XFs6hYR/+Rffoz1yCyrK
+Y3u6KuliLh78b35nrD8a60c+sdEeyqyQyityC/DLfDPsHsaDoci/pQIVAKVuzcUl
+eLXk7fMosqqyWdRYuqT/AoGBAKA1RycVanmWQDK0GC+qz7YWK9pbN6jOTor+0lYZ
+X+ZOOgOJfd2VxN6BRMLrLZzwyZzLkLxCfGewtIESt7VOinJXlV/GQOaw4jSVUpMZ
+Vk3XXGzlCREZ3Io3/RB38jvK5L0GAvdlCHC2+SRz3zJv/xsu6jp5YUDyKA6BCpSc
+Z1dn
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864_gind1.pem
new file mode 100644
index 0000000000..64abf5ed23
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q160_t1864_gind1.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBHwKBgQDAs/X8j/GO88thl0UtbO1yzQd1rmDrZDuCz9u7KGb8nih4FMqRvqZq
+6SZ/jsgWVVmKSz4BR+pBXYhtzjWk9hJwtyDDMKgb/aQ+A6ceN3Q+56+wyrtq4IHn
+GSxq1qos6OGUo2eJ/OnwrFcssmdhsPJh+mRbksFlj4ioOiWFZP6EdwIVAKTxLxHR
+1mqrb8VzuKQtF4v29OX9AoGBALIvy95r7pNVU21AvWdgiqZ/0KgOl6Ltw39a4YoB
+1KJvAB7w3A+++Y9dJ2KSOcDleea/vOB/zke6Gn8tchTLxC+5wgxqJYWQyIJ2ayU+
+kuGbg73x25ZbxwOf/L/LXawlbYw96K/q8gHtTAemegbg3mA5FdB980PT4QO7r/Wk
+8pE8
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862.pem
new file mode 100644
index 0000000000..a6ac0a106d
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBJwKBgQCYF3IejaKxzlgFtW2qEHTuciYxEwQDK9wQoJXqnoeCfc0ZzyW0p/1y
+ykjmyQibL425XHDqa8n4juHVDlR7sdkWQgCxU9Y476zHMAllJiMRLb0YWd3htG8e
+4RrZdBp2ja/axeY0Yt4Y3tpLt8a1Wm6h6E17ZDkWJOHsiyhS0/A3GQIdAPFwM2kA
+z0GDenrDrTZReA1en6dw7ks5zyWkpO0CgYEAhULB2zCf7nKNmnbMAZM1M+UyooV7
+9x0esJ0nD192zQSfp5bLMFRobHw8ZJRNwwaxNvGj7T6kN1v0JbF2kD6CQ5qR+VQ0
+B5kPnrLEe1rEnMI5GY3mUEhuXT39aaEZgSZlr6Y28UGMaVPsLK/tUHQRv7NgbSSF
+VKxcAFZi3K4b2jQ=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862_gind1.pem
new file mode 100644
index 0000000000..0a2f828a14
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q224_t1862_gind1.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBJgKBgQCS0aAy145AKj1XTv8Xn0iBHRdJCHNue94IhsSuOLfqi1Usj1uff+Ti
+mV3Rb2EPvGAMoGVnenvH7X3MjO1qWUW1hHPVfZZ6cEJwMoOEht/2X5rv9r8TZiEU
+iMIMQNSwdGeRUqsCCEWhGKVhVVkZmHSRhwmG9Y9b2YibPDWEk+8o/QIdAOaZ2Kx/
+nK8OMtoJ7nY51gt6qk8BaLk6JELdsLUCgYAUUhmgW95kcJt15TZqFsVV0CXADHqc
+LYT4WcPsXuJdiQorZqeyRXNPzGoRvk9s1nqrDwoIwTcl2rArLPq5phcIEGtATR8B
+inIIAPB3v+i6vuZ5TfqdVpA9E4NDNr/hTKR+Jn6hNLzliETHwAXiC+cuAq32sUiW
+Ec0eJs9/vgTiOg==
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862.pem
new file mode 100644
index 0000000000..075b1fb785
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBKgKBgQD2JhtE0H2GzUgkWXHSj4aLIMdpLhbpcNeM8UR+GCr/QMv9YDmNmdyr
+imWHrgc8RhPECHAYkhMT6CbRp7X0eOJH/+Z+wYezCzbj6tWSMhXv0cNmD2qJFNNr
+g4ps0xfA2EljAzwQP+GifJuaZXcDrPvolSCaTIirOXUgWWZhRuPUhwIhAJhvIt08
+R98NOzAtFpzE1zIUCLPmCchNpPOLTbzOockVAoGALCWqChas4A2gweHVumUFYk8f
+1IEQUsiw/79hQwYk6vGETs0sxHwd+XXAAUhs0ogHmg1pV9FF0cktSgp8IPXQMf3x
+/pSfhyAexSY3DWhuFcYkYCrhDHfqMoyylrbdvjPnFONw4RqQWN0Skhwq+/Kdki5P
+hf8w4xPcc+HNB76vpd0=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862_gind1.pem
new file mode 100644
index 0000000000..6cd9a27adb
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p1024_q256_t1862_gind1.pem
@@ -0,0 +1,9 @@
+-----BEGIN DSA PARAMETERS-----
+MIIBKgKBgQD02ixBdDQoEc5FADUTwlD7DMVb0EkZRlEuC78fH2xorsBBam/3JS84
+x5uiV5UpdyGEZaORTHOmQFC3DvtwojkCEpOzbITYft34ngXGrANdkAAYkfmtbkWH
+Oudses211ciLVNEtcvnWp9koyMwaiW8UJS8VXZPPdrF+5Sk7yUWYtwIhAK68pcA1
++/GbxzchcTcOEd1UzrhnJiQuWhCLAbrF8TjPAoGAVethgbgs116PQGJVwsRwCW+j
+dz609/2baEKKVfKnUCSbngA2nZ2EUw8fQjZvvkGeEnGc3noJkDthjxiEITvcXgQT
+59qRury4mxPPJ6bKp1U4SpJlmpNl/Uigm3olF45YOjOPrlyj5mIn/fHKvXp+9VH8
+KRjGRfDduSvStNrSQWU=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862.pem
new file mode 100644
index 0000000000..4f247195a5
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICIAKCAQEAy4AQqY3+v5g3hulKvCH9iUzGOprsNag0knEt+xdSS7z2kpxj1ab3
+8DJDtIBfn1B92X6GjaiCKuH1FX2acIEq0DOvl4zNYQ7WSTA7Z5+MXK8Zk7slxr9y
+MhDj4xyOAnxZ3Rlkuv7H5HgNzS2lP3bZLiFFWw4YYqOLZxzjHDcaTVqU6orNmIJX
+6d9qW1MIxhVtKCjPsCqfY3qY206so3dxi+bK8EsweTBP03HO/SmcYIhFVStekE5v
+LoCSzTjDOK0DisW4SGF42m3Yh3m52Hk2fOckhc1si/JHA3Tko0VnRqUYz6gP2vWs
+7SkJzZSlwQFmxKkUXPdypyn+bA0XAyfQFwIVAMxf1UMfNLp0iajYC/liKwUgS7uT
+AoIBABA1H4tJZyvC7+J/xUf2jxIgHlGiJq3G70CXgHr3LKHhLWK/WHSJAsXGKYsl
+ZFB/pQmjocwthHYGicwB7pwYHotEv+JNMAWLiZjwb1MckGCZW6HcVsfXw52abqUP
+tqGAJu/KbuJEVtoDz3m7umI/S0IHSW8kRY4I96jL+uPXvGOTgnAHtjaxYCEZL3iK
+/vRpjuE7A52a52IZGZ+GlQxmfT3cOnHLTZpKaQhFJ6mZyrOYzaLVVnC2JJDMeUuK
+w34pH6dqmxPL41uwPyv0cCuzCfAlXbrWPs2AkFbBuKnyD8+hxpy1rz6EK1dVleLW
+mgxBLFL2D3yc59rp1hZU/bwIcSs=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862_gind1.pem
new file mode 100644
index 0000000000..e839783209
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q160_t1862_gind1.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICIAKCAQEAvGtt/0832RbWBAXM9y3ubL7Hj/VZuQo318k8DUbTv1/886isw4uX
+Sphv6TsLO9qb7Ma1k18L4bK04NNQheSfvq5LZbMtX/VHWaoCSuzMj73Z+XTWTr/N
+aYwVAUq1J/XrX+P5F9b2KCEJ7iLAL0BkZXnIMVMwWcqmY7JthdQYzCwOc6S93aiV
+MEHKtekj5KtxhmD5o6tPs1GrVdnCUGXAZZbi1eVHbUro114SyWGflvnaxC+4WGRz
+GN9EoqtPZhOKlsAHaEZilf8tJDVOi7rnYw9gFvQH6PUWOV6U2fuYBmUBD8fSx1YE
+xv1dd/rawmKJ40ILXxOM2zzMYXwHse/qQwIVAP/hJF3q0imEjGKYSxaJ3cVZ7agp
+AoIBABRqCTro/ynhun43xrU/FRhsUIK1ewp5NEBOsaUMjm7w5HBVHfytwyGB+WJp
+h3Og73szKv2JsNNWOc+ASw116/mTosO49AJWk3YYdcoIiOpZbO41+4BWAIxE0ZqT
+Bjq6uQ3FR6EE+yQk486uIR4KqQ3Uj+BfQ6qJ+hOQI2gpNUkIxNNXVmYYgRZM9H1U
+oYTqeJYACR2spZYTRwwzUMFQzfBVyT7if/zHYi5NSAdeK/sjGT+XXAFw52e839nK
+7P5UUjCaqsduLuRkYcWE7f6hqgi2O2Rgn4kTaRrL7c4FBLmz+vlEffJJKNnjyX1k
+m+RhuXnP8UzBtsUdz+7Z+EioRB4=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862.pem
new file mode 100644
index 0000000000..113aca5427
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICKQKCAQEAkv8C0SmPpJc0mQ6yVzDzQr2jIO3Gj2n7MSJ4EN816CecMmO8vBRz
+8x8W1BvjYDJiyFW7KIJcgI48D7rBndKqd2A8r9ErPJrFx/7AnPD5/b77vRKcJ14S
+8DNjSm+9Qg8281TeIztUrmUjWHIPj1ZNSev1yaprK5u01BSi+YIAxNOST4RrMurZ
+wz75VW4QZ/JkAwYy/r9LSmqeli3Hqy1sS52B1Ew/c1tVj6th+dPlprOPiPCzj6KD
+BkxDU2wjJJE2rYiMZqq3wKHlkuNl54T211DrYY0tM1YWSrPO/KjQU6lNP6DQK0WM
+w414Rt2MpXipr3+eSNGIx+evNOS2qJ84YQIdAPTt4hrsGeHjF2/fhkWJm+LP9FCM
+4fiSw79D9D8CggEBAI75tDjL8/Eipou9X61x9ZobVyubG/VaLWCV5mv4Wn4j22Gn
+T9OABbmZUAJAp18CTouXXU7zjR6f5mFgC/h/fgOqVqe5M9rAyZ0h/2TZ5cwnya/n
+8NydZzJCDPihpk2BXuxWVqX8J0R8MuaOQSSh+LqTd0FgW+by6i9jJm4ZREp6h5v/
+Bam4BPtNdLVKUDk09B0ILfry5St+hFdFdU7HtTgTIBb8buNaNGbiTYgDPaz2YjLT
+Nuaq71RU37PBxmbmgCz/rwAdNzQ/eGylfIPNO68YkFTY0zhYKBZfLEtpKN5s8gPT
+wpXU8+lm3EnkoG9h7+qbCIs6G5PUu+FartqzPpQ=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862_gind1.pem
new file mode 100644
index 0000000000..c7071a2856
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1862_gind1.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICKQKCAQEA5uZxsPfUbcP0YBjVZ8QTc8b0Vv1kphd4FnoqMZgW3aGYL4iTN/I8
+av157vC6PW1x2YeHyjktd3yVJGZidqzfnoYuQdZi3wrJDST8BrGLgh0fuRNjH/RD
+/OUdCPCJteobUpRn6myPscvAQyHsWisKpFJcOnmqBlZNfommoXD+a5weABA0KAay
+MJu1+ahTaTjWCSGQCQ/JqSHFmYVy88l09yqFaHfvG3L62tATvqvuJZ2cshl5RCYQ
+ajXZS0moA7mk3ApShLdvskD9yLZVzPLb4gaG0gT/h36d/gqgZi8pq4KdlSxuAIDa
+7QRYWQqLWB/NgHsSvbSoxPN+ibfyyDPzIwIdAJu0noHZp7BCtEhtqSZkVSvGfrL3
+HQh+JP1TMtcCggEBAJlFpiWZ+n0W9dqHZ35QG1e5goMQusyJ0Oke31hCEyKVY1gu
+1gdxUVirhQwNpdfeBJMHzMNFpD3ocC3lMKRwEN2oZMXECkjzAPbqyvNs55i38CGn
+NW/5aAqkBnJvG4/O+ANwB+r64hgUiwIxlBW3w6TQri3Wa/c5xCvThneRFTFGuDWi
+r7hPDIeIyUYzgE6bJelX09ruhQEzeyFj2snfr0uCPjf2lqqy3FnoTVjrZtkSr+Av
+/esxiZjLfuqZQhYJtQsAIbuu83rD6VUnMF5X0XqQugMMJXxJgcBgomE6cHlrpqXL
+hJD6l77XftHNokshhCQxk7w/N/pH2j4Pxidfj28=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864.pem
new file mode 100644
index 0000000000..9b65430b58
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICKAKCAQEA126Pk1rYEEQXV5E2hdg+uS+KfbEdtOncGOoMiCUajJgIdpmPycUh
+R5VE66AuwjryRaBAezW71UVfgEKyu5521aTl0SB9N62EkVQ0KtRErSiynZ9jOC58
+4zeRsRUquzbl7OyaYqgZz0N+AuKQYeS/SZUhvFUONJ9wQgVEpLF3Gfeq1xFx1TgM
+JTCyMyh6lZwvZvYa3bXcoxfCpsyo/mHmKZB63n+AKy2YRWfMpGFTc0osygaoLFRe
+hgo928CU5rcGq3uhkBIRRkYvjq7v1wPNgkdydtPxzsJ/2slZmoD1l92TK0XJGP58
+FP+o9ThvAg8wobLP/rIW/IerL/v0jo4URwIdAPuKgUfEDIyRPWaL3ZqRGrd9xm1o
+S8t/0jlAJ0UCggEATxHNhkSCNWypeGWe6SQH7VZBdlcVO4gDu6g04Ui+XaIaMAKg
+WtYBlmeyzvArfyZxG/o3mrFL/B1/d3boNkgu850M5Ijz5qY1O4NO2Dof4uLXi+vy
+zBJ4ThHF+5p4mr7JSIjVGHpTHCOQEQTAI44LcIdFij8cqQXRUB5MVERkRqY+5lEe
+c6oqildf8Gd99xOIdp/R2hD0tRkwMH+zFKYFuDlmX35X4tagzvQRNYBx/KMgFuXl
+ZbSMoBIEbF8SvzeJp04FwxjE+OpBur2EMuyjWyxbho42Mque+mAqwJQ8xNLzC1QY
+S2CHPTT22NehGZOLK4YtSoU8GUTiQT8xDUitXw==
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864_gind1.pem
new file mode 100644
index 0000000000..e715e4836a
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q224_t1864_gind1.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICKQKCAQEA18dE+jFlsFpb68u1HSpjkDsOfBpimo24pBPUPstH5bg1vZNUFXwj
+J3BgLw0qOQ4COO9UvLxthcNr/tirW8txqBoVVB0iw+gScPeZQCkSOhwB9MZq15hd
+us3a8bBrXe1MXSJ6HMsCJFo3VUM3grLg3IIvMZT13MDlEFre/Ttds4UupSl/WEiv
+PjZnUEY6BD9JXNTWAzmHq2gIzQFLd9vLun/KpStotiBitUwXZXy3WTvz25dRpRnA
+XCa4MXBAGHsKhFOL1ccLpHgiX2ELWkyopjWEErFLyyAJcynhx2PrQTrIhfv4rgdE
+1ecqOi6I2oxntmFyjIjFJ4e8h2GKwxL8WwIdAN8WQLZ6RfMm2Zl3tGVJVldNKaMW
+2r0cQuKFL2cCggEBANBlnziHSTcuv7L2SK/nqbivto5xjnnJg8XGGL3ZqWCbbNyv
+PJ/XyromDzuMcGBIokn9n6g4YXqh2ik0in3ntOycP5D/JYzANJW7hGefHQ8zonSb
+VgncDeX5DfqhPVFvsGhRCPxWehVzvYf/6TPEI1Mhoodj5cOf1+ZQLk31Jhnj62Uj
+OC+++GU78p2Ys9vtZXKdpGkHxh5ad/PwyAsbk1a7hNFxPBqm8kZt4GPfslz1e2ZA
+QtQENIs3Xd56yzSZM34Q/H1eDREr6vqd5wpNoERMtdvD5cthgpp4cureCDEmaKRr
+iLG0Z9vWn6sUCnbHH5ieZ/q6lodfKE1aR/dUkDM=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862.pem
new file mode 100644
index 0000000000..773ef4fd93
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICLAKCAQEAgp20bAUCq6LO/qtRdecf1jBrQQSIN7RkiciGLqS6lZsC48EzSbmu
+XfSMybc/zsid4D5qwKBwNedEeL7IO1hHESBZ6qD8Hfk02V7QbyatxDX7i6/XkcCo
+R9a2pbRDQA149pI13lBSINUAygLk33ez8HviDg27/WeCRaB6QgSMBK3p3XmSCuzz
+yVwA59XblCgxqfXWCHyMP6i7o97s/I+CoEryGBtoY2pXpRFakaFzzvMymiU8z4eX
+TWjAx4RMkwjDgQvgFEd4na32V0C6NMvQTVVoiPNf85YC9cP2zsoMCS7Yn1OAvn6u
+rKr++eLJKJbOtagRyC9hKCFIL/XXB31FNwIhAOUwm8S5B/PqQmjLAP1NRQCjScxd
+MNhND3vLSiO2DtS/AoIBADt/4Matb9qA/hKmDj3YxsEKElUUrPkhF/fSyVU12SIp
+cT6B860JJ6dUD5PefAwQA47DxJ+T/LTyYyJGK+xw0jKlIH+e1zmhxd6fZyQ82UES
+Cb5bulzEsMIZFV2BdKlLppHw6yhUE0qr3nl9gr/4TPULNpT8rVKZhW3MdA7u08PW
+7dV2XhY0PliYByGZr1ZjKJM7bpjkWLvJAN1WrwSlHjcJV9vdD6tqIRbVzjOqrcN5
+xlP3JdkQV5iXs3RlZ8JrH1M+MWp6udt4TqkkPkn9VzG4Kkzw9BKn/643Aei14Jet
+bucs20eyianZeBHqkH/sMw/tfM1e3GwdnH+I714WTH0=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862_gind1.pem
new file mode 100644
index 0000000000..a405a4a38b
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1862_gind1.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICLAKCAQEAyKq4F2lBf+8YckEU6JW+pfOqViJjtpOdVlZGDq65sYeUs6hUo+Qs
+biO6mZy8m3XyEWnSR/d0suL93xkjtoo82M5jYkz49I7rAHWRJV2WLjWz37asjBzN
+F1dYg0RtEio+mEQv2mzLzr5mNeh7XcjRtTMW6iNH3GAQ/kuFjKY2nEPvJc8m4Udx
+RYGjGSyL2vdWJf6iQsxv7YmbsF9P0ZQhvLu9VhoZhtNaujqAl+fsfno2cgfDyf31
+Ppsnkl1WuBM3eD8ZWPB7mjsxS1z7Fxh3OxaqTbA1Hd8Fj0ixNG+D6kDoErSnZjg5
+Bc4bjLG10o+B3bCiRx/3ozM9IRGSrpI/ZQIhAMNuTbIp8SR1EtifRudeNiM9Tlk3
+0CmrVR2hzRUSpKPNAoIBADuHBrhuKj93By8DgllwZ/cJOXKV32frVdocX5PAOEIv
+2jDFd2ya2Gyi/nS/AE1UimvjAFP9nofyzvDJG0xOhqvwmVU2kdj7632JdSFj/Lzj
+twtqNDve2OYdcZ4GCBiH6XOoURX3HOhJqqYtEJHkW7OKFzhlAYZWreELm9RaiuFU
++QgMmVZ6wdbnNoOBpjCjzjtMf+7pX7Whh1g/siYo0fR+LVHHfqHpxBuXWGbbOL04
+cSV0/JF2xqynH74ySqvuoEA3o7K+2Xo0JRGcwE/lkJZTEYaahJmeVQ3Nf2NOrOFY
+J0NRY9hOCEz8oQOC0AmBj4OaKaoFQKkP3DQWFNjK4jQ=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864.pem
new file mode 100644
index 0000000000..36674bf95c
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICLAKCAQEA/nlxxQ86nKiHEsmMT5OtmxXp2tHw//Kz+9089krs/fN+KT8mxUlC
+5Czyx3Y8NPCratNfxrB9/74BVFedkt18GMVRUaQNRQw0q0aWrrzPhZpXxBskiXOA
+mQelUKdMmuK7ZbulrNjInWIAV9Pr3yO7FOWO272VhoBGL3nasp+5znGLLBUZm+kZ
+MEnk8Us1/8KEn4/5Q7bzvaN/Pge2kBF6JPkPprtsCJgy7aJO3ydDc0/GZIfB68Q7
+RbTMvCCLuMzgYdeLc20y0d5CZ570gPBU7zl/ix+a8Plyue9hX5NHt1aHFTGpLNyl
+tH2WCiHhJNLcyacbOVK9Gz7XMMeFDR5/AwIhANY0MlY3BTnv9wp4cnACCzNGskxc
+XKxwqCalKyQJtRbLAoIBAD1HVMIL/zH5PcEu7hCFkd5O6cJYR5ETRWYk3VQw/i5r
+P4jQhoQH/ztY84pr2cd7/maGSbz9O0D6o1M/im3TX2+NrjzwlTNYTRaPI2vV1Z4N
+wb/3zczBshhwpZ6heFxIfnchejw9hAXERz94AWfKPN+e4mIGII62Udna5AeOJufM
+9KW2PGd9GP0n1HlziDUYtZXlgCqgQvYlfPp3fj6Cdy49MsY7ZeEfEljXWM5+mX8u
+lVLTqN0uwkLudAuN51nphaIJI+AJ+TR7rFgYEoG2O/6uoqxBVgMoTKkkJqHM3UhE
+5pd7AMkOUpUzuw1YDCW9mdUY1dAgOJr8GZnknWAdjvQ=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864_gind1.pem
new file mode 100644
index 0000000000..398b266940
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p2048_q256_t1864_gind1.pem
@@ -0,0 +1,14 @@
+-----BEGIN DSA PARAMETERS-----
+MIICLQKCAQEA2Drds0DjRV8ht73dVp44MMtcjvSxugNuElrwheVB5Bm1wsmrEVnt
+MSGdZJ5FpndQD/ndqSctTssjW+cxjJ4mHjVTXpTZURQZW0MNkn7+qVw6oFrnd+qq
+tDkh0jnaTYTNiEp6qm5QmnEC/Ccvr3YZuY9EHurzVptJuoRIMgFGCz4CHj5q2vQ/
+CPvBohUSvC9EmKGveWGFID+tmFWuHZ9d9pF/GWjA2rdW//uRiStssbN24jscsbZ6
+XnNrJpgyGYYjugsl+catrMkodstrLsk7YvEYcE6YYN0TwZc9kjJ5f3ydQnI35Y/s
+EQPtP7DdA8aLaOC1ra2Nakm2ZW+pkygPMQIhAI2NF0GuR7NjD7lXx6gnVyk3p6gR
+l7u+BNIhHFVJP2/9AoIBAQCvGDoQ9S6So58RDz15ghYjpdNSzCBtA6ixYszesSJU
+DksnEDV34AEB2C8/uvzcSIca3314dDsE2R0ubTrh4J/2JNbNE9M5UYEaJh0oK7LW
+h7YZ2XI5j08/aAApRsR84kcZdE3r+QYFHTuEnoc0ADkC3J9uIuQwl/CgTkw56OBP
+MmA1GD79/MeYc/mvJujujWG0Y+tyuQCORzcYccEpYR8q6kf1r7+IUy1L8r4XFIwM
+oW9eB4XyTrA8wKtWQfEpSAo+PX59hfafuOG8wKUPbTANSFK2ePQRJO/6T81rofOF
+Bz9oeTjZV0f0EkJIcF14V2rksGVT0kAHndBw73w27ofj
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862.pem
new file mode 100644
index 0000000000..c8d172b13d
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDIAKCAYEAzEjKQVdMNYbt8uE5P5znYqjWHP+G6Bp6Q93i0eE9NG15G+cBlcke
+OJoYQr2fc3ypl6zjO6g8uZQHYvbQGY1zmYnGPikL+AgYqCpbFZHvZ2pG56TJ+2I/
++d2zmsZifqkXsgQIRa6Hqp+JMW3y53PZjIEn2JYK1pTMRKfIWrfeYwoiZwi1rbeP
+l+0D1MgT5AuLXw5H0wWNdKGScbbftRVNm3K3RwukICOvbpEQXIeI04I9wh2oS7x+
+evjZ0YXfN0HsUWYQ8rfA3i2OU9gUVFcbSgdpoSqtkicGJ/6AyyCENr2AuKFAkZ1A
+BWYAJn2Nd4apsMflZckq8XdxX77juprjCsZ1DVn4X3hMRz4rnwqq6yPF31/KWyTx
+s33PK0JixJCnOzpponSljC8Bo+iTmE9GvBBsxCFZXmKK1bWQpaedUpqcX4eaQHGK
+fr7s0R9Ga+Z7LRvD2HeiZUSq+2fk9oW8nTzac/yFiQGlAq82WvQGIV3puYHtxHnZ
+Ii24PuTDgy1BAhUAjyumRyUZPh0vSI+VGAJDqiMcmBUCggGAR+j+RHswsFB+TaHv
+z8/b9zEBYOUvBfNeX3zs7teQnjRlTZJz2pwo0V2vv503Gv0s9d4Pzsw+ccDikqTr
+je3HV8h4iEwb2meh4oFNmUUFuyk5RgEJ8yDPgWgcKTV5bX62QRg0Uch8hRPYCKjn
+2hrLWCAc9qIHJY++s08uc1m799sn4chffNkb+fds2DOzzHKkKtj2WXzNyvFBnDOx
+qFArr2H+g7Xfx+ykIjMpG3jxKClT+n2a0tiqDYD3HG4gxD2keTBpE/YinEm/6CnT
+tLPi8K5wg22GxBpwB/MSBN2W7Q5fw9DnZLk6ROITMmYJE4NU7gEilkNaEmiajBXu
+FfyfZdvc+GqpdH64TuzbbvaXckKfEpYEnYSJbIi3WX/71MtSAe4wIWAkU5xB/ujl
+3gjX4qJQpm5k5aRVdJJ0IyVz7HaePpO7cdgKbcXiYPCdYIno8eDnUntDEwymmgnU
+wsxOzNKiKkXRnku8Or34DiJvgIz5yyZGpIYI2keKNF2A0ins
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862_gind1.pem
new file mode 100644
index 0000000000..e8d10f776b
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q160_t1862_gind1.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDIAKCAYEAyu7VtPuTmkampDvDUwh9tXFDrwrTDOKf7KbokrFNoT3xRjeIce8g
+2t2q62jMrk2JnVziGBwq4vRCB6nUTxNnaKry6hF1h2sitlhONHcnNPWW1pXZ8SNZ
+W7/YlsATYd3rfsVdtQ1VLnDmoGmSWjsJ0Oh5+XNw/v+DUvl2zaTtaMDl6ST+tH2w
+K39RMEWJuUxBMFurWgcqc8jUcvVXSJcL+1Wf1DrVDEG1b6LgCTZeDnfpKaPMzHfW
+BnxFMgA9SGek7CwSSOs5L9TmKeQHO2zKZ+pdQejITim5LnzsozgU/Fu66vE9shzu
+d9ogHPlAqIpUFKyF4cJPXTNMpsBcsu2pJ0hJ6GoMINl6lTVWRNjWOtVeAn4mHLVQ
+oA5OSHHq3nTALETGWkQabC28qh7OK3EbYdjyF4M+gaPWhR5X7qqSy9tUwfLcxc9Z
+ngFsrRIDGWywofV3p+PRGSz/HAX4PB9bD3du4cDlT7F5MQsEpoQ0UaaMHp/RzeTo
+yiIJDS9fBhtZAhUA4pXEvfNK1n84nAesZsnGmSHB+M0CggGAHQhfqwV7g8UT/JPX
+5pJ9cBtLkeTdm0FhrkdoZ5mrfXJuml5mhdQwHh/gT5mQG8ilweaVh1P4GwR3CQ+o
+1xqmoKzmu6B68exIXnW9JXrSC0HvthVzjve04P98VZWVzSPMAtfuFDa/XbXMqLdj
+evZpBKTeAK1AO0R41t1By30epWazajHNZi5FmV5uwZsJPAqHe0asRhWALAWYK1gK
+kdhJhPAlaYTpYnSgrUqM1svnO7T4JLGrzR+ijrs1B8R4EnYsrldQUnqzi5mdweAw
+wugnvJTkFOmVn1iAnR0FIpFLzLh/pkp3Ajb4iK7R4hfAqHqlqhhqjHTPzjvKRdMn
+bXpAiY8CAC47dNd4t/bIymv4bLXjMxrecd9Ar1LZe3Chcr1egPuOjdOFEcK1MP6w
+wIPXJqtYulXjCfd3WR6uQSu/AsyCpOmzyR8EFZN10KoWLAEnGzdRXI5GQ9ddZl5o
+tNBAwCGTXg6tTv8FscyLLFbfJ3WOSbe+rNb1MrVHshFBzvG8
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862.pem
new file mode 100644
index 0000000000..40e8e120da
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDKQKCAYEAxzGWJFWDGakaCqZHIekcTxRN6axWx6rTOyV1ZSljtuqNtGR4gZVW
+BAxKs5eFqykkLl0JmiBJJ8hHpNEWLxU0CG/ZDh7OhlmgUL/o1TeVHHXChyGL4dwn
+ds6VXAyBR7lSKoCfvdDpPkQb193XoXnjkt8qLwu4KVT+Xdv4F5oaulCbbMojqoP/
+VEyiYQhPVImIluiEYqjo3xQPAe1vgQ5gAqPnfmcppeHFkUWEGFn7qTTf+9EnUBtu
+LTLfwzedwMQhJ32lBqouPqv7QB74KcvzYIJJKb3WTskiLcYOO7dcYEv02q3KYLrY
+ij89nU3So5E60GLeQhFvQJA+kaAWC9bOpZT3pMsw9EDvHcbs+jNHNeZgrP9sgxya
+X8/sW4QVjsQC3GC5L/wmEC6TtdXLZjr1z8aYi2HPO1VmSR26+Q+jwXfWT7mjrvZH
+A1MIB9p8D3CcKOf0bgTSPq9J+NrUuTOQ/vL2JiQDqRiIfWACd3T8SSNANx9H08xg
+fHpaurhi3703Ah0AhS3fDX9qc3nH8NDghaBjTNG4+EiSq7q59dH5WwKCAYEAjd0c
+DFowwG/lKDDkBOP+ei7HNHizE/N5pJnrw8EFWwHbqgA6q0oihPlb+FIsEOFEJ13E
+yQOX0gdotBhUaNFenNgq0XgT6Ji4PTqkd8PE7IqkO6RXSnHRaCbgAW+KlHgQlMpc
+12KnRxPFbVErK75hfnGyDyIZ/7GZSvQ2pEdJutwyigCFmb+u69Ri+bOcV3OwtdHS
+PfYXum0SF7UzDGYBlYvk6zVlFyMRMdq3Ulyk337zSHY8cwX3sEbSBASh5PrMm1SP
+Z1kq23Uo+2sr/nRr3ZiLrJeGIbMaFVbpH59AaYbDBlpJHiUGlRfR9ogAgxDlwjqh
+M1a/UZZfcGItFYSGwrLqv/NIHdrk6T4G/LiQsfj1n2TMzUTpSBXYOGdnVy1JyqBq
+5T0bPbyRI3yyogpcMYIzbf5xwTXzTRl5IuesLKpDepjfnlG9OKNx8Tr7qcC/jtt2
++eDnp0G/JEJRvKv6uMzNALaMTGkdVgtG21JrsBEvIH6tRGKOzXq3sGwOz9fE
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862_gind1.pem
new file mode 100644
index 0000000000..19087a0735
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q224_t1862_gind1.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDKAKCAYEApa4oiH+yG20EaPlCODyXW0tys6dCwztUH4bK0IA8Ld/nhHImQzJ2
+co0twe51KwMDJrw8OCPXOQWe1S6MRrqhv04jkVO37dIdBrlEKQggL+8XFxWrzFtk
+RsuGyAxPXcG7tprXCKIkXmJ4ZH4HziVPDr0dv9LBAtoOCqTh7P1Srr48IJsQbRPc
+Rf74f5TtGZ41OqfJGK9uHZwpteG4uHK10ferEuSPzDY3I0DOgCYYmGjc6N4MKEOU
+10TSUO2ye8IaXPdoayRincRRO/mKF+b62w27cbdn9hrq8aPyw2E7ehZyAduILevt
+qEDRJyOxJ/oM7pRAbALytKz0wkCeNL+TxEM92mkLkrqdn3Hhl4xOUHG9W1odtwKJ
+36YQMM0ubIy/ISHiwBzVAquiP1aSUudtNRf68g+WwuvRuMaic05j0nizubgtegew
+9741+fdKKYRT+aOMsouEnqrOyUht9HnAHzdBVAoNymrvnuX+Ylnu77/D9PwoVhMl
+3ttfx/omQzN5Ah0AgOSripFvRSJSWlDK22X8pfYa+QLmLgWMUxtYNwKCAYBlGgar
+o2cx8BF839UFfvn4JOY5Sptc+EMBgdJFM+g+9DMUxq1gFkVjDPM8JR/rC5XJf22L
+HlxrYAo6/0LZbyPQqm2MjjQJ6onH74nZG8Nn9qk6X2d4wmrMH41uIzd3NG3BEAK0
+9Bhq9TTYBEOduZIR8z4CNONYpom2/tcOBzNqMlQMJDJ5x/hkAlD+1bKlaZoFmwT/
+qhfkp5Z7WcLEq8TVzweSp4EzUtaftcprNVGXExF2nFiBH0NkOIXymOFht+BLgxKh
+7xZFYGjc7H4aSQEap5vtKEkQMFoRB24zkrg2e/Wc/eUOEslGw37XTUsZLIg2U8Cl
++EeAm2VxGaZsh0EFmXOwLchwqttP4Tjf02t4CZh8T3I91GNutUaPV/K2QkUcuCLM
+BLs+5et5hQiVMM9wp7psXoaexh9YMGx+nhfkIcPtxTAA6ERsg6muVsUAaEE+TxRk
+EVqBR86jbmwYUTGMTYU44owlufenclS0W0aB6Flin2wxfgxzo9enIVRHmME=
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862.pem
new file mode 100644
index 0000000000..c6352818d0
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDLAKCAYEA9y+7nMniLiXibpJ2MiTdolb4D3SclBqXgnT00VhgqUrx3rSfkQxZ
+hljKyzZc2+Ijc7qnW5NvABRFwz/vZuEWUje8qRI6b+rydzK8X26A+RbbbC28xDLV
+beKMh1Hx9O4zGVLBL3u66onoJSXhIiG4hu8wkympc9jGAmRIfIF2Uixy15387e1E
+mFj7UH2F5frBxiSnPwZ3lFjPSB/U6nLzGgvIsl4xhZb0Txxn/TtECsyzdQnorixh
+p5oMnqGa7/Bz1dCswUwTTmkJlqKW8qlJXO52+1+H0mqWCB3JC9EIvlerVgnUa+x9
+uDDya2gvwImH8PxReslOhn8hNqxL6/1v7yxoQvATOwBblkgUrv3jdBerppQV6Yb7
+p3/JnfPGnpF3q/9A4NuTmhXd+lhmx5sT06SNIQ1VCBqYJhTobHTHkNxVJuPwL+Fc
+u2jBKXsyzFy6W+ac7yUY58Zi6WFcybx/Sp5zrLUa5EDABfWtyvsCYTgptIRq9AHe
+EQIQUvDxgsLjAiEA8KuUTAHKlPQJvd2P8LFblBCyMRTZdemRjTLiy2zO3QsCggGA
+bUzbh6SCW1qq0yacP+gPVKikYEmrtsAUphMF5nq3OivstvZ0TZ2M6bp3MIbrVznm
+I69/8QnrSDGNqCCKAaoDjoTHWABlRnFKMa3HNhY5Wa0zpzch1ZMx339JmWwRmZOj
+UeqlzDiSsD58oMG0VBW0gCssvhCaf6K9XlizJ4JkEG44WGZJX9iw6luiqWcO8QjS
+tpwAh1WLgRO2JnrJ4adCF7XoGSptGDfV7oT1+w9IRWFGY3WJWz7c2fEY9hyzvwOM
+/QUDEqk7jMxTatX6fzREiQLVflnNf4aO8Ioolt29b5xgOskdRfoX5OsFCS1WemV6
+H/XJonSweFY2fBsxj2z1k5uX2LuxeVPFkNquTIWQFgy/5DxxxzqtaykkBIqM/SIw
+I8nsqn7rnMZ+ROPafj/QHuQZrrE9qq8PN4OuuZXCn6JrG/9goATXjsX0dwkSW+/Y
+w3zHSAlZSMoaw2RW9i4cv6hSly1+nUBFNWnMRfyBMfIrchL/DpBdVrVWVEBD7Q4z
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862_gind1.pem
new file mode 100644
index 0000000000..f465704959
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1862_gind1.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDLAKCAYEAnNFWZGSkdpISzCBfFsZ8p3ouw0fzoyU+0t/DdKdGeiy/PtUkPCfn
+KS+lmswLWdWFsQ7T9UtSVzdhDr+Jj9e4oLIDh1HfDGyLaNzvCCYOxWOnR+FdZQmC
+G5F8iD9QhTKugy9BhbNTYlpog9MqxfpVwQsAaXmitcSSvnDxJ1KweCN8P0GbfkpI
+JXma9SYWXjf6B5tH3Kb2xiPiaO0NSyjeyrossJosZfyYA3qKU/HEVYHLFkyAwMUu
+RBCM9sgwWWIzAutLMb1y4H750NP4yeIyP9EZgdXplmJRb9Yous0QT17aQOiC2q6I
+xyqXvhjScnRmMVetkbHibuKBpALwLA7dbNCpm+++WYdlMtBqlRkLfM4+BiCLPZT/
+6a9FYiKhNk12R7fdxWPFH4S9GfgUtLJpcwrFYvVbGfyD97O9gjzJiQ36zBrJEPv4
+kZ9MIv9J0qN2yUz7mT5IBKGDbIvBo60IVt7Q4+SyLT0ASZTxLInyUlravfGhog8e
+nDOvJUDt2WSnAiEAtxINd2uhphWpMhicTM/N0/aVpQ7yv2rVTRCdGK48XzkCggGA
+b1M093z0YaiSd2tM3kQMdLqtXKjDyv0joQGvKlPdPqeUzUuf0E8pvlM/Sp3hcNPi
+E1Ll5duR22yFMPE9IXxzloUSY1lmx91T3MfU3mlknl6OKYAhCM9tHwv8IFauJ1CA
+E3+mMz7quS0ZvB7hrfBnSI4Q3LcS/FQAg0d5EedLQ2Mdxp4zJFv0sfc7+hCt593h
+ohVur/U34ezrrMkA9mnUfM2Kf4cHxbFpV/lTz0Ulan/Q7Oic95zflEdJXL0Fe9mt
+1t6y+nkdfmIby9QTTeMSoUVmCmv5qvbyOgtNILtar28MADYPVU9tf289NVWexNCI
+uBCangdkBQjgq8UHAdKZafpToYPBSi+tuGs4N2391+jK5vLW8dlhxdxh7bscmlxY
+/lwjkU3SLTahErNBi7R45kohFD3iMO/Bum8Qv4s8MR1t6z4lWoICl6FvLBF9nZYV
+ZfLUNbSrZgHR5vUJbp8rFsdS1zj2rj0LPrX4gdd6nDxdp/IcJG88/5hEPlfyAcpY
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864.pem
new file mode 100644
index 0000000000..cb859d66fd
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDLAKCAYEAnplgg+QuPzBBKC7wqLoTVFSu1Vg9EAp2TdHFMUEAt2uLGPJn65SF
+vahxsnRJpJKdu8RRSlcTGg1wBpL7wdes+fskrB4OrjEdrf77S/wCxTtKz3xe5AcW
+N/qqlvbX+iGuxZKRvJfdbvqxJOo62hnuhNo5SeAh1f1bI7fs/MdF2dECT/LUYVgN
+kIfhZKbGEUvaVxYdzbypWFimuPdMDzkrQKKARztQC9W9gZceB7Z86oW3Tq68wxoy
+Qemq9zMlBZM9R+KKfCEOa5BI/cGj3As7/A2Y4JxWbaRq7Bq+M7xKtQqqDY9fHvlE
+eYXUf0L/6RY9ZoDEOATK8VPiaqr2swimw7lmUVyiR+hdNJ5vrAMStL9+BnzAtFNJ
+4N6gX4hdraHJfDKLSAryGqCMesJLb6YQwN0QEfp0uKV2e0z5m27bOQ/6H+i+AssY
+Fr6Gbottp3S6/KrPKxWco16FD/DA3OkERQlk0wZai7mucLRmnHz9jhZ6crcez3RN
++/SBlIN1ydN7AiEAwDyPTTslGsYdkM/YopNoEbEu00WGfX2/pP8J2Np7678CggGA
+Qu4x5iy2/FqZEbByskh/R3qQdeNvl+rA3TefDdVYK6jUZXZ5SE1ZBailE7e7LMBq
+5ao3PyRtoixezZaYB0zFdMpwy3z/YCLHnvUMHaEFQHLQkJZ17JbWSHzhnPGT7K1h
+LW36eTkSy0eXcjN5siIr9cnGlARYxccTuEOM8JP2am6fJLSP6JvvGsYgUIraRl38
+TXZ/EcF0msNgUabC+BCGpGBH2Z+2BI7e7yzBy7JSNsoZpf6mZ5dRMmiPlKD2AAvU
+j76Sj/UbTrK+O8qrqvuHMT6VwpD3fktvJ/8ENrbwSZiFK+Mk4EWE6quYnxF0JQwj
+t5TKhhoordP0li3R9Ie9A99iZszxrCNdpx1QH8OtNyf74TdsekUekNHmUwGg3set
+xMVuO5/o5gu82WDIiFdvYrWvQ9jHyilBBKDNQmfnM5xzZwDjC7opwZ1u5oNbGcKR
+jPB2Q57B7l4y2h3swGYIwnqMaYnPE32gewexx/YPK+ZhA9UfM5Q5RwUXm1RNkLfv
+-----END DSA PARAMETERS-----
diff --git a/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864_gind1.pem b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864_gind1.pem
new file mode 100644
index 0000000000..b84b3eed3a
--- /dev/null
+++ b/test/recipes/15-test_dsaparam_data/valid/p3072_q256_t1864_gind1.pem
@@ -0,0 +1,19 @@
+-----BEGIN DSA PARAMETERS-----
+MIIDLAKCAYEAt9BaAblsCrKRV15aP/BFOpUxTG/wzSWarZZQJ32hGXVV7ROFeA7H
+TvJdRWtjqvFNg0x1inAPUuSfoZi+dsXWPBc5M9vcZ9+GaB6NP/E/w8cxnnNO6a5f
+Bkx68slvWTqtrUxSiwqOLIT7oeSn1ZHDniDAtyRu7WnZhVt6OsP2xQl071phpcd+
+exIwnDsknr6kjRhOFbdgTFLbvIJYEKy/p2dkGmi6a7DTmtwct9hQ5XePggumj5LG
+05czAuvIDjfSe5hV1yIgbmchVvu+6WGnq4GUbgODROv2PHxnNEn8FgRBjJVjpcrL
+onbKWolvDyam708+tJbAWXGltnukGMiO2b+ODe6ZwzmxXOE4jn/SGkUeTAuzNSAe
+BsSsDGn5vZGKhnIkw9ISS29s6qbvhxR3zVLURdCDgFHJQ+Rg1aUsTpeBPlDHP6bw
+sRCR5mktZc3xOkUtqBIoR5hjXD+c+0TkMOJRGNzfXLhh1LIbyLpmj4WQK7+ytJO3
+dtUJDpKhEiGhAiEAzFeLXUhljzm6+rCQiiV9cmi5Eyh+wMSwgAsMaVPM6b0CggGA
+arqNlSzXpGvyu7J8xWiwYFX2Q4LXpo7AerEW4SVBna+VWSQuyZL/iMYD4eNPrle7
+aVyXRBBBc5FJmfkezG4pf3MQhLNrJoBRyRCIf/CbG8em3eBf3pBIUs7Vd9z8RAFs
+Y4cIMteTLbDVULWdfvK2eM5gTf0jl5sjyY+OPSFpNiBpfmIdoStX80j+ygo7MgcI
+N+U1Nn8i0DVzjpfm+lBFbkGNrZEy63mNi6UW6m6FnpZSQqqeC/Xy6mqrjHMDoclv
+rZuTGSY47IiHTX4cYaXYArwuN6qBQkTNeSDsCzbx21hFmKEXscelumwvXmxJcxr/
+6x6Ymvu/G0NokJk3Z8cOS0OCfXOLxk5kH4C/i3UOEhl9LH9eOd2qQoF3KoaNHkCy
+IYwipLyqtQ+o/+qRruOfv1JruRawyl1G1UteU5nire/mcaD7/lJqvfBPD1Z1eBpP
+VR4ItsVBbztmDYr9OX6hFH5CuJSW55KBtEME+R5Au2q3d1wZz4/PD7xLio8lWc48
+-----END DSA PARAMETERS-----


More information about the openssl-commits mailing list