MCPcopy Create free account
hub / github.com/BitVM/BitVM / sign_signed_digits

Function sign_signed_digits

bitvm/src/signatures/winternitz.rs:1064–1083  ·  view source on GitHub ↗
(
            ps: &Parameters,
            secret_key: &SecretKey,
            message_digits: Vec<i32>,
        )

Source from the content-addressed store, hash-verified

1062 }
1063
1064 fn sign_signed_digits(
1065 ps: &Parameters,
1066 secret_key: &SecretKey,
1067 message_digits: Vec<i32>,
1068 ) -> Witness {
1069 let digits = add_message_signed_checksum(ps, message_digits);
1070 let mut result = Witness::new();
1071 for i in 0..ps.total_digit_len() {
1072 let mut impersonator_digit = digits[i as usize];
1073 impersonator_digit = impersonator_digit.max(0);
1074 impersonator_digit = impersonator_digit.min(ps.max_digit() as i32);
1075 let sig = digit_signature(secret_key, i, impersonator_digit as u32);
1076 // FIXME: Do trailing zeroes violate Bitcoin Script's minimum data push requirement?
1077 // Maybe the script! macro removes the zeroes.
1078 // There is a 1/256 chance that a signature contains a trailing zero.
1079 result.push(sig);
1080 result.push(bitcoin_representation(digits[i as usize]));
1081 }
1082 result
1083 }
1084
1085 assert!(
1086 execute_script(script! {

Callers

nothing calls this directly

Calls 6

digit_signatureFunction · 0.85
bitcoin_representationFunction · 0.85
total_digit_lenMethod · 0.80
max_digitMethod · 0.80
pushMethod · 0.45

Tested by

no test coverage detected