()
| 849 | |
| 850 | #[test] |
| 851 | fn test_winternitz_success() { |
| 852 | let secret_key = match Vec::<u8>::from_hex(SAMPLE_SECRET_KEY) { |
| 853 | Ok(bytes) => bytes, |
| 854 | Err(_) => panic!("Invalid hex string"), |
| 855 | }; |
| 856 | let mut prng = ChaCha20Rng::seed_from_u64(37); |
| 857 | for _ in 0..TEST_COUNT { |
| 858 | let ps = Parameters::new(prng.gen_range(1..200), prng.gen_range(4..=8)); |
| 859 | let message_byte_size = ps.message_digit_len * ps.log2_base / 8; |
| 860 | let mut message = vec![0u8; message_byte_size as usize]; |
| 861 | let mut return_message = vec![0; ps.message_byte_len() as usize]; |
| 862 | for i in 0..message_byte_size { |
| 863 | message[i as usize] = prng.gen_range(0u8..=255); |
| 864 | return_message[i as usize] = message[i as usize]; |
| 865 | } |
| 866 | let public_key = generate_public_key(&ps, &secret_key); |
| 867 | let message_checker = script! { |
| 868 | for i in 0..ps.message_byte_len() { |
| 869 | {return_message[i as usize]} |
| 870 | if i == ps.message_byte_len() - 1 { |
| 871 | OP_EQUAL |
| 872 | } else { |
| 873 | OP_EQUALVERIFY |
| 874 | } |
| 875 | } |
| 876 | }; |
| 877 | |
| 878 | run_winternitz_test::<ListpickVerifier, ToBytesConverter>( |
| 879 | &ps, |
| 880 | &secret_key, |
| 881 | &public_key, |
| 882 | &message, |
| 883 | message_checker.clone(), |
| 884 | true, |
| 885 | ); |
| 886 | run_winternitz_test::<BruteforceVerifier, ToBytesConverter>( |
| 887 | &ps, |
| 888 | &secret_key, |
| 889 | &public_key, |
| 890 | &message, |
| 891 | message_checker.clone(), |
| 892 | true, |
| 893 | ); |
| 894 | run_winternitz_test::<BinarysearchVerifier, ToBytesConverter>( |
| 895 | &ps, |
| 896 | &secret_key, |
| 897 | &public_key, |
| 898 | &message, |
| 899 | message_checker, |
| 900 | true, |
| 901 | ); |
| 902 | |
| 903 | let message_digits = message_to_digits(ps.message_digit_len, ps.log2_base, &message); |
| 904 | let void_message_checker = script! { |
| 905 | for i in (0..ps.message_digit_len).rev() { |
| 906 | { message_digits[i as usize] } |
| 907 | if i == 0 { |
| 908 | OP_EQUAL |
nothing calls this directly
no test coverage detected