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<tempLen; i+=4)
{
    zIndex = i/4;
    M[i]      ^= z[zIndex]>>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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值