openpgp_card_tool_git/
lib.rs

1// SPDX-FileCopyrightText: Wiktor Kwapisiewicz <wiktor@metacode.biz>
2// SPDX-FileCopyrightText: Heiko Schaefer <heiko@schaefer.name>
3// SPDX-License-Identifier: MIT OR Apache-2.0
4
5mod card;
6mod notify;
7mod sign;
8mod verify;
9
10use std::path::PathBuf;
11
12pub use card::set_pin;
13use rpgpie::certificate::Certificate;
14use rpgpie_certificate_store::Store;
15pub use sign::sign;
16pub use verify::verify;
17
18#[derive(Copy, Clone)]
19pub enum Armor {
20    NoArmor,
21    Armor,
22}
23
24pub(crate) fn open_store(
25    cert_store_path: Option<&PathBuf>,
26) -> Result<Store, rpgpie_certificate_store::Error> {
27    match cert_store_path {
28        None => Ok(Store::new()?),
29        Some(cert_store) => Ok(Store::with_base_dir(cert_store)?),
30    }
31}
32
33/// Import a certificate into a cert-d store.
34pub fn import_cert(
35    cert_file: &PathBuf,
36    cert_store_path: Option<&PathBuf>,
37) -> Result<(), Box<dyn std::error::Error>> {
38    let store = open_store(cert_store_path)?;
39
40    // FIXME: we could make this more robust
41    let certs = Certificate::load(&mut std::fs::File::open(cert_file)?)?;
42    for cert in certs {
43        store.insert(&cert)?;
44    }
45
46    Ok(())
47}