feat: make API more typesafe

This commit is contained in:
2024-04-26 13:48:37 +02:00
parent aaae96bdc6
commit dcc698c9f9
2 changed files with 21 additions and 5 deletions

View File

@@ -16,18 +16,34 @@ static AGENT: LazyLock<Mutex<Agent>> = 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
}