aboutsummaryrefslogtreecommitdiff
path: root/src/Specific/Framework
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2017-11-02 03:33:36 -0400
committerGravatar Jason Gross <jgross@mit.edu>2017-11-02 03:33:36 -0400
commit609c3d5d0cf3805f740a6099c907850c6e97975d (patch)
treee89bc66805429e06976a2e668fb3c7f18426d85a /src/Specific/Framework
parenta4e1532cc3f107331099acd6bf3023e7459b01ee (diff)
Update gmp{var,sec} to allow passing q, a24 via -D
Diffstat (limited to 'src/Specific/Framework')
-rw-r--r--src/Specific/Framework/bench/gmpsec.c24
-rw-r--r--src/Specific/Framework/bench/gmpvar.c24
2 files changed, 32 insertions, 16 deletions
diff --git a/src/Specific/Framework/bench/gmpsec.c b/src/Specific/Framework/bench/gmpsec.c
index aa949952a..b31676900 100644
--- a/src/Specific/Framework/bench/gmpsec.c
+++ b/src/Specific/Framework/bench/gmpsec.c
@@ -4,8 +4,16 @@
#include <gmp.h>
// modulus, encoded as big-endian bytes
-static const unsigned char modulus[] = {0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xed};
-static const unsigned char a_minus_two_over_four[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xdb,0x41};
+#ifndef modulus_array
+#define modulus_array {0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xed}
+#endif
+
+#ifndef a_minus_two_over_four_array
+#define a_minus_two_over_four_array {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xdb,0x41}
+#endif
+
+static const unsigned char modulus[] = modulus_array;
+static const unsigned char a_minus_two_over_four[] = a_minus_two_over_four_array;
#define modulus_bytes (sizeof(modulus))
#define modulus_limbs ((8*sizeof(modulus) + GMP_LIMB_BITS-1)/GMP_LIMB_BITS)
@@ -41,27 +49,27 @@ static void crypto_scalarmult(uint8_t *out, const uint8_t *secret, size_t secret
// allocate scratch space for use by the field operation macros.
mp_limb_t _product_tmp[modulus_limbs+modulus_limbs];
-
+
#define fe_mul(out, x, y) do { \
mpn_sec_mul(_product_tmp, x, modulus_limbs, y, modulus_limbs, scratch); \
mpn_sec_div_r(_product_tmp, modulus_limbs+modulus_limbs, m, modulus_limbs, scratch); \
for (size_t i = 0; i<modulus_limbs; i++) { out[i] = _product_tmp[i]; } \
} while (0)
-
+
#define fe_sqr(out, x) do { \
mpn_sec_sqr(_product_tmp, x, modulus_limbs, scratch); \
mpn_sec_div_r(_product_tmp, modulus_limbs+modulus_limbs, m, modulus_limbs, scratch); \
for (size_t i = 0; i<modulus_limbs; i++) { out[i] = _product_tmp[i]; } \
} while (0)
-
+
#define fe_add(out, x, y) do { \
mpn_cnd_sub_n(mpn_add_n(out, x, y, modulus_limbs), out, out, m, modulus_limbs); \
} while (0)
-
+
#define fe_sub(out, x, y) do { \
mpn_cnd_add_n(mpn_sub_n(out, x, y, modulus_limbs), out, out, m, modulus_limbs); \
} while (0)
-
+
#define fe_inv(out, x) do { \
for (size_t i = 0; i<modulus_limbs; i++) { _product_tmp[i] = x[i]; } \
mp_size_t invertible = mpn_sec_invert(out, _product_tmp, m, modulus_limbs, 2*modulus_limbs*GMP_NUMB_BITS, scratch); \
@@ -90,7 +98,7 @@ static void crypto_scalarmult(uint8_t *out, const uint8_t *secret, size_t secret
mp_limb_t bit = (secret[i/8] >> (i%8))&1;
// printf("%01d ", bit);
// { mp_limb_t pr[modulus_limbs]; fe_inv(pr, nqz); fe_mul(pr, pr, nqx); fe_print(pr); }
- // printf(" ");
+ // printf(" ");
// { mp_limb_t pr[modulus_limbs]; fe_inv(pr, nqpqz); fe_mul(pr, pr, nqpqx); fe_print(pr); }
// printf("\n");
diff --git a/src/Specific/Framework/bench/gmpvar.c b/src/Specific/Framework/bench/gmpvar.c
index 97b10109e..9c79dace8 100644
--- a/src/Specific/Framework/bench/gmpvar.c
+++ b/src/Specific/Framework/bench/gmpvar.c
@@ -4,8 +4,16 @@
#include <gmp.h>
// modulus, encoded as big-endian bytes
-static const unsigned char modulus[] = {0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xed};
-static const unsigned char a_minus_two_over_four[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xdb,0x41};
+#ifndef modulus_array
+#define modulus_array {0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xed}
+#endif
+
+#ifndef a_minus_two_over_four_array
+#define a_minus_two_over_four_array {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xdb,0x41}
+#endif
+
+static const unsigned char modulus[] = modulus_array;
+static const unsigned char a_minus_two_over_four[] = a_minus_two_over_four_array;
#define modulus_bytes (sizeof(modulus))
#define modulus_limbs ((8*sizeof(modulus) + GMP_LIMB_BITS-1)/GMP_LIMB_BITS)
@@ -36,31 +44,31 @@ static void crypto_scalarmult(uint8_t *out, const uint8_t *secret, size_t secret
// allocate scratch space for use by the field operation macros.
mp_limb_t _product_tmp[modulus_limbs+modulus_limbs];
-
+
#define fe_mul(out, x, y) do { \
mpn_mul(_product_tmp, x, modulus_limbs, y, modulus_limbs); \
mpn_tdiv_qr(scratch, _product_tmp, 0, _product_tmp, modulus_limbs+modulus_limbs, m, modulus_limbs); \
for (size_t i = 0; i<modulus_limbs; i++) { out[i] = _product_tmp[i]; } \
} while (0)
-
+
#define fe_sqr(out, x) do { \
mpn_sqr(_product_tmp, x, modulus_limbs); \
mpn_tdiv_qr(scratch, _product_tmp, 0, _product_tmp, modulus_limbs+modulus_limbs, m, modulus_limbs); \
for (size_t i = 0; i<modulus_limbs; i++) { out[i] = _product_tmp[i]; } \
} while (0)
-
+
#define fe_add(out, x, y) do { \
if (mpn_add_n(out, x, y, modulus_limbs)) { \
mpn_sub_n(out, out, m, modulus_limbs); \
} \
} while (0)
-
+
#define fe_sub(out, x, y) do { \
if (mpn_sub_n(out, x, y, modulus_limbs)) { \
mpn_add_n(out, out, m, modulus_limbs); \
} \
} while (0)
-
+
#define fe_inv(out, x) do { \
for (size_t i = 0; i<modulus_limbs; i++) { _product_tmp[i] = x[i]; } \
mp_size_t invertible = mpn_sec_invert(out, _product_tmp, m, modulus_limbs, 2*modulus_limbs*GMP_NUMB_BITS, scratch); \
@@ -89,7 +97,7 @@ static void crypto_scalarmult(uint8_t *out, const uint8_t *secret, size_t secret
mp_limb_t bit = (secret[i/8] >> (i%8))&1;
// printf("%01d ", bit);
// { mp_limb_t pr[modulus_limbs]; fe_inv(pr, nqz); fe_mul(pr, pr, nqx); fe_print(pr); }
- // printf(" ");
+ // printf(" ");
// { mp_limb_t pr[modulus_limbs]; fe_inv(pr, nqpqz); fe_mul(pr, pr, nqpqx); fe_print(pr); }
// printf("\n");