Skip to content

Commit d22bec0

Browse files
A6GibKmbilelmoussaoui
authored andcommitted
client: key: Remove impl From<&key> for Value
These methods require allocating and taking a reference in a From is not very idiomatic, instead we use the inner Vec and the implementation of From<Vec<u8>> of zvariant::Array. Note that since Key implements Drop, we cannot just use self.key and we need to take the value out.
1 parent c73ecef commit d22bec0

4 files changed

Lines changed: 10 additions & 15 deletions

File tree

client/src/dbus/api/service.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ impl<'a> Service<'a> {
8888
#[doc(alias = "OpenSession")]
8989
pub async fn open_session(
9090
&self,
91-
client_public_key: Option<&Key>,
91+
client_public_key: Option<Key>,
9292
) -> Result<(Option<Key>, Session<'a>), Error> {
9393
let (algorithm, key): (_, Value<'_>) = match client_public_key {
9494
None => (Algorithm::Plain, zvariant::Str::default().into()),

client/src/dbus/service.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ impl<'a> Service<'a> {
8787
tracing::debug!("Starting an encrypted Secret Service session");
8888
let private_key = Key::generate_private_key()?;
8989
let public_key = Key::generate_public_key(&private_key)?;
90-
let (service_key, session) = service.open_session(Some(&public_key)).await?;
90+
let (service_key, session) = service.open_session(Some(public_key)).await?;
9191
let aes_key = service_key
9292
.map(|service_key| Key::generate_aes_key(&private_key, &service_key))
9393
.transpose()?

client/src/key.rs

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use zeroize::{Zeroize, ZeroizeOnDrop};
2-
use zvariant::Type;
32

43
use crate::{crypto, file};
54

@@ -57,20 +56,16 @@ impl Key {
5756
}
5857
}
5958

60-
impl From<&Key> for zvariant::Value<'_> {
61-
fn from(key: &Key) -> Self {
62-
let mut array = zvariant::Array::new(u8::SIGNATURE);
63-
for byte in key.as_ref() {
64-
array
65-
.append(zvariant::Value::U8(*byte))
66-
.expect("Element of valid type");
67-
}
68-
array.into()
59+
impl From<Key> for zvariant::Value<'static> {
60+
fn from(key: Key) -> Self {
61+
let mut key = key;
62+
let inner: Vec<u8> = std::mem::take(&mut key.key);
63+
zvariant::Array::from(inner).into()
6964
}
7065
}
7166

72-
impl From<&Key> for zvariant::OwnedValue {
73-
fn from(key: &Key) -> Self {
67+
impl From<Key> for zvariant::OwnedValue {
68+
fn from(key: Key) -> Self {
7469
zvariant::Value::from(key).try_to_owned().unwrap()
7570
}
7671
}

server/src/service.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ impl Service {
9797
object_server.at(&path, session).await?;
9898

9999
let service_key = public_key
100-
.map(|k| OwnedValue::from(&k))
100+
.map(OwnedValue::from)
101101
.unwrap_or_else(|| Value::new::<Vec<u8>>(vec![]).try_to_owned().unwrap());
102102

103103
Ok((service_key, path))

0 commit comments

Comments
 (0)