From 5ff28ce7c0d0bd40d222fdd27057371daee797ce Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Fri, 19 Sep 2014 15:51:56 +0300 Subject: [PATCH] emulator/bthost: Add skeleton for passing encryption changes to SMP --- emulator/bthost.c | 3 +++ emulator/bthost.h | 1 + emulator/smp.c | 15 +++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/emulator/bthost.c b/emulator/bthost.c index a15aab0cb..22bdca5cf 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 45ea7b555..9d75e2c35 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 8da704383..85901d426 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) { -- 2.47.3