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