2006-02-27 00:04:25 -05:00
|
|
|
USING: kernel math namespaces math-contrib errors ;
|
2006-01-30 02:05:53 -05:00
|
|
|
|
|
|
|
IN: crypto
|
|
|
|
SYMBOL: d
|
|
|
|
SYMBOL: p
|
|
|
|
SYMBOL: q
|
|
|
|
SYMBOL: n
|
|
|
|
SYMBOL: m
|
|
|
|
SYMBOL: ee
|
|
|
|
|
2006-02-27 00:04:25 -05:00
|
|
|
! e = public key, d = private key, n = public modulus
|
|
|
|
TUPLE: rsa e d n ;
|
2006-01-30 02:05:53 -05:00
|
|
|
|
|
|
|
! n bits
|
2006-02-27 20:37:36 -05:00
|
|
|
: generate-rsa-keypair ( bitlen -- <rsa> )
|
2006-02-27 00:04:25 -05:00
|
|
|
[
|
|
|
|
2 /i generate-two-unique-primes [ q set p set ] 2keep [ * n set ] 2keep
|
|
|
|
[ 1- ] 2apply * m set
|
2006-08-02 23:20:28 -04:00
|
|
|
65537 ee set
|
2006-02-27 00:04:25 -05:00
|
|
|
m get ee get mod-inv m get + d set
|
|
|
|
ee get d get n get <rsa>
|
|
|
|
] with-scope ;
|
2006-01-30 02:05:53 -05:00
|
|
|
|
2006-02-27 00:04:25 -05:00
|
|
|
: rsa-encrypt ( message rsa -- encrypted ) [ rsa-e ] keep rsa-n ^mod ;
|
|
|
|
: rsa-decrypt ( encrypted rsa -- message ) [ rsa-d ] keep rsa-n ^mod ;
|
2006-01-30 02:05:53 -05:00
|
|
|
|