Diff between bbcd887764ff284049944b483fad8e5dbc94d02a and 5ff28ce7c0d0bd40d222fdd27057371daee797ce

Changed Files

File Additions Deletions Status
emulator/bthost.c +3 -0 modified
emulator/bthost.h +1 -0 modified
emulator/smp.c +15 -0 modified

Full Patch

diff --git a/emulator/bthost.c b/emulator/bthost.c
index a15aab0..22bdca5 100644
--- a/emulator/bthost.c
+++ b/emulator/bthost.c
@@ -979,6 +979,9 @@ static void evt_encrypt_change(struct bthost *bthost, const void *data,
 		return;
 
 	conn->encr_mode = ev->encr_mode;
+
+	if (conn->smp_data)
+		smp_conn_encrypted(conn->smp_data, conn->encr_mode);
 }
 
 static void evt_io_cap_response(struct bthost *bthost, const void *data,
diff --git a/emulator/bthost.h b/emulator/bthost.h
index 45ea7b5..9d75e2c 100644
--- a/emulator/bthost.h
+++ b/emulator/bthost.h
@@ -130,6 +130,7 @@ void smp_stop(void *smp_data);
 void *smp_conn_add(void *smp_data, uint16_t handle, const uint8_t *ia,
 					const uint8_t *ra, bool conn_init);
 void smp_conn_del(void *conn_data);
+void smp_conn_encrypted(void *conn_data, uint8_t encrypt);
 void smp_data(void *conn_data, const void *data, uint16_t len);
 int smp_get_ltk(void *smp_data, uint64_t rand, uint16_t ediv, uint8_t *ltk);
 void smp_pair(void *conn_data, uint8_t io_cap, uint8_t auth_req);
diff --git a/emulator/smp.c b/emulator/smp.c
index 8da7043..85901d4 100644
--- a/emulator/smp.c
+++ b/emulator/smp.c
@@ -54,6 +54,8 @@ struct smp_conn {
 	struct smp *smp;
 	uint16_t handle;
 	bool out;
+	uint8_t local_key_dist;
+	uint8_t remote_key_dist;
 	uint8_t ia[6];
 	uint8_t ia_type;
 	uint8_t ra[6];
@@ -230,6 +232,19 @@ int smp_get_ltk(void *smp_data, uint64_t rand, uint16_t ediv, uint8_t *ltk)
 	return 0;
 }
 
+void smp_conn_encrypted(void *conn_data, uint8_t encrypt)
+{
+	struct smp_conn *conn = conn_data;
+
+	if (!encrypt)
+		return;
+
+	if (conn->out && conn->remote_key_dist)
+		return;
+
+	/* Distribute keys */
+}
+
 void *smp_conn_add(void *smp_data, uint16_t handle, const uint8_t *ia,
 					const uint8_t *ra, bool conn_init)
 {