See ChangeLog: Wed Dec 23 13:34:22 CET 1998 Werner Koch
[libgcrypt.git] / cipher / primegen.c
index 66d40db..e948421 100644 (file)
@@ -1,14 +1,14 @@
 /* primegen.c - prime number generator
  *     Copyright (C) 1998 Free Software Foundation, Inc.
  *
- * This file is part of GNUPG.
+ * This file is part of GnuPG.
  *
- * GNUPG is free software; you can redistribute it and/or modify
+ * GnuPG is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * GNUPG is distributed in the hope that it will be useful,
+ * GnuPG is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
@@ -293,7 +293,12 @@ gen_prime( unsigned  nbits, int secret, int randomlevel )
        int dotcount=0;
 
        /* generate a random number */
-       mpi_set_bytes( prime, nbits, get_random_byte, randomlevel );
+       /*mpi_set_bytes( prime, nbits, get_random_byte, randomlevel );*/
+       {   char *p = get_random_bits( nbits, randomlevel, secret );
+           mpi_set_buffer( prime, p, (nbits+7)/8, 0 );
+           m_free(p);
+       }
+
        /* set high order bit to 1, set low order bit to 1 */
        mpi_set_highbit( prime, nbits-1 );
        mpi_set_bit( prime, 0 );
@@ -423,8 +428,13 @@ is_prime( MPI n, int steps, int *count )
            mpi_set_ui( x, 2 );
        }
        else {
-           mpi_set_bytes( x, nbits-1, get_random_byte, 0 );
-           /* work around a bug in mpi_set_bytes */
+           /*mpi_set_bytes( x, nbits-1, get_random_byte, 0 );*/
+           {   char *p = get_random_bits( nbits, 0, 0 );
+               mpi_set_buffer( x, p, (nbits+7)/8, 0 );
+               m_free(p);
+           }
+           /* make sure that the number is smaller than the prime
+            * and keep the randomness of the high bit */
            if( mpi_test_bit( x, nbits-2 ) ) {
                mpi_set_highbit( x, nbits-2 ); /* clear all higher bits */
            }