📄 at88scxx.lst
字号:
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 + -