bool cSmartCardVideoGuard2::Update(int pid, int caid, const unsigned char *data) { static unsigned char ins42[5] = { 0xD1,0x42,0x00,0x00,0xFF }; if(MatchEMM(data)) { const unsigned char *payloaddata=cParseNDS::PayloadStart(data,cardID); //points to 02 xx yy int lenEMM; switch(payloaddata[0]) { case 2: lenEMM=payloaddata[payloaddata[1]+2]; payloaddata+=3+payloaddata[1]; // skip len specifier break; default: // di(printf("scvg2: ***ERROR***: EMM: bad payload type byte %02x\n",payloaddata[0])); // DUMP3("VG2EMM",data,32); return false; } // di(printf("scvg2: EMM: pid %d (%x) caid %d (%x) len %d (%x)\n",pid,pid,caid,caid,lenEMM,lenEMM)); // DUMP3("VG2EMM",data,32); if(lenEMM<=8 || lenEMM>188) { // di(printf("scvg2: ***ERROR***: EMM: len %d bad\n",lenEMM)); return false; } ins42[4]=lenEMM; if(DoCmd(ins42,payloaddata)>0 && Status()) return true; } return false; }
bool cSmartCardNagra::Update(int pid, int caid, const unsigned char *data) { if(MatchEMM(data)) { if(DoBlkCmd(data[8],data[9]+2,0x84,0x02,data+8+2) && Status()) { cCondWait::SleepMs(300); PostProcess(); } return true; } return false; }
bool cProviderNDS::MatchID(const unsigned char *data) { return MatchEMM(data); }
bool cProviderCryptoworks::MatchID(const unsigned char *data) { return MatchEMM(data); }