int8_t tls_ccm_data_encrypt(uint8_t *data_ptr, uint16_t data_length, const uint8_t *key_expansion, const uint8_t *nonce, uint8_t type, bool server) { ccm_globals_t * ccm_ptr = tls_ccm_init(key_expansion, nonce, server, AES_CCM_ENCRYPT); if (!ccm_ptr) { return -1; } uint8_t adata[13]; ccm_ptr->data_len = data_length; ccm_ptr->data_ptr = data_ptr; ccm_ptr->mic = (ccm_ptr->data_ptr + ccm_ptr->data_len); tls_set_adata(ccm_ptr,adata, nonce, type); return ccm_process_run(ccm_ptr); }
int8_t tls_ccm_data_decrypt(uint8_t *data_ptr, uint16_t data_length, const uint8_t *key_expansion, uint8_t type, bool server) { if (data_length <= 16) { return -1; } ccm_globals_t *ccm_ptr = tls_ccm_init(key_expansion, data_ptr, server, AES_CCM_DECRYPT); if (!ccm_ptr) { return -1; } uint8_t adata[13]; ccm_ptr->data_len = data_length - 16; tls_set_adata(ccm_ptr, adata, data_ptr, type); ccm_ptr->data_ptr = data_ptr + 8; ccm_ptr->mic = (ccm_ptr->data_ptr + ccm_ptr->data_len); return ccm_process_run(ccm_ptr); }
int8_t pana_ccm_data_crypt(uint8_t *ptr, uint16_t len, uint8_t operation_type, uint32_t message_seq, sec_suite_t *suite) { uint8_t *explict_ptr; uint8_t *key_ptr = 0; ccm_globals_t ccm_ptr; key_ptr = suite->pana_session.pana_PAA_enc_key; //Here Comes AES Decrypt if (!ccm_sec_init(&ccm_ptr, AES_SECURITY_LEVEL_ENC, key_ptr, operation_type, 3)) { return -1; } explict_ptr = ccm_ptr.exp_nonce; //Set IV explict_ptr = common_write_32_bit(suite->pana_session.pana_key_id, explict_ptr); //SET EXP 4 octest Session ID, 4 Octet Pana SQN number explict_ptr = common_write_32_bit(suite->pana_session.session_id, explict_ptr); explict_ptr = common_write_32_bit(message_seq, explict_ptr); ccm_ptr.data_len = len; ccm_ptr.data_ptr = ptr; return ccm_process_run(&ccm_ptr); }