From dcc698c9f94578a4e1d9601fabf712f882bcc296 Mon Sep 17 00:00:00 2001 From: Aaron Kaiser Date: Fri, 26 Apr 2024 13:48:37 +0200 Subject: [PATCH] feat: make API more typesafe --- Cargo.lock | 2 +- src/lib.rs | 24 ++++++++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 12e3936..f991a86 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -26,7 +26,7 @@ checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "shared_memory_heap" version = "0.1.0" -source = "git+https://gitea.rixxc.de/rixxc/shared_memory_heap.git#e649e2b59522f6a0ca6f96968d429fa79a1a30da" +source = "git+https://gitea.rixxc.de/rixxc/shared_memory_heap.git#5cd37dfc93aa9bc44df47571396dff70d773fcb2" dependencies = [ "libc", ] diff --git a/src/lib.rs b/src/lib.rs index 645e5bc..d58a80c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,18 +16,34 @@ static AGENT: LazyLock> = LazyLock::new(|| { Mutex::new(agent) }); -pub fn x25519_keygen(keyid: &mut SharedPtr, pk: &mut SharedPtr) { +#[derive(Debug)] +pub struct X25519PrivKey<'a>(SharedPtr<'a, 8>); +#[derive(Debug)] +pub struct X25519PubKey<'a>(SharedPtr<'a, 32>); +#[derive(Debug)] +pub struct X25519SharedKey<'a>(SharedPtr<'a, 32>); + +pub fn x25519_keygen<'a>() -> (X25519PrivKey<'a>, X25519PubKey<'a>) { + let sk = X25519PrivKey(SharedPtr::<8>::new().unwrap()); + let pk = X25519PubKey(SharedPtr::<32>::new().unwrap()); + let mut agent = AGENT.lock().unwrap(); unsafe { - agent.perform_ipc_call(0, &[keyid.get_offset(), pk.get_offset()]); + agent.perform_ipc_call(0, &[sk.0.get_offset(), pk.0.get_offset()]); } + + (sk, pk) } -pub fn x25519(out: &mut SharedPtr, sk: &SharedPtr, pk: &SharedPtr) { +pub fn x25519<'a>(sk: &X25519PrivKey, pk: &X25519PubKey) -> X25519SharedKey<'a> { + let out = X25519SharedKey(SharedPtr::<32>::new().unwrap()); + let mut agent = AGENT.lock().unwrap(); unsafe { - agent.perform_ipc_call(1, &[out.get_offset(), sk.get_offset(), pk.get_offset()]); + agent.perform_ipc_call(1, &[out.0.get_offset(), sk.0.get_offset(), pk.0.get_offset()]); } + + out }