📄 arithmetic.c
字号:
#include "sha1.h"
#include "string.h"
#define S(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
#define w(i) (BUFFER->W[i&15] = S(BUFFER->W[(i+13)&15]^BUFFER->W[(i+8)&15] \
^BUFFER->W[(i+2)&15]^BUFFER->W[i&15],1))
void standard_sha1(uchar *ucInData,uchar len,uchar *ucOutData)
{
uchar t;
// uchar i;
word A,B,C,D,E;
WBBUFFER *BUFFER;
word wdTemp;
word H[5];
static uchar ucWorkSpace[64];
BUFFER = (WBBUFFER *)ucWorkSpace;
if(len > 55)
{
return;
}
t = 0;
H[0] = 0x67452301;
H[1] = 0xEFCDAB89;
H[2] = 0x98BADCFE;
H[3] = 0x10325476;
H[4] = 0xC3D2E1F0;
memcpy(BUFFER->w,ucInData,len);
BUFFER->w[len] = 0x80; //?1
for (t=len+1;t<56;t++)
{
BUFFER->w[t] = 0x0;
}
BUFFER->W[14] = 0;
BUFFER->W[15] = len*8;
t = 0;
wdTemp = 0;
A = H[0];
B = H[1];
C = H[2];
D = H[3];
E = H[4];
for (t = 0;t<80;t++)
{
wdTemp += S(A,5);
if(t<16)
{
wdTemp += BUFFER->W[t];
}
else
{
wdTemp += w(t);
}
if(t>=0 && t<=19)
{
wdTemp += ((B&(C^D))^D) + 0x5A827999 + E;
}
if(t>=20 && t<=39)
{
wdTemp += (B^C^D) + 0x6ED9EBA1 + E;
}
if(t>=40 && t<=59)
{
wdTemp += ((B&C)|(B&D)|(C&D)) + 0x8F1BBCDC + E;
}
if(t>=60 && t<=79)
{
wdTemp += (B^C^D) + 0xCA62C1D6 + E;
}
E = D; D = C; C = S(B,30); B = A; A = wdTemp;
wdTemp = 0;
}
H[0] = H[0] + A;H[1] = H[1] + B;H[2]= H[2] + C;H[3] = H[3] + D;H[4] = H[4] + E;
/*
for(t = 0;t<5;t++)
{
H[t] = (S(H[t],24)&0xFF00FF00)|(S(H[t],8)&0x00FF00FF);
}
*/
memcpy(ucOutData,&H[0],20);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -