📄 mydes.lst
字号:
240 0x40000000L, 0x02080000L, 0x42000100L, 0x40080100L,
C51 COMPILER V7.02a MYDES 07/16/2003 14:05:28 PAGE 5
241 0x02000100L, 0x40000000L, 0x42080000L, 0x02080100L,
242 0x40080100L, 0x00000100L, 0x02000000L, 0x42080000L,
243 0x42080100L, 0x00080100L, 0x42000000L, 0x42080100L,
244 0x02080000L, 0x00000000L, 0x40080000L, 0x42000000L,
245 0x00080100L, 0x02000100L, 0x40000100L, 0x00080000L,
246 0x00000000L, 0x40080000L, 0x02080100L, 0x40000100L };
247
248 static unsigned long code SP6[64] = {
249 0x20000010L, 0x20400000L, 0x00004000L, 0x20404010L,
250 0x20400000L, 0x00000010L, 0x20404010L, 0x00400000L,
251 0x20004000L, 0x00404010L, 0x00400000L, 0x20000010L,
252 0x00400010L, 0x20004000L, 0x20000000L, 0x00004010L,
253 0x00000000L, 0x00400010L, 0x20004010L, 0x00004000L,
254 0x00404000L, 0x20004010L, 0x00000010L, 0x20400010L,
255 0x20400010L, 0x00000000L, 0x00404010L, 0x20404000L,
256 0x00004010L, 0x00404000L, 0x20404000L, 0x20000000L,
257 0x20004000L, 0x00000010L, 0x20400010L, 0x00404000L,
258 0x20404010L, 0x00400000L, 0x00004010L, 0x20000010L,
259 0x00400000L, 0x20004000L, 0x20000000L, 0x00004010L,
260 0x20000010L, 0x20404010L, 0x00404000L, 0x20400000L,
261 0x00404010L, 0x20404000L, 0x00000000L, 0x20400010L,
262 0x00000010L, 0x00004000L, 0x20400000L, 0x00404010L,
263 0x00004000L, 0x00400010L, 0x20004010L, 0x00000000L,
264 0x20404000L, 0x20000000L, 0x00400010L, 0x20004010L };
265
266 static unsigned long code SP7[64] = {
267 0x00200000L, 0x04200002L, 0x04000802L, 0x00000000L,
268 0x00000800L, 0x04000802L, 0x00200802L, 0x04200800L,
269 0x04200802L, 0x00200000L, 0x00000000L, 0x04000002L,
270 0x00000002L, 0x04000000L, 0x04200002L, 0x00000802L,
271 0x04000800L, 0x00200802L, 0x00200002L, 0x04000800L,
272 0x04000002L, 0x04200000L, 0x04200800L, 0x00200002L,
273 0x04200000L, 0x00000800L, 0x00000802L, 0x04200802L,
274 0x00200800L, 0x00000002L, 0x04000000L, 0x00200800L,
275 0x04000000L, 0x00200800L, 0x00200000L, 0x04000802L,
276 0x04000802L, 0x04200002L, 0x04200002L, 0x00000002L,
277 0x00200002L, 0x04000000L, 0x04000800L, 0x00200000L,
278 0x04200800L, 0x00000802L, 0x00200802L, 0x04200800L,
279 0x00000802L, 0x04000002L, 0x04200802L, 0x04200000L,
280 0x00200800L, 0x00000000L, 0x00000002L, 0x04200802L,
281 0x00000000L, 0x00200802L, 0x04200000L, 0x00000800L,
282 0x04000002L, 0x04000800L, 0x00000800L, 0x00200002L };
283
284 static unsigned long code SP8[64] = {
285 0x10001040L, 0x00001000L, 0x00040000L, 0x10041040L,
286 0x10000000L, 0x10001040L, 0x00000040L, 0x10000000L,
287 0x00040040L, 0x10040000L, 0x10041040L, 0x00041000L,
288 0x10041000L, 0x00041040L, 0x00001000L, 0x00000040L,
289 0x10040000L, 0x10000040L, 0x10001000L, 0x00001040L,
290 0x00041000L, 0x00040040L, 0x10040040L, 0x10041000L,
291 0x00001040L, 0x00000000L, 0x00000000L, 0x10040040L,
292 0x10000040L, 0x10001000L, 0x00041040L, 0x00040000L,
293 0x00041040L, 0x00040000L, 0x10041000L, 0x00001000L,
294 0x00000040L, 0x10040040L, 0x00001000L, 0x00041040L,
295 0x10001000L, 0x00000040L, 0x10000040L, 0x10040000L,
296 0x10040040L, 0x10000000L, 0x00040000L, 0x10001040L,
297 0x00000000L, 0x10041040L, 0x00040040L, 0x10000040L,
298 0x10040000L, 0x10001000L, 0x10001040L, 0x00000000L,
299 0x10041040L, 0x00041000L, 0x00041000L, 0x00001040L,
300 0x00001040L, 0x00040040L, 0x10000000L, 0x10041000L };
301
302 static void desfunc(unsigned long *block, unsigned long *keys) {
C51 COMPILER V7.02a MYDES 07/16/2003 14:05:28 PAGE 6
303 1 register unsigned long fval, work, right, leftt;
304 1 register unsigned char round;
305 1
306 1 leftt = block[0];
307 1 right = block[1];
308 1 work = ((leftt >> 4) ^ right) & 0x0f0f0f0fL;
309 1 right ^= work;
310 1 leftt ^= (work << 4);
311 1 work = ((leftt >> 16) ^ right) & 0x0000ffffL;
312 1 right ^= work;
313 1 leftt ^= (work << 16);
314 1 work = ((right >> 2) ^ leftt) & 0x33333333L;
315 1 leftt ^= work;
316 1 right ^= (work << 2);
317 1 work = ((right >> 8) ^ leftt) & 0x00ff00ffL;
318 1 leftt ^= work;
319 1 right ^= (work << 8);
320 1 right = ((right << 1) | ((right >> 31) & 1L)) & 0xffffffffL;
321 1 work = (leftt ^ right) & 0xaaaaaaaaL;
322 1 leftt ^= work;
323 1 right ^= work;
324 1 leftt = ((leftt << 1) | ((leftt >> 31) & 1L)) & 0xffffffffL;
325 1
326 1 for( round = 0; round < 8; round++ ) {
327 2 work = (right << 28) | (right >> 4);
328 2 work ^= *keys++;
329 2 fval = SP7[ work & 0x3fL];
330 2 fval |= SP5[(work >> 8) & 0x3fL];
331 2 fval |= SP3[(work >> 16) & 0x3fL];
332 2 fval |= SP1[(work >> 24) & 0x3fL];
333 2 work = right ^ *keys++;
334 2 fval |= SP8[ work & 0x3fL];
335 2 fval |= SP6[(work >> 8) & 0x3fL];
336 2 fval |= SP4[(work >> 16) & 0x3fL];
337 2 fval |= SP2[(work >> 24) & 0x3fL];
338 2 leftt ^= fval;
339 2 work = (leftt << 28) | (leftt >> 4);
340 2 work ^= *keys++;
341 2 fval = SP7[ work & 0x3fL];
342 2 fval |= SP5[(work >> 8) & 0x3fL];
343 2 fval |= SP3[(work >> 16) & 0x3fL];
344 2 fval |= SP1[(work >> 24) & 0x3fL];
345 2 work = leftt ^ *keys++;
346 2 fval |= SP8[ work & 0x3fL];
347 2 fval |= SP6[(work >> 8) & 0x3fL];
348 2 fval |= SP4[(work >> 16) & 0x3fL];
349 2 fval |= SP2[(work >> 24) & 0x3fL];
350 2 right ^= fval;
351 2 }
352 1
353 1 right = (right << 31) | (right >> 1);
354 1 work = (leftt ^ right) & 0xaaaaaaaaL;
355 1 leftt ^= work;
356 1 right ^= work;
357 1 leftt = (leftt << 31) | (leftt >> 1);
358 1 work = ((leftt >> 8) ^ right) & 0x00ff00ffL;
359 1 right ^= work;
360 1 leftt ^= (work << 8);
361 1 work = ((leftt >> 2) ^ right) & 0x33333333L;
362 1 right ^= work;
363 1 leftt ^= (work << 2);
364 1 work = ((right >> 16) ^ leftt) & 0x0000ffffL;
C51 COMPILER V7.02a MYDES 07/16/2003 14:05:28 PAGE 7
365 1 leftt ^= work;
366 1 right ^= (work << 16);
367 1 work = ((right >> 4) ^ leftt) & 0x0f0f0f0fL;
368 1 leftt ^= work;
369 1 right ^= (work << 4);
370 1 *block++ = right;
371 1 *block = leftt;
372 1 }
373
374 /* Validation sets:
375 *
376 * Single-length key, single-length plaintext -
377 * Key : 0123 4567 89ab cdef
378 * Plain : 0123 4567 89ab cde7
379 * Cipher : c957 4425 6a5e d31d
380 *
381 **********************************************************************/
382 void DES(unsigned char *inblock, unsigned char *outblock, unsigned char *key, unsigned char flag)
383 {
384 1 unsigned long work[2];
385 1 unsigned long mkey[32];
386 1
387 1 deskey(key, flag);
388 1 cpkey(mkey);
389 1
390 1 scrunch(inblock, work);
391 1 desfunc(work, mkey);
392 1 unscrun(work, outblock);
393 1 }
394
395 void Do_XOR(unsigned char *dest, unsigned char *source, int size)
396 {
397 1 int i;
398 1 for (i = 0; i < size; i++)
399 1 dest[i] ^= source[i];
400 1 }
401
402 void MAC(unsigned char *packet, int packet_size,
403 unsigned char *mac_value, unsigned char *key, unsigned char mode)
404 {
405 1 int size = 0;
406 1
407 1 memset(mac_value, 0, 8);
408 1
409 1 while (packet_size > size)
410 1 {
411 2 if ((packet_size - size) <= 8)
412 2 {
413 3 Do_XOR(mac_value, &packet[size], packet_size - size);
414 3 DES(mac_value, mac_value, key, EN0);
415 3 return;
416 3 }
417 2 Do_XOR(mac_value, &packet[size], 8);
418 2 if (mode == STAND)
419 2 DES(mac_value, mac_value, key, EN0);
420 2 size += 8;
421 2 }
422 1 }
423
424 /*pin calculate*/
425 void HostDes(unsigned char *card_no, unsigned char *work_key, unsigned char *pin,
426 unsigned char pinlen, unsigned char *encrypt_pin, unsigned char flag)
C51 COMPILER V7.02a MYDES 07/16/2003 14:05:28 PAGE 8
427 {
428 1 unsigned char card_buf[16], pin_buf[17], enpin_buf[8];
429 1 int i, ii;
430 1
431 1 memset(card_buf, 'F', sizeof(card_buf));
432 1 memcpy(card_buf, card_no+1, 15);
433 1 DSP_2_HEX(card_buf, card_buf, 8);
434 1 card_buf[0] = 0;
435 1
436 1 if (flag == 'e' || flag == 'E' || flag == EN0)
437 1 {
438 2 enpin_buf[0] = pinlen;
439 2 memcpy(pin_buf, pin, pinlen);
440 2 ii = pinlen;
441 2 for( i = ii; i < 17; i++)
442 2 {
443 3 pin_buf[i] = 'F';
444 3 }
445 2 DSP_2_HEX(pin_buf, pin_buf, 8);
446 2
447 2 Do_XOR(card_buf, pin_buf, 7);
448 2
449 2 memcpy(enpin_buf+1, card_buf, 7);
450 2
451 2 DES(enpin_buf, encrypt_pin, work_key, EN0);
452 2
453 2 return;
454 2 }
455 1
456 1 if (flag == 'd' || flag == 'D' || flag == DE1)
457 1 {
458 2 DES(encrypt_pin, pin_buf, work_key, DE1);
459 2
460 2 Do_XOR(pin_buf+1, card_buf, 7);
461 2
462 2 HEX_2_DSP(pin_buf+1, pin, 7);
463 2
464 2 pin[pin_buf[0]&0x0f] = 0;
465 2
466 2 return;
467 2 }
468 1 }
469
470
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 7166 ----
CONSTANT SIZE = 2280 ----
XDATA SIZE = 408 661
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -