hostap/src/wps/wps_module_tests.c
Mikael Kanstrup 8b423edbd3 Declare all read only data structures as const
By analysing objdump output some read only structures were found in
.data section. To help compiler further optimize code declare these
as const.

Signed-off-by: Mikael Kanstrup <mikael.kanstrup@sonymobile.com>
2015-04-25 17:33:06 +03:00

337 lines
12 KiB
C

/*
* WPS module tests
* Copyright (c) 2014, Jouni Malinen <j@w1.fi>
*
* This software may be distributed under the terms of the BSD license.
* See README for more details.
*/
#include "utils/includes.h"
#include "utils/common.h"
#include "wps_attr_parse.h"
struct wps_attr_parse_test {
const char *data;
int result;
int extra;
};
const struct wps_attr_parse_test wps_attr_parse_test_cases[] = {
/* Empty message */
{ "", 0, 0 },
/* Truncated attribute header */
{ "10", -1, 0 },
{ "1010", -1, 0 },
{ "101000", -1, 0 },
/* Attribute overflow */
{ "10100001", -1, 0 },
#ifdef CONFIG_WPS_STRICT
{ "10270000001057000101", -1, 0 },
{ "1027000010570001010000000000", -1, 0 },
#else /* CONFIG_WPS_STRICT */
/* Network Key workaround */
{ "10270000001057000101", 0, 1 },
{ "10230000001057000101", -1, 0 },
{ "10270000101057000101", -1, 0 },
/* Mac OS X 10.6 padding workaround */
{ "1027000010570001010000000000", 0, 1 },
{ "1027000010570001010000000000000001000000", -1, 0 },
#endif /* CONFIG_WPS_STRICT */
/* Version */
{ "104a000110", 0, 0 },
{ "104a0000", -1, 0 },
/* Message Type */
{ "1022000101", 0, 0 },
{ "10220000", -1, 0 },
/* Enrollee Nonce */
{ "101a001000112233445566778899aabbccddeeff", 0, 0 },
{ "101a00111122334455667788990011223344556677", -1, 0 },
/* Registrar Nonce */
{ "1039001000112233445566778899aabbccddeeff", 0, 0 },
{ "103900111122334455667788990011223344556677", -1, 0 },
/* UUID-E */
{ "1047001000112233445566778899aabbccddeeff", 0, 0 },
{ "10470000", -1, 0 },
{ "104700111122334455667788990011223344556677", -1, 0 },
/* UUID-R */
{ "1048001000112233445566778899aabbccddeeff", 0, 0 },
{ "10480000", -1, 0 },
{ "104800111122334455667788990011223344556677", -1, 0 },
/* Auth Type Flags */
{ "100400021122", 0, 0 },
{ "10040001ff", -1, 0 },
/* Encr Type Flags */
{ "101000021122", 0, 0 },
{ "10100001ff", -1, 0 },
/* Connection Type Flags */
{ "100d0001ff", 0, 0 },
{ "100d0002ffff", -1, 0 },
/* Config Methods */
{ "10080002ffff", 0, 0 },
{ "10080001ff", -1, 0 },
/* Selected Registrar Config Methods */
{ "10530002ffff", 0, 0 },
{ "10530001ff", -1, 0 },
/* Primary Device Type */
{ "105400081122334455667788", 0, 0 },
{ "105400111122334455667788990011223344556677", -1, 0 },
/* RF Bands */
{ "103c0001ff", 0, 0 },
{ "103c0002ffff", -1, 0 },
/* Association State */
{ "10020002ffff", 0, 0 },
{ "10020001ff", -1, 0 },
/* Config Error */
{ "100900020001", 0, 0 },
{ "10090001ff", -1, 0 },
/* Device Password ID */
{ "101200020004", 0, 0 },
{ "10120001ff", -1, 0 },
/* OOB Device Password */
{ "102c001611223344556677889900112233445566778899000007", 0, 0 },
{ "102c0036112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344", 0, 0 },
{ "102c0001ff", -1, 0 },
{ "102c003711223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455", -1, 0 },
{ "102c002511223344556677889900112233445566778899001122334455667788990011223344556677", -1, 0 },
/* OS Version */
{ "102d000411223344", 0, 0 },
{ "102d00111122334455667788990011223344556677", -1, 0 },
/* WPS State */
{ "1044000101", 0, 0 },
{ "10440002ffff", -1, 0 },
/* Authenticator */
{ "100500081122334455667788", 0, 0 },
{ "10050000", -1, 0 },
{ "100500111122334455667788990011223344556677", -1, 0 },
/* R-Hash1 */
{ "103d00201122334455667788990011223344556677889900112233445566778899001122", 0, 0 },
{ "103d0000", -1, 0 },
{ "103d0021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 },
/* R-Hash2 */
{ "103e00201122334455667788990011223344556677889900112233445566778899001122", 0, 0 },
{ "103e0000", -1, 0 },
{ "103e0021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 },
/* E-Hash1 */
{ "101400201122334455667788990011223344556677889900112233445566778899001122", 0, 0 },
{ "10140000", -1, 0 },
{ "10140021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 },
/* E-Hash2 */
{ "101500201122334455667788990011223344556677889900112233445566778899001122", 0, 0 },
{ "10150000", -1, 0 },
{ "10150021112233445566778899001122334455667788990011223344556677889900112233", -1, 0 },
/* R-SNonce1 */
{ "103f001011223344556677889900112233445566", 0, 0 },
{ "103f0000", -1, 0 },
{ "103f00111122334455667788990011223344556677", -1, 0 },
/* R-SNonce2 */
{ "1040001011223344556677889900112233445566", 0, 0 },
{ "10400000", -1, 0 },
{ "104000111122334455667788990011223344556677", -1, 0 },
/* E-SNonce1 */
{ "1016001011223344556677889900112233445566", 0, 0 },
{ "10160000", -1, 0 },
{ "101600111122334455667788990011223344556677", -1, 0 },
/* E-SNonce2 */
{ "1017001011223344556677889900112233445566", 0, 0 },
{ "10170000", -1, 0 },
{ "101700111122334455667788990011223344556677", -1, 0 },
/* Key Wrap Authenticator */
{ "101e00081122334455667788", 0, 0 },
{ "101e0000", -1, 0 },
{ "101e0009112233445566778899", -1, 0 },
/* Authentication Type */
{ "100300020001", 0, 0 },
{ "10030001ff", -1, 0 },
/* Encryption Type */
{ "100f00020001", 0, 0 },
{ "100f0001ff", -1, 0 },
/* Network Index */
{ "1026000101", 0, 0 },
{ "10260002ffff", -1, 0 },
/* Network Key Index */
{ "1028000101", 0, 3 },
{ "10280002ffff", -1, 0 },
/* MAC Address */
{ "10200006112233445566", 0, 0 },
{ "10200000", -1, 0 },
{ "1020000711223344556677", -1, 0 },
/* Selected Registrar */
{ "1041000101", 0, 0 },
{ "10410002ffff", -1, 0 },
/* Request Type */
{ "103a000101", 0, 0 },
{ "103a0002ffff", -1, 0 },
/* Response Type */
{ "103b000101", 0, 0 },
{ "103b0002ffff", -1, 0 },
/* Manufacturer */
{ "10210000", 0, 0 },
/* Model Name */
{ "10230000", 0, 0 },
/* Model Number */
{ "10240000", 0, 0 },
/* Serial Number */
{ "10420000", 0, 0 },
/* Device Name */
{ "10110000", 0, 0 },
/* Public Key */
{ "10320000", 0, 0 },
/* Enc Settings */
{ "10180000", 0, 0 },
/* SSID */
{ "10450000", 0, 0 },
/* AP Setup Locked */
{ "1057000101", 0, 0 },
{ "10570002ffff", -1, 0 },
/* Requested Device Type */
{ "106a00081122334455667788", 0, 0 },
{ "106a0000", -1, 0 },
{ "106a0009112233445566778899", -1, 0 },
/* More than maximum Requested Device Type attributes */
{ "106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788106a00081122334455667788", 0, 4 },
/* Secondary Device Type List */
{ "105500081122334455667788", 0, 0 },
{ "1055000711223344556677", -1, 0 },
{ "1055008811223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566", -1, 0 },
/* AP Channel */
{ "100100020001", 0, 0 },
{ "1001000101", -1, 0 },
/* Skip invalid Vendor Extension */
{ "10490000", 0, 0 },
{ "1049000100", 0, 0 },
{ "104900020000", 0, 0 },
/* Too long unknown vendor extension */
{ "10490401"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"112233445566778899001122334455667788990011223344556677889900"
"1122334455", -1, 0 },
/* Maximum unknown vendor extensions */
{ "10490003111111104900032222221049000333333310490003444444104900035555551049000366666610490003777777104900038888881049000399999910490003AAAAAA", 0, 5 },
/* More than maximum unknown vendor extensions */
{ "10490003111111104900032222221049000333333310490003444444104900035555551049000366666610490003777777104900038888881049000399999910490003AAAAAA10490003BBBBBB", -1, 0 },
/* WFA vendor extensions */
{ "1049000300372a", 0, 0 },
{ "1049000400372a00", 0, 0 },
{ "1049000500372a0001", 0, 0 },
{ "1049001600372a0001ff0100020101030101040101ff00fe0101", 0, 6 },
/* Invalid Version2 length */
{ "1049000500372a0000", -1, 0 },
/* Invalid Network Key Shareable length */
{ "1049000500372a0200", -1, 0 },
/* Invalid Requedt To Enroll length */
{ "1049000500372a0300", -1, 0 },
/* Invalid Settings Delay Time length */
{ "1049000500372a0400", -1, 0 },
/* More than maximum Credential attributes */
{ "100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000100e0000", 0, 2 },
};
static int wps_attr_parse_tests(void)
{
struct wps_parse_attr attr;
unsigned int i;
int ret = 0;
wpa_printf(MSG_INFO, "WPS attribute parsing tests");
for (i = 0; i < ARRAY_SIZE(wps_attr_parse_test_cases); i++) {
struct wpabuf *buf;
size_t len;
const struct wps_attr_parse_test *test =
&wps_attr_parse_test_cases[i];
len = os_strlen(test->data) / 2;
buf = wpabuf_alloc(len);
if (buf == NULL)
return -1;
if (hexstr2bin(test->data, wpabuf_put(buf, len), len) < 0) {
wpabuf_free(buf);
return -1;
}
if (wps_parse_msg(buf, &attr) != test->result) {
wpa_printf(MSG_ERROR, "WPS attribute parsing test %u failed: %s",
i, test->data);
ret = -1;
}
switch (test->extra) {
case 1:
if (!attr.network_key || !attr.ap_setup_locked)
ret = -1;
break;
case 2:
if (attr.num_cred != MAX_CRED_COUNT)
ret = -1;
break;
case 3:
if (!attr.network_key_idx)
ret = -1;
break;
case 4:
if (attr.num_req_dev_type != MAX_REQ_DEV_TYPE_COUNT)
ret = -1;
break;
case 5:
if (attr.num_vendor_ext != MAX_WPS_PARSE_VENDOR_EXT)
ret = -1;
break;
case 6:
if (!attr.version2 ||
!attr.authorized_macs ||
!attr.network_key_shareable ||
!attr.request_to_enroll ||
!attr.settings_delay_time)
ret = -1;
break;
}
wpabuf_free(buf);
}
return ret;
}
int wps_module_tests(void)
{
int ret = 0;
wpa_printf(MSG_INFO, "WPS module tests");
if (wps_attr_parse_tests() < 0)
ret = -1;
return ret;
}