27 lines
628 B
Factor
27 lines
628 B
Factor
|
USING: kernel math namespaces math-contrib errors ;
|
||
|
|
||
|
IN: crypto
|
||
|
SYMBOL: d
|
||
|
SYMBOL: p
|
||
|
SYMBOL: q
|
||
|
SYMBOL: n
|
||
|
SYMBOL: m
|
||
|
SYMBOL: ee
|
||
|
|
||
|
! e = public key, d = private key, n = public modulus
|
||
|
TUPLE: rsa e d n ;
|
||
|
|
||
|
! n bits
|
||
|
: generate-rsa-keypair ( bitlen -- <rsa> )
|
||
|
[
|
||
|
2 /i generate-two-unique-primes [ q set p set ] 2keep [ * n set ] 2keep
|
||
|
[ 1- ] 2apply * m set
|
||
|
65537 ee set
|
||
|
m get ee get mod-inv m get + d set
|
||
|
ee get d get n get <rsa>
|
||
|
] with-scope ;
|
||
|
|
||
|
: rsa-encrypt ( message rsa -- encrypted ) [ rsa-e ] keep rsa-n ^mod ;
|
||
|
: rsa-decrypt ( encrypted rsa -- message ) [ rsa-d ] keep rsa-n ^mod ;
|
||
|
|