projects
/
u
/
mdw
/
catacomb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add an option to disable Montgomery reduction, so that performance
[u/mdw/catacomb]
/
mpmont.c
diff --git
a/mpmont.c
b/mpmont.c
index
35bffc2
..
7522dba
100644
(file)
--- a/
mpmont.c
+++ b/
mpmont.c
@@
-1,6
+1,6
@@
/* -*-c-*-
*
/* -*-c-*-
*
- * $Id: mpmont.c,v 1.
4 1999/11/21 12:27:06
mdw Exp $
+ * $Id: mpmont.c,v 1.
5 1999/11/22 13:58:40
mdw Exp $
*
* Montgomery reduction
*
*
* Montgomery reduction
*
@@
-30,6
+30,10
@@
/*----- Revision history --------------------------------------------------*
*
* $Log: mpmont.c,v $
/*----- Revision history --------------------------------------------------*
*
* $Log: mpmont.c,v $
+ * Revision 1.5 1999/11/22 13:58:40 mdw
+ * Add an option to disable Montgomery reduction, so that performance
+ * comparisons can be done.
+ *
* Revision 1.4 1999/11/21 12:27:06 mdw
* Remove a division from the Montgomery setup by calculating
* %$R^2 \bmod m$% first and then %$R \bmod m$% by Montgomery reduction of
* Revision 1.4 1999/11/21 12:27:06 mdw
* Remove a division from the Montgomery setup by calculating
* %$R^2 \bmod m$% first and then %$R \bmod m$% by Montgomery reduction of
@@
-53,6
+57,16
@@
#include "mp.h"
#include "mpmont.h"
#include "mp.h"
#include "mpmont.h"
+/*----- Tweakables --------------------------------------------------------*/
+
+/* --- @MPMONT_DISABLE@ --- *
+ *
+ * Replace all the clever Montgomery reduction with good old-fashioned long
+ * division.
+ */
+
+/* #define MPMONT_DISABLE */
+
/*----- Main code ---------------------------------------------------------*/
/* --- @mpmont_create@ --- *
/*----- Main code ---------------------------------------------------------*/
/* --- @mpmont_create@ --- *
@@
-65,6
+79,18
@@
* Use: Initializes a Montgomery reduction context ready for use.
*/
* Use: Initializes a Montgomery reduction context ready for use.
*/
+#ifdef MPMONT_DISABLE
+
+void mpmont_create(mpmont *mm, mp *m)
+{
+ mp_shrink(m);
+ mm->m = MP_COPY(m);
+ mm->r = MP_ONE;
+ mm->r2 = MP_ONE;
+}
+
+#else
+
void mpmont_create(mpmont *mm, mp *m)
{
/* --- Take a copy of the modulus --- */
void mpmont_create(mpmont *mm, mp *m)
{
/* --- Take a copy of the modulus --- */
@@
-109,6
+135,8
@@
void mpmont_create(mpmont *mm, mp *m)
}
}
}
}
+#endif
+
/* --- @mpmont_destroy@ --- *
*
* Arguments: @mpmont *mm@ = pointer to a Montgomery reduction context
/* --- @mpmont_destroy@ --- *
*
* Arguments: @mpmont *mm@ = pointer to a Montgomery reduction context
@@
-135,6
+163,16
@@
void mpmont_destroy(mpmont *mm)
* Returns: Result, %$a R^{-1} \bmod m$%.
*/
* Returns: Result, %$a R^{-1} \bmod m$%.
*/
+#ifdef MPMONT_DISABLE
+
+mp *mpmont_reduce(mpmont *mm, mp *d, const mp *a)
+{
+ mp_div(0, &d, a, mm->m);
+ return (d);
+}
+
+#else
+
mp *mpmont_reduce(mpmont *mm, mp *d, const mp *a)
{
mpw *dv, *dvl;
mp *mpmont_reduce(mpmont *mm, mp *d, const mp *a)
{
mpw *dv, *dvl;
@@
-175,6
+213,8
@@
mp *mpmont_reduce(mpmont *mm, mp *d, const mp *a)
return (d);
}
return (d);
}
+#endif
+
/* --- @mpmont_mul@ --- *
*
* Arguments: @mpmont *mm@ = pointer to Montgomery reduction context
/* --- @mpmont_mul@ --- *
*
* Arguments: @mpmont *mm@ = pointer to Montgomery reduction context
@@
-184,6
+224,17
@@
mp *mpmont_reduce(mpmont *mm, mp *d, const mp *a)
* Returns: Result, %$a b R^{-1} \bmod m$%.
*/
* Returns: Result, %$a b R^{-1} \bmod m$%.
*/
+#ifdef MPMONT_DISABLE
+
+mp *mpmont_mul(mpmont *mm, mp *d, const mp *a, const mp *b)
+{
+ d = mp_mul(d, a, b);
+ mp_div(0, &d, d, mm->m);
+ return (d);
+}
+
+#else
+
mp *mpmont_mul(mpmont *mm, mp *d, const mp *a, const mp *b)
{
mpw *dv, *dvl;
mp *mpmont_mul(mpmont *mm, mp *d, const mp *a, const mp *b)
{
mpw *dv, *dvl;
@@
-240,6
+291,8
@@
mp *mpmont_mul(mpmont *mm, mp *d, const mp *a, const mp *b)
return (d);
}
return (d);
}
+#endif
+
/* --- @mpmont_expr@ --- *
*
* Arguments: @mpmont *mm@ = pointer to Montgomery reduction context
/* --- @mpmont_expr@ --- *
*
* Arguments: @mpmont *mm@ = pointer to Montgomery reduction context