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

📄 aes_sp800-38a.lst

📁 本程序为AT91SAM7X256-BasicAES-IAR430A-1_2
💻 LST
📖 第 1 页 / 共 5 页
字号:

   \                                 In segment CODE, align 4, keep-with-next
     40          void AT91F_AES_SetInitializationVectors(const unsigned int array[][16],unsigned int index)
     41          {
   \                     AT91F_AES_SetInitializationVectors:
   \   00000000   30B5               PUSH        {R4,R5,LR}
     42            unsigned char i;
     43          
     44            for (i=0;i<4;i++)
   \   00000002   0022               MOV         R2,#+0
   \   00000004   064C               LDR         R4,??AT91F_AES_SetInitializationVectors_0  ;; 0xfffa4060
     45              AT91F_AES_SetInitializationVector(AT91C_BASE_AES,i,array[index][i+INIT_OFFSET]);
   \                     ??AT91F_AES_SetInitializationVectors_1:
   \   00000006   9300               LSL         R3,R2,#+0x2
   \   00000008   8D01               LSL         R5,R1,#+0x6
   \   0000000A   4519               ADD         R5,R0,R5
   \   0000000C   3035               ADD         R5,#+0x30
   \   0000000E   ED58               LDR         R5,[R5, R3]
   \   00000010   E550               STR         R5,[R4, R3]
   \   00000012   521C               ADD         R2,R2,#+0x1
   \   00000014   1306               LSL         R3,R2,#+0x18
   \   00000016   1B0E               LSR         R3,R3,#+0x18
   \   00000018   042B               CMP         R3,#+0x4
   \   0000001A   F4D3               BCC         ??AT91F_AES_SetInitializationVectors_1
     46          }
   \   0000001C   30BD               POP         {R4,R5,PC}         ;; return
   \   0000001E   C046               NOP         
   \                     ??AT91F_AES_SetInitializationVectors_0:
   \   00000020   6040FAFF           DC32        0xfffa4060
     47          
     48          //*----------------------------------------------------------------------------
     49          //* \fn    AT91F_AES_SetPlainText
     50          //* \brief
     51          //*----------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     52          void AT91F_AES_SetPlainText(const unsigned int array[][16],unsigned int index)
     53          {
   \                     AT91F_AES_SetPlainText:
   \   00000000   30B5               PUSH        {R4,R5,LR}
     54            unsigned char i;
     55          
     56            for (i=0;i<4;i++)
   \   00000002   0022               MOV         R2,#+0
   \   00000004   ....               LDR         R4,??DataTable17   ;; 0xfffa4040
     57              AT91F_AES_InputData(AT91C_BASE_AES,i,array[index][i+IN_OFFSET]);
   \                     ??AT91F_AES_SetPlainText_0:
   \   00000006   9300               LSL         R3,R2,#+0x2
   \   00000008   8D01               LSL         R5,R1,#+0x6
   \   0000000A   4519               ADD         R5,R0,R5
   \   0000000C   1035               ADD         R5,#+0x10
   \   0000000E   ED58               LDR         R5,[R5, R3]
   \   00000010   E550               STR         R5,[R4, R3]
   \   00000012   521C               ADD         R2,R2,#+0x1
   \   00000014   1306               LSL         R3,R2,#+0x18
   \   00000016   1B0E               LSR         R3,R3,#+0x18
   \   00000018   042B               CMP         R3,#+0x4
   \   0000001A   F4D3               BCC         ??AT91F_AES_SetPlainText_0
     58          }
   \   0000001C   30BD               POP         {R4,R5,PC}         ;; return
     59          
     60          //*----------------------------------------------------------------------------
     61          //* \fn    AT91F_AES_Manual_Auto_Mode
     62          //* \brief
     63          //*----------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     64          unsigned int AT91F_AES_Manual_Auto_Mode(unsigned int mode,unsigned int startmode,unsigned int cipher,unsigned int index)
     65          {
   \                     AT91F_AES_Manual_Auto_Mode:
   \   00000000   F3B5               PUSH        {R0,R1,R4-R7,LR}
   \   00000002   061C               MOV         R6,R0
   \   00000004   1C1C               MOV         R4,R3
   \   00000006   ....               LDR         R0,??DataTable23   ;; 0xfffa4000
   \   00000008   8021               MOV         R1,#+0x80
   \   0000000A   4900               LSL         R1,R1,#+0x1        ;; #+0x100
   \   0000000C   0160               STR         R1,[R0, #+0]
     66            unsigned int out1,out2,out3,out4;
     67            unsigned char i;
     68          
     69            AT91F_AES_SoftReset(AT91C_BASE_AES);
     70            AT91F_AES_CfgModeReg(AT91C_BASE_AES,cipher|startmode|mode);
   \   0000000E   ....               LDR         R0,??DataTable24   ;; 0xfffa4004
   \   00000010   0199               LDR         R1,[SP, #+0x4]
   \   00000012   1143               ORR         R1,R2
   \   00000014   3143               ORR         R1,R6
   \   00000016   0160               STR         R1,[R0, #+0]
     71          
     72            // Set Key
     73            AT91F_AES_SetKeys(aes_sp800_38a,index);
   \   00000018   ....               LDR         R5,??DataTable27   ;; aes_sp800_38a
   \   0000001A   191C               MOV         R1,R3
   \   0000001C   281C               MOV         R0,R5
   \   0000001E   ........           BL          AT91F_AES_SetKeys
     74          
     75            // Set Init Vector for Chained Modes
     76            if(mode != AT91C_AES_OPMOD_ECB)
   \   00000022   002E               CMP         R6,#+0
   \   00000024   03D0               BEQ         ??AT91F_AES_Manual_Auto_Mode_0
     77              AT91F_AES_SetInitializationVectors(aes_sp800_38a,index);
   \   00000026   211C               MOV         R1,R4
   \   00000028   281C               MOV         R0,R5
   \   0000002A   ........           BL          AT91F_AES_SetInitializationVectors
     78          
     79            for(i=0;i<4;i++,index++) {
   \                     ??AT91F_AES_Manual_Auto_Mode_0:
   \   0000002E   0026               MOV         R6,#+0
     80          
     81              // DATRDY flag already cleared (output data reg read before)
     82              test = AT91C_TEST_NOK;
   \                     ??AT91F_AES_Manual_Auto_Mode_1:
   \   00000030   ....               LDR         R0,??DataTable28   ;; test
   \   00000032   0021               MOV         R1,#+0
   \   00000034   0170               STRB        R1,[R0, #+0]
     83              AT91F_AES_EnableIt(AT91C_BASE_AES,AT91C_AES_DATRDY);
   \   00000036   ....               LDR         R0,??DataTable29   ;; 0xfffa4010
   \   00000038   0121               MOV         R1,#+0x1
   \   0000003A   0160               STR         R1,[R0, #+0]
     84          
     85              // Start Processing (for AUTO Mode)
     86              // 4 accesses required for 128-bit modes to Start Processing (for AUTO Mode)
     87              AT91F_AES_SetPlainText(aes_sp800_38a,index);
   \   0000003C   211C               MOV         R1,R4
   \   0000003E   281C               MOV         R0,R5
   \   00000040   ........           BL          AT91F_AES_SetPlainText
     88          
     89              // Start Processing (for MANUAL Mode)
     90              if( !(startmode & AT91C_AES_SMOD_AUTO) )
   \   00000044   0198               LDR         R0,[SP, #+0x4]
   \   00000046   8021               MOV         R1,#+0x80
   \   00000048   4900               LSL         R1,R1,#+0x1        ;; #+0x100
   \   0000004A   0842               TST         R0,R1
   \   0000004C   02D1               BNE         ??AT91F_AES_Manual_Auto_Mode_2
     91                AT91F_AES_StartProcessing(AT91C_BASE_AES);
   \   0000004E   ....               LDR         R0,??DataTable23   ;; 0xfffa4000
   \   00000050   0121               MOV         R1,#+0x1
   \   00000052   0160               STR         R1,[R0, #+0]
     92          
     93              // Wait 4 end of processing
     94              while(test != AT91C_TEST_OK);
   \                     ??AT91F_AES_Manual_Auto_Mode_2:
   \   00000054   ....               LDR         R0,??DataTable28   ;; test
   \   00000056   0078               LDRB        R0,[R0, #+0]
   \   00000058   0128               CMP         R0,#+0x1
   \   0000005A   FBD1               BNE         ??AT91F_AES_Manual_Auto_Mode_2
     95          
     96              // Retrieve Output DATA => Reset DATRDY Status Flag
     97              out1 = AT91F_AES_GetOutputData(AT91C_BASE_AES,0);
   \   0000005C   ....               LDR         R0,??DataTable19   ;; 0xfffa4050
   \   0000005E   0268               LDR         R2,[R0, #+0]
     98              out2 = AT91F_AES_GetOutputData(AT91C_BASE_AES,1);
   \   00000060   1648               LDR         R0,??AT91F_AES_Manual_Auto_Mode_3  ;; 0xfffa4054
   \   00000062   0068               LDR         R0,[R0, #+0]
   \   00000064   0090               STR         R0,[SP, #+0]
     99              out3 = AT91F_AES_GetOutputData(AT91C_BASE_AES,2);
   \   00000066   1648               LDR         R0,??AT91F_AES_Manual_Auto_Mode_3+0x4  ;; 0xfffa4058
   \   00000068   0168               LDR         R1,[R0, #+0]
    100              out4 = AT91F_AES_GetOutputData(AT91C_BASE_AES,3);		
   \   0000006A   1648               LDR         R0,??AT91F_AES_Manual_Auto_Mode_3+0x8  ;; 0xfffa405c
   \   0000006C   0068               LDR         R0,[R0, #+0]
    101          
    102              // Comparison Test
    103              if( (out1 != aes_sp800_38a[index][0+OUT_OFFSET]) || (out2 != aes_sp800_38a[index][1+OUT_OFFSET])
    104                 || (out3 != aes_sp800_38a[index][2+OUT_OFFSET]) || (out4 != aes_sp800_38a[index][3+OUT_OFFSET]) ) {
   \   0000006E   A301               LSL         R3,R4,#+0x6
   \   00000070   2F1C               MOV         R7,R5
   \   00000072   2037               ADD         R7,#+0x20
   \   00000074   FF58               LDR         R7,[R7, R3]
   \   00000076   BA42               CMP         R2,R7
   \   00000078   0AD1               BNE         ??AT91F_AES_Manual_Auto_Mode_4
   \   0000007A   EA18               ADD         R2,R5,R3
   \   0000007C   009B               LDR         R3,[SP, #+0]
   \   0000007E   576A               LDR         R7,[R2, #+0x24]
   \   00000080   BB42               CMP         R3,R7
   \   00000082   05D1               BNE         ??AT91F_AES_Manual_Auto_Mode_4
   \   00000084   936A               LDR         R3,[R2, #+0x28]
   \   00000086   9942               CMP         R1,R3
   \   00000088   02D1               BNE         ??AT91F_AES_Manual_Auto_Mode_4
   \   0000008A   D16A               LDR         R1,[R2, #+0x2C]
   \   0000008C   8842               CMP         R0,R1
   \   0000008E   07D0               BEQ         ??AT91F_AES_Manual_Auto_Mode_5
    105                   TRACE_ERROR("........ => FAILED\n\r");
   \                     ??AT91F_AES_Manual_Auto_Mode_4:
   \   00000090   9820               MOV         R0,#+0x98
   \   00000092   4001               LSL         R0,R0,#+0x5        ;; #+0x1300
   \   00000094   2918               ADD         R1,R5,R0
   \   00000096   ....               LDR         R0,??DataTable30   ;; _Stdout
   \   00000098   ........           _BLF        fprintf,fprintf??rT
    106                   return FALSE;
   \   0000009C   0020               MOV         R0,#+0
   \   0000009E   FCBD               POP         {R2-R7,PC}         ;; return
    107                 }
    108            }		
   \                     ??AT91F_AES_Manual_Auto_Mode_5:
   \   000000A0   761C               ADD         R6,R6,#+0x1
   \   000000A2   641C               ADD         R4,R4,#+0x1
   \   000000A4   3006               LSL         R0,R6,#+0x18
   \   000000A6   000E               LSR         R0,R0,#+0x18
   \   000000A8   0428               CMP         R0,#+0x4
   \   000000AA   C1D3               BCC         ??AT91F_AES_Manual_Auto_Mode_1
    109          
    110            TRACE_INFO("........ => OK\n\r");
   \   000000AC   ....               LDR         R0,??DataTable21   ;; 0x1318
   \   000000AE   2918               ADD         R1,R5,R0
   \   000000B0   ....               LDR         R0,??DataTable30   ;; _Stdout
   \   000000B2   ........           _BLF        fprintf,fprintf??rT
    111            return TRUE;
   \   000000B6   0120               MOV         R0,#+0x1
   \   000000B8   FCBD               POP         {R2-R7,PC}         ;; return
   \   000000BA   C046               NOP         
   \                     ??AT91F_AES_Manual_Auto_Mode_3:
   \   000000BC   5440FAFF           DC32        0xfffa4054
   \   000000C0   5840FAFF           DC32        0xfffa4058
   \   000000C4   5C40FAFF           DC32        0xfffa405c
    112          }
    113          
    114          //*----------------------------------------------------------------------------
    115          //* \fn    AT91C_AES_Manual_Auto_Mode_CFB8
    116          //* \brief
    117          //*----------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
    118          unsigned int AT91C_AES_Manual_Auto_Mode_CFB8(unsigned int startmode,unsigned int cipher,unsigned int index)
    119          {
   \                     AT91C_AES_Manual_Auto_Mode_CFB8:
   \   00000000   F1B5               PUSH        {R0,R4-R7,LR}
   \   00000002   141C               MOV         R4,R2
   \   00000004   ....               LDR         R0,??DataTable23   ;; 0xfffa4000
   \   00000006   8022               MOV         R2,#+0x80
   \   00000008   5200               LSL         R2,R2,#+0x1        ;; #+0x100
   \   0000000A   0260               STR         R2,[R0, #+0]
    120            unsigned int out1;
    121            unsigned char i;
    122          
    123            AT91F_AES_SoftReset(AT91C_BASE_AES);
    124            AT91F_AES_CfgModeReg(AT91C_BASE_AES,cipher|startmode|AT91C_AES_OPMOD_CFB|AT91C_AES_CFBS_8_BIT);
   \   0000000C   ....               LDR         R0,??DataTable24   ;; 0xfffa4004
   \   0000000E   009A               LDR         R2,[SP, #+0]
   \   00000010   0A43               ORR         R2,R1
   \   00000012   8621               MOV         R1,#+0x86
   \   00000014   C902               LSL         R1,R1,#+0xB        ;; #+0x43000
   \   00000016   1143               ORR         R1,R2
   \   00000018   0160               STR         R1,[R0, #+0]
    125          
    126            // Set Key
    127            AT91F_AES_SetKeys(aes_sp800_38a,index);
   \   0000001A   ....               LDR         R5,??DataTable27   ;; aes_sp800_38a
   \   0000001C   211C               MOV         R1,R4
   \   0000001E   281C               MOV         R0,R5
   \   00000020   ........           BL          AT91F_AES_SetKeys
    128          
    129            // Set Initialization Vector
    130            AT91F_AES_SetInitializationVectors(aes_sp800_38a,index);
   \   00000024   211C               MOV         R1,R4
   \   00000026   281C               MOV         R0,R5
   \   00000028   ........           BL          AT91F_AES_SetInitializationVectors
    13

⌨️ 快捷键说明

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