/* -*-c-*-
*
- * $Id: mp.h,v 1.11 2001/04/03 19:36:05 mdw Exp $
+ * $Id: mp.h,v 1.12 2001/06/16 12:57:43 mdw Exp $
*
* Simple multiprecision arithmetic
*
/*----- Revision history --------------------------------------------------*
*
* $Log: mp.h,v $
+ * Revision 1.12 2001/06/16 12:57:43 mdw
+ * Move the @mpmont_factor@ structure and rename it now that it's used for
+ * Barrett simultaneous exponentiation too.
+ *
* Revision 1.11 2001/04/03 19:36:05 mdw
* Add some simple bitwise operations so that Perl can use them.
*
/*----- Data structures ---------------------------------------------------*/
+/* --- A multiprecision integer --- */
+
typedef struct mp {
- mpw *v, *vl;
- size_t sz;
- mparena *a;
- unsigned f;
- unsigned ref;
+ mpw *v, *vl; /* Vector of digits, current limit */
+ size_t sz; /* Size of digit buffer in words */
+ mparena *a; /* Arena for buffer allocation */
+ unsigned f; /* Flags (see below) */
+ unsigned ref; /* Reference counter */
} mp;
-#define MP_NEG 1u
-#define MP_BURN 2u
-#define MP_CONST 4u
-#define MP_UNDEF 8u
-#define MP_DESTROYED 16u
+#define MP_NEG 1u /* Negative (signed magnitude) */
+#define MP_BURN 2u /* Secret (viral flag) */
+#define MP_CONST 4u /* Uses strange memory allocation */
+#define MP_UNDEF 8u /* Contains nothing interesting */
+#define MP_DESTROYED 16u /* Has been destroyed */
+
+/* --- A factor for simultaneous exponentation --- *
+ *
+ * Used by the Montgomery and Barrett exponentiators.
+ */
+
+typedef struct mp_expfactor {
+ mp *base;
+ mp *exp;
+} mp_expfactor;
/*----- Useful constants --------------------------------------------------*/