Add keygen

This commit is contained in:
2024-04-22 10:48:04 +02:00
parent c3b45d7f63
commit ef99cec0b6

View File

@@ -8,13 +8,41 @@ inline fn extract_ipc_id(reg u64 sync_mem) -> reg u64 {
return id; 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; stack u8[8] unused;
reg u64 outptr; reg u64 key_id;
reg u64 spill_sync_mem spill_shared_mem; stack u64 spill_sync_mem spill_shared_mem spill_private_mem;
spill_sync_mem = sync_mem; spill_sync_mem = sync_mem;
spill_shared_mem = shared_mem; spill_shared_mem = shared_mem;
spill_private_mem = private_mem;
while (true) { while (true) {
unused = unused; unused = unused;
@@ -23,11 +51,17 @@ export fn agent_start(reg u64 shared_mem sync_mem) {
sync_mem = spill_sync_mem; sync_mem = spill_sync_mem;
shared_mem = spill_shared_mem; shared_mem = spill_shared_mem;
private_mem = spill_private_mem;
outptr = (u64)[sync_mem + 16]; reg u64 id;
outptr = shared_mem + outptr;
(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); unused = #write(unused, sync_mem);
} }