| 554 | } |
| 555 | |
| 556 | pub(crate) fn execute_script_from_signature( |
| 557 | segments: &[Segment], |
| 558 | signed_assts: Signatures, |
| 559 | disprove_scripts: &[ScriptBuf; NUM_TAPS], |
| 560 | ) -> Option<(usize, Script)> { |
| 561 | // if there is a disprove script; with locking script; i can use bitcom witness |
| 562 | // segments and signatures |
| 563 | fn collect_wots_sig_as_witness_per_segment( |
| 564 | segments: &[Segment], |
| 565 | signed_asserts: Signatures, |
| 566 | ) -> Vec<Script> { |
| 567 | let scalar_sigs: Vec<SigData> = signed_asserts |
| 568 | .0 |
| 569 | .iter() |
| 570 | .map(|f| SigData::Wots32(*f)) |
| 571 | .collect(); |
| 572 | let felts_sigs: Vec<SigData> = signed_asserts |
| 573 | .1 |
| 574 | .iter() |
| 575 | .map(|f| SigData::Wots32(*f)) |
| 576 | .collect(); |
| 577 | let hash_sigs: Vec<SigData> = signed_asserts |
| 578 | .2 |
| 579 | .iter() |
| 580 | .map(|f| SigData::Wots16(*f)) |
| 581 | .collect(); |
| 582 | let mut bitcom_sig_arr = vec![]; |
| 583 | bitcom_sig_arr.extend_from_slice(&scalar_sigs); |
| 584 | bitcom_sig_arr.extend_from_slice(&felts_sigs); |
| 585 | bitcom_sig_arr.extend_from_slice(&hash_sigs); |
| 586 | |
| 587 | let mut bitcom_sig_as_witness = vec![]; |
| 588 | |
| 589 | for i in 0..segments.len() { |
| 590 | let mut index_of_bitcommitted_msg: Vec<u32> = vec![]; |
| 591 | |
| 592 | let seg = &segments[i]; |
| 593 | let sec_in: Vec<u32> = seg.parameter_ids.iter().rev().map(|(k, _)| *k).collect(); |
| 594 | index_of_bitcommitted_msg.extend_from_slice(&sec_in); |
| 595 | |
| 596 | if !seg.scr_type.is_final_script() { |
| 597 | // final script doesn't have output |
| 598 | let sec_out = ( |
| 599 | seg.id, |
| 600 | segments[seg.id as usize].result.0.output_is_field_element(), |
| 601 | ); |
| 602 | index_of_bitcommitted_msg.push(sec_out.0); |
| 603 | } |
| 604 | |
| 605 | let mut sig_preimages = script! {}; |
| 606 | for index in index_of_bitcommitted_msg { |
| 607 | let sig_data = &bitcom_sig_arr[index as usize]; |
| 608 | let sig_preimage = match sig_data { |
| 609 | SigData::Wots16(signature) => Wots16::compact_signature_to_raw_witness( |
| 610 | &Wots16::signature_to_compact_signature(signature), |
| 611 | ), |
| 612 | SigData::Wots32(signature) => Wots32::compact_signature_to_raw_witness( |
| 613 | &Wots32::signature_to_compact_signature(signature), |