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