@@ -75,6 +75,8 @@ struct ssl_args {
75
75
mp_arg_val_t cadata ;
76
76
mp_arg_val_t do_handshake ;
77
77
mp_arg_val_t dtls ;
78
+ mp_arg_val_t psk_identity ;
79
+ mp_arg_val_t psk_key ;
78
80
};
79
81
80
82
STATIC const mp_obj_type_t ussl_socket_type ;
@@ -242,6 +244,22 @@ STATIC mp_obj_ssl_socket_t *socket_new(mp_obj_t sock, struct ssl_args *args) {
242
244
mbedtls_ssl_conf_dbg (& o -> conf , mbedtls_debug , NULL );
243
245
#endif
244
246
247
+ #if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED ) || defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED )
248
+ // banana();
249
+ if (args -> psk_identity .u_obj != mp_const_none && args -> psk_key .u_obj != mp_const_none ) {
250
+ size_t psk_identity_len ;
251
+ size_t psk_key_len ;
252
+ const byte * psk_identity = (const byte * )mp_obj_str_get_data (args -> psk_identity .u_obj , & psk_identity_len );
253
+ const byte * psk_key = (const byte * )mp_obj_str_get_data (args -> psk_key .u_obj , & psk_key_len );
254
+ // len should include terminating null
255
+ ret = mbedtls_ssl_conf_psk (& o -> conf , (const unsigned char * ) psk_key , psk_key_len , (const unsigned char * ) psk_identity , psk_identity_len );
256
+ if (ret != 0 ) {
257
+ ret = MBEDTLS_ERR_PK_BAD_INPUT_DATA ; // use general error for all key errors
258
+ goto cleanup ;
259
+ }
260
+ }
261
+ #endif
262
+
245
263
ret = mbedtls_ssl_setup (& o -> ssl , & o -> conf );
246
264
if (ret != 0 ) {
247
265
goto cleanup ;
@@ -466,6 +484,8 @@ STATIC mp_obj_t mod_ssl_wrap_socket(size_t n_args, const mp_obj_t *pos_args, mp_
466
484
{ MP_QSTR_cadata , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = MP_ROM_NONE } },
467
485
{ MP_QSTR_do_handshake , MP_ARG_KW_ONLY | MP_ARG_BOOL , {.u_bool = true} },
468
486
{ MP_QSTR_dtls , MP_ARG_KW_ONLY | MP_ARG_BOOL , {.u_bool = false} },
487
+ { MP_QSTR_psk_identity , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = MP_ROM_NONE } },
488
+ { MP_QSTR_psk_key , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = MP_ROM_NONE } },
469
489
};
470
490
471
491
// TODO: Check that sock implements stream protocol
0 commit comments