Commit 6c39b07bc24a9ccc6e30a86c990c4ae70db09ab3

Steffen Jaeckel 2019-06-06T11:44:02

split up again into separate files

diff --git a/bn_conversion.c b/bn_conversion.c
deleted file mode 100644
index 19e5532..0000000
--- a/bn_conversion.c
+++ /dev/null
@@ -1,103 +0,0 @@
-#include "tommath_private.h"
-
-#ifdef BN_CONVERSION_C
-/* LibTomMath, multiple-precision integer library -- Tom St Denis */
-/* SPDX-License-Identifier: Unlicense */
-
-#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_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_INIT_INT(name , set, type)                     \
-    mp_err name(mp_int * a, type b)                      \
-    {                                                    \
-        mp_err err;                                      \
-        if ((err = mp_init(a)) != MP_OKAY) {             \
-            return err;                                  \
-        }                                                \
-        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_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;\
-    }
-
-#ifdef BN_MP_SET_U32_C
-MP_SET_UNSIGNED(mp_set_u32, 32)
-#endif
-
-#ifdef BN_MP_SET_U64_C
-MP_SET_UNSIGNED(mp_set_u64, 64)
-#endif
-
-#ifdef BN_MP_SET_I32_C
-MP_SET_SIGNED(mp_set_i32, mp_set_u32, 32)
-#endif
-
-#ifdef BN_MP_SET_I64_C
-MP_SET_SIGNED(mp_set_i64, mp_set_u64, 64)
-#endif
-
-#if defined(BN_MP_GET_I32_C) || defined(BN_MP_GET_U32_C)
-MP_GET_SIGNED(mp_get_i32, mp_get_mag32, 32)
-#endif
-
-#if defined(BN_MP_GET_I64_C) || defined(BN_MP_GET_U64_C)
-MP_GET_SIGNED(mp_get_i64, mp_get_mag64, 64)
-#endif
-
-#ifdef BN_MP_GET_MAG32_C
-MP_GET_MAG(mp_get_mag32, 32)
-#endif
-
-#ifdef BN_MP_GET_MAG64_C
-MP_GET_MAG(mp_get_mag64, 64)
-#endif
-
-#ifdef BN_MP_INIT_U32_C
-MP_INIT_INT(mp_init_u32, mp_set_u32, uint32_t)
-#endif
-
-#ifdef BN_MP_INIT_I32_C
-MP_INIT_INT(mp_init_i32, mp_set_i32, int32_t)
-#endif
-
-#ifdef BN_MP_INIT_U64_C
-MP_INIT_INT(mp_init_u64, mp_set_u64, uint64_t)
-#endif
-
-#ifdef BN_MP_INIT_I64_C
-MP_INIT_INT(mp_init_i64, mp_set_i64, int64_t)
-#endif
-
-#endif
diff --git a/bn_mp_get_i32.c b/bn_mp_get_i32.c
new file mode 100644
index 0000000..4dbfb32
--- /dev/null
+++ b/bn_mp_get_i32.c
@@ -0,0 +1,7 @@
+#include "tommath_private.h"
+#ifdef BN_MP_GET_I32_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+MP_GET_SIGNED(mp_get_i32, mp_get_mag32, 32)
+#endif
diff --git a/bn_mp_get_i64.c b/bn_mp_get_i64.c
new file mode 100644
index 0000000..c4c7362
--- /dev/null
+++ b/bn_mp_get_i64.c
@@ -0,0 +1,7 @@
+#include "tommath_private.h"
+#ifdef BN_MP_GET_I64_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+MP_GET_SIGNED(mp_get_i64, mp_get_mag64, 64)
+#endif
diff --git a/bn_mp_get_mag32.c b/bn_mp_get_mag32.c
new file mode 100644
index 0000000..6877d01
--- /dev/null
+++ b/bn_mp_get_mag32.c
@@ -0,0 +1,7 @@
+#include "tommath_private.h"
+#ifdef BN_MP_GET_MAG32_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+MP_GET_MAG(mp_get_mag32, 32)
+#endif
diff --git a/bn_mp_get_mag64.c b/bn_mp_get_mag64.c
new file mode 100644
index 0000000..0e05c7f
--- /dev/null
+++ b/bn_mp_get_mag64.c
@@ -0,0 +1,7 @@
+#include "tommath_private.h"
+#ifdef BN_MP_GET_MAG64_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+MP_GET_MAG(mp_get_mag64, 64)
+#endif
diff --git a/bn_mp_init_i32.c b/bn_mp_init_i32.c
new file mode 100644
index 0000000..bc4de8d
--- /dev/null
+++ b/bn_mp_init_i32.c
@@ -0,0 +1,7 @@
+#include "tommath_private.h"
+#ifdef BN_MP_INIT_I32_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+MP_INIT_INT(mp_init_i32, mp_set_i32, int32_t)
+#endif
diff --git a/bn_mp_init_i64.c b/bn_mp_init_i64.c
new file mode 100644
index 0000000..112a6d9
--- /dev/null
+++ b/bn_mp_init_i64.c
@@ -0,0 +1,7 @@
+#include "tommath_private.h"
+#ifdef BN_MP_INIT_I64_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+MP_INIT_INT(mp_init_u64, mp_set_u64, uint64_t)
+#endif
diff --git a/bn_mp_init_u32.c b/bn_mp_init_u32.c
new file mode 100644
index 0000000..015d89b
--- /dev/null
+++ b/bn_mp_init_u32.c
@@ -0,0 +1,7 @@
+#include "tommath_private.h"
+#ifdef BN_MP_INIT_U32_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+MP_INIT_INT(mp_init_u32, mp_set_u32, uint32_t)
+#endif
diff --git a/bn_mp_init_u64.c b/bn_mp_init_u64.c
new file mode 100644
index 0000000..2b35f7e
--- /dev/null
+++ b/bn_mp_init_u64.c
@@ -0,0 +1,7 @@
+#include "tommath_private.h"
+#ifdef BN_MP_INIT_U64_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+MP_INIT_INT(mp_init_u64, mp_set_u64, uint64_t)
+#endif
diff --git a/bn_mp_set_i32.c b/bn_mp_set_i32.c
new file mode 100644
index 0000000..a181156
--- /dev/null
+++ b/bn_mp_set_i32.c
@@ -0,0 +1,7 @@
+#include "tommath_private.h"
+#ifdef BN_MP_SET_I32_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+MP_SET_SIGNED(mp_set_i32, mp_set_u32, 32)
+#endif
diff --git a/bn_mp_set_i64.c b/bn_mp_set_i64.c
new file mode 100644
index 0000000..0b0fadc
--- /dev/null
+++ b/bn_mp_set_i64.c
@@ -0,0 +1,7 @@
+#include "tommath_private.h"
+#ifdef BN_MP_SET_I64_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+MP_SET_SIGNED(mp_set_i64, mp_set_u64, 64)
+#endif
diff --git a/bn_mp_set_u32.c b/bn_mp_set_u32.c
new file mode 100644
index 0000000..8edbd2e
--- /dev/null
+++ b/bn_mp_set_u32.c
@@ -0,0 +1,7 @@
+#include "tommath_private.h"
+#ifdef BN_MP_SET_U32_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+MP_SET_UNSIGNED(mp_set_u32, 32)
+#endif
diff --git a/bn_mp_set_u64.c b/bn_mp_set_u64.c
new file mode 100644
index 0000000..f5beb76
--- /dev/null
+++ b/bn_mp_set_u64.c
@@ -0,0 +1,7 @@
+#include "tommath_private.h"
+#ifdef BN_MP_SET_U64_C
+/* LibTomMath, multiple-precision integer library -- Tom St Denis */
+/* SPDX-License-Identifier: Unlicense */
+
+MP_SET_UNSIGNED(mp_set_u64, 64)
+#endif
diff --git a/tommath_private.h b/tommath_private.h
index afe01de..6495ce1 100644
--- a/tommath_private.h
+++ b/tommath_private.h
@@ -231,4 +231,53 @@ MP_DEPRECATED(s_mp_toom_mul) mp_err mp_toom_mul(const mp_int *a, const mp_int *b
 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_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_INIT_INT(name , set, type)                     \
+    mp_err name(mp_int * a, type b)                      \
+    {                                                    \
+        mp_err err;                                      \
+        if ((err = mp_init(a)) != MP_OKAY) {             \
+            return err;                                  \
+        }                                                \
+        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_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;\
+    }
+
 #endif