Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 1997 - 2005 Pekka Riikonen
+ Copyright (C) 1997 - 2008 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
*/
-/****h* silcmath/SILC MP Interface
+/****h* silcmath/MP Integer Interface
*
* DESCRIPTION
*
#endif /* SILC_DIST_TFM */
#endif
-/****d* silcmath/SilcMPAPI/SilcMPInt
+/****d* silcmath/SilcMPInt
*
* NAME
*
typedef SILC_MP_INT SilcMPInt;
/***/
-/****f* silcmath/SilcMPAPI/silc_mp_init
+/****f* silcmath/silc_mp_init
*
* SYNOPSIS
*
- * void silc_mp_init(SilcMPInt mp);
+ * SilcBool silc_mp_init(SilcMPInt mp);
*
* DESCRIPTION
*
- * Initializes the SilcMPInt *that is the actual MP Integer.
- * This must be called before any of the silc_mp_ routines can be
- * used. The integer is uninitialized with the silc_mp_uninit function.
+ * Initializes the MP integer. This must be called before calling any
+ * other routine in SILC MP API. The silc_mp_uninit must be called
+ * to uninitialize the integer. Returns FALSE on error, TRUE otherwise.
*
***/
-void silc_mp_init(SilcMPInt *mp);
+SilcBool silc_mp_init(SilcMPInt *mp);
-/****f* silcmath/SilcMPAPI/silc_mp_sinit
+/****f* silcmath/silc_mp_sinit
*
* SYNOPSIS
*
- * bool silc_mp_sinit(SilcStack stack, SilcMPInt *mp);
+ * SilcBool silc_mp_sinit(SilcStack stack, SilcMPInt *mp);
*
* DESCRIPTION
*
- * Initializes the SilcMPInt *that is the actual MP Integer.
- * This must be called before any of the silc_mp_ routines can be
- * used. The integer is uninitialized with the silc_mp_uninit function.
- * This routine is equivalent to silc_mp_init but allocates the memory
- * from `stack'.
+ * Initializes the MP integer. This must be called before calling any
+ * other routine in SILC MP API. The silc_mp_uninit must be called
+ * to uninitialize the integer. Returns FALSE on error, TRUE otherwise.
*
- * NOTES
- *
- * The `stack' is saved into the `mp' for the duration of the existence
- * of `mp'. This means that `stack' must not become invalid while `mp'
- * is used. It also means that any routine that may need memory allocation
- * to for example enlarge `mp' will allocate the memory from `stack'.
+ * If `stack' is non-NULL all memory is allocated from `stack'. If it
+ * is NULL this is equivalent to silc_mp_init. The silc_mp_uninit must
+ * be called to uninitialize the integer even when `stack' is non-NULL.
*
***/
-bool silc_mp_sinit(SilcStack stack, SilcMPInt *mp);
+SilcBool silc_mp_sinit(SilcStack stack, SilcMPInt *mp);
-/****f* silcmath/SilcMPAPI/silc_mp_uninit
+/****f* silcmath/silc_mp_uninit
*
* SYNOPSIS
*
***/
void silc_mp_uninit(SilcMPInt *mp);
-/****f* silcmath/SilcMPAPI/silc_mp_size
+/****f* silcmath/silc_mp_size
*
* SYNOPSIS
*
***/
size_t silc_mp_size(SilcMPInt *mp);
-/****f* silcmath/SilcMPAPI/silc_mp_sizeinbase
+/****f* silcmath/silc_mp_sizeinbase
*
* SYNOPSIS
*
***/
size_t silc_mp_sizeinbase(SilcMPInt *mp, int base);
-/****f* silcmath/SilcMPAPI/silc_mp_set
+/****f* silcmath/silc_mp_set
*
* SYNOPSIS
*
- * void silc_mp_set(SilcMPInt *dst, SilcMPInt *src);
+ * SilcBool silc_mp_set(SilcMPInt *dst, SilcMPInt *src);
*
* DESCRIPTION
*
* Set `dst' integer from `src' integer. The `dst' must already be
- * initialized.
+ * initialized. This in effect copies the integer from `src' to `dst'.
*
***/
-void silc_mp_set(SilcMPInt *dst, SilcMPInt *src);
+SilcBool silc_mp_set(SilcMPInt *dst, SilcMPInt *src);
-/****f* silcmath/SilcMPAPI/silc_mp_set_ui
+/****f* silcmath/silc_mp_set_ui
*
* SYNOPSIS
*
- * void silc_mp_set_ui(SilcMPInt *dst, SilcUInt32 ui);
+ * SilcBool silc_mp_set_ui(SilcMPInt *dst, SilcUInt32 ui);
*
* DESCRIPTION
*
* initialized.
*
***/
-void silc_mp_set_ui(SilcMPInt *dst, SilcUInt32 ui);
+SilcBool silc_mp_set_ui(SilcMPInt *dst, SilcUInt32 ui);
-/****f* silcmath/SilcMPAPI/silc_mp_set_si
+/****f* silcmath/silc_mp_set_si
*
* SYNOPSIS
*
- * void silc_mp_set_si(SilcMPInt *dst, SilcInt32 si);
+ * SilcBool silc_mp_set_si(SilcMPInt *dst, SilcInt32 si);
*
* DESCRIPTION
*
* already be initialized.
*
***/
-void silc_mp_set_si(SilcMPInt *dst, SilcInt32 si);
+SilcBool silc_mp_set_si(SilcMPInt *dst, SilcInt32 si);
-/****f* silcmath/SilcMPAPI/silc_mp_set_str
+/****f* silcmath/silc_mp_set_str
*
* SYNOPSIS
*
- * void silc_mp_set_str(SilcMPInt *dst, const char *str, int base);
+ * SilcBool silc_mp_set_str(SilcMPInt *dst, const char *str, int base);
*
* DESCRIPTION
*
* binary. Use the silc_mp_bin2mp to decode binary into integer.
*
***/
-void silc_mp_set_str(SilcMPInt *dst, const char *str, int base);
+SilcBool silc_mp_set_str(SilcMPInt *dst, const char *str, int base);
-/****f* silcmath/SilcMPAPI/silc_mp_get_ui
+/****f* silcmath/silc_mp_get_ui
*
* SYNOPSIS
*
***/
SilcUInt32 silc_mp_get_ui(SilcMPInt *mp);
-/****f* silcmath/SilcMPAPI/silc_mp_get_str
+/****f* silcmath/silc_mp_get_str
*
* SYNOPSIS
*
- * void silc_mp_get_str(char *str, SilcMPInt *mp, int base);
+ * char *silc_mp_get_str(char *str, SilcMPInt *mp, int base);
*
* DESCRIPTION
*
***/
char *silc_mp_get_str(char *str, SilcMPInt *mp, int base);
-/****f* silcmath/SilcMPAPI/silc_mp_add
+/****f* silcmath/silc_mp_add
*
* SYNOPSIS
*
- * void silc_mp_add(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+ * SilcBool silc_mp_add(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
*
* DESCRIPTION
*
* Add two integers `mp1' and `mp2' and save the result to `dst'.
*
***/
-void silc_mp_add(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+SilcBool silc_mp_add(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
-/****f* silcmath/SilcMPAPI/silc_mp_add_ui
+/****f* silcmath/silc_mp_add_ui
*
* SYNOPSIS
*
- * void silc_mp_add_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
+ * SilcBool silc_mp_add_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
*
* DESCRIPTION
*
* to `dst'.
*
***/
-void silc_mp_add_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
+SilcBool silc_mp_add_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
-/****f* silcmath/SilcMPAPI/silc_mp_sub
+/****f* silcmath/silc_mp_sub
*
* SYNOPSIS
*
- * void silc_mp_sub(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+ * SilcBool silc_mp_sub(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
*
* DESCRIPTION
*
* Subtract two integers `mp1' and `mp2' and save the result to `dst'.
*
***/
-void silc_mp_sub(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+SilcBool silc_mp_sub(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
-/****f* silcmath/SilcMPAPI/silc_mp_sub_ui
+/****f* silcmath/silc_mp_sub_ui
*
* SYNOPSIS
*
- * void silc_mp_sub_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
+ * SilcBool silc_mp_sub_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
*
* DESCRIPTION
*
* to `dst'.
*
***/
-void silc_mp_sub_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
+SilcBool silc_mp_sub_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
-/****f* silcmath/SilcMPAPI/silc_mp_mul
+/****f* silcmath/silc_mp_mul
*
* SYNOPSIS
*
- * void silc_mp_mul(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+ * SilcBool silc_mp_mul(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
*
* DESCRIPTION
*
* Multiply two integers `mp1' and `mp2' and save the result to `dst'.
*
***/
-void silc_mp_mul(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+SilcBool silc_mp_mul(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
-/****f* silcmath/SilcMPAPI/silc_mp_mul_ui
+/****f* silcmath/silc_mp_mul_ui
*
* SYNOPSIS
*
- * void silc_mp_mul_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
+ * SilcBool silc_mp_mul_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
*
* DESCRIPTION
*
* to `dst'.
*
***/
-void silc_mp_mul_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
+SilcBool silc_mp_mul_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
-/****f* silcmath/SilcMPAPI/silc_mp_mul_2exp
+/****f* silcmath/silc_mp_mul_2exp
*
* SYNOPSIS
*
- * void silc_mp_mul_2exp(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 exp);
+ * SilcBool silc_mp_mul_2exp(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 exp);
*
* DESCRIPTION
*
* `dst'. This is equivalent to dst = mp1 * (2 ^ exp).
*
***/
-void silc_mp_mul_2exp(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 exp);
+SilcBool silc_mp_mul_2exp(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 exp);
-/****f* silcmath/SilcMPAPI/silc_mp_sqrt
+/****f* silcmath/silc_mp_sqrt
*
* SYNOPSIS
*
- * void silc_mp_sqrt(SilcMPInt *dst, SilcMPInt *src);
+ * SilcBool silc_mp_sqrt(SilcMPInt *dst, SilcMPInt *src);
*
* DESCRIPTION
*
* Compute square root of floor(sqrt(src)) and save the result to `dst'.
*
***/
-void silc_mp_sqrt(SilcMPInt *dst, SilcMPInt *src);
+SilcBool silc_mp_sqrt(SilcMPInt *dst, SilcMPInt *src);
-/****f* silcmath/SilcMPAPI/silc_mp_div
+/****f* silcmath/silc_mp_div
*
* SYNOPSIS
*
- * void silc_mp_div(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+ * SilcBool silc_mp_div(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
*
* DESCRIPTION
*
* is equivalent to dst = mp1 / mp2;
*
***/
-void silc_mp_div(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+SilcBool silc_mp_div(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
-/****f* silcmath/SilcMPAPI/silc_mp_div_ui
+/****f* silcmath/silc_mp_div_ui
*
* SYNOPSIS
*
- * void silc_mp_div_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
+ * SilcBool silc_mp_div_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
*
* DESCRIPTION
*
* `dst'. This is equivalent to dst = mp1 / ui;
*
***/
-void silc_mp_div_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
+SilcBool silc_mp_div_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
-/****f* silcmath/SilcMPAPI/silc_mp_div_qr
+/****f* silcmath/silc_mp_div_qr
*
* SYNOPSIS
*
- * void silc_mp_div_qr(SilcMPInt *q, SilcMPInt *r, SilcMPInt *mp1,
- * SilcMPInt *mp2);
+ * SilcBool silc_mp_div_qr(SilcMPInt *q, SilcMPInt *r, SilcMPInt *mp1,
+ * SilcMPInt *mp2);
*
* DESCRIPTION
*
* then the operation is omitted.
*
***/
-void silc_mp_div_qr(SilcMPInt *q, SilcMPInt *r, SilcMPInt *mp1,
- SilcMPInt *mp2);
+SilcBool silc_mp_div_qr(SilcMPInt *q, SilcMPInt *r, SilcMPInt *mp1,
+ SilcMPInt *mp2);
-/****f* silcmath/SilcMPAPI/silc_mp_div_2exp
+/****f* silcmath/silc_mp_div_2exp
*
* SYNOPSIS
*
- * void silc_mp_div_2exp(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+ * SilcBool silc_mp_div_2exp(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
*
* DESCRIPTION
*
* This is equivalent to dst = mp1 / (2 ^ exp).
*
***/
-void silc_mp_div_2exp(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 exp);
+SilcBool silc_mp_div_2exp(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 exp);
-/****f* silcmath/SilcMPAPI/silc_mp_div_2exp_qr
+/****f* silcmath/silc_mp_div_2exp_qr
*
* SYNOPSIS
*
- * void silc_mp_div_2exp_qr(SilcMPInt *q, SilcMPInt *r, SilcMPInt *mp1,
- * SilcUInt32 exp);
+ * SilcBool silc_mp_div_2exp_qr(SilcMPInt *q, SilcMPInt *r, SilcMPInt *mp1,
+ * SilcUInt32 exp);
*
* DESCRIPTION
*
* is omitted.
*
***/
-void silc_mp_div_2exp_qr(SilcMPInt *q, SilcMPInt *r, SilcMPInt *mp1,
- SilcUInt32 exp);
+SilcBool silc_mp_div_2exp_qr(SilcMPInt *q, SilcMPInt *r, SilcMPInt *mp1,
+ SilcUInt32 exp);
-/****f* silcmath/SilcMPAPI/silc_mp_mod
+/****f* silcmath/silc_mp_mod
*
* SYNOPSIS
*
- * void silc_mp_mod(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+ * SilcBool silc_mp_mod(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
*
* DESCRIPTION
*
* returns the remainder as well.
*
***/
-void silc_mp_mod(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+SilcBool silc_mp_mod(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
-/****f* silcmath/SilcMPAPI/silc_mp_mod_ui
+/****f* silcmath/silc_mp_mod_ui
*
* SYNOPSIS
*
- * void silc_mp_mod_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
+ * SilcBool silc_mp_mod_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
*
* DESCRIPTION
*
* to dst = mp1 mod ui.
*
***/
-void silc_mp_mod_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
+SilcBool silc_mp_mod_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
-/****f* silcmath/SilcMPAPI/silc_mp_mod_2exp
+/****f* silcmath/silc_mp_mod_2exp
*
* SYNOPSIS
*
- * void silc_mp_mod_2exp(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+ * SilcBool silc_mp_mod_2exp(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
*
* DESCRIPTION
*
* function returns the remainder as well.
*
***/
-void silc_mp_mod_2exp(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
+SilcBool silc_mp_mod_2exp(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 ui);
-/****f* silcmath/SilcMPAPI/silc_mp_pow
+/****f* silcmath/silc_mp_pow_ui
*
* SYNOPSIS
*
- * void silc_mp_pow(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *exp);
+ * SilcBool silc_mp_pow_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 exp);
*
* DESCRIPTION
*
* equivalent to dst = mp1 ^ exp.
*
***/
-void silc_mp_pow(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *exp);
+SilcBool silc_mp_pow_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 exp);
-/****f* silcmath/SilcMPAPI/silc_mp_pow_ui
+/****f* silcmath/silc_mp_pow_mod
*
* SYNOPSIS
*
- * void silc_mp_pow_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 exp);
- *
- * DESCRIPTION
- *
- * Compute `mp1' ** `exp' and save the result to `dst'. This is
- * equivalent to dst = mp1 ^ exp.
- *
- ***/
-void silc_mp_pow_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 exp);
-
-/****f* silcmath/SilcMPAPI/silc_mp_pow_mod
- *
- * SYNOPSIS
- *
- * void silc_mp_pow_mod(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *exp,
- * SilcMPInt *mod);
+ * SilcBool silc_mp_pow_mod(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *exp,
+ * SilcMPInt *mod);
*
* DESCRIPTION
*
* This is equivalent to dst = (mp1 ^ exp) mod mod.
*
***/
-void silc_mp_pow_mod(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *exp,
- SilcMPInt *mod);
+SilcBool silc_mp_pow_mod(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *exp,
+ SilcMPInt *mod);
-/****f* silcmath/SilcMPAPI/silc_mp_pow_mod_ui
+/****f* silcmath/silc_mp_pow_mod_ui
*
* SYNOPSIS
*
- * void silc_mp_pow_mod_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 exp,
- * SilcMPInt *mod);
+ * SilcBool silc_mp_pow_mod_ui(SilcMPInt *dst, SilcMPInt *mp1,
+ * SilcUInt32 exp, SilcMPInt *mod);
*
* DESCRIPTION
*
* This is equivalent to dst = (mp1 ^ exp) mod mod.
*
***/
-void silc_mp_pow_mod_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 exp,
- SilcMPInt *mod);
+SilcBool silc_mp_pow_mod_ui(SilcMPInt *dst, SilcMPInt *mp1, SilcUInt32 exp,
+ SilcMPInt *mod);
-/****f* silcmath/SilcMPAPI/silc_mp_modinv
+/****f* silcmath/silc_mp_modinv
*
* SYNOPSIS
*
- * void silc_mp_modinv(SilcMPInt *inv, SilcMPInt *a, SilcMPInt *n);
+ * SilcBool silc_mp_modinv(SilcMPInt *inv, SilcMPInt *a, SilcMPInt *n);
*
* DESCRIPTION
*
* not needed by the algorithm so it does not have to be included.)
*
***/
-void silc_mp_modinv(SilcMPInt *inv, SilcMPInt *a, SilcMPInt *n);
+SilcBool silc_mp_modinv(SilcMPInt *inv, SilcMPInt *a, SilcMPInt *n);
-/****f* silcmath/SilcMPAPI/silc_mp_gcd
+/****f* silcmath/silc_mp_gcd
*
* SYNOPSIS
*
- * void silc_mp_gcd(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+ * SilcBool silc_mp_gcd(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
*
* DESCRIPTION
*
* and save the result to `dst'.
*
***/
-void silc_mp_gcd(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
-
-/****f* silcmath/SilcMPAPI/silc_mp_gcdext
- *
- * SYNOPSIS
- *
- * void silc_mp_gcdext(SilcMPInt *g, SilcMPInt *s, SilcMPInt *t,
- * SilcMPInt *mp1, SilcMPInt *mp2);
- *
- * DESCRIPTION
- *
- * Calculate the extended greatest common divisor `g', `s' and `t' such
- * that g = mp1 * s + mp2 * + t.
- *
- ***/
-void silc_mp_gcdext(SilcMPInt *g, SilcMPInt *s, SilcMPInt *t, SilcMPInt *mp1,
- SilcMPInt *mp2);
+SilcBool silc_mp_gcd(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
-/****f* silcmath/SilcMPAPI/silc_mp_cmp
+/****f* silcmath/silc_mp_cmp
*
* SYNOPSIS
*
***/
int silc_mp_cmp(SilcMPInt *mp1, SilcMPInt *mp2);
-/****f* silcmath/SilcMPAPI/silc_mp_cmp_si
+/****f* silcmath/silc_mp_cmp_si
*
* SYNOPSIS
*
***/
int silc_mp_cmp_si(SilcMPInt *mp1, SilcInt32 si);
-/****f* silcmath/SilcMPAPI/silc_mp_cmp_ui
+/****f* silcmath/silc_mp_cmp_ui
*
* SYNOPSIS
*
***/
int silc_mp_cmp_ui(SilcMPInt *mp1, SilcUInt32 ui);
-/****f* silcmath/SilcMPAPI/silc_mp_mp2bin
+/****f* silcmath/silc_mp_mp2bin
*
* SYNOPSIS
*
unsigned char *silc_mp_mp2bin(SilcMPInt *val, SilcUInt32 len,
SilcUInt32 *ret_len);
-/****f* silcmath/SilcMPAPI/silc_mp_mp2bin_noalloc
+/****f* silcmath/silc_mp_mp2bin_noalloc
*
* SYNOPSIS
*
* DESCRIPTION
*
* Same as silc_mp_mp2bin but does not allocate any memory. The
- * encoded data is returned into `dst' and it's length to the `ret_len'.
+ * encoded data is returned into `dst' of size of `dst_len'.
*
***/
void silc_mp_mp2bin_noalloc(SilcMPInt *val, unsigned char *dst,
SilcUInt32 dst_len);
-/****f* silcmath/SilcMPAPI/silc_mp_bin2mp
+/****f* silcmath/silc_mp_bin2mp
*
* SYNOPSIS
*
***/
void silc_mp_bin2mp(unsigned char *data, SilcUInt32 len, SilcMPInt *ret);
-/****f* silcmath/SilcMPAPI/silc_mp_abs
+/****f* silcmath/silc_mp_abs
*
* SYNOPSIS
*
- * void silc_mp_abs(SilcMPInt *src, SilcMPInt *dst);
+ * SilcBool silc_mp_abs(SilcMPInt *src, SilcMPInt *dst);
*
* DESCRIPTION
*
* Assign the absolute value of `src' to `dst'.
*
***/
-void silc_mp_abs(SilcMPInt *dst, SilcMPInt *src);
+SilcBool silc_mp_abs(SilcMPInt *dst, SilcMPInt *src);
-/****f* silcmath/SilcMPAPI/silc_mp_neg
+/****f* silcmath/silc_mp_neg
*
* SYNOPSIS
*
- * void silc_mp_neg(SilcMPInt *dst, SilcMPInt *src);
+ * SilcBool silc_mp_neg(SilcMPInt *dst, SilcMPInt *src);
*
* DESCRIPTION
*
* Negate `src' and save the result to `dst'.
*
***/
-void silc_mp_neg(SilcMPInt *dst, SilcMPInt *src);
+SilcBool silc_mp_neg(SilcMPInt *dst, SilcMPInt *src);
-/****f* silcmath/SilcMPAPI/silc_mp_and
+/****f* silcmath/silc_mp_and
*
* SYNOPSIS
*
- * void silc_mp_and(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+ * SilcBool silc_mp_and(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
*
* DESCRIPTION
*
- * Logical and operator. The result is saved to `dst'.
+ * Bitwise AND operator. The result is saved to `dst'.
*
***/
-void silc_mp_and(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+SilcBool silc_mp_and(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
-/****f* silcmath/SilcMPAPI/silc_mp_or
+/****f* silcmath/silc_mp_or
*
* SYNOPSIS
*
- * void silc_mp_or(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+ * SilcBool silc_mp_or(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
*
* DESCRIPTION
*
- * Logical inclusive OR operator. The result is saved to `dst'.
+ * Bitwise inclusive OR operator. The result is saved to `dst'.
*
***/
-void silc_mp_or(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+SilcBool silc_mp_or(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
-/****f* silcmath/SilcMPAPI/silc_mp_xor
+/****f* silcmath/silc_mp_xor
*
* SYNOPSIS
*
- * void silc_mp_xor(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+ * SilcBool silc_mp_xor(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
*
* DESCRIPTION
*
- * Logical exclusive OR operator. The result is saved to `dst'.
+ * Bitwise exclusive OR operator. The result is saved to `dst'.
+ *
+ ***/
+SilcBool silc_mp_xor(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+
+/* Utility functions */
+
+/****f* silcmath/silc_mp_format
+ *
+ * SYNOPSIS
+ *
+ * int silc_mp_format(SilcStack stack, SilcBuffer buffer,
+ * void *value, void *context)
+ *
+ * DESCRIPTION
+ *
+ * MP integer encoding function to be used with silc_buffer_format and
+ * SILC_STR_FUNC formatter. The encoded data is of following format:
+ *
+ * SILC_STR_UINT32, integer_len,
+ * SILC_STR_DATA integer_data
+ *
+ * EXAMPLE
+ *
+ * silc_buffer_format(buf,
+ * SILC_STR_FUNC(silc_mp_format, mpint, NULL),
+ * SILC_STR_END);
+ *
+ ***/
+int silc_mp_format(SilcStack stack, SilcBuffer buffer,
+ void *value, void *context);
+
+/****f* silcmath/silc_mp_unformat
+ *
+ * SYNOPSIS
+ *
+ * int silc_mp_unformat(SilcStack stack, SilcBuffer buffer,
+ * void **value, void *context)
+ *
+ * DESCRIPTION
+ *
+ * MP integer decoding function to be used with silc_buffer_unformat and
+ * SILC_STR_FUNC unformatter. This function expects that the length of
+ * the integer is encoded as 32-bit integer and precedes the integer
+ * data.
+ *
+ * EXAMPLE
+ *
+ * SilcMPint mp_ptr;
+ *
+ * silc_mp_init(&mpint);
+ * mp_ptr = &mpint;
+ *
+ * silc_buffer_unformat(buf,
+ * SILC_STR_FUNC(silc_mp_unformat, &mp_ptr, NULL),
+ * SILC_STR_END);
*
***/
-void silc_mp_xor(SilcMPInt *dst, SilcMPInt *mp1, SilcMPInt *mp2);
+int silc_mp_unformat(SilcStack stack, SilcBuffer buffer,
+ void **value, void *context);
#endif