aboutsummaryrefslogtreecommitdiff
path: root/src/testutil.h
diff options
context:
space:
mode:
authorfanquake <fanquake@gmail.com>2024-06-25 15:01:00 +0100
committerfanquake <fanquake@gmail.com>2024-06-25 15:01:00 +0100
commit1408944d2ec9f78e62bf91a5e5a50317ba3060c5 (patch)
treee0906ccb1c212fb0dfb3afbc44804960eae818e0 /src/testutil.h
parentca3d945dc66e177e8fa3e83c77236de89cc0072a (diff)
downloadbitcoin-1408944d2ec9f78e62bf91a5e5a50317ba3060c5.tar.xz
Squashed 'src/secp256k1/' changes from 06bff6dec8..4af241b320
4af241b320 Merge bitcoin-core/secp256k1#1535: build: Replace hardcoded "auto" value with default one f473c959f0 Merge bitcoin-core/secp256k1#1543: cmake: Do not modify build types when integrating by downstream project d403eea484 Merge bitcoin-core/secp256k1#1546: cmake: Rename `SECP256K1_LATE_CFLAGS` and switch to Bitcoin Core's approach d7ae25ce6f Merge bitcoin-core/secp256k1#1550: fix: typos in secp256k1.c 0e2fadb20c fix: typos in secp256k1.c 69b2192ad4 Merge bitcoin-core/secp256k1#1545: cmake: Do not set `CTEST_TEST_TARGET_ALIAS` 5dd637f3cf Merge bitcoin-core/secp256k1#1548: README: mention ellswift module 7454a53736 README: mention ellswift module 4706be2cd0 cmake: Reimplement `SECP256K1_APPEND_CFLAGS` using Bitcoin Core approach c2764dbb99 cmake: Rename `SECP256K1_LATE_CFLAGS` to `SECP256K1_APPEND_CFLAGS` f87a3589f4 cmake: Do not set `CTEST_TEST_TARGET_ALIAS` 158f9e5eae cmake: Do not modify build types when integrating by downstream project 35c0fdc86b Merge bitcoin-core/secp256k1#1529: cmake: Fix cache issue when integrating by downstream project 4392f0f717 Merge bitcoin-core/secp256k1#1533: tests: refactor: tidy up util functions (#1491) bedffd53d8 Merge bitcoin-core/secp256k1#1488: ci: Add native macOS arm64 job 4b8d5eeacf Merge bitcoin-core/secp256k1#1532: cmake: Disable eager MSan in ctime_tests f55703ba49 autotools: Delete unneeded compiler test 396e885886 autotools: Align MSan checking code with CMake's implementation abde59f52d cmake: Report more compiler details in summary 7abf979a43 cmake: Disable `ctime_tests` if build with `-fsanitize=memory` 4d9645bee0 cmake: Remove "AUTO" value of `SECP256K1_ECMULT_GEN_KB` option a06805ee74 cmake: Remove "AUTO" value of `SECP256K1_ECMULT_WINDOW_SIZE` option 1791f6fce4 Merge bitcoin-core/secp256k1#1517: autotools: Disable eager MSan in ctime_tests 26b94ee92a autotools: Remove "auto" value of `--with-ecmult-gen-kb` option 122dbaeb37 autotools: Remove "auto" value of `--with-ecmult-window` option e73f6f8fd9 tests: refactor: drop `secp256k1_` prefix from testrand.h functions 0ee7453a99 tests: refactor: add `testutil_` prefix to testutil.h functions 0c6bc76dcd tests: refactor: move `random_` helpers from tests.c to testutil.h 0fef8479be tests: refactor: rename `random_field_element_magnitude` -> `random_fe_magnitude` 59db007f0f tests: refactor: rename `random_group_element_...` -> `random_ge_...` ebfb82ee2f ci: Add job with -fsanitize-memory-param-retval e1bef0961c configure: Move "experimental" warning to bottom 55e5d975db autotools: Disable eager MSan in ctime_tests ec4c002faa cmake: Simplify `PROJECT_IS_TOP_LEVEL` emulation cae9a7ad14 cmake: Do not set emulated PROJECT_IS_TOP_LEVEL as cache variable 218f0cc93b ci: Add native macOS arm64 job git-subtree-dir: src/secp256k1 git-subtree-split: 4af241b32099067464e015fa66daac5096206dea
Diffstat (limited to 'src/testutil.h')
-rw-r--r--src/testutil.h121
1 files changed, 117 insertions, 4 deletions
diff --git a/src/testutil.h b/src/testutil.h
index 4e2cb7d5b3..8296a5fb99 100644
--- a/src/testutil.h
+++ b/src/testutil.h
@@ -7,23 +7,136 @@
#define SECP256K1_TESTUTIL_H
#include "field.h"
+#include "group.h"
#include "testrand.h"
#include "util.h"
-static void random_fe(secp256k1_fe *x) {
+static void testutil_random_fe(secp256k1_fe *x) {
unsigned char bin[32];
do {
- secp256k1_testrand256(bin);
+ testrand256(bin);
if (secp256k1_fe_set_b32_limit(x, bin)) {
return;
}
} while(1);
}
-static void random_fe_non_zero(secp256k1_fe *nz) {
+static void testutil_random_fe_non_zero(secp256k1_fe *nz) {
do {
- random_fe(nz);
+ testutil_random_fe(nz);
} while (secp256k1_fe_is_zero(nz));
}
+static void testutil_random_fe_magnitude(secp256k1_fe *fe, int m) {
+ secp256k1_fe zero;
+ int n = testrand_int(m + 1);
+ secp256k1_fe_normalize(fe);
+ if (n == 0) {
+ return;
+ }
+ secp256k1_fe_clear(&zero);
+ secp256k1_fe_negate(&zero, &zero, 0);
+ secp256k1_fe_mul_int_unchecked(&zero, n - 1);
+ secp256k1_fe_add(fe, &zero);
+#ifdef VERIFY
+ CHECK(fe->magnitude == n);
+#endif
+}
+
+static void testutil_random_fe_test(secp256k1_fe *x) {
+ unsigned char bin[32];
+ do {
+ testrand256_test(bin);
+ if (secp256k1_fe_set_b32_limit(x, bin)) {
+ return;
+ }
+ } while(1);
+}
+
+static void testutil_random_fe_non_zero_test(secp256k1_fe *fe) {
+ do {
+ testutil_random_fe_test(fe);
+ } while(secp256k1_fe_is_zero(fe));
+}
+
+static void testutil_random_ge_x_magnitude(secp256k1_ge *ge) {
+ testutil_random_fe_magnitude(&ge->x, SECP256K1_GE_X_MAGNITUDE_MAX);
+}
+
+static void testutil_random_ge_y_magnitude(secp256k1_ge *ge) {
+ testutil_random_fe_magnitude(&ge->y, SECP256K1_GE_Y_MAGNITUDE_MAX);
+}
+
+static void testutil_random_gej_x_magnitude(secp256k1_gej *gej) {
+ testutil_random_fe_magnitude(&gej->x, SECP256K1_GEJ_X_MAGNITUDE_MAX);
+}
+
+static void testutil_random_gej_y_magnitude(secp256k1_gej *gej) {
+ testutil_random_fe_magnitude(&gej->y, SECP256K1_GEJ_Y_MAGNITUDE_MAX);
+}
+
+static void testutil_random_gej_z_magnitude(secp256k1_gej *gej) {
+ testutil_random_fe_magnitude(&gej->z, SECP256K1_GEJ_Z_MAGNITUDE_MAX);
+}
+
+static void testutil_random_ge_test(secp256k1_ge *ge) {
+ secp256k1_fe fe;
+ do {
+ testutil_random_fe_test(&fe);
+ if (secp256k1_ge_set_xo_var(ge, &fe, testrand_bits(1))) {
+ secp256k1_fe_normalize(&ge->y);
+ break;
+ }
+ } while(1);
+ ge->infinity = 0;
+}
+
+static void testutil_random_ge_jacobian_test(secp256k1_gej *gej, const secp256k1_ge *ge) {
+ secp256k1_fe z2, z3;
+ testutil_random_fe_non_zero_test(&gej->z);
+ secp256k1_fe_sqr(&z2, &gej->z);
+ secp256k1_fe_mul(&z3, &z2, &gej->z);
+ secp256k1_fe_mul(&gej->x, &ge->x, &z2);
+ secp256k1_fe_mul(&gej->y, &ge->y, &z3);
+ gej->infinity = ge->infinity;
+}
+
+static void testutil_random_gej_test(secp256k1_gej *gej) {
+ secp256k1_ge ge;
+ testutil_random_ge_test(&ge);
+ testutil_random_ge_jacobian_test(gej, &ge);
+}
+
+static void testutil_random_scalar_order_test(secp256k1_scalar *num) {
+ do {
+ unsigned char b32[32];
+ int overflow = 0;
+ testrand256_test(b32);
+ secp256k1_scalar_set_b32(num, b32, &overflow);
+ if (overflow || secp256k1_scalar_is_zero(num)) {
+ continue;
+ }
+ break;
+ } while(1);
+}
+
+static void testutil_random_scalar_order(secp256k1_scalar *num) {
+ do {
+ unsigned char b32[32];
+ int overflow = 0;
+ testrand256(b32);
+ secp256k1_scalar_set_b32(num, b32, &overflow);
+ if (overflow || secp256k1_scalar_is_zero(num)) {
+ continue;
+ }
+ break;
+ } while(1);
+}
+
+static void testutil_random_scalar_order_b32(unsigned char *b32) {
+ secp256k1_scalar num;
+ testutil_random_scalar_order(&num);
+ secp256k1_scalar_get_b32(b32, &num);
+}
+
#endif /* SECP256K1_TESTUTIL_H */