AnsweredAssumed Answered

CRYP_AES Funtions Always Return 0

Question asked by test.argprs on Mar 28, 2017
Latest reply on Mar 29, 2017 by Nesrine M

Hi

 

I m using stm32f4 for my project. My project has AES encryption and decryption parts. I using standard peripheral librarys.

Standard peripheral library has cryp.h. I use this library for AES process.

I generate codes like this and my codes is following lines.

 

uint8_t AES256key[32] = {0x60,0x3d,0xeb,0x10,0x15,0xca,0x71,0xbe,
0x2b,0x73,0xae,0xf0,0x85,0x7d,0x77,0x81,
0x1f,0x35,0x2c,0x07,0x3b,0x61,0x08,0xd7,
0x2d,0x98,0x10,0xa3,0x09,0x14,0xdf,0xf4};

uint8_t IV_1[16] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};

 

uint8_t Plaintext[AES_TEXT_SIZE] =
{0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,
0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a,
0xae,0x2d,0x8a,0x57,0x1e,0x03,0xac,0x9c,
0x9e,0xb7,0x6f,0xac,0x45,0xaf,0x8e,0x51,
0x30,0xc8,0x1c,0x46,0xa3,0x5c,0xe4,0x11,
0xe5,0xfb,0xc1,0x19,0x1a,0x0a,0x52,0xef,
0xf6,0x9f,0x24,0x45,0xdf,0x4f,0x9b,0x17,
0xad,0x2b,0x41,0x7b,0xe6,0x6c,0x37,0x10};

 

uint8_t Ciphertext[AES_TEXT_SIZE] =
{0x76,0x49,0xab,0xac,0x81,0x19,0xb2,0x46,
0xce,0xe9,0x8e,0x9b,0x12,0xe9,0x19,0x7d,
0x50,0x86,0xcb,0x9b,0x50,0x72,0x19,0xee,
0x95,0xdb,0x11,0x3a,0x91,0x76,0x78,0xb2,
0x73,0xbe,0xd6,0xb8,0xe3,0xc1,0x74,0x3b,
0x71,0x16,0xe6,0x9e,0x22,0x22,0x95,0x16,
0x3f,0xf1,0xca,0xa1,0x68,0x1f,0xac,0x09,
0x12,0x0e,0xca,0x30,0x75,0x86,0xe1,0xa7};

 

uint8_t Encryptedtext[AES_TEXT_SIZE];
uint8_t Decryptedtext[AES_TEXT_SIZE];

uint32_t multiplier;

void TM_Delay_Init(void) {
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq(&RCC_Clocks);
multiplier = RCC_Clocks.HCLK_Frequency / 4000000;
}

void TM_DelayMicros(uint32_t micros) {
micros = micros * multiplier - 10;
while (micros--);
}

void TM_DelayMillis(uint32_t millis) {
millis = 1000 * millis * multiplier - 10;
while (millis--);
}

 

static void Display_PlainData(uint32_t datalength)
{
uint32_t BufferCounter =0;
uint32_t count = 0;
char str[128];

serial1WriteStr(" Plain Data :\n");

for(BufferCounter = 0; BufferCounter < datalength; BufferCounter++)
{
sprintf(str,"%d , ", Plaintext[BufferCounter]);
serial1WriteStr(str);
count++;

if(count == 16)
{
count = 0;
sprintf(str," Block %d \n\r", BufferCounter/16);
serial1WriteStr(str);
}
}
memset(str, 0, sizeof(str));
TM_DelayMillis(125);
}


static void Display_EncryptedData(uint32_t datalength)
{

uint32_t BufferCounter =0;
uint32_t count = 0;
char str[128];

serial1WriteStr(" Encrypted Data :\n");

for(BufferCounter = 0; BufferCounter < datalength; BufferCounter++)
{
sprintf(str,"%d , ", Encryptedtext[BufferCounter]);
serial1WriteStr(str);
count++;

if(count == 16)
{
count = 0;
sprintf(str," Block %d \n\r", BufferCounter/16);
serial1WriteStr(str);
}
}
memset(str, 0, sizeof(str));
TM_DelayMillis(125);
}

static void Display_DecryptedData(uint32_t datalength)
{

uint32_t BufferCounter =0;
uint32_t count = 0;
char str[128];

serial1WriteStr(" Decrypted Data :\n");

for(BufferCounter = 0; BufferCounter < datalength; BufferCounter++)
{
sprintf(str,"%d , ", Decryptedtext[BufferCounter]);
serial1WriteStr(str);
count++;

if(count == 16)
{
count = 0;
sprintf(str," Block %d \n\r", BufferCounter/16);
serial1WriteStr(str);
}
}
memset(str, 0, sizeof(str));
TM_DelayMillis(125);
}


int main(void)
{

RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE);
serial1Init(115200);
TM_Delay_Init();
Display_PlainData(AES_TEXT_SIZE);

while(1)
{

if(CRYP_AES_CTR(MODE_ENCRYPT,IV_1,AES256key,256,Plaintext,AES_TEXT_SIZE,Encryptedtext) == SUCCESS)
{
Display_EncryptedData(AES_TEXT_SIZE);
}

if(CRYP_AES_CTR(MODE_DECRYPT,IV_1,AES256key, 256,Ciphertext, AES_TEXT_SIZE,Decryptedtext) == SUCCESS)
{
Display_DecryptedData(AES_TEXT_SIZE);
}

TM_DelayMillis(3000);
}
}

When i run the codes i see following outputs,

  Plain Data :
107 , 193 , 190 , 226 , 46 , 64 , 159 , 150 , 233 , 61 , 126 , 17 , 115 , 147 , 23 , 42 ,   Block 0
174 , 45 , 138 , 87 , 30 , 3 , 172 , 156 , 158 , 183 , 111 , 172 , 69 , 175 , 142 , 81 ,   Block 1
48 , 200 , 28 , 70 , 163 , 92 , 228 , 17 , 229 , 251 , 193 , 25 , 26 , 10 , 82 , 239 ,   Block 2 
46 , 159 , 36 , 69 , 223 , 79 , 155 , 23 , 173 , 43 , 65 , 123 , 230 , 108 , 55 , 16 ,   Block 3 
Encrypted Data :
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,   Block 0 
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,   Block 1 
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,   Block 2 
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,   Block 3   
Decrypted Data :
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,   Block 0 
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,   Block 1 
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,   Block 2 
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,   Block 3

The encrypted and decrypted datas always return zero. What am i mistake ?

Outcomes