diff libtommath/bn_mp_import.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
line wrap: on
line diff
--- a/libtommath/bn_mp_import.c	Wed May 15 21:59:45 2019 +0800
+++ b/libtommath/bn_mp_import.c	Mon Sep 16 15:50:38 2019 +0200
@@ -1,4 +1,4 @@
-#include <tommath_private.h>
+#include "tommath_private.h"
 #ifdef BN_MP_IMPORT_C
 /* LibTomMath, multiple-precision integer library -- Tom St Denis
  *
@@ -9,65 +9,60 @@
  * 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
  */
 
 /* based on gmp's mpz_import.
  * see http://gmplib.org/manual/Integer-Import-and-Export.html
  */
-int mp_import(mp_int* rop, size_t count, int order, size_t size, 
-                            int endian, size_t nails, const void* op) {
-	int result;
-	size_t odd_nails, nail_bytes, i, j;
-	unsigned char odd_nail_mask;
+int mp_import(mp_int *rop, size_t count, int order, size_t size,
+              int endian, size_t nails, const void *op)
+{
+   int result;
+   size_t odd_nails, nail_bytes, i, j;
+   unsigned char odd_nail_mask;
 
-	mp_zero(rop);
+   mp_zero(rop);
 
-	if (endian == 0) {
-		union {
-			unsigned int i;
-			char c[4];
-		} lint;
-		lint.i = 0x01020304;
-
-		endian = (lint.c[0] == 4) ? -1 : 1;
-	}
+   if (endian == 0) {
+      union {
+         unsigned int i;
+         char c[4];
+      } lint;
+      lint.i = 0x01020304;
+
+      endian = (lint.c[0] == '\x04') ? -1 : 1;
+   }
 
-	odd_nails = (nails % 8);
-	odd_nail_mask = 0xff;
-	for (i = 0; i < odd_nails; ++i) {
-		odd_nail_mask ^= (1 << (7 - i));
-	}
-	nail_bytes = nails / 8;
+   odd_nails = (nails % 8u);
+   odd_nail_mask = 0xff;
+   for (i = 0; i < odd_nails; ++i) {
+      odd_nail_mask ^= (unsigned char)(1u << (7u - i));
+   }
+   nail_bytes = nails / 8u;
+
+   for (i = 0; i < count; ++i) {
+      for (j = 0; j < (size - nail_bytes); ++j) {
+         unsigned char byte = *((unsigned char *)op +
+                                (((order == 1) ? i : ((count - 1u) - i)) * size) +
+                                ((endian == 1) ? (j + nail_bytes) : (((size - 1u) - j) - nail_bytes)));
 
-	for (i = 0; i < count; ++i) {
-		for (j = 0; j < (size - nail_bytes); ++j) {
-			unsigned char byte = *(
-					(unsigned char*)op + 
-					(((order == 1) ? i : ((count - 1) - i)) * size) +
-					((endian == 1) ? (j + nail_bytes) : (((size - 1) - j) - nail_bytes))
-				);
+         if ((result = mp_mul_2d(rop, (j == 0u) ? (int)(8u - odd_nails) : 8, rop)) != MP_OKAY) {
+            return result;
+         }
 
-			if (
-				(result = mp_mul_2d(rop, ((j == 0) ? (8 - odd_nails) : 8), rop)) != MP_OKAY) {
-				return result;
-			}
+         rop->dp[0] |= (j == 0u) ? (mp_digit)(byte & odd_nail_mask) : (mp_digit)byte;
+         rop->used  += 1;
+      }
+   }
 
-			rop->dp[0] |= (j == 0) ? (byte & odd_nail_mask) : byte;
-			rop->used  += 1;
-		}
-	}
+   mp_clamp(rop);
 
-	mp_clamp(rop);
-
-	return MP_OKAY;
+   return MP_OKAY;
 }
 
 #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 */