From 1609b057209b0a70e1e768c71756c53cf4a7a555 Mon Sep 17 00:00:00 2001 From: anon Date: Sun, 8 Jun 2008 12:26:24 +0800 Subject: [PATCH] nagra-0101: Imap21 --- systems/nagra/nagra2-0101.c | 12 ++++++++++++ systems/nagra/nagra2.c | 7 +++++++ systems/nagra/nagra2.h | 1 + 3 files changed, 20 insertions(+) diff --git a/systems/nagra/nagra2-0101.c b/systems/nagra/nagra2-0101.c index 5839dcb..f131e63 100644 --- a/systems/nagra/nagra2-0101.c +++ b/systems/nagra/nagra2-0101.c @@ -431,6 +431,17 @@ void cMap0101::DoMap(int f, unsigned char *data, int l) l=GetOpSize(l); cycles=0; interrupted=false; switch(f) { + case 0x21: + MAP_IRQ_BEGIN(); + AddMapCycles(288); + WS_START(1); + MakeJ0(J,D); + AddMapCycles(282); + WClear(C); + AddMapCycles(898-282-288); + WS_END(); + MAP_IRQ_END(); + break; case 0x22: { int shift=((-l)&0xFF00)>>8, exp=(-l)&0x1F; @@ -847,6 +858,7 @@ bool cN2Prov0101::ProcessMap(int f) GetMem(HILO(0x44),tmp,dl,0); DoMap(f,tmp,l); break; + case 0x21: case 0x30: case 0x31: case 0x43: diff --git a/systems/nagra/nagra2.c b/systems/nagra/nagra2.c index df986ab..6e4ca8b 100644 --- a/systems/nagra/nagra2.c +++ b/systems/nagra/nagra2.c @@ -265,6 +265,13 @@ cMapMath::cMapMath(void) wordsize=DEF_WORDSIZE; } +void cMapMath::WClear(BIGNUM *r, int w) +{ + if(!w) w=wordsize; + BN_rshift(r,r,w<<6); + BN_lshift(r,r,w<<6); +} + bool cMapMath::ModAdd(BIGNUM *r, BIGNUM *a, BIGNUM *b, BIGNUM *d) { BN_add(r,a,b); diff --git a/systems/nagra/nagra2.h b/systems/nagra/nagra2.h index f78b298..30cf002 100644 --- a/systems/nagra/nagra2.h +++ b/systems/nagra/nagra2.h @@ -71,6 +71,7 @@ protected: void MonMul(BIGNUM *o, BIGNUM *a, BIGNUM *b, BIGNUM *c, BIGNUM *d, BIGNUM *j, int w); void MonStart(int w); void MonLoop(BIGNUM *o, BIGNUM *a, BIGNUM *b, BIGNUM *c, BIGNUM *d, BIGNUM *j); + void WClear(BIGNUM *r, int w=0); // statefull void MonMul(BIGNUM *o, BIGNUM *a, BIGNUM *b); void MonMul(BIGNUM *o, BIGNUM *a, BIGNUM *b, int w); -- 2.39.5