36 ctx->
H[0] = 0x67452301L;
37 ctx->
H[1] = 0xefcdab89L;
38 ctx->
H[2] = 0x98badcfeL;
39 ctx->
H[3] = 0x10325476L;
40 ctx->
H[4] = 0xc3d2e1f0L;
42 for (i = 0; i < 80; i++)
52 for (i = 0; i < len; i++) {
53 ctx->
W[ctx->
lenW / 4] <<= 8;
54 ctx->
W[ctx->
lenW / 4] |= (uint32_t)dataIn[i];
55 if ((++ctx->
lenW) % 64 == 0) {
66 unsigned char pad0x80 = 0x80;
67 unsigned char pad0x00 = 0x00;
68 unsigned char padlen[8];
73 padlen[0] = (
unsigned char)((ctx->
sizeHi >> 24) & 255);
74 padlen[1] = (
unsigned char)((ctx->
sizeHi >> 16) & 255);
75 padlen[2] = (
unsigned char)((ctx->
sizeHi >> 8) & 255);
76 padlen[3] = (
unsigned char)((ctx->
sizeHi >> 0) & 255);
77 padlen[4] = (
unsigned char)((ctx->
sizeLo >> 24) & 255);
78 padlen[5] = (
unsigned char)((ctx->
sizeLo >> 16) & 255);
79 padlen[6] = (
unsigned char)((ctx->
sizeLo >> 8) & 255);
80 padlen[7] = (
unsigned char)((ctx->
sizeLo >> 0) & 255);
82 while (ctx->
lenW != 56)
88 for (i = 0; i < 20; i++) {
89 hashout[i] = (
unsigned char)(ctx->
H[i / 4] >> 24);
100 void sha1_hash(
const unsigned char *dataIn,
int len,
unsigned char hashout[20]) {
109 #define SHA_ROTL(X,n) ((((X) << (n)) | ((X) >> (32-(n)))) & 0xffffffffL)
113 uint32_t A,B,C,D,E,TEMP;
115 for (t = 16; t <= 79; t++)
117 SHA_ROTL(ctx->
W[t-3] ^ ctx->
W[t-8] ^ ctx->
W[t-14] ^ ctx->
W[t-16], 1);
125 for (t = 0; t <= 19; t++) {
126 TEMP = (
SHA_ROTL(A,5) + (((C^D)&B)^D) + E + ctx->
W[t] + 0x5a827999L) & 0xffffffffL;
127 E = D; D = C; C =
SHA_ROTL(B, 30); B = A; A = TEMP;
129 for (t = 20; t <= 39; t++) {
130 TEMP = (
SHA_ROTL(A,5) + (B^C^D) + E + ctx->
W[t] + 0x6ed9eba1L) & 0xffffffffL;
131 E = D; D = C; C =
SHA_ROTL(B, 30); B = A; A = TEMP;
133 for (t = 40; t <= 59; t++) {
134 TEMP = (
SHA_ROTL(A,5) + ((B&C)|(D&(B|C))) + E + ctx->
W[t] + 0x8f1bbcdcL) & 0xffffffffL;
135 E = D; D = C; C =
SHA_ROTL(B, 30); B = A; A = TEMP;
137 for (t = 60; t <= 79; t++) {
138 TEMP = (
SHA_ROTL(A,5) + (B^C^D) + E + ctx->
W[t] + 0xca62c1d6L) & 0xffffffffL;
139 E = D; D = C; C =
SHA_ROTL(B, 30); B = A; A = TEMP;
void sha1_init(sha1_state_t *ctx)
void sha1_finish(sha1_state_t *ctx, unsigned char hashout[20])
void sha1_hash(const unsigned char *dataIn, int len, unsigned char hashout[20])
void sha1_append(sha1_state_t *ctx, const unsigned char *dataIn, int len)
static void sha1_hashblock(sha1_state_t *ctx)