btstack_crypto: use extracted btstack_crypto_ccm_handle_sn for btstack_crypto_ccm_calc_sn

This commit is contained in:
Matthias Ringwald 2020-07-03 15:59:31 +02:00
parent 064b9c7f16
commit 6fb5f0b5d6

View File

@ -684,67 +684,6 @@ static void btstack_crypto_ccm_handle_x1(btstack_crypto_ccm_t * btstack_crypto_c
}
}
static void btstack_crypto_ccm_calc_s0(btstack_crypto_ccm_t * btstack_crypto_ccm){
#ifdef DEBUG_CCM
printf("btstack_crypto_ccm_calc_s0\n");
#endif
btstack_crypto_ccm->state = CCM_W4_S0;
btstack_crypto_ccm_setup_a_i(btstack_crypto_ccm, 0);
#ifdef USE_BTSTACK_AES128
uint8_t data[16];
btstack_aes128_calc(btstack_crypto_ccm->key, btstack_crypto_ccm_s, data);
#ifdef DEBUG_CCM
printf("%16s: ", "S0");
printf_hexdump(data, 16);
#endif
btstack_crypto_ccm_handle_s0(btstack_crypto_ccm, data);
#else
btstack_crypto_aes128_start(btstack_crypto_ccm->key, btstack_crypto_ccm_s);
#endif
}
static void btstack_crypto_ccm_calc_sn(btstack_crypto_ccm_t * btstack_crypto_ccm){
#ifdef DEBUG_CCM
printf("btstack_crypto_ccm_calc_s%u\n", btstack_crypto_ccm->counter);
#endif
btstack_crypto_ccm->state = CCM_W4_SN;
btstack_crypto_ccm_setup_a_i(btstack_crypto_ccm, btstack_crypto_ccm->counter);
#ifdef USE_BTSTACK_AES128
uint8_t data[16];
btstack_aes128_calc(btstack_crypto_ccm->key, btstack_crypto_ccm_s, data);
#ifdef DEBUG_CCM
printf("%16s: ", "Sn");
printf_hexdump(data, 16);
#endif
switch (btstack_crypto_ccm->btstack_crypto.operation){
case BTSTACK_CRYPTO_CCM_DECRYPT_BLOCK:
btstack_crypto_ccm->state = CCM_CALCULATE_XN;
break;
case BTSTACK_CRYPTO_CCM_ENCRYPT_BLOCK:
btstack_crypto_ccm_next_block(btstack_crypto_ccm, CCM_CALCULATE_XN);
break;
default:
btstack_assert(false);
break;
}
#else
btstack_crypto_aes128_start(btstack_crypto_ccm->key, btstack_crypto_ccm_s);
#endif
}
static void btstack_crypto_ccm_calc_x1(btstack_crypto_ccm_t * btstack_crypto_ccm){
uint8_t btstack_crypto_ccm_buffer[16];
btstack_crypto_ccm->state = CCM_W4_X1;
btstack_crypto_ccm_setup_b_0(btstack_crypto_ccm, btstack_crypto_ccm_buffer);
#ifdef USE_BTSTACK_AES128
btstack_aes128_calc(btstack_crypto_ccm->key, btstack_crypto_ccm_buffer, btstack_crypto_ccm->x_i);
btstack_crypto_ccm_handle_x1(btstack_crypto_ccm);
#else
btstack_crypto_aes128_start(btstack_crypto_ccm->key, btstack_crypto_ccm_buffer);
#endif
}
static void btstack_crypto_ccm_handle_xn(btstack_crypto_ccm_t * btstack_crypto_ccm) {
#ifdef DEBUG_CCM
printf("%16s: ", "Xn+1");
@ -763,6 +702,48 @@ static void btstack_crypto_ccm_handle_xn(btstack_crypto_ccm_t * btstack_crypto_c
}
}
static void btstack_crypto_ccm_calc_s0(btstack_crypto_ccm_t * btstack_crypto_ccm){
#ifdef DEBUG_CCM
printf("btstack_crypto_ccm_calc_s0\n");
#endif
btstack_crypto_ccm->state = CCM_W4_S0;
btstack_crypto_ccm_setup_a_i(btstack_crypto_ccm, 0);
#ifdef USE_BTSTACK_AES128
uint8_t data[16];
btstack_aes128_calc(btstack_crypto_ccm->key, btstack_crypto_ccm_s, data);
btstack_crypto_ccm_handle_s0(btstack_crypto_ccm, data);
#else
btstack_crypto_aes128_start(btstack_crypto_ccm->key, btstack_crypto_ccm_s);
#endif
}
static void btstack_crypto_ccm_calc_sn(btstack_crypto_ccm_t * btstack_crypto_ccm){
#ifdef DEBUG_CCM
printf("btstack_crypto_ccm_calc_s%u\n", btstack_crypto_ccm->counter);
#endif
btstack_crypto_ccm->state = CCM_W4_SN;
btstack_crypto_ccm_setup_a_i(btstack_crypto_ccm, btstack_crypto_ccm->counter);
#ifdef USE_BTSTACK_AES128
uint8_t data[16];
btstack_aes128_calc(btstack_crypto_ccm->key, btstack_crypto_ccm_s, data);
btstack_crypto_ccm_handle_sn(btstack_crypto_ccm, data);
#else
btstack_crypto_aes128_start(btstack_crypto_ccm->key, btstack_crypto_ccm_s);
#endif
}
static void btstack_crypto_ccm_calc_x1(btstack_crypto_ccm_t * btstack_crypto_ccm){
uint8_t btstack_crypto_ccm_buffer[16];
btstack_crypto_ccm->state = CCM_W4_X1;
btstack_crypto_ccm_setup_b_0(btstack_crypto_ccm, btstack_crypto_ccm_buffer);
#ifdef USE_BTSTACK_AES128
btstack_aes128_calc(btstack_crypto_ccm->key, btstack_crypto_ccm_buffer, btstack_crypto_ccm->x_i);
btstack_crypto_ccm_handle_x1(btstack_crypto_ccm);
#else
btstack_crypto_aes128_start(btstack_crypto_ccm->key, btstack_crypto_ccm_buffer);
#endif
}
static void btstack_crypto_ccm_calc_xn(btstack_crypto_ccm_t * btstack_crypto_ccm, const uint8_t * plaintext){
uint8_t btstack_crypto_ccm_buffer[16];
btstack_crypto_ccm->state = CCM_W4_XN;