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

📄 ic.c.bak

📁 网络中交换节点的上数据的交换和下行数据分发的硬件实现
💻 BAK
📖 第 1 页 / 共 3 页
字号:
     {
      status=0x3;
      poke(0x80008800,0x3,2);
      goto label1;
     }
    if (status==0x32)
     {
      status=0x7;
      poke(0x80008800,0x7,2);
      goto label1;
     }                                     /*若写IC卡失败,进行相应处理*/

    secerase(0x01480000);                    /*擦除用户信息所在的flash扇区*/
    
    flash_w(0x8000C800,0x01480000,5*u_num);       /*更新flash中的用户信息区*/
    
    
    if (peek(0x8000BFFC,1)==0)
     {
      memcopy(0x01440000,0x8000C300,2,2);      /*将RSA公钥的模长和加密指数读到内存*/
    
      memcopy(0x01440008,0x80008818,64,2);     /*将RSA公钥的密文积移到解密位置*/
    
      
      poke(0x80008804,16,2);                   /*输入要解密数据的组数*/ 
    
      inputkey(0x80008804,0x8000E000,0x80008818,0x80008804,1);    /*用主密钥解密RSA公钥的积*/ 
    
      memcopy(0x80008804,0x8000C308,64,2);     /*将RSA公钥的积的明文移到指定位置*/
    
      memcopy(0x01440108,0x8000C408,1,2);      /*将RSA私钥模长移到内存*/
    
      memcopy(0x0144010C,0x80008818,160,2);    /*将RSA私钥的密文部分移到解密位置*/ 
    
     
      poke(0x80008804,40,2);                   /*输入要解密数据的组数*/ 
    
      inputkey(0x80008804,0x8000E000,0x80008818,0x80008804,1);                          /*用主密钥解密RSA私钥的密文部分*/ 
    
      memcopy(0x80008804,0x8000C40C,160,2);    /*将RSA私钥的明文移到指定位置*/
    
      memcopy(0x0144038C,0x8000C68C,2,2);      /*将SMC公钥的模长和加密指数读到内存*/
    
      memcopy(0x01440394,0x80008818,64,2);     /*将SMC公钥的密文积移到解密位置*/ 
    
       poke(0x80008804,16,2);                   /*输入要解密数据的组数*/
      inputkey(0x80008804,0x8000E000,0x80008818,0x80008804,1);                          /*用主密钥解密SMC公钥的积*/ 
    
      memcopy(0x80008804,0x8000C694,64,2);     /*将SMC公钥的明文积移到指定位置*/ 
     }
      
    poke(0x8000BFFC,ICID,1);                 /*身份验证通过,将ICID写入用户状态码*/
    
    memcopy(0x014A0000,0x80008818,1024,2);
    
      poke(0x80008804,256,2);    
    
    inputkey(0x80008804,0x8000E000,0x80008818,0x8000D000,1,1); 
    
     poke(0x80008804,1,2);
     
        for(i=0;i<4;i++)
        {
         *(unsigned volatile int *)(0x80008808+4*i)=0xffffff;
        
        }   
     inputkey(0x80008804,0x8000E000,0x80008808,0x8000EEE0,1,1); 
    
    poke(0x80008800,0,2);
    status=0; 
    
