author David Shaw Thu, 25 May 2006 19:39:03 +0000 (19:39 +0000) committer David Shaw Thu, 25 May 2006 19:39:03 +0000 (19:39 +0000)
1024 when --enable-dsa2 is set).  The size of q is set automatically based
on the key size. (ask_keysize, generate_keypair): Ask for DSA size when
--enable-dsa2 is set.

 g10/ChangeLog patch | blob | history g10/import.c patch | blob | history g10/keygen.c patch | blob | history

index 2b281f1..53fc4bc 100644 (file)
@@ -1,3 +1,11 @@
+2006-05-25  David Shaw  <dshaw@jabberwocky.com>
+
+       * keygen.c (gen_dsa): Allow generating DSA2 keys
+       (allow specifying sizes > 1024 when --enable-dsa2 is set).  The
+       size of q is set automatically based on the key size.
+       (ask_keysize, generate_keypair): Ask for DSA size when
+       --enable-dsa2 is set.
+
2006-05-24  David Shaw  <dshaw@jabberwocky.com>

* exec.c (make_tempdir): Fix bug with a temporary directory on
index 97d4b8f..e94d356 100644 (file)
@@ -978,6 +978,15 @@ import_one( const char *fname, KBNODE keyblock, struct stats_s *stats,
}
else if(new_key)
{
+       /* A little explanation for this: we fill in the fingerprint
+          when importing keys as it can be useful to know the
+          fingerprint in certain keyserver-related cases (a keyserver
+          asked for a particular name, but the key doesn't have that
+          name).  However, in cases where we're importing more than
+          one key at a time, we cannot know which key to fingerprint.
+          In these cases, rather than guessing, we do not fingerpring
+          at all, and we must hope the user ID on the keys are
+          useful. */
if(fpr)
{
xfree(*fpr);
index 7733132..6e06c72 100644 (file)
@@ -1089,30 +1089,65 @@ gen_dsa(unsigned int nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek,
PKT_public_key *pk;
MPI skey;
MPI *factors;
+    unsigned int qbits;

-    if( nbits > 1024 || nbits < 512 ) {
+    if( nbits < 512 || (!opt.flags.dsa2 && nbits > 1024))
+      {
nbits = 1024;
log_info(_("keysize invalid; using %u bits\n"), nbits );
-    }
+      }
+    else if(nbits>3072)
+      {
+       nbits = 3072;
+       log_info(_("keysize invalid; using %u bits\n"), nbits );
+      }

-    if( (nbits % 64) ) {
+    if(nbits % 64)
+      {
nbits = ((nbits + 63) / 64) * 64;
log_info(_("keysize rounded up to %u bits\n"), nbits );
-    }
+      }

-    rc = pubkey_generate( PUBKEY_ALGO_DSA, nbits, skey, &factors );
-    if( rc ) {
-       log_error("pubkey_generate failed: %s\n", g10_errstr(rc) );
+    /*
+      Figure out a q size based on the key size.  FIPS 180-3 says:
+
+      L = 1024, N = 160
+      L = 2048, N = 224
+      L = 2048, N = 256
+      L = 3072, N = 256
+
+      2048/256 is an odd pair since there is also a 2048/224 and
+      3072/256.  Matching sizes is not a very exact science.
+
+      We'll do 256 qbits for nbits over 2048, 224 for nbits over 1024
+      but less than 2048, and 160 for 1024 (DSA1).
+    */
+
+    if(nbits>2048)
+      qbits=256;
+    else if(nbits>1024)
+      qbits=224;
+    else
+      qbits=160;
+
+    if(qbits!=160)
+      log_info("WARNING: some OpenPGP programs can't"
+              " handle a DSA key with this digest size\n");
+
+    rc = dsa2_generate( PUBKEY_ALGO_DSA, nbits, qbits, skey, &factors );
+    if( rc )
+      {
+       log_error("dsa2_generate failed: %s\n", g10_errstr(rc) );
return rc;
-    }
+      }

sk = xmalloc_clear( sizeof *sk );
pk = xmalloc_clear( sizeof *pk );
sk->timestamp = pk->timestamp = make_timestamp();
sk->version = pk->version = 4;
-    if( expireval ) {
-       sk->expiredate = pk->expiredate = sk->timestamp + expireval;
-    }
+    if( expireval )
+      sk->expiredate = pk->expiredate = sk->timestamp + expireval;
+
sk->pubkey_algo = pk->pubkey_algo = PUBKEY_ALGO_DSA;
pk->pkey = mpi_copy( skey );
pk->pkey = mpi_copy( skey );
@@ -1462,10 +1497,10 @@ ask_keysize( int algo )
switch(algo)
{
case PUBKEY_ALGO_DSA:
-      if(opt.expert)
+      if(opt.flags.dsa2)
{
def=1024;
-         max=1024;
+         max=3072;
}
else
{
@@ -2574,12 +2609,12 @@ generate_keypair (const char *fname, const char *card_serialno,
sprintf( r->u.value, "%d", PUBKEY_ALGO_DSA );
r->next = para;
para = r;
-          tty_printf(_("DSA keypair will have %u bits.\n"),1024);
-          r = xmalloc_clear( sizeof *r + 20 );
-          r->key = pKEYLENGTH;
-          strcpy( r->u.value, "1024" );
-          r->next = para;
-          para = r;
+         nbits = ask_keysize( PUBKEY_ALGO_DSA );
+         r = xmalloc_clear( sizeof *r + 20 );
+         r->key = pKEYLENGTH;
+         sprintf( r->u.value, "%u", nbits);
+         r->next = para;
+         para = r;
r = xmalloc_clear( sizeof *r + 20 );
r->key = pKEYUSAGE;
strcpy( r->u.value, "sign" );
@@ -2619,7 +2654,7 @@ generate_keypair (const char *fname, const char *card_serialno,
}

}
-
+
nbits = ask_keysize( algo );
r = xmalloc_clear( sizeof *r + 20 );
r->key = both? pSUBKEYLENGTH : pKEYLENGTH;
@@ -3169,7 +3204,7 @@ generate_subkeypair( KBNODE pub_keyblock, KBNODE sec_keyblock )
}

rc = do_create( algo, nbits, pub_keyblock, sec_keyblock,
-                                     dek, s2k, &sub_sk, expire, 1 );
+                   dek, s2k, &sub_sk, expire, 1 );
if( !rc )
rc = write_keybinding(pub_keyblock, pub_keyblock, pri_sk, sub_sk, use);
if( !rc )
{"ft_lang_label":"__label__en","ft_lang_prob":0.5319619,"math_prob":0.9139001,"size":3337,"snap":"2019-13-2019-22","text_gpt3_token_len":1182,"char_repetition_ratio":0.09840984,"word_repetition_ratio":0.078947365,"special_character_ratio":0.42403355,"punctuation_ratio":0.21543409,"nsfw_num_words":0,"has_unicode_error":false,"math_prob_llama3":0.980962,"pos_list":[0],"im_url_duplicate_count":[null],"WARC_HEADER":"{\"WARC-Type\":\"response\",\"WARC-Date\":\"2019-05-25T21:07:58Z\",\"WARC-Record-ID\":\"<urn:uuid:37ab80d9-e7ba-4a4a-8e60-39117a611396>\",\"Content-Length\":\"32077\",\"Content-Type\":\"application/http; msgtype=response\",\"WARC-Warcinfo-ID\":\"<urn:uuid:b7ce0aae-ae2d-4fa0-8ba5-44991c742630>\",\"WARC-Concurrent-To\":\"<urn:uuid:1f8f66a9-383b-4088-9db8-44230feb139a>\",\"WARC-IP-Address\":\"217.69.76.56\",\"WARC-Target-URI\":\"https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=commitdiff;h=05a2a2f39ac220a6ce65c3a2538dadfa941ccdf9\",\"WARC-Payload-Digest\":\"sha1:5IIHUBU6COGLAFH7SGGF34ZTZJYSEPW2\",\"WARC-Block-Digest\":\"sha1:JLH2BZ4DFGE2OS3PKUHA6HNNOF5GKZPR\",\"WARC-Identified-Payload-Type\":\"application/xhtml+xml\",\"warc_filename\":\"/cc_download/warc_2019/CC-MAIN-2019-22/CC-MAIN-2019-22_segments_1558232258451.88_warc_CC-MAIN-20190525204936-20190525230936-00204.warc.gz\"}"}