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