]> www.vanbest.org Git - sasc-ng.git/commitdiff
nagra-0101: (incomplete) map 22,2e,2f,3a,3d,46 (from opensasc)
authorleslie <unknown>
Mon, 30 Mar 2009 12:24:18 +0000 (20:24 +0800)
committerleslie <unknown>
Mon, 30 Mar 2009 12:24:18 +0000 (20:24 +0800)
systems/nagra/nagra2-0101.c
systems/nagra/nagra2.h

index a72de324ea6726b74173e9244045184547562056..0b5f661f82092aa9e0b5bb4f8f99e3a1719ff79c 100644 (file)
@@ -190,6 +190,14 @@ bool cMap0101::Map(int f, unsigned char *data, int l)
       cycles=898;
       break;
     case 0x22:
+// START INCOMPLETE FIX
+      BN_zero(B);
+      BN_set_bit(B,80);
+      AddMapCycles(644);
+      BN_zero(B);
+      BN_set_bit(B,96);
+      AddMapCycles(76);
+// END INCOMPLETE FIX
       if(BN_is_zero(D)) { cycles=639-6; break; }
       l&=0x1fff;
       BN_one(B);
@@ -230,6 +238,27 @@ bool cMap0101::Map(int f, unsigned char *data, int l)
       BN_zero(C);
       break;
       }
+    case 0x2e:
+// START INCOMPLETE FIX
+      BN_rshift(H,H,64);
+      BN_lshift(H,H,64);
+      BN_add(H,J,H);
+      BN_rshift(H,H,16);
+      BN_copy(J,H);
+      BN_mask_bits(J,64);
+// END INCOMPLETE FIX
+      break;
+    case 0x2F:
+// START INCOMPLETE FIX
+      H.GetLE(data,16);
+      BN_rshift(H,H,64);
+      BN_lshift(H,H,64);
+      BN_add(H,H,J);
+      BN_rshift(J,H,8);
+      BN_mask_bits(J,64);
+      cycles = 808;
+// END INCOMPLETE FIX
+      break;
     case 0x30:
     case 0x31:
       BN_sqr(D,B,ctx);
@@ -259,6 +288,15 @@ bool cMap0101::Map(int f, unsigned char *data, int l)
       AddMapCycles(102);
       MonFin(B,D);
       break;
+    case 0x3a:
+// START INCOMPLETE FIX (this map is normaly in nagra2.c)
+      AddMapCycles(192);
+      IMonInit();
+      MonMul(B,A,B);
+      //MonMul(B,A,B);
+      BN_zero(B);
+// END INCOMPLETE FIX
+      break;
     case 0x3b:
       AddMapCycles(441);
       IMakeJ();
@@ -268,6 +306,13 @@ bool cMap0101::Map(int f, unsigned char *data, int l)
       MonMul(B,I,B,l);
       cycles=tim3b[wordsize-1][l-1]-6;
       break;
+    case 0x3d:
+// START INCOMPLETE FIX
+      D.GetLE(data,l<<3);
+      MakeJ0(J,D,C);
+      MonMul0(C,B,B,C,D,J,0);
+// END INCOMPLETE FIX
+      break;
     case 0x3c:
     case 0x3e:
       {
@@ -297,6 +342,16 @@ bool cMap0101::Map(int f, unsigned char *data, int l)
       for(int i=0; i<sbits; ++i) if(BN_is_bit_set(scalar,i)) cycles+=88;
       break;
       }
+    case 0x46:
+// START INCOMPLETE FIX
+      IMakeJ();
+      BN_zero(I);
+      BN_set_bit(I,136);
+      BN_mod(B,I,D,ctx);
+      MonMul0(B,B,B,C,D,J,0);
+      MonMul0(B,B,B,C,D,J,0);
+// END INCOMPLETE FIX
+      break;
     case 0x4d:
       if(-0x018000==l)
         BN_mask_bits(B,64);
@@ -646,9 +701,12 @@ bool cN2Prov0101::ProcessMap(int f)
       GetMem(HILO(0x44),tmp,dl,0);
       DoMap(f,tmp,Get(0x48));
       break;
+    case 0x2e:
+    case 0x2f:
     case 0x32:
     case 0x39:
     case 0x3b:
+    case 0x3d:
       GetMem(HILO(0x44),tmp,dl,0);
       DoMap(f,tmp,l);
       break;
@@ -669,6 +727,10 @@ bool cN2Prov0101::ProcessMap(int f)
       DoMap(f,tmp,l);
       SetMem(0x440,tmp,20,0);
       break; 
+    case 0x46:
+      GetMem(HILO(0x44),tmp,8,0);
+      DoMap(f,tmp,l);
+      break;
     case 0x4d:
       DoMap(f,tmp,-((Get(0x48)<<16)|(Get(0x49)<<8)|Get(0x4a)));
       SetMem(0x400,tmp,53,0);
index cd0be03881c05318e33fc5319492ff833b467f11..24f7a958fae0ca69d535f9fe459dc89929c48e3c 100644 (file)
@@ -91,7 +91,7 @@ private:
   int words;
 protected:
   int wordsize;
-  cMapReg A, B, C, D, J, I;
+  cMapReg A, B, C, D, J, I, H;
   cBNctx ctx;
   SHA_CTX sctx;
   // stateless