code wiki / (root) / nx_argon2_g_xvalidate_test.nx

nx_argon2_g_xvalidate_test.nx source

↩ module page · 81 lines · 3672 B

1// nx_argon2_g_xvalidate_test.nx -- cross-validate nx G compression 2// against libargon2 fill_block output on synthetic non-zero inputs. 3// 4// expect_exit: 0 5// 6// Reference output (libargon2 fill_block with X[i]=i*0x0101010101010101, 7// Y[i]=(i+13)*0x0202020202020202; first 4 output u64s): 8// df6567b82708e3df d77187e1ca70e318 25e7e65af95ba78d 4199e724d42d6f39 9// 10// license_tier: ORIGINAL 11 12import "nx_syscalls_x86_64.nx" 13import "nx_argon2_block.nx" 14 15func main() -> i64 { 16 let x: *u8 = sys_mmap(1024) 17 let y: *u8 = sys_mmap(1024) 18 let out: *u8 = sys_mmap(1024) 19 let r_scratch: *i64 = sys_mmap(1024) as *i64 20 let rs_scratch: *i64 = sys_mmap(1024) as *i64 21 let col_tmp: *i64 = sys_mmap(128) as *i64 22 23 // Build synthetic inputs: X[i] = i * 0x0101010101010101, 24 // Y[i] = (i+13) * 0x0202020202020202. 25 var i: i64 = 0 26 while i < 128 { 27 // X[i] = i * 0x0101010101010101 28 let xv: i64 = i * 72340172838076673 // 0x0101010101010101 29 // Write LE. 30 x[i*8 + 0] = (xv & 255) as u8 31 x[i*8 + 1] = ((xv >> 8) & 255) as u8 32 x[i*8 + 2] = ((xv >> 16) & 255) as u8 33 x[i*8 + 3] = ((xv >> 24) & 255) as u8 34 x[i*8 + 4] = ((xv >> 32) & 255) as u8 35 x[i*8 + 5] = ((xv >> 40) & 255) as u8 36 x[i*8 + 6] = ((xv >> 48) & 255) as u8 37 x[i*8 + 7] = ((xv >> 56) & 255) as u8 38 // Y[i] = (i + 13) * 0x0202020202020202 39 let yv: i64 = (i + 13) * 144680345676153346 // 0x0202020202020202 40 y[i*8 + 0] = (yv & 255) as u8 41 y[i*8 + 1] = ((yv >> 8) & 255) as u8 42 y[i*8 + 2] = ((yv >> 16) & 255) as u8 43 y[i*8 + 3] = ((yv >> 24) & 255) as u8 44 y[i*8 + 4] = ((yv >> 32) & 255) as u8 45 y[i*8 + 5] = ((yv >> 40) & 255) as u8 46 y[i*8 + 6] = ((yv >> 48) & 255) as u8 47 y[i*8 + 7] = ((yv >> 56) & 255) as u8 48 i = i + 1 49 } 50 51 if nx_argon2_g(x, y, out, r_scratch, rs_scratch, col_tmp) != NX_A2B_OK { 52 return 1 53 } 54 55 // Expected first 4 u64s (LE): df6567b82708e3df d77187e1ca70e318 56 // 25e7e65af95ba78d 4199e724d42d6f39 57 // Expected bytes (LE): 58 // df 6567b82708e3 -> 0xdf, 0xe3, 0x08, 0x27, 0xb8, 0x67, 0x65, 0xdf 59 // Wait, u64 0xdf6567b82708e3df in LE bytes = df e3 08 27 b8 67 65 df 60 // ... let me write them out: 61 // u64 0xdf6567b82708e3df -> LE bytes: df e3 08 27 b8 67 65 df 62 // u64 0xd77187e1ca70e318 -> LE bytes: 18 e3 70 ca e1 87 71 d7 63 // u64 0x25e7e65af95ba78d -> LE bytes: 8d a7 5b f9 5a e6 e7 25 64 // u64 0x4199e724d42d6f39 -> LE bytes: 39 6f 2d d4 24 e7 99 41 65 let expected: *u8 = sys_mmap(32) 66 expected[0] = 0xdf as u8; expected[1] = 0xe3 as u8; expected[2] = 0x08 as u8; expected[3] = 0x27 as u8 67 expected[4] = 0xb8 as u8; expected[5] = 0x67 as u8; expected[6] = 0x65 as u8; expected[7] = 0xdf as u8 68 expected[8] = 0x18 as u8; expected[9] = 0xe3 as u8; expected[10] = 0x70 as u8; expected[11] = 0xca as u8 69 expected[12] = 0xe1 as u8; expected[13] = 0x87 as u8; expected[14] = 0x71 as u8; expected[15] = 0xd7 as u8 70 expected[16] = 0x8d as u8; expected[17] = 0xa7 as u8; expected[18] = 0x5b as u8; expected[19] = 0xf9 as u8 71 expected[20] = 0x5a as u8; expected[21] = 0xe6 as u8; expected[22] = 0xe7 as u8; expected[23] = 0x25 as u8 72 expected[24] = 0x39 as u8; expected[25] = 0x6f as u8; expected[26] = 0x2d as u8; expected[27] = 0xd4 as u8 73 expected[28] = 0x24 as u8; expected[29] = 0xe7 as u8; expected[30] = 0x99 as u8; expected[31] = 0x41 as u8 74 75 var k: i64 = 0 76 while k < 32 { 77 if out[k] != expected[k] { return 100 + k } 78 k = k + 1 79 } 80 return 0 81}