use super::{AtcaStatus, AteccDevice};
use super::ATCA_ATECC_SLOTS_COUNT;
impl AteccDevice {
pub(crate) fn lock_config_zone(&self) -> AtcaStatus {
AtcaStatus::from(unsafe {
let _guard = self
.api_mutex
.lock()
.expect("Could not lock atcab API mutex");
cryptoauthlib_sys::atcab_lock_config_zone()
})
}
pub(crate) fn lock_data_zone(&self) -> AtcaStatus {
if !self.config_zone_locked {
return AtcaStatus::AtcaNotLocked;
}
AtcaStatus::from(unsafe {
let _guard = self
.api_mutex
.lock()
.expect("Could not lock atcab API mutex");
cryptoauthlib_sys::atcab_lock_data_zone()
})
}
pub(crate) fn lock_slot(&self, slot_id: u8) -> AtcaStatus {
if !(self.config_zone_locked && self.data_zone_locked) {
return AtcaStatus::AtcaNotLocked;
}
if slot_id >= ATCA_ATECC_SLOTS_COUNT {
return AtcaStatus::AtcaInvalidId;
}
if !self.slots[slot_id as usize].config.lockable {
return AtcaStatus::AtcaBadParam;
}
AtcaStatus::from(unsafe {
let _guard = self
.api_mutex
.lock()
.expect("Could not lock atcab API mutex");
cryptoauthlib_sys::atcab_lock_data_slot(slot_id as u16)
})
}
pub(crate) fn load_config_into_chip(&self, config: &[u8]) -> AtcaStatus {
if self.config_zone_locked {
return AtcaStatus::AtcaConfigZoneLocked;
}
if config.len() != self.get_config_buffer_size() {
return AtcaStatus::AtcaInvalidSize;
}
AtcaStatus::from(unsafe {
let _guard = self
.api_mutex
.lock()
.expect("Could not lock atcab API mutex");
cryptoauthlib_sys::atcab_write_config_zone(config.as_ptr())
})
} }