use minipgp6_lock::unlock;
use minipgp6_packet::{body::secret_key::SecretKey, unlocked::UnlockedSoftwareKey};
pub fn is_unlocked(key: &SecretKey) -> Option<UnlockedSoftwareKey<'_>> {
if !key.is_locked() {
unlock(key, None).ok()
} else {
None
}
}
pub fn try_unlock_with_password<'a>(
key: &'a SecretKey,
password: &[u8],
) -> Option<UnlockedSoftwareKey<'a>> {
try_unlock_with_passwords(key, &[password])
}
pub fn try_unlock_with_passwords<'a>(
key: &'a SecretKey,
passwords: &[&[u8]],
) -> Option<UnlockedSoftwareKey<'a>> {
if let Some(unlocked) = is_unlocked(key) {
Some(unlocked)
} else {
for password in passwords {
if let Ok(unlocked) = unlock(key, Some(password)) {
return Some(unlocked);
}
}
None
}
}