CC2640R2F AES 128bit CBC 加密
如题,CC2640R2F AES 128bit CBC 加密出来的数据和APP、服务器加密出来的数据不同。下面是我的实际代码,请问代码有什么问题?
uint8_t AES_encryptionByCBC(uint8_t *key, uint8_t *dataIn, uint8_t *dataOut)
{
// Declaration (typically done in a task)
CryptoCC26XX_Handle handle;
int32_t keyIndex;
int32_t status;
CryptoCC26XX_AESCBC_Transaction trans;
// Initialize Crypto driver
CryptoCC26XX_init();
// Attempt to open CryptoCC26XX.
handle = CryptoCC26XX_open(CC2640R2_LAUNCHXL_CRYPTO0, false, NULL);
if (!handle) {
return FAILURE;
}
keyIndex = CryptoCC26XX_allocateKey(handle, CRYPTOCC26XX_KEY_ANY, (const uint32_t *) key);
if (keyIndex == CRYPTOCC26XX_STATUS_ERROR) {
return FAILURE;
}
// Initialize transaction
CryptoCC26XX_Transac_init((CryptoCC26XX_Transaction *) &trans, CRYPTOCC26XX_OP_AES_CBC_ENCRYPT);
// Setup transaction
trans.keyIndex = keyIndex;
// trans.nonce = key;
trans.msgIn = (uint32_t *) dataIn;
trans.msgOut = (uint32_t *) dataOut;
trans.msgInLength = 16;
// Encrypt
status = CryptoCC26XX_transact(handle, (CryptoCC26XX_Transaction *) &trans);
if(status != CRYPTOCC26XX_STATUS_SUCCESS){
return FAILURE;
}
CryptoCC26XX_releaseKey(handle, &keyIndex);
//CryptoCC26XX_close(handle);
return SUCCESS;
}
uint8_t AES_encryptionByCBC(uint8_t *key, uint8_t *dataIn, uint8_t *dataOut) { // Declaration (typically done in a task) CryptoCC26XX_Handle handle; int32_t keyIndex; int32_t status; CryptoCC26XX_AESCBC_Transaction trans; uint8_t temp[16]; memset((void *)temp,0,16); // Initialize Crypto driver CryptoCC26XX_init(); // Attempt to open CryptoCC26XX. handle = CryptoCC26XX_open(CC2640R2_LAUNCHXL_CRYPTO0, false, NULL); if (!handle) { return FAILURE; } keyIndex = CryptoCC26XX_allocateKey(handle, CRYPTOCC26XX_KEY_ANY, (const uint32_t *) key); if (keyIndex == CRYPTOCC26XX_STATUS_ERROR) { return FAILURE; } // Initialize transaction CryptoCC26XX_Transac_init((CryptoCC26XX_Transaction *) &trans, CRYPTOCC26XX_OP_AES_CBC_ENCRYPT); // Setup transaction trans.keyIndex = keyIndex; trans.nonce = (uint32_t *) temp; trans.msgIn = (uint32_t *) dataIn; trans.msgOut = (uint32_t *) dataOut; trans.msgInLength = 16; // Encrypt status = CryptoCC26XX_transact(handle, (CryptoCC26XX_Transaction *) &trans); if(status != CRYPTOCC26XX_STATUS_SUCCESS){ return FAILURE; } CryptoCC26XX_releaseKey(handle, &keyIndex); //CryptoCC26XX_close(handle); return SUCCESS; }
CC26XX的AES加密请参考http://processors.wiki.ti.com/index.php/CC2640_AES_Encryption 以及TI RTOS的相关文档
