Skip to content

Commit ec78a23

Browse files
author
Richard Ellis
committed
Code changes to allow 64 character hex WiFi passwords to be used with
wifi.radio.connect. Fixes #7677.
1 parent 15f1bca commit ec78a23

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

py/argcheck.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,19 @@ mp_int_t mp_arg_validate_type_int(mp_obj_t obj, qstr arg_name) {
268268
return an_int;
269269
}
270270

271+
mp_int_t mp_arg_validate_valid_hex_password(mp_uint_t length, uint8_t *buf) {
272+
unsigned int i=0;
273+
while (i<length) {
274+
if (!(('0' <= buf[i] && buf[i] <= '9') ||
275+
('a' <= buf[i] && buf[i] <= 'f') ||
276+
('A' <= buf[i] && buf[i] <= 'F'))) {
277+
mp_raise_ValueError_varg(translate("Invalid hex character in password."));
278+
}
279+
i++;
280+
}
281+
return 0;
282+
}
283+
271284
NORETURN void mp_arg_error_invalid(qstr arg_name) {
272285
mp_raise_ValueError_varg(translate("Invalid %q"), arg_name);
273286
}

py/runtime.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ mp_obj_t mp_arg_validate_type_in(mp_obj_t obj, const mp_obj_type_t *type, qstr a
114114
mp_obj_t mp_arg_validate_type_or_none(mp_obj_t obj, const mp_obj_type_t *type, qstr arg_name);
115115
mp_int_t mp_arg_validate_type_int(mp_obj_t obj, qstr arg_name);
116116
mp_obj_t mp_arg_validate_type_string(mp_obj_t obj, qstr arg_name);
117+
mp_int_t mp_arg_validate_valid_hex_password(mp_uint_t length, uint8_t *buf);
117118

118119
static MP_INLINE mp_obj_dict_t *mp_locals_get(void) {
119120
return MP_STATE_THREAD(dict_locals);

shared-bindings/wifi/Radio.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,10 @@ STATIC mp_obj_t wifi_radio_start_ap(size_t n_args, const mp_obj_t *pos_args, mp_
367367
}
368368

369369
if (authmodes != AUTHMODE_OPEN) {
370-
mp_arg_validate_length_range(password.len, 8, 63, MP_QSTR_password);
370+
mp_arg_validate_length_range(password.len, 8, 64, MP_QSTR_password);
371+
if (password.len==64) {
372+
mp_arg_validate_valid_hex_password(password.len, password.buf);
373+
}
371374
}
372375

373376
common_hal_wifi_radio_start_ap(self, ssid.buf, ssid.len, password.buf, password.len, args[ARG_channel].u_int, authmodes, args[ARG_max_connections].u_int);
@@ -445,7 +448,10 @@ STATIC mp_obj_t wifi_radio_connect(size_t n_args, const mp_obj_t *pos_args, mp_m
445448
if (args[ARG_password].u_obj != mp_const_none) {
446449
mp_get_buffer_raise(args[ARG_password].u_obj, &password, MP_BUFFER_READ);
447450
if (password.len != 0) {
448-
mp_arg_validate_length_range(password.len, 8, 63, MP_QSTR_password);
451+
mp_arg_validate_length_range(password.len, 8, 64, MP_QSTR_password);
452+
if (password.len==64) {
453+
mp_arg_validate_valid_hex_password(password.len, password.buf);
454+
}
449455
}
450456
}
451457

0 commit comments

Comments
 (0)