xref: /dflybsd-src/contrib/wpa_supplicant/src/wps/wps_module_tests.c (revision 3a84a4273475ed07d0ab1c2dfeffdfedef35d9cd)
1*a1157835SDaniel Fojt /*
2*a1157835SDaniel Fojt  * WPS module tests
3*a1157835SDaniel Fojt  * Copyright (c) 2014, Jouni Malinen <j@w1.fi>
4*a1157835SDaniel Fojt  *
5*a1157835SDaniel Fojt  * This software may be distributed under the terms of the BSD license.
6*a1157835SDaniel Fojt  * See README for more details.
7*a1157835SDaniel Fojt  */
8*a1157835SDaniel Fojt 
9*a1157835SDaniel Fojt #include "utils/includes.h"
10*a1157835SDaniel Fojt 
11*a1157835SDaniel Fojt #include "utils/common.h"
12*a1157835SDaniel Fojt #include "utils/module_tests.h"
13*a1157835SDaniel Fojt #include "wps_attr_parse.h"
14*a1157835SDaniel Fojt 
15*a1157835SDaniel Fojt struct wps_attr_parse_test {
16*a1157835SDaniel Fojt 	const char *data;
17*a1157835SDaniel Fojt 	int result;
18*a1157835SDaniel Fojt 	int extra;
19*a1157835SDaniel Fojt };
20*a1157835SDaniel Fojt 
21*a1157835SDaniel Fojt static const struct wps_attr_parse_test wps_attr_parse_test_cases[] = {
22*a1157835SDaniel Fojt 	/* Empty message */
23*a1157835SDaniel Fojt 	{ "", 0, 0 },
24*a1157835SDaniel Fojt 	/* Truncated attribute header */
25*a1157835SDaniel Fojt 	{ "10", -1, 0 },
26*a1157835SDaniel Fojt 	{ "1010", -1, 0 },
27*a1157835SDaniel Fojt 	{ "101000", -1, 0 },
28*a1157835SDaniel Fojt 	/* Attribute overflow */
29*a1157835SDaniel Fojt 	{ "10100001", -1, 0 },
30*a1157835SDaniel Fojt #ifdef CONFIG_WPS_STRICT
31*a1157835SDaniel Fojt 	{ "10270000001057000101", -1, 0 },
32*a1157835SDaniel Fojt 	{ "1027000010570001010000000000", -1, 0 },
33*a1157835SDaniel Fojt #else /* CONFIG_WPS_STRICT */
34*a1157835SDaniel Fojt 	/* Network Key workaround */
35*a1157835SDaniel Fojt 	{ "10270000001057000101", 0, 1 },
36*a1157835SDaniel Fojt 	{ "10230000001057000101", -1, 0 },
37*a1157835SDaniel Fojt 	{ "10270000101057000101", -1, 0 },
38*a1157835SDaniel Fojt 	/* Mac OS X 10.6 padding workaround */
39*a1157835SDaniel Fojt 	{ "1027000010570001010000000000", 0, 1 },
40*a1157835SDaniel Fojt 	{ "1027000010570001010000000000000001000000", -1, 0 },
41*a1157835SDaniel Fojt #endif /* CONFIG_WPS_STRICT */
42*a1157835SDaniel Fojt 	/* Version */
43*a1157835SDaniel Fojt 	{ "104a000110", 0, 0 },
44*a1157835SDaniel Fojt 	{ "104a0000", -1, 0 },
45*a1157835SDaniel Fojt 	/* Message Type */
46*a1157835SDaniel Fojt 	{ "1022000101", 0, 0 },
47*a1157835SDaniel Fojt 	{ "10220000", -1, 0 },
48*a1157835SDaniel Fojt 	/* Enrollee Nonce */
49*a1157835SDaniel Fojt 	{ "101a001000112233445566778899aabbccddeeff", 0, 0 },
50*a1157835SDaniel Fojt 	{ "101a00111122334455667788990011223344556677", -1, 0 },
51*a1157835SDaniel Fojt 	/* Registrar Nonce */
52*a1157835SDaniel Fojt 	{ "1039001000112233445566778899aabbccddeeff", 0, 0 },
53*a1157835SDaniel Fojt 	{ "103900111122334455667788990011223344556677", -1, 0 },
54*a1157835SDaniel Fojt 	/* UUID-E */
55*a1157835SDaniel Fojt 	{ "1047001000112233445566778899aabbccddeeff", 0, 0 },
56*a1157835SDaniel Fojt 	{ "10470000", -1, 0 },
57*a1157835SDaniel Fojt 	{ "104700111122334455667788990011223344556677", -1, 0 },
58*a1157835SDaniel Fojt 	/* UUID-R */
59*a1157835SDaniel Fojt 	{ "1048001000112233445566778899aabbccddeeff", 0, 0 },
60*a1157835SDaniel Fojt 	{ "10480000", -1, 0 },
61*a1157835SDaniel Fojt 	{ "104800111122334455667788990011223344556677", -1, 0 },
62*a1157835SDaniel Fojt 	/* Auth Type Flags */
63*a1157835SDaniel Fojt 	{ "100400021122", 0, 0 },
64*a1157835SDaniel Fojt 	{ "10040001ff", -1, 0 },
65*a1157835SDaniel Fojt 	/* Encr Type Flags */
66*a1157835SDaniel Fojt 	{ "101000021122", 0, 0 },
67*a1157835SDaniel Fojt 	{ "10100001ff", -1, 0 },
68*a1157835SDaniel Fojt 	/* Connection Type Flags */
69*a1157835SDaniel Fojt 	{ "100d0001ff", 0, 0 },
70*a1157835SDaniel Fojt 	{ "100d0002ffff", -1, 0 },
71*a1157835SDaniel Fojt 	/* Config Methods */
72*a1157835SDaniel Fojt 	{ "10080002ffff", 0, 0 },
73*a1157835SDaniel Fojt 	{ "10080001ff", -1, 0 },
74*a1157835SDaniel Fojt 	/* Selected Registrar Config Methods */
75*a1157835SDaniel Fojt 	{ "10530002ffff", 0, 0 },
76*a1157835SDaniel Fojt 	{ "10530001ff", -1, 0 },
77*a1157835SDaniel Fojt 	/* Primary Device Type */
78*a1157835SDaniel Fojt 	{ "105400081122334455667788", 0, 0 },
79*a1157835SDaniel Fojt 	{ "105400111122334455667788990011223344556677", -1, 0 },
80*a1157835SDaniel Fojt 	/* RF Bands */
81*a1157835SDaniel Fojt 	{ "103c0001ff", 0, 0 },
82*a1157835SDaniel Fojt 	{ "103c0002ffff", -1, 0 },
83*a1157835SDaniel Fojt 	/* Association State */
84*a1157835SDaniel Fojt 	{ "10020002ffff", 0, 0 },
85*a1157835SDaniel Fojt 	{ "10020001ff", -1, 0 },
86*a1157835SDaniel Fojt 	/* Config Error */
87*a1157835SDaniel Fojt 	{ "100900020001", 0, 0 },
88*a1157835SDaniel Fojt 	{ "10090001ff", -1, 0 },
89*a1157835SDaniel Fojt 	/* Device Password ID */
90*a1157835SDaniel Fojt 	{ "101200020004", 0, 0 },
91*a1157835SDaniel Fojt 	{ "10120001ff", -1, 0 },
92*a1157835SDaniel Fojt 	/* OOB Device Password */
93*a1157835SDaniel Fojt 	{ "102c001611223344556677889900112233445566778899000007", 0, 0 },
94*a1157835SDaniel Fojt 	{ "102c0036112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344", 0, 0 },
95*a1157835SDaniel Fojt 	{ "102c0001ff", -1, 0 },
96*a1157835SDaniel Fojt 	{ "102c003711223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455", -1, 0 },
97*a1157835SDaniel Fojt 	{ "102c002511223344556677889900112233445566778899001122334455667788990011223344556677", -1, 0 },
98*a1157835SDaniel Fojt 	/* OS Version */
99*a1157835SDaniel Fojt 	{ "102d000411223344", 0, 0 },
100*a1157835SDaniel Fojt 	{ "102d00111122334455667788990011223344556677", -1, 0 },
101*a1157835SDaniel Fojt 	/* WPS State */
102*a1157835SDaniel Fojt 	{ "1044000101", 0, 0 },
103*a1157835SDaniel Fojt 	{ "10440002ffff", -1, 0 },
104*a1157835SDaniel Fojt 	/* Authenticator */
105*a1157835SDaniel Fojt 	{ "100500081122334455667788", 0, 0 },
106*a1157835SDaniel Fojt 	{ "10050000", -1, 0 },
107*a1157835SDaniel Fojt 	{ "100500111122334455667788990011223344556677", -1, 0 },
108*a1157835SDaniel Fojt 	/* R-Hash1 */
109*a1157835SDaniel Fojt 	{ "103d00201122334455667788990011223344556677889900112233445566778899001122", 0, 0 },
110*a1157835SDaniel Fojt 	{ "103d0000", -1, 0 },
111*a1157835SDaniel Fojt 	{ "103d0021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 },
112*a1157835SDaniel Fojt 	/* R-Hash2 */
113*a1157835SDaniel Fojt 	{ "103e00201122334455667788990011223344556677889900112233445566778899001122", 0, 0 },
114*a1157835SDaniel Fojt 	{ "103e0000", -1, 0 },
115*a1157835SDaniel Fojt 	{ "103e0021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 },
116*a1157835SDaniel Fojt 	/* E-Hash1 */
117*a1157835SDaniel Fojt 	{ "101400201122334455667788990011223344556677889900112233445566778899001122", 0, 0 },
118*a1157835SDaniel Fojt 	{ "10140000", -1, 0 },
119*a1157835SDaniel Fojt 	{ "10140021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 },
120*a1157835SDaniel Fojt 	/* E-Hash2 */
121*a1157835SDaniel Fojt 	{ "101500201122334455667788990011223344556677889900112233445566778899001122", 0, 0 },
122*a1157835SDaniel Fojt 	{ "10150000", -1, 0 },
123*a1157835SDaniel Fojt 	{ "10150021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 },
124*a1157835SDaniel Fojt 	/* R-SNonce1 */
125*a1157835SDaniel Fojt 	{ "103f001011223344556677889900112233445566", 0, 0 },
126*a1157835SDaniel Fojt 	{ "103f0000", -1, 0 },
127*a1157835SDaniel Fojt 	{ "103f00111122334455667788990011223344556677", -1, 0 },
128*a1157835SDaniel Fojt 	/* R-SNonce2 */
129*a1157835SDaniel Fojt 	{ "1040001011223344556677889900112233445566", 0, 0 },
130*a1157835SDaniel Fojt 	{ "10400000", -1, 0 },
131*a1157835SDaniel Fojt 	{ "104000111122334455667788990011223344556677", -1, 0 },
132*a1157835SDaniel Fojt 	/* E-SNonce1 */
133*a1157835SDaniel Fojt 	{ "1016001011223344556677889900112233445566", 0, 0 },
134*a1157835SDaniel Fojt 	{ "10160000", -1, 0 },
135*a1157835SDaniel Fojt 	{ "101600111122334455667788990011223344556677", -1, 0 },
136*a1157835SDaniel Fojt 	/* E-SNonce2 */
137*a1157835SDaniel Fojt 	{ "1017001011223344556677889900112233445566", 0, 0 },
138*a1157835SDaniel Fojt 	{ "10170000", -1, 0 },
139*a1157835SDaniel Fojt 	{ "101700111122334455667788990011223344556677", -1, 0 },
140*a1157835SDaniel Fojt 	/* Key Wrap Authenticator */
141*a1157835SDaniel Fojt 	{ "101e00081122334455667788", 0, 0 },
142*a1157835SDaniel Fojt 	{ "101e0000", -1, 0 },
143*a1157835SDaniel Fojt 	{ "101e0009112233445566778899", -1, 0 },
144*a1157835SDaniel Fojt 	/* Authentication Type */
145*a1157835SDaniel Fojt 	{ "100300020001", 0, 0 },
146*a1157835SDaniel Fojt 	{ "10030001ff", -1, 0 },
147*a1157835SDaniel Fojt 	/* Encryption Type */
148*a1157835SDaniel Fojt 	{ "100f00020001", 0, 0 },
149*a1157835SDaniel Fojt 	{ "100f0001ff", -1, 0 },
150*a1157835SDaniel Fojt 	/* Network Index */
151*a1157835SDaniel Fojt 	{ "1026000101", 0, 0 },
152*a1157835SDaniel Fojt 	{ "10260002ffff", -1, 0 },
153*a1157835SDaniel Fojt 	/* Network Key Index */
154*a1157835SDaniel Fojt 	{ "1028000101", 0, 3 },
155*a1157835SDaniel Fojt 	{ "10280002ffff", -1, 0 },
156*a1157835SDaniel Fojt 	/* MAC Address */
157*a1157835SDaniel Fojt 	{ "10200006112233445566", 0, 0 },
158*a1157835SDaniel Fojt 	{ "10200000", -1, 0 },
159*a1157835SDaniel Fojt 	{ "1020000711223344556677", -1, 0 },
160*a1157835SDaniel Fojt 	/* Selected Registrar */
161*a1157835SDaniel Fojt 	{ "1041000101", 0, 0 },
162*a1157835SDaniel Fojt 	{ "10410002ffff", -1, 0 },
163*a1157835SDaniel Fojt 	/* Request Type */
164*a1157835SDaniel Fojt 	{ "103a000101", 0, 0 },
165*a1157835SDaniel Fojt 	{ "103a0002ffff", -1, 0 },
166*a1157835SDaniel Fojt 	/* Response Type */
167*a1157835SDaniel Fojt 	{ "103b000101", 0, 0 },
168*a1157835SDaniel Fojt 	{ "103b0002ffff", -1, 0 },
169*a1157835SDaniel Fojt 	/* Manufacturer */
170*a1157835SDaniel Fojt 	{ "10210000", 0, 0 },
171*a1157835SDaniel Fojt 	/* Model Name */
172*a1157835SDaniel Fojt 	{ "10230000", 0, 0 },
173*a1157835SDaniel Fojt 	/* Model Number */
174*a1157835SDaniel Fojt 	{ "10240000", 0, 0 },
175*a1157835SDaniel Fojt 	/* Serial Number */
176*a1157835SDaniel Fojt 	{ "10420000", 0, 0 },
177*a1157835SDaniel Fojt 	/* Device Name */
178*a1157835SDaniel Fojt 	{ "10110000", 0, 0 },
179*a1157835SDaniel Fojt 	/* Public Key */
180*a1157835SDaniel Fojt 	{ "10320000", 0, 0 },
181*a1157835SDaniel Fojt 	/* Enc Settings */
182*a1157835SDaniel Fojt 	{ "10180000", 0, 0 },
183*a1157835SDaniel Fojt 	/* SSID */
184*a1157835SDaniel Fojt 	{ "10450000", 0, 0 },
185*a1157835SDaniel Fojt 	/* AP Setup Locked */
186*a1157835SDaniel Fojt 	{ "1057000101", 0, 0 },
187*a1157835SDaniel Fojt 	{ "10570002ffff", -1, 0 },
188*a1157835SDaniel Fojt 	/* Requested Device Type */
189*a1157835SDaniel Fojt 	{ "106a00081122334455667788", 0, 0 },
190*a1157835SDaniel Fojt 	{ "106a0000", -1, 0 },
191*a1157835SDaniel Fojt 	{ "106a0009112233445566778899", -1, 0 },
192*a1157835SDaniel Fojt 	/* More than maximum Requested Device Type attributes */
193*a1157835SDaniel Fojt 	{ "106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788", 0, 4 },
194*a1157835SDaniel Fojt 	/* Secondary Device Type List */
195*a1157835SDaniel Fojt 	{ "105500081122334455667788", 0, 0 },
196*a1157835SDaniel Fojt 	{ "1055000711223344556677", -1, 0 },
197*a1157835SDaniel Fojt 	{ "1055008811223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566", -1, 0 },
198*a1157835SDaniel Fojt 	/* AP Channel */
199*a1157835SDaniel Fojt 	{ "100100020001", 0, 0 },
200*a1157835SDaniel Fojt 	{ "1001000101", -1, 0 },
201*a1157835SDaniel Fojt 	/* Skip invalid Vendor Extension */
202*a1157835SDaniel Fojt 	{ "10490000", 0, 0 },
203*a1157835SDaniel Fojt 	{ "1049000100", 0, 0 },
204*a1157835SDaniel Fojt 	{ "104900020000", 0, 0 },
205*a1157835SDaniel Fojt 	/* Too long unknown vendor extension */
206*a1157835SDaniel Fojt 	{ "10490401"
207*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
208*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
209*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
210*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
211*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
212*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
213*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
214*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
215*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
216*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
217*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
218*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
219*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
220*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
221*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
222*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
223*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
224*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
225*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
226*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
227*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
228*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
229*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
230*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
231*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
232*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
233*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
234*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
235*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
236*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
237*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
238*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
239*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
240*a1157835SDaniel Fojt 	  "112233445566778899001122334455667788990011223344556677889900"
241*a1157835SDaniel Fojt 	  "1122334455", -1, 0 },
242*a1157835SDaniel Fojt 	/* Maximum unknown vendor extensions */
243*a1157835SDaniel Fojt 	{ "10490003111111104900032222221049000333333310490003444444104900035555551049000366666610490003777777104900038888881049000399999910490003AAAAAA", 0, 5 },
244*a1157835SDaniel Fojt 	/* More than maximum unknown vendor extensions */
245*a1157835SDaniel Fojt 	{ "10490003111111104900032222221049000333333310490003444444104900035555551049000366666610490003777777104900038888881049000399999910490003AAAAAA10490003BBBBBB", -1, 0 },
246*a1157835SDaniel Fojt 	/* WFA vendor extensions */
247*a1157835SDaniel Fojt 	{ "1049000300372a", 0, 0 },
248*a1157835SDaniel Fojt 	{ "1049000400372a00", 0, 0 },
249*a1157835SDaniel Fojt 	{ "1049000500372a0001", 0, 0 },
250*a1157835SDaniel Fojt 	{ "1049001600372a0001ff0100020101030101040101ff00fe0101", 0, 6 },
251*a1157835SDaniel Fojt 	/* Invalid Version2 length */
252*a1157835SDaniel Fojt 	{ "1049000500372a0000", -1, 0 },
253*a1157835SDaniel Fojt 	/* Invalid Network Key Shareable length */
254*a1157835SDaniel Fojt 	{ "1049000500372a0200", -1, 0 },
255*a1157835SDaniel Fojt 	/* Invalid Requedt To Enroll length */
256*a1157835SDaniel Fojt 	{ "1049000500372a0300", -1, 0 },
257*a1157835SDaniel Fojt 	/* Invalid Settings Delay Time length */
258*a1157835SDaniel Fojt 	{ "1049000500372a0400", -1, 0 },
259*a1157835SDaniel Fojt 	/* More than maximum Credential attributes */
260*a1157835SDaniel Fojt 	{ "100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000", 0, 2 },
261*a1157835SDaniel Fojt };
262*a1157835SDaniel Fojt 
263*a1157835SDaniel Fojt 
wps_attr_parse_tests(void)264*a1157835SDaniel Fojt static int wps_attr_parse_tests(void)
265*a1157835SDaniel Fojt {
266*a1157835SDaniel Fojt 	struct wps_parse_attr attr;
267*a1157835SDaniel Fojt 	unsigned int i;
268*a1157835SDaniel Fojt 	int ret = 0;
269*a1157835SDaniel Fojt 
270*a1157835SDaniel Fojt 	wpa_printf(MSG_INFO, "WPS attribute parsing tests");
271*a1157835SDaniel Fojt 
272*a1157835SDaniel Fojt 	for (i = 0; i < ARRAY_SIZE(wps_attr_parse_test_cases); i++) {
273*a1157835SDaniel Fojt 		struct wpabuf *buf;
274*a1157835SDaniel Fojt 		size_t len;
275*a1157835SDaniel Fojt 		const struct wps_attr_parse_test *test =
276*a1157835SDaniel Fojt 			&wps_attr_parse_test_cases[i];
277*a1157835SDaniel Fojt 
278*a1157835SDaniel Fojt 		len = os_strlen(test->data) / 2;
279*a1157835SDaniel Fojt 		buf = wpabuf_alloc(len);
280*a1157835SDaniel Fojt 		if (buf == NULL)
281*a1157835SDaniel Fojt 			return -1;
282*a1157835SDaniel Fojt 		if (hexstr2bin(test->data, wpabuf_put(buf, len), len) < 0) {
283*a1157835SDaniel Fojt 			wpabuf_free(buf);
284*a1157835SDaniel Fojt 			return -1;
285*a1157835SDaniel Fojt 		}
286*a1157835SDaniel Fojt 		if (wps_parse_msg(buf, &attr) != test->result) {
287*a1157835SDaniel Fojt 			wpa_printf(MSG_ERROR, "WPS attribute parsing test %u failed: %s",
288*a1157835SDaniel Fojt 				   i, test->data);
289*a1157835SDaniel Fojt 			ret = -1;
290*a1157835SDaniel Fojt 		}
291*a1157835SDaniel Fojt 		switch (test->extra) {
292*a1157835SDaniel Fojt 		case 1:
293*a1157835SDaniel Fojt 			if (!attr.network_key || !attr.ap_setup_locked)
294*a1157835SDaniel Fojt 				ret = -1;
295*a1157835SDaniel Fojt 			break;
296*a1157835SDaniel Fojt 		case 2:
297*a1157835SDaniel Fojt 			if (attr.num_cred != MAX_CRED_COUNT)
298*a1157835SDaniel Fojt 				ret = -1;
299*a1157835SDaniel Fojt 			break;
300*a1157835SDaniel Fojt 		case 3:
301*a1157835SDaniel Fojt 			if (!attr.network_key_idx)
302*a1157835SDaniel Fojt 				ret = -1;
303*a1157835SDaniel Fojt 			break;
304*a1157835SDaniel Fojt 		case 4:
305*a1157835SDaniel Fojt 			if (attr.num_req_dev_type != MAX_REQ_DEV_TYPE_COUNT)
306*a1157835SDaniel Fojt 				ret = -1;
307*a1157835SDaniel Fojt 			break;
308*a1157835SDaniel Fojt 		case 5:
309*a1157835SDaniel Fojt 			if (attr.num_vendor_ext != MAX_WPS_PARSE_VENDOR_EXT)
310*a1157835SDaniel Fojt 				ret = -1;
311*a1157835SDaniel Fojt 			break;
312*a1157835SDaniel Fojt 		case 6:
313*a1157835SDaniel Fojt 			if (!attr.version2 ||
314*a1157835SDaniel Fojt 			    !attr.authorized_macs ||
315*a1157835SDaniel Fojt 			    !attr.network_key_shareable ||
316*a1157835SDaniel Fojt 			    !attr.request_to_enroll ||
317*a1157835SDaniel Fojt 			    !attr.settings_delay_time)
318*a1157835SDaniel Fojt 				ret = -1;
319*a1157835SDaniel Fojt 			break;
320*a1157835SDaniel Fojt 		}
321*a1157835SDaniel Fojt 		wpabuf_free(buf);
322*a1157835SDaniel Fojt 	}
323*a1157835SDaniel Fojt 
324*a1157835SDaniel Fojt 	return ret;
325*a1157835SDaniel Fojt }
326*a1157835SDaniel Fojt 
327*a1157835SDaniel Fojt 
wps_module_tests(void)328*a1157835SDaniel Fojt int wps_module_tests(void)
329*a1157835SDaniel Fojt {
330*a1157835SDaniel Fojt 	int ret = 0;
331*a1157835SDaniel Fojt 
332*a1157835SDaniel Fojt 	wpa_printf(MSG_INFO, "WPS module tests");
333*a1157835SDaniel Fojt 
334*a1157835SDaniel Fojt 	if (wps_attr_parse_tests() < 0)
335*a1157835SDaniel Fojt 		ret = -1;
336*a1157835SDaniel Fojt 
337*a1157835SDaniel Fojt 	return ret;
338*a1157835SDaniel Fojt }
339