]> www.vanbest.org Git - sasc-ng.git/commitdiff
nagra-0101: fix map21 MakeJ0
authoranon <unknown>
Fri, 13 Jun 2008 00:42:58 +0000 (08:42 +0800)
committeranon <unknown>
Fri, 13 Jun 2008 00:42:58 +0000 (08:42 +0800)
systems/nagra/nagra2-0101.c
systems/nagra/nagra2.c
systems/nagra/nagra2.h

index b94f2df2371336101b34082d388eecad3bddc1c5..a45b8a9c3dd0889a01752a0758af0f10fc776252 100644 (file)
@@ -176,7 +176,7 @@ void cMap0101::DoMap(int f, unsigned char *data, int l)
       MAP_IRQ_BEGIN();
       AddMapCycles(288);
       WS_START(1);
-      MakeJ0(J,D);
+      MakeJ0(J,D,C);
       AddMapCycles(282);
       BN_clear(C);
       WS_END();
index 5cb5f40f4fa5a234e7931bdc02cbf7d5e9580a5b..4ed23b9561ce5f917a1a13e5aee9fb31598e3e13 100644 (file)
@@ -392,16 +392,23 @@ bool cMapMath::ModSub(BIGNUM *r, BIGNUM *d, BIGNUM *b)
   return ret;
 }
 
-void cMapMath::MakeJ0(BIGNUM *j, BIGNUM *d, int bits)
+void cMapMath::MakeJ0(BIGNUM *j, BIGNUM *d, BIGNUM *c, int bits)
 {
 #if OPENSSL_VERSION_NUMBER < 0x0090700fL
 #error BN_mod_inverse is probably buggy in your openssl version
 #endif
   BN_zero(x);
-  BN_sub(j,x,d);
+  BN_sub(j,x,d); j->neg=1;
   BN_set_bit(j,0);
   BN_set_bit(x,bits);
   BN_mod_inverse(j,j,x,ctx);
+  if(c) {
+    BN_copy(c,d);
+    BN_mask_bits(c,bits);
+    BN_mul(c,j,c,ctx);
+    BN_rshift(c,c,bits);
+    BN_mask_bits(c,bits);
+    }
 }
 
 void cMapMath::MonMul(BIGNUM *o, BIGNUM *a, BIGNUM *b)
index 84fc00270dc3ae00e8925c73e8ed6cdd9dbcfe57..1d8db715bf06ff6c08e304f47ac8b6b181d5ef96 100644 (file)
@@ -95,7 +95,7 @@ protected:
   cBNctx ctx;
   SHA_CTX sctx;
   // stateless
-  void MakeJ0(BIGNUM *j, BIGNUM *d, int bits=64);
+  void MakeJ0(BIGNUM *j, BIGNUM *d, BIGNUM *c=0, int bits=64);
   bool ModAdd(BIGNUM *r, BIGNUM *a, BIGNUM *b, BIGNUM *d);
   bool ModSub(BIGNUM *r, BIGNUM *d, BIGNUM *b);
   void MonMul(BIGNUM *o, BIGNUM *a, BIGNUM *b, BIGNUM *c, BIGNUM *d, BIGNUM *j, int w);