31 lines
624 B
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 ;
|