in tuftool/src/root.rs [414:442]
fn add_key(root: &mut Root, role: &[RoleType], key: Key) -> Result<Decoded<Hex>> {
let key_id = if let Some((key_id, _)) = root
.keys
.iter()
.find(|(_, candidate_key)| key.eq(candidate_key))
{
key_id.clone()
} else {
// Key isn't present yet, so we need to add it
let key_id = key.key_id().context(error::KeyIdSnafu)?;
ensure!(
!root.keys.contains_key(&key_id),
error::KeyDuplicateSnafu {
key_id: hex::encode(&key_id)
}
);
root.keys.insert(key_id.clone(), key);
key_id
};
for r in role {
let entry = root.roles.entry(*r).or_insert_with(|| role_keys!());
if !entry.keyids.contains(&key_id) {
entry.keyids.push(key_id.clone());
}
}
Ok(key_id)
}