function CHexToBin;external 'aa.dll';
function SingleDES;external 'Crwicc.dll';
function fasan(card_num:string;key_num:string):string;stdcall;
var
card_data,key,back_data:array of byte;
left_key,right_key,des_data1,des_data2,des_data3:array [0..7] of byte;
i:integer;
card_num1,subkey:string;
dpk1:array of byte;
abcd:variant;
begin
setlength(key,16*sizeof(byte));
setlength(back_data,16*sizeof(byte));
setlength(dpk1,16*sizeof(byte));
setlength(card_data,8*sizeof(byte));
card_num1:=copy(card_num,length(card_num)-15,16);
CHexToBin(card_data[0],card_num1,length(card_num1));
abcd:=card_data[0];
chextobin(key[0],key_num,length(key_num));
for i:=0 to 7 do
begin
left_key[i]:=key[i];
end;
singledes(1,left_key[0],8,card_data[0],des_data1[0]);
singledes(2,right_key[0],8,des_data1[0],des_data2[0]);
singledes(1,left_key[0],8,des_data2[0],des_data3[0]);
for i:=0 to 7 do
subkey:=subkey+inttohex(dpk1[i],2);
result:=subkey;
end;
exports
fasan;
begin
end.