DPP: Protocol testing to remove attributes from Config Req/Resp
Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
c20d3ca8f7
commit
f411ad1b86
2 changed files with 69 additions and 7 deletions
|
@ -1835,16 +1835,39 @@ struct wpabuf * dpp_build_conf_req(struct dpp_authentication *auth,
|
||||||
if (!clear || !msg)
|
if (!clear || !msg)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
if (dpp_test == DPP_TEST_NO_E_NONCE_CONF_REQ) {
|
||||||
|
wpa_printf(MSG_INFO, "DPP: TESTING - no E-nonce");
|
||||||
|
goto skip_e_nonce;
|
||||||
|
}
|
||||||
|
if (dpp_test == DPP_TEST_NO_WRAPPED_DATA_CONF_REQ) {
|
||||||
|
wpa_printf(MSG_INFO, "DPP: TESTING - no Wrapped Data");
|
||||||
|
goto skip_wrapped_data;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
/* E-nonce */
|
/* E-nonce */
|
||||||
wpabuf_put_le16(clear, DPP_ATTR_ENROLLEE_NONCE);
|
wpabuf_put_le16(clear, DPP_ATTR_ENROLLEE_NONCE);
|
||||||
wpabuf_put_le16(clear, nonce_len);
|
wpabuf_put_le16(clear, nonce_len);
|
||||||
wpabuf_put_data(clear, auth->e_nonce, nonce_len);
|
wpabuf_put_data(clear, auth->e_nonce, nonce_len);
|
||||||
|
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
skip_e_nonce:
|
||||||
|
if (dpp_test == DPP_TEST_NO_CONFIG_ATTR_OBJ_CONF_REQ) {
|
||||||
|
wpa_printf(MSG_INFO, "DPP: TESTING - no configAttrib");
|
||||||
|
goto skip_conf_attr_obj;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
/* configAttrib */
|
/* configAttrib */
|
||||||
wpabuf_put_le16(clear, DPP_ATTR_CONFIG_ATTR_OBJ);
|
wpabuf_put_le16(clear, DPP_ATTR_CONFIG_ATTR_OBJ);
|
||||||
wpabuf_put_le16(clear, json_len);
|
wpabuf_put_le16(clear, json_len);
|
||||||
wpabuf_put_data(clear, json, json_len);
|
wpabuf_put_data(clear, json, json_len);
|
||||||
|
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
skip_conf_attr_obj:
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
wpabuf_put_le16(msg, DPP_ATTR_WRAPPED_DATA);
|
wpabuf_put_le16(msg, DPP_ATTR_WRAPPED_DATA);
|
||||||
wpabuf_put_le16(msg, wpabuf_len(clear) + AES_BLOCK_SIZE);
|
wpabuf_put_le16(msg, wpabuf_len(clear) + AES_BLOCK_SIZE);
|
||||||
wrapped = wpabuf_put(msg, wpabuf_len(clear) + AES_BLOCK_SIZE);
|
wrapped = wpabuf_put(msg, wpabuf_len(clear) + AES_BLOCK_SIZE);
|
||||||
|
@ -1864,6 +1887,7 @@ struct wpabuf * dpp_build_conf_req(struct dpp_authentication *auth,
|
||||||
wpabuf_put_le16(msg, DPP_ATTR_TESTING);
|
wpabuf_put_le16(msg, DPP_ATTR_TESTING);
|
||||||
wpabuf_put_le16(msg, 0);
|
wpabuf_put_le16(msg, 0);
|
||||||
}
|
}
|
||||||
|
skip_wrapped_data:
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
wpa_hexdump_buf(MSG_DEBUG,
|
wpa_hexdump_buf(MSG_DEBUG,
|
||||||
|
@ -3772,24 +3796,53 @@ dpp_build_conf_resp(struct dpp_authentication *auth, const u8 *e_nonce,
|
||||||
if (!clear || !msg)
|
if (!clear || !msg)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
if (dpp_test == DPP_TEST_NO_E_NONCE_CONF_RESP) {
|
||||||
|
wpa_printf(MSG_INFO, "DPP: TESTING - no E-nonce");
|
||||||
|
goto skip_e_nonce;
|
||||||
|
}
|
||||||
|
if (dpp_test == DPP_TEST_NO_WRAPPED_DATA_CONF_RESP) {
|
||||||
|
wpa_printf(MSG_INFO, "DPP: TESTING - no Wrapped Data");
|
||||||
|
goto skip_wrapped_data;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
/* E-nonce */
|
/* E-nonce */
|
||||||
wpabuf_put_le16(clear, DPP_ATTR_ENROLLEE_NONCE);
|
wpabuf_put_le16(clear, DPP_ATTR_ENROLLEE_NONCE);
|
||||||
wpabuf_put_le16(clear, e_nonce_len);
|
wpabuf_put_le16(clear, e_nonce_len);
|
||||||
wpabuf_put_data(clear, e_nonce, e_nonce_len);
|
wpabuf_put_data(clear, e_nonce, e_nonce_len);
|
||||||
|
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
skip_e_nonce:
|
||||||
|
if (dpp_test == DPP_TEST_NO_CONFIG_OBJ_CONF_RESP) {
|
||||||
|
wpa_printf(MSG_INFO, "DPP: TESTING - Config Object");
|
||||||
|
goto skip_config_obj;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
if (conf) {
|
if (conf) {
|
||||||
wpabuf_put_le16(clear, DPP_ATTR_CONFIG_OBJ);
|
wpabuf_put_le16(clear, DPP_ATTR_CONFIG_OBJ);
|
||||||
wpabuf_put_le16(clear, wpabuf_len(conf));
|
wpabuf_put_le16(clear, wpabuf_len(conf));
|
||||||
wpabuf_put_buf(clear, conf);
|
wpabuf_put_buf(clear, conf);
|
||||||
wpabuf_free(conf);
|
|
||||||
conf = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
skip_config_obj:
|
||||||
|
if (dpp_test == DPP_TEST_NO_STATUS_CONF_RESP) {
|
||||||
|
wpa_printf(MSG_INFO, "DPP: TESTING - Status");
|
||||||
|
goto skip_status;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
/* DPP Status */
|
/* DPP Status */
|
||||||
wpabuf_put_le16(msg, DPP_ATTR_STATUS);
|
wpabuf_put_le16(msg, DPP_ATTR_STATUS);
|
||||||
wpabuf_put_le16(msg, 1);
|
wpabuf_put_le16(msg, 1);
|
||||||
wpabuf_put_u8(msg, status);
|
wpabuf_put_u8(msg, status);
|
||||||
|
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
skip_status:
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
addr[0] = wpabuf_head(msg);
|
addr[0] = wpabuf_head(msg);
|
||||||
len[0] = wpabuf_len(msg);
|
len[0] = wpabuf_len(msg);
|
||||||
wpa_hexdump(MSG_DEBUG, "DDP: AES-SIV AD", addr[0], len[0]);
|
wpa_hexdump(MSG_DEBUG, "DDP: AES-SIV AD", addr[0], len[0]);
|
||||||
|
@ -3805,8 +3858,6 @@ dpp_build_conf_resp(struct dpp_authentication *auth, const u8 *e_nonce,
|
||||||
goto fail;
|
goto fail;
|
||||||
wpa_hexdump(MSG_DEBUG, "DPP: AES-SIV ciphertext",
|
wpa_hexdump(MSG_DEBUG, "DPP: AES-SIV ciphertext",
|
||||||
wrapped, wpabuf_len(clear) + AES_BLOCK_SIZE);
|
wrapped, wpabuf_len(clear) + AES_BLOCK_SIZE);
|
||||||
wpabuf_free(clear);
|
|
||||||
clear = NULL;
|
|
||||||
|
|
||||||
#ifdef CONFIG_TESTING_OPTIONS
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
if (dpp_test == DPP_TEST_AFTER_WRAPPED_DATA_CONF_RESP) {
|
if (dpp_test == DPP_TEST_AFTER_WRAPPED_DATA_CONF_RESP) {
|
||||||
|
@ -3814,16 +3865,20 @@ dpp_build_conf_resp(struct dpp_authentication *auth, const u8 *e_nonce,
|
||||||
wpabuf_put_le16(msg, DPP_ATTR_TESTING);
|
wpabuf_put_le16(msg, DPP_ATTR_TESTING);
|
||||||
wpabuf_put_le16(msg, 0);
|
wpabuf_put_le16(msg, 0);
|
||||||
}
|
}
|
||||||
|
skip_wrapped_data:
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
wpa_hexdump_buf(MSG_DEBUG,
|
wpa_hexdump_buf(MSG_DEBUG,
|
||||||
"DPP: Configuration Response attributes", msg);
|
"DPP: Configuration Response attributes", msg);
|
||||||
return msg;
|
out:
|
||||||
fail:
|
|
||||||
wpabuf_free(conf);
|
wpabuf_free(conf);
|
||||||
wpabuf_free(clear);
|
wpabuf_free(clear);
|
||||||
|
|
||||||
|
return msg;
|
||||||
|
fail:
|
||||||
wpabuf_free(msg);
|
wpabuf_free(msg);
|
||||||
return NULL;
|
msg = NULL;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -269,6 +269,13 @@ enum dpp_test_behavior {
|
||||||
DPP_TEST_INVALID_BOOTSTRAP_KEY_PKEX_CR_RESP = 48,
|
DPP_TEST_INVALID_BOOTSTRAP_KEY_PKEX_CR_RESP = 48,
|
||||||
DPP_TEST_I_AUTH_TAG_MISMATCH_PKEX_CR_REQ = 49,
|
DPP_TEST_I_AUTH_TAG_MISMATCH_PKEX_CR_REQ = 49,
|
||||||
DPP_TEST_R_AUTH_TAG_MISMATCH_PKEX_CR_RESP = 50,
|
DPP_TEST_R_AUTH_TAG_MISMATCH_PKEX_CR_RESP = 50,
|
||||||
|
DPP_TEST_NO_E_NONCE_CONF_REQ = 51,
|
||||||
|
DPP_TEST_NO_CONFIG_ATTR_OBJ_CONF_REQ = 52,
|
||||||
|
DPP_TEST_NO_WRAPPED_DATA_CONF_REQ = 53,
|
||||||
|
DPP_TEST_NO_E_NONCE_CONF_RESP = 54,
|
||||||
|
DPP_TEST_NO_CONFIG_OBJ_CONF_RESP = 55,
|
||||||
|
DPP_TEST_NO_STATUS_CONF_RESP = 56,
|
||||||
|
DPP_TEST_NO_WRAPPED_DATA_CONF_RESP = 57,
|
||||||
};
|
};
|
||||||
|
|
||||||
extern enum dpp_test_behavior dpp_test;
|
extern enum dpp_test_behavior dpp_test;
|
||||||
|
|
Loading…
Reference in a new issue