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

📄 head.h

📁 网络中交换节点的上数据的交换和下行数据分发的硬件实现
💻 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 + -