label1:  return status;    
   }
   
    /*清除密码卡内某个操作员信息*/ 
   
   int user_delete()
   {
    extern int peek();
    extern void poke(),memcopy(),secerase(),flash_w();
   
    int i,j,status;
    unsigned short ICID,u_num;
    unsigned int data[5];
    unsigned int tmp;
    unsigned char temp;
    
  /*  tmp=peek(0x8000BFFC,2);       //操作员权限
     if (tmp!=0)
     {
     temp=(unsigned char)(tmp>>24);
     if(temp!=0)
     {
      status=0x0a;
      poke(0x80008800,0x0a,2);
      goto label1;
     }
     }*/
    ICID=peek(0x80008804,1);                   /*读出要删除的用户ICID*/ 
    
    u_num=peek(0x8000BFFE,1);
    
    for (i=0;i<u_num;i++)
     {
      if(ICID==peek(0x8000C800+i*20,1))
      break; 
     }
    
    if(i>=u_num)
     {
      poke(0x80008800,0x13,2);
      status=0x13;                           /*若没有该用户,则做相应处理*/
      goto label1;
     }
    
    for(j=0;j<5;j++)
     {
      data[j]=0xFFFFFFFF;  
     }
    
    if(u_num>1)
     {
      memcopy(0x8000C800+(i+1)*20,0x8000C800+i*20,(u_num-1-i)*5,2);   /*将被删除用户后的用户信息前移*/
      memcopy(data,0x8000C800+(u_num-1)*20,5,2);
     }
    
    if(u_num==1)
     {
      memcopy(data,0x8000C800,5,2);
     }
    
    u_num=u_num-1;
    poke(0x8000BFFE,u_num,1);               /*更新用户数目*/ 
    
    secerase(0x01480000);                   /*擦除用户信息所在的flash扇区*/ 
    
    if(u_num>0)
     {
      flash_w(0x8000C800,0x01480000,u_num*5);   /*更新flash中的用户信息区*/ 
     }
    poke(0x80008800,0,2);
    status=0;
   
   
label1:  return  status;    
   }  
  
     /*本函数用于读出密钥卡或身份卡头信息内容*/ 
   
   int IChead_read()
   {
    extern int r_IC();
    extern void poke();
   
    int status;
    
    status=r_IC(0x0,0x80008804,800);         /*从IC卡读出头信息*/
    
    if (status==0x30)
     {
      status=0x3;
      poke(0x80008800,0x3,2);
      goto label1;
     }
   if (status==0x32)
     {
      status=0x7;
      poke(0x80008800,0x7,2);
      goto label1;
     }                                     /*若读IC卡失败,进行相应处理*/
    
    
    poke(0x80008800,0,2);
    status=0;
   
label1:  return status;   
   }
   
   
   
/*复位密码卡*/
int logout()
{
  
   extern void poke();
   int status;
    int tmp;
  
   if(peek(0x8000BFFC,1)==0)
   {
      status=0xc;
      poke(0x80008800,0xc,2);
      goto label1;
   }
 poke(0x8000BFFC,0,2);

 for(tmp=0;tmp<293;tmp++)
 {
 poke(0x8000C300+tmp*4,0,2);
 }
   
 for(tmp=0;tmp<8;tmp++)
 {
 poke(0x8000E000+tmp*4,0,2);
 }
   
poke(0x80008800,0,2);
 status=0;
   
   
label1:  return  status;    
 
}
 
 
 /*更改密码卡密码*/
 
