Changeset 679
- Timestamp:
- 12/04/09 10:38:35 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/reader-nagra.c
r678 r679 25 25 // Card Status checks 26 26 #define HAS_CW ((cam_state[2]&6)==6) 27 #define RENEW_SESSIONKEY ((cam_state[0]&64)== 64 || (cam_state[0]&32)==32)27 #define RENEW_SESSIONKEY ((cam_state[0]&64)==128 || (cam_state[0]&64)==64 || (cam_state[0]&32)==32) 28 28 #define SENDDATETIME ((cam_state[0]&16)==16) 29 29 // Datatypes … … 36 36 #define MAX_REC 20 37 37 #define SYSTEM_NAGRA 0x1800 38 #define SYSTEM_MASK 0xFF00 38 39 39 40 unsigned char XorSum(const unsigned char *mem, int len) … … 304 305 305 306 // RSA data can never be bigger than the modulo 306 //decryptedRsaDT08[63] |= static_dt08[0] & 0x80;307 static_dt08[64] |= static_dt08[0] & 0x80; 307 308 308 309 // IdeaCamKey … … 461 462 } 462 463 463 int chk_caid(ushort caid, CAIDTAB *ctab) 464 465 int chk_caid(CAIDTAB *ctab) 464 466 { 465 467 int n; 466 468 for (n=0; (n<CS_MAXCAIDTAB); n++) 467 if (caid == ctab->caid[n]) 468 { 469 cs_debug("[nagra-reader] switching back to Betacrypt mode"); 470 return 1; 469 { 470 if ((ctab->caid[n]&SYSTEM_MASK)==SYSTEM_NAGRA && (ctab->caid[n]&0xFF)>0) 471 { 472 cs_debug("[nagra-reader] using nagra mode"); 473 return 1; 474 } 471 475 } 476 cs_debug("[nagra-reader] using irdeto mode"); 472 477 return 0; 473 478 } … … 476 481 { 477 482 memset(rom, 0, 15); 478 // hardcoded for testing only479 483 reader[ridx].nprov = 1; 480 484 memset (reader[ridx].sa, 0xff, sizeof (reader[ridx].sa)); … … 491 495 else if (!memcmp(atr+4, "IRDETO", 6)) 492 496 { 497 /* 493 498 cs_debug("[nagra-reader] support for non native nagra cards not finished Switching back to irdeto mode"); 494 499 return 0; 495 /* 496 cs_debug("[nagra-reader] detect tunneled nagra card T14 protocol"); 500 */ 501 cs_debug("[nagra-reader] detect Irdeto tunneled nagra card"); 502 if(!chk_caid(&reader[ridx].ctab)) return 0; 497 503 is_pure_nagra=0; 498 504 if(!do_cmd(0x10,0x02,0x90,0x11,0)) … … 502 508 } 503 509 memcpy(rom,cta_res+2,15); 504 */505 510 } 506 511 else return 0; … … 527 532 if(!GetDataType(0x04,0x44,MAX_REC)) return 0; 528 533 cs_debug("[nagra-reader] DT04 DONE"); 529 if(!GetDataType(TIERS,0x57,MAX_REC)) return 0;530 cs_debug("[nagra-reader] TIERS DONE");531 534 if(!GetDataType(DT06,0x16,MAX_REC)) return 0; 532 535 cs_debug("[nagra-reader] DT06 DONE"); … … 543 546 int nagra2_card_info(void) 544 547 { 548 if(!GetDataType(TIERS,0x57,MAX_REC)) return 0; 549 cs_debug("[nagra-reader] TIERS DONE"); 545 550 cs_log("ROM: %c %c %c %c %c %c %c %c", rom[0], rom[1], rom[2],rom[3], rom[4], rom[5], rom[6], rom[7]); 546 551 cs_log("REV: %c %c %c %c %c %c %c", rom[8], rom[9], rom[10], rom[11], rom[12], rom[13], rom[14]); … … 553 558 int nagra2_do_ecm(ECM_REQUEST *er) 554 559 { 555 int retry; 560 if RENEW_SESSIONKEY NegotiateSessionKey(); 561 if SENDDATETIME DateTimeCMD(); 556 562 if(!do_cmd(er->ecm[3],er->ecm[4]+2,0x87,0x02, er->ecm+3+2)) 557 563 { … … 559 565 return (0); 560 566 } 561 cs_sleepms(100); 562 for(retry = 0;;retry++) 563 { 564 if(CamStateRequest()) break; 565 if( retry == 7 ) return 0; 566 } 567 //cs_sleepms(100); 568 CamStateRequest(); 567 569 568 570 if (HAS_CW && do_cmd(0x1C,0x02,0x9C,0x36,NULL)) … … 573 575 memset(v,0,sizeof(v)); 574 576 idea_cbc_encrypt(&cta_res[30],er->cw+8,8,&ksSession,v,IDEA_DECRYPT); 577 // after cw received. //Todo: Do not block!// 578 CamStateRequest(); 579 //cs_sleepms(20); 580 if RENEW_SESSIONKEY NegotiateSessionKey(); 581 if SENDDATETIME DateTimeCMD(); 575 582 return (1); 576 583 }
Note:
See TracChangeset
for help on using the changeset viewer.