[PATCH BlueZ] mesh: Add provisioner confirmation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This adds codes to send a confirmationfrom provisioner's side
after receiving a callback from a provisioning agent.

---
 mesh/prov-initiator.c | 36 ++++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/mesh/prov-initiator.c b/mesh/prov-initiator.c
index eb59f53f1..5e45d6813 100644
--- a/mesh/prov-initiator.c
+++ b/mesh/prov-initiator.c
@@ -265,6 +265,18 @@ static void calc_local_material(const uint8_t *random)
 	print_packet("Nonce", prov->s_nonce, sizeof(prov->s_nonce));
 }
 
+static void send_confirm(struct mesh_prov_initiator *prov)
+{
+	struct prov_conf_msg msg;
+
+	msg.opcode = PROV_CONFIRM;
+	mesh_crypto_aes_cmac(prov->calc_key, prov->rand_auth_workspace,
+			32, msg.conf);
+	prov->trans_tx(prov->trans_data, &msg, sizeof(msg));
+	prov->state = INT_PROV_CONF_SENT;
+	prov->expected = PROV_CONFIRM;
+}
+
 static void number_cb(void *user_data, int err, uint32_t number)
 {
 	struct mesh_prov_initiator *rx_prov = user_data;
@@ -284,6 +296,7 @@ static void number_cb(void *user_data, int err, uint32_t number)
 	l_put_be32(number, prov->rand_auth_workspace + 28);
 	l_put_be32(number, prov->rand_auth_workspace + 44);
 	prov->material |= MAT_RAND_AUTH;
+	send_confirm(prov);
 }
 
 static void static_cb(void *user_data, int err, uint8_t *key, uint32_t len)
@@ -304,6 +317,7 @@ static void static_cb(void *user_data, int err, uint8_t *key, uint32_t len)
 	memcpy(prov->rand_auth_workspace + 16, key, 16);
 	memcpy(prov->rand_auth_workspace + 32, key, 16);
 	prov->material |= MAT_RAND_AUTH;
+	send_confirm(prov);
 }
 
 static void pub_key_cb(void *user_data, int err, uint8_t *key, uint32_t len)
@@ -321,11 +335,13 @@ static void pub_key_cb(void *user_data, int err, uint8_t *key, uint32_t len)
 		return;
 	}
 
-		memcpy(prov->conf_inputs.dev_pub_key, key, 64);
-		prov->material |= MAT_REMOTE_PUBLIC;
+	memcpy(prov->conf_inputs.dev_pub_key, key, 64);
+	prov->material |= MAT_REMOTE_PUBLIC;
 
-		if ((prov->material & MAT_SECRET) == MAT_SECRET)
-			int_credentials(prov);
+	if ((prov->material & MAT_SECRET) == MAT_SECRET)
+		int_credentials(prov);
+
+	send_confirm(prov);
 }
 
 static void send_pub_key(struct mesh_prov_initiator *prov)
@@ -338,18 +354,6 @@ static void send_pub_key(struct mesh_prov_initiator *prov)
 	prov->state = INT_PROV_KEY_SENT;
 }
 
-static void send_confirm(struct mesh_prov_initiator *prov)
-{
-	struct prov_conf_msg msg;
-
-	msg.opcode = PROV_CONFIRM;
-	mesh_crypto_aes_cmac(prov->calc_key, prov->rand_auth_workspace,
-			32, msg.conf);
-	prov->trans_tx(prov->trans_data, &msg, sizeof(msg));
-	prov->state = INT_PROV_CONF_SENT;
-	prov->expected = PROV_CONFIRM;
-}
-
 static void send_random(struct mesh_prov_initiator *prov)
 {
 	struct prov_rand_msg msg;
-- 
2.21.0




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux