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

📄 at88scxx.lst

📁 Atmel公司推出了最新的加密芯片AT88SC0104C~25616C系列
💻 LST
📖 第 1 页 / 共 4 页
字号:
 581   1      unsigned char SK[8];     //会话密钥
 582   1      unsigned char Q_CH[0x14];//发送14H字节载体
 583   1      unsigned char j;
 584   1      
 585   1      for(j=0;j<=19;j++)
 586   1         {GPA[j]=0x00;}//初始化GPA单元
 587   1      
 588   1      Q_CH[0]=0xb6;
 589   1      Q_CH[1]=0x00;
 590   1      Q_CH[2]=GC_select<<4;
 591   1      Q_CH[2]=Q_CH[2]+0x50;
 592   1      Q_CH[3]=0x08;
 593   1      read(Q_CH);
 594   1      
 595   1      for(j=0;j<8;j++)
 596   1         {Q_CH[j+12]=Q_CH[j+4];}//CI
 597   1      
 598   1      for(j=0;j<8;j++)
 599   1         {Q_CH[j+4]=0xAA;}      //此处可改随机数
 600   1      
 601   1      for(j=0;j<4;j++)
 602   1         {
C51 COMPILER V7.50   AT88SCXX                                                              02/19/2008 15:50:58 PAGE 11  

 603   2         GPA_CLOCK(Q_CH[12+2*j],0x03);
 604   2         GPA_CLOCK(Q_CH[12+2*j+1],0x03);
 605   2         GPA_CLOCK(Q_CH[4+j],0x01);
 606   2         }
 607   1      
 608   1      if ((GC_select&0x0f)==0x00)
 609   1         for(j=0;j<8;j++)
 610   1            {Q_CH[12+j]=GC0[j];}
 611   1      else if ((GC_select&0x0f)==0x01)
 612   1         for(j=0;j<8;j++)
 613   1            {Q_CH[12+j]=GC1[j];}
 614   1      else if ((GC_select&0x0f)==0x02)
 615   1         for(j=0;j<8;j++)
 616   1            {Q_CH[12+j]=GC2[j];}
 617   1      else
 618   1         for(j=0;j<8;j++)
 619   1            {Q_CH[12+j]=GC3[j];}
 620   1      
 621   1      for(j=0;j<4;j++)
 622   1         {
 623   2         GPA_CLOCK(Q_CH[12+2*j],0x03);
 624   2         GPA_CLOCK(Q_CH[12+2*j+1],0x03);
 625   2         GPA_CLOCK(Q_CH[8+j],0x01);
 626   2         }
 627   1      
 628   1      GPA_CLOCK(0x00,0x06);
 629   1      Q_CH[12]=GPA[0];
 630   1      for(j=1;j<8;j++)
 631   1         {
 632   2         GPA_CLOCK(0x00,0x07);
 633   2         Q_CH[12+j]=GPA[0];
 634   2         }
 635   1      
 636   1      Q_CH[0]=0xb8;//send ch
 637   1      Q_CH[2]=0x00;
 638   1      Q_CH[3]=0x10;
 639   1      Q_CH[1]=GC_select;
 640   1      write(Q_CH);
 641   1      Wait_For_AckPolling();
 642   1      
 643   1      //new ci
 644   1      Q_CH[12]=0xFF;
 645   1      for(j=1;j<8;j++)
 646   1         {
 647   2         GPA_CLOCK(0x00,0x02);
 648   2         Q_CH[12+j]=GPA[0];
 649   2         }
 650   1      //new sk
 651   1      for(j=0;j<8;j++)
 652   1         {
 653   2         GPA_CLOCK(0x00,0x02);
 654   2         SK[j]=GPA[0];
 655   2         }
 656   1      GPA_CLOCK(0x00,0x03);
 657   1      
 658   1      //比较CI值是否一致
 659   1      Q_CH[0]=0XB6;
 660   1      Q_CH[1]=0X00;
 661   1      Q_CH[2]=GC_select<<4;
 662   1      Q_CH[2]=Q_CH[2]+0x50;
 663   1      Q_CH[3]=0x08;
 664   1      read(Q_CH);
