beaconcrypt 0.3.3

Cryptographic transport for C2 channels
Documentation
use beaconcrypt::*;

fn test_register_pqxdh_beacon(
	server: &mut BeaconCryptPqxdh,
	beacon: &mut BeaconCryptPqxdh,
) -> Vec<u8> {
	let message = [0xFFu8; 32];

	let phase_1 = beacon.get_registration_bundle().unwrap();
	let reg_out = server.get_shared_secret(&phase_1).unwrap();
	let phase2 = server
		.build_registration_response(reg_out, Some(&message))
		.unwrap();
	beacon.finish_registration(&phase2.serialized).unwrap()
}

#[test]
fn beacon_can_catch_up() {
	let mut server = BeaconCryptPqxdh::new(false, 0, None, None);
	let server_id = server.identity_pk().to_owned();

	let mut b1 = BeaconCryptPqxdh::new(true, 0, Some(server_id.as_bytes()), None);
	let _ = test_register_pqxdh_beacon(&mut server, &mut b1);
	assert!(server.pk_by_kid(1).is_some());

	let message = [0xFFu8; 32];
	let b1_m1 = server.encrypt_message(&message, true, 1).unwrap();
	let b1_m2 = server.encrypt_message(&message, true, 1).unwrap();
	assert_ne!(b1_m1, b1_m2);

	let dec_b1_m1 = b1.decrypt_message(&b1_m1, 0, true).unwrap();
	let dec_b1_m2 = b1.decrypt_message(&b1_m2, 0, true).unwrap();
	assert_eq!(dec_b1_m1, dec_b1_m2);
}