Commit b7216e89eadeb5f24ec38a885a37343e51aefb3d

czurnieden 2019-01-13T00:51:02

workaround for the MoarVM problem with MP_GEN_RAND et al.

diff --git a/bn_mp_rand.c b/bn_mp_rand.c
index b66d1b0..c165946 100644
--- a/bn_mp_rand.c
+++ b/bn_mp_rand.c
@@ -179,6 +179,16 @@ static int s_gen_random(mp_digit *r)
    return ret;
 }
 
+/* 
+   Public for legacy reasons only, do not use elsewhere!
+   There is a good reason it is not officially documented!
+ */
+mp_digit gen_random_mp_digit(void) {
+   mp_digit p;
+   MP_UNUSED_VARIABLE s_gen_random(&p);
+   return p;
+}
+
 int mp_rand(mp_int *a, int digits)
 {
    int     res;
diff --git a/tommath.h b/tommath.h
index 555b4e3..1f71c20 100644
--- a/tommath.h
+++ b/tommath.h
@@ -600,6 +600,19 @@ int mp_fwrite(const mp_int *a, int radix, FILE *stream);
 #define mp_todecimal(M, S) mp_toradix((M), (S), 10)
 #define mp_tohex(M, S)     mp_toradix((M), (S), 16)
 
+#if ( (defined __GCC__) || (defined __clang__) )
+#   define MP_UNUSED_VARIABLE __attribute__((unused))
+#else
+#   define MP_UNUSED_VARIABLE (void) 
+#endif
+/* 
+   Public for legacy reasons only, do not use elsewhere!
+   There is a good reason it is not officially documented!
+ */
+mp_digit gen_random_mp_digit(void);
+#define MP_GEN_RANDOM_MAX MP_MASK
+#define MP_GEN_RANDOM()   gen_random_mp_digit(void)
+
 #ifdef __cplusplus
 }
 #endif