C51 COMPILER V7.50   AT88SCXX                                                              02/19/2008 15:50:58 PAGE 12  

 665   1      Wait_For_AckPolling();
 666   1      if (Q_CH[4]!=0xff)
 667   1         {goto Aut_Report;}
 668   1      
 669   1      for(j=0;j<8;j++)
 670   1         {
 671   2         if(Q_CH[4+j]!= Q_CH[12+j])
 672   2           {goto Aut_Report;}
 673   2         }
 674   1      
 675   1      GPA_CLOCK(0x00,0x05);
 676   1      GPA_CLOCK(Q_CH[2],0x01);
 677   1      GPA_CLOCK(0x00,0x05);
 678   1      GPA_CLOCK(0x08,0x01);
 679   1      for(j=0;j<8;j++)
 680   1         {
 681   2         GPA_CLOCK(Q_CH[4+j],0x01);
 682   2         GPA_CLOCK(0x00,0x05);
 683   2         }
 684   1      //******************crypto_Authentication*************************
 685   1      //以会话密钥再认证一次
 686   1      //*****************************************************************
 687   1      for(j=0;j<=19;j++)
 688   1         {GPA[j]=0x00;}
 689   1      
 690   1      for(j=0;j<8;j++)
 691   1         {Q_CH[j+4]=0xAA;}      //此处可改随机数
 692   1      
 693   1      for(j=0;j<4;j++)
 694   1         {
 695   2         GPA_CLOCK(Q_CH[12+2*j],0x03);
 696   2         GPA_CLOCK(Q_CH[12+2*j+1],0x03);
 697   2         GPA_CLOCK(Q_CH[4+j],0x01);
 698   2         }
 699   1      
 700   1      for(j=0;j<4;j++)
 701   1         {
 702   2         GPA_CLOCK(SK[2*j],0x03);
 703   2         GPA_CLOCK(SK[2*j+1],0x03);
 704   2         GPA_CLOCK(Q_CH[8+j],0x01);
 705   2         }
 706   1      
 707   1      GPA_CLOCK(0x00,0x06);
 708   1      Q_CH[12]=GPA[0];
 709   1      for(j=1;j<8;j++)
 710   1         {
 711   2         GPA_CLOCK(0x00,0x07);
 712   2         Q_CH[12+j]=GPA[0];
 713   2         }
 714   1      
 715   1      Q_CH[0]=0xb8;
 716   1      Q_CH[1]=GC_select+0x10;
 717   1      Q_CH[2]=0x00;
 718   1      Q_CH[3]=0x10;
 719   1      write(Q_CH);
 720   1      Wait_For_AckPolling();
 721   1      
 722   1      //new ci
 723   1      Q_CH[12]=0xFF;
 724   1      for(j=1;j<8;j++)
 725   1         {
 726   2         GPA_CLOCK(0x00,0x02);
C51 COMPILER V7.50   AT88SCXX                                                              02/19/2008 15:50:58 PAGE 13  

 727   2         Q_CH[12+j]=GPA[0];
 728   2         }
 729   1      //new sk
 730   1      for(j=0;j<8;j++)
 731   1         {
 732   2         GPA_CLOCK(0x00,0x02);
 733   2         SK[j]=GPA[0];
 734   2         }
 735   1      GPA_CLOCK(0x00,0x03);
 736   1      
 737   1      //比较CI值是否一致
 738   1      Q_CH[0]=0XB6;
 739   1      Q_CH[1]=0X00;
 740   1      Q_CH[2]=GC_select<<4;
 741   1      Q_CH[2]=Q_CH[2]+0x50;
 742   1      Q_CH[3]=0x08;
 743   1      read(Q_CH);
 744   1      Wait_For_AckPolling();
 745   1      if (Q_CH[4]!=0xff)
 746   1         {goto Aut_Report;}
 747   1      
 748   1      for(j=0;j<8;j++)
 749   1         {
 750   2         if(Q_CH[4+j]!= Q_CH[12+j])
 751   2           {goto Aut_Report;}
 752   2         }
 753   1      
 754   1      GPA_CLOCK(0x00,0x05);
 755   1      GPA_CLOCK(Q_CH[2],0x01);
 756   1      GPA_CLOCK(0x00,0x05);
 757   1      GPA_CLOCK(0x08,0x01);
 758   1      for(j=0;j<8;j++)
 759   1         {
 760   2         GPA_CLOCK(Q_CH[4+j],0x01);
 761   2         GPA_CLOCK(0x00,0x05);
 762   2         }
 763   1      
 764   1      Aut_Report:
 765   1      return Q_CH[4];
 766   1      }
 767          
 768          //******************verify_wr_pw********************************
 769          //校验写密码组主函数,正确校验了写密码后开放读写
 770          //pw_select:密码套数选择
 771          //PAC:密码校验错误计数器.PAC!=0xff表示认证未通过或无器件
 772          //****************************************************************
 773          unsigned char verify_write_password(unsigned char pw_select)
 774          {
 775   1      unsigned char j;
 776   1      unsigned char pw[7];
 777   1      
 778   1      if ((pw_select&0x0f)==0x00)
 779   1         for(j=0;j<3;j++)
 780   1            {pw[4+j]=PW_WRITE0[j];}
 781   1      else if ((pw_select&0x0f)==0x01)
 782   1         for(j=0;j<3;j++)
 783   1            {pw[4+j]=PW_WRITE1[j];}
 784   1      else if ((pw_select&0x0f)==0x02)
 785   1         for(j=0;j<3;j++)
 786   1            {pw[4+j]=PW_WRITE2[j];}
 787   1      else if ((pw_select&0x0f)==0x03)
 788   1         for(j=0;j<3;j++)
C51 COMPILER V7.50   AT88SCXX                                                              02/19/2008 15:50:58 PAGE 14  

 789   1            {pw[4+j]=PW_WRITE3[j];}
 790   1      else if ((pw_select&0x0f)==0x04)
 791   1         for(j=0;j<3;j++)
 792   1            {pw[4+j]=PW_WRITE4[j];}
 793   1      else if ((pw_select&0x0f)==0x05)
 794   1         for(j=0;j<3;j++)
 795   1            {pw[4+j]=PW_WRITE5[j];}
 796   1      else if ((pw_select&0x0f)==0x06)
 797   1         for(j=0;j<3;j++)
 798   1            {pw[4+j]=PW_WRITE6[j];}
 799   1      else
 800   1         for(j=0;j<3;j++)
 801   1            {pw[4+j]=PW_WRITE7[j];}
 802   1      
 803   1      for(j=0;j<3;j++)
 804   1         {
 805   2         GPA_CLOCK(pw[4+j],0x05);
 806   2         pw[4+j]=GPA[0];
 807   2         }
 808   1      pw[0]=0xba;
 809   1      pw[1]=pw_select&0x0f;
 810   1      pw[2]=0x00;
 811   1      pw[3]=0x03;
 812   1      write(pw);
 813   1      Wait_For_AckPolling();
 814   1      
 815   1      pw[0]=0XB6;
 816   1      pw[1]=0X00;
 817   1      pw[2]=pw_select&0x0f;
 818   1      pw[2]=pw[2]*0x08;
 819   1      pw[2]=pw[2]+0xb0;
 820   1      pw[3]=0x01;
 821   1      read(pw);
 822   1      Wait_For_AckPolling();
 823   1      
 824   1      GPA_CLOCK(0x00,0x05);
 825   1      GPA_CLOCK(pw[2],0x01);
 826   1      GPA_CLOCK(0x00,0x05);
 827   1      GPA_CLOCK(0x01,0x01);
 828   1      pw[4]=pw[4]^GPA[0];
 829   1      GPA_CLOCK(pw[4],0x01);
 830   1      GPA_CLOCK(0x00,0x05);
 831   1      
 832   1      return pw[4];
 833   1      }
 834          
 835          //******************verify_read_pw********************************
 836          //可以用本函数校验读密码,但只开放读权限
 837          //校验读密码组主函数,正确校验了读密码后只开放读
 838          //pw_select:密码套数选择
 839          //PAC:密码校验错误计数器.PAC=0xff表示认证通过,PAC!=0xff表示认证未通过或无器件
 840          //****************************************************************
 841          /*unsigned char verify_read_password(unsigned char pw_select)
 842          {
 843          unsigned char j;
 844          unsigned char idata pw[7];
 845          if ((pw_select&0x0f)==0x00)
 846             {for(j=0;j<3;j++)
 847             {pw[4+j]=PW_READ0[j];}}//{*(p+42+j)=PW_WRITE0[j];}}
 848          else if ((pw_select&0x0f)==0x01)
 849             for(j=0;j<3;j++)
 850             {pw[4+j]=PW_READ1[j];}
C51 COMPILER V7.50   AT88SCXX                                                              02/19/2008 15:50:58 PAGE 15  

 851          else if ((pw_select&0x0f)==0x02)
 852             for(j=0;j<3;j++)
 853             {pw[4+j]=PW_READ2[j];}
 854          else if ((pw_select&0x0f)==0x03)
 855             for(j=0;j<3;j++)
 856             {pw[4+j]=PW_READ3[j];}
 857          else if ((pw_select&0x0f)==0x04)
 858             for(j=0;j<3;j++)
 859             {pw[4+j]=PW_READ4[j];}
 860          else if ((pw_select&0x0f)==0x05)
 861             for(j=0;j<3;j++)
 862             {pw[4+j]=PW_READ5[j];}
 863          else if ((pw_select&0x0f)==0x06)
 864             for(j=0;j<3;j++)
 865             {pw[4+j]=PW_READ6[j];}
 866          else
 867             for(j=0;j<3;j++)
 868             {pw[4+j]=PW_READ7[j];}
 869          
 870          for(j=0;j<3;j++)
 871          {
 872          GPA_CLOCK(pw[4+j],0x05);//GPA[0]=pw[4+j];GPA_CLOCK(0x05);
 873          pw[4+j]=GPA[0];//*(p+42+j)=*(p+11);
 874          }
 875          pw[0]=0xba;//*(p+38)=0xba; //
 876          pw[1]=pw_select&0x0f;//*(p+39)=*(p+1)&0x0f;
 877          pw[1]=pw[1]+0x10;
 878          pw[2]=0x00;//*(p+40)=0x00;
 879          pw[3]=0x03;//*(p+41)=0x03;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -