use der_parser::asn1_rs::{BitString, GeneralizedTime};
use std::fmt;
pub use crate::krb5_constants::*;
pub use crate::krb5_errors::*;
#[derive(Debug, PartialEq)]
pub struct Realm(pub String);
#[derive(Debug, PartialEq)]
pub struct PrincipalName {
pub name_type: NameType,
pub name_string: Vec<String>,
}
impl fmt::Display for PrincipalName {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str(&self.name_string.join("/"))
}
}
#[derive(Debug, PartialEq)]
pub struct Ticket<'a> {
pub tkt_vno: u32,
pub realm: Realm,
pub sname: PrincipalName,
pub enc_part: EncryptedData<'a>,
}
#[derive(Debug, PartialEq)]
pub struct EncryptedData<'a> {
pub etype: EncryptionType,
pub kvno: Option<u32>,
pub cipher: &'a [u8],
}
#[derive(Debug, PartialEq)]
pub struct KdcReq<'a> {
pub pvno: u32,
pub msg_type: MessageType,
pub padata: Vec<PAData<'a>>,
pub req_body: KdcReqBody<'a>,
}
#[derive(Debug, PartialEq)]
pub struct KdcReqBody<'a> {
pub kdc_options: BitString<'a>,
pub cname: Option<PrincipalName>,
pub realm: Realm,
pub sname: Option<PrincipalName>,
pub from: Option<GeneralizedTime>,
pub till: GeneralizedTime,
pub rtime: Option<GeneralizedTime>,
pub nonce: u32,
pub etype: Vec<EncryptionType>,
pub addresses: Vec<HostAddress<'a>>,
pub enc_authorization_data: Option<EncryptedData<'a>>,
pub additional_tickets: Vec<Ticket<'a>>,
}
#[derive(Debug, PartialEq)]
pub struct HostAddress<'a> {
pub addr_type: AddressType,
pub address: &'a [u8],
}
#[derive(Debug, PartialEq)]
pub struct KdcRep<'a> {
pub pvno: u32,
pub msg_type: MessageType,
pub padata: Vec<PAData<'a>>,
pub crealm: Realm,
pub cname: PrincipalName,
pub ticket: Ticket<'a>,
pub enc_part: EncryptedData<'a>,
}
#[derive(Debug, PartialEq)]
pub struct KrbError<'a> {
pub pvno: u32,
pub msg_type: MessageType,
pub ctime: Option<GeneralizedTime>,
pub cusec: Option<u32>,
pub stime: GeneralizedTime,
pub susec: u32,
pub error_code: ErrorCode,
pub crealm: Option<Realm>,
pub cname: Option<PrincipalName>,
pub realm: Realm,
pub sname: PrincipalName,
pub etext: Option<String>,
pub edata: Option<&'a [u8]>,
}
#[derive(Debug, PartialEq)]
pub struct PAData<'a> {
pub padata_type: PAType,
pub padata_value: &'a [u8],
}
#[derive(Debug, PartialEq)]
pub struct ApReq<'a> {
pub pvno: u32,
pub msg_type: MessageType,
pub ap_options: BitString<'a>, pub ticket: Ticket<'a>,
pub authenticator: EncryptedData<'a>,
}
#[derive(Debug, PartialEq)]
pub struct ApRep<'a> {
pub pvno: u32,
pub msg_type: MessageType,
pub enc_part: EncryptedData<'a>,
}