LTE ZUC EEA3 EIA3 source code error 官方源代码 的错误之处


近期对我们LTE空口项目中增加了ZUC 祖冲之算法的加密和完整性保护。当然是从官方网站找到了算法协议标准和源代码以及测试数据样本。

但是移植过程中发现一些问题,这里我把自己走过的弯路分享出来!

Note:下文中提到的 identifier "z","L"均来自算法官方源代码的上下文,这里不作详细说明。

1.   EEA算法过程,官方代码没有错误,但是在小端平台不兼容,因此要适配改善。加密最后用Keystream对plainText进行异或加密时,

由于z[i]是大端存储的码流,而plainText本来是unsigned char 类型的码流,但转换为unsigned int类型的M[1]后,无疑就会在小端平台发生大小端颠倒的问题

因此我们应该作一个小的改动,在源代码的EEA3函数最后的for循环里,在C[i] = M[i] ^ z[i]前面增加一行代码:z[i] = ntohl(z[i]);

或者我们采用以字节为最小单位来进行异或操作,change the EEA3()'s parameter "u32 *M" into "u8 *M" type. 如下改进后的for循环(另增加一个switch语句):

u32 tempLen = LENGTH&0xFFFFFFFC;
u32 zIndex = 0;
for(i = 0; i>24;
    M[i+1]  ^= z[zIndex]>>16;
    M[i+2]  ^= z[zIndex]>>8;
    M[i+3]  ^= z[zIndex];
}

switch(LENGHTH)&0x03
{
case 3:
    M[i+2] ^= z[zIndex+1]>>8;
case 2:
    M[i+1] ^= z[zIndex+1]>>16;
case 1:
    M[i]     ^= z[zIndex+1]>>24;
default:
    break;
}

2.  官方源代码的EIA3也是有问题的,这里并没有说明,我在广州,要么可以请我吃个饭,要么可以让公司花点钱,我去技术顾问下,解决下你们问题。哈哈哈~ 



如有商务合作需要,欢迎联系我QQ:287042313

你可能感兴趣的:(无线通信)