]> gitweb.factorcode.org Git - factor.git/commitdiff
crypto/math cleanups
authorerg <erg@trifocus.net>
Fri, 18 Aug 2006 16:57:46 +0000 (16:57 +0000)
committererg <erg@trifocus.net>
Fri, 18 Aug 2006 16:57:46 +0000 (16:57 +0000)
contrib/crypto/blum-blum-shub.factor
contrib/crypto/load.factor
contrib/crypto/random.factor
contrib/math/load.factor
contrib/math/numerical-integration.factor
contrib/math/statistics.factor
contrib/math/test.factor
contrib/math/utils.factor

index ad1f979b11265d7d99cb402b9217936801edbb78..dca88de46933475b43fef884839904d4db32f1c4 100644 (file)
@@ -1,6 +1,7 @@
 USING: kernel math sequences namespaces crypto math-contrib ;
 IN: crypto-internals
 
+! TODO: take (log log M) bits instead of 1 bit
 ! Blum Blum Shub, M = pq
 TUPLE: bbs x n ;
 
@@ -27,8 +28,9 @@ SYMBOL: temp-bbs
 
 IN: crypto
 : random-bbs-bits* ( numbits bbs -- n ) (bbs-bits) ;
-: random-bbs-bits ( numbits -- n ) blum-blum-shub get (bbs-bits) ;
+: random-bits ( numbits -- n ) blum-blum-shub get (bbs-bits) ;
+: random-bytes ( numbits -- n ) 8 * random-bits ;
 : random-int ( n -- n )
-    #! Cryptographically secure random number using Blum-Blum-Shub 256
-    [ log2 1+ random-bbs-bits ] keep mod ;
+    #! Cryptographically secure random number using Blum-Blum-Shub 256
+    [ log2 1+ random-bits ] keep dupd >= [ -1 shift ] when ;
 
index 3b5763aaec304934614ce082ecaede1b1760104d..788649e56d70de8739cb01edb1a0eb2dce40c031 100644 (file)
@@ -1,6 +1,7 @@
 REQUIRES: math ;
 
 PROVIDE: crypto {
+
     "common.factor"
     "timing.factor"
     "base64.factor"
index 96976463d09d1be89e4c4a7a4907dd7a54a08bda..7b62f4a7625ea7c8c3642e0e25b506c71dccd044 100644 (file)
@@ -4,9 +4,9 @@ IN: crypto
 : make-bits ( quot numbits -- n | quot: -- 0/1 )
     0 -rot [ drop dup call rot 1 shift bitor swap ] each drop ;
 
+DEFER: random-bits
 : add-bit ( bit integer -- integer ) 1 shift bitor ;
 : append-bits ( inta intb nbits -- int ) swapd shift bitor ;
-: random-bits ( n -- int ) random-int 2 swap ^ random-int ;
 : large-random-bits ( n -- int )
     #! random number with high bit and low bit enabled (odd)
     2 swap ^ [ random-int ] keep -1 shift 1 bitor bitor ;
index 4ab7c2ace46b4cdc4b33ac50ae3402b6dd64db20..e6e23627275a2f2536c4e41d5a00ba29d485778a 100644 (file)
@@ -7,4 +7,6 @@ PROVIDE: math {
     "matrices.factor"
     "statistics.factor"
     "numerical-integration.factor"
+} {
+    "test.factor"
 } ;
index 6bf42a189661875ace20b0188597efb1a24eaf09..14d9dfb67252cf8a25059587a533b6d975246cf8 100644 (file)
@@ -1,5 +1,4 @@
 IN: math-contrib
-
 USING: kernel sequences errors namespaces math vectors errors prettyprint io inspector ;
 
 : setup-range ( from to -- frange )
index 4437713c780f4b4750a16e6fab8465eb89e7fef9..8e1c6ef5cd42d519f587485668dd5c7d50f83c8a 100644 (file)
@@ -27,7 +27,7 @@ USING: kernel math sequences ;
     #! max - min
     minmax swap - ;
 
-: var ( seq -- )
+: var ( seq -- )
     #! variance, normalize by N-1
     dup length 1- dup 0 = [
         0 2nip
@@ -35,6 +35,6 @@ USING: kernel math sequences ;
         swap [ mean ] keep 0 [ pick - sq + ] reduce nip swap /
     ] if ;
 
-: std
+: std ( seq -- x )
     #! standard deviation, sqrt of variance
     var sqrt ;
index 9e19e02edc5662201901d60efdfa1349ba482cb3..e4f7430cc6dcba807cb5bac61b8f581f34a200b0 100644 (file)
@@ -229,5 +229,5 @@ unit-test
 [ 0 ] [ { 1 } var ] unit-test
 [ 0 ] [ { 1 } std ] unit-test
 
-[ 3 ] [ 5 7 mod-inv ] unit-test
-[ 78572682077 ] [ 234829342 342389423843 mod-inv ] unit-test
+[ -2 ] [ 5 7 mod-inv ] unit-test
+[ -53889431 ] [ 234829342 342389423843 mod-inv ] unit-test
index ef531f9940a34913e1f03f42637683639bb218ea..f61aa0b845c1326e6c19b7498e593b638797ebec 100644 (file)
@@ -58,14 +58,9 @@ USING: errors kernel sequences math sequences-internals namespaces arrays ;
     #! find the absolute values of the min and max of a seq in one pass
     minmax 2dup [ abs ] 2apply > [ swap ] when ;
 
-SYMBOL: almost=-precision .000001 almost=-precision set
+SYMBOL: almost=-precision .0001 almost=-precision set-global
 : almost= ( a b -- bool )
-    2dup - abs almost=-precision get < [
-            2drop t
-        ] [
-            2array absminmax dup almost=-precision get * >r - abs r>
-            dup 0 < [ >= ] [ <= ] if
-    ] if ;
+    - abs almost=-precision get < ;
 
 TUPLE: frange from step length ;