| 
				 //   实现模2^16+1乘运算,参数为 一个16位分组, 一个子密钥 
uint16 mul(uint16 a, uint16 b) 
{ 
   word32 p; 
  
   if (a) 
   { 
      if (b) 
      { 
     p=(word32)a*b; 
     b=(uint16)(low16(p));   // 取低16位作为b的值 
     a=(uint16)(p>>16);    //取得高16位作为a的值 
     return b-a+(b<a);    
      } 
      else 
      {               
         return 1-a;   
      } 
   } 
   else 
      return 1-b;    
} 
  
#define MUL(x,y) (x=mul(low16(x),y))  // 模2^16+1乘后值赋给X(子分组)宏 
  
  
#define CONST 
  
static void cipher_idea(word16 in[4],word16 out[4],register CONST IDEAkey Z) 
{ 
   register uint16 x1,x2,x3,x4,t1,t2; 			
				 |