@@ -251,42 +251,41 @@ pub fn finalize<C: secp256k1::Verification>(
251251
252252 // Check well-formedness of input data
253253 for ( n, input) in psbt. inputs . iter ( ) . enumerate ( ) {
254- if let Some ( target) = input. sighash_type {
255- for ( key, rawsig) in & input. partial_sigs {
256- if rawsig. is_empty ( ) {
254+ let target = input. sighash_type . unwrap_or ( bitcoin:: SigHashType :: All ) ;
255+ for ( key, rawsig) in & input. partial_sigs {
256+ if rawsig. is_empty ( ) {
257+ return Err ( Error :: InputError (
258+ InputError :: InvalidSignature {
259+ pubkey : * key,
260+ sig : rawsig. clone ( ) ,
261+ } ,
262+ n,
263+ ) ) ;
264+ }
265+ let ( flag, sig) = rawsig. split_last ( ) . unwrap ( ) ;
266+ let flag = bitcoin:: SigHashType :: from_u32 ( * flag as u32 ) ;
267+ if target != flag {
268+ return Err ( Error :: InputError (
269+ InputError :: WrongSigHashFlag {
270+ required : target,
271+ got : flag,
272+ pubkey : * key,
273+ } ,
274+ n,
275+ ) ) ;
276+ }
277+ match secp256k1:: Signature :: from_der ( sig) {
278+ Err ( ..) => {
257279 return Err ( Error :: InputError (
258280 InputError :: InvalidSignature {
259281 pubkey : * key,
260- sig : rawsig. clone ( ) ,
261- } ,
262- n,
263- ) ) ;
264- }
265- let ( flag, sig) = rawsig. split_last ( ) . unwrap ( ) ;
266- let flag = bitcoin:: SigHashType :: from_u32 ( * flag as u32 ) ;
267- if target != flag {
268- return Err ( Error :: InputError (
269- InputError :: WrongSigHashFlag {
270- required : target,
271- got : flag,
272- pubkey : * key,
282+ sig : Vec :: from ( sig) ,
273283 } ,
274284 n,
275285 ) ) ;
276286 }
277- match secp256k1:: Signature :: from_der ( sig) {
278- Err ( ..) => {
279- return Err ( Error :: InputError (
280- InputError :: InvalidSignature {
281- pubkey : * key,
282- sig : Vec :: from ( sig) ,
283- } ,
284- n,
285- ) ) ;
286- }
287- Ok ( _sig) => {
288- // Interpreter will check all the sigs later.
289- }
287+ Ok ( _sig) => {
288+ // Interpreter will check all the sigs later.
290289 }
291290 }
292291 }
0 commit comments