📄 tdes_fips81.lst
字号:
\ 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 + -