Merge branch 'Prezu/login_data' into 'main'

Added login data

See merge request openpgp-card/openpgp-card!37
This commit is contained in:
Heiko 2023-08-17 09:03:33 +00:00
commit 5f00bc87aa
4 changed files with 45 additions and 0 deletions

View file

@ -40,6 +40,10 @@ fn main() -> Result<()> {
} }
}; };
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 { for key_file in &key_files {
// upload keys // upload keys
print!("Upload key '{key_file}'"); print!("Upload key '{key_file}'");

View file

@ -352,6 +352,22 @@ pub fn test_set_user_data(pgp: &mut OpenPgp, _param: &[&str]) -> Result<TestOutp
Ok(vec![]) Ok(vec![])
} }
pub fn test_set_login_data(pgp: &mut OpenPgp, _params: &[&str]) -> Result<TestOutput, TestError> {
let mut pgpt = pgp.transaction()?;
pgpt.verify_pw3(b"12345678")?;
let test_login = b"someone@somewhere.com";
pgpt.set_login(test_login)?;
// Read the previously set login data
let read_login_data = pgpt.login_data()?;
assert_eq!(read_login_data, test_login.to_vec());
Ok(vec![])
}
pub fn test_private_data(pgp: &mut OpenPgp, _param: &[&str]) -> Result<TestOutput, TestError> { pub fn test_private_data(pgp: &mut OpenPgp, _param: &[&str]) -> Result<TestOutput, TestError> {
let mut pgpt = pgp.transaction()?; let mut pgpt = pgp.transaction()?;

View file

@ -47,6 +47,11 @@ pub(crate) fn url() -> Command {
get_data(Tags::Url) get_data(Tags::Url)
} }
/// GET DO "Login Data"
pub(crate) fn login_data() -> Command {
get_data(Tags::LoginData)
}
/// GET DO "Cardholder related data" /// GET DO "Cardholder related data"
pub(crate) fn cardholder_related_data() -> Command { pub(crate) fn cardholder_related_data() -> Command {
get_data(Tags::CardholderRelatedData) get_data(Tags::CardholderRelatedData)
@ -131,6 +136,11 @@ pub(crate) fn put_private_use_do(num: u8, data: Vec<u8>) -> Command {
} }
} }
/// PUT DO Login Data
pub(crate) fn put_login_data(login_data: Vec<u8>) -> Command {
put_data(Tags::LoginData, login_data)
}
/// PUT DO Name /// PUT DO Name
pub(crate) fn put_name(name: Vec<u8>) -> Command { pub(crate) fn put_name(name: Vec<u8>) -> Command {
put_data(Tags::Name, name) put_data(Tags::Name, name)

View file

@ -110,6 +110,15 @@ impl<'a> OpenPgpTransaction<'a> {
Ok(resp.data()?.to_vec()) Ok(resp.data()?.to_vec())
} }
/// Get Login Data (5e)
pub fn login_data(&mut self) -> Result<Vec<u8>, Error> {
log::info!("OpenPgpTransaction: login_data");
let resp = apdu::send_command(self.tx(), commands::login_data(), true)?;
Ok(resp.data()?.to_vec())
}
/// Get cardholder related data (65) /// Get cardholder related data (65)
pub fn cardholder_related_data(&mut self) -> Result<CardholderRelatedData, Error> { pub fn cardholder_related_data(&mut self) -> Result<CardholderRelatedData, Error> {
log::info!("OpenPgpTransaction: cardholder_related_data"); log::info!("OpenPgpTransaction: cardholder_related_data");
@ -717,6 +726,12 @@ impl<'a> OpenPgpTransaction<'a> {
Ok(resp.data()?.to_vec()) Ok(resp.data()?.to_vec())
} }
pub fn set_login(&mut self, login: &[u8]) -> Result<(), Error> {
log::info!("OpenPgpTransaction: set_login");
let put_login_data = commands::put_login_data(login.to_vec());
apdu::send_command(self.tx(), put_login_data, false)?.try_into()
}
pub fn set_name(&mut self, name: &[u8]) -> Result<(), Error> { pub fn set_name(&mut self, name: &[u8]) -> Result<(), Error> {
log::info!("OpenPgpTransaction: set_name"); log::info!("OpenPgpTransaction: set_name");