SASC
DVBSoftCAM

cCardCryptoworks Class Reference

#include <parse.h>

Inheritance diagram for cCardCryptoworks:

List of all members.

Public Member Functions

 cCardCryptoworks (const unsigned char *a)
virtual ~cCardCryptoworks ()
virtual bool MatchEMM (const unsigned char *data)
virtual int UpdateType (const unsigned char *data)
virtual int Assemble (cAssembleData *ad)
 cCardCryptoworks (const unsigned char *a)
virtual ~cCardCryptoworks ()
virtual bool MatchEMM (const unsigned char *data)
virtual int UpdateType (const unsigned char *data)
virtual int Assemble (cAssembleData *ad)

Public Attributes

unsigned char addr [5]

Detailed Description

Definition at line 266 of file parse.h.


Constructor & Destructor Documentation

cCardCryptoworks::cCardCryptoworks ( const unsigned char *  a)

Definition at line 588 of file parse.c.

References addr.

{
  memcpy(addr,a,sizeof(addr));
  sharedEmm=0; sharedLen=globalToggle=0; globalCrc=0;
}
cCardCryptoworks::~cCardCryptoworks ( ) [virtual]

Definition at line 594 of file parse.c.

References free.

{
  free(sharedEmm);
}
cCardCryptoworks::cCardCryptoworks ( const unsigned char *  a)
virtual cCardCryptoworks::~cCardCryptoworks ( ) [virtual]

Member Function Documentation

int cCardCryptoworks::Assemble ( cAssembleData *  ad) [virtual]

Reimplemented from cCard.

Definition at line 623 of file parse.c.

References AUTOMEM, crc32_le(), cAssembleData::Data(), data, free, SCT_LEN, cAssembleData::SetAssembled(), SetSctLen(), and SortNanos().

{
  const unsigned char *data=ad->Data();
  int len=SCT_LEN(data);
  switch(data[0]) {
    case 0x82:
      return 0; // no assemble needed

    case 0x84:
      free(sharedEmm);
      sharedEmm=(unsigned char *)malloc(len);
      if(sharedEmm) {
        memcpy(sharedEmm,data,len);
        sharedLen=len;
        }
      break;

    case 0x86:
      if(sharedEmm) {
        int alen=len-5 + sharedLen-12;
        unsigned char *tmp=AUTOMEM(alen);
        memcpy(tmp,&data[5],len-5);
        memcpy(tmp+len-5,&sharedEmm[12],sharedLen-12);

        unsigned char *ass=(unsigned char *)malloc(alen+12);
        if(!ass) return -1; // ignore
        memcpy(ass,sharedEmm,12);
        SortNanos(ass+12,tmp,alen);
        SetSctLen(ass,alen+9);
        free(sharedEmm); sharedEmm=0;
        if(ass[11]==alen) { // sanity check
          ad->SetAssembled(ass);
          return 1; // assembled
          }
        }
      break;

    case 0x88:
    case 0x89:
      if(data[0]!=globalToggle) {
        globalToggle=data[0];
        unsigned int crc=crc32_le(0,data+1,len-1);
        if(crc!=globalCrc) {
          globalCrc=crc;
          return 0; // no assemble needed
          }
        }
      break;
    }
  return -1; // ignore
}
virtual int cCardCryptoworks::Assemble ( cAssembleData *  ad) [virtual]

Reimplemented from cCard.

virtual bool cCardCryptoworks::MatchEMM ( const unsigned char *  data) [virtual]

Implements cCard.

bool cCardCryptoworks::MatchEMM ( const unsigned char *  data) [virtual]

Implements cCard.

Definition at line 599 of file parse.c.

References addr.

{
  if((data[1]&0xF0)==0x70 && data[3]==0xA9 && data[4]==0xff) {
    switch(data[0]) {
      case 0x82: return !memcmp(&data[5],addr,sizeof(addr));
      case 0x84: return !memcmp(&data[5],addr,sizeof(addr)-1);
      case 0x86:
      case 0x88:
      case 0x89: return true;
      }
    }
  return false;
}
int cCardCryptoworks::UpdateType ( const unsigned char *  data) [virtual]

Reimplemented from cCard.

Definition at line 613 of file parse.c.

{
  switch(data[0]) {
    case 0x82: return 3; // unique
    case 0x84:
    case 0x86: return 2; // shared
    default:   return 0; // global
    }
}
virtual int cCardCryptoworks::UpdateType ( const unsigned char *  data) [virtual]

Reimplemented from cCard.


Member Data Documentation

unsigned char cCardCryptoworks::addr

Definition at line 272 of file parse.h.

Referenced by cCardCryptoworks(), and MatchEMM().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines