GP对称加解密认证算法AES_CCM开发实例
一、所需头文件,仍然为:
#include "tee_crypto_api.h"#include "tee_object_api.h"二、加密示例
#define AES_CCM_CIPHER_LEN 16#define AES_CCM_NONCE_LEN 7#define AES_CCM_TAG_LEN 32TEE_Result ret;TEE_OperationHandle oper_enc = NULL;/*设置nonce值*/uint8_t nonce[AES_CCM_NONCE_LEN] = {0x14, 0xD7, 0xF6, 0xC9, 0x3D, 0x1F, 0x53};const uint32_t nonce_size = AES_CCM_NONCE_LEN;/*设置AAD值*/uint8_t aad[AES_CCM_CIPHER_LEN] = { 0x06, 0x55, 0xAD, 0xA9, 0x1B, 0xFC, 0x6D, 0xD2, 0x88, 0x27, 0xB7, 0x4A, 0x76, 0x9B, 0xDB, 0xD6};const uint32_t aad_size = AES_CCM_CIPHER_LEN;/*需要加密的数据buffer*/uint8_t plant[AES_CCM_CIPHER_LEN] = { 0xF7, 0x44, 0x6E, 0xB2, 0x73, 0xED, 0x03, 0xE8, 0x1D, 0x24, 0x14, 0xFA, 0xB8, 0x7D, 0xC6, 0xCB};const uint32_t plant_size = AES_CCM_CIPHER_LEN;/*加密密文buffer*/uint8_t cipher[AES_CCM_CIPHER_LEN] = {0};size_t cipher_size = AES_CCM_CIPHER_LEN;/*加密生成的tag buffer*/size_t tag_size = AES_CCM_TAG_LEN;uint8_t tag[AES_CCM_TAG_LEN] = {0};ret = TEE_AllocateOperation(&oper_enc, TEE_ALG_AES_CCM, TEE_MODE_ENCRYPT, AES_KEY_SIZE_MAX);ret = TEE_SetOperationKey(oper_enc, key_obj);ret = TEE_AEInit(oper_enc, nonce, nonce_size, tag_size, aad_size, plant_size);/* Could be called many times */TEE_AEUpdateAAD(oper_enc, aad, aad_size);/* We ignore TEE_AEUpdate because we do it on TEE_AEEncryptFinal or TEE_AEDecryptFinal */ret = TEE_AEEncryptFinal(oper_enc, plant, plant_size, cipher, cipher_size, tag, &tag_size);TEE_FreeOperation(oper_enc)三、解密示例
TEE_Result ret;TEE_OperationHandle oper_dec = NULL;/*nonce值和AAD值须和解密时的值相同*/uint8_t nonce[AES_CCM_NONCE_LEN] = {0x14, 0xD7, 0xF6, 0xC9, 0x3D, 0x1F, 0x53};const uint32_t nonce_size = AES_CCM_NONCE_LEN;uint8_t aad[AES_CCM_CIPHER_LEN] = { 0x06, 0x55, 0xAD, 0xA9, 0x1B, 0xFC, 0x6D, 0xD2, 0x88, 0x27, 0xB7, 0x4A, 0x76, 0x9B, 0xDB, 0xD6};const uint32_t aad_size = AES_CCM_CIPHER_LEN;const uint32_t plant_size = AES_CCM_CIPHER_LEN;/*解密数据buffer*/uint8_t decryted[AES_CCM_CIPHER_LEN] = {0};size_t dec_size = AES_CCM_CIPHER_LEN;ret = TEE_AllocateOperation(&oper_dec, TEE_ALG_AES_CCM, TEE_MODE_DECRYPT, AES_KEY_SIZE_MAX);ret = TEE_SetOperationKey(oper_dec, key_obj);ret = TEE_AEInit(oper_dec, nonce, nonce_size, tag_size * BIT_TO_BYTE, aad_size, plant_size);/* Could be called many times */TEE_AEUpdateAAD(oper_dec, aad, aad_size);ret = TEE_AEDecryptFinal(oper_dec, cipher, cipher_size, decryted, &dec_size, tag, tag_size);TEE_FreeOperation(oper_dec)
6
2
2
浏览732 编辑于2022-01-29 13:09未知归属地
全部评论
最多点赞
最新发布
最早发布
写回答
所见即所得编辑器, editor1
工具栏
0/50000
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
- 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
- 如您发布的内容为转载内容,请注明内容来源。
我要发帖子
了解社区公约,与您携手共创和谐专业的开发者社区。






































苏公安网备 32011402010933号