From 8df0f9fa285c11b45776545525b74fa275b17e5a Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Wed, 31 Aug 2016 11:38:52 -0500 Subject: [PATCH] wscutil: Add wsc_parse_m7_encrypted_settings --- src/wscutil.c | 12 ++++++++++++ src/wscutil.h | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/src/wscutil.c b/src/wscutil.c index bcc4e564..9a27d199 100644 --- a/src/wscutil.c +++ b/src/wscutil.c @@ -510,6 +510,7 @@ static attr_handler handler_for_type(enum wsc_attr type) case WSC_ATTR_E_HASH2: return extract_hash; case WSC_ATTR_E_SNONCE1: + case WSC_ATTR_E_SNONCE2: return extract_nonce; case WSC_ATTR_ENCRYPTED_SETTINGS: return extract_encrypted_settings; @@ -1267,6 +1268,17 @@ int wsc_parse_m7(const uint8_t *pdu, uint32_t len, struct wsc_m7 *out, return 0; } +int wsc_parse_m7_encrypted_settings(const uint8_t *pdu, uint32_t len, + struct wsc_m7_encrypted_settings *out) +{ + memset(out, 0, sizeof(*out)); + + return wsc_parse_attrs(pdu, len, NULL, NULL, + WSC_ATTR_KEY_WRAP_AUTHENTICATOR, out->authenticator, + REQUIRED(E_SNONCE2, out->e_snonce2), + WSC_ATTR_INVALID); +} + int wsc_parse_nack(const uint8_t *pdu, uint32_t len, struct wsc_nack *out) { int r; diff --git a/src/wscutil.h b/src/wscutil.h index b13f6725..c2f7c54e 100644 --- a/src/wscutil.h +++ b/src/wscutil.h @@ -487,6 +487,11 @@ struct wsc_m7 { uint8_t authenticator[8]; }; +struct wsc_m7_encrypted_settings { + uint8_t e_snonce2[16]; + uint8_t authenticator[8]; +}; + struct wsc_nack { bool version2; uint8_t enrollee_nonce[16]; @@ -518,6 +523,8 @@ int wsc_parse_m6_encrypted_settings(const uint8_t *pdu, uint32_t len, struct wsc_m6_encrypted_settings *out); int wsc_parse_m7(const uint8_t *pdu, uint32_t len, struct wsc_m7 *out, struct iovec *out_encrypted); +int wsc_parse_m7_encrypted_settings(const uint8_t *pdu, uint32_t len, + struct wsc_m7_encrypted_settings *out); int wsc_parse_nack(const uint8_t *pdu, uint32_t len, struct wsc_nack *out);