⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sha1.h

📁 本程序实现DSA数字签名 是学习和研究密码学的良好资源 欢迎下载
💻 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 + -