⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nagra2-map57.c

📁 这是一个LINUX环境的 VDR 插件源代码,可支持Irdeto, Seca, Viaccess, Nagra, Conax & Cryptoworks等CA系统的读卡、共享等操作。
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * Softcam plugin to VDR (C++) * * This code is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This code is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Or, point your browser to http://www.gnu.org/copyleft/gpl.html */// -- cN2Map57 ----------------------------------------------------------------class cN2Map57 {private:  void mod_add(BIGNUM *arg1, BIGNUM *arg2, BIGNUM *arg3, BIGNUM *arg4);  void bn_cmplx1(BIGNUM *arg1, BIGNUM *arg2, BIGNUM *arg3, BIGNUM *arg4, BIGNUM *arg5);  void bn_cmplx1a(BIGNUM *arg1, BIGNUM *arg2, BIGNUM *arg3, BIGNUM *arg4, BIGNUM *arg5);  void mod_sub(void);  void bn_func1(BIGNUM *arg0);  void bn_func2(int arg0);  void bn_func3(int arg0);  void bn_cmplx7(void);  void bn_cmplx2(BIGNUM *var1, BIGNUM *var2, BIGNUM *var3, BIGNUM *var4, BIGNUM *var5, BIGNUM *var6);  BIGNUM *bn_glb0, *bn_glb1, *bn_glb3, *bn_glb5, *bn_glb6, *bn_glb7;  BIGNUM *bn_glb_a, *bn_glb_b, *bn_glb_c, *bn_glb_d, *bn_glb_e, *bn_glb_f, *bn_glb_g;  BIGNUM *bn_glb_h, *bn_glb_i, *bn_glb_j, *bn_glb_k, *bn_glb_l, *bn_glb_m;  BIGNUM *glb2pow128, *mask128, *glb2pow64, *mask64;  BN_CTX *t1;public:  void Map57(unsigned char *data);  };void cN2Map57::mod_add(BIGNUM *arg1, BIGNUM *arg2, BIGNUM *arg3, BIGNUM *arg4){  BN_add(arg1, arg2, arg3);  if(BN_cmp(arg1, arg4) >= 0) {    BN_sub(arg1, arg1, arg4);  }  BN_mask_bits(arg1, 128);}void cN2Map57::bn_cmplx1(BIGNUM *arg1, BIGNUM *arg2, BIGNUM *arg3, BIGNUM *arg4, BIGNUM *arg5){  int j;  BIGNUM *var44, *var64, *var84, *vara4;  var44 = BN_new();  var64 = BN_new();  var84 = BN_new();  vara4 = BN_new();  BN_copy(var44, arg2);  BN_copy(var64, arg3);  BN_clear(vara4);  for(j=0; j<2; j++) {    BN_copy(var84, var64);    BN_mask_bits(var84, 64);    BN_rshift(var64, var64, 64);    BN_mul(var84, var84, var44, t1);    BN_add(vara4, vara4, var84);    BN_copy(var84, vara4);    BN_mask_bits(var84, 128);    BN_mul(var84, vara4, arg4, t1);    BN_mask_bits(var84, 64);    BN_mul(var84, var84, arg5, t1);    BN_add(vara4, vara4, var84);    BN_rshift(vara4, vara4, 64);    if(BN_cmp(vara4, arg5) >= 0) {      BN_sub(vara4, vara4, arg5);    }    BN_mask_bits(vara4, 128);  }  BN_copy(arg1, vara4);  BN_free(var44);  BN_free(var64);  BN_free(var84);  BN_free(vara4);}void cN2Map57::bn_cmplx1a(BIGNUM *arg1, BIGNUM *arg2, BIGNUM *arg3, BIGNUM *arg4, BIGNUM *arg5){  int j;  BIGNUM *var44, *var64, *var84, *vara4;  var44 = BN_new();  var64 = BN_new();  var84 = BN_new();  vara4 = BN_new();  BN_copy(var44, arg2);  BN_copy(var64, arg3);  BN_clear(vara4);  for(j=0; j<2; j++) {    BN_copy(var84, var64);    BN_mask_bits(var84, 64);    BN_rshift(var64, var64, 64);    BN_mul(var84, var84, var44, t1);    BN_add(vara4, vara4, var84);    BN_copy(var84, vara4);    BN_mask_bits(var84, 128);    BN_mul(var84, vara4, arg4, t1);    BN_mask_bits(var84, 64);    BN_mul(var84, var84, arg5, t1);    BN_add(vara4, vara4, var84);    BN_rshift(vara4, vara4, 64);    if(j==0 && BN_cmp(vara4, arg5) >= 0) {      BN_sub(vara4, vara4, arg5);    }    BN_mask_bits(vara4, 128);  }  BN_copy(arg1, vara4);  BN_free(var44);  BN_free(var64);  BN_free(var84);  BN_free(vara4);}//uses 3, 1, glb2pow128//sets 1, 0 (unused)void cN2Map57::mod_sub(){  BN_copy(bn_glb0, bn_glb3);  BN_mod_sub(bn_glb1, bn_glb3, bn_glb1, glb2pow128, t1);  BN_mask_bits(bn_glb1, 128);}//uses 1, 3, 6//sets  1, 0 (unused), 7(unused)void cN2Map57::bn_func1(BIGNUM *arg0){  BIGNUM *var30 = BN_new();  BIGNUM *var50 = BN_new();  BN_copy(var30,arg0);  BN_mask_bits(var30, 8);  unsigned int x = BN_get_word(var30);  BN_copy(var30,arg0);  if( x != 0) {    BN_clear(var50);    BN_set_word(var50, 2);    BN_sub(var30, var30, var50);  } else {    BN_clear(var50);    BN_set_word(var50, 0xfe);    BN_add(var30, var30, var50);  }  BN_copy(bn_glb7, bn_glb1);  if(BN_is_zero(arg0)) {    BN_clear(bn_glb7);    BN_set_word(bn_glb7, 1);    BN_clear(bn_glb0);    mod_add(bn_glb1, bn_glb7, bn_glb0, bn_glb3);    BN_free(var30);    BN_free(var50);    return;  } else {    int msb = BN_num_bits(var30) -1;    while (msb > 0) {      bn_cmplx1(bn_glb1, bn_glb1, bn_glb1, bn_glb6, bn_glb3);      msb--;      if(BN_is_bit_set(var30, msb)) {        bn_cmplx1(bn_glb1, bn_glb1, bn_glb7, bn_glb6, bn_glb3);      }    }    BN_clear(bn_glb7);    BN_set_word(bn_glb7, 1);    bn_cmplx1(bn_glb1, bn_glb1, bn_glb7, bn_glb6, bn_glb3);    BN_clear(bn_glb0);  }  BN_free(var30);  BN_free(var50);}//uses 3, 6, a, b, c, l, glb2pow128//sets 0, 1, 5, 7, a, b, c, f, gvoid cN2Map57::bn_func2(int arg0){  BN_copy(bn_glb1, bn_glb_b);  mod_add(bn_glb1, bn_glb1, bn_glb1, bn_glb3);  BN_copy(bn_glb7, bn_glb1);  BN_copy(bn_glb5, bn_glb_c);  BN_mask_bits(bn_glb1, 128);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb5, bn_glb6, bn_glb3);  BN_copy(bn_glb_g, bn_glb1);  BN_copy(bn_glb1, bn_glb7);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb1, bn_glb6, bn_glb3);  BN_copy(bn_glb7, bn_glb_a);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb7, bn_glb6, bn_glb3);  mod_sub();  BN_copy(bn_glb_f, bn_glb1);  BN_copy(bn_glb1, bn_glb7);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb1, bn_glb6, bn_glb3);  BN_copy(bn_glb7, bn_glb1);  mod_add(bn_glb1, bn_glb1, bn_glb1, bn_glb3);  mod_add(bn_glb1, bn_glb1, bn_glb7, bn_glb3);  BN_copy(bn_glb7, bn_glb1);  BN_copy(bn_glb1, bn_glb_c);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb1, bn_glb6, bn_glb3);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb1, bn_glb6, bn_glb3);  BN_copy(bn_glb5, bn_glb_l);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb5, bn_glb6, bn_glb3);  mod_add(bn_glb1, bn_glb1, bn_glb7, bn_glb3);  BN_copy(bn_glb7, bn_glb1);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb1, bn_glb6, bn_glb3);  BN_copy(bn_glb0, bn_glb_f);  mod_add(bn_glb1, bn_glb0, bn_glb1, bn_glb3);  mod_add(bn_glb1, bn_glb0, bn_glb1, bn_glb3);  if(arg0 == 0) {    BN_copy(bn_glb_a, bn_glb1);  } else {    BN_copy(bn_glb_f, bn_glb1);  }  mod_add(bn_glb1, bn_glb0, bn_glb1, bn_glb3);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb7, bn_glb6, bn_glb3);  BN_copy(bn_glb7, bn_glb1);  BN_copy(bn_glb1, bn_glb_b);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb1, bn_glb6, bn_glb3);  mod_add(bn_glb1, bn_glb1, bn_glb1, bn_glb3);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb1, bn_glb6, bn_glb3);  mod_add(bn_glb1, bn_glb1, bn_glb1, bn_glb3);  mod_add(bn_glb1, bn_glb1, bn_glb7, bn_glb3);  mod_sub();  if(arg0 == 0) {    BN_copy(bn_glb_b, bn_glb1);    BN_copy(bn_glb_c, bn_glb_g);  } else {    BN_copy(bn_glb_f, bn_glb1);    BN_copy(bn_glb_f, bn_glb_g);  }}//uses 3, 6, a, b, c, d, e, k//sets 0, 1, 5, 7, a, b, c, f, g, h, i, jvoid cN2Map57::bn_func3(int arg0){  BN_copy(bn_glb1, bn_glb_c);  BN_copy(bn_glb7, bn_glb1);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb1, bn_glb6, bn_glb3);  bn_cmplx1(bn_glb0, bn_glb1, bn_glb7, bn_glb6, bn_glb3);  BN_copy(bn_glb_f, bn_glb0);  BN_copy(bn_glb5, bn_glb_d);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb5, bn_glb6, bn_glb3);  BN_copy(bn_glb7, bn_glb1);  mod_sub();  BN_copy(bn_glb0, bn_glb_a);  mod_add(bn_glb1, bn_glb0, bn_glb1, bn_glb3);  BN_copy(bn_glb_g, bn_glb1);  BN_copy(bn_glb5, bn_glb_c);  bn_cmplx1(bn_glb0, bn_glb1, bn_glb5, bn_glb6, bn_glb3);  if(arg0 == 0) {    BN_copy(bn_glb_c, bn_glb0);  } else {    BN_copy(bn_glb_g, bn_glb0);  }  bn_cmplx1(bn_glb1, bn_glb1, bn_glb1, bn_glb6, bn_glb3);  BN_copy(bn_glb_h, bn_glb1);  BN_copy(bn_glb0, bn_glb_a);  mod_add(bn_glb0, bn_glb0, bn_glb7, bn_glb3);  BN_copy(bn_glb7, bn_glb0);  //NOTE: don't 'mod' bn_glb1, but DO 'mod' glb_i  bn_cmplx1(bn_glb7, bn_glb1, bn_glb7, bn_glb6, bn_glb3);  bn_cmplx1a(bn_glb1, bn_glb1, bn_glb7, bn_glb6, bn_glb3);  BN_copy(bn_glb_i, bn_glb7);  BN_copy(bn_glb1, bn_glb_e);  BN_copy(bn_glb5, bn_glb_f);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb5, bn_glb6, bn_glb3);  BN_copy(bn_glb_f, bn_glb1);  mod_sub();  BN_copy(bn_glb0, bn_glb_b);  mod_add(bn_glb1, bn_glb0, bn_glb1, bn_glb3);  BN_copy(bn_glb_j, bn_glb1);  bn_cmplx1(bn_glb1, bn_glb1, bn_glb1, bn_glb6, bn_glb3);  BN_copy(bn_glb0, bn_glb1);  BN_copy(bn_glb1, bn_glb7);  BN_copy(bn_glb7, bn_glb0);  mod_sub();  mod_add(bn_glb1, bn_glb1, bn_glb7, bn_glb3);  if(arg0 == 0) {    BN_copy(bn_glb_a, bn_glb1);  } else {    BN_copy(bn_glb_f, bn_glb1);  }  mod_add(bn_glb1, bn_glb1, bn_glb1, bn_glb3);  mod_sub();  BN_copy(bn_glb7, bn_glb_i);  mod_add(bn_glb1, bn_glb1, bn_glb7, bn_glb3);  BN_copy(bn_glb5, bn_glb_j);  bn_cmplx1(bn_glb0, bn_glb1, bn_glb5, bn_glb6, bn_glb3);  BN_copy(bn_glb1, bn_glb_f);  BN_copy(bn_glb_f, bn_glb0);  BN_copy(bn_glb7, bn_glb_b);  mod_add(bn_glb1, bn_glb1, bn_glb7, bn_glb3);  BN_copy(bn_glb7, bn_glb1);  BN_copy(bn_glb1, bn_glb_g);  BN_copy(bn_glb5, bn_glb_h);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -