diff --git a/contrib/crypto/crc32.factor b/contrib/crypto/crc32.factor new file mode 100644 index 0000000000..3e8025d25a --- /dev/null +++ b/contrib/crypto/crc32.factor @@ -0,0 +1,21 @@ +USING: kernel math sequences namespaces ; + +IN: crypto-internals +: crc32-polynomial HEX: edb88320 ; inline + +: crc32-init ( -- table ) + 256 [ + 8 [ + dup 1 bitand 0 > + [ -1 shift crc32-polynomial bitxor ] [ -1 shift ] if + ] times + ] map ; + +SYMBOL: crc32-table crc32-init global [ crc32-table set ] bind + +: calc-crc32 ( crc ch -- crc ) + over bitxor HEX: ff bitand crc32-table get nth swap -8 shift bitxor ; + +IN: crypto +: >crc32 ( seq -- n ) HEX: ffffffff [ swap [ calc-crc32 ] each ] keep bitxor ; + diff --git a/contrib/crypto/load.factor b/contrib/crypto/load.factor index 0e9d776f72..8c75b37d9f 100644 --- a/contrib/crypto/load.factor +++ b/contrib/crypto/load.factor @@ -10,9 +10,19 @@ USING: kernel parser sequences words compiler ; "montgomery" "random" "miller-rabin" + +! Rngs "blum-blum-shub" + +! Hash + "crc32" "md5" "sha1" - "rsa" + +! Block ciphers "rc4" + +! Public key + "rsa" + } [ "/contrib/crypto/" swap ".factor" append3 run-resource ] each diff --git a/contrib/crypto/rsa.factor b/contrib/crypto/rsa.factor index 742327cfb8..4c7f3c54e7 100644 --- a/contrib/crypto/rsa.factor +++ b/contrib/crypto/rsa.factor @@ -12,7 +12,7 @@ SYMBOL: ee TUPLE: rsa e d n ; ! n bits -: generate-key-pair ( bitlen -- ) +: generate-rsa-keypair ( bitlen -- ) [ 2 /i generate-two-unique-primes [ q set p set ] 2keep [ * n set ] 2keep [ 1- ] 2apply * m set diff --git a/contrib/crypto/test.factor b/contrib/crypto/test.factor index b2bd93ff7e..d6011f5648 100644 --- a/contrib/crypto/test.factor +++ b/contrib/crypto/test.factor @@ -31,6 +31,8 @@ USING: kernel math test namespaces crypto ; [ 100000000000031 ] [ 100000000000000 next-miller-rabin-prime ] unit-test -[ 123456789 ] [ 512 generate-key-pair 123456789 over rsa-encrypt swap rsa-decrypt ] unit-test +[ 123456789 ] [ 128 generate-rsa-keypair 123456789 over rsa-encrypt swap rsa-decrypt ] unit-test +[ 0 ] [ "" >crc32 ] unit-test +[ HEX: cbf43926 ] [ "123456789" >crc32 ] unit-test