Merge branch 'topic/mm-fixes' of git://208.110.73.182/silc into silc.1.1.branch
[silc.git] / lib / silccrypt / rsa.h
1 /*
2
3   rsa.h
4
5   Author: Pekka Riikonen <priikone@silcnet.org>
6
7   Copyright (C) 1997 - 2007 Pekka Riikonen
8
9   This program is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License as published by
11   the Free Software Foundation; version 2 of the License.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18 */
19
20 #ifndef RSA_H
21 #define RSA_H
22
23 /* RSA Public Key */
24 typedef struct {
25   int bits;                     /* bits in key */
26   SilcMPInt n;                  /* modulus */
27   SilcMPInt e;                  /* public exponent */
28 } RsaPublicKey;
29
30 /* RSA Private Key */
31 typedef struct {
32   int bits;                     /* bits in key */
33   SilcMPInt n;                  /* modulus */
34   SilcMPInt e;                  /* public exponent */
35   SilcMPInt d;                  /* private exponent */
36   SilcMPInt p;                  /* CRT, p */
37   SilcMPInt q;                  /* CRT, q */
38   SilcMPInt dP;                 /* CRT, d mod p - 1 */
39   SilcMPInt dQ;                 /* CRT, d mod q - 1 */
40   SilcMPInt qP;                 /* CRT, q ^ -1 mod p (aka u, aka qInv) */
41 } RsaPrivateKey;
42
43 SilcBool silc_rsa_generate_keys(SilcUInt32 bits, SilcMPInt *p, SilcMPInt *q,
44                                 void **ret_public_key, void **ret_private_key);
45 SilcBool silc_rsa_public_operation(RsaPublicKey *key, SilcMPInt *src,
46                                    SilcMPInt *dst);
47 SilcBool silc_rsa_private_operation(RsaPrivateKey *key, SilcMPInt *src,
48                                     SilcMPInt *dst);
49
50 #endif /* RSA_H */