📄 sha1.h
字号:
#ifndef SHA1_H
#define SHA1_H
#define LITTLE_ENDIAN /* This should be #define'd if true. */
/* #define SHA1HANDSOFF * Copies data before messing with it. */
typedef struct {
unsigned long state[5];
unsigned long count[2];
unsigned char buffer[64];
} SHA1_CTX;
void SHA1Transform (unsigned long state[5], unsigned char buffer[64]);
void SHA1Init (SHA1_CTX* context);
void SHA1Update (SHA1_CTX* context, unsigned char* data, unsigned int len);
void SHA1Final (unsigned char digest[20], SHA1_CTX* context);
#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
/* blk0() and blk() perform the initial expand. */
/* I got the idea of expanding during the round function from SSLeay */
#ifdef LITTLE_ENDIAN
#define blk0(i) (block->l [i] = (rol (block->l [i],24) & 0xFF00FF00) \
| (rol (block->l [i], 8) & 0x00FF00FF))
#else
#define blk0(i) block->l [i]
#endif
#define blk(i) (block->l [i & 15] = \
rol (block->l [(i + 13) & 15] ^ block->l [(i + 8) & 15] \
^ block->l [(i + 2) & 15] ^ block->l [i & 15], 1))
/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
#define R0(v,w,x,y,z,i) \
z += ((w & (x ^ y)) ^ y) + blk0 (i) + 0x5A827999 + rol (v,5); w = rol (w,30);
#define R1(v,w,x,y,z,i) \
z += ((w & (x ^ y)) ^ y) + blk (i) + 0x5A827999 +rol (v,5); w = rol (w,30);
#define R2(v,w,x,y,z,i) \
z += (w ^ x ^ y) + blk (i) + 0x6ED9EBA1 + rol (v,5); w = rol (w,30);
#define R3(v,w,x,y,z,i) \
z += (((w | x) & y) | (w & x)) + blk (i) + 0x8F1BBCDC + rol (v,5); w = rol(w,30);
#define R4(v,w,x,y,z,i) \
z += (w ^ x ^ y) + blk (i) + 0xCA62C1D6 + rol (v,5); w=rol (w,30);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -