📄 nagra2-map57.c
字号:
bn_cmplx1(bn_glb1, bn_glb1, bn_glb5, bn_glb6, bn_glb3); bn_cmplx1(bn_glb1, bn_glb1, bn_glb7, bn_glb6, bn_glb3); mod_sub(); BN_copy(bn_glb7, bn_glb_f); mod_add(bn_glb1, bn_glb1, bn_glb7, bn_glb3); BN_copy(bn_glb5, bn_glb_k); bn_cmplx1(bn_glb1, bn_glb1, bn_glb5, bn_glb6, bn_glb3); if(arg0 == 0) { BN_copy(bn_glb_b, bn_glb1); } else { BN_copy(bn_glb_f, bn_glb1); }}//uses c, d, e, m//sets 0, a, b, cvoid cN2Map57::bn_cmplx7(){ BIGNUM *var1; var1 = BN_new(); BN_copy(bn_glb0, bn_glb_c); if(BN_is_zero(bn_glb_c)) { BN_copy(bn_glb_a, bn_glb_d); BN_copy(bn_glb_b, bn_glb_e); BN_copy(bn_glb_c, bn_glb_m); bn_func3(1); } else { BN_clear(var1); BN_set_word(var1, 0xFFFFFFFF); BN_mask_bits(bn_glb_a, 32); BN_lshift(var1, bn_glb_m, 0x20); BN_add(bn_glb_a, bn_glb_a, var1); BN_mask_bits(bn_glb_a, 128); bn_func3(0); } BN_free(var1);}void cN2Map57::bn_cmplx2(BIGNUM *var1, BIGNUM *var2, BIGNUM *var3, BIGNUM *var4, BIGNUM *var5, BIGNUM *var6){ BIGNUM *var48; int len = BN_num_bits(var6); int i; if(len < 2) return; if(BN_is_zero(var2) && BN_is_zero(var3) && BN_is_zero(var4)) return; var48 = BN_new(); BN_copy(bn_glb3, var1); BN_copy(bn_glb6, bn_glb3); BN_set_bit(bn_glb6, 0); BN_sub(bn_glb6, glb2pow128, bn_glb6); BN_mod_inverse(bn_glb6, bn_glb6, glb2pow64, t1); BN_clear(bn_glb0); // if(! BN_is_zero(bn_glb3)) { BN_clear(bn_glb1); BN_set_word(bn_glb1, 2); BN_clear(bn_glb_k); BN_set_word(bn_glb_k, 0x88); BN_mod_exp(bn_glb1, bn_glb1, bn_glb_k, bn_glb3, t1); } // for(i=0; i < 4; i++) { bn_cmplx1(bn_glb1, bn_glb1, bn_glb1, bn_glb6, bn_glb3); } // BN_clear(bn_glb7); BN_set_word(bn_glb7, 1); BN_add(bn_glb0, bn_glb3, bn_glb7); BN_copy(bn_glb_k, bn_glb0); BN_rshift(bn_glb_k, bn_glb_k, 1); BN_copy(bn_glb7, bn_glb1); BN_copy(bn_glb5, bn_glb_k); BN_mask_bits(bn_glb5, 128); bn_cmplx1(bn_glb1, bn_glb1, bn_glb5, bn_glb6, bn_glb3); BN_copy(bn_glb_k, bn_glb1); BN_copy(bn_glb1, var5); BN_mask_bits(bn_glb1, 128); bn_cmplx1(bn_glb1, bn_glb1, bn_glb7, bn_glb6, bn_glb3); BN_copy(bn_glb_l, bn_glb1); BN_copy(bn_glb1, bn_glb7); BN_clear(bn_glb5); BN_set_word(bn_glb5, 1); bn_cmplx1(bn_glb1, bn_glb1, bn_glb5, bn_glb6, bn_glb3); BN_copy(bn_glb_c, bn_glb1); BN_copy(bn_glb_m, bn_glb1); BN_copy(bn_glb1, bn_glb7); BN_copy(bn_glb5, var2); BN_mask_bits(bn_glb5, 128); bn_cmplx1(bn_glb1, bn_glb1, bn_glb5, bn_glb6, bn_glb3); BN_copy(bn_glb_a, bn_glb1); BN_copy(bn_glb1, bn_glb7); BN_copy(bn_glb5, var3); BN_mask_bits(bn_glb5, 128); bn_cmplx1(bn_glb1, bn_glb1, bn_glb5, bn_glb6, bn_glb3); BN_copy(bn_glb_b, bn_glb1); BN_copy(bn_glb_d, bn_glb_a); BN_copy(bn_glb_e, bn_glb_b); int x = len -1; while(x > 0) { x--; bn_func2(0); if(BN_is_bit_set(var6, x)) { bn_cmplx7(); } } BN_copy(bn_glb1, bn_glb_c); BN_mask_bits(bn_glb1, 128); BN_copy(bn_glb7, bn_glb1); bn_cmplx1(bn_glb1, bn_glb1, bn_glb1, bn_glb6, bn_glb3); 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_copy(bn_glb0, bn_glb1); BN_clear(bn_glb7); BN_set_word(bn_glb7, 1); BN_copy(bn_glb1, bn_glb0); BN_clear(bn_glb0); bn_func1(var1); BN_copy(bn_glb5, bn_glb_b); BN_mask_bits(bn_glb5, 128); bn_cmplx1(bn_glb0, bn_glb1, bn_glb5, bn_glb6, bn_glb3); BN_copy(bn_glb7, bn_glb0); BN_copy(bn_glb5, bn_glb_c); BN_mask_bits(bn_glb5, 128); bn_cmplx1(bn_glb1, bn_glb1, bn_glb5, bn_glb6, bn_glb3); BN_copy(bn_glb5, bn_glb_a); BN_mask_bits(bn_glb5, 128); bn_cmplx1(bn_glb1, bn_glb1, bn_glb5, bn_glb6, bn_glb3); BN_clear(bn_glb5); BN_set_word(bn_glb5, 1); bn_cmplx1(bn_glb0, bn_glb1, bn_glb5, bn_glb6, bn_glb3); BN_copy(bn_glb_a, bn_glb0); BN_copy(bn_glb1, bn_glb7); BN_clear(bn_glb5); BN_set_word(bn_glb5, 1); bn_cmplx1(bn_glb0, bn_glb1, bn_glb5, bn_glb6, bn_glb3); BN_copy(bn_glb_b, bn_glb0); BN_free(var48);} void cN2Map57::Map57(unsigned char *data){ BIGNUM *var38, *var58, *var78, *var98, *varb8, *vard8; BN_CTX *t; unsigned char tmpdata[256]; unsigned char res[256]; t = BN_CTX_new(); t1 = BN_CTX_new(); BN_CTX_init(t); glb2pow128 = BN_new(); BN_clear(glb2pow128); BN_set_bit(glb2pow128, 128); mask128 = BN_new(); BN_hex2bn(&mask128, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); glb2pow64 = BN_new(); BN_clear(glb2pow64); BN_set_bit(glb2pow64, 64); mask64 = BN_new(); BN_hex2bn(&mask64, "FFFFFFFFFFFFFFFF"); bn_glb0=BN_new(); BN_clear(bn_glb0); bn_glb1=BN_new(); BN_clear(bn_glb1); bn_glb3=BN_new(); BN_clear(bn_glb3); bn_glb5=BN_new(); BN_clear(bn_glb5); bn_glb6=BN_new(); BN_clear(bn_glb6); bn_glb7=BN_new(); BN_clear(bn_glb7); bn_glb_a=BN_new(); BN_clear(bn_glb_a); bn_glb_b=BN_new(); BN_clear(bn_glb_b); bn_glb_c=BN_new(); BN_clear(bn_glb_c); bn_glb_d=BN_new(); BN_clear(bn_glb_d); bn_glb_e=BN_new(); BN_clear(bn_glb_e); bn_glb_f=BN_new(); BN_clear(bn_glb_f); bn_glb_g=BN_new(); BN_clear(bn_glb_g); bn_glb_h=BN_new(); BN_clear(bn_glb_h); bn_glb_i=BN_new(); BN_clear(bn_glb_i); bn_glb_j=BN_new(); BN_clear(bn_glb_j); bn_glb_k=BN_new(); BN_clear(bn_glb_k); bn_glb_l=BN_new(); BN_clear(bn_glb_l); bn_glb_m=BN_new(); BN_clear(bn_glb_m); var38=BN_new(); BN_clear(var38); var58=BN_new(); BN_clear(var58); var78=BN_new(); BN_clear(var78); var98=BN_new(); BN_clear(var98); varb8=BN_new(); BN_clear(varb8); vard8=BN_new(); BN_clear(vard8); memcpy(tmpdata, data, 0x80); RotateBytes(tmpdata, 0x80); BN_bin2bn(tmpdata, 16, var78); BN_bin2bn(tmpdata+0x10, 16, varb8); BN_bin2bn(tmpdata+0x20, 16, var98); BN_bin2bn(tmpdata+0x40, 16, vard8); BN_bin2bn(tmpdata+0x60, 16, var38); BN_bin2bn(tmpdata+0x70, 16, var58); bn_cmplx2(varb8, var58, vard8, var38, var78, var98); memset(res, 0, 0x80); unsigned int *dest = (unsigned int *)res, *src = (unsigned int *)data; *dest++ = src[0x03]; *dest++ = src[0x02]; *dest++ = src[0x01]; *dest++ = src[0x00]; *dest++ = src[0x07]; *dest++ = src[0x06]; *dest++ = src[0x05]; *dest++ = src[0x04]; memset(tmpdata, 0, 0x20); int len = BN_bn2bin(bn_glb_a, tmpdata); if(len) { RotateBytes(tmpdata, len); } src = (unsigned int *)tmpdata; *dest++ = src[0x03]; *dest++ = src[0x02]; *dest++ = src[0x01]; *dest++ = src[0x00]; memset(tmpdata, 0, 0x20); len = BN_bn2bin(bn_glb_m, tmpdata); if(len) { RotateBytes(tmpdata, len); } *dest = src[0x03]; dest+=4; memset(tmpdata, 0, 0x20); len = BN_bn2bin(bn_glb_b, tmpdata); if(len) { RotateBytes(tmpdata, len); } *dest++ = src[0x03]; *dest++ = src[0x02]; *dest++ = src[0x01]; *dest++ = src[0x00]; dest+=4; src = (unsigned int *)(data+0x60); *dest++ = src[0x03]; *dest++ = src[0x02]; *dest++ = src[0x01]; *dest++ = src[0x00]; *dest++ = src[0x07]; *dest++ = src[0x06]; *dest++ = src[0x05]; *dest++ = src[0x04]; *(unsigned int *)(data + (8<<2))= *(unsigned int *)(res + (11<<2)); *(unsigned int *)(data + (9<<2))= *(unsigned int *)(res + (10<<2)); *(unsigned int *)(data + (10<<2))= *(unsigned int *)(res + (9<<2)); *(unsigned int *)(data + (11<<2))= *(unsigned int *)(res + (8<<2)); *(unsigned int *)(data + (12<<2))= *(unsigned int *)(res + (12<<2)); *(unsigned int *)(data + (13<<2))= *(unsigned int *)(res + (13<<2)); *(unsigned int *)(data + (14<<2))= *(unsigned int *)(res + (14<<2)); *(unsigned int *)(data + (15<<2))= *(unsigned int *)(res + (15<<2)); *(unsigned int *)(data + (16<<2))= *(unsigned int *)(res + (19<<2)); *(unsigned int *)(data + (17<<2))= *(unsigned int *)(res + (18<<2)); *(unsigned int *)(data + (18<<2))= *(unsigned int *)(res + (17<<2)); *(unsigned int *)(data + (19<<2))= *(unsigned int *)(res + (16<<2)); *(unsigned int *)(data + (20<<2))= *(unsigned int *)(res + (20<<2)); *(unsigned int *)(data + (21<<2))= *(unsigned int *)(res + (21<<2)); *(unsigned int *)(data + (22<<2))= *(unsigned int *)(res + (22<<2)); *(unsigned int *)(data + (23<<2))= *(unsigned int *)(res + (23<<2)); BN_free(glb2pow128); BN_free(mask128); BN_free(glb2pow64); BN_free(mask64); BN_free(bn_glb0); BN_free(bn_glb1); BN_free(bn_glb3); BN_free(bn_glb5); BN_free(bn_glb6); BN_free(bn_glb7); BN_free(bn_glb_a); BN_free(bn_glb_b); BN_free(bn_glb_c); BN_free(bn_glb_d); BN_free(bn_glb_e); BN_free(bn_glb_f); BN_free(bn_glb_g); BN_free(bn_glb_h); BN_free(bn_glb_i); BN_free(bn_glb_j); BN_free(bn_glb_k); BN_free(bn_glb_l); BN_free(bn_glb_m); BN_free(var38); BN_free(var58); BN_free(var78); BN_free(var98); BN_free(varb8); BN_free(vard8); BN_CTX_free(t); BN_CTX_free(t1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -