协议栈版本:Z-Stack Mesh 1.0.0
有关加密的编译选项:
-DSECURE=1
-DZG_SECURE_DYNAMIC=0
uint8 zgPreConfigKeys = TRUE;
拿一终端和一协调器进行实验,当双方的DEFAULT_KEY相同时,终端可成功入网并且双方可正常通讯,抓包可看到通讯过程与程序运行流程一致,内容也进行了加密处理;
当双方的DEFAULT_KEY不相同时,终端入网后并未因验证失败而进行自动复位,抓包时发现终端成功入网且分配到网络地址,也能向协调器发送数据并得到ACK应答,但协调器却不会向终端发送回应的数据包(自己设定的回应数据包),估计原因为双方DEFAULT_KEY不同,协调器只在MAC层接收到了数据包然后进行了过滤;
打断点调试终端,发现终端在入网成功后,并未进入“devState = DEV_END_DEVICE_UNAUTH;”的状态,原因为函数ZDApp_ProcessNetworkJoin( void )中的条件判断语句if ( ZG_SECURE_ENABLED && ( ZDApp_RestoreNwkKey() == false ) )中的ZDApp_RestoreNwkKey()结果为true,因此跳过了devState = DEV_END_DEVICE_UNAUTH;和ZDApp_Reset
timerStart( MAX_DEVICE_UNAUTH_TIMEOUT );语句,导致在双方DEFAULT_KEY不相同时终端也没办法进行自动复位;
按照我对加密通讯的理解,在使能了加密通讯后,终端成功入网后应该会有个验证,验证不正确或超时会有自动复位的功能,但跟踪了终端的整个入网流程后并未发现应该如何触发这个验证机制,还是我的编译选项有误或是不足?希望能得到大家的帮助,谢谢!