openpgp-card/card-functionality/src/import.rs
Patryk Cisek 61ab492d9c
Added login data
Added ability to read and set login data field.
2023-08-16 18:41:27 -07:00

88 lines
2.5 KiB
Rust

// SPDX-FileCopyrightText: 2021 Heiko Schaefer <heiko@schaefer.name>
// SPDX-License-Identifier: MIT OR Apache-2.0
use std::str::FromStr;
use anyhow::Result;
use card_functionality::cards::TestConfig;
use card_functionality::tests::*;
use card_functionality::util;
use sequoia_openpgp::Cert;
fn main() -> Result<()> {
env_logger::init();
let args: Vec<String> = std::env::args().collect();
let config = if args.len() <= 1 {
TestConfig::load("config/test-cards.toml")?
} else {
TestConfig::load(&args[1])?
};
let cards = config.into_cardapps();
for mut card in cards {
println!("** Run tests on card '{}' **", card.get_name());
println!("Reset");
let _ = run_test(&mut card, test_reset, &[])?;
print!("Set user data");
let userdata_out = run_test(&mut card, test_set_user_data, &[])?;
println!(" {userdata_out:x?}");
let key_files = {
let config = card.get_config();
if let Some(import) = &config.import {
import.clone()
} else {
vec![]
}
};
println!("Set login data");
let login_data_out = run_test(&mut card, test_set_login_data, &[])?;
println!(" {login_data_out:x?}");
for key_file in &key_files {
// upload keys
print!("Upload key '{key_file}'");
let upload_res = run_test(&mut card, test_upload_keys, &[key_file]);
if let Err(TestError::KeyUploadError(_file, err)) = &upload_res {
// The card doesn't support this key type, so skip to the
// next key - don't try to decrypt/sign for this key.
println!(" => Upload failed ({err:?}), skip tests");
continue;
}
let upload_out = upload_res?;
println!(" {upload_out:x?}");
let key = std::fs::read_to_string(key_file).expect("Unable to read ciphertext");
// decrypt
print!(" Decrypt");
let c = Cert::from_str(&key)?;
let ciphertext = util::encrypt_to("Hello world!\n", &c)?;
let dec_out = run_test(&mut card, test_decrypt, &[&key, &ciphertext])?;
println!(" {dec_out:x?}");
// sign
print!(" Sign");
let sign_out = run_test(&mut card, test_sign, &[&key])?;
println!(" {sign_out:x?}");
}
// FIXME: import key with password
println!();
}
Ok(())
}