Changeset 3050 for trunk/reader-videoguard12.c
- Timestamp:
- 09/13/10 05:30:06 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/reader-videoguard12.c
r3049 r3050 2 2 #include "reader-common.h" 3 3 #include "reader-videoguard-common.h" 4 5 ////// ====================================================================================6 int VG12_BASEYEAR = 1997;7 8 static const unsigned short NdTabB001[0x15][0x20]= {9 { 0xEAF1,0x0237,0x29D0,0xBAD2,0xE9D3,0x8BAE,0x2D6D,0xCD1B,0x538D,0xDE6B,0xA634,0xF81A,0x18B5,0x5087,0x14EA,0x672E,10 0xF0FC,0x055E,0x62E5,0xB78F,0x5D09,0x0003,0xE4E8,0x2DCE,0x6BE0,0xAC4E,0xF485,0x6967,0xF28C,0x97A0,0x01EF,0x0100 },11 { 0xC539,0xF5B9,0x9099,0x013A,0xD4B9,0x6AB5,0xEA67,0x7EB4,0x6C30,0x4BF0,0xB810,0xB0B5,0xB76D,0xA751,0x1AE7,0x14CA,12 0x4F4F,0x1586,0x2608,0x10B1,0xE7E1,0x48BE,0x7DDD,0x5ECB,0xCFBF,0x323B,0x8B31,0xB131,0x0F1A,0x664B,0x0140,0x0100 },13 { 0x3C7D,0xBDC4,0xFEC7,0x26A6,0xB0A0,0x6E55,0xF710,0xF9BF,0x0023,0xE81F,0x41CA,0xBE32,0xB461,0xE92D,0xF1AF,0x409F,14 0xFC85,0xFE5B,0x7FCE,0x17F5,0x01AB,0x4A46,0xEB05,0xA251,0xDC6F,0xF0C0,0x10F0,0x1D51,0xEFAA,0xE9BF,0x0100,0x0100 },15 { 0x1819,0x0CAA,0x9067,0x607A,0x7576,0x1CBC,0xE51D,0xBF77,0x7EC6,0x839E,0xB695,0xF096,0xDC10,0xCB69,0x4654,0x8E68,16 0xD62D,0x4F1A,0x4227,0x92AC,0x9064,0x6BD1,0x1E75,0x2747,0x00DA,0xA6A6,0x6CF1,0xD151,0xBE56,0x3E33,0x0128,0x0100 },17 { 0x4091,0x09ED,0xD494,0x6054,0x1869,0x71D5,0xB572,0x7BF1,0xE925,0xEE2D,0xEEDE,0xA13C,0x6613,0x9BAB,0x122D,0x7AE4,18 0x5268,0xE6C9,0x50CB,0x79A1,0xF212,0xA062,0x6B48,0x70B3,0xF6B0,0x06D5,0xF8AB,0xECF5,0x6255,0xEDD8,0x79D2,0x290A },19 { 0xD3CF,0x014E,0xACB3,0x8F6B,0x0F2C,0xA5D8,0xE8E0,0x863D,0x80D5,0x5705,0x658A,0x8BC2,0xEE46,0xD3AE,0x0199,0x0100,20 0x4A35,0xABE4,0xF976,0x935A,0xA8A5,0xBAE9,0x24D0,0x71AA,0xB3FE,0x095E,0xAB06,0x4CD5,0x2F0D,0x1ACB,0x59F3,0x4C50 },21 { 0xFD27,0x0F8E,0x191A,0xEEE7,0x2F49,0x3A05,0x3267,0x4F88,0x38AE,0xFCE9,0x9476,0x18C6,0xF961,0x4EF0,0x39D0,0x42E6,22 0xB747,0xE625,0xB68E,0x5100,0xF92A,0x86FE,0xE79B,0xEE91,0x21D5,0x4C3C,0x683D,0x5AD1,0x1B49,0xF407,0x0194,0x0100 },23 { 0x4BF9,0xDC0D,0x9478,0x5174,0xCB4A,0x8A89,0x4D6A,0xFED8,0xF123,0xA8CD,0xEEE7,0xA6D1,0xB763,0xF5E2,0xE085,0x01EF,24 0xE466,0x9FA3,0x2F68,0x2190,0x423F,0x287F,0x7F3F,0x09F6,0x2111,0xA963,0xD0BB,0x674A,0xBA72,0x45F9,0xF186,0xB8F5 },25 { 0x0010,0xD1B9,0xB164,0x9E87,0x1F49,0x6950,0x2DBF,0x38D3,0x2EB0,0x3E8E,0x91E6,0xF688,0x7E41,0x566E,0x01B0,0x0100,26 0x24A1,0x73D8,0xA0C3,0xF71B,0xA0A5,0x2A06,0xBA46,0xFEC3,0xDD4C,0x52CC,0xF9BC,0x3B7E,0x3812,0x0666,0xB74B,0x40F8 },27 { 0x28F2,0x7C81,0xFC92,0x6FBD,0x53D6,0x72A3,0xBBDF,0xB6FC,0x9CE5,0x2331,0xD4F6,0xC5BB,0xE8BB,0x6676,0x02D9,0x2F0E,28 0xD009,0xD136,0xCD09,0x7551,0x1826,0x9D9B,0x63EA,0xFC63,0x68CD,0x3672,0xCB95,0xD28E,0xF1CD,0x20CA,0x014C,0x0100 },29 { 0xE539,0x55B7,0x989D,0x21C4,0x463A,0xE68F,0xF8B5,0xE5C5,0x662B,0x35BF,0x3C50,0x0131,0xF4BF,0x38B2,0x41BC,0xB829,30 0x02B7,0x6B8F,0xA25C,0xAFD2,0xD84A,0x2243,0x53EB,0xC6C9,0x2E14,0x181F,0x8F96,0xDF0E,0x0D4C,0x30F6,0xFFE1,0x9DDA },31 { 0x30B6,0x777E,0xDA3D,0xAF77,0x205E,0xC90B,0x856B,0xB451,0x3BCC,0x76C2,0x8ACF,0xDCB1,0xA5E5,0xDD64,0x0197,0x0100,32 0xE751,0xB661,0x0404,0xDB4A,0xE9DD,0xA400,0xAF26,0x3F5E,0x904B,0xA924,0x09E0,0xE72B,0x825B,0x2C50,0x6FD0,0x0D52 },33 { 0x2730,0xC2BA,0x9E44,0x5815,0xFC47,0xB21D,0x67B8,0xF8B9,0x047D,0xB0AF,0x9F14,0x741B,0x4668,0xBE54,0xDE16,0xDB14,34 0x7CB7,0xF2B8,0x0683,0x762C,0x09A0,0x9507,0x7F92,0x022C,0xBA6A,0x7D52,0x0AF4,0x1BC3,0xB46A,0xC4FD,0x01C2,0x0100 },35 { 0x7611,0x66F3,0xEE87,0xEDD3,0xC559,0xEFD4,0xDC59,0xF86B,0x6D1C,0x1C85,0x9BB1,0x3373,0x763F,0x4EBE,0x1BF3,0x99B5,36 0xD721,0x978F,0xCF5C,0xAC51,0x0984,0x7462,0x8F0C,0x2817,0x4AD9,0xFD41,0x6678,0x7C85,0xD330,0xC9F8,0x1D9A,0xC622 },37 { 0x5AE4,0xE16A,0x60F6,0xFD45,0x668C,0x29D6,0x0285,0x6B92,0x92C2,0x21DE,0x45E0,0xEF3D,0x8B0D,0x02CD,0x0198,0x0100,38 0x9E6D,0x4D38,0xDEF9,0xE6F2,0xF72E,0xB313,0x14F2,0x390A,0x2D67,0xC71E,0xCB69,0x7F66,0xD3CF,0x7F8A,0x81D9,0x9DDE },39 { 0x85E3,0x8F29,0x36EB,0xC968,0x3696,0x59F6,0x7832,0xA78B,0xA1D8,0xF5CF,0xAB64,0x646D,0x7A2A,0xBAF8,0xAA87,0x41C7,40 0x5120,0xDE78,0x738D,0xDC1A,0x268D,0x5DF8,0xED69,0x1C8A,0xBC85,0x3DCD,0xAE30,0x0F8D,0xEC89,0x3ABD,0x0166,0x0100 },41 { 0xB8BD,0x643B,0x748E,0xBD63,0xEC6F,0xE23A,0x9493,0xDD76,0x0A62,0x774F,0xCD68,0xA67A,0x9A23,0xC8A8,0xBDE5,0x9D1B,42 0x2B86,0x8B36,0x5428,0x1DFB,0xCD1D,0x0713,0x29C2,0x8E8E,0x5207,0xA13F,0x6005,0x4F5E,0x52E0,0xE7C8,0x6D1C,0x3E34 },43 { 0x581D,0x2BFA,0x5E1D,0xA891,0x1069,0x1DA4,0x39A0,0xBE45,0x5B9A,0x7333,0x6F3E,0x8637,0xA550,0xC9E9,0x5C6C,0x42BA,44 0xA712,0xC3EA,0x3808,0x0910,0xAA4D,0x5B25,0xABCD,0xE680,0x96AD,0x2CEC,0x8EBB,0xA47D,0x1690,0xE8FB,0x01C8,0x0100 },45 { 0x73B9,0x82BC,0x9EBC,0xB130,0x0DA5,0x8617,0x9F7B,0x9766,0x205D,0x752D,0xB05C,0x2A17,0xA75C,0x18EF,0x8339,0xFD34,46 0x8DA2,0x7970,0xD0B4,0x70F1,0x3765,0x7380,0x7CAF,0x570E,0x6440,0xBC44,0x0743,0x2D02,0x0419,0xA240,0x2113,0x1AD4 },47 { 0x1EB5,0xBBFF,0x39B1,0x3209,0x705F,0x15F4,0xD7AD,0x340B,0xC2A6,0x25CA,0xF412,0x9570,0x0F4F,0xE4D5,0x1614,0xE464,48 0x911A,0x0F0E,0x07DA,0xA929,0x2379,0xD988,0x0AA6,0x3B57,0xBF63,0x71FB,0x72D5,0x26CE,0xB0AF,0xCF45,0x011B,0x0100 },49 { 0x9999,0x98FE,0xA108,0x6588,0xF90B,0x4554,0xFF38,0x4642,0x8F5F,0x6CC3,0x4E8E,0xFF7E,0x64C2,0x50CA,0x0E7F,0xAD7D,50 0x6AAB,0x33C1,0xE1F4,0x6165,0x7894,0x83B9,0x0A0C,0x38AF,0x5803,0x18C0,0xFA36,0x592C,0x4548,0xABB8,0x1527,0xAEE9 }51 52 };53 54 static const unsigned short Hash3[] = {0x0123,0x4567,0x89AB,0xCDEF,0xF861,0xCB52};55 static const unsigned char Hash4[] = {0x0B,0x04,0x07,0x08,0x05,0x09,0x0B,0x0A,0x07,0x02,0x0A,0x05,0x04,0x08,0x0D,0x0F};56 57 58 59 ////// ====================================================================================60 4 61 5 static void read_tiers(struct s_reader * reader) … … 82 26 if(cta_res[2]==0 && cta_res[3]==0) break; 83 27 int y,m,d,H,M,S; 84 rev_date_calc(&cta_res[4],&y,&m,&d,&H,&M,&S,VG 12_BASEYEAR);28 rev_date_calc(&cta_res[4],&y,&m,&d,&H,&M,&S,VG_BASEYEAR); 85 29 unsigned short tier_id = (cta_res[2] << 8) | cta_res[3]; 86 30 char *tier_name = get_tiername(tier_id, reader->caid[0]); … … 107 51 while(nds12_atr_table[i].desc) { 108 52 if ((atr_size == nds12_atr_table[i].atr_len) && (memcmp (atr, nds12_atr_table[i].atr, atr_size) == 0)) { 109 VG 12_BASEYEAR=nds12_atr_table[i].base_year;53 VG_BASEYEAR=nds12_atr_table[i].base_year; 110 54 cs_ri_log(reader, "[videoguard12-reader] type: %s", nds12_atr_table[i].desc); 111 55 break; … … 370 314 } 371 315 372 static void do_post_dw_hash(unsigned char *cw, unsigned char *ecm_header_data) {373 int i,ecmi,ecm_header_count;374 unsigned char buffer[0x80];375 unsigned char md5_digest[0x10];376 //ecm_header_data = 01 03 b0 01 01377 378 if (!cw_is_valid(cw)) //if cw is all zero, keep it that way379 return;380 381 ecm_header_count=ecm_header_data[0];382 383 for(i=0, ecmi = 1; i<ecm_header_count; i++) {384 if(ecm_header_data[ecmi+1] != 0xb0) {385 ecmi += ecm_header_data[ecmi]+1;386 } else {387 switch(ecm_header_data[ecmi+2]) { //b0 01388 case 1:389 {390 unsigned short hk[8],i,j,m=0;391 for (i = 0; i < 6; i++) hk[2+i]=Hash3[i];392 for (i = 0; i < 2; i++) {393 for (j = 0; j < 0x48; j+=2) {394 if (i)395 hk[0]=((hk[3] & hk[5]) | ((~hk[5]) & hk[4]));396 else397 hk[0]=((hk[3] & hk[4]) | ((~hk[3]) & hk[5]));398 if (j<8)399 hk[0]=(hk[0]+((cw[j +1]<<8) | cw[j]));400 if(j==8) hk[0]=(hk[0]+0x80);401 hk[0]=(hk[0]+hk[2] + (0xFF & NdTabB001[ecm_header_data[ecmi+3]][m>>1] >> ((m&1)<<3))) ;402 hk[1] = hk[2];403 hk[2] = hk[3];404 hk[3] = hk[4];405 hk[4] = hk[5];406 hk[5] = hk[6];407 hk[6] = hk[7];408 hk[7] = hk[2]+409 (((hk[0] << Hash4[m&0xF]) | (hk[0] >> (0x10 - Hash4[m&0xF]))));410 m=(m+1)&0x3F;411 }412 }413 for (i = 0; i < 6; i++)414 hk[2+i]+=Hash3[i];415 for (i = 0; i < 7; i++)416 cw[i]=hk[2+(i>>1)]>>((i&1)<<3);417 418 cw[3] = (cw[0] + cw[1] + cw[2]) & 0xFF;419 cw[7] = (cw[4] + cw[5] + cw[6]) & 0xFF;420 cs_ddump (cw, 8, "Postprocessed2 DW:");421 break;422 }423 case 3:424 {425 memset(buffer,0,sizeof(buffer));426 memcpy(buffer,cw,8);427 memcpy(buffer+8,&ecm_header_data[ecmi+3],ecm_header_data[ecmi]-2);428 MD5( buffer, 8+ecm_header_data[ecmi]-2, md5_digest) ;429 memcpy(cw,md5_digest,8);430 cs_ddump (cw, 8, "Postprocessed2 DW:");431 break;432 }433 434 case 2:435 { /* Method 2 left out */436 //memcpy(DW_OUTPUT, DW_INPUT, 8);437 break;438 }439 }440 }441 }442 }443 444 316 int videoguard12_do_ecm(struct s_reader * reader, ECM_REQUEST *er) 445 317 {
Note:
See TracChangeset
for help on using the changeset viewer.