Lines Matching defs:bi

201 static int dpp_clone_uri(struct dpp_bootstrap_info *bi, const char *uri)
203 bi->uri = os_strdup(uri);
204 return bi->uri ? 0 : -1;
208 int dpp_parse_uri_chan_list(struct dpp_bootstrap_info *bi,
233 bi->channels_listed = true;
238 } else if (bi->num_freq == DPP_BOOTSTRAP_MAX_FREQ) {
241 bi->num_freq = 0;
244 bi->freq[bi->num_freq++] = freq;
261 int dpp_parse_uri_mac(struct dpp_bootstrap_info *bi, const char *mac)
266 if (hwaddr_aton2(mac, bi->mac_addr) < 0) {
271 wpa_printf(MSG_DEBUG, "DPP: URI mac: " MACSTR, MAC2STR(bi->mac_addr));
277 int dpp_parse_uri_info(struct dpp_bootstrap_info *bi, const char *info)
287 bi->info = os_malloc(end - info + 1);
288 if (!bi->info)
290 os_memcpy(bi->info, info, end - info);
291 bi->info[end - info] = '\0';
292 wpa_printf(MSG_DEBUG, "DPP: URI(information): %s", bi->info);
293 if (!dpp_uri_valid_info(bi->info)) {
302 int dpp_parse_uri_version(struct dpp_bootstrap_info *bi, const char *version)
309 bi->version = 1;
311 bi->version = 2;
313 bi->version = 3;
317 wpa_printf(MSG_DEBUG, "DPP: URI version: %d", bi->version);
324 static int dpp_parse_uri_pk(struct dpp_bootstrap_info *bi, const char *info)
344 res = dpp_get_subject_public_key(bi, data, data_len);
350 static int dpp_parse_uri_supported_curves(struct dpp_bootstrap_info *bi,
361 bi->supported_curves = val;
365 bi->supported_curves |= val << 4;
368 bi->supported_curves);
374 static int dpp_parse_uri_host(struct dpp_bootstrap_info *bi, const char *txt)
392 bi->port = DPP_TCP_PORT;
402 bi->port = atoi(port + 1);
410 bi->port = atoi(port);
420 os_free(bi->host);
421 bi->host = os_memdup(&addr, sizeof(addr));
422 if (!bi->host)
426 hostapd_ip_txt(bi->host, buf, sizeof(buf)), bi->port);
438 struct dpp_bootstrap_info *bi;
486 bi = os_zalloc(sizeof(*bi));
487 if (!bi)
490 if (dpp_clone_uri(bi, uri) < 0 ||
491 dpp_parse_uri_chan_list(bi, chan_list) < 0 ||
492 dpp_parse_uri_mac(bi, mac) < 0 ||
493 dpp_parse_uri_info(bi, info) < 0 ||
494 dpp_parse_uri_version(bi, version) < 0 ||
495 dpp_parse_uri_supported_curves(bi, supported_curves) < 0 ||
496 dpp_parse_uri_host(bi, host) < 0 ||
497 dpp_parse_uri_pk(bi, pk) < 0) {
498 dpp_bootstrap_info_free(bi);
499 bi = NULL;
502 return bi;
693 int dpp_gen_uri(struct dpp_bootstrap_info *bi)
701 if (bi->chan)
702 len += 3 + os_strlen(bi->chan); /* C:...; */
703 if (is_zero_ether_addr(bi->mac_addr))
707 MAC2STR(bi->mac_addr));
709 if (bi->info)
710 len += 3 + os_strlen(bi->info); /* I:...; */
714 len += 4 + os_strlen(bi->pk); /* K:...;; */
716 if (bi->supported_curves) {
717 u8 val = bi->supported_curves;
732 if (bi->host) {
736 addr = hostapd_ip_txt(bi->host, buf, sizeof(buf));
739 if (bi->port == DPP_TCP_PORT)
741 else if (bi->host->af == AF_INET)
743 addr, bi->port);
746 addr, bi->port);
749 os_free(bi->uri);
750 bi->uri = os_malloc(len + 1);
751 if (!bi->uri)
753 os_snprintf(bi->uri, len + 1, "DPP:%s%s%s%s%s%s%s%s%s%sK:%s;;",
754 bi->chan ? "C:" : "", bi->chan ? bi->chan : "",
755 bi->chan ? ";" : "",
757 bi->info ? "I:" : "", bi->info ? bi->info : "",
758 bi->info ? ";" : "",
763 bi->pk);
1624 static bool dpp_supports_curve(const char *curve, struct dpp_bootstrap_info *bi)
1628 if (!bi || !bi->supported_curves)
1646 return bi->supported_curves & BIT(idx);
1952 struct dpp_bootstrap_info *bi;
1959 bi = os_zalloc(sizeof(*bi));
1960 if (!bi)
1962 bi->id = dpp_next_id(auth->global);
1963 dl_list_add(&auth->global->bootstrap, &bi->list);
1964 auth->tmp_peer_bi = bi;
1965 return bi->id;
4322 struct dpp_bootstrap_info *bi;
4325 dl_list_for_each(bi, &dpp->bootstrap, struct dpp_bootstrap_info, list) {
4326 if (bi->id > max_id)
4327 max_id = bi->id;
4335 struct dpp_bootstrap_info *bi, *tmp;
4341 dl_list_for_each_safe(bi, tmp, &dpp->bootstrap,
4343 if (id && bi->id != id)
4348 dpp->remove_bi(dpp->cb_ctx, bi);
4350 dl_list_del(&bi->list);
4351 dpp_bootstrap_info_free(bi);
4363 struct dpp_bootstrap_info *bi;
4368 bi = dpp_parse_uri(uri);
4369 if (!bi)
4372 bi->type = DPP_BOOTSTRAP_QR_CODE;
4373 bi->id = dpp_next_id(dpp);
4374 dl_list_add(&dpp->bootstrap, &bi->list);
4375 return bi;
4382 struct dpp_bootstrap_info *bi;
4387 bi = dpp_parse_uri(uri);
4388 if (!bi)
4391 bi->type = DPP_BOOTSTRAP_NFC_URI;
4392 bi->id = dpp_next_id(dpp);
4393 dl_list_add(&dpp->bootstrap, &bi->list);
4394 return bi;
4398 static int dpp_parse_supported_curves_list(struct dpp_bootstrap_info *bi,
4426 bi->supported_curves = curves;
4429 bi->supported_curves);
4442 struct dpp_bootstrap_info *bi;
4447 bi = os_zalloc(sizeof(*bi));
4448 if (!bi)
4452 bi->type = DPP_BOOTSTRAP_QR_CODE;
4454 bi->type = DPP_BOOTSTRAP_PKEX;
4456 bi->type = DPP_BOOTSTRAP_NFC_URI;
4460 bi->chan = get_param(cmd, " chan=");
4476 if (dpp_keygen(bi, curve, privkey, privkey_len) < 0 ||
4477 dpp_parse_uri_chan_list(bi, bi->chan) < 0 ||
4478 dpp_parse_uri_mac(bi, mac) < 0 ||
4479 dpp_parse_uri_info(bi, info) < 0 ||
4480 dpp_parse_supported_curves_list(bi, supported_curves) < 0 ||
4481 dpp_parse_uri_host(bi, host) < 0 ||
4482 dpp_gen_uri(bi) < 0)
4485 bi->id = dpp_next_id(dpp);
4486 dl_list_add(&dpp->bootstrap, &bi->list);
4487 ret = bi->id;
4488 bi = NULL;
4497 dpp_bootstrap_info_free(bi);
4505 struct dpp_bootstrap_info *bi;
4510 dl_list_for_each(bi, &dpp->bootstrap, struct dpp_bootstrap_info, list) {
4511 if (bi->id == id)
4512 return bi;
4536 struct dpp_bootstrap_info *bi;
4538 bi = dpp_bootstrap_get_id(dpp, id);
4539 if (!bi)
4541 return bi->uri;
4548 struct dpp_bootstrap_info *bi;
4554 bi = dpp_bootstrap_get_id(dpp, id);
4555 if (!bi)
4557 wpa_snprintf_hex(pkhash, sizeof(pkhash), bi->pubkey_hash,
4561 if (bi->supported_curves) {
4574 if (!(bi->supported_curves & BIT(i)))
4589 if (bi->host) {
4593 hostapd_ip_txt(bi->host, buf, sizeof(buf)),
4594 bi->port);
4607 dpp_bootstrap_type_txt(bi->type),
4608 MAC2STR(bi->mac_addr),
4609 bi->info ? bi->info : "",
4610 bi->num_freq,
4611 bi->num_freq == 1 ? bi->freq[0] : 0,
4612 bi->curve->name,
4614 bi->version,
4622 struct dpp_bootstrap_info *bi;
4624 bi = dpp_bootstrap_get_id(dpp, id);
4625 if (!bi)
4628 str_clear_free(bi->configurator_params);
4631 bi->configurator_params = os_strdup(params);
4632 return bi->configurator_params ? 0 : -1;
4635 bi->configurator_params = NULL;
4645 struct dpp_bootstrap_info *bi;
4652 dl_list_for_each(bi, &dpp->bootstrap, struct dpp_bootstrap_info, list) {
4653 if (!*own_bi && bi->own &&
4654 os_memcmp(bi->pubkey_hash, r_bootstrap,
4658 *own_bi = bi;
4661 if (!*peer_bi && !bi->own &&
4662 os_memcmp(bi->pubkey_hash, i_bootstrap,
4666 *peer_bi = bi;
4679 struct dpp_bootstrap_info *bi;
4684 dl_list_for_each(bi, &dpp->bootstrap, struct dpp_bootstrap_info, list) {
4685 if (!bi->own && os_memcmp(bi->pubkey_hash_chirp, hash,
4687 return bi;
5066 struct wpabuf * dpp_build_presence_announcement(struct dpp_bootstrap_info *bi)
5077 dpp_build_attr_r_bootstrap_key_hash(msg, bi->pubkey_hash_chirp);
5100 struct wpabuf * dpp_build_pb_announcement(struct dpp_bootstrap_info *bi)
5103 const u8 *r_hash = bi->pubkey_hash_chirp;
5135 struct wpabuf * dpp_build_pb_announcement_resp(struct dpp_bootstrap_info *bi,
5141 const u8 *i_hash = bi->pubkey_hash_chirp;