From 0a815dbbdf0248783b933c0965fe48e5656160c0 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sat, 9 Dec 2023 22:02:31 +0800 Subject: [PATCH] feat: optimize code --- Cargo.toml | 2 +- src/cmd_initpiv.rs | 38 ++++---------------------------------- 2 files changed, 5 insertions(+), 35 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 130f2b7..7dbaa40 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ repository = "https://git.hatter.ink/hatter/tiny-encrypt-rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [features] -default = ["decrypt", "macos", "secure-enclave"] +default = ["decrypt", "macos", "smartcard", "secure-enclave"] decrypt = ["smartcard"] smartcard = ["openpgp-card", "openpgp-card-pcsc", "yubikey"] macos = ["security-framework"] diff --git a/src/cmd_initpiv.rs b/src/cmd_initpiv.rs index f58bf19..f42bddd 100644 --- a/src/cmd_initpiv.rs +++ b/src/cmd_initpiv.rs @@ -7,11 +7,12 @@ use x509_parser::prelude::FromDer; use x509_parser::public_key::RSAPublicKey; use yubikey::Certificate; use yubikey::Key; -use yubikey::piv::{AlgorithmId, RetiredSlotId, SlotId}; +use yubikey::piv::{AlgorithmId, SlotId}; use yubikey::YubiKey; use crate::config::TinyEncryptConfigEnvelop; use crate::spec::TinyEncryptEnvelopType; +use crate::util_piv; #[derive(Debug, Args)] pub struct CmdInitPiv { @@ -28,7 +29,7 @@ const ECC_P384: ObjectIdentifier = ObjectIdentifier::new_unwrap("1.3.132.0.34"); pub fn init_piv(cmd_init_piv: CmdInitPiv) -> XResult<()> { let mut yk = opt_result!(YubiKey::open(), "YubiKey not found: {}"); - let slot_id = get_slot_id(&cmd_init_piv.slot)?; + let slot_id = util_piv::get_slot_id(&cmd_init_piv.slot)?; let slot_id_hex = to_slot_hex(&slot_id); let keys = opt_result!(Key::list(&mut yk), "List keys failed: {}"); @@ -117,41 +118,10 @@ fn get_algorithm_id(public_key_info: &SubjectPublicKeyInfoOwned) -> XResult bool { - get_slot_id(slot).map(|sid| &sid == slot_id).unwrap_or(false) + util_piv::get_slot_id(slot).map(|sid| &sid == slot_id).unwrap_or(false) } fn to_slot_hex(slot: &SlotId) -> String { let slot_id: u8 = (*slot).into(); format!("{:x}", slot_id) } - -fn get_slot_id(slot: &str) -> XResult { - let slot_lower = slot.to_lowercase(); - Ok(match slot_lower.as_str() { - "9a" | "auth" | "authentication" => SlotId::Authentication, - "9c" | "sign" | "signature" => SlotId::Signature, - "9d" | "keym" | "keymanagement" => SlotId::KeyManagement, - "9e" | "card" | "cardauthentication" => SlotId::CardAuthentication, - "r1" | "82" => SlotId::Retired(RetiredSlotId::R1), - "r2" | "83" => SlotId::Retired(RetiredSlotId::R2), - "r3" | "84" => SlotId::Retired(RetiredSlotId::R3), - "r4" | "85" => SlotId::Retired(RetiredSlotId::R4), - "r5" | "86" => SlotId::Retired(RetiredSlotId::R5), - "r6" | "87" => SlotId::Retired(RetiredSlotId::R6), - "r7" | "88" => SlotId::Retired(RetiredSlotId::R7), - "r8" | "89" => SlotId::Retired(RetiredSlotId::R8), - "r9" | "8a" => SlotId::Retired(RetiredSlotId::R9), - "r10" | "8b" => SlotId::Retired(RetiredSlotId::R10), - "r11" | "8c" => SlotId::Retired(RetiredSlotId::R11), - "r12" | "8d" => SlotId::Retired(RetiredSlotId::R12), - "r13" | "8e" => SlotId::Retired(RetiredSlotId::R13), - "r14" | "8f" => SlotId::Retired(RetiredSlotId::R14), - "r15" | "90" => SlotId::Retired(RetiredSlotId::R15), - "r16" | "91" => SlotId::Retired(RetiredSlotId::R16), - "r17" | "92" => SlotId::Retired(RetiredSlotId::R17), - "r18" | "93" => SlotId::Retired(RetiredSlotId::R18), - "r19" | "94" => SlotId::Retired(RetiredSlotId::R19), - "r20" | "95" => SlotId::Retired(RetiredSlotId::R20), - _ => return simple_error!("Unknown slot: {}", slot), - }) -}