From ef99cec0b61dc7553e26b1a7a92c8fdf2204f3d2 Mon Sep 17 00:00:00 2001 From: Aaron Kaiser Date: Mon, 22 Apr 2024 10:48:04 +0200 Subject: [PATCH] Add keygen --- src/agent.jazz | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/src/agent.jazz b/src/agent.jazz index da52bce..b560b5e 100644 --- a/src/agent.jazz +++ b/src/agent.jazz @@ -8,13 +8,41 @@ inline fn extract_ipc_id(reg u64 sync_mem) -> reg u64 { return id; } -export fn agent_start(reg u64 shared_mem sync_mem) { +inline fn generate_key(reg u64 shared_mem sync_mem private_mem key_id) -> reg u64 { + inline int i; + stack u8[32] key; + reg u64 addr outptr; + + key = #randombytes(key); + key[0] &= 248; + key[31] &= 127; + key[31] |= 64; + + key_id += 1; + + addr = key_id * 32; + addr += private_mem; + + for i=0 to 4 { + (u64)[private_mem + i * 8] = key[u64 i]; + } + + outptr = (u64)[sync_mem + 16]; + outptr += shared_mem; + + (u64)[outptr] = key_id; + + return key_id; +} + +export fn agent_start(reg u64 shared_mem sync_mem private_mem) { stack u8[8] unused; - reg u64 outptr; - reg u64 spill_sync_mem spill_shared_mem; + reg u64 key_id; + stack u64 spill_sync_mem spill_shared_mem spill_private_mem; spill_sync_mem = sync_mem; spill_shared_mem = shared_mem; + spill_private_mem = private_mem; while (true) { unused = unused; @@ -23,11 +51,17 @@ export fn agent_start(reg u64 shared_mem sync_mem) { sync_mem = spill_sync_mem; shared_mem = spill_shared_mem; + private_mem = spill_private_mem; - outptr = (u64)[sync_mem + 16]; - outptr = shared_mem + outptr; + reg u64 id; - (u64)[outptr] = 0x1337; + id = extract_ipc_id(sync_mem); + + if (id == 0) { + key_id = generate_key(shared_mem, sync_mem, private_mem, key_id); + } + + sync_mem = spill_sync_mem; unused = #write(unused, sync_mem); }