chiark / gitweb /
Import release 0.1.15
[secnet.git] / dh.c
diff --git a/dh.c b/dh.c
index eb9ae21c7b75a7989bf77a13f1fe1d44ed51b199..2ee93fb327399160e4be9272fb5fcdf6fa839389 100644 (file)
--- a/dh.c
+++ b/dh.c
@@ -1,36 +1,3 @@
-/***************************************************************************
- *
- *              Part II Project, "A secure, private IP network"
- *              Stephen Early <sde1000@cam.ac.uk>
- *   
- *
- *     $RCSfile: dh.c,v $
- *
- *  Description: Diffie-Hellman implementation
- *
- *    Copyright: (C) Stephen Early 1995
- *
- *    $Revision: 1.3 $
- *
- *        $Date: 1996/05/16 18:38:54 $
- *
- *       $State: Exp $
- *
- ***************************************************************************/
-
-/*
- * $Log: dh.c,v $
- * Revision 1.3  1996/05/16 18:38:54  sde1000
- * Removed unused hexdigits variable.
- *
- * Revision 1.2  1996/04/14 16:33:52  sde1000
- * Moved mpbin/mpstring functions into util.c
- *
- * Revision 1.1  1996/04/14 16:21:47  sde1000
- * Initial revision
- *
- */
-
 #include <stdio.h>
 #include <gmp.h>
 
@@ -64,8 +31,9 @@ static string_t dh_makepublic(void *sst, uint8_t *secret, uint32_t secretlen)
     return r;
 }
 
+static dh_makeshared_fn dh_makeshared;
 static void dh_makeshared(void *sst, uint8_t *secret, uint32_t secretlen,
-                         string_t rempublic, uint8_t *sharedsecret,
+                         cstring_t rempublic, uint8_t *sharedsecret,
                          uint32_t buflen)
 {
     struct dh *st=sst;
@@ -135,9 +103,15 @@ static list_t *dh_apply(closure_t *self, struct cloc loc, dict_t *context,
        cfgfatal(loc,"diffie-hellman","you must provide a generator\n");
     }
 
-    /* Test that the modulus is really prime */
-    if (mpz_probab_prime_p(&st->p,5)==0) {
-       cfgfatal(loc,"diffie-hellman","modulus must be a prime\n");
+    i=list_elem(args,2);
+    if (i && i->type==t_bool && i->data.bool==False) {
+       Message(M_INFO,"diffie-hellman (%s:%d): skipping modulus "
+               "primality check\n",loc.file,loc.line);
+    } else {
+       /* Test that the modulus is really prime */
+       if (mpz_probab_prime_p(&st->p,5)==0) {
+           cfgfatal(loc,"diffie-hellman","modulus must be a prime\n");
+       }
     }
     st->ops.len=mpz_sizeinbase(&st->p,2)/8;