微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2640R2F AES 128bit CBC 加密

CC2640R2F AES 128bit CBC 加密

时间:10-02 整理:3721RD 点击:

如题,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的相关文档

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top