Skip to content

Instantly share code, notes, and snippets.

@nputnam
Created September 7, 2025 22:27
Show Gist options
  • Select an option

  • Save nputnam/11bde36bbd3d507eeb44de033482c82c to your computer and use it in GitHub Desktop.

Select an option

Save nputnam/11bde36bbd3d507eeb44de033482c82c to your computer and use it in GitHub Desktop.
Signed response test
#[test]
fn test_sign_response() {
let key_bin = BASE64_STANDARD.decode("C8OEeCc18V4Krat0iOSHN1ITrbwjJUKpbuxCpkOuK/Y=").unwrap();
let request = BASE64_STANDARD.decode(b"Cr0AAAABAAAAAAABBHRlc3QDbGFuAAAGAAEIa2VhLWJpbmQAAPoA/wAAAAAAPQtobWFjLXNoYTI1NgAAAGi95UgBLAAghkZktC1IihaLQ2Ll1Sw91GuliJY7/TuIQUajY2KAIPUKvQAAAAA=").unwrap();
let request_message = Message::from_vec(request.as_slice()).unwrap();
let signature = request_message.signature().last().unwrap().clone();
let dnssec = signature.clone().into_data().as_dnssec().unwrap().clone();
let tsig = dnssec.as_tsig().unwrap();
let mac = tsig.mac();
let response = BASE64_STANDARD.decode(b"Cr2EgAABAAAAAQABBHRlc3QDbGFuAAAGAAHAEQAGAAEAAA4QACYDbnMxA2xhbsARBWFkbWluwBEAAJYKAAk6gAABUYAAJOoAAAk6gAhrZWEtYmluZAAA+gD/AAAAAAA9C2htYWMtc2hhMjU2AAAAaL3lSAEsACBG840eD/V805ed9mw6Fi4Z2PjRuOP8RtaM5XVv8C05Pwq9AAAAAA==").unwrap();
let mut response_message = Message::from_vec(response.as_slice()).unwrap();
println!("response : {:?}", response_message);
// First step is to strip the signature. First capture it
let response_signature = response_message.take_signature().first().unwrap().clone();
let response_dnssec = response_signature.into_data().as_dnssec().unwrap().clone();
let response_tsig = response_dnssec.as_tsig().unwrap();
let response_mac = response_tsig.mac();
// Remove signature
response_message.take_signature();
let pre_tsig = TSIG::new(
response_tsig.algorithm().clone(),
response_tsig.time(),
response_tsig.fudge(),
vec![],
request_message.id(),
0,
vec![]
);
let message_tbs = message_tbs(Some(mac), &response_message, &pre_tsig, signature.clone().name()).unwrap();
let signer = TSigner::new(key_bin, response_tsig.algorithm().clone(), signature.name().clone(), response_tsig.fudge()).unwrap();
let signed = signer.sign(message_tbs.as_slice()).unwrap();
assert_eq!(response_mac, signed);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment