X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/8823192f6413bed15cfa884ed3a3cbbb97885657..0f9bd85aa42c06b55d7a4e1693981233d95c62ff:/exp.h diff --git a/exp.h b/exp.h index fc9e3a9..9ff6a24 100644 --- a/exp.h +++ b/exp.h @@ -1,13 +1,13 @@ /* -*-c-*- * - * $Id: exp.h,v 1.1.4.1 2004/03/20 00:13:31 mdw Exp $ + * $Id$ * * Generalized exponentiation * * (c) 2001 Straylight/Edgeware */ -/*----- Licensing notice --------------------------------------------------* +/*----- Licensing notice --------------------------------------------------* * * This file is part of Catacomb. * @@ -15,30 +15,18 @@ * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. - * + * * Catacomb 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 Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with Catacomb; if not, write to the Free * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: exp.h,v $ - * Revision 1.1.4.1 2004/03/20 00:13:31 mdw - * Projective coordinates for prime curves - * - * Revision 1.1 2001/06/16 13:00:59 mdw - * New generic exponentation code. Includes sliding-window simultaneous - * exponentiation. - * - */ - #ifdef CATACOMB_EXP_H # error "Multiple inclusion of " #endif @@ -65,7 +53,7 @@ typedef struct exp_simulscan { mpw w; size_t len; const mpw *v; -} exp_simulscan; +} exp_simulscan; typedef struct exp_simul { unsigned b; @@ -81,10 +69,19 @@ typedef struct exp_simul { # define EXP_WINSZ 4 /* Predefine if you need to */ #endif -/* --- These are determined from the window size --- */ +/* --- These are determined from the window size --- * + * + * Given a %$k$%-bit exponent, I expect to do %$k/2$% multiplies if I use the + * simple way. If I use an n-bit sliding window, then I do %$2^n$% + * multiplies up front, but I only do %$(2^n - 1)/2^n k/n$% multiplies for + * the exponentiation. This is a win when + * + * %$k \ge \frac{n 2^{n+1}}{n - 2}$% + */ #define EXP_TABSZ (1 << EXP_WINSZ) -#define EXP_THRESH (((MPW_BITS / EXP_WINSZ) << 2) + 1) +#define EXP_THRESH \ + ((EXP_WINSZ * (2 << EXP_WINSZ))/((EXP_WINSZ - 2) * MPW_BITS)) /* --- Required operations --- * * @@ -400,6 +397,7 @@ exp_simul_done: \ for (i = 1; i < vn; i++) \ EXP_DROP(v[i]); \ xfree(v); \ + xfree(e.s); \ } while (0) /*----- Functions provided ------------------------------------------------*/