feat: make API more typesafe
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -26,7 +26,7 @@ checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "shared_memory_heap"
|
name = "shared_memory_heap"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|||||||
26
src/lib.rs
26
src/lib.rs
@@ -16,18 +16,34 @@ static AGENT: LazyLock<Mutex<Agent>> = LazyLock::new(|| {
|
|||||||
Mutex::new(agent)
|
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();
|
let mut agent = AGENT.lock().unwrap();
|
||||||
|
|
||||||
unsafe {
|
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()]);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn x25519(out: &mut SharedPtr, sk: &SharedPtr, pk: &SharedPtr) {
|
(sk, pk)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn x25519<'a>(sk: &X25519PrivKey, pk: &X25519PubKey) -> X25519SharedKey<'a> {
|
||||||
|
let out = X25519SharedKey(SharedPtr::<32>::new().unwrap());
|
||||||
|
|
||||||
let mut agent = AGENT.lock().unwrap();
|
let mut agent = AGENT.lock().unwrap();
|
||||||
|
|
||||||
unsafe {
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user