我正在深入sha1.c
研究md5.c
作者 Christophe Devine,以便在 WWW 上实现 AES 加密。大概测试服务器和客户端上的文件是相同的。但是,即使用于生成密钥的信息相同,我们生成的密钥也是不同的。
这两种方法的计算核心都在xxx_process(...)
. 两者都有一些宏观魔术。我想如果有人要努力编写宏,那么它应该做点什么。如果有人花时间编写一个宏函数,该函数的表达式用作另一个宏的输入,那么我认为它应该评估为某个确定性值。这不是我在调用中看到的P(a,b,c,d,e,x)
,什么时候R(t)
传入 for x
。我读错了吗?或者不R(t)
计算为以下调用中的表达式?
P( B, C, D, E, A, R(19) );
#define P(a,b,c,d,e,x) \
{ \
e += S(a,5) + F(b,c,d) + K + x; b = S(b,30); \
}
#define R(t) \
( \
temp = W[(t - 3) & 0x0F] ^ W[(t - 8) & 0x0F] ^ \
W[(t - 14) & 0x0F] ^ W[ t & 0x0F], \
( W[t & 0x0F] = S(temp,1) ) \
)