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

📄 文档.txt

📁 des加密解密的实现,能够加密任意文件,任意长度
💻 TXT
📖 第 1 页 / 共 5 页
字号:
 数的格式:	
	由于USHORT(全称unsigned short int)长16bit。USHORT*USHORT长度小于32bit,
所以可以没有损失得存储在ULONG(全称unsigned long)中。故考虑用基于USHORT的数组来
表示大整数。
    	在确定所用大整数的容量时,考虑到动态分配或释放内存比较麻烦,也耗费时间,所以
直接定义成静态数组。通过宏定义来确定所需要的大小。具体数据结构如下:
	typedef unsigned short clint;
	typedef clint CLINT[CLINTMAXDIGIT+1];
大数通过
	CLINT n_l;
声明。





FLINT.C中各函数的说明:


  各函数中可能会用到的宏定义(不区分大小写)
	
	MIN(a,b),MIN_L(a,b) 		return the minimum one
	MAX(a,b),MAX_L(a,b)		return the maximum one   
  	SWAP(a,b),SWAP_L(a,b)		swap the value of a and b
	RMLDZRS_L(n_l)          	ReMoveLeaDingZeRoS from CLINT-variables  
	ZCPY_L				Copy CLINT types with removal of leading zeros 
	ANDMAX_L			Reduction modulo Nmax + 1 
	SETZERO_L			Set CLINT-variables to values 0. 
	SETONE_L(n_l)			Set CLINT-variables to values 1.
	SETTWO_L(n_l)			Set CLINT-variables to values 2.
	DIGITS_L(n_l)			Read the number of digits of a CLINT-variable 
	SETDIGITS_L(n_l, l)		Set the number of digits of a CLINT-variable 
	INCDIGITS_L(n_l)		Increment the number of digits of a CLINT-variable 
	DECDIGITS_L(n_l)		Decrement the number of digits of a CLINT-variable 
	MSDPTR_L(n_l)			Pointer to the most significant digit of a CLINT variable 
	LSDPTR_L(n_l)			Pointer to the least significant digit of a CLINT variable 
	LT_L(a_l,b_l) 			test if a_l < b_l
	LE_L(a_l,b_l) 			test if a_l <= b_l
	GT_L(a_l,b_l) 			test if a_l > b_l
	GE_L(a_l,b_l) 			test if a_l >= b_l
	GTZ_L(a_l) 			test if a_l > 0
	EQZ_L(a_l) 			test if a_l = 0
	EQONE_L(a_l) 			test if a_l == 1
	SET_L(a_l,ul)			a_l <-- unsigned long ul 			
	ASSIGN_L(dest_l,src_l)		assign value src_l to dest_l
	ISEVEN_L(a_l)			true: a_l is even   
	ISODD_L(a_l)			true: a_l is odd 
	INITRAND_LT()			ulseed64_l ((unsigned long)time(NULL))
	INITRAND64_LT()			ulseed64_l ((unsigned long)time(NULL))
	INITRANDBBS_LT()		ulseedBBS_l ((unsigned long)time(NULL))
	SFACTOR_L(n_l) 			sieve_l ((n_l), NOOFSMALLPRIMES),Simple factorization with sieve_l() 
	ISPRIME_L(n) 			prime_l ((n), 302, 0),Miller-Rabin primality test, parameters according to Lenstra and [MOV] 

