[svn] gcry - r1123 - trunk/mpi

svn author mo cvs at cvs.gnupg.org
Sun Oct 9 14:29:17 CEST 2005


Author: mo
Date: 2005-10-09 14:29:17 +0200 (Sun, 09 Oct 2005)
New Revision: 1123

Modified:
   trunk/mpi/ChangeLog
   trunk/mpi/mpi-bit.c
   trunk/mpi/mpi-cmp.c
Log:
mpi/ChangeLog:

2005-10-09  Moritz Schulte  <moritz at g10code.com>

	* mpi-cmp.c (gcry_mpi_cmp_ui): Rewritten; correctly handle case of
	zero limbs in U.



Modified: trunk/mpi/ChangeLog
===================================================================
--- trunk/mpi/ChangeLog	2005-10-08 17:15:52 UTC (rev 1122)
+++ trunk/mpi/ChangeLog	2005-10-09 12:29:17 UTC (rev 1123)
@@ -1,3 +1,8 @@
+2005-10-09  Moritz Schulte  <moritz at g10code.com>
+
+	* mpi-cmp.c (gcry_mpi_cmp_ui): Rewritten; correctly handle case of
+	zero limbs in U.
+
 2005-04-27  Moritz Schulte  <moritz at g10code.com>
 
 	* mpiutil.c (gcry_mpi_randomize): Store random data in secure

Modified: trunk/mpi/mpi-bit.c
===================================================================
--- trunk/mpi/mpi-bit.c	2005-10-08 17:15:52 UTC (rev 1122)
+++ trunk/mpi/mpi-bit.c	2005-10-09 12:29:17 UTC (rev 1123)
@@ -163,7 +163,8 @@
     bitno  = n % BITS_PER_MPI_LIMB;
 
     if( limbno >= a->nlimbs )
-	return; /* not allocated, so need to clear bits :-) */
+	return; /* not allocated, therefore no need to clear bits
+		   :-) */
 
     for( ; bitno < BITS_PER_MPI_LIMB; bitno++ )
 	a->d[limbno] &= ~(A_LIMB_1 << bitno);

Modified: trunk/mpi/mpi-cmp.c
===================================================================
--- trunk/mpi/mpi-cmp.c	2005-10-08 17:15:52 UTC (rev 1122)
+++ trunk/mpi/mpi-cmp.c	2005-10-09 12:29:17 UTC (rev 1123)
@@ -1,5 +1,5 @@
 /* mpi-cmp.c  -  MPI functions
- * Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
+ * Copyright (C) 1998, 1999, 2001, 2002, 2005 Free Software Foundation, Inc.
  *
  * This file is part of Libgcrypt.
  *
@@ -24,51 +24,67 @@
 #include "mpi-internal.h"
 
 int
-gcry_mpi_cmp_ui( gcry_mpi_t u, unsigned long v )
+gcry_mpi_cmp_ui (gcry_mpi_t u, unsigned long v)
 {
-    mpi_limb_t limb = v;
+  mpi_limb_t limb = v;
 
-    _gcry_mpi_normalize( u );
-    if( !u->nlimbs && !limb )
-	return 0;
-    if( u->sign )
-	return -1;
-    if( u->nlimbs > 1 )
-	return 1;
+  _gcry_mpi_normalize (u);
 
-    if( u->d[0] == limb )
-	return 0;
-    else if( u->d[0] > limb )
+  /* Handle the case that U contains no limb.  */
+  if (u->nlimbs == 0)
+    return -(limb != 0);
+
+  /* Handle the case that U is negative.  */
+  if (u->sign)
+    return -1;
+
+  if (u->nlimbs == 1)
+    {
+      /* Handle the case that U contains exactly one limb.  */
+
+      if (u->d[0] > limb)
 	return 1;
-    else
+      if (u->d[0] < limb)
 	return -1;
+      return 0;
+    }
+  else
+    /* Handle the case that U contains more than one limb.  */
+    return 1;
 }
 
 int
-gcry_mpi_cmp( gcry_mpi_t u, gcry_mpi_t v )
+gcry_mpi_cmp (gcry_mpi_t u, gcry_mpi_t v)
 {
-    mpi_size_t usize, vsize;
-    int cmp;
+  mpi_size_t usize;
+  mpi_size_t vsize;
+  int cmp;
 
-    _gcry_mpi_normalize( u );
-    _gcry_mpi_normalize( v );
-    usize = u->nlimbs;
-    vsize = v->nlimbs;
-    if( !u->sign && v->sign )
-	return 1;
-    if( u->sign && !v->sign )
-	return -1;
-    if( usize != vsize && !u->sign && !v->sign )
-	return usize - vsize;
-    if( usize != vsize && u->sign && v->sign )
-	return vsize + usize;
-    if( !usize )
-	return 0;
-    if( !(cmp = _gcry_mpih_cmp( u->d, v->d, usize )) )
-	return 0;
-    if( (cmp < 0?1:0) == (u->sign?1:0))
-	return 1;
+  _gcry_mpi_normalize (u);
+  _gcry_mpi_normalize (v);
+
+  usize = u->nlimbs;
+  vsize = v->nlimbs;
+
+  /* Compare sign bits.  */
+
+  if (!u->sign && v->sign)
+    return 1;
+  if (u->sign && !v->sign)
     return -1;
-}
 
+  /* U and V are either both positive or both negative.  */
 
+  if( usize != vsize && !u->sign && !v->sign )
+    return usize - vsize;
+  if( usize != vsize && u->sign && v->sign )
+    return vsize + usize;
+  if( !usize )
+    return 0;
+  if( !(cmp = _gcry_mpih_cmp( u->d, v->d, usize )) )
+    return 0;
+  if( (cmp < 0?1:0) == (u->sign?1:0))
+    return 1;
+
+  return -1;
+}




More information about the Gnupg-commits mailing list