Bluetooth: Mesh: Remove unnecessary logic for key selection
Key Refresh Phase 2 is analogous to the Key Refresh flag being set.
This means that the flag can directly be used as the index to the
new/old key two-element array.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
diff --git a/subsys/bluetooth/host/mesh/friend.c b/subsys/bluetooth/host/mesh/friend.c
index 5e07923..b9b0d44 100644
--- a/subsys/bluetooth/host/mesh/friend.c
+++ b/subsys/bluetooth/host/mesh/friend.c
@@ -312,23 +312,21 @@
struct bt_mesh_subnet *sub;
const u8_t *enc, *priv;
struct net_buf *buf;
- u8_t nid, key_idx;
+ u8_t nid;
sub = bt_mesh_subnet_get(frnd->net_idx);
__ASSERT_NO_MSG(sub != NULL);
buf = friend_buf_alloc(info->src);
- key_idx = (sub->kr_phase == BT_MESH_KR_PHASE_2);
-
/* Friend Offer needs master security credentials */
if (info->ctl && TRANS_CTL_OP(sdu->data) == TRANS_CTL_OP_FRIEND_OFFER) {
- enc = sub->keys[key_idx].enc;
- priv = sub->keys[key_idx].privacy;
- nid = sub->keys[key_idx].nid;
+ enc = sub->keys[sub->kr_flag].enc;
+ priv = sub->keys[sub->kr_flag].privacy;
+ nid = sub->keys[sub->kr_flag].nid;
} else {
- if (bt_mesh_friend_cred_get(sub->net_idx, frnd->lpn, key_idx,
- &nid, &enc, &priv)) {
+ if (bt_mesh_friend_cred_get(sub, frnd->lpn, &nid, &enc,
+ &priv)) {
BT_ERR("bt_mesh_friend_cred_get failed");
goto failed;
}
diff --git a/subsys/bluetooth/host/mesh/net.c b/subsys/bluetooth/host/mesh/net.c
index 715ca3b..8848811 100644
--- a/subsys/bluetooth/host/mesh/net.c
+++ b/subsys/bluetooth/host/mesh/net.c
@@ -354,17 +354,17 @@
return -ENOENT;
}
-int bt_mesh_friend_cred_get(u16_t net_idx, u16_t addr, u8_t idx,
- u8_t *nid, const u8_t **enc, const u8_t **priv)
+int bt_mesh_friend_cred_get(struct bt_mesh_subnet *sub, u16_t addr, u8_t *nid,
+ const u8_t **enc, const u8_t **priv)
{
int i;
- BT_DBG("net_idx 0x%04x addr 0x%04x idx %u", net_idx, addr, idx);
+ BT_DBG("net_idx 0x%04x addr 0x%04x", sub->net_idx, addr);
for (i = 0; i < ARRAY_SIZE(friend_cred); i++) {
struct bt_mesh_friend_cred *cred = &friend_cred[i];
- if (cred->net_idx != net_idx) {
+ if (cred->net_idx != sub->net_idx) {
continue;
}
@@ -373,15 +373,15 @@
}
if (nid) {
- *nid = cred->cred[idx].nid;
+ *nid = cred->cred[sub->kr_flag].nid;
}
if (enc) {
- *enc = cred->cred[idx].enc;
+ *enc = cred->cred[sub->kr_flag].enc;
}
if (priv) {
- *priv = cred->cred[idx].privacy;
+ *priv = cred->cred[sub->kr_flag].privacy;
}
return 0;
@@ -390,8 +390,8 @@
return -ENOENT;
}
#else
-int bt_mesh_friend_cred_get(u16_t net_idx, u16_t addr, u8_t idx,
- u8_t *nid, const u8_t **enc, const u8_t **priv)
+int bt_mesh_friend_cred_get(struct bt_mesh_subnet *sub, u16_t addr, u8_t *nid,
+ const u8_t **enc, const u8_t **priv)
{
return -ENOENT;
}
@@ -770,7 +770,7 @@
bool proxy)
{
const bool ctl = (tx->ctx->app_idx == BT_MESH_KEY_UNUSED);
- u8_t nid, idx = (tx->sub->kr_phase == BT_MESH_KR_PHASE_2);
+ u8_t nid;
const u8_t *enc, *priv;
u8_t *seq;
int err;
@@ -801,22 +801,21 @@
}
if (IS_ENABLED(CONFIG_BT_MESH_LOW_POWER) && tx->friend_cred) {
- if (bt_mesh_friend_cred_get(tx->sub->net_idx,
- BT_MESH_ADDR_UNASSIGNED,
- idx, &nid, &enc, &priv)) {
+ if (bt_mesh_friend_cred_get(tx->sub, BT_MESH_ADDR_UNASSIGNED,
+ &nid, &enc, &priv)) {
BT_WARN("Falling back to master credentials");
tx->friend_cred = 0;
- nid = tx->sub->keys[idx].nid;
- enc = tx->sub->keys[idx].enc;
- priv = tx->sub->keys[idx].privacy;
+ nid = tx->sub->keys[tx->sub->kr_flag].nid;
+ enc = tx->sub->keys[tx->sub->kr_flag].enc;
+ priv = tx->sub->keys[tx->sub->kr_flag].privacy;
}
} else {
tx->friend_cred = 0;
- nid = tx->sub->keys[idx].nid;
- enc = tx->sub->keys[idx].enc;
- priv = tx->sub->keys[idx].privacy;
+ nid = tx->sub->keys[tx->sub->kr_flag].nid;
+ enc = tx->sub->keys[tx->sub->kr_flag].enc;
+ priv = tx->sub->keys[tx->sub->kr_flag].privacy;
}
net_buf_simple_push_u8(buf, (nid | (BT_MESH_NET_IVI_TX & 1) << 7));
@@ -1109,15 +1108,9 @@
net_buf_add_mem(buf, sbuf->data, sbuf->len);
- if (rx->sub->kr_phase == BT_MESH_KR_PHASE_2) {
- enc = rx->sub->keys[1].enc;
- priv = rx->sub->keys[1].privacy;
- nid = rx->sub->keys[1].nid;
- } else {
- enc = rx->sub->keys[0].enc;
- priv = rx->sub->keys[0].privacy;
- nid = rx->sub->keys[0].nid;
- }
+ enc = rx->sub->keys[rx->sub->kr_flag].enc;
+ priv = rx->sub->keys[rx->sub->kr_flag].privacy;
+ nid = rx->sub->keys[rx->sub->kr_flag].nid;
BT_DBG("Relaying packet. TTL is now %u", TTL(buf->data));
diff --git a/subsys/bluetooth/host/mesh/net.h b/subsys/bluetooth/host/mesh/net.h
index efd51c0..be1e12e 100644
--- a/subsys/bluetooth/host/mesh/net.h
+++ b/subsys/bluetooth/host/mesh/net.h
@@ -279,8 +279,8 @@
u8_t bt_mesh_net_flags(struct bt_mesh_subnet *sub);
-int bt_mesh_friend_cred_get(u16_t net_idx, u16_t addr, u8_t idx,
- u8_t *nid, const u8_t **enc, const u8_t **priv);
+int bt_mesh_friend_cred_get(struct bt_mesh_subnet *sub, u16_t addr, u8_t *nid,
+ const u8_t **enc, const u8_t **priv);
int bt_mesh_friend_cred_set(struct bt_mesh_friend_cred *cred, u8_t idx,
const u8_t net_key[16]);
void bt_mesh_friend_cred_refresh(u16_t net_idx);