use super::encrypted_data::EncryptedData;
use super::host_addresses::HostAddresses;
use super::kdc_options::KdcOptions;
use super::kerberos_time::KerberosTime;
use super::principal_name::PrincipalName;
use super::realm::Realm;
use super::tagged_ticket::TaggedTicket;
use der::Sequence;
#[derive(Debug, Eq, PartialEq, Sequence)]
pub(crate) struct KdcReqBody {
#[asn1(context_specific = "0")]
pub(crate) kdc_options: KdcOptions,
#[asn1(context_specific = "1", optional = "true")]
pub(crate) cname: Option<PrincipalName>,
#[asn1(context_specific = "2")]
pub(crate) realm: Realm,
#[asn1(context_specific = "3", optional = "true")]
pub(crate) sname: Option<PrincipalName>,
#[asn1(context_specific = "4", optional = "true")]
pub(crate) from: Option<KerberosTime>,
#[asn1(context_specific = "5")]
pub(crate) till: KerberosTime,
#[asn1(context_specific = "6", optional = "true")]
pub(crate) rtime: Option<KerberosTime>,
#[asn1(context_specific = "7")]
pub(crate) nonce: i32,
#[asn1(context_specific = "8")]
pub(crate) etype: Vec<i32>,
#[asn1(context_specific = "9", optional = "true")]
pub(crate) addresses: Option<HostAddresses>,
#[asn1(context_specific = "10", optional = "true")]
pub(crate) enc_authorization_data: Option<EncryptedData>,
#[asn1(context_specific = "11", optional = "true")]
pub(crate) additional_tickets: Option<Vec<TaggedTicket>>,
}
#[cfg(test)]
mod tests {
use super::KdcReqBody;
use der::Decode;
#[test]
fn krb_kdc_req_heimdal_macos() {
let _ = tracing_subscriber::fmt::try_init();
let req_body_bytes = hex::decode(concat!(
"3079",
"a007",
"03050000000000",
"a215",
"1b134445562e4649525354594541522e49442e4155",
"a32c",
"302a",
"a003",
"020101",
"a123",
"3021",
"1b04",
"63696673",
"1b19",
"66696c65732e6465762e6669727374796561722e69642e6175",
"a511",
"180f31393730303130313030303030305a",
"a706",
"02",
"04",
"cd5c0274",
"a80e",
"300c",
"02",
"01",
"12",
"02",
"01",
"11",
"02",
"01",
"10",
"02",
"01",
"17",
))
.unwrap();
let req_body = der::Any::from_der(&req_body_bytes).unwrap();
let req_body = req_body.decode_as::<KdcReqBody>().unwrap();
tracing::trace!(?req_body);
}
}