各函数的说明:



 功能:   Copy CLINT to CLINT                                           
 格式:   void cpy_l (CLINT dest_l, CLINT src_l);                       
 输入:   CLINT src_l                                                   
 输出:   CLINT dest_l                                                  
 返回值:	- 


 功能:  Swap two CLINT operands                                        
 格式:  void fswap_l (CLINT a_l, CLINT b_l);                           
 输入:  CLINT a_l, b_l                                                 
 输出:  Swapped CLINT operands b_l, a_l                                
 返回值: 	-        


 功能:  Test whether two CLINT operands are equal
 格式:  int equ_l (CLINT a_l, CLINT b_l);
 输入:  CLINT a_l, b_l
 输出:   	-
 返回值:1 : a_l have b_l equal values
 	 0 : otherwise


 功能:  Test whether two CLINT operands are equal modulo m             
 格式:  int mequ_l (CLINT a_l, CLINT b_l, CLINT m_l);                  
 输入:  CLINT a_l, b_l (Values to compare), CLINT m_l (Modulus)        
 输出:    	-                                                              
 返回值:1          : a_l = b_l mod m_l                                 
         0          : a_l != b_l mod m_l                                
         E_CLINT_DBZ: division by 0         


 功能:    Generation of maximum CLINT value 2^CLINTMAXBIT - 1            
 格式:    clint * setmax_l (CLINT a_l);                                  
 输入:    a_l CLINT variable                                             
 输出:    a_l set to value of 2^CLINTMAXBIT - 1 = Nmax                   
 返回值:  Address of CLINT variable a_l   


 功能:    Addition of two CLINT operands                                 
 格式:    int add_l (CLINT a_l, CLINT b_l, CLINT s_l);                   
 输入:     a_l, b_l (Operands)                                            
 输出:     s_l (Sum)                                                      
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_OFL: Overflow                                          
                                                                           


 功能:     Subtraction of one CLINT operand from another                  
 格式:     int sub_l (CLINT aa_l, CLINT bb_l, CLINT d_l);                 
 输入:     aa_l, bb_l (Operands)                                          
 输出:     d_l (Value of a_l - b_l)                                       
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_UFL: Underflow                                         
       


 功能:   Subtraction of one CLINT operand from another                  
 格式:    int sub_l (CLINT aa_l, CLINT bb_l, CLINT d_l);                 
 输入:     aa_l, bb_l (Operands)                                          
 输出:     d_l (Value of a_l - b_l)                                       
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_UFL: Underflow                                         



 功能:     Decrement                                                      
 格式:     int dec_l (CLINT a_l);                                         
 输入:     a_l (CLINT value)                                              
 输出:     a_l, decremented by 1                                          
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_UFL: Underflow                                         
                                              


 功能:    Multiplication                                                 
 格式:    int mul_l (CLINT f1_l, CLINT f2_l, CLINT pp_l);                
 输入:    f1_l, f2_l (Factors)                                           
 输出:    p_l (Product)                        
 返回值:  E_CLINT_OK : Everything O.K.                              
          E_CLINT_OFL: Overflow                   


 功能:     Squaring                                                       
 格式:     int sqr_l (CLINT f_l, CLINT pp_l);                             
 输入:     f_l (Factor)                                                   
 输出:     pp_l (Square)                                                  
 返回值:   E_CLINT_OK : Everything O.K.                                   
           E_CLINT_OFL: Overflow                                          
                                                                           


 功能:     Integer Division                                               
 格式:     int div_l (CLINT d1_l, CLINT d2_l, CLINT quot_l, CLINT rem_l); 
 输入:     d1_l (Dividend), d2_l (Divisor)                                
 输出:     quot_l (Quotient), rem_l (Remainder)                           
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_DBZ: Division by Zero                                  


 功能:     Binary rightshift by 1 bit                                     
 格式:     int shr_l (CLINT a_l);                                         
 输入:     a_l (Operand)                                                  
 输出:     a_l (Shifted value)                                            
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_UFL: Underflow                                    


 功能:  Binary leftshift by 1 bit                                      
 格式:    int shl_l (CLINT a_l);                                         
 输入:     a_l (Operand)                                                  
 输出:     a_l (Shifted value)                                            
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_OFL: Overflow                                          
                                                                           


