()
| 941 | |
| 942 | #[test] |
| 943 | fn test_winternitz_fail() { |
| 944 | let secret_key = match Vec::<u8>::from_hex(SAMPLE_SECRET_KEY) { |
| 945 | Ok(bytes) => bytes, |
| 946 | Err(_) => panic!("Invalid hex string"), |
| 947 | }; |
| 948 | let mut prng = ChaCha20Rng::seed_from_u64(37); |
| 949 | for _ in 0..TEST_COUNT { |
| 950 | let ps = Parameters::new(prng.gen_range(1..200), prng.gen_range(4..=8)); |
| 951 | let message_byte_size = ps.message_digit_len * ps.log2_base / 8; |
| 952 | let mut message = vec![0u8; message_byte_size as usize]; |
| 953 | let mut return_message = vec![0; ps.message_byte_len() as usize]; |
| 954 | for i in 0..message_byte_size { |
| 955 | message[i as usize] = prng.gen_range(0u8..=255); |
| 956 | return_message[i as usize] = message[i as usize]; |
| 957 | } |
| 958 | let public_key = generate_public_key(&ps, &secret_key); |
| 959 | let message_checker = script! { |
| 960 | for i in 0..ps.message_byte_len() { |
| 961 | {return_message[i as usize]} |
| 962 | if i == ps.message_byte_len() - 1 { |
| 963 | OP_EQUAL |
| 964 | } else { |
| 965 | OP_EQUALVERIFY |
| 966 | } |
| 967 | } |
| 968 | }; |
| 969 | |
| 970 | run_winternitz_test::<ListpickVerifier, ToBytesConverter>( |
| 971 | &ps, |
| 972 | &secret_key, |
| 973 | &public_key, |
| 974 | &message, |
| 975 | message_checker.clone(), |
| 976 | false, |
| 977 | ); |
| 978 | run_winternitz_test::<BruteforceVerifier, ToBytesConverter>( |
| 979 | &ps, |
| 980 | &secret_key, |
| 981 | &public_key, |
| 982 | &message, |
| 983 | message_checker.clone(), |
| 984 | false, |
| 985 | ); |
| 986 | run_winternitz_test::<BinarysearchVerifier, ToBytesConverter>( |
| 987 | &ps, |
| 988 | &secret_key, |
| 989 | &public_key, |
| 990 | &message, |
| 991 | message_checker, |
| 992 | false, |
| 993 | ); |
| 994 | |
| 995 | let message_digits = message_to_digits(ps.message_digit_len, ps.log2_base, &message); |
| 996 | let void_message_checker = script! { |
| 997 | for i in (0..ps.message_digit_len).rev() { |
| 998 | { message_digits[i as usize] } |
| 999 | if i == 0 { |
| 1000 | OP_EQUAL |
nothing calls this directly
no test coverage detected