Skip to main content

RequiredSigners

Type Alias RequiredSigners 

Source
pub type RequiredSigners<E, K> = BTreeMap<E, Vec<OwnedSigningKeyId<K>>>;
Expand description

This is a helper type when calling verify_signatures().

§Example

The following example code shows how one could enforce/check that some device keys are signed by a self-signing key.

let signer_user_id = owned_user_id!("@nina:example.org");
let self_signing_key_pair = generate_test_key_pair();

// Generate a self-signing key, signed by itself.
let mut self_signing_key = generate_test_cross_signing_key(
	&signer_user_id,
	KeyUsage::SelfSigning,
	Some(&self_signing_key_pair),
);
let signing_key_id = self_signing_key.key_id().expect("Failed to extract key id");
sign_object(
	&mut self_signing_key,
	signer_user_id.as_str(),
	&signing_key_id.to_string(),
	&self_signing_key_pair,
);

// Generate a device, and additionally sign it with the self-signing key.
let mut device_keys =
	generate_test_device_keys(&signer_user_id, &owned_device_id!("syJo6qIkff"), None);
sign_object(
	&mut device_keys,
	signer_user_id.as_str(),
	&signing_key_id.to_string(),
	&self_signing_key_pair,
);

// First, extract a PublicKeyMap from the self-signing key.
let keymap = self_signing_key.keymap().expect("Failed to extract keymap");

// Then, configure the required signers to contain that key.
let required_signers = BTreeMap::from([(signer_user_id, vec![signing_key_id])]);

// And finally, call the verification function
assert!(verify_signatures(vec![&keymap], &device_keys,
Some(&required_signers)).is_ok());

Aliased Type§

pub struct RequiredSigners<E, K> { /* private fields */ }