]> gitweb.factorcode.org Git - factor.git/blob - extra/crypto/rsa.factor
Initial import
[factor.git] / extra / crypto / rsa.factor
1 USING: kernel math namespaces math-contrib errors ;
2
3 IN: crypto
4 SYMBOL: d
5 SYMBOL: p
6 SYMBOL: q
7 SYMBOL: n
8 SYMBOL: m
9 SYMBOL: ee
10
11 ! e = public key, d = private key, n = public modulus
12 TUPLE: rsa e d n ;
13
14 ! n bits
15 : generate-rsa-keypair ( bitlen -- <rsa> )
16     [
17         2 /i generate-two-unique-primes [ q set p set ] 2keep [ * n set ] 2keep
18         [ 1- ] 2apply * m set
19         65537 ee set
20         m get ee get mod-inv m get + d set
21         ee get d get n get <rsa>
22     ] with-scope ;
23
24 : rsa-encrypt ( message rsa -- encrypted ) [ rsa-e ] keep rsa-n ^mod ;
25 : rsa-decrypt ( encrypted rsa -- message ) [ rsa-d ] keep rsa-n ^mod ;
26