code wiki / (root) / nx_tls12_prf_test.nx

nx_tls12_prf_test.nx source

↩ module page · 223 lines · 6372 B

1// nx_tls12_prf_test.nx -- TLS 1.2 PRF (SHA-256) KAT vs python reference 2// (RFC5246 ยง5 test vector: secret/label/seed -> 100B + 48B outputs). 3// expect_exit: 0 4// license_tier: ORIGINAL 5 6import "nx_syscalls.nx" 7import "nx_tls12_prf.nx" 8 9func eqb(g: *u8, e: *u8, n: i64) -> i64 { 10 var i: i64 = 0 11 while i < n { if (g[i]&0xff)!=(e[i]&0xff) { return 0 } i = i + 1 } 12 return 1 13} 14 15func main() -> i64 { 16 let secret: *u8 = (sys_mmap(24)) as *u8 17 secret[0] = 0x9b as u8 18 secret[1] = 0xbe as u8 19 secret[2] = 0x43 as u8 20 secret[3] = 0x6b as u8 21 secret[4] = 0xa9 as u8 22 secret[5] = 0x40 as u8 23 secret[6] = 0xf0 as u8 24 secret[7] = 0x17 as u8 25 secret[8] = 0xb1 as u8 26 secret[9] = 0x76 as u8 27 secret[10] = 0x52 as u8 28 secret[11] = 0x84 as u8 29 secret[12] = 0x9a as u8 30 secret[13] = 0x71 as u8 31 secret[14] = 0xdb as u8 32 secret[15] = 0x35 as u8 33 let label: *u8 = (sys_mmap(18)) as *u8 34 label[0] = 0x74 as u8 35 label[1] = 0x65 as u8 36 label[2] = 0x73 as u8 37 label[3] = 0x74 as u8 38 label[4] = 0x20 as u8 39 label[5] = 0x6c as u8 40 label[6] = 0x61 as u8 41 label[7] = 0x62 as u8 42 label[8] = 0x65 as u8 43 label[9] = 0x6c as u8 44 let seed: *u8 = (sys_mmap(24)) as *u8 45 seed[0] = 0xa1 as u8 46 seed[1] = 0x6c as u8 47 seed[2] = 0x5b as u8 48 seed[3] = 0x0c as u8 49 seed[4] = 0xb9 as u8 50 seed[5] = 0x4f as u8 51 seed[6] = 0xc1 as u8 52 seed[7] = 0x28 as u8 53 seed[8] = 0xb8 as u8 54 seed[9] = 0x1f as u8 55 seed[10] = 0x38 as u8 56 seed[11] = 0xe0 as u8 57 seed[12] = 0x7b as u8 58 seed[13] = 0x06 as u8 59 seed[14] = 0xf9 as u8 60 seed[15] = 0xda as u8 61 let exp100: *u8 = (sys_mmap(108)) as *u8 62 exp100[0] = 0xd6 as u8 63 exp100[1] = 0x8b as u8 64 exp100[2] = 0xf8 as u8 65 exp100[3] = 0x6a as u8 66 exp100[4] = 0xc1 as u8 67 exp100[5] = 0xc1 as u8 68 exp100[6] = 0x10 as u8 69 exp100[7] = 0x0c as u8 70 exp100[8] = 0x8e as u8 71 exp100[9] = 0x20 as u8 72 exp100[10] = 0x44 as u8 73 exp100[11] = 0x40 as u8 74 exp100[12] = 0x99 as u8 75 exp100[13] = 0xc7 as u8 76 exp100[14] = 0x4d as u8 77 exp100[15] = 0x90 as u8 78 exp100[16] = 0xb9 as u8 79 exp100[17] = 0x7d as u8 80 exp100[18] = 0x00 as u8 81 exp100[19] = 0x57 as u8 82 exp100[20] = 0x96 as u8 83 exp100[21] = 0x6c as u8 84 exp100[22] = 0xf2 as u8 85 exp100[23] = 0xb3 as u8 86 exp100[24] = 0x15 as u8 87 exp100[25] = 0xcb as u8 88 exp100[26] = 0x49 as u8 89 exp100[27] = 0x6a as u8 90 exp100[28] = 0xe5 as u8 91 exp100[29] = 0xdf as u8 92 exp100[30] = 0xd9 as u8 93 exp100[31] = 0x23 as u8 94 exp100[32] = 0xfa as u8 95 exp100[33] = 0x79 as u8 96 exp100[34] = 0xcb as u8 97 exp100[35] = 0xad as u8 98 exp100[36] = 0xb6 as u8 99 exp100[37] = 0xd9 as u8 100 exp100[38] = 0x1d as u8 101 exp100[39] = 0x8a as u8 102 exp100[40] = 0x47 as u8 103 exp100[41] = 0x8f as u8 104 exp100[42] = 0x1b as u8 105 exp100[43] = 0x4c as u8 106 exp100[44] = 0x18 as u8 107 exp100[45] = 0xfc as u8 108 exp100[46] = 0x3e as u8 109 exp100[47] = 0x74 as u8 110 exp100[48] = 0x98 as u8 111 exp100[49] = 0xb7 as u8 112 exp100[50] = 0x7e as u8 113 exp100[51] = 0x30 as u8 114 exp100[52] = 0xb9 as u8 115 exp100[53] = 0x73 as u8 116 exp100[54] = 0x91 as u8 117 exp100[55] = 0xbf as u8 118 exp100[56] = 0x62 as u8 119 exp100[57] = 0x08 as u8 120 exp100[58] = 0x90 as u8 121 exp100[59] = 0x2f as u8 122 exp100[60] = 0xe1 as u8 123 exp100[61] = 0x5a as u8 124 exp100[62] = 0xa6 as u8 125 exp100[63] = 0xeb as u8 126 exp100[64] = 0x32 as u8 127 exp100[65] = 0xc7 as u8 128 exp100[66] = 0x23 as u8 129 exp100[67] = 0xbc as u8 130 exp100[68] = 0x30 as u8 131 exp100[69] = 0xff as u8 132 exp100[70] = 0x34 as u8 133 exp100[71] = 0xe7 as u8 134 exp100[72] = 0xe2 as u8 135 exp100[73] = 0xbc as u8 136 exp100[74] = 0xcf as u8 137 exp100[75] = 0x6f as u8 138 exp100[76] = 0x83 as u8 139 exp100[77] = 0x69 as u8 140 exp100[78] = 0xe5 as u8 141 exp100[79] = 0xe2 as u8 142 exp100[80] = 0x0d as u8 143 exp100[81] = 0x92 as u8 144 exp100[82] = 0xf5 as u8 145 exp100[83] = 0x6c as u8 146 exp100[84] = 0x64 as u8 147 exp100[85] = 0x85 as u8 148 exp100[86] = 0x6d as u8 149 exp100[87] = 0xfd as u8 150 exp100[88] = 0x13 as u8 151 exp100[89] = 0x44 as u8 152 exp100[90] = 0xe6 as u8 153 exp100[91] = 0x19 as u8 154 exp100[92] = 0x1f as u8 155 exp100[93] = 0x5f as u8 156 exp100[94] = 0x54 as u8 157 exp100[95] = 0x5b as u8 158 exp100[96] = 0xfb as u8 159 exp100[97] = 0x23 as u8 160 exp100[98] = 0x17 as u8 161 exp100[99] = 0xe3 as u8 162 let exp48: *u8 = (sys_mmap(56)) as *u8 163 exp48[0] = 0xd6 as u8 164 exp48[1] = 0x8b as u8 165 exp48[2] = 0xf8 as u8 166 exp48[3] = 0x6a as u8 167 exp48[4] = 0xc1 as u8 168 exp48[5] = 0xc1 as u8 169 exp48[6] = 0x10 as u8 170 exp48[7] = 0x0c as u8 171 exp48[8] = 0x8e as u8 172 exp48[9] = 0x20 as u8 173 exp48[10] = 0x44 as u8 174 exp48[11] = 0x40 as u8 175 exp48[12] = 0x99 as u8 176 exp48[13] = 0xc7 as u8 177 exp48[14] = 0x4d as u8 178 exp48[15] = 0x90 as u8 179 exp48[16] = 0xb9 as u8 180 exp48[17] = 0x7d as u8 181 exp48[18] = 0x00 as u8 182 exp48[19] = 0x57 as u8 183 exp48[20] = 0x96 as u8 184 exp48[21] = 0x6c as u8 185 exp48[22] = 0xf2 as u8 186 exp48[23] = 0xb3 as u8 187 exp48[24] = 0x15 as u8 188 exp48[25] = 0xcb as u8 189 exp48[26] = 0x49 as u8 190 exp48[27] = 0x6a as u8 191 exp48[28] = 0xe5 as u8 192 exp48[29] = 0xdf as u8 193 exp48[30] = 0xd9 as u8 194 exp48[31] = 0x23 as u8 195 exp48[32] = 0xfa as u8 196 exp48[33] = 0x79 as u8 197 exp48[34] = 0xcb as u8 198 exp48[35] = 0xad as u8 199 exp48[36] = 0xb6 as u8 200 exp48[37] = 0xd9 as u8 201 exp48[38] = 0x1d as u8 202 exp48[39] = 0x8a as u8 203 exp48[40] = 0x47 as u8 204 exp48[41] = 0x8f as u8 205 exp48[42] = 0x1b as u8 206 exp48[43] = 0x4c as u8 207 exp48[44] = 0x18 as u8 208 exp48[45] = 0xfc as u8 209 exp48[46] = 0x3e as u8 210 exp48[47] = 0x74 as u8 211 let o100: *u8 = (sys_mmap(128)) as *u8 212 nx_tls12_prf_sha256(secret, 16, label, 10, seed, 16, o100, 100) 213 if eqb(o100, exp100, 100) != 1 { return 1 } 214 let o48: *u8 = (sys_mmap(64)) as *u8 215 nx_tls12_prf_sha256(secret, 16, label, 10, seed, 16, o48, 48) 216 if eqb(o48, exp48, 48) != 1 { return 2 } 217 // neg-control: flip a secret byte -> output must differ 218 secret[0] = 0x00 as u8 219 let ob: *u8 = (sys_mmap(128)) as *u8 220 nx_tls12_prf_sha256(secret, 16, label, 10, seed, 16, ob, 100) 221 if eqb(ob, exp100, 100) == 1 { return 3 } 222 return 0 223}