功能:  Binary left-/rightshift by n bits                              
 格式:    int shift_l (CLINT n_l, long int noofbits);                    
 输入:     n_l (Operand)                                                  
            noofbits (Number of places to be shifted)                      
            negative sign: Shift right                                     
            positive sign: Shift left                                      
 输出:     a_l (Shifted value)                                            
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_OFL: Overflow                                          
            E_CLINT_UFL: Underflow                                         


 功能:    Reduction modulo m                                             
 格式:    int mod_l (CLINT dv_l, CLINT ds_l, CLINT r_l);                 
 输入:     dv_l (Dividend), ds_l (Divisor)                                
 输出:     r_l (Remainder of dv_l mod ds_l)                               
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_DBZ: Division by Zero                                  


 功能:  Reduction mod 2^k                                              
 格式:    int mod2_l (CLINT d_l, ULONG k, CLINT r_l);                    
 输入:     d_l (Dividend), k (Exponent of 2^k)                            
 输出:     r_l (Remainder of d_l mod 2^k)                                 
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_DBZ: Division by Zero                                  


 功能:  Modular addition                                               
 格式:    int madd_l (CLINT aa_l, CLINT bb_l, CLINT c_l, CLINT m_l);     
 输入:     aa_l, bb_l, m_l (Operands)                                     
 输出:     c_l (Remainder of aa_l + bb_l mod m_l)                         
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_DBZ: Division by Zero                                  


功能:  Modular subtraction                                            
 格式:    int msub_l (CLINT aa_l, CLINT bb_l, CLINT c_l, CLINT m_l);     
 输入:     aa_l, bb_l, m_l (Operands)                                     
 输出:     c_l (Remainder of aa_l - bb_l mod m_l)                         
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_DBZ: Division by Zero                                  


 功能:  Modular Multiplication                                         
 格式:    int mmul_l (CLINT aa_l, CLINT bb_l, CLINT c_l, CLINT m_l);     
 输入:     aa_l, bb_l, m_l (Operands)                                     
 输出:     c_l (Remainder of aa_l * bb_l mod m_l)                         
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_DBZ: Division by Zero                                  


 功能:  Modular squaring                                               
 格式:    int msqr_l (CLINT aa_l, CLINT c_l, CLINT m_l);                 
 输入:     aa_l, m_l (Operands)                                           
 输出:     c_l (Remainder of aa_l * aa_l mod m_l)                         
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_DBZ: Division by Zero                                  


功能:  Montgomery multiplication                                      
 格式:    void mulmon_l (CLINT a_l, CLINT b_l, CLINT n_l, USHORT nprime, 
                                                USHORT logB_r, CLINT p_l); 
 输入:      a_l, b_l (Factors)                                             
            n_l (Modulus, odd, n_l > a_l, b_l)                             
            nprime (-n_l^(-1) mod B)                                       
            logB_r (Integral part of logarithm of r to base B)             
            (For an explanation of the operands cf. Chap. 6)               
 输出:    p_l (Remainder of a_l * b_l * r^(-1) mod n_l)                  
            with r := B^logB_r, B^(logB_r-1) <= n_l < B^logB_r)            
 返回值:   -                                                              


 功能:  Inverse -n^(-1) mod B for odd n                                
 格式:    USHORT invmon_l (CLINT n_l);                                   
 输入:     n_l (Modulus)                                                  
 输出:     -                                                              
 返回值:   -n^(-1) mod B                                                     


功能:  Modular exponentiation                                         
            Automatic application of Montgomery exponentiation mexpkm_l    
            if modulus is even, else mexpk_l is used                       
 格式:    int mexp_l (CLINT bas_l, CLINT exp_l, CLINT p_l, CLINT m_l);   
 输入:     bas_l (Base), exp_l (Exponent), m_l (Modulus)                  
 输出:     p_l (Remainder of bas_l^exp_l mod m_l)                         
 返回值:   E_CLINT_OK : Everything O.K.                                   
            E_CLINT_DBZ: Division by Zero                                  


 功能:  Modular Exponentiation                                         
            with representation of exponent to base 2^5                    
 格式:    int mexp5_l (CLINT bas_l, CLINT exp_l, CLINT p_l, CLINT m_l);  

⌨️ 快捷键说明

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