+/*
+
+ silcdh.h
+
+ Author: Pekka Riikonen <priikone@silcnet.org>
+
+ Copyright (C) 2001 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.
+
+*/
+
/****h* silccrypt/SilcDH/silcdh.h
- *
- * NAME
- *
- * silcdh.h
- *
- * COPYRIGHT
- *
- * Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
- *
- * Copyright (C) 2001 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.
*
* DESCRIPTION
*
* PKCS #3 compliant Diffie Hellman key agreement protocol implementation.
* This is used as part of SKE (SILC Key Exchange) protocol.
+ *
***/
#ifndef SILCDH_H
#define SILCDH_H
#include "silcmp.h"
-#include "silcrng.h"
/****s* silccrypt/SilcDH/SilcDH
*
/* Diffie Hellman context. This includes the DH parameters including the
negotiated key material. */
struct SilcDHStruct {
- SilcMPInt *g; /* Global base (generator) */
- SilcMPInt *p; /* Global prime (modulus, prime) */
- SilcMPInt *lpf; /* Largest prime factor (prime) */
- SilcMPInt *my_x; /* x, My private value (random) */
- SilcMPInt *my_y; /* y, My public value (y = g ^ x mod p) */
- SilcMPInt *your_y; /* y', Your public value (y' = g ^ x' mod p) */
- SilcMPInt *z; /* The computed secret key (z = y' ^ x mod p) */
-
- SilcRng rng; /* RNG */
+ SilcMPInt *g; /* Global base (generator) */
+ SilcMPInt *p; /* Global prime (modulus, prime) */
+ SilcMPInt *lpf; /* Largest prime factor (prime) */
+ SilcMPInt *my_x; /* x, My private value (random) */
+ SilcMPInt *my_y; /* y, My public value (y = g ^ x mod p) */
+ SilcMPInt *your_y; /* y', Your public value (y' = g ^ x' mod p) */
+ SilcMPInt *z; /* The computed secret key (z = y' ^ x mod p) */
};
/****f* silccrypt/SilcDH/silc_dh_alloc
*
* SYNOPSIS
*
- * SilcDH silc_dh_alloc(SilcRng rng, SilcMPInt *g, SilcMPInt *p, SilcMPInt *lpf);
+ * SilcDH silc_dh_alloc(SilcMPInt *g, SilcMPInt *p, SilcMPInt *lpf);
*
* DESCRIPTION
*
- * Allocate SilcDH context. The `rng' must be initialized random number
- * generator context, the `g' is the public base generator used in the
- * negotiation, the `p' is the public prime used in the negotiation and
- * the `lpf' is largest prime factor of p defined publicly as well. The
- * `lpf' is optional and if it is not supplied then the private values
- * generated satifies 0 < x < p - 1 instead of 0 < x < lpf. Returns NULL
- * on error or allocated SilcDH context on success.
+ * Allocate SilcDH context. The `g' is the public base generator used
+ * in the negotiation, the `p' is the public prime used in the
+ * negotiation and the `lpf' is largest prime factor of p defined
+ * publicly as well. The `lpf' is optional and if it is not supplied
+ * then the private values generated satifies 0 < x < p - 1 instead
+ * of 0 < x < lpf. Returns NULL on error or allocated SilcDH context
+ * on success.
*
***/
-SilcDH silc_dh_alloc(SilcRng rng, SilcMPInt *g, SilcMPInt *p, SilcMPInt *lpf);
+SilcDH silc_dh_alloc(SilcMPInt *g, SilcMPInt *p, SilcMPInt *lpf);
/****f* silccrypt/SilcDH/silc_dh_free
*
*
* DESCRIPTION
*
- * Frees the SilcDH context. Does not free the RNG context given in the
- * allocation. Frees all the allocated data inside the SilcDH context.
+ * Free the SilcDH context. Frees all the allocated data inside the
+ * SilcDH context.
*
***/
void silc_dh_free(SilcDH dh);
*
* SYNOPSIS
*
- * int silc_dh_generate_private(SilcDH dh, SilcMPInt **x);
+ * SilcBool silc_dh_generate_private(SilcDH dh, const SilcMPInt **x);
*
* DESCRIPTION
*
* Generates random private value `x' such that 0 < x < lpf at most of
* length of lpf. Returns FALSE if the random number could not be generated.
* Returns the generated value into `x' pointer sent as argument, unless
- * the `x' is NULL. The returned `x' must no be freed by the caller.
+ * the `x' is NULL. The returned `x' must not be freed by the caller.
*
***/
-int silc_dh_generate_private(SilcDH dh, SilcMPInt **x);
+SilcBool silc_dh_generate_private(SilcDH dh, const SilcMPInt **x);
/****f* silccrypt/SilcDH/silc_dh_compute_public
*
* SYNOPSIS
*
- * int silc_dh_compute_public(SilcDH dh, SilcMPInt **y);
+ * SilcBool silc_dh_compute_public(SilcDH dh, const SilcMPInt **y);
*
* DESCRIPTION
*
* freed by the caller.
*
***/
-int silc_dh_compute_public(SilcDH dh, SilcMPInt **y);
+SilcBool silc_dh_compute_public(SilcDH dh, const SilcMPInt **y);
/****f* silccrypt/SilcDH/silc_dh_remote_public
*
* SYNOPSIS
*
- * int silc_dh_compute_public(SilcDH dh, SilcMPInt **y);
+ * SilcBool silc_dh_compute_public(SilcDH dh, SilcMPInt *y);
*
* DESCRIPTION
*
* on error.
*
***/
-int silc_dh_set_remote_public(SilcDH dh, SilcMPInt *y);
+SilcBool silc_dh_set_remote_public(SilcDH dh, SilcMPInt *y);
/****f* silccrypt/SilcDH/silc_dh_compute_key
*
* SYNOPSIS
*
- * int silc_dh_compute_key(SilcDH dh, SilcMPInt **z);
+ * SilcBool silc_dh_compute_key(SilcDH dh, const SilcMPInt **z);
*
* DESCRIPTION
*
* freed by the caller.
*
***/
-int silc_dh_compute_key(SilcDH dh, SilcMPInt **z);
+SilcBool silc_dh_compute_key(SilcDH dh, const SilcMPInt **z);
/****f* silccrypt/SilcDH/silc_dh_remote_public
*
* SYNOPSIS
*
- * int silc_dh_compute_key_data(SilcDH dh, unsigned char **z,
- * uint32 *z_len);
+ * SilcBool silc_dh_compute_key_data(SilcDH dh, unsigned char **z,
+ * SilcUInt32 *z_len);
*
* DESCRIPTION
*
* Same as above but returns the computed secret key as octet binary
- * string.
+ * string. The caller must free the returned binary string.
*
***/
-int silc_dh_compute_key_data(SilcDH dh, unsigned char **z,
- uint32 *z_len);
+SilcBool silc_dh_compute_key_data(SilcDH dh, unsigned char **z,
+ SilcUInt32 *z_len);
#endif