From 9ab93355f29fb9b5b681916e786e45cd1cfa6757 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Mon, 29 Dec 2014 17:21:39 +0100 Subject: [PATCH] Add a reference consistency test to ge_tests. This adds all points used in the test together in random order, which should result in infinity. Suggested by Greg Maxwell. --- src/tests.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/tests.c b/src/tests.c index fa735bf08d..1b3da562db 100644 --- a/src/tests.c +++ b/src/tests.c @@ -881,6 +881,29 @@ void test_ge(void) { } } + /* Test adding all points together in random order equals infinity. */ + { + secp256k1_gej_t *gej_shuffled = malloc((4 * runs + 1) * sizeof(secp256k1_gej_t)); + for (int i = 0; i < 4 * runs + 1; i++) { + gej_shuffled[i] = gej[i]; + } + for (int i = 0; i < 4 * runs + 1; i++) { + int swap = i + secp256k1_rand32() % (4 * runs + 1 - i); + if (swap != i) { + secp256k1_gej_t t = gej_shuffled[i]; + gej_shuffled[i] = gej_shuffled[swap]; + gej_shuffled[swap] = t; + } + } + secp256k1_gej_t sum; + secp256k1_gej_set_infinity(&sum); + for (int i = 0; i < 4 * runs + 1; i++) { + secp256k1_gej_add_var(&sum, &sum, &gej_shuffled[i]); + } + CHECK(secp256k1_gej_is_infinity(&sum)); + free(gej_shuffled); + } + /* Test batch gej -> ge conversion. */ { secp256k1_ge_t *ge_set_all = malloc((4 * runs + 1) * sizeof(secp256k1_ge_t));