This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

CryptoCell CC310 AES CCM* MAC length other than zero

Hello guys,

these days i started to work with the CryptoCell library on nrf52840 and i'm facing some issues running AES CCM* mode

little example with pseudo code for initialization

CRYS_AESCCMStar_SourceAddress_t eui64 = 
{0x00, 0x00, 0xf0, 0xe0, 0xd0, 0xc0, 0xb0, 0xa0 };

CRYS_AESCCM_Key_t key_n = 
{ 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

uint8_t AData[15] = 
{ 0x69, 0x98, 0x03, 0x33, 0x63, 0xbb, 0xaa, 0x01, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x03};

uint8_t TextData[20] = 
{ 0x14, 0xaa, 0xbb, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
                     0x0c, 0x0d, 0x0e, 0x0f };
                     
uint8_t len_a = 15;
uint8_t len_m = 20;

CRYS_AESCCM_Mac_Res_t mac_res;

CRYS_AESCCMStar_Nonce_t nonce_n = 
{ 0x00, 0x00, 0xf0, 0xe0, 0xd0, 0xc0, 0xb0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x05 };

CRYSError_t ret;

.. SaSi_LibInit ..
.. CRYS_AESCCMStar_NonceGenerate ..

ret = CRYS_AESCCMStar(
                    SASI_AES_ENCRYPT,
                    key,
                    CRYS_AES_Key128BitSize,
                    nonce_n,
                    13, //SizeOfN
                    AData,
                    len_a,
                    TextData, //in
                    *len_m,
                    TextData, //out, same buffer 
                    0,  //tag len
                    mac_res
                    );

if i'm using another length than 0 for SizeOfT parameter e.g. 4 the function return always error code 0x00F01511

which says CRYS_AESCCM_ILLEGAL_PARAMETER_ERROR.

I'm getting the same error as well when i'm using a "hardcoded" nonce array (within my tests, solution was to use CRYS_AESCCMStar_NonceGenerate always generating the same output)

Does someone have any thought how i can solve this issue?

Best regards

Chris

Parents
  • Hi,

    First of all when you are changing size of tag you need to update nonce array well:

    tag_len == 0   last value in nonce array ==  4
    tag_len == 4   last value in nonce array ==  5
    tag_len == 8   last value in nonce array ==  6
    tag_len == 16 last value in nonce array ==  7

    If you will not do it you will receive an error: CRYS_AESCCM_ILLEGAL_PARAMETER_ERROR.

    So for tag_len == 0 you shall have following nonce array:

    CRYS_AESCCMStar_Nonce_t nonce_n =
    { 0x00, 0x00, 0xf0, 0xe0, 0xd0, 0xc0, 0xb0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x04 };

Reply
  • Hi,

    First of all when you are changing size of tag you need to update nonce array well:

    tag_len == 0   last value in nonce array ==  4
    tag_len == 4   last value in nonce array ==  5
    tag_len == 8   last value in nonce array ==  6
    tag_len == 16 last value in nonce array ==  7

    If you will not do it you will receive an error: CRYS_AESCCM_ILLEGAL_PARAMETER_ERROR.

    So for tag_len == 0 you shall have following nonce array:

    CRYS_AESCCMStar_Nonce_t nonce_n =
    { 0x00, 0x00, 0xf0, 0xe0, 0xd0, 0xc0, 0xb0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x04 };

Children
Related