@@ -3040,20 +3040,70 @@ void test_fixed_wnaf(const secp256k1_scalar *number, int w) {
3040
3040
CHECK (secp256k1_scalar_eq (& x , & num ));
3041
3041
}
3042
3042
3043
- void test_fixed_wnaf_zero (int w ) {
3043
+ /* Checks that the first 8 elements of wnaf are equal to wnaf_expected and the
3044
+ * rest is 0.*/
3045
+ void test_fixed_wnaf_small_helper (int * wnaf , int * wnaf_expected , int w ) {
3046
+ int i ;
3047
+ for (i = WNAF_SIZE (w )- 1 ; i >= 8 ; -- i ) {
3048
+ CHECK (wnaf [i ] == 0 );
3049
+ }
3050
+ for (i = 7 ; i >= 0 ; -- i ) {
3051
+ CHECK (wnaf [i ] == wnaf_expected [i ]);
3052
+ }
3053
+ }
3054
+
3055
+ void test_fixed_wnaf_small (void ) {
3056
+ int w = 4 ;
3044
3057
int wnaf [256 ] = {0 };
3045
3058
int i ;
3046
3059
int skew ;
3047
3060
secp256k1_scalar num ;
3048
3061
3049
3062
secp256k1_scalar_set_int (& num , 0 );
3050
3063
skew = secp256k1_wnaf_fixed (wnaf , & num , w );
3051
-
3052
3064
for (i = WNAF_SIZE (w )- 1 ; i >= 0 ; -- i ) {
3053
3065
int v = wnaf [i ];
3054
3066
CHECK (v == 0 );
3055
3067
}
3056
3068
CHECK (skew == 0 );
3069
+
3070
+ secp256k1_scalar_set_int (& num , 1 );
3071
+ skew = secp256k1_wnaf_fixed (wnaf , & num , w );
3072
+ for (i = WNAF_SIZE (w )- 1 ; i >= 1 ; -- i ) {
3073
+ int v = wnaf [i ];
3074
+ CHECK (v == 0 );
3075
+ }
3076
+ CHECK (wnaf [0 ] == 1 );
3077
+ CHECK (skew == 0 );
3078
+
3079
+ {
3080
+ int wnaf_expected [8 ] = { 0xf , 0xf , 0xf , 0xf , 0xf , 0xf , 0xf , 0xf };
3081
+ secp256k1_scalar_set_int (& num , 0xffffffff );
3082
+ skew = secp256k1_wnaf_fixed (wnaf , & num , w );
3083
+ test_fixed_wnaf_small_helper (wnaf , wnaf_expected , w );
3084
+ CHECK (skew == 0 );
3085
+ }
3086
+ {
3087
+ int wnaf_expected [8 ] = { -1 , -1 , -1 , -1 , -1 , -1 , -1 , 0xf };
3088
+ secp256k1_scalar_set_int (& num , 0xeeeeeeee );
3089
+ skew = secp256k1_wnaf_fixed (wnaf , & num , w );
3090
+ test_fixed_wnaf_small_helper (wnaf , wnaf_expected , w );
3091
+ CHECK (skew == 1 );
3092
+ }
3093
+ {
3094
+ int wnaf_expected [8 ] = { 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 };
3095
+ secp256k1_scalar_set_int (& num , 0x01010101 );
3096
+ skew = secp256k1_wnaf_fixed (wnaf , & num , w );
3097
+ test_fixed_wnaf_small_helper (wnaf , wnaf_expected , w );
3098
+ CHECK (skew == 0 );
3099
+ }
3100
+ {
3101
+ int wnaf_expected [8 ] = { -0xf , 0 , 0xf , -0xf , 0 , 0xf , 1 , 0 };
3102
+ secp256k1_scalar_set_int (& num , 0x01ef1ef1 );
3103
+ skew = secp256k1_wnaf_fixed (wnaf , & num , w );
3104
+ test_fixed_wnaf_small_helper (wnaf , wnaf_expected , w );
3105
+ CHECK (skew == 0 );
3106
+ }
3057
3107
}
3058
3108
3059
3109
void run_wnaf (void ) {
@@ -3067,7 +3117,7 @@ void run_wnaf(void) {
3067
3117
n .d [0 ] = 2 ;
3068
3118
test_constant_wnaf (& n , 4 );
3069
3119
/* Test 0 */
3070
- test_fixed_wnaf_zero ( 4 );
3120
+ test_fixed_wnaf_small ( );
3071
3121
/* Random tests */
3072
3122
for (i = 0 ; i < count ; i ++ ) {
3073
3123
random_scalar_order (& n );
0 commit comments