|
|
|
@ -3040,7 +3040,20 @@ void test_fixed_wnaf(const secp256k1_scalar *number, int w) {
@@ -3040,7 +3040,20 @@ void test_fixed_wnaf(const secp256k1_scalar *number, int w) {
|
|
|
|
|
CHECK(secp256k1_scalar_eq(&x, &num)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void test_fixed_wnaf_zero(int w) { |
|
|
|
|
/* Checks that the first 8 elements of wnaf are equal to wnaf_expected and the
|
|
|
|
|
* rest is 0.*/ |
|
|
|
|
void test_fixed_wnaf_small_helper(int *wnaf, int *wnaf_expected, int w) { |
|
|
|
|
int i; |
|
|
|
|
for (i = WNAF_SIZE(w)-1; i >= 8; --i) { |
|
|
|
|
CHECK(wnaf[i] == 0); |
|
|
|
|
} |
|
|
|
|
for (i = 7; i >= 0; --i) { |
|
|
|
|
CHECK(wnaf[i] == wnaf_expected[i]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void test_fixed_wnaf_small(void) { |
|
|
|
|
int w = 4; |
|
|
|
|
int wnaf[256] = {0}; |
|
|
|
|
int i; |
|
|
|
|
int skew; |
|
|
|
@ -3048,12 +3061,49 @@ void test_fixed_wnaf_zero(int w) {
@@ -3048,12 +3061,49 @@ void test_fixed_wnaf_zero(int w) {
|
|
|
|
|
|
|
|
|
|
secp256k1_scalar_set_int(&num, 0); |
|
|
|
|
skew = secp256k1_wnaf_fixed(wnaf, &num, w); |
|
|
|
|
|
|
|
|
|
for (i = WNAF_SIZE(w)-1; i >= 0; --i) { |
|
|
|
|
int v = wnaf[i]; |
|
|
|
|
CHECK(v == 0); |
|
|
|
|
} |
|
|
|
|
CHECK(skew == 0); |
|
|
|
|
|
|
|
|
|
secp256k1_scalar_set_int(&num, 1); |
|
|
|
|
skew = secp256k1_wnaf_fixed(wnaf, &num, w); |
|
|
|
|
for (i = WNAF_SIZE(w)-1; i >= 1; --i) { |
|
|
|
|
int v = wnaf[i]; |
|
|
|
|
CHECK(v == 0); |
|
|
|
|
} |
|
|
|
|
CHECK(wnaf[0] == 1); |
|
|
|
|
CHECK(skew == 0); |
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
int wnaf_expected[8] = { 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf }; |
|
|
|
|
secp256k1_scalar_set_int(&num, 0xffffffff); |
|
|
|
|
skew = secp256k1_wnaf_fixed(wnaf, &num, w); |
|
|
|
|
test_fixed_wnaf_small_helper(wnaf, wnaf_expected, w); |
|
|
|
|
CHECK(skew == 0); |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
int wnaf_expected[8] = { -1, -1, -1, -1, -1, -1, -1, 0xf }; |
|
|
|
|
secp256k1_scalar_set_int(&num, 0xeeeeeeee); |
|
|
|
|
skew = secp256k1_wnaf_fixed(wnaf, &num, w); |
|
|
|
|
test_fixed_wnaf_small_helper(wnaf, wnaf_expected, w); |
|
|
|
|
CHECK(skew == 1); |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
int wnaf_expected[8] = { 1, 0, 1, 0, 1, 0, 1, 0 }; |
|
|
|
|
secp256k1_scalar_set_int(&num, 0x01010101); |
|
|
|
|
skew = secp256k1_wnaf_fixed(wnaf, &num, w); |
|
|
|
|
test_fixed_wnaf_small_helper(wnaf, wnaf_expected, w); |
|
|
|
|
CHECK(skew == 0); |
|
|
|
|
} |
|
|
|
|
{ |
|
|
|
|
int wnaf_expected[8] = { -0xf, 0, 0xf, -0xf, 0, 0xf, 1, 0 }; |
|
|
|
|
secp256k1_scalar_set_int(&num, 0x01ef1ef1); |
|
|
|
|
skew = secp256k1_wnaf_fixed(wnaf, &num, w); |
|
|
|
|
test_fixed_wnaf_small_helper(wnaf, wnaf_expected, w); |
|
|
|
|
CHECK(skew == 0); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void run_wnaf(void) { |
|
|
|
@ -3067,7 +3117,7 @@ void run_wnaf(void) {
@@ -3067,7 +3117,7 @@ void run_wnaf(void) {
|
|
|
|
|
n.d[0] = 2; |
|
|
|
|
test_constant_wnaf(&n, 4); |
|
|
|
|
/* Test 0 */ |
|
|
|
|
test_fixed_wnaf_zero(4); |
|
|
|
|
test_fixed_wnaf_small(); |
|
|
|
|
/* Random tests */ |
|
|
|
|
for (i = 0; i < count; i++) { |
|
|
|
|
random_scalar_order(&n); |
|
|
|
|