summaryrefslogblamecommitdiffstats
path: root/SD-VBS/common/toolbox/lagrcv/liblagrcv.a
blob: a7a39aec74e1a979e225645bc3058f170d0c841c (plain) (tree)
1
2
3
4
5
6





                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
lass="hl opt">&= ~0x03, aes_bad : ( aes_ret )( cx->Nkey << 2 ) );

  cx->mode = ( cx->mode & ~0x03 ) | ( ( byte )f & 0x03 );
  cx->Nkey = n_bytes >> 2;
  cx->Nrnd = Nr( cx->Nkey, ( word )nc );

  cx->e_key[0] = word_in( in_key     );
  cx->e_key[1] = word_in( in_key +  4 );
  cx->e_key[2] = word_in( in_key +  8 );
  cx->e_key[3] = word_in( in_key + 12 );

  kf = cx->e_key;
  kt = kf + nc * ( cx->Nrnd + 1 ) - cx->Nkey;
  rci = 0;

  switch ( cx->Nkey ) {
    case 4:
      _Pragma( "loopbound min 0 max 0" )
      do {
        kf[4] = kf[0] ^ ls_box( kf[3], 3 ) ^ rijndael_enc_rcon_tab[rci++];
        kf[5] = kf[1] ^ kf[4];
        kf[6] = kf[2] ^ kf[5];
        kf[7] = kf[3] ^ kf[6];
        kf += 4;
      } while ( kf < kt );
      break;

    case 6:
      cx->e_key[4] = word_in( in_key + 16 );
      cx->e_key[5] = word_in( in_key + 20 );
      _Pragma( "loopbound min 0 max 0" )
      do {
        kf[ 6] = kf[0] ^ ls_box( kf[5], 3 ) ^ rijndael_enc_rcon_tab[rci++];
        kf[ 7] = kf[1] ^ kf[ 6];
        kf[ 8] = kf[2] ^ kf[ 7];
        kf[ 9] = kf[3] ^ kf[ 8];
        kf[10] = kf[4] ^ kf[ 9];
        kf[11] = kf[5] ^ kf[10];
        kf += 6;
      } while ( kf < kt );
      break;

    case 8:
      cx->e_key[4] = word_in( in_key + 16 );
      cx->e_key[5] = word_in( in_key + 20 );
      cx->e_key[6] = word_in( in_key + 24 );
      cx->e_key[7] = word_in( in_key + 28 );
      _Pragma( "loopbound min 7 max 7" )
      do {
        kf[ 8] = kf[0] ^ ls_box( kf[7], 3 ) ^ rijndael_enc_rcon_tab[rci++];
        kf[ 9] = kf[1] ^ kf[ 8];
        kf[10] = kf[2] ^ kf[ 9];
        kf[11] = kf[3] ^ kf[10];
        kf[12] = kf[4] ^ ls_box( kf[11], 0 );
        kf[13] = kf[5] ^ kf[12];
        kf[14] = kf[6] ^ kf[13];
        kf[15] = kf[7] ^ kf[14];
        kf += 8;
      } while ( kf < kt );
      break;
  }

  if ( ( cx->mode & 3 ) != enc ) {
    word    i;

    kt = cx->d_key + nc * cx->Nrnd;
    kf = cx->e_key;

    cpy( kt, kf );
    kt -= 2 * nc;

    _Pragma( "loopbound min 0 max 0" )
    for ( i = 1; i < cx->Nrnd; ++i ) {
      mix( kt, kf );
      kt -= 2 * nc;
    }

    cpy( kt, kf );
  }

  return aes_good;
}

