Use auto-version machinery for building.
[u/mdw/catacomb] / dh-limlee.c
index 422cf96..26666a3 100644 (file)
@@ -1,13 +1,13 @@
 /* -*-c-*-
  *
- * $Id: dh-limlee.c,v 1.1 2000/07/29 10:01:31 mdw Exp $
+ * $Id: dh-limlee.c,v 1.3 2004/04/08 01:36:15 mdw Exp $
  *
  * Generate Diffie-Hellman parameters from Lim-Lee primes
  *
  * (c) 2000 Straylight/Edgeware
  */
 
-/*----- Licensing notice --------------------------------------------------* 
+/*----- Licensing notice --------------------------------------------------*
  *
  * This file is part of Catacomb.
  *
  * 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: dh-limlee.c,v $
- * Revision 1.1  2000/07/29 10:01:31  mdw
- * Diffie-Hellman parameter generation based on Lim-Lee primes.
- *
- */
-
 /*----- Header files ------------------------------------------------------*/
 
 #include "dh.h"
  *             @unsigned flags@ = other generation flags
  *             @unsigned steps@ = number of steps to go
  *             @grand *r@ = random number source
- *              @pgen_proc *oev@ = outer event handler function
- *              @void *oec@ = argument for the outer event handler
- *              @pgen_proc *iev@ = inner event handler function
- *              @void *iec@ = argument for the inner event handler
- *              @size_t *nf@, @mp ***f@ = output array for factors
+ *             @pgen_proc *oev@ = outer event handler function
+ *             @void *oec@ = argument for the outer event handler
+ *             @pgen_proc *iev@ = inner event handler function
+ *             @void *iec@ = argument for the inner event handler
+ *             @size_t *nf@, @mp ***f@ = output array for factors
  *
  * Returns:    @PGEN_DONE@ if it worked, @PGEN_ABORT@ if it didn't.
  *
@@ -89,19 +81,20 @@ int dh_limlee(dh_param *dp, unsigned ql, unsigned pl,
 
   if ((dp->p = limlee("p", MP_NEW, MP_NEW, ql, pl,
                      r, steps, oev, oec, iev, iec, &nff, &ff)) == 0)
-    return (PGEN_FAIL);
-  dp->q = mp_copy(ff[0]);
+    return (PGEN_ABORT);
 
   /* --- Now find a primitive element --- */
 
   mpmont_create(&pc.mm, dp->p);
   pp = mp_sub(MP_NEW, dp->p, MP_ONE);
   if (flags & DH_SUBGROUP) {
+    dp->q = mp_copy(ff[0]);
     pc.exp = MP_NEW;
     mp_div(&pc.exp, 0, pp, dp->q);
     pc.n = 0;
     pc.f = 0;
   } else {
+    dp->q = mp_lsr(MP_NEW, dp->p, 1);
     pc.exp = MP_TWO;
     pc.n = nff;
     pc.f = xmalloc(nff * sizeof(mp *));
@@ -139,7 +132,7 @@ int dh_limlee(dh_param *dp, unsigned ql, unsigned pl,
   if (!dp->g) {
     mp_drop(dp->p);
     mp_drop(dp->q);
-    return (PGEN_FAIL);
+    return (PGEN_ABORT);
   }
   return (PGEN_DONE);
 }