int j;
uint16 t1,t2,t3;
IDEAkey T;
word16 *p=T+KEYLEN; //数组的最后一个位置
t1=inv(*Z++);
t2=-*Z++;
t3=-*Z++;
*--p=inv(*Z++); // 最后一个解密密钥对应第四个加密密钥的转换
*--p=t3; // 取反
*--p=t2; // 取反
*--p=t1; // 倒数第四个解密密钥对应第一个加密密钥的转换
for (j=1;j<ROUNDS;j++)
{ //以下依次生成解密密钥
t1=*Z++;
*--p=*Z++;
*--p=t1;
t1=inv(*Z++);
t2=-*Z++;
t3=-*Z++;
*--p=inv(*Z++);
*--p=t2;
*--p=t3;
*--p=t1;
}
t1=*Z++;
*--p=*Z++;
*--p=t1;
t1=inv(*Z++);
t2=-*Z++;
t3=-*Z++;
*--p=inv(*Z++);
*--p=t3;
*--p=t2;
*--p=t1;
/*copy and destroy temp copy*/
for(j=0,p=T;j<KEYLEN;j++) //复制解密密钥到DK中
{
*DK++=*p;
*p++=0;
}
}
|