remove mp_set_long specialization
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
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; \
} \