From b0a96bfc775e7ef7eb40ef78c6a72f1ca493e477 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 30 Jan 2006 08:25:03 +0000 Subject: [PATCH] Added rc4 --- contrib/crypto/load.factor | 1 + contrib/crypto/rc4.factor | 43 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 contrib/crypto/rc4.factor diff --git a/contrib/crypto/load.factor b/contrib/crypto/load.factor index be2a25e20b..fb605cf05c 100644 --- a/contrib/crypto/load.factor +++ b/contrib/crypto/load.factor @@ -10,4 +10,5 @@ USING: kernel parser sequences words compiler ; "md5" "sha1" "rsa" + "rc4" } [ "/contrib/crypto/" swap ".factor" append3 run-resource ] each diff --git a/contrib/crypto/rc4.factor b/contrib/crypto/rc4.factor new file mode 100644 index 0000000000..993f480405 --- /dev/null +++ b/contrib/crypto/rc4.factor @@ -0,0 +1,43 @@ +USING: kernel math sequences namespaces math-contrib ; +IN: crypto-internals + +! http://en.wikipedia.org/wiki/RC4_%28cipher%29 + +SYMBOL: i +SYMBOL: j +SYMBOL: s +SYMBOL: key +SYMBOL: l + + +: swap-ij ( i j seq -- ) + [ + s set j set i set + i get s get nth j get s get nth i get s get set-nth j get s get set-nth + ] with-scope ; + +! key scheduling algorithm, initialize s +: ksa ( -- ) + 256 [ ] map s set + 0 j set + 256 [ + dup s get nth j get + over l get mod key get nth + 255 bitand j set + dup j get s get swap-ij + ] repeat ; + +: generate ( -- n ) + i get 1+ 255 bitand i set + j get i get s get nth + 255 bitand j set + i get j get s get swap-ij + i get s get nth j get s get nth + 255 bitand s get nth ; + +IN: crypto + + +: rc4 ( key -- ) + [ key set ] keep + length l set + ksa + 0 i set + 0 j set ; +