?? aes_sp800-38a.lst
字號:
\ 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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -