Added SILC Thread Queue API
[silc.git] / lib / silccrypt / rsa.h
index 0c1ab1bacc3a7dc2966c0663e3d2ede3a2cad318..6a9506a4aadf5896080f723d632d9a18808c4b29 100644 (file)
@@ -2,15 +2,14 @@
 
   rsa.h
 
-  Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
+  Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 1997 - 2000 Pekka Riikonen
+  Copyright (C) 1997 - 2007 Pekka Riikonen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 2 of the License, or
-  (at your option) any later version.
-  
+  the Free Software Foundation; version 2 of the License.
+
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 #ifndef RSA_H
 #define RSA_H
 
-#include "rsa_internal.h"
-
-/*
- * SILC PKCS API for RSA
- */
-
-SILC_PKCS_API_INIT(rsa);
-SILC_PKCS_API_CLEAR_KEYS(rsa);
-SILC_PKCS_API_GET_PUBLIC_KEY(rsa);
-SILC_PKCS_API_GET_PRIVATE_KEY(rsa);
-SILC_PKCS_API_SET_PUBLIC_KEY(rsa);
-SILC_PKCS_API_SET_PRIVATE_KEY(rsa);
-SILC_PKCS_API_CONTEXT_LEN(rsa);
-SILC_PKCS_API_ENCRYPT(rsa);
-SILC_PKCS_API_DECRYPT(rsa);
-SILC_PKCS_API_SIGN(rsa);
-SILC_PKCS_API_VERIFY(rsa);
-
-
-#endif
+/* RSA Public Key */
+typedef struct {
+  SilcMPInt n;                 /* modulus */
+  SilcMPInt e;                 /* public exponent */
+  int bits;                    /* bits in key */
+} RsaPublicKey;
+
+/* RSA Private Key */
+typedef struct {
+  SilcMPInt n;                 /* modulus */
+  SilcMPInt e;                 /* public exponent */
+  SilcMPInt d;                 /* private exponent */
+  SilcMPInt p;                 /* CRT, p */
+  SilcMPInt q;                 /* CRT, q */
+  SilcMPInt dP;                        /* CRT, d mod p - 1 */
+  SilcMPInt dQ;                        /* CRT, d mod q - 1 */
+  SilcMPInt qP;                        /* CRT, q ^ -1 mod p (aka u, aka qInv) */
+  int bits;                    /* bits in key */
+} RsaPrivateKey;
+
+SilcBool silc_rsa_generate_keys(SilcUInt32 bits, SilcMPInt *p, SilcMPInt *q,
+                               void **ret_public_key, void **ret_private_key);
+SilcBool silc_rsa_public_operation(RsaPublicKey *key, SilcMPInt *src,
+                                  SilcMPInt *dst);
+SilcBool silc_rsa_private_operation(RsaPrivateKey *key, SilcMPInt *src,
+                                   SilcMPInt *dst);
+
+#endif /* RSA_H */