int change_passwd()
{
extern int w_IC(),peek(),inputkey();
extern void poke(),flash_w(),secerase(),memcopy();
int status;
   
   memcopy(0x80008804,0x8000E030,4,2);  
  status=r_IC(0x1,0x80008804,1);         /*从IC卡读出头信息*/
    
    if (status==0x30)
     {
      status=0x3;
      poke(0x80008800,0x3,2);
      goto label2;
     }
   if (status==0x32)
     {
      status=0x7;
      poke(0x80008800,0x7,2);
      goto label2;
     }                                     /*若读IC卡失败,进行相应处理*/
    
    
  
  if (peek(0x80008804,0)==0)  /*密钥IC卡*/
  {
  
  
     poke(0x80008804,0x01,2);
     inputkey(0x80008804,0x8000E030,0x8000E000,0x80008808,0);   /*用PASSWORD密钥加密口令串*/
    
     status=w_IC(0x80008808,0x08,16);   /*向IC卡写入指定长度的数据*/  
    
    if (status==0x30)
     {
      status=0x3;
      poke(0x80008800,0x3,2);
      goto label2;
     }
   if (status==0x32)
     {
      status=0x7;
      poke(0x80008800,0x7,2);
      goto label2;
     } 
     inputkey(0x80008804,0x8000E030,0x8000E020,0x80008808,0);   /*用PASSWORD密钥加密口令串*/
    
     status=w_IC(0x80008808,0x7BE,16);   /*向IC卡写入指定长度的数据*/  
    
    if (status==0x30)
     {
      status=0x3;
      poke(0x80008800,0x3,2);
      goto label2;
     }
   if (status==0x32)
     {
      status=0x7;
      poke(0x80008800,0x7,2);
      goto label2;
     } 
     
     memcopy(0x01440008,0x80008808,64,2);
     poke(0x80008804,16,2);
     inputkey(0x80008804,0x8000E030,0x80008808,0x80008804,0);   /*用PASSWORD密钥加密口令串*/
    
     
     status=w_IC(0x80008804,0x336,256);       /*将加密后的RSA公钥的积写入IC卡*/ 
   if (status==0x30)
     {
      status=0x3;
      poke(0x80008800,0x3,2);
      goto label2;
     }
   if (status==0x32)
     {
      status=0x7;
      poke(0x80008800,0x7,2);
      goto label2;
     }                                     /*若写IC卡失败,进行相应处理*/
   
     
      memcopy(0x0144010c,0x80008808,160,2);
      poke(0x80008804,40,2);
     inputkey(0x80008804,0x8000E030,0x80008808,0x80008804,0);   /*用PASSWORD密钥加密口令串*/
    
     
     status=w_IC(0x80008804,0x438,640);       /*将加密后的RSA私钥写入IC卡*/ 
   if (status==0x30)
     {
      status=0x3;
      poke(0x80008800,0x3,2);
      goto label2;
     }
   if (status==0x32)
     {
      status=0x7;
      poke(0x80008800,0x7,2);
      goto label2;
     }                                     /*若写IC卡失败,进行相应处理*/
   
      memcopy(0x01440394,0x80008808,160,2);
      poke(0x80008804,16,2);
     inputkey(0x80008804,0x8000E030,0x80008808,0x80008804,0);   /*用PASSWORD密钥加密口令串*/
    
     
     status=w_IC(0x80008804,0x6BE,640);       /*将加密后的RSA私钥写入IC卡*/ 
   if (status==0x30)
     {
      status=0x3;
      poke(0x80008800,0x3,2);
      goto label2;
     }
   if (status==0x32)
     {
      status=0x7;
      poke(0x80008800,0x7,2);
      goto label2;
     }                                     /*若写IC卡失败,进行相应处理*/
   }
   else
   {
     poke(0x80008804,0x01,2);
     inputkey(0x80008804,0x8000E030,0x8000E000,0x80008808,0);   /*用PASSWORD密钥加密口令串*/
    
     status=w_IC(0x80008808,0x08,16);   /*向IC卡写入指定长度的数据*/  
    
    if (status==0x30)
     {
      status=0x3;
      poke(0x80008800,0x3,2);
      goto label2;
     }
   if (status==0x32)
     {
      status=0x7;
      poke(0x80008800,0x7,2);
      goto label2;
     } 
     inputkey(0x80008804,0x8000E030,0x8000E020,0x80008808,0);   /*用PASSWORD密钥加密口令串*/
    
     status=w_IC(0x80008808,0x350,16);   /*向IC卡写入指定长度的数据*/  
    
    if (status==0x30)
     {
      status=0x3;
      poke(0x80008800,0x3,2);
      goto label2;
     }
   if (status==0x32)
     {
      status=0x7;
      poke(0x80008800,0x7,2);
      goto label2;
     } 
   
    status=r_IC(0x320,0x80008808,16);   /*向IC卡写入指定长度的数据*/  
    
    if (status==0x30)
     {
      status=0x3;
      poke(0x80008800,0x3,2);
      goto label2;
     }
   if (status==0x32)
     {
      status=0x7;
      poke(0x80008800,0x7,2);
      goto label2;
     } 
   
      poke(0x80008804,3,2);
      inputkey(0x80008804,0x8000E010,0x80008808,0x80008808,1);   
      inputkey(0x80008804,0x8000E030,0x80008808,0x80008808,0);  
    
     status=w_IC(0x80008808,0x320,16);   /*向IC卡写入指定长度的数据*/  
    
   if (status==0x30)
     {
      status=0x3;
      poke(0x80008800,0x3,2);
      goto label2;
     }
   if (status==0x32)
     {
      status=0x7;
      poke(0x80008800,0x7,2);
      goto label2;
     } 
   }
       
       memcopy(0x8000E030,0x8000E010,4,2);
  poke(0x80008800,0,2);
 status=0;
   
   
label2:  return  status;    
 
}
   

⌨️ 快捷键说明

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