Commit c1131186c050ee145acc115e08be09b3f16d71ac

Steffen Jaeckel 2019-04-05T10:49:28

Merge pull request #199 from libtom/remove-set-long-specialization remove mp_set_long specialization

diff --git a/bn_mp_set_long.c b/bn_mp_set_long.c
index 223c0e3..0cfd8e0 100644
--- a/bn_mp_set_long.c
+++ b/bn_mp_set_long.c
@@ -12,25 +12,7 @@
  * SPDX-License-Identifier: Unlicense
  */
 
-/* set a platform dependent unsigned long int */
-#if (ULONG_MAX != 0xFFFFFFFFUL) || (DIGIT_BIT < 32)
 MP_SET_XLONG(mp_set_long, unsigned long)
-#else
-int mp_set_long(mp_int *a, unsigned long b)
-{
-   int x = 0;
-   int res = mp_grow(a, (CHAR_BIT * sizeof(unsigned long) + DIGIT_BIT - 1) / DIGIT_BIT);
-   if (res == MP_OKAY) {
-      mp_zero(a);
-      if (b) {
-         a->dp[x++] = (mp_digit)b;
-      }
-      a->used = x;
-   }
-   return res;
-}
-
-#endif
 #endif
 
 /* ref:         $Format:%D$ */
diff --git a/tommath_private.h b/tommath_private.h
index 26ce161..15c2338 100644
--- a/tommath_private.h
+++ b/tommath_private.h
@@ -85,7 +85,8 @@ int func_name (mp_int * a, type b)                       \
      mp_zero(a);                                         \
      while (b != 0u) {                                   \
         a->dp[x++] = ((mp_digit)b & MP_MASK);            \
-        b >>= DIGIT_BIT;                                 \
+        if ((CHAR_BIT * sizeof (b)) <= DIGIT_BIT) { break; } \
+        b >>= ((CHAR_BIT * sizeof (b)) <= DIGIT_BIT ? 0 : DIGIT_BIT); \
      }                                                   \
      a->used = x;                                        \
    }                                                     \