CHDK_DE Vorschauversion  Trunk Rev. 5663
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
aes128.h-Dateireferenz
+ Dieser Graph zeigt, welche Datei direkt oder indirekt diese Datei enthält:

gehe zum Quellcode dieser Datei

Funktionen

void aes128_expandkey (void *expanded_key, const void *aes_key)
 
void aes128_encrypt_block (void *out_buffer, const void *inp_buffer, const unsigned char *expkey)
 
void aes128_decrypt_block (void *out_buffer, const void *inp_buffer, const unsigned char *expkey)
 
void aes128_cbc_encrypt (void *buffer, const unsigned char *expkey, const void *iv, int len)
 
void aes128_cbc_decrypt (void *buffer, const unsigned char *expkey, const void *iv, int len)
 

Dokumentation der Funktionen

void aes128_cbc_decrypt ( void *  buffer,
const unsigned char *  expkey,
const void *  iv,
int  len 
)

Definiert in Zeile 425 der Datei aes128.c.

426 {
427  int i;
428  uint32_t xorl[4];
429  uint32_t tmpl[4];
430  uint32_t *bufl = (uint32_t *)buffer;
431 
432  memcpy( xorl, iv, 16 );
433  while( len > 0 ){
434  memcpy( tmpl, bufl, 16 );
435  aes128_decrypt_block(bufl, bufl, expkey ); // decrypt current block
436  for( i = 0; i < 4; i++ ) bufl[i] ^= xorl[i];
437  memcpy( xorl, tmpl, 16 );
438  bufl += 4;
439  len -= 16;
440  }
441 }
void aes128_cbc_encrypt ( void *  buffer,
const unsigned char *  expkey,
const void *  iv,
int  len 
)

Definiert in Zeile 409 der Datei aes128.c.

410 {
411  int i;
412  uint32_t xorl[4];
413  uint32_t *bufl = (uint32_t *)buffer;
414 
415  memcpy( xorl, iv, 16 );
416  while( len > 0 ){
417  for( i = 0; i < 4; i++ ) bufl[i] ^= xorl[i];
418  aes128_encrypt_block(bufl, bufl, expkey ); // encrypt current block
419  memcpy( xorl, bufl, 16 );
420  bufl += 4;
421  len -= 16;
422  }
423 }
void aes128_decrypt_block ( void *  out_buffer,
const void *  inp_buffer,
const unsigned char *  expkey 
)

Definiert in Zeile 387 der Datei aes128.c.

388 {
389  unsigned char *out = (unsigned char *)out_buffer;
390  unsigned char *in = (unsigned char *)inp_buffer;
391  unsigned char state[Nb * 4];
392  unsigned round;
393 
394  memcpy (state, in, sizeof(state));
395 
396  AddRoundKey ((uint32_t *)state, (uint32_t *)expkey + Nr * Nb);
397  InvShiftRows(state);
398 
399  for( round = Nr; round--; )
400  {
401  AddRoundKey ((uint32_t *)state, (uint32_t *)expkey + round * Nb);
402  if( round )
403  InvMixSubColumns (state);
404  }
405 
406  memcpy (out, state, sizeof(state));
407 }
void aes128_encrypt_block ( void *  out_buffer,
const void *  inp_buffer,
const unsigned char *  expkey 
)

Definiert in Zeile 365 der Datei aes128.c.

366 {
367  unsigned char *out = (unsigned char *)out_buffer;
368  unsigned char *in = (unsigned char *)inp_buffer;
369  unsigned char state[Nb * 4];
370  unsigned round;
371 
372  memcpy (state, in, Nb * 4);
373  AddRoundKey ((uint32_t *)state, (uint32_t *)expkey);
374 
375  for( round = 1; round < Nr + 1; round++ ) {
376  if( round < Nr )
377  MixSubColumns (state);
378  else
379  ShiftRows (state);
380 
381  AddRoundKey ((uint32_t *)state, (uint32_t *)expkey + round * Nb);
382  }
383 
384  memcpy (out, state, sizeof(state));
385 }
void aes128_expandkey ( void *  expanded_key,
const void *  aes_key 
)

Definiert in Zeile 330 der Datei aes128.c.

331 {
332  unsigned char *expkey = (unsigned char *)expanded_key;
333  unsigned char *key = (unsigned char *)aes_key;
334  unsigned char tmp0, tmp1, tmp2, tmp3, tmp4;
335  unsigned idx;
336 
337  memcpy (expkey, key, Nk * 4);
338 
339  for( idx = Nk; idx < Nb * (Nr + 1); idx++ ) {
340  tmp0 = expkey[4*idx - 4];
341  tmp1 = expkey[4*idx - 3];
342  tmp2 = expkey[4*idx - 2];
343  tmp3 = expkey[4*idx - 1];
344  if( !(idx % Nk) ) {
345  tmp4 = tmp3;
346  tmp3 = Sbox[tmp0];
347  tmp0 = Sbox[tmp1] ^ Rcon[idx/Nk];
348  tmp1 = Sbox[tmp2];
349  tmp2 = Sbox[tmp4];
350  } else if( Nk > 6 && idx % Nk == 4 ) {
351  tmp0 = Sbox[tmp0];
352  tmp1 = Sbox[tmp1];
353  tmp2 = Sbox[tmp2];
354  tmp3 = Sbox[tmp3];
355  }
356 
357  expkey[4*idx+0] = expkey[4*idx - 4*Nk + 0] ^ tmp0;
358  expkey[4*idx+1] = expkey[4*idx - 4*Nk + 1] ^ tmp1;
359  expkey[4*idx+2] = expkey[4*idx - 4*Nk + 2] ^ tmp2;
360  expkey[4*idx+3] = expkey[4*idx - 4*Nk + 3] ^ tmp3;
361  }
362 }