@@ -1147,17 +1147,52 @@ static void test_schnorr_adaptor_edge_cases(void) {
1147
1147
CHECK (secp256k1_memcmp_var (extracted_sec_adaptor , sec_adaptor , sizeof (extracted_sec_adaptor )) == 0 );
1148
1148
{
1149
1149
/* overflowing pre_sig[33:65] */
1150
+ unsigned char extracted_sec_adaptor_tmp [32 ];
1151
+ unsigned char pre_sig_tmp [65 ];
1152
+ memcpy (pre_sig_tmp , pre_sig , sizeof (pre_sig_tmp ));
1153
+ memset (& pre_sig_tmp [33 ], 0xFF , 32 );
1154
+ CHECK (secp256k1_schnorr_adaptor_extract_sec (CTX , extracted_sec_adaptor_tmp , pre_sig_tmp , sig ) == 0 );
1150
1155
}
1151
1156
{
1152
1157
/* overflowing sig[32:64] */
1158
+ unsigned char extracted_sec_adaptor_tmp [32 ];
1159
+ unsigned char sig_tmp [64 ];
1160
+ memcpy (sig_tmp , sig , sizeof (sig_tmp ));
1161
+ memset (& sig_tmp [32 ], 0xFF , 32 );
1162
+ CHECK (secp256k1_schnorr_adaptor_extract_sec (CTX , extracted_sec_adaptor_tmp , pre_sig , sig_tmp ) == 0 );
1153
1163
}
1154
1164
{
1155
- /* any flipped bit in the pre-signature will extract
1165
+ /* any flipped bit in pre_sig[33:65] will extract
1156
1166
* an invalid secret adaptor */
1167
+ unsigned char extracted_sec_adaptor_tmp [32 ];
1168
+ unsigned char pre_sig_tmp [65 ];
1169
+ memcpy (pre_sig_tmp , pre_sig , sizeof (pre_sig_tmp ));
1170
+ rand_flip_bit (& pre_sig_tmp [33 ], sizeof (pre_sig_tmp ) - 33 );
1171
+ CHECK (secp256k1_schnorr_adaptor_extract_sec (CTX , extracted_sec_adaptor_tmp , pre_sig_tmp , sig ) == 1 );
1172
+ CHECK (secp256k1_memcmp_var (extracted_sec_adaptor_tmp , sec_adaptor , sizeof (extracted_sec_adaptor_tmp )) != 0 );
1157
1173
}
1158
1174
{
1159
- /* any flipped bit in the signature will extract
1175
+ /* any flipped bit in sig[32:64] will extract
1160
1176
* an invalid secret adaptor */
1177
+ unsigned char extracted_sec_adaptor_tmp [32 ];
1178
+ unsigned char sig_tmp [64 ];
1179
+ memcpy (sig_tmp , sig , sizeof (sig_tmp ));
1180
+ rand_flip_bit (& sig_tmp [32 ], sizeof (sig_tmp ) - 32 );
1181
+ CHECK (secp256k1_schnorr_adaptor_extract_sec (CTX , extracted_sec_adaptor_tmp , pre_sig , sig_tmp ) == 1 );
1182
+ CHECK (secp256k1_memcmp_var (extracted_sec_adaptor_tmp , sec_adaptor , sizeof (extracted_sec_adaptor_tmp )) != 0 );
1183
+ }
1184
+ {
1185
+ /* invalid presig[0:33] or sig[0:32] does not
1186
+ * result in an invalid output */
1187
+ unsigned char extracted_sec_adaptor_tmp [32 ];
1188
+ unsigned char pre_sig_tmp [65 ];
1189
+ unsigned char sig_tmp [64 ];
1190
+ memcpy (pre_sig_tmp , pre_sig , sizeof (pre_sig_tmp ));
1191
+ memcpy (sig_tmp , sig , sizeof (sig_tmp ));
1192
+ memset (& pre_sig_tmp [1 ], 0xFF , 32 );
1193
+ memset (sig_tmp , 0xFF , 32 );
1194
+ CHECK (secp256k1_schnorr_adaptor_extract_sec (CTX , extracted_sec_adaptor_tmp , pre_sig_tmp , sig_tmp ) == 1 );
1195
+ CHECK (secp256k1_memcmp_var (extracted_sec_adaptor_tmp , sec_adaptor , sizeof (extracted_sec_adaptor_tmp )) == 0 );
1161
1196
}
1162
1197
}
1163
1198
0 commit comments