cerbero-lib 0.1.1

Kerberos protocol attacker library
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 };

	PrincipalName { name_type, name_string: name_parts }
}

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

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

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

pub fn new_principal_name(name: &str, name_type: i32) -> PrincipalName
{
	PrincipalName { 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()
}