factor/contrib/crypto/rsa.factor

31 lines
624 B
Factor

USING: kernel math namespaces math-contrib ;
IN: crypto
SYMBOL: d
SYMBOL: p
SYMBOL: q
SYMBOL: n
SYMBOL: m
SYMBOL: ee
: while-gcd ( -- )
m get ee get gcd nip 1 > [ ee [ 2 + ] change while-gcd ] when ;
! n bits
: generate-key-pair ( bitlen -- )
2 swap 1- 2 /i shift
[ random-int next-miller-rabin-prime p set ] keep
random-int next-miller-rabin-prime q set
p get q get * n set
p get 1- q get 1- * m set
3 ee set
while-gcd
m get ee get mod-inv m get + d set ;
: rsa-encrypt ( message -- encrypted )
ee get n get ^mod ;
: rsa-decrypt ( encrypted -- message )
d get n get ^mod ;