code wiki / (root) / nx_poly1305_pure_test.nx

nx_poly1305_pure_test.nx source

↩ module page · 47 lines · 1836 B

1// nx_poly1305_pure_test.nx -- RV64 KAT for nx_poly1305_pure.nx. 2// 3// Same RFC 8439 ยง2.5.2 vector as the x86_64 smoke; runs through 4// qemu-riscv64 to check whether the failure is backend-specific. 5// 6// license_tier: ORIGINAL 7 8import "nx_syscalls.nx" 9import "nx_arena_types.nx" 10import "nx_poly1305_pure.nx" 11 12func main() -> i64 { 13 let backing: *u8 = sys_mmap(4096) 14 let a_raw: *u8 = sys_mmap(64) 15 let a: *NxArena = a_raw as *NxArena 16 if nx_arena_init(a, backing, 4096) != 0 { return 1 } 17 18 let key: *u8 = sys_mmap(64) 19 key[0]=0x85; key[1]=0xd6; key[2]=0xbe; key[3]=0x78 20 key[4]=0x57; key[5]=0x55; key[6]=0x6d; key[7]=0x33 21 key[8]=0x7f; key[9]=0x44; key[10]=0x52; key[11]=0xfe 22 key[12]=0x42; key[13]=0xd5; key[14]=0x06; key[15]=0xa8 23 key[16]=0x01; key[17]=0x03; key[18]=0x80; key[19]=0x8a 24 key[20]=0xfb; key[21]=0x0d; key[22]=0xb2; key[23]=0xfd 25 key[24]=0x4a; key[25]=0xbf; key[26]=0xf6; key[27]=0xaf 26 key[28]=0x41; key[29]=0x49; key[30]=0xf5; key[31]=0x1b 27 28 let msg: *u8 = sys_mmap(64) 29 msg[0]=0x43; msg[1]=0x72; msg[2]=0x79; msg[3]=0x70 30 msg[4]=0x74; msg[5]=0x6f; msg[6]=0x67; msg[7]=0x72 31 msg[8]=0x61; msg[9]=0x70; msg[10]=0x68; msg[11]=0x69 32 msg[12]=0x63; msg[13]=0x20; msg[14]=0x46; msg[15]=0x6f 33 msg[16]=0x72; msg[17]=0x75; msg[18]=0x6d; msg[19]=0x20 34 msg[20]=0x52; msg[21]=0x65; msg[22]=0x73; msg[23]=0x65 35 msg[24]=0x61; msg[25]=0x72; msg[26]=0x63; msg[27]=0x68 36 msg[28]=0x20; msg[29]=0x47; msg[30]=0x72; msg[31]=0x6f 37 msg[32]=0x75; msg[33]=0x70 38 39 let tag: *u8 = sys_mmap(32) 40 if poly1305_mac_pure(a, key, msg, 34, tag) != 0 { return 2 } 41 42 if (tag[0] & 0xff) != 0xa8 { return 10 } 43 if (tag[4] & 0xff) != 0x30 { return 11 } 44 if (tag[8] & 0xff) != 0xc2 { return 12 } 45 if (tag[15] & 0xff) != 0xa9 { return 13 } 46 return 0 47}