short rijndael_enc_encrypt( unsigned char  in_blk[], unsigned char  out_blk[],
                            const struct aes *cx )
{
  const unsigned long *kp = cx->e_key;
  if ( !( cx->mode & 1 ) )
    return 0;
  unsigned long  b0[4];
  b0[0] = *( unsigned long * )in_blk ^ kp[0];
  b0[1] = *( unsigned long * )( in_blk + 4 )^kp[1];
  b0[2] = *( unsigned long * )( in_blk + 8 )^kp[2];
  b0[3] = *( unsigned long * )( in_blk + 12 )^kp[3];
  kp += 4;
  unsigned long  b1[4];
  switch ( cx->Nrnd ) {
    case 14:
      b1[0] = kp[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
                        rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
                        rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
                        rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
      b1[1] = kp[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
                        rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
                        rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
                        rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
      b1[2] = kp[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
                        rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
                        rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
                        rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
      b1[3] = kp[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
                        rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
                        rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
                        rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
      b0[0] = ( kp + 4 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^
                                rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
                                rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
                                rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
      b0[1] = ( kp + 4 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^
                                rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
                                rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
                                rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
      b0[2] = ( kp + 4 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^
                                rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
                                rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^
                                rijndael_enc_ft_tab[3][( ( unsigned char )( b1[1] >> 24 ) )] );
      b0[3] = ( kp + 4 )[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[3] )] ^
                                rijndael_enc_ft_tab[1][( ( unsigned char )( b1[0] >> 8 ) )] ^
                                rijndael_enc_ft_tab[2][( ( unsigned char )( b1[1] >> 16 ) )] ^
                                rijndael_enc_ft_tab[3][( ( unsigned char )( b1[2] >> 24 ) )] );
      kp += 8;
    case 12:
      b1[0] = kp[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[0] )] ^
                        rijndael_enc_ft_tab[1][( ( unsigned char )( b0[1] >> 8 ) )] ^
                        rijndael_enc_ft_tab[2][( ( unsigned char )( b0[2] >> 16 ) )] ^
                        rijndael_enc_ft_tab[3][( ( unsigned char )( b0[3] >> 24 ) )] );
      b1[1] = kp[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[1] )] ^
                        rijndael_enc_ft_tab[1][( ( unsigned char )( b0[2] >> 8 ) )] ^
                        rijndael_enc_ft_tab[2][( ( unsigned char )( b0[3] >> 16 ) )] ^
                        rijndael_enc_ft_tab[3][( ( unsigned char )( b0[0] >> 24 ) )] );
      b1[2] = kp[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[2] )] ^
                        rijndael_enc_ft_tab[1][( ( unsigned char )( b0[3] >> 8 ) )] ^
                        rijndael_enc_ft_tab[2][( ( unsigned char )( b0[0] >> 16 ) )] ^
                        rijndael_enc_ft_tab[3][( ( unsigned char )( b0[1] >> 24 ) )] );
      b1[3] = kp[3] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b0[3] )] ^
                        rijndael_enc_ft_tab[1][( ( unsigned char )( b0[0] >> 8 ) )] ^
                        rijndael_enc_ft_tab[2][( ( unsigned char )( b0[1] >> 16 ) )] ^
                        rijndael_enc_ft_tab[3][( ( unsigned char )( b0[2] >> 24 ) )] );
      b0[0] = ( kp + 4 )[0] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[0] )] ^
                                rijndael_enc_ft_tab[1][( ( unsigned char )( b1[1] >> 8 ) )] ^
                                rijndael_enc_ft_tab[2][( ( unsigned char )( b1[2] >> 16 ) )] ^
                                rijndael_enc_ft_tab[3][( ( unsigned char )( b1[3] >> 24 ) )] );
      b0[1] = ( kp + 4 )[1] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[1] )] ^
                                rijndael_enc_ft_tab[1][( ( unsigned char )( b1[2] >> 8 ) )] ^
                                rijndael_enc_ft_tab[2][( ( unsigned char )( b1[3] >> 16 ) )] ^
                                rijndael_enc_ft_tab[3][( ( unsigned char )( b1[0] >> 24 ) )] );
      b0[2] = ( kp + 4 )[2] ^ ( rijndael_enc_ft_tab[0][( ( unsigned char )b1[2] )] ^
                                rijndael_enc_ft_tab[1][( ( unsigned char )( b1[3] >> 8 ) )] ^
                                rijndael_enc_ft_tab[2][( ( unsigned char )( b1[0] >> 16 ) )] ^<