Lines Matching refs:btstack_crypto_ccm

443 static void btstack_crypto_ccm_setup_a_i(btstack_crypto_ccm_t * btstack_crypto_ccm, uint16_t counte…  in btstack_crypto_ccm_setup_a_i()  argument
445 (void)memcpy(&btstack_crypto_ccm_s[1], btstack_crypto_ccm->nonce, 13); in btstack_crypto_ccm_setup_a_i()
478 static void btstack_crypto_ccm_setup_b_0(btstack_crypto_ccm_t * btstack_crypto_ccm, uint8_t * b0){ in btstack_crypto_ccm_setup_b_0() argument
479 uint8_t m_prime = (btstack_crypto_ccm->auth_len - 2u) / 2u; in btstack_crypto_ccm_setup_b_0()
480 uint8_t Adata = btstack_crypto_ccm->aad_len ? 1 : 0; in btstack_crypto_ccm_setup_b_0()
482 (void)memcpy(&b0[1], btstack_crypto_ccm->nonce, 13); in btstack_crypto_ccm_setup_b_0()
483 big_endian_store_16(b0, 14, btstack_crypto_ccm->message_len); in btstack_crypto_ccm_setup_b_0()
603 static void btstack_crypto_ccm_next_block(btstack_crypto_ccm_t * btstack_crypto_ccm, btstack_crypto… in btstack_crypto_ccm_next_block() argument
604 uint16_t bytes_to_process = btstack_min(btstack_crypto_ccm->block_len, 16); in btstack_crypto_ccm_next_block()
606 btstack_crypto_ccm->counter++; in btstack_crypto_ccm_next_block()
607 btstack_crypto_ccm->input += bytes_to_process; in btstack_crypto_ccm_next_block()
608 btstack_crypto_ccm->output += bytes_to_process; in btstack_crypto_ccm_next_block()
609 btstack_crypto_ccm->block_len -= bytes_to_process; in btstack_crypto_ccm_next_block()
610 btstack_crypto_ccm->message_len -= bytes_to_process; in btstack_crypto_ccm_next_block()
612 …_ccm_next_block (message len %u, block_len %u)\n", btstack_crypto_ccm->message_len, btstack_crypto… in btstack_crypto_ccm_next_block()
614 if (btstack_crypto_ccm->message_len == 0u){ in btstack_crypto_ccm_next_block()
615 btstack_crypto_ccm->state = CCM_CALCULATE_S0; in btstack_crypto_ccm_next_block()
617 btstack_crypto_ccm->state = state_when_done; in btstack_crypto_ccm_next_block()
618 if (btstack_crypto_ccm->block_len == 0u){ in btstack_crypto_ccm_next_block()
619 btstack_crypto_done(&btstack_crypto_ccm->btstack_crypto); in btstack_crypto_ccm_next_block()
625 static void btstack_crypto_ccm_handle_s0(btstack_crypto_ccm_t * btstack_crypto_ccm, const uint8_t *… in btstack_crypto_ccm_handle_s0() argument
629 btstack_crypto_ccm->x_i[i] = btstack_crypto_ccm->x_i[i] ^ data[i]; in btstack_crypto_ccm_handle_s0()
631 btstack_crypto_ccm->x_i[i] = btstack_crypto_ccm->x_i[i] ^ data[15-i]; in btstack_crypto_ccm_handle_s0()
634 btstack_crypto_done(&btstack_crypto_ccm->btstack_crypto); in btstack_crypto_ccm_handle_s0()
638 static void btstack_crypto_ccm_handle_sn(btstack_crypto_ccm_t * btstack_crypto_ccm, const uint8_t *… in btstack_crypto_ccm_handle_sn() argument
640 uint16_t bytes_to_process = btstack_min(btstack_crypto_ccm->block_len, 16); in btstack_crypto_ccm_handle_sn()
643 btstack_crypto_ccm->output[i] = btstack_crypto_ccm->input[i] ^ data[i]; in btstack_crypto_ccm_handle_sn()
645 btstack_crypto_ccm->output[i] = btstack_crypto_ccm->input[i] ^ data[15-i]; in btstack_crypto_ccm_handle_sn()
648 switch (btstack_crypto_ccm->btstack_crypto.operation){ in btstack_crypto_ccm_handle_sn()
650 btstack_crypto_ccm->state = CCM_CALCULATE_XN; in btstack_crypto_ccm_handle_sn()
653 btstack_crypto_ccm_next_block(btstack_crypto_ccm, CCM_CALCULATE_XN); in btstack_crypto_ccm_handle_sn()
661 static void btstack_crypto_ccm_handle_aad_xn(btstack_crypto_ccm_t * btstack_crypto_ccm) { in btstack_crypto_ccm_handle_aad_xn() argument
664 printf_hexdump(btstack_crypto_ccm->x_i, 16); in btstack_crypto_ccm_handle_aad_xn()
667 if (btstack_crypto_ccm->aad_offset < (btstack_crypto_ccm->aad_len + 2u)){ in btstack_crypto_ccm_handle_aad_xn()
668 btstack_crypto_ccm->state = CCM_CALCULATE_AAD_XN; in btstack_crypto_ccm_handle_aad_xn()
671 btstack_crypto_done((btstack_crypto_t *) btstack_crypto_ccm); in btstack_crypto_ccm_handle_aad_xn()
675 static void btstack_crypto_ccm_handle_x1(btstack_crypto_ccm_t * btstack_crypto_ccm) { in btstack_crypto_ccm_handle_x1() argument
678 printf_hexdump(btstack_crypto_ccm->x_i, 16); in btstack_crypto_ccm_handle_x1()
680 switch (btstack_crypto_ccm->btstack_crypto.operation){ in btstack_crypto_ccm_handle_x1()
682 btstack_crypto_ccm->aad_remainder_len = 0; in btstack_crypto_ccm_handle_x1()
683 btstack_crypto_ccm->state = CCM_CALCULATE_AAD_XN; in btstack_crypto_ccm_handle_x1()
686 btstack_crypto_ccm->state = CCM_CALCULATE_SN; in btstack_crypto_ccm_handle_x1()
689 btstack_crypto_ccm->state = CCM_CALCULATE_XN; in btstack_crypto_ccm_handle_x1()
697 static void btstack_crypto_ccm_handle_xn(btstack_crypto_ccm_t * btstack_crypto_ccm) { in btstack_crypto_ccm_handle_xn() argument
700 printf_hexdump(btstack_crypto_ccm->x_i, 16); in btstack_crypto_ccm_handle_xn()
702 switch (btstack_crypto_ccm->btstack_crypto.operation){ in btstack_crypto_ccm_handle_xn()
704 btstack_crypto_ccm_next_block(btstack_crypto_ccm, CCM_CALCULATE_SN); in btstack_crypto_ccm_handle_xn()
707 btstack_crypto_ccm->state = CCM_CALCULATE_SN; in btstack_crypto_ccm_handle_xn()
715 static void btstack_crypto_ccm_calc_s0(btstack_crypto_ccm_t * btstack_crypto_ccm){ in btstack_crypto_ccm_calc_s0() argument
719 btstack_crypto_ccm->state = CCM_W4_S0; in btstack_crypto_ccm_calc_s0()
720 btstack_crypto_ccm_setup_a_i(btstack_crypto_ccm, 0); in btstack_crypto_ccm_calc_s0()
723 btstack_aes128_calc(btstack_crypto_ccm->key, btstack_crypto_ccm_s, data); in btstack_crypto_ccm_calc_s0()
724 btstack_crypto_ccm_handle_s0(btstack_crypto_ccm, data); in btstack_crypto_ccm_calc_s0()
726 btstack_crypto_aes128_start(btstack_crypto_ccm->key, btstack_crypto_ccm_s); in btstack_crypto_ccm_calc_s0()
730 static void btstack_crypto_ccm_calc_sn(btstack_crypto_ccm_t * btstack_crypto_ccm){ in btstack_crypto_ccm_calc_sn() argument
732 printf("btstack_crypto_ccm_calc_s%u\n", btstack_crypto_ccm->counter); in btstack_crypto_ccm_calc_sn()
734 btstack_crypto_ccm->state = CCM_W4_SN; in btstack_crypto_ccm_calc_sn()
735 btstack_crypto_ccm_setup_a_i(btstack_crypto_ccm, btstack_crypto_ccm->counter); in btstack_crypto_ccm_calc_sn()
738 btstack_aes128_calc(btstack_crypto_ccm->key, btstack_crypto_ccm_s, data); in btstack_crypto_ccm_calc_sn()
739 btstack_crypto_ccm_handle_sn(btstack_crypto_ccm, data); in btstack_crypto_ccm_calc_sn()
741 btstack_crypto_aes128_start(btstack_crypto_ccm->key, btstack_crypto_ccm_s); in btstack_crypto_ccm_calc_sn()
745 static void btstack_crypto_ccm_calc_x1(btstack_crypto_ccm_t * btstack_crypto_ccm){ in btstack_crypto_ccm_calc_x1() argument
747 btstack_crypto_ccm->state = CCM_W4_X1; in btstack_crypto_ccm_calc_x1()
748 btstack_crypto_ccm_setup_b_0(btstack_crypto_ccm, btstack_crypto_ccm_buffer); in btstack_crypto_ccm_calc_x1()
750 … btstack_aes128_calc(btstack_crypto_ccm->key, btstack_crypto_ccm_buffer, btstack_crypto_ccm->x_i); in btstack_crypto_ccm_calc_x1()
751 btstack_crypto_ccm_handle_x1(btstack_crypto_ccm); in btstack_crypto_ccm_calc_x1()
753 btstack_crypto_aes128_start(btstack_crypto_ccm->key, btstack_crypto_ccm_buffer); in btstack_crypto_ccm_calc_x1()
757 static void btstack_crypto_ccm_calc_xn(btstack_crypto_ccm_t * btstack_crypto_ccm, const uint8_t * p… in btstack_crypto_ccm_calc_xn() argument
759 btstack_crypto_ccm->state = CCM_W4_XN; in btstack_crypto_ccm_calc_xn()
766 uint16_t bytes_to_decrypt = btstack_crypto_ccm->block_len; in btstack_crypto_ccm_calc_xn()
772 btstack_crypto_ccm_buffer[i] = btstack_crypto_ccm->x_i[i] ^ plaintext[i]; in btstack_crypto_ccm_calc_xn()
774 (void)memcpy(&btstack_crypto_ccm_buffer[i], &btstack_crypto_ccm->x_i[i], in btstack_crypto_ccm_calc_xn()
782 … btstack_aes128_calc(btstack_crypto_ccm->key, btstack_crypto_ccm_buffer, btstack_crypto_ccm->x_i); in btstack_crypto_ccm_calc_xn()
783 btstack_crypto_ccm_handle_xn(btstack_crypto_ccm); in btstack_crypto_ccm_calc_xn()
785 btstack_crypto_aes128_start(btstack_crypto_ccm->key, btstack_crypto_ccm_buffer); in btstack_crypto_ccm_calc_xn()
789 static void btstack_crypto_ccm_calc_aad_xn(btstack_crypto_ccm_t * btstack_crypto_ccm){ in btstack_crypto_ccm_calc_aad_xn() argument
791 if (btstack_crypto_ccm->aad_offset == 0u){ in btstack_crypto_ccm_calc_aad_xn()
793 big_endian_store_16(len_buffer, 0, btstack_crypto_ccm->aad_len); in btstack_crypto_ccm_calc_aad_xn()
794 btstack_crypto_ccm->x_i[0] ^= len_buffer[0]; in btstack_crypto_ccm_calc_aad_xn()
795 btstack_crypto_ccm->x_i[1] ^= len_buffer[1]; in btstack_crypto_ccm_calc_aad_xn()
796 btstack_crypto_ccm->aad_remainder_len += 2u; in btstack_crypto_ccm_calc_aad_xn()
797 btstack_crypto_ccm->aad_offset += 2u; in btstack_crypto_ccm_calc_aad_xn()
801 uint16_t bytes_free = 16u - btstack_crypto_ccm->aad_remainder_len; in btstack_crypto_ccm_calc_aad_xn()
802 uint16_t bytes_to_copy = btstack_min(bytes_free, btstack_crypto_ccm->block_len); in btstack_crypto_ccm_calc_aad_xn()
804btstack_crypto_ccm->x_i[btstack_crypto_ccm->aad_remainder_len++] ^= *btstack_crypto_ccm->input++; in btstack_crypto_ccm_calc_aad_xn()
805 btstack_crypto_ccm->aad_offset++; in btstack_crypto_ccm_calc_aad_xn()
806 btstack_crypto_ccm->block_len--; in btstack_crypto_ccm_calc_aad_xn()
812 if (btstack_crypto_ccm->aad_offset == (btstack_crypto_ccm->aad_len + 2u)){ in btstack_crypto_ccm_calc_aad_xn()
813 btstack_crypto_ccm->aad_remainder_len = 16; in btstack_crypto_ccm_calc_aad_xn()
816 if (btstack_crypto_ccm->aad_remainder_len < 16u){ in btstack_crypto_ccm_calc_aad_xn()
817 btstack_crypto_done(&btstack_crypto_ccm->btstack_crypto); in btstack_crypto_ccm_calc_aad_xn()
824 printf_hexdump(btstack_crypto_ccm->x_i, 16); in btstack_crypto_ccm_calc_aad_xn()
827 btstack_crypto_ccm->aad_remainder_len = 0; in btstack_crypto_ccm_calc_aad_xn()
828 btstack_crypto_ccm->state = CCM_W4_AAD_XN; in btstack_crypto_ccm_calc_aad_xn()
830 btstack_aes128_calc(btstack_crypto_ccm->key, btstack_crypto_ccm->x_i, btstack_crypto_ccm->x_i); in btstack_crypto_ccm_calc_aad_xn()
831 btstack_crypto_ccm_handle_aad_xn(btstack_crypto_ccm); in btstack_crypto_ccm_calc_aad_xn()
833 btstack_crypto_aes128_start(btstack_crypto_ccm->key, btstack_crypto_ccm->x_i); in btstack_crypto_ccm_calc_aad_xn()
840 btstack_crypto_ccm_t * btstack_crypto_ccm; in btstack_crypto_run() local
897 btstack_crypto_ccm = (btstack_crypto_ccm_t *) btstack_crypto; in btstack_crypto_run()
898 switch (btstack_crypto_ccm->state){ in btstack_crypto_run()
903 btstack_crypto_ccm_calc_aad_xn(btstack_crypto_ccm); in btstack_crypto_run()
909 btstack_crypto_ccm_calc_x1(btstack_crypto_ccm); in btstack_crypto_run()
915 btstack_crypto_ccm_calc_s0(btstack_crypto_ccm); in btstack_crypto_run()
921 btstack_crypto_ccm_calc_sn(btstack_crypto_ccm); in btstack_crypto_run()
927 …m_calc_xn(btstack_crypto_ccm, (btstack_crypto->operation == BTSTACK_CRYPTO_CCM_ENCRYPT_BLOCK) ? bt… in btstack_crypto_run()
1033 btstack_crypto_ccm_t * btstack_crypto_ccm; in btstack_crypto_handle_encryption_result() local
1053btstack_crypto_ccm = (btstack_crypto_ccm_t*) btstack_linked_list_get_first_item(&btstack_crypto_op… in btstack_crypto_handle_encryption_result()
1054 switch (btstack_crypto_ccm->state){ in btstack_crypto_handle_encryption_result()
1056 reverse_128(data, btstack_crypto_ccm->x_i); in btstack_crypto_handle_encryption_result()
1057 btstack_crypto_ccm_handle_x1(btstack_crypto_ccm); in btstack_crypto_handle_encryption_result()
1060 reverse_128(data, btstack_crypto_ccm->x_i); in btstack_crypto_handle_encryption_result()
1061 btstack_crypto_ccm_handle_xn(btstack_crypto_ccm); in btstack_crypto_handle_encryption_result()
1064 reverse_128(data, btstack_crypto_ccm->x_i); in btstack_crypto_handle_encryption_result()
1065 btstack_crypto_ccm_handle_aad_xn(btstack_crypto_ccm); in btstack_crypto_handle_encryption_result()
1068 btstack_crypto_ccm_handle_s0(btstack_crypto_ccm, data); in btstack_crypto_handle_encryption_result()
1071 btstack_crypto_ccm_handle_sn(btstack_crypto_ccm, data); in btstack_crypto_handle_encryption_result()