diff libtommath/bn_mp_sqrt.c @ 1655:f52919ffd3b1

update ltm to 1.1.0 and enable FIPS 186.4 compliant key-generation (#79) * make key-generation compliant to FIPS 186.4 * fix includes in tommath_class.h * update fuzzcorpus instead of error-out * fixup fuzzing make-targets * update Makefile.in * apply necessary patches to ltm sources * clean-up not required ltm files * update to vanilla ltm 1.1.0 this already only contains the required files * remove set/get double
author Steffen Jaeckel <s_jaeckel@gmx.de>
date Mon, 16 Sep 2019 15:50:38 +0200
parents 8bba51a55704
children 1051e4eea25a
line wrap: on
line diff
--- a/libtommath/bn_mp_sqrt.c	Wed May 15 21:59:45 2019 +0800
+++ b/libtommath/bn_mp_sqrt.c	Mon Sep 16 15:50:38 2019 +0200
@@ -1,4 +1,4 @@
-#include <tommath_private.h>
+#include "tommath_private.h"
 #ifdef BN_MP_SQRT_C
 /* LibTomMath, multiple-precision integer library -- Tom St Denis
  *
@@ -9,73 +9,72 @@
  * Michael Fromberger but has been written from scratch with
  * additional optimizations in place.
  *
- * The library is free for all purposes without any express
- * guarantee it works.
- *
- * Tom St Denis, [email protected], http://libtom.org
+ * SPDX-License-Identifier: Unlicense
  */
 
 /* this function is less generic than mp_n_root, simpler and faster */
-int mp_sqrt(mp_int *arg, mp_int *ret) 
+int mp_sqrt(const mp_int *arg, mp_int *ret)
 {
-  int res;
-  mp_int t1,t2;
+   int res;
+   mp_int t1, t2;
 
-  /* must be positive */
-  if (arg->sign == MP_NEG) {
-    return MP_VAL;
-  }
+   /* must be positive */
+   if (arg->sign == MP_NEG) {
+      return MP_VAL;
+   }
 
-  /* easy out */
-  if (mp_iszero(arg) == MP_YES) {
-    mp_zero(ret);
-    return MP_OKAY;
-  }
+   /* easy out */
+   if (mp_iszero(arg) == MP_YES) {
+      mp_zero(ret);
+      return MP_OKAY;
+   }
 
-  if ((res = mp_init_copy(&t1, arg)) != MP_OKAY) {
-    return res;
-  }
+   if ((res = mp_init_copy(&t1, arg)) != MP_OKAY) {
+      return res;
+   }
 
-  if ((res = mp_init(&t2)) != MP_OKAY) {
-    goto E2;
-  }
+   if ((res = mp_init(&t2)) != MP_OKAY) {
+      goto E2;
+   }
 
-  /* First approx. (not very bad for large arg) */
-  mp_rshd (&t1,t1.used/2);
+   /* First approx. (not very bad for large arg) */
+   mp_rshd(&t1, t1.used/2);
 
-  /* t1 > 0  */ 
-  if ((res = mp_div(arg,&t1,&t2,NULL)) != MP_OKAY) {
-    goto E1;
-  }
-  if ((res = mp_add(&t1,&t2,&t1)) != MP_OKAY) {
-    goto E1;
-  }
-  if ((res = mp_div_2(&t1,&t1)) != MP_OKAY) {
-    goto E1;
-  }
-  /* And now t1 > sqrt(arg) */
-  do { 
-    if ((res = mp_div(arg,&t1,&t2,NULL)) != MP_OKAY) {
+   /* t1 > 0  */
+   if ((res = mp_div(arg, &t1, &t2, NULL)) != MP_OKAY) {
+      goto E1;
+   }
+   if ((res = mp_add(&t1, &t2, &t1)) != MP_OKAY) {
+      goto E1;
+   }
+   if ((res = mp_div_2(&t1, &t1)) != MP_OKAY) {
       goto E1;
-    }
-    if ((res = mp_add(&t1,&t2,&t1)) != MP_OKAY) {
-      goto E1;
-    }
-    if ((res = mp_div_2(&t1,&t1)) != MP_OKAY) {
-      goto E1;
-    }
-    /* t1 >= sqrt(arg) >= t2 at this point */
-  } while (mp_cmp_mag(&t1,&t2) == MP_GT);
+   }
+   /* And now t1 > sqrt(arg) */
+   do {
+      if ((res = mp_div(arg, &t1, &t2, NULL)) != MP_OKAY) {
+         goto E1;
+      }
+      if ((res = mp_add(&t1, &t2, &t1)) != MP_OKAY) {
+         goto E1;
+      }
+      if ((res = mp_div_2(&t1, &t1)) != MP_OKAY) {
+         goto E1;
+      }
+      /* t1 >= sqrt(arg) >= t2 at this point */
+   } while (mp_cmp_mag(&t1, &t2) == MP_GT);
 
-  mp_exch(&t1,ret);
+   mp_exch(&t1, ret);
 
-E1: mp_clear(&t2);
-E2: mp_clear(&t1);
-  return res;
+E1:
+   mp_clear(&t2);
+E2:
+   mp_clear(&t1);
+   return res;
 }
 
 #endif
 
-/* ref:         $Format:%D$ */
-/* git commit:  $Format:%H$ */
-/* commit time: $Format:%ai$ */
+/* ref:         HEAD -> master, tag: v1.1.0 */
+/* git commit:  08549ad6bc8b0cede0b357a9c341c5c6473a9c55 */
+/* commit time: 2019-01-28 20:32:32 +0100 */