diff --git a/dap-sdk/crypto/src/dap_enc_iaes.c b/dap-sdk/crypto/src/dap_enc_iaes.c index 30600f54e15dfabd0b7ed9e6523de1c9b4e3679d..0e4df9e74a1add551155ec2a531c2b0d27f5e567 100755 --- a/dap-sdk/crypto/src/dap_enc_iaes.c +++ b/dap-sdk/crypto/src/dap_enc_iaes.c @@ -76,7 +76,7 @@ void dap_enc_aes_key_generate(struct dap_enc_key * a_key, const void *kex_buf, size_t dap_enc_iaes256_cbc_decrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out) { - if (a_in_size % 16) { + if (a_in_size % IAES_BLOCK_SIZE) { log_it(L_ERROR, "Bad in data size"); return 0; } @@ -168,9 +168,11 @@ size_t dap_enc_iaes256_cbc_encrypt_fast(struct dap_enc_key * a_key, const void * size_t block_in32_size = IAES_BLOCK_SIZE/sizeof(uint32_t); uint32_t feedback[block_in32_size]; + uint8_t priv_key_swapped_endian[IAES_KEYSIZE]; + memcpy(priv_key_swapped_endian, a_key->priv_key_data, sizeof(priv_key_swapped_endian)); memcpy(&feedback[0], DAP_ENC_AES_KEY(a_key)->ivec, IAES_BLOCK_SIZE); - swap_endian((uint32_t *)a_key->priv_key_data, IAES_KEYSIZE/sizeof(uint32_t)); + swap_endian((uint32_t *)priv_key_swapped_endian, IAES_KEYSIZE/sizeof(uint32_t)); size_t count_block, count32_word; const void *data = a_in; @@ -181,7 +183,7 @@ size_t dap_enc_iaes256_cbc_encrypt_fast(struct dap_enc_key * a_key, const void * *((uint32_t *)cdata + count_block * block_in32_size + count32_word) = *((uint32_t *)data + count_block * block_in32_size + count32_word) ^ feedback[count32_word]; - AES256_enc_cernelT(((uint32_t *)cdata + count_block * block_in32_size), feedback, (uint32_t *)a_key->priv_key_data); + AES256_enc_cernelT(((uint32_t *)cdata + count_block * block_in32_size), feedback, (uint32_t *)priv_key_swapped_endian); memcpy ((uint32_t *)cdata + count_block * block_in32_size, &feedback[0], IAES_BLOCK_SIZE); } @@ -197,10 +199,9 @@ size_t dap_enc_iaes256_cbc_encrypt_fast(struct dap_enc_key * a_key, const void * *((uint32_t *)cdata + count_block * block_in32_size + count32_word) = *((uint32_t *)tmp_in + count32_word) ^ feedback[count32_word]; - AES256_enc_cernelT(((uint32_t *)cdata + count_block * block_in32_size), feedback, (uint32_t *)a_key->priv_key_data); + AES256_enc_cernelT(((uint32_t *)cdata + count_block * block_in32_size), feedback, (uint32_t *)priv_key_swapped_endian); memcpy ((uint32_t *)cdata + count_block * block_in32_size, &feedback[0], IAES_BLOCK_SIZE); - swap_endian((uint32_t *)a_key->priv_key_data,IAES_KEYSIZE/sizeof(uint32_t)); // IAES_256_CBC_encrypt(a_in, buf_out, DAP_ENC_AES_KEY(a_key)->ivec, a_in_size - last_block_from_in, a_key->priv_key_data);