Added SILC Thread Queue API
[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   SilcMPInt n;                  /* modulus */
26   SilcMPInt e;                  /* public exponent */
27   int bits;                     /* bits in key */
28 } RsaPublicKey;
29
30 /* RSA Private Key */
31 typedef struct {
32   SilcMPInt n;                  /* modulus */
33   SilcMPInt e;                  /* public exponent */
34   SilcMPInt d;                  /* private exponent */
35   SilcMPInt p;                  /* CRT, p */
36   SilcMPInt q;                  /* CRT, q */
37   SilcMPInt dP;                 /* CRT, d mod p - 1 */
38   SilcMPInt dQ;                 /* CRT, d mod q - 1 */
39   SilcMPInt qP;                 /* CRT, q ^ -1 mod p (aka u, aka qInv) */
40   int bits;                     /* bits in key */
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 */