From 833a22f8f00308d234d7e2244c3b532bf99b865b Mon Sep 17 00:00:00 2001 From: Heiko Schaefer Date: Wed, 25 Aug 2021 16:42:18 +0200 Subject: [PATCH] Add test to explore cardholder cert functionality --- card-functionality/src/other.rs | 17 ++++++---- card-functionality/src/tests.rs | 59 +++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 7 deletions(-) diff --git a/card-functionality/src/other.rs b/card-functionality/src/other.rs index 03c527f..df183ee 100644 --- a/card-functionality/src/other.rs +++ b/card-functionality/src/other.rs @@ -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!(); } diff --git a/card-functionality/src/tests.rs b/card-functionality/src/tests.rs index 54e5853..c8b434d 100644 --- a/card-functionality/src/tests.rs +++ b/card-functionality/src/tests.rs @@ -385,6 +385,65 @@ pub fn test_private_data( Ok(out) } +pub fn test_cardholder_cert( + ca: &mut CardApp, + _param: &[&str], +) -> Result { + 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],