📄 head.h
字号:
/*本文件是各应用函数的头文件*/
#define MAXRSABITS 1024 /*Max RSA key bits */
#define MIN_RSA_MODULUS_BITS 508
#define MAX_RSA_MODULUS_BITS 1024
#define MAX_RSA_MODULUS_LEN ((MAX_RSA_MODULUS_BITS + 7) / 8)
#define MAX_RSA_PRIME_BITS ((MAX_RSA_MODULUS_BITS + 1) / 2)
#define MAX_RSA_PRIME_LEN ((MAX_RSA_PRIME_BITS + 7) / 8)
typedef unsigned int UINT;
typedef int INT;
typedef UINT NN_DIGIT;
typedef unsigned short NN_HALF_DIGIT;
#define NN_DIGIT_BITS 32
#define NN_DIGIT_BITS_1 (NN_DIGIT_BITS-1)
#define NN_HALF_DIGIT_BITS 16
#define MAX_NN_DIGIT 0xffffffff
#define MAX_NN_HALF_DIGIT 0xffff
/* Constants.
Note: MAX_NN_DIGITS is long enough to hold any RSA modulus, plus
one more digit as required by R_GeneratePEMKeys (for n and phiN,
whose lengths must be even). All natural numbers have at most
MAX_NN_DIGITS digits, except for double-length intermediate values
in NN_Mult (t), NN_ModMult (t), NN_ModInv (w), and NN_Div (c).
*/
/* Length of digit in bytes */
#define NN_DIGIT_LEN (NN_DIGIT_BITS / 8)
/* Maximum length in digits */
#define MAX_NN_DIGITS \
((MAX_RSA_MODULUS_LEN + NN_DIGIT_LEN - 1) / NN_DIGIT_LEN+1)
/* Maximum digits */
/*取大数的第几比特的值 */
#define BIT(e,j) ((e[j/NN_DIGIT_BITS]>>(j%NN_DIGIT_BITS))&1)
/*定义大整数数据类型BIG */
/*BIG2为BIG的双精度型 */
typedef NN_DIGIT BIG[MAX_NN_DIGITS];
typedef NN_DIGIT BIG2[MAX_NN_DIGITS*2];
#define XX_STEP 5
/*用于素数判定的实验次数,增大次数可以提高素数的可靠性 */
#define MAX_MILER_RABIN_TEST 1
/************************************
下面定义了 g^e mod m的具体算法函数a=g^e mod m
最后一个参数值XX_STEP为窗口大小
digits为大数的单元数,即有多少个NN_DIGIT_BITS位单元
在本程序中不加说明的digits的含义均如此。
**************************************/
#define MODEXP(a,g,e,m,digits) \
SlidingWindowExpWithMont(a,g,e,m,digits,XX_STEP)
/***********************************
下面定义了平方模( g^2 mod m)的算法函数 a=b^2 mod m
mp的值由m 产生,参见下面的函数m2mp,即mp=m2mp(m)
***********************************/
#define SQUAREMOD(a,b,m,mp,digits) SquareMod(a,b,m,mp,digits)
/*
ADD3宏定义的含义是:
将指针a指向的双字加上单字b,
根据不同的系统可以优化
*/
#define ADD3(a,b) *((NN_DIGIT *)(a))+=b; if(*(a)<b)(*((NN_DIGIT*)(a)+1))++
/* Macros.
*/
#define LOW_HALF(x) (NN_HALF_DIGIT)((x) & MAX_NN_HALF_DIGIT)
#define HIGH_HALF(x) \
(NN_HALF_DIGIT)(((x) >> NN_HALF_DIGIT_BITS) & MAX_NN_HALF_DIGIT)
#define TO_HIGH_HALF(x) (((NN_DIGIT)(x)) << NN_HALF_DIGIT_BITS)
#define NN_ASSIGN_DIGIT(a, b, digits) {NN_AssignZero (a, digits); a[0] = b;}
/*====程序用公钥参数结构==================*/
typedef struct
{
BIG pq; /* p*q */
BIG Ke; /* 公钥 */
BIG Rmodm; /* ( 2^digits) mod pq */
NN_DIGIT mp; /* m2mp(m)的值 */
INT bits;
}ENCODEBLOCK;
/*======程序用私钥参数结构================*/
typedef struct
{
BIG p,q; /* 保证 p>q */
BIG Kd; /* 私钥 */
BIG dModp_1; /* Kd mod (p-1) */
BIG dModq_1; /* Kd mod (q-1) */
BIG qInv; /* (q逆) mod p */
BIG p1q1; /* (p-1)*(q-1) */
INT bits;
}DECODEBLOCK ;
/*======通用RSA密钥参数结构================*/
typedef struct
{
unsigned char bytes; /*MAX bytes=256 */
unsigned char data[MAXRSABITS/8];
}Big_num;
typedef struct
{
Big_num n;
Big_num e;
Big_num d;
Big_num p;
Big_num q;
Big_num dmp1; /*d mod(p-1) */
Big_num dmq1; /*d mod(q-1) */
Big_num iqmp; /*(inverse of q) mod p */
}RSA_key;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -