diff --git a/src/wscutil.c b/src/wscutil.c index 4455e4e0..1488455a 100644 --- a/src/wscutil.c +++ b/src/wscutil.c @@ -1885,6 +1885,32 @@ uint8_t *wsc_build_m5_encrypted_settings( return wsc_attr_builder_free(builder, false, out_len); } +uint8_t *wsc_build_m6(const struct wsc_m6 *m6, const uint8_t *encrypted, + size_t encrypted_len, size_t *out_len) +{ + struct wsc_attr_builder *builder; + uint8_t *ret; + + builder = wsc_attr_builder_new(256); + build_version(builder, 0x10); + build_message_type(builder, WSC_MESSAGE_TYPE_M6); + build_enrollee_nonce(builder, m6->enrollee_nonce); + + wsc_attr_builder_start_attr(builder, WSC_ATTR_ENCRYPTED_SETTINGS); + wsc_attr_builder_put_bytes(builder, encrypted, encrypted_len); + + if (!m6->version2) + goto done; + + START_WFA_VENDOR_EXTENSION(); + +done: + build_authenticator(builder, m6->authenticator); + + ret = wsc_attr_builder_free(builder, false, out_len); + return ret; +} + uint8_t *wsc_build_nack(const struct wsc_nack *nack, size_t *out_len) { struct wsc_attr_builder *builder; diff --git a/src/wscutil.h b/src/wscutil.h index e5df1022..ef75b125 100644 --- a/src/wscutil.h +++ b/src/wscutil.h @@ -521,6 +521,8 @@ uint8_t *wsc_build_m5(const struct wsc_m5 *m5, const uint8_t *encrypted, uint8_t *wsc_build_m5_encrypted_settings( const struct wsc_m5_encrypted_settings *in, size_t *out_len); +uint8_t *wsc_build_m6(const struct wsc_m6 *m6, const uint8_t *encrypted, + size_t encrypted_len, size_t *out_len); uint8_t *wsc_build_nack(const struct wsc_nack *nack, size_t *out_len);