Add test to explore cardholder cert functionality

This commit is contained in:
Heiko Schaefer 2021-08-25 16:42:18 +02:00
parent 39f48bf13b
commit 833a22f8f0
2 changed files with 69 additions and 7 deletions

View file

@ -21,12 +21,12 @@ fn main() -> Result<()> {
//
// panic!();
println!("Caps");
let _ = run_test(&mut card, test_print_caps, &[])?;
// println!("Caps");
// let _ = run_test(&mut card, test_print_caps, &[])?;
// continue; // only print caps
// println!("Reset");
// let _ = run_test(&mut card, test_reset, &[])?;
println!("Reset");
let _ = run_test(&mut card, test_reset, &[])?;
// println!("Algo info");
// let _ = run_test(&mut card, test_print_algo_info, &[])?;
@ -44,10 +44,13 @@ fn main() -> Result<()> {
// let pw_out = run_test(&mut card, test_pw_status, &[])?;
// println!(" {:x?}", pw_out);
print!("Private data");
let priv_out = run_test(&mut card, test_private_data, &[])?;
println!(" {:x?}", priv_out);
// print!("Private data");
// let priv_out = run_test(&mut card, test_private_data, &[])?;
// println!(" {:x?}", priv_out);
print!("Cardholder Cert");
let cardh_out = run_test(&mut card, test_cardholder_cert, &[])?;
println!(" {:x?}", cardh_out);
println!();
}

View file

@ -385,6 +385,65 @@ pub fn test_private_data(
Ok(out)
}
pub fn test_cardholder_cert(
ca: &mut CardApp,
_param: &[&str],
) -> Result<TestOutput, TestError> {
let mut out = vec![];
println!();
match ca.get_cardholder_certificate() {
Ok(res) => out
.push(TestResult::Text(format!("got cert {:x?}", res.get_data()))),
Err(e) => {
out.push(TestResult::Text(format!(
"get_cardholder_certificate failed: {:?}",
e
)));
return Ok(out);
}
};
ca.verify_pw3("12345678")?;
let data = "Foo bar baz!".as_bytes();
match ca.set_cardholder_certificate(data.to_vec()) {
Ok(resp) => out.push(TestResult::Text("set cert ok".to_string())),
Err(e) => {
out.push(TestResult::Text(format!(
"set_cardholder_certificate: {:?}",
e
)));
return Ok(out);
}
}
let res = ca.get_cardholder_certificate()?;
out.push(TestResult::Text("get cert ok".to_string()));
if res.get_data() != data {
out.push(TestResult::Text(format!(
"get after set doesn't match original data: {:x?}",
data
)));
return Ok(out);
};
// try using slot 2
match ca.select_data(2, &[0x7F, 0x21]) {
Ok(res) => out.push(TestResult::Text("select_data ok".to_string())),
Err(e) => {
out.push(TestResult::Text(format!("select_data: {:?}", e)));
return Ok(out);
}
}
Ok(out)
}
pub fn test_pw_status(
ca: &mut CardApp,
_param: &[&str],