📄 mifareprohost.src
字号:
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#?_MProCommand?BYTE+05H
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#len?1877
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#?_MProCommand?BYTE+08H
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
INC DPTR
MOV A,#01H
MOVX @DPTR,A
MOV DPTR,#FWI
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#?_MProCommand?BYTE+0CH
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
MOV DPTR,#CmdBuf?1876
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV R5,#09H
MOV R4,#00H
LCALL _MProCommand
MOV A,R7
JZ ?C0073
MOV R7,#01H
RET
?C0073:
; if(CmdBuf[*len-4]==0x90) return(MI_OK);
; SOURCE LINE # 272
MOV DPTR,#len?1877
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?ILDPTR
ADD A,#0FCH
MOV R7,A
MOV A,B
ADDC A,#0FFH
MOV R6,A
MOV DPTR,#CmdBuf?1876
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPL,R7
MOV DPH,R6
LCALL ?C?CLDOPTR
CJNE A,#090H,?C0075
MOV R7,#00H
RET
?C0075:
; else return(!MI_OK);
; SOURCE LINE # 273
MOV R7,#01H
; }
; SOURCE LINE # 274
?C0074:
RET
; END OF _EvalOS_GetChipInfo
;
; /**********************************************************************
; 函数名:EvalOS_RSAEncpDecp
;
; 输入参数: CID,命令参数buf,是否加密标识Encrypt,加密数据长度datalen
;
; 输出: 返回读取状态标识 status
;
; 核心处理: 数据交换
;
; 时间: 11-03-09
; **********************************************************************/
; char EvalOS_RSAEncpDecp(unsigned char *CmdBuf,
RSEG ?PR?_EvalOS_RSAEncpDecp?MIFAREPROHOST
_EvalOS_RSAEncpDecp:
USING 0
; SOURCE LINE # 287
MOV DPTR,#CmdBuf?1978
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
; unsigned char Encrypt,
; unsigned char datalen,
; unsigned int *len)
; {
; SOURCE LINE # 291
; unsigned int mm,nn;
; // static unsigned char regvalue5;
;
;
; for((*len)=(datalen-1); (*len)>0; (*len)--)
; SOURCE LINE # 296
INC DPTR
MOVX A,@DPTR
ADD A,#0FFH
MOV R7,A
CLR A
ADDC A,#0FFH
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
XCH A,R1
MOV B,R7
LCALL ?C?ISTPTR
?C0077:
MOV DPTR,#len?1981
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?ILDPTR
SETB C
SUBB A,#00H
MOV A,B
SUBB A,#00H
JC ?C0078
; {
; SOURCE LINE # 297
; CmdBuf[(*len)+7]=CmdBuf[(*len)];
; SOURCE LINE # 298
LCALL ?C?ILDPTR
MOV R7,A
MOV R6,B
MOV DPTR,#CmdBuf?1978
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPL,R7
MOV DPH,R6
LCALL ?C?CLDOPTR
MOV R5,A
MOV A,#07H
ADD A,R7
MOV DPL,A
CLR A
ADDC A,R6
MOV DPH,A
MOV A,R5
LCALL ?C?CSTOPTR
; }
; SOURCE LINE # 299
MOV DPTR,#len?1981
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV A,#0FFH
MOV B,A
LCALL ?C?IILDPTR
SJMP ?C0077
?C0078:
; CmdBuf[7]=CmdBuf[0];
; SOURCE LINE # 300
MOV DPTR,#CmdBuf?1978
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?CLDPTR
MOV DPTR,#07H
LCALL ?C?CSTOPTR
; CmdBuf[0]=0x0A|GBLK;// I-block PCB with CID
; SOURCE LINE # 301
MOV DPTR,#GBLK
MOVX A,@DPTR
ORL A,#0AH
LCALL ?C?CSTPTR
; GBLK ^= 1; // Toggle block number
; SOURCE LINE # 302
MOV DPTR,#GBLK
MOVX A,@DPTR
XRL A,#01H
MOVX @DPTR,A
; CmdBuf[1]=CID; // CID
; SOURCE LINE # 303
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#CmdBuf?1978
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#01H
MOV A,R7
LCALL ?C?CSTOPTR
; CmdBuf[2]=0xb8; // INF:CLA
; SOURCE LINE # 304
MOV DPTR,#02H
MOV A,#0B8H
LCALL ?C?CSTOPTR
; CmdBuf[3]=0xb0; // INF:INS
; SOURCE LINE # 305
MOV DPTR,#03H
MOV A,#0B0H
LCALL ?C?CSTOPTR
;
; CmdBuf[60]=0xb0;
; SOURCE LINE # 307
MOV DPTR,#03CH
MOV A,#0B0H
LCALL ?C?CSTOPTR
; CmdBuf[61]=0x60;
; SOURCE LINE # 308
MOV DPTR,#03DH
MOV A,#060H
LCALL ?C?CSTOPTR
; CmdBuf[62]=0x06;
; SOURCE LINE # 309
MOV DPTR,#03EH
MOV A,#06H
LCALL ?C?CSTOPTR
; CmdBuf[63]=0x40; //for RSA encode data array.
; SOURCE LINE # 310
MOV DPTR,#03FH
MOV A,#040H
LCALL ?C?CSTOPTR
;
; if(Encrypt)
; SOURCE LINE # 312
MOV DPTR,#Encrypt?1979
MOVX A,@DPTR
MOV DPTR,#CmdBuf?1978
JZ ?C0080
; CmdBuf[4]=0x78;// INF:P1
; SOURCE LINE # 313
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#04H
MOV A,#078H
SJMP ?C0099
?C0080:
; else
; CmdBuf[4]=0x68;// INF:P1
; SOURCE LINE # 315
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#04H
MOV A,#068H
?C0099:
LCALL ?C?CSTOPTR
?C0081:
; if(datalen == 64) CmdBuf[5]=0x02;
; SOURCE LINE # 316
MOV DPTR,#datalen?1980
MOVX A,@DPTR
MOV R7,A
CJNE A,#040H,?C0082
MOV DPTR,#CmdBuf?1978
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#05H
MOV A,#02H
SJMP ?C0102
?C0082:
; else if(datalen == 96) CmdBuf[5]=0x05;
; SOURCE LINE # 317
MOV A,R7
CJNE A,#060H,?C0084
MOV DPTR,#CmdBuf?1978
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#05H
MOV A,#05H
?C0100:
SJMP ?C0102
?C0084:
; else if(datalen == 128) CmdBuf[5]=0x08;
; SOURCE LINE # 318
MOV A,R7
CJNE A,#080H,?C0086
MOV DPTR,#CmdBuf?1978
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#05H
MOV A,#08H
?C0101:
SJMP ?C0102
?C0086:
; else if(datalen == 192) CmdBuf[5]=0x0b;
; SOURCE LINE # 319
MOV A,R7
CJNE A,#0C0H,?C0083
MOV DPTR,#CmdBuf?1978
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#05H
MOV A,#0BH
?C0102:
LCALL ?C?CSTOPTR
?C0083:
; CmdBuf[6]=datalen; // INF:Lc
; SOURCE LINE # 320
MOV DPTR,#datalen?1980
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#CmdBuf?1978
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#06H
MOV A,R7
LCALL ?C?CSTOPTR
; CmdBuf[datalen+7]=datalen; // INF:Le
; SOURCE LINE # 321
MOV DPTR,#datalen?1980
MOVX A,@DPTR
MOV R6,A
MOV R5,A
MOV A,R7
ADD A,#07H
MOV DPL,A
CLR A
RLC A
MOV DPH,A
MOV A,R6
LCALL ?C?CSTOPTR
;
; if(MProCommand(CmdBuf,datalen+10,CmdBuf,len,1,FWI) != MI_OK) return(!MI_OK);
; SOURCE LINE # 323
MOV A,R3
PUSH ACC
MOV A,R2
PUSH ACC
MOV A,R1
PUSH ACC
MOV A,R5
ADD A,#0AH
MOV R5,A
CLR A
RLC A
MOV R4,A
MOV DPTR,#CmdBuf?1978
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#?_MProCommand?BYTE+05H
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#len?1981
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#?_MProCommand?BYTE+08H
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
INC DPTR
MOV A,#01H
MOVX @DPTR,A
MOV DPTR,#FWI
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#?_MProCommand?BYTE+0CH
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
POP ACC
MOV R1,A
POP ACC
MOV R2,A
POP ACC
MOV R3,A
LCALL _MProCommand
MOV A,R7
JZ ?C0089
MOV R7,#01H
RET
?C0089:
;
; if(CmdBuf[*len-4]==0x90) return(MI_OK);
; SOURCE LINE # 325
MOV DPTR,#len?1981
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?ILDPTR
ADD A,#0FCH
MOV R7,A
MOV A,B
ADDC A,#0FFH
MOV R6,A
MOV DPTR,#CmdBuf?1978
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPL,R7
MOV DPH,R6
LCALL ?C?CLDOPTR
CJNE A,#090H,?C0091
MOV R7,#00H
RET
?C0091:
; else if((CmdBuf[0]&0xf0) == 0xf0)
; SOURCE LINE # 326
LCALL ?C?CLDPTR
ANL A,#0F0H
XRL A,#0F0H
JZ $ + 5H
LJMP ?C0093
; {
; SOURCE LINE # 327
; //M500PcdWriteRegister(0x1b,regvalue5); // For testing purpose
;
; if(nn=MProCommand(CmdBuf,5,CmdBuf,len,1,CmdBuf[2]&0x0f) != MI_OK) return(!MI_OK);
; SOURCE LINE # 330
MOV A,R3
PUSH ACC
MOV A,R2
PUSH ACC
MOV A,R1
PUSH ACC
MOV DPTR,#CmdBuf?1978
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#?_MProCommand?BYTE+05H
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#len?1981
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#?_MProCommand?BYTE+08H
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
INC DPTR
MOV A,#01H
MOVX @DPTR,A
MOV DPTR,#CmdBuf?1978
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#02H
LCALL ?C?CLDOPTR
ANL A,#0FH
MOV R7,A
MOV DPTR,#?_MProCommand?BYTE+0CH
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
POP ACC
MOV R1,A
POP ACC
MOV R2,A
POP ACC
MOV R3,A
MOV R5,#05H
MOV R4,#00H
LCALL _MProCommand
MOV A,R7
MOV R6,#00H
JZ ?C0095
MOV R7,#01H
SJMP ?C0096
?C0095:
MOV R7,#00H
?C0096:
MOV DPTR,#nn?1983
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
ORL A,R6
JZ ?C0094
MOV R7,#01H
RET
?C0094:
; mm=*len;
; SOURCE LINE # 331
MOV DPTR,#len?1981
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?ILDPTR
MOV R7,A
MOV R6,B
MOV DPTR,#mm?1982
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; if(CmdBuf[(*len)-4]==0x90) return(MI_OK);
; SOURCE LINE # 332
ADD A,#0FCH
MOV R7,A
MOV A,R6
ADDC A,#0FFH
MOV R6,A
MOV DPTR,#CmdBuf?1978
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPL,R7
MOV DPH,R6
LCALL ?C?CLDOPTR
CJNE A,#090H,?C0090
MOV R7,#00H
RET
; }
; SOURCE LINE # 333
?C0093:
; else return(!MI_OK);
; SOURCE LINE # 334
MOV R7,#01H
; }
; SOURCE LINE # 335
?C0090:
RET
; END OF _EvalOS_RSAEncpDecp
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -