Lines Matching refs:pkex

4990 static struct wpabuf * dpp_pkex_build_exchange_req(struct dpp_pkex *pkex)  in dpp_pkex_build_exchange_req()  argument
5001 const struct dpp_curve_params *curve = pkex->own_bi->curve; in dpp_pkex_build_exchange_req()
5010 Qi = dpp_pkex_derive_Qi(curve, pkex->own_mac, pkex->code, in dpp_pkex_build_exchange_req()
5011 pkex->identifier, bnctx, &group); in dpp_pkex_build_exchange_req()
5016 pkex->x = dpp_gen_keypair(curve); in dpp_pkex_build_exchange_req()
5017 if (!pkex->x) in dpp_pkex_build_exchange_req()
5021 X_ec = EVP_PKEY_get1_EC_KEY(pkex->x); in dpp_pkex_build_exchange_req()
5037 if (pkex->identifier) in dpp_pkex_build_exchange_req()
5038 attr_len += 4 + os_strlen(pkex->identifier); in dpp_pkex_build_exchange_req()
5050 if (pkex->identifier) { in dpp_pkex_build_exchange_req()
5052 wpabuf_put_le16(msg, os_strlen(pkex->identifier)); in dpp_pkex_build_exchange_req()
5053 wpabuf_put_str(msg, pkex->identifier); in dpp_pkex_build_exchange_req()
5069 os_memset(pkex->Mx, 0, offset); in dpp_pkex_build_exchange_req()
5070 BN_bn2bin(Mx, pkex->Mx + offset); in dpp_pkex_build_exchange_req()
5104 struct dpp_pkex *pkex; in dpp_pkex_init() local
5106 pkex = os_zalloc(sizeof(*pkex)); in dpp_pkex_init()
5107 if (!pkex) in dpp_pkex_init()
5109 pkex->initiator = 1; in dpp_pkex_init()
5110 pkex->own_bi = bi; in dpp_pkex_init()
5111 os_memcpy(pkex->own_mac, own_mac, ETH_ALEN); in dpp_pkex_init()
5113 pkex->identifier = os_strdup(identifier); in dpp_pkex_init()
5114 if (!pkex->identifier) in dpp_pkex_init()
5117 pkex->code = os_strdup(code); in dpp_pkex_init()
5118 if (!pkex->code) in dpp_pkex_init()
5120 pkex->exchange_req = dpp_pkex_build_exchange_req(pkex); in dpp_pkex_init()
5121 if (!pkex->exchange_req) in dpp_pkex_init()
5123 return pkex; in dpp_pkex_init()
5125 dpp_pkex_free(pkex); in dpp_pkex_init()
5141 struct dpp_pkex *pkex = NULL; in dpp_pkex_rx_exchange_req() local
5217 pkex = os_zalloc(sizeof(*pkex)); in dpp_pkex_rx_exchange_req()
5218 if (!pkex) in dpp_pkex_rx_exchange_req()
5220 pkex->own_bi = bi; in dpp_pkex_rx_exchange_req()
5221 os_memcpy(pkex->own_mac, own_mac, ETH_ALEN); in dpp_pkex_rx_exchange_req()
5222 os_memcpy(pkex->peer_mac, peer_mac, ETH_ALEN); in dpp_pkex_rx_exchange_req()
5224 pkex->identifier = os_strdup(identifier); in dpp_pkex_rx_exchange_req()
5225 if (!pkex->identifier) in dpp_pkex_rx_exchange_req()
5228 pkex->code = os_strdup(code); in dpp_pkex_rx_exchange_req()
5229 if (!pkex->code) in dpp_pkex_rx_exchange_req()
5232 os_memcpy(pkex->Mx, attr_key, attr_key_len / 2); in dpp_pkex_rx_exchange_req()
5239 pkex->x = EVP_PKEY_new(); in dpp_pkex_rx_exchange_req()
5240 if (!pkex->x || in dpp_pkex_rx_exchange_req()
5241 EVP_PKEY_set1_EC_KEY(pkex->x, X_ec) != 1) in dpp_pkex_rx_exchange_req()
5250 pkex->y = dpp_gen_keypair(curve); in dpp_pkex_rx_exchange_req()
5251 if (!pkex->y) in dpp_pkex_rx_exchange_req()
5255 Y_ec = EVP_PKEY_get1_EC_KEY(pkex->y); in dpp_pkex_rx_exchange_req()
5284 if (pkex->identifier) { in dpp_pkex_rx_exchange_req()
5286 wpabuf_put_le16(msg, os_strlen(pkex->identifier)); in dpp_pkex_rx_exchange_req()
5287 wpabuf_put_str(msg, pkex->identifier); in dpp_pkex_rx_exchange_req()
5303 os_memset(pkex->Nx, 0, offset); in dpp_pkex_rx_exchange_req()
5304 BN_bn2bin(Nx, pkex->Nx + offset); in dpp_pkex_rx_exchange_req()
5316 pkex->exchange_resp = msg; in dpp_pkex_rx_exchange_req()
5318 pkex->exchange_done = 1; in dpp_pkex_rx_exchange_req()
5334 return pkex; in dpp_pkex_rx_exchange_req()
5337 dpp_pkex_free(pkex); in dpp_pkex_rx_exchange_req()
5338 pkex = NULL; in dpp_pkex_rx_exchange_req()
5402 struct wpabuf * dpp_pkex_rx_exchange_resp(struct dpp_pkex *pkex, in dpp_pkex_rx_exchange_resp() argument
5413 const struct dpp_curve_params *curve = pkex->own_bi->curve; in dpp_pkex_rx_exchange_resp()
5440 if (!attr_id && pkex->identifier) { in dpp_pkex_rx_exchange_resp()
5445 if (attr_id && pkex->identifier && in dpp_pkex_rx_exchange_resp()
5446 (os_strlen(pkex->identifier) != attr_id_len || in dpp_pkex_rx_exchange_resp()
5447 os_memcmp(pkex->identifier, attr_id, attr_id_len) != 0)) { in dpp_pkex_rx_exchange_resp()
5464 Qr = dpp_pkex_derive_Qr(curve, pkex->peer_mac, pkex->code, in dpp_pkex_rx_exchange_resp()
5465 pkex->identifier, bnctx, &group); in dpp_pkex_rx_exchange_resp()
5484 pkex->exchange_done = 1; in dpp_pkex_rx_exchange_resp()
5492 pkex->y = EVP_PKEY_new(); in dpp_pkex_rx_exchange_resp()
5493 if (!pkex->y || in dpp_pkex_rx_exchange_resp()
5494 EVP_PKEY_set1_EC_KEY(pkex->y, Y_ec) != 1) in dpp_pkex_rx_exchange_resp()
5496 ctx = EVP_PKEY_CTX_new(pkex->own_bi->pubkey, NULL); in dpp_pkex_rx_exchange_resp()
5499 EVP_PKEY_derive_set_peer(ctx, pkex->y) != 1 || in dpp_pkex_rx_exchange_resp()
5513 A_pub = dpp_get_pubkey_point(pkex->own_bi->pubkey, 0); in dpp_pkex_rx_exchange_resp()
5514 Y_pub = dpp_get_pubkey_point(pkex->y, 0); in dpp_pkex_rx_exchange_resp()
5515 X_pub = dpp_get_pubkey_point(pkex->x, 0); in dpp_pkex_rx_exchange_resp()
5518 addr[0] = pkex->own_mac; in dpp_pkex_rx_exchange_resp()
5532 ctx = EVP_PKEY_CTX_new(pkex->x, NULL); in dpp_pkex_rx_exchange_resp()
5535 EVP_PKEY_derive_set_peer(ctx, pkex->y) != 1 || in dpp_pkex_rx_exchange_resp()
5550 res = dpp_pkex_derive_z(pkex->own_mac, pkex->peer_mac, in dpp_pkex_rx_exchange_resp()
5551 pkex->Mx, curve->prime_len, in dpp_pkex_rx_exchange_resp()
5553 pkex->code, Kx, Kx_len, in dpp_pkex_rx_exchange_resp()
5554 pkex->z, curve->hash_len); in dpp_pkex_rx_exchange_resp()
5590 if (aes_siv_encrypt(pkex->z, curve->hash_len, in dpp_pkex_rx_exchange_resp()
5619 struct wpabuf * dpp_pkex_rx_commit_reveal_req(struct dpp_pkex *pkex, in dpp_pkex_rx_commit_reveal_req() argument
5623 const struct dpp_curve_params *curve = pkex->own_bi->curve; in dpp_pkex_rx_commit_reveal_req()
5644 ctx = EVP_PKEY_CTX_new(pkex->y, NULL); in dpp_pkex_rx_commit_reveal_req()
5647 EVP_PKEY_derive_set_peer(ctx, pkex->x) != 1 || in dpp_pkex_rx_commit_reveal_req()
5662 res = dpp_pkex_derive_z(pkex->peer_mac, pkex->own_mac, in dpp_pkex_rx_commit_reveal_req()
5663 pkex->Mx, curve->prime_len, in dpp_pkex_rx_commit_reveal_req()
5664 pkex->Nx, curve->prime_len, pkex->code, in dpp_pkex_rx_commit_reveal_req()
5665 Kx, Kx_len, pkex->z, curve->hash_len); in dpp_pkex_rx_commit_reveal_req()
5693 if (aes_siv_decrypt(pkex->z, curve->hash_len, in dpp_pkex_rx_commit_reveal_req()
5715 pkex->peer_bootstrap_key = dpp_set_pubkey_point(pkex->x, b_key, in dpp_pkex_rx_commit_reveal_req()
5717 if (!pkex->peer_bootstrap_key) in dpp_pkex_rx_commit_reveal_req()
5720 pkex->peer_bootstrap_key); in dpp_pkex_rx_commit_reveal_req()
5724 ctx = EVP_PKEY_CTX_new(pkex->y, NULL); in dpp_pkex_rx_commit_reveal_req()
5727 EVP_PKEY_derive_set_peer(ctx, pkex->peer_bootstrap_key) != 1 || in dpp_pkex_rx_commit_reveal_req()
5741 A_pub = dpp_get_pubkey_point(pkex->peer_bootstrap_key, 0); in dpp_pkex_rx_commit_reveal_req()
5742 Y_pub = dpp_get_pubkey_point(pkex->y, 0); in dpp_pkex_rx_commit_reveal_req()
5743 X_pub = dpp_get_pubkey_point(pkex->x, 0); in dpp_pkex_rx_commit_reveal_req()
5746 addr[0] = pkex->peer_mac; in dpp_pkex_rx_commit_reveal_req()
5771 ctx = EVP_PKEY_CTX_new(pkex->own_bi->pubkey, NULL); in dpp_pkex_rx_commit_reveal_req()
5774 EVP_PKEY_derive_set_peer(ctx, pkex->x) != 1 || in dpp_pkex_rx_commit_reveal_req()
5788 B_pub = dpp_get_pubkey_point(pkex->own_bi->pubkey, 0); in dpp_pkex_rx_commit_reveal_req()
5791 addr[0] = pkex->own_mac; in dpp_pkex_rx_commit_reveal_req()
5834 if (aes_siv_encrypt(pkex->z, curve->hash_len, in dpp_pkex_rx_commit_reveal_req()
5856 int dpp_pkex_rx_commit_reveal_resp(struct dpp_pkex *pkex, const u8 *hdr, in dpp_pkex_rx_commit_reveal_resp() argument
5859 const struct dpp_curve_params *curve = pkex->own_bi->curve; in dpp_pkex_rx_commit_reveal_resp()
5897 if (aes_siv_decrypt(pkex->z, curve->hash_len, in dpp_pkex_rx_commit_reveal_resp()
5919 pkex->peer_bootstrap_key = dpp_set_pubkey_point(pkex->x, b_key, in dpp_pkex_rx_commit_reveal_resp()
5921 if (!pkex->peer_bootstrap_key) in dpp_pkex_rx_commit_reveal_resp()
5924 pkex->peer_bootstrap_key); in dpp_pkex_rx_commit_reveal_resp()
5927 ctx = EVP_PKEY_CTX_new(pkex->x, NULL); in dpp_pkex_rx_commit_reveal_resp()
5930 EVP_PKEY_derive_set_peer(ctx, pkex->peer_bootstrap_key) != 1 || in dpp_pkex_rx_commit_reveal_resp()
5944 B_pub = dpp_get_pubkey_point(pkex->peer_bootstrap_key, 0); in dpp_pkex_rx_commit_reveal_resp()
5945 X_pub = dpp_get_pubkey_point(pkex->x, 0); in dpp_pkex_rx_commit_reveal_resp()
5946 Y_pub = dpp_get_pubkey_point(pkex->y, 0); in dpp_pkex_rx_commit_reveal_resp()
5949 addr[0] = pkex->peer_mac; in dpp_pkex_rx_commit_reveal_resp()
5985 void dpp_pkex_free(struct dpp_pkex *pkex) in dpp_pkex_free() argument
5987 if (!pkex) in dpp_pkex_free()
5990 os_free(pkex->identifier); in dpp_pkex_free()
5991 os_free(pkex->code); in dpp_pkex_free()
5992 EVP_PKEY_free(pkex->x); in dpp_pkex_free()
5993 EVP_PKEY_free(pkex->y); in dpp_pkex_free()
5994 EVP_PKEY_free(pkex->peer_bootstrap_key); in dpp_pkex_free()
5995 wpabuf_free(pkex->exchange_req); in dpp_pkex_free()
5996 wpabuf_free(pkex->exchange_resp); in dpp_pkex_free()
5997 os_free(pkex); in dpp_pkex_free()