DPP2: Allow Configurator to use AKM suite selectors in Config Object
The new use_akm_selector=1 value to Configurator parameters can now be used to request a list of AKM suite selectors to be used in the Configuration Object if the Enrollee supports version 2 or newer. Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
parent
52d469de11
commit
68fea96038
2 changed files with 41 additions and 2 deletions
|
@ -4585,6 +4585,12 @@ int dpp_set_configurator(struct dpp_global *dpp, void *msg_ctx,
|
||||||
auth->send_conn_status = atoi(pos);
|
auth->send_conn_status = atoi(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pos = os_strstr(cmd, " akm_use_selector=");
|
||||||
|
if (pos) {
|
||||||
|
pos += 18;
|
||||||
|
auth->akm_use_selector = atoi(pos);
|
||||||
|
}
|
||||||
|
|
||||||
if (dpp_configuration_parse(auth, cmd) < 0) {
|
if (dpp_configuration_parse(auth, cmd) < 0) {
|
||||||
wpa_msg(msg_ctx, MSG_INFO,
|
wpa_msg(msg_ctx, MSG_INFO,
|
||||||
"DPP: Failed to set configurator parameters");
|
"DPP: Failed to set configurator parameters");
|
||||||
|
@ -4761,6 +4767,7 @@ dpp_build_conf_obj_dpp(struct dpp_authentication *auth,
|
||||||
size_t extra_len = 1000;
|
size_t extra_len = 1000;
|
||||||
int incl_legacy;
|
int incl_legacy;
|
||||||
enum dpp_akm akm;
|
enum dpp_akm akm;
|
||||||
|
const char *akm_str;
|
||||||
|
|
||||||
if (!auth->conf) {
|
if (!auth->conf) {
|
||||||
wpa_printf(MSG_INFO,
|
wpa_printf(MSG_INFO,
|
||||||
|
@ -4914,7 +4921,11 @@ skip_groups:
|
||||||
if (!buf)
|
if (!buf)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
wpabuf_printf(buf, "\"cred\":{\"akm\":\"%s\",", dpp_akm_str(akm));
|
if (auth->akm_use_selector && dpp_akm_ver2(akm))
|
||||||
|
akm_str = dpp_akm_selector_str(akm);
|
||||||
|
else
|
||||||
|
akm_str = dpp_akm_str(akm);
|
||||||
|
wpabuf_printf(buf, "\"cred\":{\"akm\":\"%s\",", akm_str);
|
||||||
if (incl_legacy) {
|
if (incl_legacy) {
|
||||||
dpp_build_legacy_cred_params(buf, conf);
|
dpp_build_legacy_cred_params(buf, conf);
|
||||||
wpabuf_put_str(buf, ",");
|
wpabuf_put_str(buf, ",");
|
||||||
|
@ -4959,12 +4970,17 @@ dpp_build_conf_obj_legacy(struct dpp_authentication *auth,
|
||||||
struct dpp_configuration *conf)
|
struct dpp_configuration *conf)
|
||||||
{
|
{
|
||||||
struct wpabuf *buf;
|
struct wpabuf *buf;
|
||||||
|
const char *akm_str;
|
||||||
|
|
||||||
buf = dpp_build_conf_start(auth, conf, 1000);
|
buf = dpp_build_conf_start(auth, conf, 1000);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
wpabuf_printf(buf, "\"cred\":{\"akm\":\"%s\",", dpp_akm_str(conf->akm));
|
if (auth->akm_use_selector && dpp_akm_ver2(conf->akm))
|
||||||
|
akm_str = dpp_akm_selector_str(conf->akm);
|
||||||
|
else
|
||||||
|
akm_str = dpp_akm_str(conf->akm);
|
||||||
|
wpabuf_printf(buf, "\"cred\":{\"akm\":\"%s\",", akm_str);
|
||||||
dpp_build_legacy_cred_params(buf, conf);
|
dpp_build_legacy_cred_params(buf, conf);
|
||||||
wpabuf_put_str(buf, "}}");
|
wpabuf_put_str(buf, "}}");
|
||||||
|
|
||||||
|
@ -6024,6 +6040,27 @@ const char * dpp_akm_str(enum dpp_akm akm)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char * dpp_akm_selector_str(enum dpp_akm akm)
|
||||||
|
{
|
||||||
|
switch (akm) {
|
||||||
|
case DPP_AKM_DPP:
|
||||||
|
return "506F9A02";
|
||||||
|
case DPP_AKM_PSK:
|
||||||
|
return "000FAC02+000FAC06";
|
||||||
|
case DPP_AKM_SAE:
|
||||||
|
return "000FAC08";
|
||||||
|
case DPP_AKM_PSK_SAE:
|
||||||
|
return "000FAC02+000FAC06+000FAC08";
|
||||||
|
case DPP_AKM_SAE_DPP:
|
||||||
|
return "506F9A02+000FAC08";
|
||||||
|
case DPP_AKM_PSK_SAE_DPP:
|
||||||
|
return "506F9A02+000FAC08+000FAC02+000FAC06";
|
||||||
|
default:
|
||||||
|
return "??";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static enum dpp_akm dpp_akm_from_str(const char *akm)
|
static enum dpp_akm dpp_akm_from_str(const char *akm)
|
||||||
{
|
{
|
||||||
if (os_strcmp(akm, "psk") == 0)
|
if (os_strcmp(akm, "psk") == 0)
|
||||||
|
|
|
@ -258,6 +258,7 @@ struct dpp_authentication {
|
||||||
os_time_t net_access_key_expiry;
|
os_time_t net_access_key_expiry;
|
||||||
int send_conn_status;
|
int send_conn_status;
|
||||||
int conn_status_requested;
|
int conn_status_requested;
|
||||||
|
int akm_use_selector;
|
||||||
#ifdef CONFIG_TESTING_OPTIONS
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
char *config_obj_override;
|
char *config_obj_override;
|
||||||
char *discovery_override;
|
char *discovery_override;
|
||||||
|
@ -478,6 +479,7 @@ const u8 * dpp_get_attr(const u8 *buf, size_t len, u16 req_id, u16 *ret_len);
|
||||||
int dpp_check_attrs(const u8 *buf, size_t len);
|
int dpp_check_attrs(const u8 *buf, size_t len);
|
||||||
int dpp_key_expired(const char *timestamp, os_time_t *expiry);
|
int dpp_key_expired(const char *timestamp, os_time_t *expiry);
|
||||||
const char * dpp_akm_str(enum dpp_akm akm);
|
const char * dpp_akm_str(enum dpp_akm akm);
|
||||||
|
const char * dpp_akm_selector_str(enum dpp_akm akm);
|
||||||
int dpp_configurator_get_key(const struct dpp_configurator *conf, char *buf,
|
int dpp_configurator_get_key(const struct dpp_configurator *conf, char *buf,
|
||||||
size_t buflen);
|
size_t buflen);
|
||||||
void dpp_configurator_free(struct dpp_configurator *conf);
|
void dpp_configurator_free(struct dpp_configurator *conf);
|
||||||
|
|
Loading…
Reference in a new issue