]>
Commit | Line | Data |
---|---|---|
be27e185 JM |
1 | /* |
2 | * DPP functionality shared between hostapd and wpa_supplicant | |
3 | * Copyright (c) 2017, Qualcomm Atheros, Inc. | |
4 | * | |
5 | * This software may be distributed under the terms of the BSD license. | |
6 | * See README for more details. | |
7 | */ | |
8 | ||
9 | #ifndef DPP_H | |
10 | #define DPP_H | |
11 | ||
12 | #include <openssl/x509.h> | |
13 | ||
14 | #include "utils/list.h" | |
650a70a7 | 15 | #include "common/wpa_common.h" |
be27e185 JM |
16 | #include "crypto/sha256.h" |
17 | ||
dc4d271c JM |
18 | #define DPP_HDR_LEN (4 + 2) /* OUI, OUI Type, Crypto Suite, DPP frame type */ |
19 | ||
30d27b04 JM |
20 | enum dpp_public_action_frame_type { |
21 | DPP_PA_AUTHENTICATION_REQ = 0, | |
22 | DPP_PA_AUTHENTICATION_RESP = 1, | |
23 | DPP_PA_AUTHENTICATION_CONF = 2, | |
24 | DPP_PA_PEER_DISCOVERY_REQ = 5, | |
25 | DPP_PA_PEER_DISCOVERY_RESP = 6, | |
26 | DPP_PA_PKEX_EXCHANGE_REQ = 7, | |
27 | DPP_PA_PKEX_EXCHANGE_RESP = 8, | |
28 | DPP_PA_PKEX_COMMIT_REVEAL_REQ = 9, | |
29 | DPP_PA_PKEX_COMMIT_REVEAL_RESP = 10, | |
30 | }; | |
31 | ||
32 | enum dpp_attribute_id { | |
33 | DPP_ATTR_STATUS = 0x1000, | |
34 | DPP_ATTR_I_BOOTSTRAP_KEY_HASH = 0x1001, | |
35 | DPP_ATTR_R_BOOTSTRAP_KEY_HASH = 0x1002, | |
36 | DPP_ATTR_I_PROTOCOL_KEY = 0x1003, | |
37 | DPP_ATTR_WRAPPED_DATA = 0x1004, | |
38 | DPP_ATTR_I_NONCE = 0x1005, | |
39 | DPP_ATTR_I_CAPABILITIES = 0x1006, | |
40 | DPP_ATTR_R_NONCE = 0x1007, | |
41 | DPP_ATTR_R_CAPABILITIES = 0x1008, | |
42 | DPP_ATTR_R_PROTOCOL_KEY = 0x1009, | |
43 | DPP_ATTR_I_AUTH_TAG = 0x100A, | |
44 | DPP_ATTR_R_AUTH_TAG = 0x100B, | |
45 | DPP_ATTR_CONFIG_OBJ = 0x100C, | |
46 | DPP_ATTR_CONNECTOR = 0x100D, | |
47 | DPP_ATTR_CONFIG_ATTR_OBJ = 0x100E, | |
48 | DPP_ATTR_BOOTSTRAP_KEY = 0x100F, | |
30d27b04 JM |
49 | DPP_ATTR_OWN_NET_NK_HASH = 0x1011, |
50 | DPP_ATTR_FINITE_CYCLIC_GROUP = 0x1012, | |
51 | DPP_ATTR_ENCRYPTED_KEY = 0x1013, | |
52 | DPP_ATTR_ENROLLEE_NONCE = 0x1014, | |
53 | DPP_ATTR_CODE_IDENTIFIER = 0x1015, | |
85fd8263 | 54 | DPP_ATTR_TRANSACTION_ID = 0x1016, |
d2709206 JM |
55 | DPP_ATTR_BOOTSTRAP_INFO = 0x1017, |
56 | DPP_ATTR_CHANNEL = 0x1018, | |
30d27b04 JM |
57 | }; |
58 | ||
59 | enum dpp_status_error { | |
60 | DPP_STATUS_OK = 0, | |
61 | DPP_STATUS_NOT_COMPATIBLE = 1, | |
62 | DPP_STATUS_AUTH_FAILURE = 2, | |
63 | DPP_STATUS_UNWRAP_FAILURE = 3, | |
64 | DPP_STATUS_BAD_GROUP = 4, | |
65 | DPP_STATUS_CONFIGURE_FAILURE = 5, | |
66 | DPP_STATUS_RESPONSE_PENDING = 6, | |
e85b6601 JM |
67 | DPP_STATUS_INVALID_CONNECTOR = 7, |
68 | DPP_STATUS_NO_MATCH = 8, | |
30d27b04 JM |
69 | }; |
70 | ||
71 | #define DPP_CAPAB_ENROLLEE BIT(0) | |
72 | #define DPP_CAPAB_CONFIGURATOR BIT(1) | |
73 | #define DPP_CAPAB_ROLE_MASK (BIT(0) | BIT(1)) | |
74 | ||
be27e185 | 75 | #define DPP_BOOTSTRAP_MAX_FREQ 30 |
30d27b04 JM |
76 | #define DPP_MAX_NONCE_LEN 32 |
77 | #define DPP_MAX_HASH_LEN 64 | |
78 | #define DPP_MAX_SHARED_SECRET_LEN 66 | |
be27e185 JM |
79 | |
80 | struct dpp_curve_params { | |
81 | const char *name; | |
82 | size_t hash_len; | |
83 | size_t aes_siv_key_len; | |
84 | size_t nonce_len; | |
85 | size_t prime_len; | |
86 | const char *jwk_crv; | |
500ed7f0 | 87 | u16 ike_group; |
31f03cb0 | 88 | const char *jws_alg; |
be27e185 JM |
89 | }; |
90 | ||
91 | enum dpp_bootstrap_type { | |
92 | DPP_BOOTSTRAP_QR_CODE, | |
500ed7f0 | 93 | DPP_BOOTSTRAP_PKEX, |
be27e185 JM |
94 | }; |
95 | ||
96 | struct dpp_bootstrap_info { | |
97 | struct dl_list list; | |
98 | unsigned int id; | |
99 | enum dpp_bootstrap_type type; | |
100 | char *uri; | |
101 | u8 mac_addr[ETH_ALEN]; | |
102 | char *info; | |
103 | unsigned int freq[DPP_BOOTSTRAP_MAX_FREQ]; | |
104 | unsigned int num_freq; | |
105 | int own; | |
106 | EVP_PKEY *pubkey; | |
107 | u8 pubkey_hash[SHA256_MAC_LEN]; | |
108 | const struct dpp_curve_params *curve; | |
29ab69e4 JM |
109 | unsigned int pkex_t; /* number of failures before dpp_pkex |
110 | * instantiation */ | |
be27e185 JM |
111 | }; |
112 | ||
29ab69e4 JM |
113 | #define PKEX_COUNTER_T_LIMIT 5 |
114 | ||
500ed7f0 | 115 | struct dpp_pkex { |
219d4c9f | 116 | void *msg_ctx; |
500ed7f0 JM |
117 | unsigned int initiator:1; |
118 | unsigned int exchange_done:1; | |
e0247e79 | 119 | unsigned int failed:1; |
500ed7f0 JM |
120 | struct dpp_bootstrap_info *own_bi; |
121 | u8 own_mac[ETH_ALEN]; | |
122 | u8 peer_mac[ETH_ALEN]; | |
123 | char *identifier; | |
124 | char *code; | |
125 | EVP_PKEY *x; | |
126 | EVP_PKEY *y; | |
127 | u8 Mx[DPP_MAX_SHARED_SECRET_LEN]; | |
128 | u8 Nx[DPP_MAX_SHARED_SECRET_LEN]; | |
129 | u8 z[DPP_MAX_HASH_LEN]; | |
130 | EVP_PKEY *peer_bootstrap_key; | |
131 | struct wpabuf *exchange_req; | |
132 | struct wpabuf *exchange_resp; | |
29ab69e4 | 133 | unsigned int t; /* number of failures on code use */ |
00d2d13d JM |
134 | unsigned int exch_req_wait_time; |
135 | unsigned int exch_req_tries; | |
136 | unsigned int freq; | |
500ed7f0 JM |
137 | }; |
138 | ||
5dd745b7 JM |
139 | enum dpp_akm { |
140 | DPP_AKM_UNKNOWN, | |
141 | DPP_AKM_DPP, | |
142 | DPP_AKM_PSK, | |
143 | DPP_AKM_SAE, | |
144 | DPP_AKM_PSK_SAE | |
145 | }; | |
146 | ||
461d39af JM |
147 | struct dpp_configuration { |
148 | u8 ssid[32]; | |
149 | size_t ssid_len; | |
e3a5882b | 150 | enum dpp_akm akm; |
461d39af JM |
151 | |
152 | /* For DPP configuration (connector) */ | |
153 | os_time_t netaccesskey_expiry; | |
154 | ||
a4bf0078 | 155 | /* TODO: groups */ |
461d39af JM |
156 | |
157 | /* For legacy configuration */ | |
158 | char *passphrase; | |
159 | u8 psk[32]; | |
160 | }; | |
161 | ||
30d27b04 JM |
162 | struct dpp_authentication { |
163 | void *msg_ctx; | |
164 | const struct dpp_curve_params *curve; | |
165 | struct dpp_bootstrap_info *peer_bi; | |
166 | struct dpp_bootstrap_info *own_bi; | |
167 | u8 waiting_pubkey_hash[SHA256_MAC_LEN]; | |
168 | int response_pending; | |
169 | enum dpp_status_error auth_resp_status; | |
170 | u8 peer_mac_addr[ETH_ALEN]; | |
171 | u8 i_nonce[DPP_MAX_NONCE_LEN]; | |
172 | u8 r_nonce[DPP_MAX_NONCE_LEN]; | |
461d39af | 173 | u8 e_nonce[DPP_MAX_NONCE_LEN]; |
30d27b04 JM |
174 | u8 i_capab; |
175 | u8 r_capab; | |
176 | EVP_PKEY *own_protocol_key; | |
177 | EVP_PKEY *peer_protocol_key; | |
dc4d271c JM |
178 | struct wpabuf *req_msg; |
179 | struct wpabuf *resp_msg; | |
f97ace34 JM |
180 | /* Intersection of possible frequencies for initiating DPP |
181 | * Authentication exchange */ | |
182 | unsigned int freq[DPP_BOOTSTRAP_MAX_FREQ]; | |
183 | unsigned int num_freq, freq_idx; | |
30d27b04 | 184 | unsigned int curr_freq; |
d2709206 | 185 | unsigned int neg_freq; |
f97ace34 | 186 | unsigned int num_freq_iters; |
30d27b04 JM |
187 | size_t secret_len; |
188 | u8 Mx[DPP_MAX_SHARED_SECRET_LEN]; | |
189 | u8 Nx[DPP_MAX_SHARED_SECRET_LEN]; | |
190 | u8 Lx[DPP_MAX_SHARED_SECRET_LEN]; | |
191 | u8 k1[DPP_MAX_HASH_LEN]; | |
192 | u8 k2[DPP_MAX_HASH_LEN]; | |
193 | u8 ke[DPP_MAX_HASH_LEN]; | |
194 | int initiator; | |
f97ace34 | 195 | int waiting_auth_resp; |
95b0104a | 196 | int waiting_auth_conf; |
248264c6 | 197 | int auth_req_ack; |
95b0104a | 198 | unsigned int auth_resp_tries; |
d1f08264 | 199 | u8 allowed_roles; |
30d27b04 JM |
200 | int configurator; |
201 | int remove_on_tx_status; | |
202 | int auth_success; | |
461d39af JM |
203 | struct wpabuf *conf_req; |
204 | struct dpp_configuration *conf_ap; | |
205 | struct dpp_configuration *conf_sta; | |
206 | struct dpp_configurator *conf; | |
207 | char *connector; /* received signedConnector */ | |
208 | u8 ssid[SSID_MAX_LEN]; | |
209 | u8 ssid_len; | |
8528994e JM |
210 | char passphrase[64]; |
211 | u8 psk[PMK_LEN]; | |
212 | int psk_set; | |
5dd745b7 | 213 | enum dpp_akm akm; |
461d39af JM |
214 | struct wpabuf *net_access_key; |
215 | os_time_t net_access_key_expiry; | |
216 | struct wpabuf *c_sign_key; | |
461d39af JM |
217 | #ifdef CONFIG_TESTING_OPTIONS |
218 | char *config_obj_override; | |
219 | char *discovery_override; | |
220 | char *groups_override; | |
461d39af JM |
221 | unsigned int ignore_netaccesskey_mismatch:1; |
222 | #endif /* CONFIG_TESTING_OPTIONS */ | |
223 | }; | |
224 | ||
225 | struct dpp_configurator { | |
226 | struct dl_list list; | |
227 | unsigned int id; | |
228 | int own; | |
229 | EVP_PKEY *csign; | |
230 | char *kid; | |
231 | const struct dpp_curve_params *curve; | |
30d27b04 JM |
232 | }; |
233 | ||
650a70a7 JM |
234 | struct dpp_introduction { |
235 | u8 pmkid[PMKID_LEN]; | |
236 | u8 pmk[PMK_LEN_MAX]; | |
237 | size_t pmk_len; | |
650a70a7 JM |
238 | }; |
239 | ||
60239f60 JM |
240 | #ifdef CONFIG_TESTING_OPTIONS |
241 | enum dpp_test_behavior { | |
242 | DPP_TEST_DISABLED = 0, | |
243 | DPP_TEST_AFTER_WRAPPED_DATA_AUTH_REQ = 1, | |
244 | DPP_TEST_AFTER_WRAPPED_DATA_AUTH_RESP = 2, | |
245 | DPP_TEST_AFTER_WRAPPED_DATA_AUTH_CONF = 3, | |
246 | DPP_TEST_AFTER_WRAPPED_DATA_PKEX_CR_REQ = 4, | |
247 | DPP_TEST_AFTER_WRAPPED_DATA_PKEX_CR_RESP = 5, | |
248 | DPP_TEST_AFTER_WRAPPED_DATA_CONF_REQ = 6, | |
249 | DPP_TEST_AFTER_WRAPPED_DATA_CONF_RESP = 7, | |
250 | DPP_TEST_ZERO_I_CAPAB = 8, | |
251 | DPP_TEST_ZERO_R_CAPAB = 9, | |
0e7cb8c6 JM |
252 | DPP_TEST_NO_R_BOOTSTRAP_KEY_HASH_AUTH_REQ = 10, |
253 | DPP_TEST_NO_I_BOOTSTRAP_KEY_HASH_AUTH_REQ = 11, | |
254 | DPP_TEST_NO_I_PROTO_KEY_AUTH_REQ = 12, | |
255 | DPP_TEST_NO_I_NONCE_AUTH_REQ = 13, | |
256 | DPP_TEST_NO_I_CAPAB_AUTH_REQ = 14, | |
257 | DPP_TEST_NO_WRAPPED_DATA_AUTH_REQ = 15, | |
ce9acce0 JM |
258 | DPP_TEST_NO_STATUS_AUTH_RESP = 16, |
259 | DPP_TEST_NO_R_BOOTSTRAP_KEY_HASH_AUTH_RESP = 17, | |
260 | DPP_TEST_NO_I_BOOTSTRAP_KEY_HASH_AUTH_RESP = 18, | |
261 | DPP_TEST_NO_R_PROTO_KEY_AUTH_RESP = 19, | |
262 | DPP_TEST_NO_R_NONCE_AUTH_RESP = 20, | |
263 | DPP_TEST_NO_I_NONCE_AUTH_RESP = 21, | |
264 | DPP_TEST_NO_R_CAPAB_AUTH_RESP = 22, | |
265 | DPP_TEST_NO_R_AUTH_AUTH_RESP = 23, | |
266 | DPP_TEST_NO_WRAPPED_DATA_AUTH_RESP = 24, | |
f9c7d770 JM |
267 | DPP_TEST_NO_STATUS_AUTH_CONF = 25, |
268 | DPP_TEST_NO_R_BOOTSTRAP_KEY_HASH_AUTH_CONF = 26, | |
269 | DPP_TEST_NO_I_BOOTSTRAP_KEY_HASH_AUTH_CONF = 27, | |
270 | DPP_TEST_NO_I_AUTH_AUTH_CONF = 28, | |
271 | DPP_TEST_NO_WRAPPED_DATA_AUTH_CONF = 29, | |
978bc3f2 JM |
272 | DPP_TEST_I_NONCE_MISMATCH_AUTH_RESP = 30, |
273 | DPP_TEST_INCOMPATIBLE_R_CAPAB_AUTH_RESP = 31, | |
274 | DPP_TEST_R_AUTH_MISMATCH_AUTH_RESP = 32, | |
275 | DPP_TEST_I_AUTH_MISMATCH_AUTH_CONF = 33, | |
61f9f27f JM |
276 | DPP_TEST_NO_FINITE_CYCLIC_GROUP_PKEX_EXCHANGE_REQ = 34, |
277 | DPP_TEST_NO_ENCRYPTED_KEY_PKEX_EXCHANGE_REQ = 35, | |
278 | DPP_TEST_NO_STATUS_PKEX_EXCHANGE_RESP = 36, | |
279 | DPP_TEST_NO_ENCRYPTED_KEY_PKEX_EXCHANGE_RESP = 37, | |
280 | DPP_TEST_NO_BOOTSTRAP_KEY_PKEX_CR_REQ = 38, | |
281 | DPP_TEST_NO_I_AUTH_TAG_PKEX_CR_REQ = 39, | |
282 | DPP_TEST_NO_WRAPPED_DATA_PKEX_CR_REQ = 40, | |
283 | DPP_TEST_NO_BOOTSTRAP_KEY_PKEX_CR_RESP = 41, | |
284 | DPP_TEST_NO_R_AUTH_TAG_PKEX_CR_RESP = 42, | |
285 | DPP_TEST_NO_WRAPPED_DATA_PKEX_CR_RESP = 43, | |
1cfcbd32 JM |
286 | DPP_TEST_INVALID_ENCRYPTED_KEY_PKEX_EXCHANGE_REQ = 44, |
287 | DPP_TEST_INVALID_ENCRYPTED_KEY_PKEX_EXCHANGE_RESP = 45, | |
f31ef96d | 288 | DPP_TEST_INVALID_STATUS_PKEX_EXCHANGE_RESP = 46, |
89d0bf67 JM |
289 | DPP_TEST_INVALID_BOOTSTRAP_KEY_PKEX_CR_REQ = 47, |
290 | DPP_TEST_INVALID_BOOTSTRAP_KEY_PKEX_CR_RESP = 48, | |
7e0ebe21 JM |
291 | DPP_TEST_I_AUTH_TAG_MISMATCH_PKEX_CR_REQ = 49, |
292 | DPP_TEST_R_AUTH_TAG_MISMATCH_PKEX_CR_RESP = 50, | |
f411ad1b JM |
293 | DPP_TEST_NO_E_NONCE_CONF_REQ = 51, |
294 | DPP_TEST_NO_CONFIG_ATTR_OBJ_CONF_REQ = 52, | |
295 | DPP_TEST_NO_WRAPPED_DATA_CONF_REQ = 53, | |
296 | DPP_TEST_NO_E_NONCE_CONF_RESP = 54, | |
297 | DPP_TEST_NO_CONFIG_OBJ_CONF_RESP = 55, | |
298 | DPP_TEST_NO_STATUS_CONF_RESP = 56, | |
299 | DPP_TEST_NO_WRAPPED_DATA_CONF_RESP = 57, | |
af7f10fc JM |
300 | DPP_TEST_INVALID_STATUS_CONF_RESP = 58, |
301 | DPP_TEST_E_NONCE_MISMATCH_CONF_RESP = 59, | |
a306ed5a JM |
302 | DPP_TEST_NO_TRANSACTION_ID_PEER_DISC_REQ = 60, |
303 | DPP_TEST_NO_CONNECTOR_PEER_DISC_REQ = 61, | |
304 | DPP_TEST_NO_TRANSACTION_ID_PEER_DISC_RESP = 62, | |
305 | DPP_TEST_NO_STATUS_PEER_DISC_RESP = 63, | |
306 | DPP_TEST_NO_CONNECTOR_PEER_DISC_RESP = 64, | |
762fb4f0 | 307 | DPP_TEST_AUTH_RESP_IN_PLACE_OF_CONF = 65, |
b6b4226b JM |
308 | DPP_TEST_INVALID_I_PROTO_KEY_AUTH_REQ = 66, |
309 | DPP_TEST_INVALID_R_PROTO_KEY_AUTH_RESP = 67, | |
65ecce87 JM |
310 | DPP_TEST_INVALID_R_BOOTSTRAP_KEY_HASH_AUTH_REQ = 68, |
311 | DPP_TEST_INVALID_I_BOOTSTRAP_KEY_HASH_AUTH_REQ = 69, | |
312 | DPP_TEST_INVALID_R_BOOTSTRAP_KEY_HASH_AUTH_RESP = 70, | |
313 | DPP_TEST_INVALID_I_BOOTSTRAP_KEY_HASH_AUTH_RESP = 71, | |
314 | DPP_TEST_INVALID_R_BOOTSTRAP_KEY_HASH_AUTH_CONF = 72, | |
315 | DPP_TEST_INVALID_I_BOOTSTRAP_KEY_HASH_AUTH_CONF = 73, | |
3f35ec2d JM |
316 | DPP_TEST_INVALID_STATUS_AUTH_RESP = 74, |
317 | DPP_TEST_INVALID_STATUS_AUTH_CONF = 75, | |
f9cf7d03 | 318 | DPP_TEST_INVALID_CONFIG_ATTR_OBJ_CONF_REQ = 76, |
4b8de0c9 JM |
319 | DPP_TEST_INVALID_TRANSACTION_ID_PEER_DISC_RESP = 77, |
320 | DPP_TEST_INVALID_STATUS_PEER_DISC_RESP = 78, | |
321 | DPP_TEST_INVALID_CONNECTOR_PEER_DISC_RESP = 79, | |
322 | DPP_TEST_INVALID_CONNECTOR_PEER_DISC_REQ = 80, | |
a4446739 | 323 | DPP_TEST_INVALID_I_NONCE_AUTH_REQ = 81, |
60239f60 JM |
324 | }; |
325 | ||
326 | extern enum dpp_test_behavior dpp_test; | |
327 | #endif /* CONFIG_TESTING_OPTIONS */ | |
328 | ||
be27e185 | 329 | void dpp_bootstrap_info_free(struct dpp_bootstrap_info *info); |
484788b8 | 330 | const char * dpp_bootstrap_type_txt(enum dpp_bootstrap_type type); |
500ed7f0 | 331 | int dpp_bootstrap_key_hash(struct dpp_bootstrap_info *bi); |
be27e185 JM |
332 | int dpp_parse_uri_chan_list(struct dpp_bootstrap_info *bi, |
333 | const char *chan_list); | |
334 | int dpp_parse_uri_mac(struct dpp_bootstrap_info *bi, const char *mac); | |
335 | int dpp_parse_uri_info(struct dpp_bootstrap_info *bi, const char *info); | |
336 | struct dpp_bootstrap_info * dpp_parse_qr_code(const char *uri); | |
337 | char * dpp_keygen(struct dpp_bootstrap_info *bi, const char *curve, | |
338 | const u8 *privkey, size_t privkey_len); | |
f97ace34 | 339 | struct hostapd_hw_modes; |
30d27b04 JM |
340 | struct dpp_authentication * dpp_auth_init(void *msg_ctx, |
341 | struct dpp_bootstrap_info *peer_bi, | |
342 | struct dpp_bootstrap_info *own_bi, | |
d1f08264 | 343 | u8 dpp_allowed_roles, |
f97ace34 JM |
344 | unsigned int neg_freq, |
345 | struct hostapd_hw_modes *own_modes, | |
346 | u16 num_modes); | |
30d27b04 JM |
347 | struct dpp_authentication * |
348 | dpp_auth_req_rx(void *msg_ctx, u8 dpp_allowed_roles, int qr_mutual, | |
349 | struct dpp_bootstrap_info *peer_bi, | |
350 | struct dpp_bootstrap_info *own_bi, | |
dc4d271c | 351 | unsigned int freq, const u8 *hdr, const u8 *attr_start, |
27fefbbb | 352 | size_t attr_len); |
30d27b04 | 353 | struct wpabuf * |
dc4d271c JM |
354 | dpp_auth_resp_rx(struct dpp_authentication *auth, const u8 *hdr, |
355 | const u8 *attr_start, size_t attr_len); | |
461d39af JM |
356 | struct wpabuf * dpp_build_conf_req(struct dpp_authentication *auth, |
357 | const char *json); | |
dc4d271c JM |
358 | int dpp_auth_conf_rx(struct dpp_authentication *auth, const u8 *hdr, |
359 | const u8 *attr_start, size_t attr_len); | |
30d27b04 JM |
360 | int dpp_notify_new_qr_code(struct dpp_authentication *auth, |
361 | struct dpp_bootstrap_info *peer_bi); | |
461d39af | 362 | void dpp_configuration_free(struct dpp_configuration *conf); |
30d27b04 | 363 | void dpp_auth_deinit(struct dpp_authentication *auth); |
461d39af JM |
364 | struct wpabuf * |
365 | dpp_conf_req_rx(struct dpp_authentication *auth, const u8 *attr_start, | |
366 | size_t attr_len); | |
367 | int dpp_conf_resp_rx(struct dpp_authentication *auth, | |
368 | const struct wpabuf *resp); | |
30d27b04 JM |
369 | struct wpabuf * dpp_alloc_msg(enum dpp_public_action_frame_type type, |
370 | size_t len); | |
371 | const u8 * dpp_get_attr(const u8 *buf, size_t len, u16 req_id, u16 *ret_len); | |
372 | int dpp_check_attrs(const u8 *buf, size_t len); | |
461d39af | 373 | int dpp_key_expired(const char *timestamp, os_time_t *expiry); |
5dd745b7 | 374 | const char * dpp_akm_str(enum dpp_akm akm); |
461d39af JM |
375 | void dpp_configurator_free(struct dpp_configurator *conf); |
376 | struct dpp_configurator * | |
377 | dpp_keygen_configurator(const char *curve, const u8 *privkey, | |
378 | size_t privkey_len); | |
f522bb23 JM |
379 | int dpp_configurator_own_config(struct dpp_authentication *auth, |
380 | const char *curve); | |
e85b6601 JM |
381 | enum dpp_status_error |
382 | dpp_peer_intro(struct dpp_introduction *intro, const char *own_connector, | |
383 | const u8 *net_access_key, size_t net_access_key_len, | |
384 | const u8 *csign_key, size_t csign_key_len, | |
385 | const u8 *peer_connector, size_t peer_connector_len, | |
386 | os_time_t *expiry); | |
219d4c9f | 387 | struct dpp_pkex * dpp_pkex_init(void *msg_ctx, struct dpp_bootstrap_info *bi, |
500ed7f0 JM |
388 | const u8 *own_mac, |
389 | const char *identifier, | |
390 | const char *code); | |
219d4c9f JM |
391 | struct dpp_pkex * dpp_pkex_rx_exchange_req(void *msg_ctx, |
392 | struct dpp_bootstrap_info *bi, | |
500ed7f0 JM |
393 | const u8 *own_mac, |
394 | const u8 *peer_mac, | |
395 | const char *identifier, | |
396 | const char *code, | |
397 | const u8 *buf, size_t len); | |
398 | struct wpabuf * dpp_pkex_rx_exchange_resp(struct dpp_pkex *pkex, | |
af4103e5 | 399 | const u8 *peer_mac, |
500ed7f0 JM |
400 | const u8 *buf, size_t len); |
401 | struct wpabuf * dpp_pkex_rx_commit_reveal_req(struct dpp_pkex *pkex, | |
4be5bc98 | 402 | const u8 *hdr, |
500ed7f0 | 403 | const u8 *buf, size_t len); |
4be5bc98 | 404 | int dpp_pkex_rx_commit_reveal_resp(struct dpp_pkex *pkex, const u8 *hdr, |
500ed7f0 JM |
405 | const u8 *buf, size_t len); |
406 | void dpp_pkex_free(struct dpp_pkex *pkex); | |
be27e185 | 407 | |
4b8de0c9 JM |
408 | char * dpp_corrupt_connector_signature(const char *connector); |
409 | ||
be27e185 | 410 | #endif /* DPP_H */ |