TI bim中使用AES-CBC加解密

本文详细介绍了在TI bim中使用AES-CBC模式进行加解密操作。内容涵盖AES加密的不同工作模式,重点讨论了CBC模式的工作原理,以及在加密解密过程中初始化向量IV的使用。同时,提供了512Bytes明文的加密解密测试例程,并给出了相关工程链接。
摘要由CSDN通过智能技术生成

AES CBC Encrypt/Decrypt

AES加密的几种工作模式

高级加密标准(Advanced Encryption Standard: AES)是美国国家标准与技术研究院(NIST)在2001年建立了电子数据的加密规范。其是对称加解密算法的最经典算法之一,它是一种分组加密标准,每个加密块大小为128位,允许的密钥长度为128、192和256位。这里只介绍CBC加密模式。

CBC 模式

CBC模式又称密码分组链接(Cipher-block chaining):加密时,明文首先与IV异或,然后将结果进行块加密,得到的输出就是密文,同时本次的输出密文作为下一个块加密的IV; 解密时,先将密文的第一个块进行块解密,然后将结果与IV异或,就能得到明文,同时,本次解密的输入密文作为下一个块解密的IV;如下图:
图1
图2
AES CBC加密允许加密或解密长度不是16的整数倍,不足的部分会用0填充,输出总是16的整数倍;完成加密或解密后会更新初始化向量IV;CBC模式相比ECB有更高的保密性,但由于对每个数据块的加密依赖与前一个数据块的加密所以加密无法并行;与ECB一样在加密前需要对数据进行填充。

测试例程

本文测试环境:

	芯片型号:TI-CC2652R
	SDK版本:simplelink_cc13x2_26x2_sdk_3_10_00_53
	AES库:由于是在TI提供的bim中进行aes加解密所以只能使用driverlib库中比较底层的crypto.c

代码实现

/*******************************************************************************
 * EXTERNAL FUNCTIONS
 */
uint8_t rtf_ota_bl_execute_version_fallback(void)
{
   
    int ret = 0;
    uint32_t addr = 0x00;
    uint8_t ota_bl_install_event = RTF_OTA_EVENT_EDGE_REVERT_SUCCESS;
    uint32_t imgOffset = OTA_BACKUP_IMAGE_ADDRE;
    uint8_t  RevertSystem = RTF_OTA_BL_OTA_REVERTSYSTEM_DISABLE;
    uint8_t  ProvisionalPeriod = 0;
    uint8_t  ota_state = RTF_OTA_EDGE_REVERTED_IMAGE;
    uint8_t ota_update_image_valid = RTF_OTA_EDGE_OTA_UPDATE_IMAGE_UNVALID;
    uint8_t OtaBackupFwVersion[4] = {
   0};
    
    extFlashOpen();
    bimDelay(1);
    
    memset(imagefinalHash, 0, DIGEST_SIZE);
    SHA2_open();
    
    for(;;)
    {
   
        memset(image_input_data, 0, IMAGE_BLOCK_SIZE);
        extFlashRead(imgOffset, IMAGE_BLOCK_SIZE, image_input_data);
        imgOffset+=IMAGE_BLOCK_SIZE;
   
        if(imgOffset == (APP_FLASH_MAX_SIZE + OTA_BACKUP_IMAGE_ADDRE))
        {
   
            break;
        }else{
   
            SHA2_addData(image_input_data, IMAGE_BLOCK_SIZE);
        }
    }
    SHA2_finalize(imagefinalHash);
    SHA2_close(); 
    extFlashClose();
    
    imgOffset=OTA_BACKUP_IMAGE_ADDRE;

    ret = memcmp(BOOT_NV_Config_buff.BOOT_NV_Buf.OtaBackupImageSHA2, imagefinalHash, DIGEST_SIZE);

    if (ret != 0)
    {
   
        RevertSystem = RTF_OTA_BL_OTA_REVERTSYSTEM_FAIL;
        
        ota_state = RTF_OTA_EDGE_NORMAL_IMAGE;
        
        ota_bl_install_event = RTF_OTA_EVENT_EDGE_REVERT_FAILED;
        
        updateBootNVSegmentbyType(BOOT_NV_PROVISIONAL_PERIOD, &ProvisionalPeriod, sizeof(uint8_t));
        updateBootNVSegmentbyType(BOOT_NV_REVERT_SYSTEM, &RevertSystem, sizeof(uint8_t));
        updateBootNVSegmentbyType(BOOT_NV_OTA_STATE, &ota_state, sizeof(uint8_t));
        updateBootNVSegmentbyType(BOOT_NV_OTA_UPDATE_IMAGE_VALID, &ota_update_image_valid, sizeof(uint8_t));
        updateBootNVSegmentbyType(BOOT_NV_OTA_INSTALL_EVENT, &ota_bl_install_event, sizeof(uint8_t));

        updateBootNvRecord();
        
        return BOOT_NV_ERR;
    }
    
    eraseFWStartFlash();
    rtf_bl_init_cbc_iv();
    
    for(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值