|
SASC
DVBSoftCAM
|
Inheritance diagram for cN2Prov4101:Public Member Functions | |
| cN2Prov4101 (int Id, int Flags) | |
| virtual bool | PostProcAU (int id, unsigned char *data) |
| virtual int | ProcessBx (unsigned char *data, int len, int pos) |
| cN2Prov4101 (int Id, int Flags) | |
| virtual bool | PostProcAU (int id, unsigned char *data) |
| virtual int | ProcessBx (unsigned char *data, int len, int pos) |
Protected Member Functions | |
| virtual void | WriteHandler (unsigned char seg, unsigned short ea, unsigned char &op) |
| virtual void | WriteHandler (unsigned char seg, unsigned short ea, unsigned char &op) |
Definition at line 78 of file nagra2-4101.c.
| cN2Prov4101::cN2Prov4101 | ( | int | Id, |
| int | Flags | ||
| ) |
Definition at line 89 of file nagra2-4101.c.
References c6805::hasWriteHandler, and cMapCore::SetMapIdent().
:cN2Prov(Id,Flags) { hasWriteHandler=true; SetMapIdent(Id); }
| cN2Prov4101::cN2Prov4101 | ( | int | Id, |
| int | Flags | ||
| ) |
| bool cN2Prov4101::PostProcAU | ( | int | id, |
| unsigned char * | data | ||
| ) | [virtual] |
Reimplemented from cN2Prov.
Definition at line 96 of file nagra2-4101.c.
References DES_CAST, cPlainKeys::FindKeyNoTrig(), cPlainKey::Get(), keys, L_SYS_EMM, MBC, N2_MAGIC, and PRINTF.
{
if(data[1]==0x01) {
cPlainKey *pk;
if(!(pk=keys.FindKeyNoTrig('N',id,MBC(N2_MAGIC,0x30),16))) {
PRINTF(L_SYS_EMM,"missing %04x NN 30 3DES key (16 bytes)",id);
return false;
}
unsigned char dkey[16];
pk->Get(dkey);
DES_key_schedule ks1, ks2;
DES_key_sched((DES_cblock *)&dkey[0],&ks1);
DES_key_sched((DES_cblock *)&dkey[8],&ks2);
DES_ecb2_encrypt(DES_CAST(&data[7]),DES_CAST(&data[7]),&ks1,&ks2,DES_DECRYPT);
DES_ecb2_encrypt(DES_CAST(&data[7+8]),DES_CAST(&data[7+8]),&ks1,&ks2,DES_DECRYPT);
}
return true;
}
| virtual bool cN2Prov4101::PostProcAU | ( | int | id, |
| unsigned char * | data | ||
| ) | [virtual] |
Reimplemented from cN2Prov.
| virtual int cN2Prov4101::ProcessBx | ( | unsigned char * | data, |
| int | len, | ||
| int | pos | ||
| ) | [virtual] |
Reimplemented from cN2Prov.
| int cN2Prov4101::ProcessBx | ( | unsigned char * | data, |
| int | len, | ||
| int | pos | ||
| ) | [virtual] |
Reimplemented from cN2Prov.
Definition at line 115 of file nagra2-4101.c.
References c6805::a, c6805::AddBreakpoint(), c6805::ClearBreakpoints(), cMapCore::DoMap(), c6805::Get(), c6805::GetMem(), c6805::GetPc(), cN2Emu::Init(), c6805::PopPc(), c6805::Run(), c6805::SetMem(), c6805::SetPc(), and c6805::SetSp().
{
if(Init(id,110)) {
SetMem(0x80,data,len);
SetPc(0x80+pos);
SetSp(0x0FFF,0x0FE0);
ClearBreakpoints();
AddBreakpoint(0xACDD);
AddBreakpoint(0x9BDD);
AddBreakpoint(0x7EC5);
while(!Run(5000)) {
switch(GetPc()) {
case 0xACDD:
return -1;
case 0x9BDD:
GetMem(0x80,data,len);
return a;
case 0x7EC5:
{
PopPc();
unsigned short args=GetPc();
int clen=Get(args+4);
unsigned short ptr=(Get(args)<<8)+Get(args+1);
if(clen+pos-1>len) return -1; // sanity
GetMem(ptr,&data[pos-1],clen);
ptr=(Get(args+2)<<8)+Get(args+3)-0x0CED+0x00B4-0x0080; // wild hack
if(ptr<7 || ptr+8>len || data[ptr-1]!=0x10 || data[ptr-7]!=0x42) // sanity
return -1;
unsigned char tmp[96];
memcpy(&tmp[0],&data[ptr],8);
ptr=(((data[ptr]&0x3F)|0x40)<<8)+(data[ptr+1]&0x7F);
GetMem(ptr,&tmp[8],sizeof(tmp)-8);
DoMap(0x02,0,2);
DoMap(0x58,tmp);
DoMap(0x43);
DoMap(0x44,tmp);
SetMem(0x0440,tmp,20);
SetMem(0x80,data,len);
SetPc(0x80+pos);
break;
}
}
}
}
return -1;
}
| virtual void cN2Prov4101::WriteHandler | ( | unsigned char | seg, |
| unsigned short | ea, | ||
| unsigned char & | op | ||
| ) | [protected, virtual] |
Reimplemented from c6805.
| void cN2Prov4101::WriteHandler | ( | unsigned char | seg, |
| unsigned short | ea, | ||
| unsigned char & | op | ||
| ) | [protected, virtual] |
Reimplemented from c6805.
Definition at line 162 of file nagra2-4101.c.
References c6805::cr, and c6805::Get().