mirror of
https://github.com/eiskasten/wc-beacon.git
synced 2026-09-08 12:25:08 -05:00
Implement pcd convenience functions
This commit is contained in:
26
src/pcd.rs
26
src/pcd.rs
@@ -48,10 +48,26 @@ impl<'a> TryFrom<&'a [u8]> for PCD<Raw> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> TryFrom<&'a [u8]> for PCD<Encrypted> {
|
||||
type Error = String;
|
||||
|
||||
fn try_from(value: &'a [u8]) -> Result<Self, Self::Error> {
|
||||
let sized_value: [u8; PCD_EXTENDED_LENGTH] = <[u8; PCD_EXTENDED_LENGTH]>::try_from(value).map_err(|_| format!("PCD size needs to be {}, but was: {}", PCD_EXTENDED_LENGTH, value.len()))?;
|
||||
Ok(PCD { state: Encrypted { data: sized_value } })
|
||||
}
|
||||
}
|
||||
|
||||
impl PCD<Partitioned> {
|
||||
pub fn header(&self) -> PCDHeader {
|
||||
self.state.header
|
||||
}
|
||||
pub fn data(&self) -> Vec<u8> {
|
||||
[
|
||||
self.state.pgt.as_slice(),
|
||||
&self.state.header,
|
||||
&self.state.card_data,
|
||||
].concat()
|
||||
}
|
||||
}
|
||||
|
||||
impl From<PCD<Raw>> for PCD<Partitioned> {
|
||||
@@ -110,6 +126,16 @@ impl PCD<Extended> {
|
||||
let sized_data: [u8; PCD_EXTENDED_LENGTH] = <[u8; PCD_EXTENDED_LENGTH]>::try_from(imm_data).map_err(|_| format!("Encrypted data length is {} instead of {}", data.len(), PCD_LENGTH))?;
|
||||
Ok(PCD::new(sized_data))
|
||||
}
|
||||
|
||||
pub fn simplify(self) -> PCD<Partitioned> {
|
||||
PCD {
|
||||
state: Partitioned {
|
||||
pgt: self.state.pgt,
|
||||
header: self.state.header,
|
||||
card_data: self.state.card_data,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl PCD<Encrypted> {
|
||||
|
||||
Reference in New Issue
Block a user