/usr/share/nickle/examples/rsa.5c is in nickle 2.77-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | /*
* RSA cryptosystem
*
* Copyright © 2001 Bart Massey.
* All Rights Reserved. See the file COPYING in this directory
* for licensing information.
*
* Bart Massey 1999/1
*
* Must first load numbers.5c
*
* [note that encryption and decryption commute]
*
* set_private_key(p,q,e)
* call with p and q prime, e small random, less than (p-1) * (q-1),
* relatively prime to this quantity. The primes can be
* conveniently generated using the supplied Miller-Rabin code:
* see the function primebits().
*
* set_public_key(n,e)
* set just the public key information for encryption
*
* encrypt(m)
* return the encryption of m
*
* decrypt(c)
* return the decryption of c
*/
autoimport Numbers
namespace RSA {
global int e; /* encryption exponent */
global int n; /* public key */
global int d = 0; /* decryption exponent (0 for encrypt-only) */
public int encrypt(int m) {
return bigpowmod(m, e, n);
}
public int decrypt(int c) {
exception decrypt_public_key();
if (d == 0)
raise decrypt_public_key();
return bigpowmod(c, d, n);
}
public void set_private_key(int p, int q, int e0) {
int phi = (p - 1) * (q - 1);
n = p * q;
if (e0 % 2 == 0)
e0++;
while (gcd(e0, phi) > 1)
e0 += 2;
e = e0;
d = zminv(e, phi);
}
public void set_public_key(int n0, int e0) {
n = n0;
e = e0;
d = 0;
}
}
|