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}