17f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt/* 27f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt * WPS module tests 37f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt * Copyright (c) 2014, Jouni Malinen <j@w1.fi> 47f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt * 57f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 67f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt * See README for more details. 77f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt */ 87f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 97f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt#include "utils/includes.h" 107f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 117f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt#include "utils/common.h" 124ae50e65ef0eefe6d5c356acbc1839f8eac68af5Dmitry Shmidt#include "utils/module_tests.h" 137f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt#include "wps_attr_parse.h" 147f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 157f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidtstruct wps_attr_parse_test { 167f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt const char *data; 177f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt int result; 187f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt int extra; 197f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt}; 207f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 214ae50e65ef0eefe6d5c356acbc1839f8eac68af5Dmitry Shmidtstatic const struct wps_attr_parse_test wps_attr_parse_test_cases[] = { 227f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Empty message */ 237f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "", 0, 0 }, 247f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Truncated attribute header */ 257f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10", -1, 0 }, 267f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1010", -1, 0 }, 277f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "101000", -1, 0 }, 287f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Attribute overflow */ 297f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10100001", -1, 0 }, 307f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt#ifdef CONFIG_WPS_STRICT 317f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10270000001057000101", -1, 0 }, 327f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1027000010570001010000000000", -1, 0 }, 337f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt#else /* CONFIG_WPS_STRICT */ 347f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Network Key workaround */ 357f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10270000001057000101", 0, 1 }, 367f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10230000001057000101", -1, 0 }, 377f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10270000101057000101", -1, 0 }, 387f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Mac OS X 10.6 padding workaround */ 397f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1027000010570001010000000000", 0, 1 }, 407f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1027000010570001010000000000000001000000", -1, 0 }, 417f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt#endif /* CONFIG_WPS_STRICT */ 427f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Version */ 437f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "104a000110", 0, 0 }, 447f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "104a0000", -1, 0 }, 457f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Message Type */ 467f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1022000101", 0, 0 }, 477f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10220000", -1, 0 }, 487f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Enrollee Nonce */ 497f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "101a001000112233445566778899aabbccddeeff", 0, 0 }, 507f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "101a00111122334455667788990011223344556677", -1, 0 }, 517f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Registrar Nonce */ 527f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1039001000112233445566778899aabbccddeeff", 0, 0 }, 537f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103900111122334455667788990011223344556677", -1, 0 }, 547f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* UUID-E */ 557f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1047001000112233445566778899aabbccddeeff", 0, 0 }, 567f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10470000", -1, 0 }, 577f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "104700111122334455667788990011223344556677", -1, 0 }, 587f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* UUID-R */ 597f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1048001000112233445566778899aabbccddeeff", 0, 0 }, 607f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10480000", -1, 0 }, 617f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "104800111122334455667788990011223344556677", -1, 0 }, 627f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Auth Type Flags */ 637f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "100400021122", 0, 0 }, 647f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10040001ff", -1, 0 }, 657f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Encr Type Flags */ 667f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "101000021122", 0, 0 }, 677f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10100001ff", -1, 0 }, 687f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Connection Type Flags */ 697f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "100d0001ff", 0, 0 }, 707f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "100d0002ffff", -1, 0 }, 717f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Config Methods */ 727f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10080002ffff", 0, 0 }, 737f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10080001ff", -1, 0 }, 747f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Selected Registrar Config Methods */ 757f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10530002ffff", 0, 0 }, 767f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10530001ff", -1, 0 }, 777f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Primary Device Type */ 787f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "105400081122334455667788", 0, 0 }, 797f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "105400111122334455667788990011223344556677", -1, 0 }, 807f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* RF Bands */ 817f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103c0001ff", 0, 0 }, 827f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103c0002ffff", -1, 0 }, 837f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Association State */ 847f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10020002ffff", 0, 0 }, 857f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10020001ff", -1, 0 }, 867f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Config Error */ 877f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "100900020001", 0, 0 }, 887f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10090001ff", -1, 0 }, 897f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Device Password ID */ 907f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "101200020004", 0, 0 }, 917f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10120001ff", -1, 0 }, 927f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* OOB Device Password */ 937f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "102c001611223344556677889900112233445566778899000007", 0, 0 }, 947f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "102c0036112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344", 0, 0 }, 957f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "102c0001ff", -1, 0 }, 967f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "102c003711223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455", -1, 0 }, 977f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "102c002511223344556677889900112233445566778899001122334455667788990011223344556677", -1, 0 }, 987f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* OS Version */ 997f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "102d000411223344", 0, 0 }, 1007f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "102d00111122334455667788990011223344556677", -1, 0 }, 1017f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* WPS State */ 1027f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1044000101", 0, 0 }, 1037f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10440002ffff", -1, 0 }, 1047f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Authenticator */ 1057f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "100500081122334455667788", 0, 0 }, 1067f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10050000", -1, 0 }, 1077f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "100500111122334455667788990011223344556677", -1, 0 }, 1087f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* R-Hash1 */ 1097f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103d00201122334455667788990011223344556677889900112233445566778899001122", 0, 0 }, 1107f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103d0000", -1, 0 }, 1117f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103d0021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 }, 1127f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* R-Hash2 */ 1137f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103e00201122334455667788990011223344556677889900112233445566778899001122", 0, 0 }, 1147f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103e0000", -1, 0 }, 1157f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103e0021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 }, 1167f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* E-Hash1 */ 1177f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "101400201122334455667788990011223344556677889900112233445566778899001122", 0, 0 }, 1187f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10140000", -1, 0 }, 1197f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10140021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 }, 1207f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* E-Hash2 */ 1217f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "101500201122334455667788990011223344556677889900112233445566778899001122", 0, 0 }, 1227f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10150000", -1, 0 }, 1237f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10150021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 }, 1247f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* R-SNonce1 */ 1257f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103f001011223344556677889900112233445566", 0, 0 }, 1267f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103f0000", -1, 0 }, 1277f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103f00111122334455667788990011223344556677", -1, 0 }, 1287f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* R-SNonce2 */ 1297f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1040001011223344556677889900112233445566", 0, 0 }, 1307f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10400000", -1, 0 }, 1317f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "104000111122334455667788990011223344556677", -1, 0 }, 1327f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* E-SNonce1 */ 1337f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1016001011223344556677889900112233445566", 0, 0 }, 1347f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10160000", -1, 0 }, 1357f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "101600111122334455667788990011223344556677", -1, 0 }, 1367f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* E-SNonce2 */ 1377f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1017001011223344556677889900112233445566", 0, 0 }, 1387f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10170000", -1, 0 }, 1397f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "101700111122334455667788990011223344556677", -1, 0 }, 1407f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Key Wrap Authenticator */ 1417f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "101e00081122334455667788", 0, 0 }, 1427f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "101e0000", -1, 0 }, 1437f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "101e0009112233445566778899", -1, 0 }, 1447f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Authentication Type */ 1457f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "100300020001", 0, 0 }, 1467f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10030001ff", -1, 0 }, 1477f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Encryption Type */ 1487f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "100f00020001", 0, 0 }, 1497f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "100f0001ff", -1, 0 }, 1507f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Network Index */ 1517f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1026000101", 0, 0 }, 1527f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10260002ffff", -1, 0 }, 1537f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Network Key Index */ 1547f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1028000101", 0, 3 }, 1557f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10280002ffff", -1, 0 }, 1567f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* MAC Address */ 1577f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10200006112233445566", 0, 0 }, 1587f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10200000", -1, 0 }, 1597f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1020000711223344556677", -1, 0 }, 1607f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Selected Registrar */ 1617f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1041000101", 0, 0 }, 1627f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10410002ffff", -1, 0 }, 1637f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Request Type */ 1647f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103a000101", 0, 0 }, 1657f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103a0002ffff", -1, 0 }, 1667f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Response Type */ 1677f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103b000101", 0, 0 }, 1687f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "103b0002ffff", -1, 0 }, 1697f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Manufacturer */ 1707f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10210000", 0, 0 }, 1717f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Model Name */ 1727f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10230000", 0, 0 }, 1737f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Model Number */ 1747f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10240000", 0, 0 }, 1757f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Serial Number */ 1767f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10420000", 0, 0 }, 1777f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Device Name */ 1787f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10110000", 0, 0 }, 1797f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Public Key */ 1807f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10320000", 0, 0 }, 1817f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Enc Settings */ 1827f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10180000", 0, 0 }, 1837f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* SSID */ 1847f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10450000", 0, 0 }, 1857f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* AP Setup Locked */ 1867f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1057000101", 0, 0 }, 1877f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10570002ffff", -1, 0 }, 1887f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Requested Device Type */ 1897f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "106a00081122334455667788", 0, 0 }, 1907f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "106a0000", -1, 0 }, 1917f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "106a0009112233445566778899", -1, 0 }, 1927f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* More than maximum Requested Device Type attributes */ 1937f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788", 0, 4 }, 1947f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Secondary Device Type List */ 1957f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "105500081122334455667788", 0, 0 }, 1967f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1055000711223344556677", -1, 0 }, 1977f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1055008811223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566", -1, 0 }, 1987f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* AP Channel */ 1997f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "100100020001", 0, 0 }, 2007f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1001000101", -1, 0 }, 2017f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Skip invalid Vendor Extension */ 2027f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10490000", 0, 0 }, 2037f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1049000100", 0, 0 }, 2047f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "104900020000", 0, 0 }, 2057f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Too long unknown vendor extension */ 2067f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10490401" 2077f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2087f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2097f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2107f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2117f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2127f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2137f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2147f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2157f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2167f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2177f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2187f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2197f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2207f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2217f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2227f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2237f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2247f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2257f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2267f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2277f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2287f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2297f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2307f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2317f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2327f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2337f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2347f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2357f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2367f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2377f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2387f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2397f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2407f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "112233445566778899001122334455667788990011223344556677889900" 2417f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt "1122334455", -1, 0 }, 2427f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Maximum unknown vendor extensions */ 2437f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10490003111111104900032222221049000333333310490003444444104900035555551049000366666610490003777777104900038888881049000399999910490003AAAAAA", 0, 5 }, 2447f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* More than maximum unknown vendor extensions */ 2457f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "10490003111111104900032222221049000333333310490003444444104900035555551049000366666610490003777777104900038888881049000399999910490003AAAAAA10490003BBBBBB", -1, 0 }, 2467f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* WFA vendor extensions */ 2477f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1049000300372a", 0, 0 }, 2487f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1049000400372a00", 0, 0 }, 2497f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1049000500372a0001", 0, 0 }, 2507f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1049001600372a0001ff0100020101030101040101ff00fe0101", 0, 6 }, 2517f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Invalid Version2 length */ 2527f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1049000500372a0000", -1, 0 }, 2537f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Invalid Network Key Shareable length */ 2547f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1049000500372a0200", -1, 0 }, 2557f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Invalid Requedt To Enroll length */ 2567f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1049000500372a0300", -1, 0 }, 2577f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* Invalid Settings Delay Time length */ 2587f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "1049000500372a0400", -1, 0 }, 2597f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt /* More than maximum Credential attributes */ 2607f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt { "100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000", 0, 2 }, 2617f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt}; 2627f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 2637f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 2647f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidtstatic int wps_attr_parse_tests(void) 2657f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt{ 2667f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt struct wps_parse_attr attr; 2677f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt unsigned int i; 2687f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt int ret = 0; 2697f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 2707f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt wpa_printf(MSG_INFO, "WPS attribute parsing tests"); 2717f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 2727f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt for (i = 0; i < ARRAY_SIZE(wps_attr_parse_test_cases); i++) { 2737f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt struct wpabuf *buf; 2747f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt size_t len; 2751d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidt const struct wps_attr_parse_test *test = 2767f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt &wps_attr_parse_test_cases[i]; 2777f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 2787f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt len = os_strlen(test->data) / 2; 2797f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt buf = wpabuf_alloc(len); 2807f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt if (buf == NULL) 2817f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt return -1; 2827f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt if (hexstr2bin(test->data, wpabuf_put(buf, len), len) < 0) { 2837f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt wpabuf_free(buf); 2847f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt return -1; 2857f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt } 2867f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt if (wps_parse_msg(buf, &attr) != test->result) { 2877f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt wpa_printf(MSG_ERROR, "WPS attribute parsing test %u failed: %s", 2887f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt i, test->data); 2897f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt ret = -1; 2907f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt } 2917f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt switch (test->extra) { 2927f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt case 1: 2937f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt if (!attr.network_key || !attr.ap_setup_locked) 2947f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt ret = -1; 2957f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt break; 2967f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt case 2: 2977f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt if (attr.num_cred != MAX_CRED_COUNT) 2987f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt ret = -1; 2997f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt break; 3007f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt case 3: 3017f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt if (!attr.network_key_idx) 3027f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt ret = -1; 3037f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt break; 3047f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt case 4: 3057f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt if (attr.num_req_dev_type != MAX_REQ_DEV_TYPE_COUNT) 3067f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt ret = -1; 3077f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt break; 3087f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt case 5: 3097f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt if (attr.num_vendor_ext != MAX_WPS_PARSE_VENDOR_EXT) 3107f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt ret = -1; 3117f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt break; 3127f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt case 6: 3137f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt if (!attr.version2 || 3147f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt !attr.authorized_macs || 3157f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt !attr.network_key_shareable || 3167f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt !attr.request_to_enroll || 3177f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt !attr.settings_delay_time) 3187f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt ret = -1; 3197f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt break; 3207f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt } 3217f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt wpabuf_free(buf); 3227f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt } 3237f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 3247f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt return ret; 3257f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt} 3267f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 3277f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 3287f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidtint wps_module_tests(void) 3297f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt{ 3307f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt int ret = 0; 3317f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 3327f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt wpa_printf(MSG_INFO, "WPS module tests"); 3337f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 3347f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt if (wps_attr_parse_tests() < 0) 3357f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt ret = -1; 3367f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt 3377f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt return ret; 3387f93d6fa14a343127754c33a03cf2f641b6ff6e4Dmitry Shmidt} 339