15b9c547cSRui Paulo /* 25b9c547cSRui Paulo * WPS module tests 35b9c547cSRui Paulo * Copyright (c) 2014, Jouni Malinen <j@w1.fi> 45b9c547cSRui Paulo * 55b9c547cSRui Paulo * This software may be distributed under the terms of the BSD license. 65b9c547cSRui Paulo * See README for more details. 75b9c547cSRui Paulo */ 85b9c547cSRui Paulo 95b9c547cSRui Paulo #include "utils/includes.h" 105b9c547cSRui Paulo 115b9c547cSRui Paulo #include "utils/common.h" 125b9c547cSRui Paulo #include "wps_attr_parse.h" 135b9c547cSRui Paulo 145b9c547cSRui Paulo struct wps_attr_parse_test { 155b9c547cSRui Paulo const char *data; 165b9c547cSRui Paulo int result; 175b9c547cSRui Paulo int extra; 185b9c547cSRui Paulo }; 195b9c547cSRui Paulo 20*325151a3SRui Paulo const struct wps_attr_parse_test wps_attr_parse_test_cases[] = { 215b9c547cSRui Paulo /* Empty message */ 225b9c547cSRui Paulo { "", 0, 0 }, 235b9c547cSRui Paulo /* Truncated attribute header */ 245b9c547cSRui Paulo { "10", -1, 0 }, 255b9c547cSRui Paulo { "1010", -1, 0 }, 265b9c547cSRui Paulo { "101000", -1, 0 }, 275b9c547cSRui Paulo /* Attribute overflow */ 285b9c547cSRui Paulo { "10100001", -1, 0 }, 295b9c547cSRui Paulo #ifdef CONFIG_WPS_STRICT 305b9c547cSRui Paulo { "10270000001057000101", -1, 0 }, 315b9c547cSRui Paulo { "1027000010570001010000000000", -1, 0 }, 325b9c547cSRui Paulo #else /* CONFIG_WPS_STRICT */ 335b9c547cSRui Paulo /* Network Key workaround */ 345b9c547cSRui Paulo { "10270000001057000101", 0, 1 }, 355b9c547cSRui Paulo { "10230000001057000101", -1, 0 }, 365b9c547cSRui Paulo { "10270000101057000101", -1, 0 }, 375b9c547cSRui Paulo /* Mac OS X 10.6 padding workaround */ 385b9c547cSRui Paulo { "1027000010570001010000000000", 0, 1 }, 395b9c547cSRui Paulo { "1027000010570001010000000000000001000000", -1, 0 }, 405b9c547cSRui Paulo #endif /* CONFIG_WPS_STRICT */ 415b9c547cSRui Paulo /* Version */ 425b9c547cSRui Paulo { "104a000110", 0, 0 }, 435b9c547cSRui Paulo { "104a0000", -1, 0 }, 445b9c547cSRui Paulo /* Message Type */ 455b9c547cSRui Paulo { "1022000101", 0, 0 }, 465b9c547cSRui Paulo { "10220000", -1, 0 }, 475b9c547cSRui Paulo /* Enrollee Nonce */ 485b9c547cSRui Paulo { "101a001000112233445566778899aabbccddeeff", 0, 0 }, 495b9c547cSRui Paulo { "101a00111122334455667788990011223344556677", -1, 0 }, 505b9c547cSRui Paulo /* Registrar Nonce */ 515b9c547cSRui Paulo { "1039001000112233445566778899aabbccddeeff", 0, 0 }, 525b9c547cSRui Paulo { "103900111122334455667788990011223344556677", -1, 0 }, 535b9c547cSRui Paulo /* UUID-E */ 545b9c547cSRui Paulo { "1047001000112233445566778899aabbccddeeff", 0, 0 }, 555b9c547cSRui Paulo { "10470000", -1, 0 }, 565b9c547cSRui Paulo { "104700111122334455667788990011223344556677", -1, 0 }, 575b9c547cSRui Paulo /* UUID-R */ 585b9c547cSRui Paulo { "1048001000112233445566778899aabbccddeeff", 0, 0 }, 595b9c547cSRui Paulo { "10480000", -1, 0 }, 605b9c547cSRui Paulo { "104800111122334455667788990011223344556677", -1, 0 }, 615b9c547cSRui Paulo /* Auth Type Flags */ 625b9c547cSRui Paulo { "100400021122", 0, 0 }, 635b9c547cSRui Paulo { "10040001ff", -1, 0 }, 645b9c547cSRui Paulo /* Encr Type Flags */ 655b9c547cSRui Paulo { "101000021122", 0, 0 }, 665b9c547cSRui Paulo { "10100001ff", -1, 0 }, 675b9c547cSRui Paulo /* Connection Type Flags */ 685b9c547cSRui Paulo { "100d0001ff", 0, 0 }, 695b9c547cSRui Paulo { "100d0002ffff", -1, 0 }, 705b9c547cSRui Paulo /* Config Methods */ 715b9c547cSRui Paulo { "10080002ffff", 0, 0 }, 725b9c547cSRui Paulo { "10080001ff", -1, 0 }, 735b9c547cSRui Paulo /* Selected Registrar Config Methods */ 745b9c547cSRui Paulo { "10530002ffff", 0, 0 }, 755b9c547cSRui Paulo { "10530001ff", -1, 0 }, 765b9c547cSRui Paulo /* Primary Device Type */ 775b9c547cSRui Paulo { "105400081122334455667788", 0, 0 }, 785b9c547cSRui Paulo { "105400111122334455667788990011223344556677", -1, 0 }, 795b9c547cSRui Paulo /* RF Bands */ 805b9c547cSRui Paulo { "103c0001ff", 0, 0 }, 815b9c547cSRui Paulo { "103c0002ffff", -1, 0 }, 825b9c547cSRui Paulo /* Association State */ 835b9c547cSRui Paulo { "10020002ffff", 0, 0 }, 845b9c547cSRui Paulo { "10020001ff", -1, 0 }, 855b9c547cSRui Paulo /* Config Error */ 865b9c547cSRui Paulo { "100900020001", 0, 0 }, 875b9c547cSRui Paulo { "10090001ff", -1, 0 }, 885b9c547cSRui Paulo /* Device Password ID */ 895b9c547cSRui Paulo { "101200020004", 0, 0 }, 905b9c547cSRui Paulo { "10120001ff", -1, 0 }, 915b9c547cSRui Paulo /* OOB Device Password */ 925b9c547cSRui Paulo { "102c001611223344556677889900112233445566778899000007", 0, 0 }, 935b9c547cSRui Paulo { "102c0036112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344", 0, 0 }, 945b9c547cSRui Paulo { "102c0001ff", -1, 0 }, 955b9c547cSRui Paulo { "102c003711223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455", -1, 0 }, 965b9c547cSRui Paulo { "102c002511223344556677889900112233445566778899001122334455667788990011223344556677", -1, 0 }, 975b9c547cSRui Paulo /* OS Version */ 985b9c547cSRui Paulo { "102d000411223344", 0, 0 }, 995b9c547cSRui Paulo { "102d00111122334455667788990011223344556677", -1, 0 }, 1005b9c547cSRui Paulo /* WPS State */ 1015b9c547cSRui Paulo { "1044000101", 0, 0 }, 1025b9c547cSRui Paulo { "10440002ffff", -1, 0 }, 1035b9c547cSRui Paulo /* Authenticator */ 1045b9c547cSRui Paulo { "100500081122334455667788", 0, 0 }, 1055b9c547cSRui Paulo { "10050000", -1, 0 }, 1065b9c547cSRui Paulo { "100500111122334455667788990011223344556677", -1, 0 }, 1075b9c547cSRui Paulo /* R-Hash1 */ 1085b9c547cSRui Paulo { "103d00201122334455667788990011223344556677889900112233445566778899001122", 0, 0 }, 1095b9c547cSRui Paulo { "103d0000", -1, 0 }, 1105b9c547cSRui Paulo { "103d0021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 }, 1115b9c547cSRui Paulo /* R-Hash2 */ 1125b9c547cSRui Paulo { "103e00201122334455667788990011223344556677889900112233445566778899001122", 0, 0 }, 1135b9c547cSRui Paulo { "103e0000", -1, 0 }, 1145b9c547cSRui Paulo { "103e0021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 }, 1155b9c547cSRui Paulo /* E-Hash1 */ 1165b9c547cSRui Paulo { "101400201122334455667788990011223344556677889900112233445566778899001122", 0, 0 }, 1175b9c547cSRui Paulo { "10140000", -1, 0 }, 1185b9c547cSRui Paulo { "10140021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 }, 1195b9c547cSRui Paulo /* E-Hash2 */ 1205b9c547cSRui Paulo { "101500201122334455667788990011223344556677889900112233445566778899001122", 0, 0 }, 1215b9c547cSRui Paulo { "10150000", -1, 0 }, 1225b9c547cSRui Paulo { "10150021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 }, 1235b9c547cSRui Paulo /* R-SNonce1 */ 1245b9c547cSRui Paulo { "103f001011223344556677889900112233445566", 0, 0 }, 1255b9c547cSRui Paulo { "103f0000", -1, 0 }, 1265b9c547cSRui Paulo { "103f00111122334455667788990011223344556677", -1, 0 }, 1275b9c547cSRui Paulo /* R-SNonce2 */ 1285b9c547cSRui Paulo { "1040001011223344556677889900112233445566", 0, 0 }, 1295b9c547cSRui Paulo { "10400000", -1, 0 }, 1305b9c547cSRui Paulo { "104000111122334455667788990011223344556677", -1, 0 }, 1315b9c547cSRui Paulo /* E-SNonce1 */ 1325b9c547cSRui Paulo { "1016001011223344556677889900112233445566", 0, 0 }, 1335b9c547cSRui Paulo { "10160000", -1, 0 }, 1345b9c547cSRui Paulo { "101600111122334455667788990011223344556677", -1, 0 }, 1355b9c547cSRui Paulo /* E-SNonce2 */ 1365b9c547cSRui Paulo { "1017001011223344556677889900112233445566", 0, 0 }, 1375b9c547cSRui Paulo { "10170000", -1, 0 }, 1385b9c547cSRui Paulo { "101700111122334455667788990011223344556677", -1, 0 }, 1395b9c547cSRui Paulo /* Key Wrap Authenticator */ 1405b9c547cSRui Paulo { "101e00081122334455667788", 0, 0 }, 1415b9c547cSRui Paulo { "101e0000", -1, 0 }, 1425b9c547cSRui Paulo { "101e0009112233445566778899", -1, 0 }, 1435b9c547cSRui Paulo /* Authentication Type */ 1445b9c547cSRui Paulo { "100300020001", 0, 0 }, 1455b9c547cSRui Paulo { "10030001ff", -1, 0 }, 1465b9c547cSRui Paulo /* Encryption Type */ 1475b9c547cSRui Paulo { "100f00020001", 0, 0 }, 1485b9c547cSRui Paulo { "100f0001ff", -1, 0 }, 1495b9c547cSRui Paulo /* Network Index */ 1505b9c547cSRui Paulo { "1026000101", 0, 0 }, 1515b9c547cSRui Paulo { "10260002ffff", -1, 0 }, 1525b9c547cSRui Paulo /* Network Key Index */ 1535b9c547cSRui Paulo { "1028000101", 0, 3 }, 1545b9c547cSRui Paulo { "10280002ffff", -1, 0 }, 1555b9c547cSRui Paulo /* MAC Address */ 1565b9c547cSRui Paulo { "10200006112233445566", 0, 0 }, 1575b9c547cSRui Paulo { "10200000", -1, 0 }, 1585b9c547cSRui Paulo { "1020000711223344556677", -1, 0 }, 1595b9c547cSRui Paulo /* Selected Registrar */ 1605b9c547cSRui Paulo { "1041000101", 0, 0 }, 1615b9c547cSRui Paulo { "10410002ffff", -1, 0 }, 1625b9c547cSRui Paulo /* Request Type */ 1635b9c547cSRui Paulo { "103a000101", 0, 0 }, 1645b9c547cSRui Paulo { "103a0002ffff", -1, 0 }, 1655b9c547cSRui Paulo /* Response Type */ 1665b9c547cSRui Paulo { "103b000101", 0, 0 }, 1675b9c547cSRui Paulo { "103b0002ffff", -1, 0 }, 1685b9c547cSRui Paulo /* Manufacturer */ 1695b9c547cSRui Paulo { "10210000", 0, 0 }, 1705b9c547cSRui Paulo /* Model Name */ 1715b9c547cSRui Paulo { "10230000", 0, 0 }, 1725b9c547cSRui Paulo /* Model Number */ 1735b9c547cSRui Paulo { "10240000", 0, 0 }, 1745b9c547cSRui Paulo /* Serial Number */ 1755b9c547cSRui Paulo { "10420000", 0, 0 }, 1765b9c547cSRui Paulo /* Device Name */ 1775b9c547cSRui Paulo { "10110000", 0, 0 }, 1785b9c547cSRui Paulo /* Public Key */ 1795b9c547cSRui Paulo { "10320000", 0, 0 }, 1805b9c547cSRui Paulo /* Enc Settings */ 1815b9c547cSRui Paulo { "10180000", 0, 0 }, 1825b9c547cSRui Paulo /* SSID */ 1835b9c547cSRui Paulo { "10450000", 0, 0 }, 1845b9c547cSRui Paulo /* AP Setup Locked */ 1855b9c547cSRui Paulo { "1057000101", 0, 0 }, 1865b9c547cSRui Paulo { "10570002ffff", -1, 0 }, 1875b9c547cSRui Paulo /* Requested Device Type */ 1885b9c547cSRui Paulo { "106a00081122334455667788", 0, 0 }, 1895b9c547cSRui Paulo { "106a0000", -1, 0 }, 1905b9c547cSRui Paulo { "106a0009112233445566778899", -1, 0 }, 1915b9c547cSRui Paulo /* More than maximum Requested Device Type attributes */ 1925b9c547cSRui Paulo { "106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788", 0, 4 }, 1935b9c547cSRui Paulo /* Secondary Device Type List */ 1945b9c547cSRui Paulo { "105500081122334455667788", 0, 0 }, 1955b9c547cSRui Paulo { "1055000711223344556677", -1, 0 }, 1965b9c547cSRui Paulo { "1055008811223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566", -1, 0 }, 1975b9c547cSRui Paulo /* AP Channel */ 1985b9c547cSRui Paulo { "100100020001", 0, 0 }, 1995b9c547cSRui Paulo { "1001000101", -1, 0 }, 2005b9c547cSRui Paulo /* Skip invalid Vendor Extension */ 2015b9c547cSRui Paulo { "10490000", 0, 0 }, 2025b9c547cSRui Paulo { "1049000100", 0, 0 }, 2035b9c547cSRui Paulo { "104900020000", 0, 0 }, 2045b9c547cSRui Paulo /* Too long unknown vendor extension */ 2055b9c547cSRui Paulo { "10490401" 2065b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2075b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2085b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2095b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2105b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2115b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2125b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2135b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2145b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2155b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2165b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2175b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2185b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2195b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2205b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2215b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2225b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2235b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2245b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2255b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2265b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2275b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2285b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2295b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2305b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2315b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2325b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2335b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2345b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2355b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2365b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2375b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2385b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2395b9c547cSRui Paulo "112233445566778899001122334455667788990011223344556677889900" 2405b9c547cSRui Paulo "1122334455", -1, 0 }, 2415b9c547cSRui Paulo /* Maximum unknown vendor extensions */ 2425b9c547cSRui Paulo { "10490003111111104900032222221049000333333310490003444444104900035555551049000366666610490003777777104900038888881049000399999910490003AAAAAA", 0, 5 }, 2435b9c547cSRui Paulo /* More than maximum unknown vendor extensions */ 2445b9c547cSRui Paulo { "10490003111111104900032222221049000333333310490003444444104900035555551049000366666610490003777777104900038888881049000399999910490003AAAAAA10490003BBBBBB", -1, 0 }, 2455b9c547cSRui Paulo /* WFA vendor extensions */ 2465b9c547cSRui Paulo { "1049000300372a", 0, 0 }, 2475b9c547cSRui Paulo { "1049000400372a00", 0, 0 }, 2485b9c547cSRui Paulo { "1049000500372a0001", 0, 0 }, 2495b9c547cSRui Paulo { "1049001600372a0001ff0100020101030101040101ff00fe0101", 0, 6 }, 2505b9c547cSRui Paulo /* Invalid Version2 length */ 2515b9c547cSRui Paulo { "1049000500372a0000", -1, 0 }, 2525b9c547cSRui Paulo /* Invalid Network Key Shareable length */ 2535b9c547cSRui Paulo { "1049000500372a0200", -1, 0 }, 2545b9c547cSRui Paulo /* Invalid Requedt To Enroll length */ 2555b9c547cSRui Paulo { "1049000500372a0300", -1, 0 }, 2565b9c547cSRui Paulo /* Invalid Settings Delay Time length */ 2575b9c547cSRui Paulo { "1049000500372a0400", -1, 0 }, 2585b9c547cSRui Paulo /* More than maximum Credential attributes */ 2595b9c547cSRui Paulo { "100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000", 0, 2 }, 2605b9c547cSRui Paulo }; 2615b9c547cSRui Paulo 2625b9c547cSRui Paulo 2635b9c547cSRui Paulo static int wps_attr_parse_tests(void) 2645b9c547cSRui Paulo { 2655b9c547cSRui Paulo struct wps_parse_attr attr; 2665b9c547cSRui Paulo unsigned int i; 2675b9c547cSRui Paulo int ret = 0; 2685b9c547cSRui Paulo 2695b9c547cSRui Paulo wpa_printf(MSG_INFO, "WPS attribute parsing tests"); 2705b9c547cSRui Paulo 2715b9c547cSRui Paulo for (i = 0; i < ARRAY_SIZE(wps_attr_parse_test_cases); i++) { 2725b9c547cSRui Paulo struct wpabuf *buf; 2735b9c547cSRui Paulo size_t len; 274*325151a3SRui Paulo const struct wps_attr_parse_test *test = 2755b9c547cSRui Paulo &wps_attr_parse_test_cases[i]; 2765b9c547cSRui Paulo 2775b9c547cSRui Paulo len = os_strlen(test->data) / 2; 2785b9c547cSRui Paulo buf = wpabuf_alloc(len); 2795b9c547cSRui Paulo if (buf == NULL) 2805b9c547cSRui Paulo return -1; 2815b9c547cSRui Paulo if (hexstr2bin(test->data, wpabuf_put(buf, len), len) < 0) { 2825b9c547cSRui Paulo wpabuf_free(buf); 2835b9c547cSRui Paulo return -1; 2845b9c547cSRui Paulo } 2855b9c547cSRui Paulo if (wps_parse_msg(buf, &attr) != test->result) { 2865b9c547cSRui Paulo wpa_printf(MSG_ERROR, "WPS attribute parsing test %u failed: %s", 2875b9c547cSRui Paulo i, test->data); 2885b9c547cSRui Paulo ret = -1; 2895b9c547cSRui Paulo } 2905b9c547cSRui Paulo switch (test->extra) { 2915b9c547cSRui Paulo case 1: 2925b9c547cSRui Paulo if (!attr.network_key || !attr.ap_setup_locked) 2935b9c547cSRui Paulo ret = -1; 2945b9c547cSRui Paulo break; 2955b9c547cSRui Paulo case 2: 2965b9c547cSRui Paulo if (attr.num_cred != MAX_CRED_COUNT) 2975b9c547cSRui Paulo ret = -1; 2985b9c547cSRui Paulo break; 2995b9c547cSRui Paulo case 3: 3005b9c547cSRui Paulo if (!attr.network_key_idx) 3015b9c547cSRui Paulo ret = -1; 3025b9c547cSRui Paulo break; 3035b9c547cSRui Paulo case 4: 3045b9c547cSRui Paulo if (attr.num_req_dev_type != MAX_REQ_DEV_TYPE_COUNT) 3055b9c547cSRui Paulo ret = -1; 3065b9c547cSRui Paulo break; 3075b9c547cSRui Paulo case 5: 3085b9c547cSRui Paulo if (attr.num_vendor_ext != MAX_WPS_PARSE_VENDOR_EXT) 3095b9c547cSRui Paulo ret = -1; 3105b9c547cSRui Paulo break; 3115b9c547cSRui Paulo case 6: 3125b9c547cSRui Paulo if (!attr.version2 || 3135b9c547cSRui Paulo !attr.authorized_macs || 3145b9c547cSRui Paulo !attr.network_key_shareable || 3155b9c547cSRui Paulo !attr.request_to_enroll || 3165b9c547cSRui Paulo !attr.settings_delay_time) 3175b9c547cSRui Paulo ret = -1; 3185b9c547cSRui Paulo break; 3195b9c547cSRui Paulo } 3205b9c547cSRui Paulo wpabuf_free(buf); 3215b9c547cSRui Paulo } 3225b9c547cSRui Paulo 3235b9c547cSRui Paulo return ret; 3245b9c547cSRui Paulo } 3255b9c547cSRui Paulo 3265b9c547cSRui Paulo 3275b9c547cSRui Paulo int wps_module_tests(void) 3285b9c547cSRui Paulo { 3295b9c547cSRui Paulo int ret = 0; 3305b9c547cSRui Paulo 3315b9c547cSRui Paulo wpa_printf(MSG_INFO, "WPS module tests"); 3325b9c547cSRui Paulo 3335b9c547cSRui Paulo if (wps_attr_parse_tests() < 0) 3345b9c547cSRui Paulo ret = -1; 3355b9c547cSRui Paulo 3365b9c547cSRui Paulo return ret; 3375b9c547cSRui Paulo } 338