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

📄 tdes_fips81.lst

📁 AT91SAM7X256芯片底层驱动源码。在IAR430环境下编译
💻 LST
📖 第 1 页 / 共 5 页
字号:

   \                                 In segment CODE, align 4, keep-with-next
     40          void AT91F_TDES_SetKeys2(const unsigned int array[][12],unsigned int index)
     41          {
   \                     AT91F_TDES_SetKeys2:
   \   00000000   30B5               PUSH        {R4,R5,LR}
     42          	unsigned char i;
     43          	
     44          	for (i=0;i<2;i++)
   \   00000002   0022               MOV         R2,#+0
   \   00000004   064C               LDR         R4,??AT91F_TDES_SetKeys2_0  ;; 0xfffa8028
     45          		AT91F_TDES_SetCryptoKey2(AT91C_BASE_TDES,i,array[index][i+KEY2_OFFSET]);
   \                     ??AT91F_TDES_SetKeys2_1:
   \   00000006   9300               LSL         R3,R2,#+0x2
   \   00000008   3025               MOV         R5,#+0x30
   \   0000000A   4D43               MUL         R5,R1
   \   0000000C   4519               ADD         R5,R0,R5
   \   0000000E   0835               ADD         R5,#+0x8
   \   00000010   ED58               LDR         R5,[R5, R3]
   \   00000012   E550               STR         R5,[R4, R3]
   \   00000014   521C               ADD         R2,R2,#+0x1
   \   00000016   1306               LSL         R3,R2,#+0x18
   \   00000018   1B0E               LSR         R3,R3,#+0x18
   \   0000001A   022B               CMP         R3,#+0x2
   \   0000001C   F3D3               BCC         ??AT91F_TDES_SetKeys2_1
     46          }
   \   0000001E   30BD               POP         {R4,R5,PC}         ;; return
   \                     ??AT91F_TDES_SetKeys2_0:
   \   00000020   2880FAFF           DC32        0xfffa8028
     47          
     48          //*----------------------------------------------------------------------------
     49          //* \fn    AT91F_TDES_SetKeys3
     50          //* \brief
     51          //*----------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     52          void AT91F_TDES_SetKeys3(const unsigned int array[][12],unsigned int index)
     53          {
   \                     AT91F_TDES_SetKeys3:
   \   00000000   30B5               PUSH        {R4,R5,LR}
     54          	unsigned char i;
     55          	
     56          	for (i=0;i<2;i++)
   \   00000002   0022               MOV         R2,#+0
   \   00000004   064C               LDR         R4,??AT91F_TDES_SetKeys3_0  ;; 0xfffa8030
     57          		AT91F_TDES_SetCryptoKey3(AT91C_BASE_TDES,i,array[index][i+KEY3_OFFSET]);
   \                     ??AT91F_TDES_SetKeys3_1:
   \   00000006   9300               LSL         R3,R2,#+0x2
   \   00000008   3025               MOV         R5,#+0x30
   \   0000000A   4D43               MUL         R5,R1
   \   0000000C   4519               ADD         R5,R0,R5
   \   0000000E   1035               ADD         R5,#+0x10
   \   00000010   ED58               LDR         R5,[R5, R3]
   \   00000012   E550               STR         R5,[R4, R3]
   \   00000014   521C               ADD         R2,R2,#+0x1
   \   00000016   1306               LSL         R3,R2,#+0x18
   \   00000018   1B0E               LSR         R3,R3,#+0x18
   \   0000001A   022B               CMP         R3,#+0x2
   \   0000001C   F3D3               BCC         ??AT91F_TDES_SetKeys3_1
     58          }
   \   0000001E   30BD               POP         {R4,R5,PC}         ;; return
   \                     ??AT91F_TDES_SetKeys3_0:
   \   00000020   3080FAFF           DC32        0xfffa8030
     59          
     60          //*----------------------------------------------------------------------------
     61          //* \fn    AT91F_TDES_SetInitializationVectors
     62          //* \brief
     63          //*----------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     64          void AT91F_TDES_SetInitializationVectors(const unsigned int array[][12],unsigned int index)
     65          {
   \                     AT91F_TDES_SetInitializationVectors:
   \   00000000   30B5               PUSH        {R4,R5,LR}
     66          	unsigned char i;
     67          	
     68          	for (i=0;i<2;i++)
   \   00000002   0022               MOV         R2,#+0
   \   00000004   064C               LDR         R4,??AT91F_TDES_SetInitializationVectors_0  ;; 0xfffa8060
     69          		AT91F_TDES_SetInitializationVector(AT91C_BASE_TDES,i,array[index][i+INIT_OFFSET]);
   \                     ??AT91F_TDES_SetInitializationVectors_1:
   \   00000006   9300               LSL         R3,R2,#+0x2
   \   00000008   3025               MOV         R5,#+0x30
   \   0000000A   4D43               MUL         R5,R1
   \   0000000C   4519               ADD         R5,R0,R5
   \   0000000E   2835               ADD         R5,#+0x28
   \   00000010   ED58               LDR         R5,[R5, R3]
   \   00000012   E550               STR         R5,[R4, R3]
   \   00000014   521C               ADD         R2,R2,#+0x1
   \   00000016   1306               LSL         R3,R2,#+0x18
   \   00000018   1B0E               LSR         R3,R3,#+0x18
   \   0000001A   022B               CMP         R3,#+0x2
   \   0000001C   F3D3               BCC         ??AT91F_TDES_SetInitializationVectors_1
     70          }
   \   0000001E   30BD               POP         {R4,R5,PC}         ;; return
   \                     ??AT91F_TDES_SetInitializationVectors_0:
   \   00000020   6080FAFF           DC32        0xfffa8060
     71          
     72          //*----------------------------------------------------------------------------
     73          //* \fn    AT91F_AES_SetPlainText
     74          //* \brief
     75          //*----------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     76          void AT91F_AES_SetPlainText(const unsigned int array[][12],unsigned int index)
     77          {
   \                     AT91F_AES_SetPlainText:
   \   00000000   30B5               PUSH        {R4,R5,LR}
     78          	unsigned char i;
     79          	
     80          	for (i=0;i<2;i++)
   \   00000002   0022               MOV         R2,#+0
   \   00000004   ....               LDR         R4,??DataTable13   ;; 0xfffa8040
     81          		AT91F_TDES_InputData(AT91C_BASE_TDES,i,array[index][i+IN_OFFSET]);
   \                     ??AT91F_AES_SetPlainText_0:
   \   00000006   9300               LSL         R3,R2,#+0x2
   \   00000008   3025               MOV         R5,#+0x30
   \   0000000A   4D43               MUL         R5,R1
   \   0000000C   4519               ADD         R5,R0,R5
   \   0000000E   1835               ADD         R5,#+0x18
   \   00000010   ED58               LDR         R5,[R5, R3]
   \   00000012   E550               STR         R5,[R4, R3]
   \   00000014   521C               ADD         R2,R2,#+0x1
   \   00000016   1306               LSL         R3,R2,#+0x18
   \   00000018   1B0E               LSR         R3,R3,#+0x18
   \   0000001A   022B               CMP         R3,#+0x2
   \   0000001C   F3D3               BCC         ??AT91F_AES_SetPlainText_0
     82          }
   \   0000001E   30BD               POP         {R4,R5,PC}         ;; return
     83          
     84          //*----------------------------------------------------------------------------
     85          //* \fn    AT91F_TDES_Manual_Auto_Mode
     86          //* \brief
     87          //*----------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
     88          unsigned int AT91F_TDES_Manual_Auto_Mode(unsigned int mode,unsigned int startmode,unsigned int cipher,unsigned int index)
     89          {
   \                     AT91F_TDES_Manual_Auto_Mode:
   \   00000000   F2B5               PUSH        {R1,R4-R7,LR}
   \   00000002   061C               MOV         R6,R0
   \   00000004   1C1C               MOV         R4,R3
   \   00000006   ....               LDR         R0,??DataTable18   ;; 0xfffa8000
   \   00000008   8021               MOV         R1,#+0x80
   \   0000000A   4900               LSL         R1,R1,#+0x1        ;; #+0x100
   \   0000000C   0160               STR         R1,[R0, #+0]
     90            unsigned int out1,out2;
     91            unsigned char i;
     92          
     93            AT91F_TDES_SoftReset(AT91C_BASE_TDES);
     94            AT91F_TDES_CfgModeReg(AT91C_BASE_TDES,cipher|startmode|mode);
   \   0000000E   ....               LDR         R0,??DataTable19   ;; 0xfffa8004
   \   00000010   0099               LDR         R1,[SP, #+0]
   \   00000012   1143               ORR         R1,R2
   \   00000014   3143               ORR         R1,R6
   \   00000016   0160               STR         R1,[R0, #+0]
     95          
     96            // Set Keys (same for En/Dec)
     97            AT91F_TDES_SetKeys1(tdes_fips81,index);
   \   00000018   ....               LDR         R5,??DataTable24   ;; tdes_fips81
   \   0000001A   191C               MOV         R1,R3
   \   0000001C   281C               MOV         R0,R5
   \   0000001E   ........           BL          AT91F_TDES_SetKeys1
     98            AT91F_TDES_SetKeys2(tdes_fips81,index);
   \   00000022   211C               MOV         R1,R4
   \   00000024   281C               MOV         R0,R5
   \   00000026   ........           BL          AT91F_TDES_SetKeys2
     99            AT91F_TDES_SetKeys3(tdes_fips81,index);
   \   0000002A   211C               MOV         R1,R4
   \   0000002C   281C               MOV         R0,R5
   \   0000002E   ........           BL          AT91F_TDES_SetKeys3
    100          
    101            // Set Init Vector for Chained Modes
    102            if(mode != AT91C_AES_OPMOD_ECB)
   \   00000032   002E               CMP         R6,#+0
   \   00000034   03D0               BEQ         ??AT91F_TDES_Manual_Auto_Mode_0
    103              AT91F_TDES_SetInitializationVectors(tdes_fips81,index);
   \   00000036   211C               MOV         R1,R4
   \   00000038   281C               MOV         R0,R5
   \   0000003A   ........           BL          AT91F_TDES_SetInitializationVectors
    104          
    105            for(i=0;i<3;i++,index++) {
   \                     ??AT91F_TDES_Manual_Auto_Mode_0:
   \   0000003E   0026               MOV         R6,#+0
   \   00000040   ....               LDR         R7,??DataTable25   ;; test
    106          
    107              // DATRDY flag already cleared (output data reg read before)
    108              test = AT91C_TEST_NOK;
   \                     ??AT91F_TDES_Manual_Auto_Mode_1:
   \   00000042   0020               MOV         R0,#+0
   \   00000044   3870               STRB        R0,[R7, #+0]
    109              AT91F_TDES_EnableIt(AT91C_BASE_TDES,AT91C_TDES_DATRDY);
   \   00000046   ....               LDR         R0,??DataTable26   ;; 0xfffa8010
   \   00000048   0121               MOV         R1,#+0x1
   \   0000004A   0160               STR         R1,[R0, #+0]
    110          
    111              // Start Processing (for AUTO Mode)
    112              // 2 accesses required for 64-bit modes to Start Processing (for AUTO Mode)
    113              AT91F_AES_SetPlainText(tdes_fips81,index);
   \   0000004C   211C               MOV         R1,R4
   \   0000004E   281C               MOV         R0,R5
   \   00000050   ........           BL          AT91F_AES_SetPlainText
    114          
    115              // Start Processing (for MANUAL Mode)
    116              if( !(startmode & AT91C_TDES_SMOD_AUTO) )
   \   00000054   0098               LDR         R0,[SP, #+0]
   \   00000056   8021               MOV         R1,#+0x80
   \   00000058   4900               LSL         R1,R1,#+0x1        ;; #+0x100
   \   0000005A   0842               TST         R0,R1
   \   0000005C   02D1               BNE         ??AT91F_TDES_Manual_Auto_Mode_2
    117                AT91F_TDES_StartProcessing(AT91C_BASE_TDES);
   \   0000005E   ....               LDR         R0,??DataTable18   ;; 0xfffa8000
   \   00000060   0121               MOV         R1,#+0x1
   \   00000062   0160               STR         R1,[R0, #+0]
    118          
    119              // Wait 4 end of processing
    120              while(test != AT91C_TEST_OK);
   \                     ??AT91F_TDES_Manual_Auto_Mode_2:
   \   00000064   3878               LDRB        R0,[R7, #+0]
   \   00000066   0128               CMP         R0,#+0x1
   \   00000068   FCD1               BNE         ??AT91F_TDES_Manual_Auto_Mode_2
    121          
    122              // Retrieve Output DATA => Reset DATRDY Status Flag
    123              out1 = AT91F_TDES_GetOutputData(AT91C_BASE_TDES,0);
   \   0000006A   ....               LDR         R0,??DataTable15   ;; 0xfffa8050
   \   0000006C   0068               LDR         R0,[R0, #+0]
    124              out2 = AT91F_TDES_GetOutputData(AT91C_BASE_TDES,1);
   \   0000006E   0A49               LDR         R1,??AT91F_TDES_Manual_Auto_Mode_3  ;; 0xfffa8054
   \   00000070   0A68               LDR         R2,[R1, #+0]
    125          
    126              // Comparison Test
    127              if( (out1 != tdes_fips81[index][0+OUT_OFFSET]) || (out2 != tdes_fips81[index][1+OUT_OFFSET]) ) {

⌨️ 快捷键说明

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