From 6d9fe37763f0784d589c3548d51217c11cef934e Mon Sep 17 00:00:00 2001 From: "matthias.ringwald@gmail.com" Date: Sat, 16 Nov 2013 21:32:57 +0000 Subject: [PATCH] also calculate IRK during bonding --- example/libusb/ble_server.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/example/libusb/ble_server.c b/example/libusb/ble_server.c index a178883ba..087bb0f79 100644 --- a/example/libusb/ble_server.c +++ b/example/libusb/ble_server.c @@ -138,6 +138,8 @@ typedef enum { SM_STATE_PH3_Y_W4_ENC, SM_STATE_PH3_LTK_GET_ENC, SM_STATE_PH3_LTK_W4_ENC, + SM_STATE_PH3_IRK_GET_ENC, + SM_STATE_PH3_IRK_W4_ENC, // re establish previously distribued LTK SM_STATE_PH4_DHK_GET_ENC, @@ -377,6 +379,7 @@ static void sm_run(void){ case SM_STATE_PH3_DHK_GET_ENC: case SM_STATE_PH3_Y_GET_ENC: case SM_STATE_PH3_LTK_GET_ENC: + case SM_STATE_PH3_IRK_GET_ENC: case SM_STATE_PH4_DHK_GET_ENC: case SM_STATE_PH4_Y_GET_ENC: case SM_STATE_PH4_LTK_GET_ENC: @@ -823,6 +826,14 @@ static void packet_handler (void * connection, uint8_t packet_type, uint16_t cha case SM_STATE_PH3_LTK_W4_ENC: swap128(&packet[6], sm_s_ltk); print_key("ltk", sm_s_ltk); + // IRK = d1(IR, 1, 0) + sm_aes128_set_key(sm_persistent_ir); + sm_d1_d_prime(1, 0, sm_aes128_plaintext); + sm_state_responding = SM_STATE_PH3_IRK_GET_ENC; + break; + case SM_STATE_PH3_IRK_W4_ENC: + swap128(&packet[6], sm_persistent_irk); + print_key("irk", sm_persistent_irk); // distribute keys sm_distribute_keys(); // done