📄 desmain.lst
字号:
C51 COMPILER V6.10 DESMAIN 09/19/2002 15:12:12 PAGE 1
C51 COMPILER V6.10, COMPILATION OF MODULE DESMAIN
OBJECT MODULE PLACED IN .\DesMain.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\DesMain.c LARGE OPTIMIZE(9,SPEED) DEBUG OBJECTEXTEND
stmt level source
1 /*--------------------------------------------------------------------------------
2 DES.C: DES Algorithm Program
3 --------------------------------------------------------------------------------*/
4 #include <string.h>
5 #define BYTE unsigned char
6 const BYTE code SBoxes[]={//BoxNr.: 2,1 4,3 6,5 8,7
7 0xF7,0xE5,0x34,0xB2,
8 0x02,0x5B,0x92,0xE8,
9 0x9C,0x88,0x01,0x5C,
10 0xAF,0xFD,0xEF,0x05,
11 0x64,0x06,0x9E,0x6F,
12 0x5B,0x31,0x45,0x93,
13 0x3A,0xDD,0x7B,0xAA,
14 0x9C,0xAA,0x86,0xF0,
15 0x1B,0x79,0x52,0x14,
16 0xE7,0x92,0xF8,0x2D,
17 0x46,0x13,0xCC,0xC9,
18 0x39,0xC4,0x23,0x56,
19 0xCD,0x9F,0x6D,0xD1,
20 0xB4,0xEC,0x3E,0x7E,
21 0xA0,0x24,0xA7,0x36,
22 0x4A,0x17,0xD0,0xA9,
23 0x82,0xB0,0x83,0x4D,
24 0x78,0x66,0x74,0xD2,
25 0xE5,0x4B,0xBA,0x93,
26 0x13,0x88,0x09,0x6F,
27 0xDF,0x6C,0x45,0xF0,
28 0x26,0xDF,0x1B,0x3C,
29 0x09,0x32,0xE0,0x05,
30 0xC5,0x45,0xBC,0xCA,
31 0x78,0xC7,0xF8,0x27,
32 0xD1,0x09,0xAD,0x8B,
33 0xB3,0xAE,0x2F,0x7E,
34 0x6E,0x73,0x5A,0xB1,
35 0x21,0x5A,0x16,0x8B,
36 0x8D,0xB0,0xC1,0x47,
37 0x5E,0xF1,0xD9,0xE8,
38 0xF0,0x2E,0x67,0x14,
39 0xC0,0xBB,0x57,0x8B,
40 0xBF,0xC8,0x2D,0x46,
41 0x35,0x24,0x6A,0x37,
42 0xDA,0x92,0xD6,0xF9,
43 0xF7,0x6C,0xE2,0x52,
44 0xC2,0x56,0x98,0x28,
45 0x69,0x83,0x0C,0x04,
46 0x05,0x3D,0x65,0xC7,
47 0x2E,0xD0,0x24,0xBD,
48 0x51,0x0B,0x43,0x7B,
49 0x83,0x4A,0xBF,0x6A,
50 0xEC,0xA7,0x80,0x90,
51 0x1B,0x06,0x9B,0xE8,
52 0x28,0xB1,0xF4,0x15,
53 0xDC,0x7F,0xC1,0x91,
54 0x76,0x44,0x1A,0x6C,
55 0xBF,0x1E,0xFD,0xF0,
C51 COMPILER V6.10 DESMAIN 09/19/2002 15:12:12 PAGE 2
56 0x13,0xF5,0xC1,0x8D,
57 0x06,0xE1,0x80,0xAC,
58 0x6D,0x2F,0x7F,0x3A,
59 0x44,0xF2,0x3E,0xC9,
60 0xF9,0x89,0xA7,0x52,
61 0x9A,0x5D,0xD9,0x7F,
62 0xA0,0xEA,0x02,0xA4,
63 0xE2,0xA9,0x43,0x1E,
64 0x84,0x60,0x3E,0xE1,
65 0x5D,0x37,0x75,0xD3,
66 0x37,0xDC,0xE9,0x0F,
67 0x78,0xC5,0xA8,0x25,
68 0x4E,0x1E,0x5B,0xBE,
69 0xA1,0x98,0x16,0x46,
70 0x9B,0x73,0xBC,0xD3};
71 BYTE DES(char mode, char data *text, char xdata *key)
72 {
73 1 BYTE BitMap[8];
74 1 BYTE CalcArea[16];
75 1 BYTE *ptr0,*ptr1,*ptr2;
76 1 BYTE R3,R4,R6,A,B,tmp;
77 1 //mode:B7&B6(00 ECB 01 CBC), B5(0 encrypt 1 decrypt),B4(0 crypt 1 MAC generation/verification)
78 1
79 1 //Check DES mode
80 1 if(mode&0x80)return 3;//Error: wrong mode
81 1 mode^=0x20;
82 1 //DES_:
83 1 for(R3=8,ptr1=key; R3!=0; R3--,ptr1++)
84 1 {
85 2 for(R4=7,ptr0=BitMap,A=*ptr1; R4!=0; R4--,ptr0++)
86 2 {
87 3 (*ptr0)<<=1;
88 3 if(A&0x80)(*ptr0)++;
89 3 A<<=1;
90 3 }
91 2 }
92 1 A=BitMap[4];BitMap[4]=BitMap[6];BitMap[6]=A;
93 1 // memcpy(BitMap,"\x0f\x33\x55\x00\x55\x33\x0f\x00",8);
94 1 //SetKeyNxt:
95 1 for(R3=7,ptr1=BitMap,ptr0=CalcArea; R3!=0; R3--,ptr1++)
96 1 {
97 2 A=*ptr1;
98 2 for(R4=R3;R4!=0;R4--,ptr0++)
99 2 {
100 3 tmp=(*ptr0);
101 3 (*ptr0)=(tmp>>2)+(tmp<<7);
102 3 if(A&0x01)
103 3 (*ptr0)+=0x40;
104 3 A>>=1;
105 3 }
106 2 ptr0=CalcArea;
107 2 for(R4=8-R3;R4!=0;R4--,ptr0++)
108 2 {
109 3 tmp=(*ptr0);
110 3 (*ptr0)=(tmp>>2)+(tmp<<7);
111 3 if(A&0x01)
112 3 (*ptr0)+=0x40;
113 3 A>>=1;
114 3 }
115 2 }
116 1 /***************Function DES ***************/
117 1 //DesAction://InitPerm:
C51 COMPILER V6.10 DESMAIN 09/19/2002 15:12:12 PAGE 3
118 1 for(R6=8,ptr1=text;R6!=0;R6--,ptr1++)
119 1 {
120 2 A=*ptr1;//permute byte into bitmap area
121 2 if(R6==1)break;
122 2 for(R4=8,ptr0=BitMap;R4!=0;R4--,ptr0++)
123 2 {
124 3 (*ptr0)<<=1;
125 3 if(A&0x80)(*ptr0)++;
126 3 A<<=1;
127 3 }
128 2 }
129 1 //InitEnd: ;permute last byte
130 1 A=(A>>6)+(A<<2);
131 1 for(R4=8,ptr0=BitMap;R4!=0;R4--,ptr0++)
132 1 {
133 2 if(A&0x80)(*ptr0)|=0x80;else (*ptr0)&=~0x80;
134 2 A<<=1;
135 2 }
136 1 //load permuted input in calculation area
137 1 for(R4=4,ptr1=CalcArea+15,ptr0=BitMap+1;R4!=0;R4--,ptr1--,ptr0+=2)
138 1 *ptr1=*ptr0;
139 1 for(R4=4,ptr0=BitMap;R4!=0;R4--,ptr1--,ptr0+=2)
140 1 *ptr1=*ptr0;
141 1
142 1 //16 rounds DES operation //OneRound:
143 1 for(R3=16,ptr2=CalcArea+8;R3!=0;R3--)
144 1 {
145 2 B=(R3-1)%7;
146 2 if(mode&0x30) //Decode~, BuildMac//EncShift2
147 2 {
148 3 for( R6=( B&& (R3!=16) )?2:1; R6!=0; R6--)
149 3 {
150 4 ptr1=CalcArea+6;
151 4 A=(*ptr1);
152 4 tmp=CalcArea[0];
153 4 (*ptr1)=(tmp>>2)+(tmp<<6);
154 4 ptr1--;
155 4 for(R4=5; R4!=0; R4--, ptr1--)
156 4 {
157 5 tmp=(*ptr1);
158 5 (*ptr1)=A;
159 5 A=tmp;
160 5 }
161 4 (*ptr1)=A;
162 4 }
163 3 }//Decode~, BuildMac
164 2 //RoundKey:
165 2 /*Permutation 36 5 27 61 18 54 9 47 = D6, C6
166 2 44 13 35 6 26 62 17 55 = D5, C5
167 2 52 21 43 14 34 7 25 63 = D4, C4
168 2 60 29 51 22 42 15 33 4 = D3, C3
169 2 3 37 59 30 50 23 41 12 = D2, C2
170 2 11 45 2 38 58 31 49 20 = D1, C1
171 2 19 53 10 46 1 39 57 28 = D0, C0
172 2 */
173 2 A=CalcArea[0];
174 2 if(A&0x80)BitMap[7]|=0x01;else BitMap[7]&=~0x01;
175 2 if(A&0x40)BitMap[7]|=0x04;else BitMap[7]&=~0x04;
176 2 if(A&0x20){
177 3 BitMap[1]|=0x10;BitMap[2]|=0x20;BitMap[7]|=0x02;
178 3 }else{
179 3 BitMap[1]&=~0x10;BitMap[2]&=~0x20;BitMap[7]&=~0x02;
C51 COMPILER V6.10 DESMAIN 09/19/2002 15:12:12 PAGE 4
180 3 }
181 2 if(A&0x10){
182 3 BitMap[0]|=0x20;BitMap[1]|=0x02;BitMap[2]|=0x10;BitMap[6]|=0x01;
183 3 }else{
184 3 BitMap[0]&=~0x20;BitMap[1]&=~0x02;BitMap[2]&=~0x10;BitMap[6]&=~0x01;
185 3 }
186 2 if(A&0x08){
187 3 BitMap[0]|=0x10;BitMap[2]|=0x08;
188 3 }else{
189 3 BitMap[0]&=~0x10;BitMap[2]&=~0x08;
190 3 }
191 2 if(A&0x04){
192 3 BitMap[1]|=0x01;BitMap[6]|=0x20;BitMap[7]|=0x80;
193 3 }else{
194 3 BitMap[1]&=~0x01;BitMap[6]&=~0x20;BitMap[7]&=~0x80;
195 3 }
196 2 if(A&0x02){
197 3 BitMap[0]|=0x04;BitMap[6]|=0x10;
198 3 }else{
199 3 BitMap[0]&=~0x04;BitMap[6]&=~0x10;
200 3 }
201 2 if(A&0x01)BitMap[6]|=0x08;else BitMap[6]&=~0x08;
202 2 // memcpy(BitMap,"\x9c\x2d\xce\x80\x87\x99\x72\xe5",8);
203 2 A=CalcArea[1];
204 2 if(A&0x80){
205 3 BitMap[2]|=0x40;BitMap[3]|=0x02;BitMap[5]|=0x01;
206 3 }else{
207 3 BitMap[2]&=~0x40;BitMap[3]&=~0x02;BitMap[5]&=~0x01;
208 3 }
209 2 if(A&0x40)BitMap[4]|=0x04;else BitMap[4]&=~0x04;
210 2 if(A&0x20){
211 3 BitMap[3]|=0x04;BitMap[5]|=0x02;
212 3 }else{
213 3 BitMap[3]&=~0x04;BitMap[5]&=~0x02;
214 3 }
215 2 if(A&0x10){
216 3 BitMap[3]|=0x01;BitMap[5]|=0x08;
217 3 }else{
218 3 BitMap[3]&=~0x01; BitMap[5]&=~0x08;
219 3 }
220 2 if(A&0x04)BitMap[5]|=0x40;else BitMap[5]&=~0x40;
221 2 if(A&0x02){
222 3 BitMap[3]|=0x80;BitMap[4]|=0x20;
223 3 }else{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -