⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aes.c

📁 flint库 RSA算法
💻 C
📖 第 1 页 / 共 5 页
字号:
    {#ifdef AES_TEST      fprintf (stderr, "AES_ERR_KEYLENGTH in line %d\n", __LINE__);#endif      return AES_ERR_KEYLENGTH;    }  for (col = col4 = 0; col < Nk - 1; col++, col4+=4)    {      keyptr = &ExpandedKey[col];      *keyptr = UC2UL(&RawKey[col4]);    }  keyptr = &ExpandedKey[Nk-1];  tmp = (*keyptr = UC2UL(&RawKey[(unsigned)(Nk-1)<<2]));  for (col = Nk; col < Nb*(Nr + 1); col++)    {      keyptr1 = &ExpandedKey[col];      keyptr2 = &ExpandedKey[col-Nk];      if (col % Nk == 0)        {          tmp = ROR (tmp, 8);          SubWord (tmp);          tmp ^= rc[col/Nk];        }      else if ((Nk == 8) && (col % Nk == 4))        {          SubWord (tmp); /*lint !e771 At this point tmp is initialized! */        }      tmp = (*keyptr1 = *keyptr2 ^ tmp);    }#ifdef AES_SECURE  ZeroUlong (&tmp);#endif  return 0;}/******************************************************************************//*                                                                            *//*  Function:   AES key expansion to inverse key schedule for decryption      *//*  Syntax:     int                                                           *//*              AESInvKeyExpansion_l (AESXPKEY InvExpandedKey, AESKEY RawKey, *//*                                           int KeyLength, int BlockLength); *//*  Input:      AESKEY RawKey (User Key as byte array)                        *//*              int KeyLength (Length of user key 128, 192 or 256 bit)        *//*              int BlockLength (Length of Message block 128, 192 or 256 bit) *//*  Output:     AESEXPKEY InvExpandedKey (Invers key schedule)                *//*  Returns:    0                                                             *//*                                                                            *//******************************************************************************/int __FLINT_APIAESInvKeyExpansion_l (AESXPKEY InvExpandedKey, AESKEY RawKey,                                 int KeyLength, int BlockLength){  int round, Nb, Nk, Nr, error;  Nb = BlockLength/32;  Nk = KeyLength/32;  Nr = NR[(Nk - 4)/2][(Nb - 4)/2];  if (0 != (error = AESKeyExpansion (InvExpandedKey, RawKey, KeyLength, BlockLength)))    {      return error;    }  for (round = 1; round < Nr; round++)    {      InvMixColumns (&InvExpandedKey[round*Nb], Nb);    }  return 0;}#ifndef AES_COMPACT/******************************************************************************//*                                                                            *//*  Function:   AES processing of state variable (encryption)                 *//*              Fast table lookup                                             *//*  Syntax:     int                                                           *//*              AESEncState_l (AESSTATE State, AESXPKEY ExpandedKey,          *//*                                                     int Nk, int Nb);       *//*  Input:      AESSTATE State (State variable to process)                    *//*              AESEXPKEY ExpandedKey (Key schedule)                          *//*              int Nk (Keylength in 4-byte-words 4, 6, 8)                    *//*              int Nb (Blocklength in 4-byte-words 4, 6, 8)                  *//*  Output:     AESSTATE State (processed state variable)                     *//*  Returns:    0                                                             *//*                                                                            *//******************************************************************************/int __FLINT_API AESEncState_l (AESSTATE State, AESXPKEY ExpandedKey, int Nk, int Nb){  int round, Nr = NR[(Nk - 4)/2][(Nb - 4)/2];  ULONG *keyptr;  ULONG a0, a1, a2, a3, a4, a5, a6, a7;  ULONG b0, b1, b2, b3, b4, b5, b6;  switch (Nb)    {      case 8:        a7 = State[7] ^ ExpandedKey[7];        a6 = State[6] ^ ExpandedKey[6];      case 6:        a5 = State[5] ^ ExpandedKey[5];        a4 = State[4] ^ ExpandedKey[4];      case 4:        a3 = State[3] ^ ExpandedKey[3];        a2 = State[2] ^ ExpandedKey[2];        a1 = State[1] ^ ExpandedKey[1];        a0 = State[0] ^ ExpandedKey[0];    }  for (keyptr = &ExpandedKey[Nb], round = 1; round < Nr; round++)    {      switch (Nb)        {          case 4:            b0 = Table0[(a0      ) & 0xff]               ^ Table1[(a1 >>  8) & 0xff]               ^ Table2[(a2 >> 16) & 0xff]               ^ Table3[(a3 >> 24)       ];                                       b1 = Table0[(a1      ) & 0xff]                       ^ Table1[(a2 >>  8) & 0xff]               ^ Table2[(a3 >> 16) & 0xff]               ^ Table3[(a0 >> 24)       ];                                      b2 = Table0[(a2      ) & 0xff]               ^ Table1[(a3 >>  8) & 0xff]               ^ Table2[(a0 >> 16) & 0xff]               ^ Table3[(a1 >> 24)       ];                                      a3 = Table0[(a3      ) & 0xff]               ^ Table1[(a0 >>  8) & 0xff]               ^ Table2[(a1 >> 16) & 0xff]               ^ Table3[(a2 >> 24)       ]               ^ keyptr[3];                        a0 = b0 ^ keyptr[0];            a1 = b1 ^ keyptr[1];            a2 = b2 ^ keyptr[2];            break;          case 6:            b0 = Table0[(a0      ) & 0xff]                ^ Table1[(a1 >>  8) & 0xff]               ^ Table2[(a2 >> 16) & 0xff]               ^ Table3[(a3 >> 24)       ];                                      b1 = Table0[(a1      ) & 0xff]                ^ Table1[(a2 >>  8) & 0xff]               ^ Table2[(a3 >> 16) & 0xff]               ^ Table3[(a4 >> 24)       ];                                      b2 = Table0[(a2      ) & 0xff]                ^ Table1[(a3 >>  8) & 0xff]               ^ Table2[(a4 >> 16) & 0xff]               ^ Table3[(a5 >> 24)       ];                                      b3 = Table0[(a3      ) & 0xff]                ^ Table1[(a4 >>  8) & 0xff]               ^ Table2[(a5 >> 16) & 0xff]               ^ Table3[(a0 >> 24)       ];                                      b4 = Table0[(a4      ) & 0xff]                ^ Table1[(a5 >>  8) & 0xff]               ^ Table2[(a0 >> 16) & 0xff]               ^ Table3[(a1 >> 24)       ];            a5 = Table0[(a5      ) & 0xff]                ^ Table1[(a0 >>  8) & 0xff]               ^ Table2[(a1 >> 16) & 0xff]               ^ Table3[(a2 >> 24)       ]               ^ keyptr[5];            a0 = b0 ^ keyptr[0];            a1 = b1 ^ keyptr[1];            a2 = b2 ^ keyptr[2];            a3 = b3 ^ keyptr[3];            a4 = b4 ^ keyptr[4];            break;          case 8:            /* col 0 */            b0 = Table0[(a0      ) & 0xff]                ^ Table1[(a1 >>  8) & 0xff]               ^ Table2[(a3 >> 16) & 0xff]               ^ Table3[(a4 >> 24)       ];                                                /* col 1 */                         b1 = Table0[(a1      ) & 0xff]                ^ Table1[(a2 >>  8) & 0xff]               ^ Table2[(a4 >> 16) & 0xff]               ^ Table3[(a5 >> 24)       ];                                                /* col 2 */                         b2 = Table0[(a2      ) & 0xff]                ^ Table1[(a3 >>  8) & 0xff]               ^ Table2[(a5 >> 16) & 0xff]               ^ Table3[(a6 >> 24)       ];                                                /* col 3 */                         b3 = Table0[(a3      ) & 0xff]                ^ Table1[(a4 >>  8) & 0xff]               ^ Table2[(a6 >> 16) & 0xff]               ^ Table3[(a7 >> 24)       ];                                                /* col 4 */                         b4 = Table0[(a4      ) & 0xff]                ^ Table1[(a5 >>  8) & 0xff]               ^ Table2[(a7 >> 16) & 0xff]               ^ Table3[(a0 >> 24)       ];                                                /* col 5 */                         b5 = Table0[(a5      ) & 0xff]                ^ Table1[(a6 >>  8) & 0xff]               ^ Table2[(a0 >> 16) & 0xff]               ^ Table3[(a1 >> 24)       ];                                                /* col 6 */                         b6 = Table0[(a6      ) & 0xff]                ^ Table1[(a7 >>  8) & 0xff]               ^ Table2[(a1 >> 16) & 0xff]               ^ Table3[(a2 >> 24)       ];                                                /* col 7 */                         a7 = Table0[(a7      ) & 0xff]                ^ Table1[(a0 >>  8) & 0xff]               ^ Table2[(a2 >> 16) & 0xff]               ^ Table3[(a3 >> 24)       ]               ^ keyptr[7];            a0 = b0 ^ keyptr[0];            a1 = b1 ^ keyptr[1];            a2 = b2 ^ keyptr[2];            a3 = b3 ^ keyptr[3];            a4 = b4 ^ keyptr[4];            a5 = b5 ^ keyptr[5];            a6 = b6 ^ keyptr[6];            break;        }          keyptr += Nb;    }  /* Final round */  switch (Nb)    {      case 4:        State[0] = (SBox[(a0      ) & 0xff]      )                 ^ (SBox[(a1 >>  8) & 0xff] <<  8)                 ^ (SBox[(a2 >> 16) & 0xff] << 16)                 ^ (SBox[(a3 >> 24)       ] << 24)                 ^ keyptr[0];                                     State[1] = (SBox[(a1      ) & 0xff]      )                 ^ (SBox[(a2 >>  8) & 0xff] <<  8)           

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -