cerbero-lib 0.0.20

Kerberos protocol attacker library
Documentation
use crate::core::KrbUser;
use kerberos_asn1::PrincipalName;
use kerberos_constants::principal_names;

pub fn new_principal_or_srv_inst(name: &str, realm: &str) -> PrincipalName
{
	let name_parts = spn_to_service_parts(&name);
	let name_type =
		if name_parts.last().unwrap() == realm { principal_names::NT_SRV_INST } else { principal_names::NT_PRINCIPAL };

	return PrincipalName { name_type: name_type, name_string: name_parts };
}

pub fn new_nt_principal(name: &str) -> PrincipalName
{
	return new_principal_name(name, principal_names::NT_PRINCIPAL);
}

pub fn new_nt_srv_inst(service: &str) -> PrincipalName
{
	return new_principal_name(service, principal_names::NT_SRV_INST);
}

pub fn new_nt_enterprise(user: &KrbUser) -> PrincipalName
{
	return new_principal_name(&format!("{}@{}", &user.name, &user.realm), principal_names::NT_ENTERPRISE);
}

pub fn new_principal_name(name: &str, name_type: i32) -> PrincipalName
{
	return PrincipalName { name_type: name_type, name_string: spn_to_service_parts(name) };
}

pub fn spn_to_service_parts(spn: &str) -> Vec<String>
{
	spn.split("/").map(|s| s.to_string()).collect()
}