/*
- * rsa.c RSA Public and Private key generation functions,
- * RSA encrypt and decrypt functions.
- *
- * Author: Pekka Riikonen <priikone@silcnet.org>
- *
- * Copyright (C) 1997 - 2003 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.
- *
- * 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
- * GNU General Public License for more details.
- *
- * Created: Sat Mar 1 13:26:45 1997 pekka
- *
- * RSA public key cryptographic algorithm used in this distribution is:
- *
- * Key generation:
- * p, q primes
- * p != q
- * n = p * q modulus
- *
- * Public key exponent:
- * e relatively prime to (p-1) * (q-1)
- * Private key exponent:
- * d = e ^ -1 mod lcm(((p-1) * (q-1)))
- *
- * Encryption:
- * c = m ^ e mod n
- * Decryption:
- * m = c ^ d mod n
- *
- * Supports CRT (Chinese Remainder Theorem) for private key operations.
- *
- * The SSH's (Secure Shell), PGP's (Pretty Good Privacy) and RSAREF
- * Toolkit were used as reference when coding this implementation. They
- * all were a big help for me.
- *
- * I also suggest reading Bruce Schneier's; Applied Cryptography, Second
- * Edition, John Wiley & Sons, Inc. 1996. This book deals about RSA and
- * everything else too about cryptography.
- *
- */
+
+ rsa.c RSA Public and Private key generation functions,
+ RSA encrypt and decrypt functions.
+
+ Author: Pekka Riikonen <priikone@silcnet.org>
+
+ Copyright (C) 1997 - 2005 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; 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
+ GNU General Public License for more details.
+
+ Created: Sat Mar 1 13:26:45 1997 pekka
+
+ RSA public key cryptographic algorithm used in this distribution is:
+
+ Key generation:
+ p, q primes
+ p != q
+ n = p * q modulus
+
+ Public key exponent:
+ e relatively prime to (p-1) * (q-1)
+ Private key exponent:
+ d = e ^ -1 mod lcm(((p-1) * (q-1)))
+
+ Encryption:
+ c = m ^ e mod n
+ Decryption:
+ m = c ^ d mod n
+
+ Supports CRT (Chinese Remainder Theorem) for private key operations.
+
+ The SSH's (Secure Shell), PGP's (Pretty Good Privacy) and RSAREF
+ Toolkit were used as reference when coding this implementation. They
+ all were a big help for me.
+
+ I also suggest reading Bruce Schneier's; Applied Cryptography, Second
+ Edition, John Wiley & Sons, Inc. 1996. This book deals about RSA and
+ everything else too about cryptography.
+
+*/
/* $Id$ */
/*
*/
-#include "silcincludes.h"
+#include "silc.h"
#include "rsa_internal.h"
#include "rsa.h"
{
SilcUInt32 prime_bits = keylen / 2;
SilcMPInt p, q;
- bool found = FALSE;
+ SilcBool found = FALSE;
if (keylen < 768 || keylen > 16384)
return FALSE;
silc_buffer_pull(&k, len);
/* Get optimized d for CRT, if present. */
- if (k.len > 4) {
+ if (silc_buffer_len(&k) > 4) {
key->crt = TRUE;
silc_mp_init(&key->dP);
silc_mp_init(&key->dQ);
to compute the modulus n has to be generated before calling this. They
are then sent as argument for the function. */
-bool rsa_generate_keys(RsaKey *key, SilcUInt32 bits,
+SilcBool rsa_generate_keys(RsaKey *key, SilcUInt32 bits,
SilcMPInt *p, SilcMPInt *q)
{
SilcMPInt phi, hlp;
/* Clears whole key structure. */
-bool rsa_clear_keys(RsaKey *key)
+SilcBool rsa_clear_keys(RsaKey *key)
{
key->bits = 0;
if (key->pub_set) {
/* RSA public key operation */
-bool rsa_public_operation(RsaKey *key, SilcMPInt *src, SilcMPInt *dst)
+SilcBool rsa_public_operation(RsaKey *key, SilcMPInt *src, SilcMPInt *dst)
{
/* dst = src ^ e mod n */
silc_mp_pow_mod(dst, src, &key->e, &key->n);
/* RSA private key operation */
-bool rsa_private_operation(RsaKey *key, SilcMPInt *src, SilcMPInt *dst)
+SilcBool rsa_private_operation(RsaKey *key, SilcMPInt *src, SilcMPInt *dst)
{
if (!key->crt) {
/* dst = src ^ d mod n */