Added rc4
parent
4daa68df8b
commit
b0a96bfc77
|
@ -10,4 +10,5 @@ USING: kernel parser sequences words compiler ;
|
||||||
"md5"
|
"md5"
|
||||||
"sha1"
|
"sha1"
|
||||||
"rsa"
|
"rsa"
|
||||||
|
"rc4"
|
||||||
} [ "/contrib/crypto/" swap ".factor" append3 run-resource ] each
|
} [ "/contrib/crypto/" swap ".factor" append3 run-resource ] each
|
||||||
|
|
|
@ -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 ;
|
||||||
|
|
Loading…
Reference in New Issue