L=3072, N=256 provides 128 bits of security not 112.
[openssl.git] / crypto / dsa / dsa_gen.c
index 2a92d069cf2a7289b16ca2a3c635322162323e94..d5f4debc9223419de117c5374edc3930abd318d4 100644 (file)
@@ -405,7 +405,7 @@ static int dsa2_valid_parameters(size_t L, size_t N)
        if (L == 2048 && N == 256)
                return 112;
        if (L == 3072 && N == 256)
-               return 112;
+               return 128;
        return 0;
        }
 
@@ -494,22 +494,26 @@ int dsa_builtin_paramgen2(DSA *ret, size_t L, size_t N,
                }
 
        mdsize = M_EVP_MD_size(evpmd);
+       /* If unverificable g generation only don't need seed */
+       if (!ret->p || !ret->q || idx >= 0)
+               {
+               if (seed_len == 0)
+                       seed_len = mdsize;
 
-       if (seed_len == 0)
-               seed_len = mdsize;
+               seed = OPENSSL_malloc(seed_len);
 
-       seed = OPENSSL_malloc(seed_len);
+               if (seed_out)
+                       seed_tmp = seed_out;
+               else
+                       seed_tmp = OPENSSL_malloc(seed_len);
 
-       if (seed_out)
-               seed_tmp = seed_out;
-       else
-               seed_tmp = OPENSSL_malloc(seed_len);
+               if (!seed || !seed_tmp)
+                       goto err;
 
-       if (!seed || !seed_tmp)
-               goto err;
+               if (seed_in)
+                       memcpy(seed, seed_in, seed_len);
 
-       if (seed_in)
-               memcpy(seed, seed_in, seed_len);
+               }
 
        if ((ctx=BN_CTX_new()) == NULL)
                goto err;
@@ -530,7 +534,8 @@ int dsa_builtin_paramgen2(DSA *ret, size_t L, size_t N,
                {
                p = ret->p;
                q = ret->q;
-               memcpy(seed_tmp, seed, seed_len);
+               if (idx >= 0)
+                       memcpy(seed_tmp, seed, seed_len);
                goto g_only;
                }
        else
@@ -686,6 +691,7 @@ end:
 
        for (;;)
                {
+               __fips_constseg
                static const unsigned char ggen[4] = {0x67,0x67,0x65,0x6e};
                if (idx >= 0)
                        {