Changeset 39
- Timestamp:
- 04/05/09 01:37:35 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/reader-cryptoworks.c
r8 r39 158 158 } 159 159 160 int cryptoworks_send_pin(void) 161 { 162 unsigned char insPIN[] = { 0xA4, 0x20, 0x00, 0x00, 0x04, 0x00,0x00,0x00,0x00 }; //Verify PIN 163 164 if(reader[ridx].pincode[0] && (reader[ridx].pincode[0]&0xF0)==0x30) 165 { 166 memcpy(insPIN+5,reader[ridx].pincode,4); 167 168 write_cmd(insPIN, insPIN+5); 169 cs_ri_log("[cryptoworks]-sending pincode to card"); 170 if((cta_res[0]==0x98)&&(cta_res[1]==0x04)) cs_ri_log("[cryptoworks]-bad pincode"); 171 172 return(1); 173 } 174 175 return(0); 176 } 177 178 int cryptoworks_disbale_pin(void) 179 { 180 unsigned char insPIN[] = { 0xA4, 0x26, 0x00, 0x00, 0x04, 0x00,0x00,0x00,0x00 }; //disable PIN 181 182 if(reader[ridx].pincode[0] && (reader[ridx].pincode[0]&0xF0)==0x30) 183 { 184 memcpy(insPIN+5,reader[ridx].pincode,4); 185 186 write_cmd(insPIN, insPIN+5); 187 cs_ri_log("[cryptoworks]-disable pincode to card"); 188 if((cta_res[0]==0x98)&&(cta_res[1]==0x04)) cs_ri_log("[cryptoworks]-bad pincode"); 189 return(1); 190 } 191 192 return(0); 193 } 194 160 195 int cryptoworks_card_init(uchar *atr, int atrsize) 161 196 { … … 200 235 if (read_record(0x80)>=7) // read serial 201 236 memcpy(reader[ridx].hexserial, cta_res+2, 5); 202 cs_ri_log("type: cryptoworks, caid: %04X, serial: %llu",203 reader[ridx].caid[0], b2ll(5, reader[ridx].hexserial) );237 cs_ri_log("type: cryptoworks, caid: %04X, ascii serial: %llu, hex serial: %s", 238 reader[ridx].caid[0], b2ll(5, reader[ridx].hexserial),cs_hexdump(0, reader[ridx].hexserial, 5)); 204 239 205 240 if (read_record(0x9E)>=66) // read ISK … … 252 287 cs_ri_log("providers: %d (%s)", reader[ridx].nprov, ptxt+1); 253 288 cs_log("ready for requests"); 289 290 cryptoworks_disbale_pin(); //by KrazyIvan 291 254 292 return(1); 255 293 } … … 433 471 int cryptoworks_do_emm(EMM_PACKET *ep) 434 472 { 473 uchar insEMM_GA[] = {0xA4, 0x44, 0x00, 0x00, 0x00}; 474 uchar insEMM_SA[] = {0xA4, 0x48, 0x00, 0x00, 0x00}; 475 uchar insEMM_UA[] = {0xA4, 0x42, 0x00, 0x00, 0x00}; 435 476 int rc=0; 436 477 uchar *emm=ep->emm; 437 478 479 /* this original 438 480 if ((emm[0]==0x8f) && (emm[3]==0xa4)) // emm via camd3.5x 439 { 481 { 440 482 ep->type=emm[4]; 441 483 write_cmd(emm+3, emm+3+CMD_LEN); … … 443 485 rc=1; 444 486 } 487 */ 488 489 //by KrazyIvan 490 ep->type=emm[0]; 491 //cs_log("EMM Dump:..: %s",cs_hexdump(1, emm, emm[2])); 492 switch(emm[0]) 493 { 494 // emm via camd3.5x 495 case 0x8F: 496 if(emm[3]==0xA4) 497 { 498 ep->type=emm[4]; 499 //cs_log("EMM Dump: CMD: %s", cs_hexdump(1, emm+3, 5)); 500 //cs_log("EMM Dump: DATA: %s",cs_hexdump(1, emm+8, emm[7])); 501 write_cmd(emm+3, emm+3+CMD_LEN); 502 rc=((cta_res[0]==0x90)&&(cta_res[1]==0x00)); 503 } 504 break; 505 506 //GA 507 case 0x88: 508 case 0x89: 509 if(emm[3]==0xA9 && emm[4]==0xFF && emm[8]==0x83 && emm[9]==0x01) 510 { 511 ep->type=insEMM_GA[1]; 512 insEMM_GA[4]=ep->emm[2]-2; 513 //cs_log("EMM Dump: CMD: %s", cs_hexdump(1, insEMM_GA, 5)); 514 //cs_log("EMM Dump: DATA: %s",cs_hexdump(1, emm+5, insEMM_GA[4])); 515 //cs_log("EMM Dump: IF: %02X == %02X",emm[7],(insEMM_GA[4]-3)); 516 517 if(emm[7]==insEMM_GA[4]-3) 518 { 519 write_cmd(insEMM_GA, emm+5); 520 rc=((cta_res[0]==0x90)&&(cta_res[1]==0x00)); 521 } 522 } 523 break; 524 525 //SA 526 case 0x84: 527 if(emm[3]==0xA9 && emm[4]==0xFF && emm[12]==0x80 && emm[13]==0x04) 528 { 529 ep->type=insEMM_SA[1]; 530 insEMM_SA[4]=ep->emm[2]-6; 531 //cs_log("EMM Dump: CMD: %s", cs_hexdump(1, insEMM_SA, 5)); 532 //cs_log("EMM Dump: DATA: %s",cs_hexdump(1, emm+9, insEMM_SA[4])); 533 //cs_log("EMM Dump: IF: %02X == %02X",emm[11],(insEMM_SA[4]-3)); 534 535 if(emm[11]==insEMM_SA[4]-3) 536 { 537 write_cmd(insEMM_SA, emm+9); 538 rc=((cta_res[0]==0x90)&&(cta_res[1]==0x00)); 539 } 540 } 541 break; 542 543 //UA 544 case 0x82: 545 if(emm[3]==0xA9 && emm[4]==0xFF && emm[13]==0x80 && emm[14]==0x05) 546 { 547 ep->type=insEMM_UA[1]; 548 insEMM_UA[4]=ep->emm[2]-7; 549 //cs_log("EMM Dump: CMD: %s", cs_hexdump(1, insEMM_UA, 5)); 550 //cs_log("EMM Dump: DATA: %s",cs_hexdump(1, emm+10, insEMM_UA[4])); 551 //cs_log("EMM Dump: IF: %02X == %02X",emm[12],(insEMM_UA[4]-3)); 552 553 if(emm[12]==insEMM_UA[4]-3) 554 { 555 //cryptoworks_send_pin(); //?? may be 556 write_cmd(insEMM_UA, emm+10); 557 rc=((cta_res[0]==0x90)&&(cta_res[1]==0x00)); 558 } 559 } 560 break; 561 } 562 445 563 return(rc); 446 564 } … … 484 602 } 485 603 } 604 //================================================================================ 605 //by KrazyIvan 606 select_file(0x0f, 0x00); // select provider channel 607 write_cmd(insA21, insA21+5); 608 if (cta_res[0]==0x9f) 609 { 610 insB2[4]=cta_res[1]; 611 for(insB2[3]=0; (cta_res[0]!=0x94)||(cta_res[1]!=0x2); insB2[3]=1) 612 { 613 read_cmd(insB2, NULL); // read chid 614 if (cta_res[0]!=0x94) 615 { 616 char ds[16], de[16]; 617 chid_date(cta_res+28, ds, sizeof(ds)-1); 618 chid_date(cta_res+30, de, sizeof(de)-1); 619 cta_res[27]=0; 620 cs_ri_log("chid: %02X%02X, date: %s - %s, name: %s", 621 cta_res[6], cta_res[7], ds, de, trim(cta_res+10)); 622 } 623 } 624 } 625 //================================================================================ 626 486 627 } 487 628 return(1);
Note:
See TracChangeset
for help on using the changeset viewer.