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

📄 mydes.lst

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -