use crate::card::{Card, Retries};
use crate::error::Result;
use crate::pin::Pin;
use crate::transport::Transmit;
pub const DF: [u8; 10] = [0xD3, 0x92, 0x10, 0x00, 0x31, 0x00, 0x01, 0x01, 0x04, 0x01];
pub mod ef {
pub const KEY_REFERENCE: u16 = 0x0002;
pub const PIN: u16 = 0x001C;
}
#[derive(Debug)]
pub struct JukiAp<'a, T> {
card: &'a mut Card<T>,
}
impl<'a, T: Transmit> JukiAp<'a, T> {
pub fn select(card: &'a mut Card<T>) -> Result<Self> {
card.select_df(&DF)?;
Ok(JukiAp { card })
}
pub fn card(&mut self) -> &mut Card<T> {
self.card
}
pub fn read_record(&mut self, id: u16, record: u8) -> Result<Vec<u8>> {
self.card.select_ef(id)?;
self.card.read_record(record)
}
pub fn verify_pin(&mut self, pin: &Pin) -> Result<()> {
self.card.select_ef(ef::PIN)?;
self.card.verify(pin)
}
pub fn pin_retries(&mut self) -> Result<Retries> {
self.card.select_ef(ef::PIN)?;
self.card.pin_retries()
}
}