Hi @Kan_Li, thanks for your response. Here's the modified code of symmetric example on plug and trust middleware to do aead encryption:
sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx)
{
sss_status_t status = kStatus_SSS_Success;
sss_algorithm_t algorithm;
sss_mode_t mode;
/* clang-format off */
uint8_t srcData[16] = { 0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31 }; /*HELLOHELLOHELLO1*/
uint8_t keystring[KEY_BIT_LEN / 8] = { 0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31 }; /*HELLOHELLOHELLO1*/
uint8_t destData[16] = {0,};
size_t destDataLen = sizeof(destData);
uint8_t iv[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x15, 0x71, 0x99, 0x32, 0xd3, 0x56, 0x90};
size_t ivlen = sizeof(iv);
uint32_t keyId = MAKE_TEST_ID(__LINE__);
sss_key_part_t keyPart;
sss_cipher_type_t cipherType;
size_t keyByteLenMax = KEY_BIT_LEN/8;
sss_object_t key = { 0 };
sss_aead_t ctx_aead_encrypt = { 0 };
size_t TAG_SIZE = (96 / 8);
uint8_t tag[TAG_SIZE];
uint8_t *aad =(uint8_t*)"Extra authentication data";
size_t aadSize = strlen((char*)aad);
algorithm = kAlgorithm_SSS_AES_GCM;
keyPart = kSSS_KeyPart_Default;
cipherType = kSSS_CipherType_AES;
mode = kMode_SSS_Encrypt;
/* doc:start ex_sss_symmetric-allocate-key */
/* Pre-requisite for encryption Part*/
ENSURE_OR_GO_CLEANUP(kType_SSS_SE_SE05x == pCtx->session.subsystem);
status = sss_key_object_init(&key, &pCtx->ks);
ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success);
status = sss_key_object_allocate_handle(&key, keyId, keyPart, cipherType, keyByteLenMax, kKeyObject_Mode_Persistent);
ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success);
status = sss_key_store_set_key(&pCtx->ks, &key, keystring, sizeof(keystring), sizeof(keystring) * 8, NULL, 0);
ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success);
/* doc:end ex_sss_symmetric-allocate-key */
/* doc:start ex_sss_aead-encrypt */
status = sss_aead_context_init(&ctx_aead_encrypt, &pCtx->session, &key, algorithm, mode);
ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success);
LOG_I("Do Encryption");
LOG_MAU8_I("iv", iv, ivlen);
LOG_MAU8_I("srcData", srcData, ivlen);
/*Do Encryption*/
status = sss_aead_one_go(&ctx_aead_encrypt,srcData,destData, destDataLen, iv, ivlen, aad, aadSize, tag, &TAG_SIZE);
ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success);
/* doc:end ex_sss_aead-encrypt */
LOG_MAU8_I("encrypted data", destData, destDataLen);
LOG_I("Encryption successful !!!");
cleanup:
if (ctx_aead_encrypt.session != NULL) {
sss_aead_context_free(&ctx_aead_encrypt);
}
sss_key_object_free(&key);
return status;
}
sss :WARN :nxEnsure:'status == SM_OK' failed. At Line:6082 Function:sss_se05x_aead_one_go
App :WARN :nxEnsure:'status == kStatus_SSS_Success' failed. At Line:116 Function:ex_sss_entry