]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/random/blum-blum-shub/blum-blum-shub.factor
factor: trim using lists
[factor.git] / extra / random / blum-blum-shub / blum-blum-shub.factor
old mode 100755 (executable)
new mode 100644 (file)
index e609900..b86acd7
@@ -1,6 +1,4 @@
-USING: kernel math sequences namespaces
-math.miller-rabin combinators.lib
-math.functions accessors random ;
+USING: accessors kernel math math.functions math.primes random ;
 IN: random.blum-blum-shub
 
 ! Blum Blum Shub, n = pq, x_i+1 = x_i ^ 2 mod n
@@ -9,11 +7,15 @@ TUPLE: blum-blum-shub x n ;
 
 <PRIVATE
 
+: generate-bbs-prime ( numbits -- p )
+    dup random-prime dup 4 mod 3 =
+    [ nip ] [ drop generate-bbs-prime ] if ;
+
 : generate-bbs-primes ( numbits -- p q )
-    [ [ random-prime ] curry [ 4 mod 3 = ] generate ] dup bi ;
+    [ generate-bbs-prime ] [ generate-bbs-prime ] bi ;
 
 : next-bbs-bit ( bbs -- bit )
-    [ [ x>> 2 ] [ n>> ] bi ^mod dup ] keep (>>x) 1 bitand ;
+    dup [ x>> 2 ] [ n>> ] bi ^mod [ >>x drop ] [ 1 bitand ] bi ;
 
 PRIVATE>
 
@@ -22,6 +24,6 @@ PRIVATE>
     [ find-relative-prime ] keep
     blum-blum-shub boa ;
 
-M: blum-blum-shub random-32* ( bbs -- r )
+M: blum-blum-shub random-32*
     0 32 rot
     [ next-bbs-bit swap 1 shift bitor ] curry times ;