最近在实现windows下NTP在非对称加密机制下的时间同步,但是每次客户端收到服务器的cookie请求应答包后进行验签使报错,显示signature_not_verified。不知道怎么改,请各位大神多多指教一下,不甚感激
如果翻译过来就是签名未验证的意思
最近正好也在windows上调试ntpd的源码,碰到与你同样的问题。
siglen = ntohl(ep->pkt[i++]);
bug来自这行代码,在windows上ntohl是一个宏定义,i++被执行了4次,导致取签名数据的索引错了
#define ntohl(ul) (((u_long)(ul) & 0xff) << 24 | \
((u_long)(ul) & 0xff00) << 8 | \
((u_long)(ul) & 0xff0000) >> 8 | \
((u_long)(ul) & 0xff000000) >> 24)