Created
September 7, 2025 22:27
-
-
Save nputnam/11bde36bbd3d507eeb44de033482c82c to your computer and use it in GitHub Desktop.
Signed response test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #[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