Implemented keygen and x25519 for agent
This commit is contained in:
@@ -1,5 +1,14 @@
|
|||||||
from Jade require "crypto_scalarmult/curve25519/amd64/mulx/scalarmult.jazz"
|
from Jade require "crypto_scalarmult/curve25519/amd64/mulx/scalarmult.jazz"
|
||||||
|
|
||||||
|
inline fn extract_nth_ptr(reg u64 sync_mem shared_mem, inline int i) -> reg u64 {
|
||||||
|
reg u64 p;
|
||||||
|
|
||||||
|
p = (u64)[sync_mem + (16 + i * 8)];
|
||||||
|
p += shared_mem;
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
inline fn extract_ipc_id(reg u64 sync_mem) -> reg u64 {
|
inline fn extract_ipc_id(reg u64 sync_mem) -> reg u64 {
|
||||||
reg u64 id;
|
reg u64 id;
|
||||||
|
|
||||||
@@ -8,7 +17,7 @@ inline fn extract_ipc_id(reg u64 sync_mem) -> reg u64 {
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fn generate_key(reg u64 shared_mem sync_mem private_mem key_id) -> reg u64 {
|
inline fn generate_key(reg u64 shared_mem sync_mem private_mem, stack u64 key_id) -> stack u64 {
|
||||||
inline int i;
|
inline int i;
|
||||||
stack u8[32] key;
|
stack u8[32] key;
|
||||||
reg u64 addr idptr pkptr;
|
reg u64 addr idptr pkptr;
|
||||||
@@ -35,18 +44,28 @@ inline fn generate_key(reg u64 shared_mem sync_mem private_mem key_id) -> reg u6
|
|||||||
pkptr = (u64)[sync_mem + 24];
|
pkptr = (u64)[sync_mem + 24];
|
||||||
pkptr += shared_mem;
|
pkptr += shared_mem;
|
||||||
|
|
||||||
() = #spill(key_id);
|
|
||||||
|
|
||||||
jade_scalarmult_curve25519_amd64_mulx_base(pkptr, private_mem);
|
jade_scalarmult_curve25519_amd64_mulx_base(pkptr, private_mem);
|
||||||
|
|
||||||
() = #unspill(key_id);
|
|
||||||
|
|
||||||
return key_id;
|
return key_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline fn x25519(reg u64 shared_mem sync_mem private_mem) {
|
||||||
|
reg u64 outptr idptr pkptr keyptr;
|
||||||
|
stack u64 keyid;
|
||||||
|
|
||||||
|
outptr = extract_nth_ptr(sync_mem, shared_mem, 0);
|
||||||
|
idptr = extract_nth_ptr(sync_mem, shared_mem, 1);
|
||||||
|
pkptr = extract_nth_ptr(sync_mem, shared_mem, 2);
|
||||||
|
|
||||||
|
keyid = (u64)[idptr];
|
||||||
|
keyptr = private_mem + keyid;
|
||||||
|
|
||||||
|
jade_scalarmult_curve25519_amd64_mulx(outptr, keyptr, pkptr);
|
||||||
|
}
|
||||||
|
|
||||||
export fn agent_start(reg u64 shared_mem sync_mem private_mem) {
|
export fn agent_start(reg u64 shared_mem sync_mem private_mem) {
|
||||||
stack u8[8] unused;
|
stack u8[8] unused;
|
||||||
reg u64 key_id;
|
stack u64 key_id;
|
||||||
|
|
||||||
key_id = 0;
|
key_id = 0;
|
||||||
|
|
||||||
@@ -60,11 +79,14 @@ export fn agent_start(reg u64 shared_mem sync_mem private_mem) {
|
|||||||
() = #unspill(shared_mem, sync_mem, private_mem);
|
() = #unspill(shared_mem, sync_mem, private_mem);
|
||||||
|
|
||||||
reg u64 id;
|
reg u64 id;
|
||||||
|
|
||||||
id = extract_ipc_id(sync_mem);
|
id = extract_ipc_id(sync_mem);
|
||||||
|
|
||||||
if (id == 0) {
|
if (id == 0) {
|
||||||
key_id = generate_key(shared_mem, sync_mem, private_mem, key_id);
|
key_id = generate_key(shared_mem, sync_mem, private_mem, key_id);
|
||||||
|
} else {
|
||||||
|
if (id == 1) {
|
||||||
|
x25519(shared_mem, sync_mem, private_mem);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
() = #unspill(sync_mem);
|
() = #unspill(sync_mem);
|
||||||
|
|||||||
Reference in New Issue
Block a user