feat: patch libjade and use randomized functions

This commit is contained in:
2024-08-28 09:57:12 +02:00
parent 6bd0a265f8
commit 75ad1420fd
4 changed files with 171 additions and 31 deletions

View File

@@ -20,26 +20,15 @@ inline fn extract_ipc_id(reg u64 sync_mem) -> reg u64 {
}
inline fn generate_keypair(reg u64 shared_mem sync_mem private_mem, stack u64 key_id) -> stack u64 {
inline int i;
stack u8[2*KYBER_SYMBYTES] coins;
reg u64 skptr idptr pkptr flag num_bytes;
while {
flag = 0;
coins, num_bytes = #randombytes(coins, flag);
} (num_bytes != 2*KYBER_SYMBYTES)
reg u64 skptr idptr pkptr;
skptr = key_id * MLKEM_SK_SIZE;
skptr += private_mem;
for i=0 to (2*KYBER_SYMBYTES)/8 {
(u64)[skptr + i * 8] = coins[u64 i];
}
idptr = extract_nth_ptr(sync_mem, shared_mem, 0);
pkptr = extract_nth_ptr(sync_mem, shared_mem, 1);
jade_kem_kyber_kyber768_amd64_avx2_keypair_derand(pkptr, skptr, skptr);
jade_kem_kyber_kyber768_amd64_avx2_keypair(pkptr, skptr);
(u64)[idptr] = key_id;
@@ -49,24 +38,13 @@ inline fn generate_keypair(reg u64 shared_mem sync_mem private_mem, stack u64 ke
}
inline fn encapsulate(reg u64 shared_mem sync_mem) {
inline int i;
reg u64 ssptr ctptr pkptr flag num_bytes;
stack u8[KYBER_SYMBYTES] coins;
while {
flag = 0;
coins, num_bytes = #randombytes(coins, flag);
} (num_bytes != KYBER_SYMBYTES)
reg u64 ssptr ctptr pkptr;
ctptr = extract_nth_ptr(sync_mem, shared_mem, 0);
ssptr = extract_nth_ptr(sync_mem, shared_mem, 1);
pkptr = extract_nth_ptr(sync_mem, shared_mem, 2);
for i=0 to KYBER_SYMBYTES/8 {
(u64)[ssptr + i * 8] = coins[u64 i];
}
jade_kem_kyber_kyber768_amd64_avx2_enc_derand(ctptr, ssptr, pkptr, ssptr);
jade_kem_kyber_kyber768_amd64_avx2_enc(ctptr, ssptr, pkptr);
}
inline fn decapsulate(reg u64 shared_mem sync_mem private_mem) {