示例#1
0
SizeT AesCbc_Decode(CAesCbc *p, Byte *data, SizeT size)
{
  if (size == 0)
    return 0;
  if (size < AES_BLOCK_SIZE)
    return AES_BLOCK_SIZE;
  size -= AES_BLOCK_SIZE;

  SizeT i;
  UInt32 in[4], out[4];

  for (i = 0; i <= size; i += AES_BLOCK_SIZE, data += AES_BLOCK_SIZE)
  {
    in[0] = GetUi32(data);
    in[1] = GetUi32(data + 4);
    in[2] = GetUi32(data + 8);
    in[3] = GetUi32(data + 12);
    
    AesDecode32(out, in, p->aes.rkey, p->aes.numRounds2);
    
    SetUi32(data,      p->prev[0] ^ out[0]);
    SetUi32(data + 4,  p->prev[1] ^ out[1]);
    SetUi32(data + 8,  p->prev[2] ^ out[2]);
    SetUi32(data + 12, p->prev[3] ^ out[3]);
    
    p->prev[0] = in[0];
    p->prev[1] = in[1];
    p->prev[2] = in[2];
    p->prev[3] = in[3];
  }

  return i;
}
示例#2
0
文件: Aes.c 项目: Ando02/wubiuefi
UInt32 MY_FAST_CALL AesCbcDecode(CAesCbc *cbc, Byte *data, UInt32 size)
{
  UInt32 i;
  UInt32 in[4], out[4];
  if (size == 0)
    return 0;
  if (size < AES_BLOCK_SIZE)
    return AES_BLOCK_SIZE;
  size -= AES_BLOCK_SIZE;
  for (i = 0; i <= size; i += AES_BLOCK_SIZE, data += AES_BLOCK_SIZE)
  {
    in[0] = GetUi32(data);
    in[1] = GetUi32(data + 4);
    in[2] = GetUi32(data + 8);
    in[3] = GetUi32(data + 12);
    
    AesDecode32(in, out, cbc->aes.rkey, cbc->aes.numRounds2);
    
    SetUi32(data,      cbc->prev[0] ^ out[0]);
    SetUi32(data + 4,  cbc->prev[1] ^ out[1]);
    SetUi32(data + 8,  cbc->prev[2] ^ out[2]);
    SetUi32(data + 12, cbc->prev[3] ^ out[3]);
    
    cbc->prev[0] = in[0];
    cbc->prev[1] = in[1];
    cbc->prev[2] = in[2];
    cbc->prev[3] = in[3];
  }
  return i;
}
示例#3
0
void Aes_Decode32(const CAes *p, UInt32 *dest, const UInt32 *src)
{
  AesDecode32(dest, src, p->rkey, p->numRounds2);
}