annotate src/core/ngx_sha1.c @ 6590:d375f4210e41

HTTP/2: fixed the "http request count is zero" alert. When the stream is terminated the HEADERS frame can still wait in the output queue. This frame can't be removed and must be sent to the client anyway, since HTTP/2 uses stateful compression for headers. So in order to postpone closing and freeing memory of such stream the special close stream handler is set to the write event. After the HEADERS frame is sent the write event is called and the stream will be finally closed. Some events like receiving a RST_STREAM can trigger the read handler of such stream in closing state and cause unexpected processing that can result in another attempt to finalize the request. To prevent it the read handler is now set to ngx_http_empty_handler. Thanks to Amazon.
author Valentin Bartenev <vbart@nginx.com>
date Thu, 16 Jun 2016 20:55:11 +0300
parents 1064ea81ed3a
children 9eefb38f0005
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6586
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2 /*
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 * Copyright (C) Maxim Dounin
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4 * Copyright (C) Nginx, Inc.
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 *
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6 * An internal SHA1 implementation.
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 * It is not expected to be optimal and is used only
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8 * if no SHA1 implementation was found in system.
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 */
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 #include <ngx_config.h>
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13 #include <ngx_core.h>
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 #include <ngx_sha1.h>
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 #if !(NGX_HAVE_SHA1)
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 static const u_char *ngx_sha1_body(ngx_sha1_t *ctx, const u_char *data,
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 size_t size);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 void
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 ngx_sha1_init(ngx_sha1_t *ctx)
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 {
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 ctx->a = 0x67452301;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 ctx->b = 0xefcdab89;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 ctx->c = 0x98badcfe;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 ctx->d = 0x10325476;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 ctx->e = 0xc3d2e1f0;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 ctx->bytes = 0;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 }
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 void
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 ngx_sha1_update(ngx_sha1_t *ctx, const void *data, size_t size)
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 {
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 size_t used, free;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 used = (size_t) (ctx->bytes & 0x3f);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 ctx->bytes += size;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 if (used) {
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 free = 64 - used;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 if (size < free) {
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 ngx_memcpy(&ctx->buffer[used], data, size);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 return;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 }
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 ngx_memcpy(&ctx->buffer[used], data, free);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 data = (u_char *) data + free;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 size -= free;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 (void) ngx_sha1_body(ctx, ctx->buffer, 64);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 }
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 if (size >= 64) {
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 data = ngx_sha1_body(ctx, data, size & ~(size_t) 0x3f);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 size &= 0x3f;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 }
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 ngx_memcpy(ctx->buffer, data, size);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 }
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 void
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 ngx_sha1_final(u_char result[20], ngx_sha1_t *ctx)
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 {
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 size_t used, free;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 used = (size_t) (ctx->bytes & 0x3f);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 ctx->buffer[used++] = 0x80;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 free = 64 - used;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 if (free < 8) {
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 ngx_memzero(&ctx->buffer[used], free);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 (void) ngx_sha1_body(ctx, ctx->buffer, 64);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 used = 0;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 free = 64;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 }
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 ngx_memzero(&ctx->buffer[used], free - 8);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 ctx->bytes <<= 3;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 ctx->buffer[56] = (u_char) (ctx->bytes >> 56);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 ctx->buffer[57] = (u_char) (ctx->bytes >> 48);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 ctx->buffer[58] = (u_char) (ctx->bytes >> 40);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 ctx->buffer[59] = (u_char) (ctx->bytes >> 32);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 ctx->buffer[60] = (u_char) (ctx->bytes >> 24);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 ctx->buffer[61] = (u_char) (ctx->bytes >> 16);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 ctx->buffer[62] = (u_char) (ctx->bytes >> 8);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 ctx->buffer[63] = (u_char) ctx->bytes;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 (void) ngx_sha1_body(ctx, ctx->buffer, 64);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 result[0] = (u_char) (ctx->a >> 24);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 result[1] = (u_char) (ctx->a >> 16);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 result[2] = (u_char) (ctx->a >> 8);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 result[3] = (u_char) ctx->a;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 result[4] = (u_char) (ctx->b >> 24);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 result[5] = (u_char) (ctx->b >> 16);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 result[6] = (u_char) (ctx->b >> 8);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 result[7] = (u_char) ctx->b;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 result[8] = (u_char) (ctx->c >> 24);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 result[9] = (u_char) (ctx->c >> 16);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 result[10] = (u_char) (ctx->c >> 8);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 result[11] = (u_char) ctx->c;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 result[12] = (u_char) (ctx->d >> 24);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 result[13] = (u_char) (ctx->d >> 16);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 result[14] = (u_char) (ctx->d >> 8);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 result[15] = (u_char) ctx->d;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 result[16] = (u_char) (ctx->e >> 24);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 result[17] = (u_char) (ctx->e >> 16);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 result[18] = (u_char) (ctx->e >> 8);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 result[19] = (u_char) ctx->e;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 ngx_memzero(ctx, sizeof(*ctx));
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 }
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124 /*
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 * Helper functions.
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126 */
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 #define ROTATE(bits, word) (((word) << (bits)) | ((word) >> (32 - (bits))))
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 #define F1(b, c, d) (((b) & (c)) | ((~(b)) & (d)))
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 #define F2(b, c, d) ((b) ^ (c) ^ (d))
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 #define F3(b, c, d) (((b) & (c)) | ((b) & (d)) | ((c) & (d)))
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 #define STEP(f, a, b, c, d, e, w, t) \
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135 temp = ROTATE(5, (a)) + f((b), (c), (d)) + (e) + (w) + (t); \
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136 (e) = (d); \
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 (d) = (c); \
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 (c) = ROTATE(30, (b)); \
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 (b) = (a); \
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140 (a) = temp;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 /*
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144 * GET() reads 4 input bytes in big-endian byte order and returns
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 * them as uint32_t.
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 */
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148 #define GET(n) \
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 ((uint32_t) p[n * 4 + 3] | \
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
150 ((uint32_t) p[n * 4 + 2] << 8) | \
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151 ((uint32_t) p[n * 4 + 1] << 16) | \
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 ((uint32_t) p[n * 4] << 24))
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155 /*
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156 * This processes one or more 64-byte data blocks, but does not update
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157 * the bit counters. There are no alignment requirements.
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 */
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160 static const u_char *
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161 ngx_sha1_body(ngx_sha1_t *ctx, const u_char *data, size_t size)
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162 {
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163 uint32_t a, b, c, d, e, temp;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164 uint32_t saved_a, saved_b, saved_c, saved_d, saved_e;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165 uint32_t words[80];
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166 ngx_uint_t i;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167 const u_char *p;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
168
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169 p = data;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171 a = ctx->a;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172 b = ctx->b;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
173 c = ctx->c;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174 d = ctx->d;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175 e = ctx->e;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 do {
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178 saved_a = a;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179 saved_b = b;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180 saved_c = c;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181 saved_d = d;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182 saved_e = e;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
183
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
184 /* Load data block into the words array */
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
186 for (i = 0; i < 16; i++) {
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187 words[i] = GET(i);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
188 }
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190 for (i = 16; i < 80; i++) {
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 words[i] = ROTATE(1, words[i - 3] ^ words[i - 8] ^ words[i - 14]
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192 ^ words[i - 16]);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
193 }
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
194
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
195 /* Transformations */
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
196
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197 STEP(F1, a, b, c, d, e, words[0], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198 STEP(F1, a, b, c, d, e, words[1], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
199 STEP(F1, a, b, c, d, e, words[2], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
200 STEP(F1, a, b, c, d, e, words[3], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201 STEP(F1, a, b, c, d, e, words[4], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
202 STEP(F1, a, b, c, d, e, words[5], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
203 STEP(F1, a, b, c, d, e, words[6], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
204 STEP(F1, a, b, c, d, e, words[7], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
205 STEP(F1, a, b, c, d, e, words[8], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
206 STEP(F1, a, b, c, d, e, words[9], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
207 STEP(F1, a, b, c, d, e, words[10], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
208 STEP(F1, a, b, c, d, e, words[11], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
209 STEP(F1, a, b, c, d, e, words[12], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
210 STEP(F1, a, b, c, d, e, words[13], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
211 STEP(F1, a, b, c, d, e, words[14], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
212 STEP(F1, a, b, c, d, e, words[15], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
213 STEP(F1, a, b, c, d, e, words[16], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
214 STEP(F1, a, b, c, d, e, words[17], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
215 STEP(F1, a, b, c, d, e, words[18], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
216 STEP(F1, a, b, c, d, e, words[19], 0x5a827999);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
217
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
218 STEP(F2, a, b, c, d, e, words[20], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
219 STEP(F2, a, b, c, d, e, words[21], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 STEP(F2, a, b, c, d, e, words[22], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221 STEP(F2, a, b, c, d, e, words[23], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
222 STEP(F2, a, b, c, d, e, words[24], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
223 STEP(F2, a, b, c, d, e, words[25], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
224 STEP(F2, a, b, c, d, e, words[26], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
225 STEP(F2, a, b, c, d, e, words[27], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
226 STEP(F2, a, b, c, d, e, words[28], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
227 STEP(F2, a, b, c, d, e, words[29], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
228 STEP(F2, a, b, c, d, e, words[30], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229 STEP(F2, a, b, c, d, e, words[31], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
230 STEP(F2, a, b, c, d, e, words[32], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
231 STEP(F2, a, b, c, d, e, words[33], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
232 STEP(F2, a, b, c, d, e, words[34], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233 STEP(F2, a, b, c, d, e, words[35], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
234 STEP(F2, a, b, c, d, e, words[36], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
235 STEP(F2, a, b, c, d, e, words[37], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
236 STEP(F2, a, b, c, d, e, words[38], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
237 STEP(F2, a, b, c, d, e, words[39], 0x6ed9eba1);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
238
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
239 STEP(F3, a, b, c, d, e, words[40], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
240 STEP(F3, a, b, c, d, e, words[41], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
241 STEP(F3, a, b, c, d, e, words[42], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
242 STEP(F3, a, b, c, d, e, words[43], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243 STEP(F3, a, b, c, d, e, words[44], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
244 STEP(F3, a, b, c, d, e, words[45], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
245 STEP(F3, a, b, c, d, e, words[46], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
246 STEP(F3, a, b, c, d, e, words[47], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247 STEP(F3, a, b, c, d, e, words[48], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248 STEP(F3, a, b, c, d, e, words[49], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249 STEP(F3, a, b, c, d, e, words[50], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250 STEP(F3, a, b, c, d, e, words[51], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
251 STEP(F3, a, b, c, d, e, words[52], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252 STEP(F3, a, b, c, d, e, words[53], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
253 STEP(F3, a, b, c, d, e, words[54], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254 STEP(F3, a, b, c, d, e, words[55], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 STEP(F3, a, b, c, d, e, words[56], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
256 STEP(F3, a, b, c, d, e, words[57], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
257 STEP(F3, a, b, c, d, e, words[58], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
258 STEP(F3, a, b, c, d, e, words[59], 0x8f1bbcdc);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
259
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
260 STEP(F2, a, b, c, d, e, words[60], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
261 STEP(F2, a, b, c, d, e, words[61], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
262 STEP(F2, a, b, c, d, e, words[62], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
263 STEP(F2, a, b, c, d, e, words[63], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
264 STEP(F2, a, b, c, d, e, words[64], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
265 STEP(F2, a, b, c, d, e, words[65], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
266 STEP(F2, a, b, c, d, e, words[66], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
267 STEP(F2, a, b, c, d, e, words[67], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
268 STEP(F2, a, b, c, d, e, words[68], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
269 STEP(F2, a, b, c, d, e, words[69], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
270 STEP(F2, a, b, c, d, e, words[70], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
271 STEP(F2, a, b, c, d, e, words[71], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
272 STEP(F2, a, b, c, d, e, words[72], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
273 STEP(F2, a, b, c, d, e, words[73], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
274 STEP(F2, a, b, c, d, e, words[74], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
275 STEP(F2, a, b, c, d, e, words[75], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
276 STEP(F2, a, b, c, d, e, words[76], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
277 STEP(F2, a, b, c, d, e, words[77], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
278 STEP(F2, a, b, c, d, e, words[78], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
279 STEP(F2, a, b, c, d, e, words[79], 0xca62c1d6);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
280
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
281 a += saved_a;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
282 b += saved_b;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
283 c += saved_c;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
284 d += saved_d;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
285 e += saved_e;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
286
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
287 p += 64;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
288
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
289 } while (size -= 64);
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
290
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
291 ctx->a = a;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
292 ctx->b = b;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
293 ctx->c = c;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
294 ctx->d = d;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
295 ctx->e = e;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
296
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
297 return p;
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
298 }
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
299
1064ea81ed3a An internal SHA1 implementation.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
300 #endif