Add keygen
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user