#include "stdafx.h"
#include <conio.h>
#include "time.h"
#include "Ry4S.h"
void ShowERR(WORD retcode);
void HexBufferToString(char* str,BYTE* buf,int len);
char* word2cp(WORD value);
char* UnionStr(const char* A,const char* B);
char* strcat_lc(const char* A,const char* B);
char* a2u(const char* A,const char* B);
char* a3u(const char* A,const char* B,const char* C);
char* GetERR_Cn(WORD retcode);
int main(int argc, char* argv[])
{
printf("Hello World!\n");
bool is_2=false;
is_2=true;
WORD handle, p1, p2, p3, p4, retcode;
DWORD lp1, lp2;
BYTE buffer[1024];
p1 = 0xc44c;
p2 = 0xc8f8;
p3 = 0;
p4 = 0;
if(is_2==true)
{
p3 = 0x0799;
p4 = 0xc43b;
}
memset(buffer,0,1024);
printf("查找锁中...");
retcode = Rockey(RY_FIND, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
printf("查找锁出错: ");
ShowERR(retcode);
return -1;
}
char* hid=new char[sizeof(lp1)];
sprintf(hid,"%08X",lp1);
printf("找到一个加密锁,hid=%s ",hid);
printf("查找锁完成!\n");
printf("打开锁中...");
retcode = Rockey(RY_OPEN, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
printf("打开锁出错,Error Code: %d\n", retcode);
return -1;
}
printf("打开锁完成!\n");
printf("[用户存储区]写入数据中...");
if(is_2==false)
{
p1=0;
p2=500;
}
else
{
p1=0;
p2=900;
}
strcpy((char*)buffer,"Hello world! Rockey4 Smart!");
retcode=Rockey(RY_WRITE,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);
if(retcode)
{
printf("写入数据出错\n ErrorCode:%d\n,ErrorInfo:%s\n",retcode,GetERR_Cn(retcode));
return -1;
}
printf("Write data:%s\n",buffer);
printf("[用户存储区]写入数据完成!\n");
printf("[用户存储区]读取数据中...");
p1 = 0;
p2 = 500;
buffer[14] = 0;
retcode = Rockey(RY_READ, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
printf("读取用户存储区出错\n Error Code: %d\n", retcode);
return -1;
}
printf("buffer:%s\n", buffer);
printf("[用户存储区]读取数据完成!\n");
for(int i=0;i<10;i++)
{
retcode = Rockey(RY_RANDOM, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{ printf("产生随机数出错了\n,Error Code: %d\n", retcode);
return -1;
}
printf("生成的随机数为Random 16Hex:%04X,10Dec:%d\n", p1,p1);
}
lp2=0x12345678;
retcode=Rockey(RY_SEED,&handle,&lp1,&lp2,&p1,&p2,&p3,&p4,buffer);
if(retcode)
{
printf("产生种子码出错\n,Error code:%d\n,Error info:%s\n",retcode,GetERR_Cn(retcode));
return -1;
}
printf("种子码为种码为%X\n",lp2);
printf("子码为Seed:%04X %04X %04X %04X\n",p1,p2,p3,p4);
if (p1==0xD03A && p2==0x94D6 && p3==0x96A9 && p4==0x7F54)
{
printf("种子码正确,Hello World!\n");
}
else
{
printf("种子码出错了,Hello error!\n");
return -1;
}
if(is_2==true)
{
lp1 = 0x88888888;
retcode = Rockey(RY_WRITE_USERID, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
printf("写入用户ID,Error Code: %d\n", retcode);
return -1;
}
printf("Write User ID: %08X\n", lp1);
}
lp1 = 0;
retcode = Rockey(RY_READ_USERID, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
printf("Error Code: %d\n", retcode);
return -1;
}
printf("读取用户ID UID=%X\n",lp1);
if (lp1==0x88888888)
{
printf("Hello world! UID=%X\n",lp1);
}
else
{
printf("Hello DEMO!\n");
return -1;
}
if(is_2==true)
{
p1 = 0;
p2 = 3;
p3 = 0;
retcode = Rockey(RY_SET_MODULE, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
printf("Error Code: %d\n", retcode);
return -1;
}
printf("Set Moudle 0: Pass = %04X Decrease no allow\n", p2);
}
p1 = 0;
retcode = Rockey(RY_CHECK_MODULE, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
printf("检查模块状态,Error Code: %d\n", retcode);
return -1;
}
printf("check Moudle 0: Pass = %04X Decrease no allow\n", p2);
printf("检查模块状态,lp1=%04X,lp2=%04X,p1=%04X,p2=%04X,p3=%04X,p4=%04X\n", lp1,lp2,p1,p2,p3,p4);
if (p2) printf("检查模块状态,Hello world!\n");
else return -1;
if (p2!=1)
{
printf("Update Please!\n");
return -1;
}
if(is_2==true)
{
}
char str[20]="bfgis_system";
DWORD mykey=12345678;
int slen = strlen(str);
int n;
lp2 = mykey;
retcode = Rockey(RY_SEED, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
printf("Error Code: %d\n", retcode);
return -1;
}
for (n=0;n<slen;n++)
{
str[n] = str[n] + (char)p1 + (char)p2 + (char)p3 + (char)p4;
}
printf("加密我的数据,Encrypted data is %s\n", str);
lp2 = mykey;
retcode = Rockey(RY_SEED, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
printf("Error Code: %d\n", retcode);
return -1;
}
for (n=0;n<slen;n++)
{
str[n] = str[n] - (char)p1 - (char)p2 - (char)p3 - (char)p4;
}
printf("解密我的数据,Decrypted data is %s\n", str);
char *buf=new char[1024];
SYSTEMTIME st;
GetLocalTime(&st);
printf("Date:%04d%02d%02d\n",st.wYear,st.wMonth,st.wDay);
sprintf(buf,"%04d%02d%02d",st.wYear,st.wMonth,st.wDay);
lp1 = 0x20121101;
retcode = Rockey(RY_WRITE_USERID, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
ShowERR(retcode);
return -1;
}
printf("Write User ID: %08X\n", lp1);
lp1 = 0;
retcode = Rockey(RY_READ_USERID, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
ShowERR(retcode);
return -1;
}
printf("Read User ID: %08X\n", lp1);
if(1)
{
printf("日期操作相等ok!\n");
}
else
{
printf("期操作不等 exit!\n");
}
printf("关闭锁中...");
retcode = Rockey(RY_CLOSE, &handle, &lp1, &lp2, &p1, &p2, &p3, &p4, buffer);
if (retcode)
{
printf("关闭锁出错,Error Code: %d\n", retcode);
return -1;
}
printf("关闭锁完成!\n");
printf("暂停");
int temp=getchar();
return 0;
}
void ShowERR(WORD retcode)
{
if (retcode == 0) return;
printf("Error Code: %d,Error Info:%s\n", retcode,GetERR_Cn(retcode));
}
void HexBufferToString(char* str,BYTE* buf,int len)
{
int k;
sprintf(str,"0x");
for( k=0;k<len;k++)
{
char strTemp[20];
sprintf(strTemp,"%02x",buf[k]);
strcat(str,strTemp);
}
}
char* word2cp(WORD value)
{
char* s=new char[sizeof(value)];
sprintf(s,"%d",value);
char* ret_s=new char[strlen(s)];
strcpy(ret_s,s);
return ret_s;
}
char* UnionStr(const char* A,const char* B)
{
int len=0;
len=strlen(A)+strlen(B)+1;
char* result=new char[len];
memset(result,0,len);
sprintf(result, "%s%s",A,B);
char* r=new char[strlen(result)+1];
strcpy(r,result);
return r;
}
char* strcat_lc(const char* A,const char* B)
{
return UnionStr(A,B);
}
char* a2u(const char* A,const char* B)
{
return strcat_lc(A,B);
}
char* a3u(const char* A,const char* B,const char* C)
{
char* t=strcat_lc(A,B);
t=strcat_lc(t,C);
return t;
}
char* GetERR_Cn(WORD retcode)
{
char* r=NULL;
char* rc=word2cp(retcode);
switch(retcode)
{
case ERR_SUCCESS:
r="没有错误";
break;
case ERR_NO_ROCKEY:
r="没有ROCKEY";
break;
case ERR_INVALID_PASSWORD:
r="有ROCKEY锁,但基本密码错";
break;
case ERR_INVALID_PASSWORD_OR_ID:
r="错误的密码或硬件 ID";
break;
case ERR_SETID:
r="设置硬件 ID 错";
break;
case ERR_INVALID_ADDR_OR_SIZE:
r="读写地址或长度有误";
break;
case ERR_UNKNOWN_COMMAND:
r="没有此命令";
break;
case ERR_NOTBELEVEL3:
r="内部错误";
break;
case ERR_READ:
r="读数据错";
break;
case ERR_WRITE:
r="写数据错";
break;
case ERR_RANDOM:
r="随机数错";
break;
case ERR_SEED:
r="种子码错";
break;
case ERR_CALCULATE:
r="计算错";
break;
case ERR_NO_OPEN:
r="在操作前没有打开锁";
break;
case ERR_OPEN_OVERFLOW:
r="打开的锁太多(>16)";
break;
case ERR_NOMORE:
r="找不到更多的锁";
break;
case ERR_NEED_FIND:
r="没有 Find 直接用了 FindNext";
break;
case ERR_DECREASE:
r="递减错";
break;
case ERR_AR_BADCOMMAND:
r="算法指令错";
break;
case ERR_AR_UNKNOWN_OPCODE:
r="算法运算符错";
break;
case ERR_AR_WRONGBEGIN:
r="算法第一条指令含有常数";
break;
case ERR_AR_WRONG_END:
r="算法最后一条指令含有常数";
break;
case ERR_AR_VALUEOVERFLOW:
r="算法中常数值 > 63";
break;
case ERR_TOOMUCHTHREAD:
r="同一个进程中打开锁的线程数 > 100";
break;
case ERR_INVALID_RY4S:
r="试图对非Rockey4Smart的锁进行操作";
break;
case ERR_INVALID_PARAMETER:
r="不合法的参数";
break;
case ERR_INVALID_TIMEVALUE:
r="不合法的时间值";
break;
default:
r=rc;
break;
}
return r;
}