Changeset 8484
- Timestamp:
- 03/06/13 01:32:05 (11 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/globals.h
r8483 r8484 1045 1045 struct s_client *next; //make client a linked list 1046 1046 struct s_client *nexthashed; 1047 };1048 1049 struct s_CmdTabEntry { // for videoguard in s_reader1050 unsigned char cla;1051 unsigned char cmd;1052 unsigned char len;1053 unsigned char mode;1054 };1055 1056 struct s_CmdTab {1057 unsigned char index;1058 unsigned char size;1059 unsigned char Nentries;1060 unsigned char dummy;1061 struct s_CmdTabEntry e[1];1062 1047 }; 1063 1048 … … 1337 1322 1338 1323 AES_ENTRY *aes_list; // multi AES linked list 1339 // variables from reader-videoguard*1340 1324 int8_t ndsversion; // 0 auto (default), 1 NDS1, 12 NDS1+, 2 NDS2 1341 const char *card_desc;1342 int32_t card_baseyear;1343 int32_t card_tierstart;1344 int32_t card_system_version;1345 1325 time_t card_valid_to; 1346 struct s_CmdTab *cmd_table;1347 uint16_t cardkeys[3][32];1348 unsigned char stateD3A[16];1349 AES_KEY ekey;1350 AES_KEY astrokey;1351 1326 //ratelimit 1352 1327 int32_t ratelimitecm; -
trunk/reader-videoguard-common.c
r7999 r8484 30 30 void set_known_card_info(struct s_reader * reader, const unsigned char * atr, const uint32_t *atr_size) 31 31 { 32 struct videoguard_data *csystem_data = reader->csystem_data; 32 33 /* Set to sensible default values */ 33 reader->card_baseyear = 1997;34 reader->card_tierstart = 0;35 reader->card_system_version = NDSUNKNOWN;36 reader->card_desc = "VideoGuard Unknown Card";34 csystem_data->card_baseyear = 1997; 35 csystem_data->card_tierstart = 0; 36 csystem_data->card_system_version = NDSUNKNOWN; 37 csystem_data->card_desc = "VideoGuard Unknown Card"; 37 38 38 39 NDS_ATR_ENTRY nds_atr_table[]={ // {atr}, atr len, base year, tier start, nds version, description … … 198 199 if ((hist_size == table_hist_size) 199 200 && (memcmp (hist, table_hist, hist_size) == 0)) { 200 reader->card_baseyear=nds_atr_table[i].base_year;201 reader->card_tierstart=nds_atr_table[i].tier_start;202 reader->card_system_version = nds_atr_table[i].nds_version;203 reader->card_desc = nds_atr_table[i].desc;201 csystem_data->card_baseyear=nds_atr_table[i].base_year; 202 csystem_data->card_tierstart=nds_atr_table[i].tier_start; 203 csystem_data->card_system_version = nds_atr_table[i].nds_version; 204 csystem_data->card_desc = nds_atr_table[i].desc; 204 205 break; 205 206 } … … 232 233 void cAES_SetKey(struct s_reader * reader, const unsigned char *key) 233 234 { 234 AES_set_encrypt_key(key,128,&(reader->ekey)); 235 struct videoguard_data *csystem_data = reader->csystem_data; 236 AES_set_encrypt_key(key,128,&(csystem_data->ekey)); 235 237 } 236 238 237 239 int32_t cAES_Encrypt(struct s_reader * reader, const unsigned char *data, int32_t len, unsigned char *crypted) 238 240 { 241 struct videoguard_data *csystem_data = reader->csystem_data; 239 242 len=(len+15)&(~15); // pad up to a multiple of 16 240 243 int32_t i; 241 for(i=0; i<len; i+=16) AES_encrypt(data+i,crypted+i,&( reader->ekey));244 for(i=0; i<len; i+=16) AES_encrypt(data+i,crypted+i,&(csystem_data->ekey)); 242 245 return len; 243 246 } … … 311 314 }; 312 315 #endif 313 memcpy(reader->cardkeys[1],key1,sizeof(reader->cardkeys[1])); 314 memcpy(reader->cardkeys[2],key2,sizeof(reader->cardkeys[2])); 316 struct videoguard_data *csystem_data = reader->csystem_data; 317 memcpy(csystem_data->cardkeys[1],key1,sizeof(csystem_data->cardkeys[1])); 318 memcpy(csystem_data->cardkeys[2],key2,sizeof(csystem_data->cardkeys[2])); 315 319 } 316 320 317 321 void cCamCryptVG_GetCamKey(struct s_reader * reader, unsigned char *buff) 318 322 { 323 struct videoguard_data *csystem_data = reader->csystem_data; 319 324 uint16_t *tb2=(uint16_t *)buff, c=1; 320 325 memset(tb2,0,64); 321 326 tb2[0]=1; 322 327 int32_t i; 323 for(i=0; i<32; i++) cCamCryptVG_LongMult(tb2,&c, reader->cardkeys[1][i],0);328 for(i=0; i<32; i++) cCamCryptVG_LongMult(tb2,&c,csystem_data->cardkeys[1][i],0); 324 329 swap_lb (buff, 64); 325 330 } … … 342 347 static void cCamCryptVG_Process_D0(struct s_reader * reader, const unsigned char *ins, unsigned char *data) 343 348 { 349 struct videoguard_data *csystem_data = reader->csystem_data; 344 350 switch(ins[1]) { 345 351 case 0xb4: 346 352 swap_lb (data, 64); 347 memcpy( reader->cardkeys[0],data,sizeof(reader->cardkeys[0]));353 memcpy(csystem_data->cardkeys[0],data,sizeof(csystem_data->cardkeys[0])); 348 354 break; 349 355 case 0xbc: 350 356 { 351 357 swap_lb (data, 64); 352 const uint16_t *key1=(const uint16_t *) reader->cardkeys[1];358 const uint16_t *key1=(const uint16_t *)csystem_data->cardkeys[1]; 353 359 uint16_t key2[32]; 354 memcpy(key2, reader->cardkeys[2],sizeof(key2));360 memcpy(key2,csystem_data->cardkeys[2],sizeof(key2)); 355 361 int32_t count2; 356 362 uint16_t iidata[32]; … … 386 392 static void cCamCryptVG_Process_D1(struct s_reader * reader, const unsigned char *ins, unsigned char *data, const unsigned char *status) 387 393 { 394 struct videoguard_data *csystem_data = reader->csystem_data; 388 395 unsigned char iter[16], tmp[16]; 389 396 memset(iter,0,sizeof(iter)); 390 397 memcpy(iter,ins,5); 391 xor16(iter, reader->stateD3A,iter);392 memcpy( reader->stateD3A,iter,sizeof(iter));398 xor16(iter,csystem_data->stateD3A,iter); 399 memcpy(csystem_data->stateD3A,iter,sizeof(iter)); 393 400 394 401 int32_t datalen=status-data; … … 415 422 xor16(iter,in,tmp); 416 423 cCamCryptVG_ReorderAndEncrypt(reader,tmp); 417 xor16(tmp, reader->stateD3A,iter);418 } 419 } 420 memcpy( reader->stateD3A,tmp,16);424 xor16(tmp,csystem_data->stateD3A,iter); 425 } 426 } 427 memcpy(csystem_data->stateD3A,tmp,16); 421 428 } 422 429 423 430 static void cCamCryptVG_Decrypt_D3(struct s_reader * reader, unsigned char *ins, unsigned char *data, const unsigned char *status) 424 431 { 432 struct videoguard_data *csystem_data = reader->csystem_data; 425 433 if(ins[4]>16) ins[4]-=16; 426 if(ins[1]==0xbe) memset( reader->stateD3A,0,sizeof(reader->stateD3A));434 if(ins[1]==0xbe) memset(csystem_data->stateD3A,0,sizeof(csystem_data->stateD3A)); 427 435 428 436 unsigned char tmp[16]; 429 437 memset(tmp,0,sizeof(tmp)); 430 438 memcpy(tmp,ins,5); 431 xor16(tmp, reader->stateD3A,reader->stateD3A);439 xor16(tmp,csystem_data->stateD3A,csystem_data->stateD3A); 432 440 433 441 int32_t len1=ins[4]; … … 440 448 for(blockindex=0; blockindex<blocklen; blockindex++) { 441 449 iter[0]+=blockindex; 442 xor16(iter, reader->stateD3A,iter);450 xor16(iter,csystem_data->stateD3A,iter); 443 451 cCamCryptVG_ReorderAndEncrypt(reader,iter); 444 452 xor16(iter,&data[blockindex*16],states[blockindex]); … … 447 455 if(c<16) memset(&states[blockindex][c],0,16-c); 448 456 } 449 xor16(states[blockindex], reader->stateD3A,reader->stateD3A);450 cCamCryptVG_RotateRightAndHash( reader->stateD3A);457 xor16(states[blockindex],csystem_data->stateD3A,csystem_data->stateD3A); 458 cCamCryptVG_RotateRightAndHash(csystem_data->stateD3A); 451 459 } 452 460 memset(tmp,0,sizeof(tmp)); 453 461 memcpy(tmp+5,status,2); 454 xor16(tmp, reader->stateD3A,reader->stateD3A);455 cCamCryptVG_ReorderAndEncrypt(reader, reader->stateD3A);456 457 memcpy( reader->stateD3A,status-16,sizeof(reader->stateD3A));458 cCamCryptVG_ReorderAndEncrypt(reader, reader->stateD3A);462 xor16(tmp,csystem_data->stateD3A,csystem_data->stateD3A); 463 cCamCryptVG_ReorderAndEncrypt(reader,csystem_data->stateD3A); 464 465 memcpy(csystem_data->stateD3A,status-16,sizeof(csystem_data->stateD3A)); 466 cCamCryptVG_ReorderAndEncrypt(reader,csystem_data->stateD3A); 459 467 460 468 memcpy(data,states[0],len1); … … 554 562 555 563 void memorize_cmd_table (struct s_reader * reader, const unsigned char *mem, int32_t size){ 556 if (cs_malloc(&reader->cmd_table, size)) 557 memcpy(reader->cmd_table,mem,size); 564 struct videoguard_data *csystem_data = reader->csystem_data; 565 if (cs_malloc(&csystem_data->cmd_table, size)) 566 memcpy(csystem_data->cmd_table,mem,size); 558 567 } 559 568 560 569 int32_t cmd_table_get_info(struct s_reader * reader, const unsigned char *cmd, unsigned char *rlen, unsigned char *rmode) 561 570 { 562 struct s_CmdTabEntry *pcte=reader->cmd_table->e; 571 struct videoguard_data *csystem_data = reader->csystem_data; 572 struct s_CmdTabEntry *pcte=csystem_data->cmd_table->e; 563 573 int32_t i; 564 for(i=0; i< reader->cmd_table->Nentries; i++,pcte++)574 for(i=0; i< csystem_data->cmd_table->Nentries; i++,pcte++) 565 575 if(cmd[1]==pcte->cmd) { 566 576 *rlen=pcte->len; … … 573 583 int32_t cmd_exists(struct s_reader * reader, const unsigned char *cmd) 574 584 { 575 struct s_CmdTabEntry *pcte=reader->cmd_table->e; 585 struct videoguard_data *csystem_data = reader->csystem_data; 586 struct s_CmdTabEntry *pcte=csystem_data->cmd_table->e; 576 587 int32_t i; 577 for(i=0; i< reader->cmd_table->Nentries; i++,pcte++)588 for(i=0; i< csystem_data->cmd_table->Nentries; i++,pcte++) 578 589 if(cmd[1]==pcte->cmd) { 579 590 return 1; … … 918 929 return; 919 930 931 struct videoguard_data *csystem_data = rdr->csystem_data; 920 932 if (vg_msgs == 0) 921 msgs_init( rdr->card_baseyear);933 msgs_init(csystem_data->card_baseyear); 922 934 923 935 if (data[0] != 0xFF || data[1] != 0xFF) … … 965 977 } 966 978 if (msg->mask == (1 << msg->nsubs) - 1) 967 write_msg(rdr, msg, rdr->card_baseyear);979 write_msg(rdr, msg, csystem_data->card_baseyear); 968 980 } 969 981 #endif -
trunk/reader-videoguard-common.h
r8325 r8484 9 9 #define NDS12 12 10 10 #define NDS2 2 11 12 struct s_CmdTabEntry { 13 uint8_t cla; 14 uint8_t cmd; 15 uint8_t len; 16 uint8_t mode; 17 }; 18 19 struct s_CmdTab { 20 uint8_t index; 21 uint8_t size; 22 uint8_t Nentries; 23 uint8_t dummy; 24 struct s_CmdTabEntry e[1]; 25 }; 26 27 struct videoguard_data { 28 const char *card_desc; 29 int32_t card_baseyear; 30 int32_t card_tierstart; 31 int32_t card_system_version; 32 time_t card_valid_to; 33 struct s_CmdTab *cmd_table; 34 uint16_t cardkeys[3][32]; 35 unsigned char stateD3A[16]; 36 AES_KEY ekey; 37 AES_KEY astrokey; 38 }; 11 39 12 40 typedef struct nds_atr { -
trunk/reader-videoguard1.c
r8345 r8484 40 40 static void read_tiers(struct s_reader *reader) 41 41 { 42 struct videoguard_data *csystem_data = reader->csystem_data; 42 43 def_resp; 43 44 // const unsigned char ins2a[5] = { 0x48, 0x2a, 0x00, 0x00, 0x00 }; … … 77 78 struct tm timeinfo; 78 79 memset(&timeinfo, 0, sizeof(struct tm)); 79 rev_date_calc_tm(&cta_res[4],&timeinfo, reader->card_baseyear);80 rev_date_calc_tm(&cta_res[4],&timeinfo,csystem_data->card_baseyear); 80 81 char tiername[83]; 81 82 cs_add_entitlement(reader, reader->caid, b2ll(4, reader->prid[0]), tier_id, 0, 0, mktime(&timeinfo), 4); … … 96 97 def_resp; 97 98 99 if (!cs_malloc(&reader->csystem_data, sizeof(struct videoguard_data))) 100 return ERROR; 101 struct videoguard_data *csystem_data = reader->csystem_data; 102 98 103 /* set information on the card stored in reader-videoguard-common.c */ 99 104 set_known_card_info(reader,atr,&atr_size); 100 105 101 if((reader->ndsversion != NDS1) && (( reader->card_system_version != NDS1) || (reader->ndsversion != NDSAUTO))) {106 if((reader->ndsversion != NDS1) && ((csystem_data->card_system_version != NDS1) || (reader->ndsversion != NDSAUTO))) { 102 107 /* known ATR and not NDS1 103 108 or unknown ATR and not forced to NDS1 … … 107 112 } 108 113 109 rdr_log(reader, "type: %s, baseyear: %i", reader->card_desc, reader->card_baseyear);114 rdr_log(reader, "type: %s, baseyear: %i", csystem_data->card_desc, csystem_data->card_baseyear); 110 115 if(reader->ndsversion == NDS1){ 111 116 rdr_log(reader, "forced to NDS1+"); … … 306 311 { 307 312 /* info is displayed in init, or when processing info */ 313 struct videoguard_data *csystem_data = reader->csystem_data; 308 314 rdr_log(reader, "card detected"); 309 rdr_log(reader, "type: %s", reader->card_desc);315 rdr_log(reader, "type: %s", csystem_data->card_desc); 310 316 read_tiers(reader); 311 317 return OK; -
trunk/reader-videoguard12.c
r7641 r8484 63 63 cs_clear_entitlement(reader); //reset the entitlements 64 64 65 struct videoguard_data *csystem_data = reader->csystem_data; 65 66 for (i = 0; i < num; i++) { 66 67 ins76[2] = i; … … 75 76 struct tm timeinfo; 76 77 memset(&timeinfo, 0, sizeof(struct tm)); 77 rev_date_calc_tm(&cta_res[4],&timeinfo, reader->card_baseyear);78 rev_date_calc_tm(&cta_res[4],&timeinfo,csystem_data->card_baseyear); 78 79 cs_add_entitlement(reader, reader->caid, b2ll(4, reader->prid[0]), tier_id, 0, 0, mktime(&timeinfo), 4); 79 80 char tiername[83]; … … 96 97 def_resp; 97 98 99 if (!cs_malloc(&reader->csystem_data, sizeof(struct videoguard_data))) 100 return ERROR; 101 struct videoguard_data *csystem_data = reader->csystem_data; 102 98 103 /* set information on the card stored in reader-videoguard-common.c */ 99 104 set_known_card_info(reader,atr,&atr_size); 100 105 101 if((reader->ndsversion != NDS12) && (( reader->card_system_version != NDS12) || (reader->ndsversion != NDSAUTO))) {106 if((reader->ndsversion != NDS12) && ((csystem_data->card_system_version != NDS12) || (reader->ndsversion != NDSAUTO))) { 102 107 /* known ATR and not NDS12 103 108 or unknown ATR and not forced to NDS12 … … 107 112 } 108 113 109 rdr_log(reader, "type: %s, baseyear: %i", reader->card_desc, reader->card_baseyear);114 rdr_log(reader, "type: %s, baseyear: %i", csystem_data->card_desc, csystem_data->card_baseyear); 110 115 if(reader->ndsversion == NDS12){ 111 116 rdr_log(reader, "forced to NDS12"); … … 356 361 { 357 362 /* info is displayed in init, or when processing info */ 363 struct videoguard_data *csystem_data = reader->csystem_data; 358 364 rdr_log(reader, "card detected"); 359 rdr_log(reader, "type: %s", reader->card_desc);365 rdr_log(reader, "type: %s", csystem_data->card_desc); 360 366 read_tiers(reader); 361 367 return OK; -
trunk/reader-videoguard2.c
r8411 r8484 8 8 static void dimeno_PostProcess_Decrypt(struct s_reader * reader, unsigned char *rxbuff, unsigned char *cw) 9 9 { 10 struct videoguard_data *csystem_data = reader->csystem_data; 10 11 unsigned char tag,len,len2; 11 12 bool valid_0x55=0; … … 34 35 if(valid_0x55){ 35 36 memcpy(buffer,rxbuff+5,8); 36 AES_decrypt(buffer,buffer,&( reader->astrokey));37 AES_decrypt(buffer,buffer,&(csystem_data->astrokey)); 37 38 memcpy(cw+0,buffer,8); // copy calculated CW in right place 38 39 } … … 247 248 int32_t i; 248 249 unsigned char ins76[5] = { 0xD0,0x76,0x00,0x00,0x00 }; 250 struct videoguard_data *csystem_data = reader->csystem_data; 249 251 250 252 // some cards start real tiers info in middle of tier info 251 253 // and have blank tiers between old tiers and real tiers eg 09AC 252 int32_t starttier = reader->card_tierstart;254 int32_t starttier = csystem_data->card_tierstart; 253 255 bool stopemptytier = 1; 254 256 if (!starttier) … … 277 279 struct tm timeinfo; 278 280 memset(&timeinfo, 0, sizeof(struct tm)); 279 rev_date_calc_tm(&cta_res[4],&timeinfo, reader->card_baseyear);281 rev_date_calc_tm(&cta_res[4],&timeinfo,csystem_data->card_baseyear); 280 282 cs_add_entitlement(reader, reader->caid, b2ll(4, reader->prid[0]), tier_id, 0, 0, mktime(&timeinfo), 4); 281 283 … … 300 302 def_resp; 301 303 304 if (!cs_malloc(&reader->csystem_data, sizeof(struct videoguard_data))) 305 return ERROR; 306 struct videoguard_data *csystem_data = reader->csystem_data; 307 302 308 /* set information on the card stored in reader-videoguard-common.c */ 303 309 set_known_card_info(reader,atr,&atr_size); 304 310 305 311 if((reader->ndsversion != NDS2) && 306 ((( reader->card_system_version != NDS2) && (reader->card_system_version != NDSUNKNOWN)) ||312 (((csystem_data->card_system_version != NDS2) && (csystem_data->card_system_version != NDSUNKNOWN)) || 307 313 (reader->ndsversion != NDSAUTO))) { 308 314 /* known ATR and not NDS2 … … 311 317 } 312 318 313 rdr_debug_mask(reader, D_READER, "type: %s, baseyear: %i", reader->card_desc, reader->card_baseyear);319 rdr_debug_mask(reader, D_READER, "type: %s, baseyear: %i", csystem_data->card_desc, csystem_data->card_baseyear); 314 320 if(reader->ndsversion == NDS2){ 315 321 rdr_debug_mask(reader, D_READER, "forced to NDS2"); … … 640 646 for(a=0; a<4; a++) 641 647 dimeno_magic[a]=dimeno_magic[a]^boxID[a]; 642 AES_set_decrypt_key(dimeno_magic,128,&( reader->astrokey));648 AES_set_decrypt_key(dimeno_magic,128,&(csystem_data->astrokey)); 643 649 644 650 rdr_log(reader, "type: %s, caid: %04X", 645 reader->card_desc,651 csystem_data->card_desc, 646 652 reader->caid); 647 653 rdr_log_sensitive(reader, "serial: {%02X%02X%02X%02X}, BoxID: {%02X%02X%02X%02X}, baseyear: %i", 648 654 reader->hexserial[2],reader->hexserial[3],reader->hexserial[4],reader->hexserial[5], 649 655 boxID[0],boxID[1],boxID[2],boxID[3], 650 reader->card_baseyear);656 csystem_data->card_baseyear); 651 657 rdr_log(reader, "ready for requests"); 652 658 … … 805 811 { 806 812 /* info is displayed in init, or when processing info */ 813 struct videoguard_data *csystem_data = reader->csystem_data; 807 814 rdr_log(reader, "card detected"); 808 rdr_log(reader, "type: %s", reader->card_desc);815 rdr_log(reader, "type: %s", csystem_data->card_desc); 809 816 if (reader->ins7e11_fast_reset != 1) { 810 817 vg2_read_tiers(reader);
Note:
See TracChangeset
for help on using the changeset viewer.