From 724be38e4f02e55573331f09f2b5f54f61a94a1e Mon Sep 17 00:00:00 2001 From: Heiko Schaefer Date: Tue, 5 Sep 2023 10:47:04 +0200 Subject: [PATCH] openpgp-card: in private_use_do accessors, don't panic, but return error for illegal num. Fix: set_private_use_do() doesn't return data. --- openpgp-card/src/lib.rs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/openpgp-card/src/lib.rs b/openpgp-card/src/lib.rs index bf085a2..9633b68 100644 --- a/openpgp-card/src/lib.rs +++ b/openpgp-card/src/lib.rs @@ -634,7 +634,12 @@ impl<'a> Transaction<'a> { pub fn private_use_do(&mut self, num: u8) -> Result, Error> { log::info!("OpenPgpTransaction: private_use_do"); - assert!((1..=4).contains(&num)); + if !(1..=4).contains(&num) { + return Err(Error::UnsupportedFeature(format!( + "Illegal Private Use DO num '{}'", + num, + ))); + } let cmd = commands::private_use_do(num); self.send_command(cmd, true)?.try_into() @@ -1049,15 +1054,18 @@ impl<'a> Transaction<'a> { /// Access condition: /// - 1/3 need PW1 (82) /// - 2/4 need PW3 - pub fn set_private_use_do(&mut self, num: u8, data: Vec) -> Result, Error> { + pub fn set_private_use_do(&mut self, num: u8, data: Vec) -> Result<(), Error> { log::info!("OpenPgpTransaction: set_private_use_do"); - assert!((1..=4).contains(&num)); + if !(1..=4).contains(&num) { + return Err(Error::UnsupportedFeature(format!( + "Illegal Private Use DO num '{}'", + num, + ))); + } let cmd = commands::put_private_use_do(num, data); - let resp = self.send_command(cmd, true)?; - - Ok(resp.data()?.to_vec()) + self.send_command(cmd, true)?.try_into() } pub fn set_login(&mut self, login: &[u8]) -> Result<(), Error> {