diff --git a/lib/7.8/modules/Crypto.pmod/RSA.pike b/lib/7.8/modules/Crypto.pmod/RSA.pike index 369cca8277f9ca6c7103a54359f1ab44d13ea7b6..f8d69db2817f62335266dbe1412d3aa6db476537 100644 --- a/lib/7.8/modules/Crypto.pmod/RSA.pike +++ b/lib/7.8/modules/Crypto.pmod/RSA.pike @@ -307,7 +307,7 @@ Gmp.mpz get_prime(int bits, function(int:string) r) this_program generate_key(int(128..) bits, function(int:string)|void r) { if (!r) - r = [function(int:string)]Crypto.Random.random_string; + r = Crypto.Random.random_string; if (bits < 128) error( "Ridiculously small key.\n" ); diff --git a/lib/modules/Crypto.pmod/Random.pmod b/lib/modules/Crypto.pmod/Random.pmod index 8a3e29b2a21784dfffb035f7d8b2981b59a11a37..63eee76f0844be18c8f3ea0baae5903d0e945cef 100644 --- a/lib/modules/Crypto.pmod/Random.pmod +++ b/lib/modules/Crypto.pmod/Random.pmod @@ -36,7 +36,7 @@ protected class RND ::reseed(data); } - string(8bit) random_string(int(0..) len) + string(8bit) random_string(int len) { // The original Fortuna design has an entropy pool reseeding the // generator when enough external events have been collected, but @@ -54,25 +54,25 @@ protected class RND } protected RND rnd_obj = RND(); -protected function(int(0..):string(8bit)) rnd_func = rnd_obj->random_string; +protected function(int:string(8bit)) rnd_func = rnd_obj->random_string; //! Returns a string of length @[len] with random content. The content //! is generated by a Fortuna random generator that is updated with //! output from /dev/urandom on UNIX and CryptGenRandom on NT. -string(8bit) random_string(int(0..) len) { +string(8bit) random_string(int len) { return rnd_func(len); } __deprecated__ string(8bit) blocking_random_string(int len) { - return rnd_func([int(0..)]len); + return rnd_func(len); } //! Returns a @[Gmp.mpz] object with a random value between @expr{0@} //! and @[top]. Uses @[random_string]. -Gmp.mpz random(int(0..) top) { - return [object(Gmp.mpz)]( Gmp.mpz(rnd_func( (int(0..))ceil( log((float)top)/ - log(2.0) ) ), +Gmp.mpz random(int top) { + return [object(Gmp.mpz)]( Gmp.mpz(rnd_func( (int)ceil( log((float)top)/ + log(2.0) ) ), 256) % top); } diff --git a/src/post_modules/Nettle/nettle.cmod b/src/post_modules/Nettle/nettle.cmod index 3f29581857f59e8bafb9bb0613e59c47d0dac1af..3932edd3338b799e64f64bd8a24bececc8198a1b 100644 --- a/src/post_modules/Nettle/nettle.cmod +++ b/src/post_modules/Nettle/nettle.cmod @@ -355,10 +355,12 @@ PIKECLASS Fortuna *! bytes of random data per call, the necessary rekey operations *! are here performed internally, so no such restrictions apply. */ - PIKEFUN string(8bit) random_string(int(0..) len) + PIKEFUN string(8bit) random_string(int len) { unsigned stored = 0; struct string_builder s; + + if(len<0) Pike_error("Length has to be positive.\n"); init_string_builder_alloc(&s, len+16, 0); while( stored < len )