change macros to contain types
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
diff --git a/bn_mp_get_i32.c b/bn_mp_get_i32.c
index 4dbfb32..4227a70 100644
--- a/bn_mp_get_i32.c
+++ b/bn_mp_get_i32.c
@@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
-MP_GET_SIGNED(mp_get_i32, mp_get_mag32, 32)
+MP_GET_SIGNED(int32_t, mp_get_i32, mp_get_mag32)
#endif
diff --git a/bn_mp_get_i64.c b/bn_mp_get_i64.c
index c4c7362..cdc2fee 100644
--- a/bn_mp_get_i64.c
+++ b/bn_mp_get_i64.c
@@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
-MP_GET_SIGNED(mp_get_i64, mp_get_mag64, 64)
+MP_GET_SIGNED(int64_t, mp_get_i64, mp_get_mag64)
#endif
diff --git a/bn_mp_get_mag32.c b/bn_mp_get_mag32.c
index 6877d01..46e8b29 100644
--- a/bn_mp_get_mag32.c
+++ b/bn_mp_get_mag32.c
@@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
-MP_GET_MAG(mp_get_mag32, 32)
+MP_GET_MAG(uint32_t, mp_get_mag32)
#endif
diff --git a/bn_mp_get_mag64.c b/bn_mp_get_mag64.c
index 0e05c7f..6ff5e5d 100644
--- a/bn_mp_get_mag64.c
+++ b/bn_mp_get_mag64.c
@@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
-MP_GET_MAG(mp_get_mag64, 64)
+MP_GET_MAG(uint64_t, mp_get_mag64)
#endif
diff --git a/bn_mp_init_i64.c b/bn_mp_init_i64.c
index 112a6d9..2fa1516 100644
--- a/bn_mp_init_i64.c
+++ b/bn_mp_init_i64.c
@@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
-MP_INIT_INT(mp_init_u64, mp_set_u64, uint64_t)
+MP_INIT_INT(mp_init_i64, mp_set_i64, int64_t)
#endif
diff --git a/bn_mp_set_i32.c b/bn_mp_set_i32.c
index a181156..abf1f94 100644
--- a/bn_mp_set_i32.c
+++ b/bn_mp_set_i32.c
@@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
-MP_SET_SIGNED(mp_set_i32, mp_set_u32, 32)
+MP_SET_SIGNED(mp_set_i32, mp_set_u32, int32_t)
#endif
diff --git a/bn_mp_set_i64.c b/bn_mp_set_i64.c
index 0b0fadc..6772dfe 100644
--- a/bn_mp_set_i64.c
+++ b/bn_mp_set_i64.c
@@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
-MP_SET_SIGNED(mp_set_i64, mp_set_u64, 64)
+MP_SET_SIGNED(mp_set_i64, mp_set_u64, int64_t)
#endif
diff --git a/bn_mp_set_u32.c b/bn_mp_set_u32.c
index 8edbd2e..18ba5e1 100644
--- a/bn_mp_set_u32.c
+++ b/bn_mp_set_u32.c
@@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
-MP_SET_UNSIGNED(mp_set_u32, 32)
+MP_SET_UNSIGNED(mp_set_u32, uint32_t)
#endif
diff --git a/bn_mp_set_u64.c b/bn_mp_set_u64.c
index f5beb76..88fab6c 100644
--- a/bn_mp_set_u64.c
+++ b/bn_mp_set_u64.c
@@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
-MP_SET_UNSIGNED(mp_set_u64, 64)
+MP_SET_UNSIGNED(mp_set_u64, uint64_t)
#endif
diff --git a/tommath_private.h b/tommath_private.h
index 6495ce1..b08fbd7 100644
--- a/tommath_private.h
+++ b/tommath_private.h
@@ -232,26 +232,28 @@ MP_DEPRECATED(s_mp_toom_sqr) mp_err mp_toom_sqr(const mp_int *a, mp_int *b);
MP_DEPRECATED(s_mp_reverse) void bn_reverse(unsigned char *s, int len);
/* code-generating macros */
-#define MP_SET_UNSIGNED(name, w) \
- void name(mp_int * a, uint##w##_t b) \
- { \
- int i = 0; \
- while (b != 0u) { \
- a->dp[i++] = ((mp_digit)b & MP_MASK); \
- if (w <= MP_DIGIT_BIT) { break; } \
- b >>= ((w <= MP_DIGIT_BIT) ? 0 : MP_DIGIT_BIT); \
- } \
- a->used = i; \
- a->sign = MP_ZPOS; \
- MP_ZERO_DIGITS(a->dp + a->used, a->alloc - a->used); \
+#define MP_SET_UNSIGNED(name, type) \
+ void name(mp_int * a, type b) \
+ { \
+ int i = 0; \
+ while (b != 0u) { \
+ a->dp[i++] = ((mp_digit)b & MP_MASK); \
+ if ((sizeof(type) * CHAR_BIT) <= MP_DIGIT_BIT) { break; } \
+ b >>= (((sizeof(type) * CHAR_BIT) <= MP_DIGIT_BIT) ? 0 : MP_DIGIT_BIT); \
+ } \
+ a->used = i; \
+ a->sign = MP_ZPOS; \
+ MP_ZERO_DIGITS(a->dp + a->used, a->alloc - a->used); \
}
-#define MP_SET_SIGNED(name, uname, w) \
- void name(mp_int * a, int##w##_t b) \
- { \
- uname(a, (b < 0) ? -(uint##w##_t)b : (uint##w##_t)b); \
- if (b < 0) { a->sign = MP_NEG; } \
+
+#define MP_SET_SIGNED(name, uname, type) \
+ void name(mp_int * a, type b) \
+ { \
+ uname(a, (b < 0) ? -(u##type)b : (u##type)b); \
+ if (b < 0) { a->sign = MP_NEG; } \
}
-#define MP_INIT_INT(name , set, type) \
+
+#define MP_INIT_INT(name , set, type) \
mp_err name(mp_int * a, type b) \
{ \
mp_err err; \
@@ -261,23 +263,25 @@ MP_DEPRECATED(s_mp_reverse) void bn_reverse(unsigned char *s, int len);
set(a, b); \
return MP_OKAY; \
}
-#define MP_GET_MAG(name, w) \
- uint##w##_t name(const mp_int* a) \
- { \
- unsigned i = MP_MIN((unsigned)a->used, (unsigned)((w + MP_DIGIT_BIT - 1) / MP_DIGIT_BIT)); \
- uint##w##_t res = 0u; \
- while (i --> 0u) { \
- res <<= ((w <= MP_DIGIT_BIT) ? 0 : MP_DIGIT_BIT); \
- res |= (uint##w##_t)a->dp[i]; \
- if (w <= MP_DIGIT_BIT) { break; } \
- } \
- return res; \
+
+#define MP_GET_MAG(type, name) \
+ type name(const mp_int* a) \
+ { \
+ unsigned i = MP_MIN((unsigned)a->used, (unsigned)(((sizeof(type) * CHAR_BIT) + MP_DIGIT_BIT - 1) / MP_DIGIT_BIT)); \
+ type res = 0u; \
+ while (i --> 0u) { \
+ res <<= (((sizeof(type) * CHAR_BIT) <= MP_DIGIT_BIT) ? 0 : MP_DIGIT_BIT); \
+ res |= (type)a->dp[i]; \
+ if ((sizeof(type) * CHAR_BIT) <= MP_DIGIT_BIT) { break; } \
+ } \
+ return res; \
}
-#define MP_GET_SIGNED(name, mag, w) \
- int##w##_t name(const mp_int* a) \
- { \
- uint64_t res = mag(a); \
- return (a->sign == MP_NEG) ? (int##w##_t)-res : (int##w##_t)res;\
+
+#define MP_GET_SIGNED(type, name, mag) \
+ type name(const mp_int* a) \
+ { \
+ uint64_t res = mag(a); \
+ return (a->sign == MP_NEG) ? (type)-res : (type)res; \
}
#endif