Compare commits
1 Commits
a0d94c680b
...
test
| Author | SHA1 | Date | |
|---|---|---|---|
| d59c4788d9 |
2
.gitmodules
vendored
2
.gitmodules
vendored
@@ -1,3 +1,3 @@
|
||||
[submodule "libjade"]
|
||||
path = libjade
|
||||
url = https://github.com/formosa-crypto/libjade.git
|
||||
url = https://github.com/Rixxc/libjade.git
|
||||
|
||||
2
libjade
2
libjade
Submodule libjade updated: 6755e21624...43dbe822aa
@@ -1,73 +1,25 @@
|
||||
from Jade require "crypto_scalarmult/curve25519/amd64/mulx/scalarmult.jazz"
|
||||
from Jade require "crypto_scalarmult/curve25519/amd64/mulx/curve25519.jinc"
|
||||
|
||||
inline fn extract_ipc_id(reg u64 sync_mem) -> reg u64 {
|
||||
reg u64 id;
|
||||
|
||||
id = (u64)[sync_mem + 8];
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
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 idptr pkptr;
|
||||
|
||||
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];
|
||||
}
|
||||
|
||||
idptr = (u64)[sync_mem + 16];
|
||||
idptr += shared_mem;
|
||||
|
||||
(u64)[idptr] = key_id;
|
||||
|
||||
pkptr = (u64)[sync_mem + 24];
|
||||
pkptr += shared_mem;
|
||||
|
||||
() = #spill(key_id);
|
||||
|
||||
jade_scalarmult_curve25519_amd64_mulx_base(pkptr, private_mem);
|
||||
|
||||
() = #unspill(key_id);
|
||||
|
||||
return key_id;
|
||||
}
|
||||
|
||||
export fn agent_start(reg u64 shared_mem sync_mem private_mem) {
|
||||
export fn agent_start(reg u64 shared_mem sync_mem) {
|
||||
stack u8[8] unused;
|
||||
reg u64 key_id;
|
||||
reg u64 outptr;
|
||||
reg u64 spill_sync_mem spill_shared_mem;
|
||||
|
||||
key_id = 0;
|
||||
|
||||
() = #spill(shared_mem, sync_mem, private_mem);
|
||||
spill_sync_mem = sync_mem;
|
||||
spill_shared_mem = shared_mem;
|
||||
|
||||
while (true) {
|
||||
unused = unused;
|
||||
() = #unspill(sync_mem);
|
||||
sync_mem = spill_sync_mem;
|
||||
unused = #read(unused, sync_mem);
|
||||
|
||||
() = #unspill(shared_mem, sync_mem, private_mem);
|
||||
|
||||
reg u64 id;
|
||||
sync_mem = spill_sync_mem;
|
||||
shared_mem = spill_shared_mem;
|
||||
|
||||
id = extract_ipc_id(sync_mem);
|
||||
outptr = (u64)[sync_mem + 8];
|
||||
outptr = shared_mem + outptr;
|
||||
|
||||
if (id == 0) {
|
||||
key_id = generate_key(shared_mem, sync_mem, private_mem, key_id);
|
||||
}
|
||||
|
||||
() = #unspill(sync_mem);
|
||||
(u64)[outptr] = 0x1337;
|
||||
|
||||
unused = #write(unused, sync_mem);
|
||||
}
|
||||
|
||||
@@ -15,36 +15,16 @@
|
||||
#include <sys/syscall.h>
|
||||
#include <unistd.h>
|
||||
|
||||
// uint8_t *__jasmin_syscall_randombytes__(uint8_t *_x, uint64_t xlen) {
|
||||
// int i;
|
||||
// uint8_t *x = _x;
|
||||
//
|
||||
// printf("%lx:\n", x);
|
||||
//
|
||||
// for (i = 0; i < xlen; i++) {
|
||||
// printf("%02X", _x[i]);
|
||||
// }
|
||||
// printf("\n");
|
||||
//
|
||||
// return _x;
|
||||
// }
|
||||
//
|
||||
uint8_t* __jasmin_syscall_randombytes__(uint8_t* _x, uint64_t xlen)
|
||||
{
|
||||
uint8_t *__jasmin_syscall_randombytes__(uint8_t *_x, uint64_t xlen) {
|
||||
int i;
|
||||
uint8_t* x = _x;
|
||||
uint8_t *x = _x;
|
||||
|
||||
while (xlen > 0) {
|
||||
if (xlen < 1048576) i = xlen; else i = 1048576;
|
||||
printf("%lx:\n", x);
|
||||
|
||||
i = getrandom(x,i,0);
|
||||
if (i < 1) {
|
||||
sleep(1);
|
||||
continue;
|
||||
}
|
||||
x += i;
|
||||
xlen -= i;
|
||||
for (i = 0; i < xlen; i++) {
|
||||
printf("%02X", _x[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
return _x;
|
||||
}
|
||||
@@ -105,8 +85,9 @@ uint64_t __jasmin_syscall_open__(uint8_t *x, uint64_t xlen) {
|
||||
// }
|
||||
|
||||
uint8_t *__jasmin_syscall_read__(uint8_t *_x, uint64_t xlen, uint64_t fd) {
|
||||
printf("Waiting...\n");
|
||||
uint32_t *addr = (uint32_t *)(uintptr_t)fd;
|
||||
long ret = syscall(SYS_futex, addr, FUTEX_WAIT, 0, NULL, NULL, 0);
|
||||
long ret = syscall(SYS_futex, addr, FUTEX_WAIT, 0x1, NULL, NULL, 0);
|
||||
if (ret == -1) {
|
||||
printf("Agent futex error: %d\n", errno);
|
||||
perror("futex");
|
||||
@@ -117,10 +98,8 @@ uint8_t *__jasmin_syscall_read__(uint8_t *_x, uint64_t xlen, uint64_t fd) {
|
||||
|
||||
uint8_t *__jasmin_syscall_write__(uint8_t *_x, uint64_t xlen, uint64_t fd) {
|
||||
uint32_t *addr = (uint32_t *)(uintptr_t)fd;
|
||||
int woken_up = 0;
|
||||
while (woken_up == 0) {
|
||||
woken_up = syscall(SYS_futex, addr, FUTEX_WAKE, 1, NULL, NULL, 0);
|
||||
}
|
||||
*addr = 1;
|
||||
syscall(SYS_futex, addr, FUTEX_WAKE, 1, NULL, NULL, 0);
|
||||
|
||||
return _x;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user