Changeset 1856
- Timestamp:
- 03/20/10 22:00:54 (13 years ago)
- Location:
- branches/modular
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/modular/cscrypt/cscrypt.h
r712 r1856 37 37 unsigned char *MD5(const unsigned char *, unsigned long, unsigned char *); 38 38 unsigned long crc32(unsigned long, const unsigned char *, unsigned int); 39 const u_int32_t MD5_C[256]; 39 40 40 41 #ifdef __cplusplus -
branches/modular/cscrypt/md5.c
r70 r1856 277 277 278 278 /* MD5 basic transformation. Transforms state based on block. */ 279 280 static void 281 __md5_Transform (state, block) 282 u_int32_t state[4]; 283 const unsigned char block[64]; 284 { 285 u_int32_t a, b, c, d, x[16]; 286 287 #if MD5_SIZE_OVER_SPEED > 1 288 u_int32_t temp; 289 const char *ps; 290 291 static const char S[] = { 292 7, 12, 17, 22, 293 5, 9, 14, 20, 294 4, 11, 16, 23, 295 6, 10, 15, 21 296 }; 297 #endif /* MD5_SIZE_OVER_SPEED > 1 */ 298 299 #if MD5_SIZE_OVER_SPEED > 0 300 const u_int32_t *pc; 301 const char *pp; 302 int i; 303 304 static const u_int32_t C[] = { 279 const u_int32_t MD5_C[] = { 305 280 /* round 1 */ 306 281 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, … … 325 300 }; 326 301 302 static void 303 __md5_Transform (state, block) 304 u_int32_t state[4]; 305 const unsigned char block[64]; 306 { 307 u_int32_t a, b, c, d, x[16]; 308 309 #if MD5_SIZE_OVER_SPEED > 1 310 u_int32_t temp; 311 const char *ps; 312 313 static const char S[] = { 314 7, 12, 17, 22, 315 5, 9, 14, 20, 316 4, 11, 16, 23, 317 6, 10, 15, 21 318 }; 319 #endif /* MD5_SIZE_OVER_SPEED > 1 */ 320 321 #if MD5_SIZE_OVER_SPEED > 0 322 const u_int32_t *pc; 323 const char *pp; 324 int i; 325 326 327 327 328 static const char P[] = { 328 329 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /* 1 */ … … 339 340 340 341 #if MD5_SIZE_OVER_SPEED > 2 341 pc = C; pp = P; ps = S - 4;342 pc = MD5_C; pp = P; ps = S - 4; 342 343 343 344 for ( i = 0 ; i < 64 ; i++ ) { … … 364 365 } 365 366 #elif MD5_SIZE_OVER_SPEED > 1 366 pc = C; pp = P; ps = S;367 pc = MD5_C; pp = P; ps = S; 367 368 368 369 /* Round 1 */ … … 392 393 } 393 394 #elif MD5_SIZE_OVER_SPEED > 0 394 pc = C; pp = P;395 pc = MD5_C; pp = P; 395 396 396 397 /* Round 1 */ -
branches/modular/module-dvbapi.c
r1853 r1856 151 151 int selected_api=-1; 152 152 153 int emm_count[]={0,0,0,0}; 154 153 155 extern uchar *nagra2_get_emm_filter(struct s_reader*, int); 154 155 int dvbapi_set_filter(int dmx_fd, int api, unsigned short pid, unsigned char *filt, unsigned char *mask, int timeout) { 156 extern uchar *irdeto_get_emm_filter(struct s_reader*, int); 157 158 int dvbapi_set_filter(int dmx_fd, int api, unsigned short pid, uchar *filt, uchar *mask, int timeout) { 156 159 int ret=-1; 157 160 … … 320 323 void dvbapi_start_filter(int demux_index, ushort caid, unsigned short pid, uchar table, uchar mask, int type) { 321 324 int dmx_fd,i,n=-1; 322 uchar filter[ 16], filtermask[16];325 uchar filter[32]; 323 326 324 327 for (i=0;i<MAX_FILTER;i++) { … … 341 344 demux[demux_index].demux_fd[n].type=type; 342 345 343 memset(filter,0,16); 344 memset(filtermask,0,16); 346 memset(filter,0,32); 345 347 346 348 filter[0]=table; 347 filter mask[0]=mask;348 349 dvbapi_set_filter(dmx_fd, selected_api, pid, filter, filter mask, 4000);349 filter[16]=mask; 350 351 dvbapi_set_filter(dmx_fd, selected_api, pid, filter, filter+16, 4000); 350 352 } 351 353 … … 369 371 370 372 #ifdef NOT_MODULAR 371 switch(caid >> 8) { 372 case 0x17: 373 case 0x18: // NAGRA EMM 373 #define SC_IRDETO 1 //reader-common.c 374 #define SC_NAGRA 8 375 switch(reader[client[cs_idx].au].card_system) { 376 case SC_IRDETO: 377 i=0; 378 uchar *filter1 = irdeto_get_emm_filter(&reader[client[cs_idx].au], emmtype); 379 memcpy(filter,filter1,32); 380 break; 381 case SC_NAGRA: 374 382 i=0; 375 383 uchar *filter1 = nagra2_get_emm_filter(&reader[client[cs_idx].au], emmtype); … … 414 422 demux[demux_index].demux_fd[n].type=type; 415 423 416 cs_d ump(filter, 32, "demux filter:");417 dvbapi_set_filter(dmx_fd, selected_api, pid, filter, filter+16, 4000);424 cs_ddump(filter, 32, "demux filter:"); 425 dvbapi_set_filter(dmx_fd, selected_api, pid, filter, filter+16, 0); 418 426 } 419 427 … … 479 487 } 480 488 481 void dvbapi_stop_descrambling_all(int demux_index) { 482 int j; 483 for (j=0;j<MAX_DEMUX;j++) { 484 if (demux[j].demux_index != demux_index) 485 continue; 486 487 dvbapi_stop_descrambling(j); 488 } 489 490 return; 491 } 492 493 void dvbapi_start_descrambling(int demux_index, unsigned short caid, unsigned short capid, unsigned long provider_id) { 489 void dvbapi_start_descrambling(int demux_index, unsigned short caid) { 494 490 int i,n; 495 491 … … 498 494 for (n=0; n<demux[demux_index].ECMpidcount; n++) { 499 495 if (demux[demux_index].ECMpids[n].CA_System_ID==caid) { 500 break; 501 } 502 } 503 504 demux[demux_index].pidindex=n; 496 demux[demux_index].pidindex=n; 497 break; 498 } 499 } 505 500 506 501 demux[demux_index].ca_fd = dvbapi_open_device(demux_index,1); … … 526 521 527 522 if (demux[demux_index].pidindex==-1) return; 528 cs_ddump(buffer, len, "emm:");523 cs_ddump(buffer, 16, "emm:"); 529 524 530 525 //force emm output … … 557 552 } 558 553 } 559 if (found==1 && reader[client[cs_idx].au].card_system>0) 554 555 if (found==1 && reader[client[cs_idx].au].card_system>0) { 556 cardsystem[reader[client[cs_idx].au].card_system-1].get_emm_type(&epg, &reader[client[cs_idx].au]); 557 char *typtext[]={"UNKNOWN", "UNIQUE", "SHARED", "GLOBAL"}; 558 emm_count[epg.type]++; 559 cs_debug("dvbapi: %s emm (unk/g/s/u) (%d/%d/%d/%d)", typtext[epg.type], emm_count[UNKNOWN], emm_count[GLOBAL], emm_count[SHARED], emm_count[UNIQUE]); 560 560 do_emm(&epg); 561 } 562 561 563 } 562 564 … … 570 572 for (i=0;i<CS_MAXREADER;i++) { 571 573 for (j=0;j<CS_MAXREADER;j++) { 572 if (reader[i].caid[j] != 0 ) {574 if (reader[i].caid[j] != 0 && reader[i].card_system > 0) { 573 575 if (k+1>=MAX_CAID) break; 574 576 global_caid_list[k++]=reader[i].caid[j]; … … 806 808 uchar inhalt[200], dest[200]; 807 809 int len; 810 signal=signal; 808 811 int pmt_fd = open("/tmp/pmt.tmp", O_RDONLY); 809 812 if(pmt_fd>0) { … … 952 955 953 956 for (i = 0; i < pfdcount; i++) { 957 if (pfd2[i].revents > 3) 958 cs_debug("dvbapi: event %d on fd %d", pfd2[i].revents, pfd2[i].fd); 959 954 960 if (pfd2[i].revents & (POLLHUP | POLLNVAL)) { 955 961 if (type[i]==1) { … … 1050 1056 dvbapi_start_emm_filter(demux_index, SHARED, TYPE_EMM); 1051 1057 dvbapi_start_emm_filter(demux_index, GLOBAL, TYPE_EMM); 1052 1058 //dvbapi_start_emm_filter(demux_index, UNIQUE, TYPE_EMM); 1053 1059 continue; 1054 1060 } 1061 cs_debug("EMM Filter fd %d", demux[demux_index].demux_fd[n].fd); 1055 1062 dvbapi_process_emm(demux_index, mbuf, len); 1056 1063 } … … 1077 1084 if (demux[i].program_number==er->srvid) { 1078 1085 if (er->rc<=2 && demux[i].pidindex==-1 && er->caid!=0) { 1079 dvbapi_start_descrambling(i, er->caid , er->pid, er->prid);1086 dvbapi_start_descrambling(i, er->caid); 1080 1087 } 1081 1088 1082 1089 if (er->rc==4 && cfg->dvbapi_au==1 && dvbapi_check_array(global_caid_list, MAX_CAID, er->caid)>=0) { 1083 1090 //local card and not found -> maybe card need emm 1084 dvbapi_start_descrambling(i, er->caid , er->pid, er->prid);1091 dvbapi_start_descrambling(i, er->caid); 1085 1092 } 1086 1093 … … 1090 1097 for (n=0; n<demux[i].ECMpidcount; n++) { 1091 1098 if (demux[i].ECMpids[n].checked==0) { 1092 dvbapi_stop_filter(i, 0);1099 dvbapi_stop_filter(i, TYPE_ECM); 1093 1100 cs_debug("dvbapi: trying CA_System_ID: %04x CA_PID: %04x", demux[i].ECMpids[n].CA_System_ID, demux[i].ECMpids[n].CA_PID); 1094 1101 … … 1139 1146 ecmtxt = fopen("/tmp/ecm.info", "w"); 1140 1147 if(ecmtxt != NULL) { 1141 fprintf(ecmtxt, "caid : 0x%04X\npid: 0x%04X\nprov:%06X\n", er->caid, er->pid, (uint) er->prid);1148 fprintf(ecmtxt, "caid 0x%04X\npid 0x%04X\nprov 0x%06X\n", er->caid, er->pid, (uint) er->prid); 1142 1149 fprintf(ecmtxt, "reader: %s\n", reader[er->reader[0]].label); 1143 1150 if (reader[er->reader[0]].typ & R_IS_CASCADING) 1144 1151 fprintf(ecmtxt, "from: %s\n", reader[er->reader[0]].device); 1145 1152 fprintf(ecmtxt, "ecm time: %.3f\n", (float) client[cs_idx].cwlastresptime/1000); 1146 fprintf(ecmtxt, "cw0 1147 fprintf(ecmtxt, "cw1 1153 fprintf(ecmtxt, "cw0: %s\n", cs_hexdump(1,demux[i].lastcw0,8)); 1154 fprintf(ecmtxt, "cw1: %s\n", cs_hexdump(1,demux[i].lastcw1,8)); 1148 1155 fclose(ecmtxt); 1149 1156 ecmtxt = NULL; -
branches/modular/oscam-config.c
r1839 r1856 1588 1588 fprintf_conf(f, CONFVARWIDTH, "bindwait", "%d\n", cfg->bindwait); 1589 1589 fprintf_conf(f, CONFVARWIDTH, "netprio", "%ld\n", cfg->netprio); 1590 fprintf_conf(f, CONFVARWIDTH, "clientdyndns", "%d\n", cfg->clientdyndns); 1590 1591 fprintf_conf(f, CONFVARWIDTH, "resolvedelay", "%d\n", cfg->resolvedelay); 1591 1592 if (cfg->tosleep) fprintf_conf(f, CONFVARWIDTH, "sleep", "%d\n", cfg->tosleep); -
branches/modular/oscam.c
r1853 r1856 2122 2122 cs_ddump_mask(D_EMM, ep->hexserial, 8, "emm UA/SA:"); 2123 2123 2124 char *typtext[]={"UNKNOWN", "UNIQUE", "SHARED", "GLOBAL"}; 2125 cs_debug_mask(D_EMM, "emmtype %s. Reader %s has serial %s.", typtext[ep->type], reader[au].label, cs_hexdump(0, reader[au].hexserial, 8)); 2126 2124 2127 switch (ep->type) { 2125 2128 case UNKNOWN: 2126 cs_debug_mask(D_EMM, "emmtype UNKNOWN. Reader %s has serial %s.", reader[au].label, cs_hexdump(0, reader[au].hexserial, 8));2127 2129 if (reader[au].blockemm_unknown) return; 2128 2130 break; 2129 2131 2130 2132 case UNIQUE: 2131 cs_debug_mask(D_EMM, "emmtype UNIQUE. Reader %s has serial %s.", reader[au].label, cs_hexdump(0, reader[au].hexserial, 8));2132 2133 if (reader[au].blockemm_u) return; 2133 2134 break; 2134 2135 2135 2136 case SHARED: 2136 cs_debug_mask(D_EMM, "emmtype SHARED. Reader %s has serial %s.", reader[au].label, cs_hexdump(0, reader[au].hexserial, 8));2137 2137 if (reader[au].blockemm_s) return; 2138 2138 break; … … 2141 2141 // cardreader hexserial in; reader_get_emm_type overwrites this with real SA value if known! 2142 2142 case GLOBAL: 2143 cs_debug_mask(D_EMM, "emmtype GLOBAL. Reader %s has serial %s.", reader[au].label, cs_hexdump(0, reader[au].hexserial, 8));2144 2143 if (reader[au].blockemm_g) return; 2145 2144 break; -
branches/modular/reader-cryptoworks.c
r1832 r1856 459 459 int cryptoworks_get_emm_type(EMM_PACKET *ep, struct s_reader * rdr) //returns TRUE if shared emm matches SA, unique emm matches serial, or global or unknown 460 460 { 461 rdr=rdr; 461 462 switch (ep->emm[0]) { 462 463 case 0x82: -
branches/modular/reader-dre.c
r1776 r1856 304 304 int dre_get_emm_type(EMM_PACKET *ep, struct s_reader * rdr) 305 305 { 306 rdr=rdr; 306 307 switch (ep->emm[0]) { 307 308 case 0x87: -
branches/modular/reader-irdeto.c
r1832 r1856 290 290 } 291 291 292 uchar *irdeto_get_emm_filter(struct s_reader * rdr, int type) 293 { 294 static uint8_t filter[32]; 295 memset(filter, 0x00, 32); 296 297 switch (type) { 298 case GLOBAL: 299 filter[1] = 0x00; 300 filter[1+16] = 0x2F; 301 break; 302 case SHARED: 303 case UNIQUE: 304 filter[1] = 0xD2; 305 filter[1+16] = 0xFE; 306 memcpy(filter+2, rdr->hexserial, 2); 307 memset(filter+2+16, 0xFF, 2); 308 309 break; 310 } 311 312 return filter; 313 } 314 292 315 int irdeto_get_emm_type(EMM_PACKET *ep, struct s_reader * rdr) { 293 316 … … 437 460 ph->card_init=irdeto_card_init; 438 461 ph->get_emm_type=irdeto_get_emm_type; 439 } 462 ph->get_emm_filter=irdeto_get_emm_filter; 463 } -
branches/modular/reader-nagra.c
r1839 r1856 747 747 uchar *nagra2_get_emm_filter(struct s_reader * rdr, int type) 748 748 { 749 static u charfilter[32];750 memset(filter, 0 , 32);749 static uint8_t filter[32]; 750 memset(filter, 0x00, 32); 751 751 752 752 switch (type) { … … 759 759 filter[0] = 0x83; 760 760 filter[0+16] = 0xFF; 761 filter[3] = rdr->hexserial[4]; 761 //filter[1] = rdr->hexserial[4] & 0xFF; 762 //filter[1+16] = 0xFF; 763 filter[2] = rdr->hexserial[3] & 0xFF; 764 filter[2+16] = 0xFF; 765 filter[3] = rdr->hexserial[2] & 0xFF; 762 766 filter[3+16] = 0xFF; 763 filter[4] = rdr->hexserial[3];764 filter[4+16] = 0xFF;765 filter[5] = rdr->hexserial[2];766 filter[5+16] = 0xFF;767 767 break; 768 768 } -
branches/modular/reader-viaccess.c
r1776 r1856 357 357 int viaccess_get_emm_type(EMM_PACKET *ep, struct s_reader * rdr) //returns TRUE if shared emm matches SA, unique emm matches serial, or global or unknown 358 358 { 359 ep->type=UNKNOWN; //FIXME not sure how this maps onto global, unique and shared! 360 return TRUE; //FIXME let it all pass without checking serial or SA, without filling ep->hexserial 359 rdr=rdr; 360 switch (ep->emm[0]) { 361 case 0x8C: 362 case 0x8D: 363 ep->type=GLOBAL; 364 break; 365 case 0x8E: 366 ep->type=SHARED; 367 break; 368 case 0x88: 369 ep->type=UNIQUE; // ? 370 break; 371 default: 372 ep->type=UNKNOWN; 373 break; 374 } 375 return TRUE; 361 376 } 362 377 -
branches/modular/reader-videoguard2.c
r1853 r1856 43 43 return ERROR; 44 44 } 45 45 /* 46 46 unsigned short NdTabB001[0x4][0x20]= { 47 47 { 0xEAF1,0x0237,0x29D0,0xBAD2,0xE9D3,0x8BAE,0x2D6D,0xCD1B, … … 65 65 unsigned short Hash3[] = {0x0123,0x4567,0x89AB,0xCDEF,0xF861,0xCB52}; 66 66 unsigned char Hash4[] = {0x0B,0x04,0x07,0x08,0x05,0x09,0x0B,0x0A,0x07,0x02,0x0A,0x05,0x04,0x08,0x0D,0x0F}; 67 /* 67 68 68 static void postprocess_cw(unsigned char *cw, int nTableIdx) 69 69 { … … 1027 1027 1028 1028 1029 1029 /* 1030 1030 1031 1031 int MD5_C[] = { … … 1052 1052 }; 1053 1053 1054 1054 */ 1055 1055 1056 1056 unsigned char S[] = {7, 12, 17, 22, … … 1319 1319 int videoguard_get_emm_type(EMM_PACKET *ep, struct s_reader * rdr) //returns TRUE if shared emm matches SA, unique emm matches serial, or global or unknown 1320 1320 { 1321 rdr=rdr; 1321 1322 ep->type=UNKNOWN; //FIXME not sure how this maps onto global, unique and shared! 1322 1323 return TRUE; //FIXME let it all pass without checking serial or SA, without filling ep->hexserial
Note:
See TracChangeset
for help on using the changeset viewer.