📄 nagra2-map57.c
字号:
/* * 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 + -