1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2014 The ChromiumOS Authors
2*8617a60dSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
3*8617a60dSAndroid Build Coastguard Worker * found in the LICENSE file.
4*8617a60dSAndroid Build Coastguard Worker *
5*8617a60dSAndroid Build Coastguard Worker * SHA-1 implementation largely based on libmincrypt in the the Android
6*8617a60dSAndroid Build Coastguard Worker * Open Source Project (platorm/system/core.git/libmincrypt/sha.c
7*8617a60dSAndroid Build Coastguard Worker */
8*8617a60dSAndroid Build Coastguard Worker
9*8617a60dSAndroid Build Coastguard Worker #include "2common.h"
10*8617a60dSAndroid Build Coastguard Worker #include "2sha.h"
11*8617a60dSAndroid Build Coastguard Worker #include "2sysincludes.h"
12*8617a60dSAndroid Build Coastguard Worker
13*8617a60dSAndroid Build Coastguard Worker /*
14*8617a60dSAndroid Build Coastguard Worker * Some machines lack byteswap.h and endian.h. These have to use the
15*8617a60dSAndroid Build Coastguard Worker * slower code, even if they're little-endian.
16*8617a60dSAndroid Build Coastguard Worker */
17*8617a60dSAndroid Build Coastguard Worker
18*8617a60dSAndroid Build Coastguard Worker #if defined(HAVE_ENDIAN_H) && defined(HAVE_LITTLE_ENDIAN)
19*8617a60dSAndroid Build Coastguard Worker
20*8617a60dSAndroid Build Coastguard Worker /*
21*8617a60dSAndroid Build Coastguard Worker * This version is about 28% faster than the generic version below,
22*8617a60dSAndroid Build Coastguard Worker * but assumes little-endianness.
23*8617a60dSAndroid Build Coastguard Worker */
ror27(uint32_t val)24*8617a60dSAndroid Build Coastguard Worker static uint32_t ror27(uint32_t val)
25*8617a60dSAndroid Build Coastguard Worker {
26*8617a60dSAndroid Build Coastguard Worker return (val >> 27) | (val << 5);
27*8617a60dSAndroid Build Coastguard Worker }
28*8617a60dSAndroid Build Coastguard Worker
ror2(uint32_t val)29*8617a60dSAndroid Build Coastguard Worker static uint32_t ror2(uint32_t val)
30*8617a60dSAndroid Build Coastguard Worker {
31*8617a60dSAndroid Build Coastguard Worker return (val >> 2) | (val << 30);
32*8617a60dSAndroid Build Coastguard Worker }
33*8617a60dSAndroid Build Coastguard Worker
ror31(uint32_t val)34*8617a60dSAndroid Build Coastguard Worker static uint32_t ror31(uint32_t val)
35*8617a60dSAndroid Build Coastguard Worker {
36*8617a60dSAndroid Build Coastguard Worker return (val >> 31) | (val << 1);
37*8617a60dSAndroid Build Coastguard Worker }
38*8617a60dSAndroid Build Coastguard Worker
sha1_transform(struct vb2_sha1_context * ctx)39*8617a60dSAndroid Build Coastguard Worker static void sha1_transform(struct vb2_sha1_context *ctx)
40*8617a60dSAndroid Build Coastguard Worker {
41*8617a60dSAndroid Build Coastguard Worker /* Note that this array uses 80*4=320 bytes of stack */
42*8617a60dSAndroid Build Coastguard Worker uint32_t W[80];
43*8617a60dSAndroid Build Coastguard Worker register uint32_t A, B, C, D, E;
44*8617a60dSAndroid Build Coastguard Worker int t;
45*8617a60dSAndroid Build Coastguard Worker
46*8617a60dSAndroid Build Coastguard Worker A = ctx->state[0];
47*8617a60dSAndroid Build Coastguard Worker B = ctx->state[1];
48*8617a60dSAndroid Build Coastguard Worker C = ctx->state[2];
49*8617a60dSAndroid Build Coastguard Worker D = ctx->state[3];
50*8617a60dSAndroid Build Coastguard Worker E = ctx->state[4];
51*8617a60dSAndroid Build Coastguard Worker
52*8617a60dSAndroid Build Coastguard Worker #define SHA_F1(A,B,C,D,E,t) \
53*8617a60dSAndroid Build Coastguard Worker E += ror27(A) + \
54*8617a60dSAndroid Build Coastguard Worker (W[t] = bswap_32(ctx->buf.w[t])) + \
55*8617a60dSAndroid Build Coastguard Worker (D^(B&(C^D))) + 0x5A827999; \
56*8617a60dSAndroid Build Coastguard Worker B = ror2(B);
57*8617a60dSAndroid Build Coastguard Worker
58*8617a60dSAndroid Build Coastguard Worker for (t = 0; t < 15; t += 5) {
59*8617a60dSAndroid Build Coastguard Worker SHA_F1(A,B,C,D,E,t + 0);
60*8617a60dSAndroid Build Coastguard Worker SHA_F1(E,A,B,C,D,t + 1);
61*8617a60dSAndroid Build Coastguard Worker SHA_F1(D,E,A,B,C,t + 2);
62*8617a60dSAndroid Build Coastguard Worker SHA_F1(C,D,E,A,B,t + 3);
63*8617a60dSAndroid Build Coastguard Worker SHA_F1(B,C,D,E,A,t + 4);
64*8617a60dSAndroid Build Coastguard Worker }
65*8617a60dSAndroid Build Coastguard Worker SHA_F1(A,B,C,D,E,t + 0); /* 16th one, t == 15 */
66*8617a60dSAndroid Build Coastguard Worker
67*8617a60dSAndroid Build Coastguard Worker #undef SHA_F1
68*8617a60dSAndroid Build Coastguard Worker
69*8617a60dSAndroid Build Coastguard Worker #define SHA_F1(A,B,C,D,E,t) \
70*8617a60dSAndroid Build Coastguard Worker E += ror27(A) + \
71*8617a60dSAndroid Build Coastguard Worker (W[t] = ror31(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16])) + \
72*8617a60dSAndroid Build Coastguard Worker (D^(B&(C^D))) + 0x5A827999; \
73*8617a60dSAndroid Build Coastguard Worker B = ror2(B);
74*8617a60dSAndroid Build Coastguard Worker
75*8617a60dSAndroid Build Coastguard Worker SHA_F1(E,A,B,C,D,t + 1);
76*8617a60dSAndroid Build Coastguard Worker SHA_F1(D,E,A,B,C,t + 2);
77*8617a60dSAndroid Build Coastguard Worker SHA_F1(C,D,E,A,B,t + 3);
78*8617a60dSAndroid Build Coastguard Worker SHA_F1(B,C,D,E,A,t + 4);
79*8617a60dSAndroid Build Coastguard Worker
80*8617a60dSAndroid Build Coastguard Worker #undef SHA_F1
81*8617a60dSAndroid Build Coastguard Worker
82*8617a60dSAndroid Build Coastguard Worker #define SHA_F2(A,B,C,D,E,t) \
83*8617a60dSAndroid Build Coastguard Worker E += ror27(A) + \
84*8617a60dSAndroid Build Coastguard Worker (W[t] = ror31(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16])) + \
85*8617a60dSAndroid Build Coastguard Worker (B^C^D) + 0x6ED9EBA1; \
86*8617a60dSAndroid Build Coastguard Worker B = ror2(B);
87*8617a60dSAndroid Build Coastguard Worker
88*8617a60dSAndroid Build Coastguard Worker for (t = 20; t < 40; t += 5) {
89*8617a60dSAndroid Build Coastguard Worker SHA_F2(A,B,C,D,E,t + 0);
90*8617a60dSAndroid Build Coastguard Worker SHA_F2(E,A,B,C,D,t + 1);
91*8617a60dSAndroid Build Coastguard Worker SHA_F2(D,E,A,B,C,t + 2);
92*8617a60dSAndroid Build Coastguard Worker SHA_F2(C,D,E,A,B,t + 3);
93*8617a60dSAndroid Build Coastguard Worker SHA_F2(B,C,D,E,A,t + 4);
94*8617a60dSAndroid Build Coastguard Worker }
95*8617a60dSAndroid Build Coastguard Worker
96*8617a60dSAndroid Build Coastguard Worker #undef SHA_F2
97*8617a60dSAndroid Build Coastguard Worker
98*8617a60dSAndroid Build Coastguard Worker #define SHA_F3(A,B,C,D,E,t) \
99*8617a60dSAndroid Build Coastguard Worker E += ror27(A) + \
100*8617a60dSAndroid Build Coastguard Worker (W[t] = ror31(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16])) + \
101*8617a60dSAndroid Build Coastguard Worker ((B&C)|(D&(B|C))) + 0x8F1BBCDC; \
102*8617a60dSAndroid Build Coastguard Worker B = ror2(B);
103*8617a60dSAndroid Build Coastguard Worker
104*8617a60dSAndroid Build Coastguard Worker for (; t < 60; t += 5) {
105*8617a60dSAndroid Build Coastguard Worker SHA_F3(A,B,C,D,E,t + 0);
106*8617a60dSAndroid Build Coastguard Worker SHA_F3(E,A,B,C,D,t + 1);
107*8617a60dSAndroid Build Coastguard Worker SHA_F3(D,E,A,B,C,t + 2);
108*8617a60dSAndroid Build Coastguard Worker SHA_F3(C,D,E,A,B,t + 3);
109*8617a60dSAndroid Build Coastguard Worker SHA_F3(B,C,D,E,A,t + 4);
110*8617a60dSAndroid Build Coastguard Worker }
111*8617a60dSAndroid Build Coastguard Worker
112*8617a60dSAndroid Build Coastguard Worker #undef SHA_F3
113*8617a60dSAndroid Build Coastguard Worker
114*8617a60dSAndroid Build Coastguard Worker #define SHA_F4(A,B,C,D,E,t) \
115*8617a60dSAndroid Build Coastguard Worker E += ror27(A) + \
116*8617a60dSAndroid Build Coastguard Worker (W[t] = ror31(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16])) + \
117*8617a60dSAndroid Build Coastguard Worker (B^C^D) + 0xCA62C1D6; \
118*8617a60dSAndroid Build Coastguard Worker B = ror2(B);
119*8617a60dSAndroid Build Coastguard Worker
120*8617a60dSAndroid Build Coastguard Worker for (; t < 80; t += 5) {
121*8617a60dSAndroid Build Coastguard Worker SHA_F4(A,B,C,D,E,t + 0);
122*8617a60dSAndroid Build Coastguard Worker SHA_F4(E,A,B,C,D,t + 1);
123*8617a60dSAndroid Build Coastguard Worker SHA_F4(D,E,A,B,C,t + 2);
124*8617a60dSAndroid Build Coastguard Worker SHA_F4(C,D,E,A,B,t + 3);
125*8617a60dSAndroid Build Coastguard Worker SHA_F4(B,C,D,E,A,t + 4);
126*8617a60dSAndroid Build Coastguard Worker }
127*8617a60dSAndroid Build Coastguard Worker
128*8617a60dSAndroid Build Coastguard Worker #undef SHA_F4
129*8617a60dSAndroid Build Coastguard Worker
130*8617a60dSAndroid Build Coastguard Worker ctx->state[0] += A;
131*8617a60dSAndroid Build Coastguard Worker ctx->state[1] += B;
132*8617a60dSAndroid Build Coastguard Worker ctx->state[2] += C;
133*8617a60dSAndroid Build Coastguard Worker ctx->state[3] += D;
134*8617a60dSAndroid Build Coastguard Worker ctx->state[4] += E;
135*8617a60dSAndroid Build Coastguard Worker }
136*8617a60dSAndroid Build Coastguard Worker
vb2_sha1_update(struct vb2_sha1_context * ctx,const uint8_t * data,uint32_t size)137*8617a60dSAndroid Build Coastguard Worker void vb2_sha1_update(struct vb2_sha1_context *ctx,
138*8617a60dSAndroid Build Coastguard Worker const uint8_t *data,
139*8617a60dSAndroid Build Coastguard Worker uint32_t size)
140*8617a60dSAndroid Build Coastguard Worker {
141*8617a60dSAndroid Build Coastguard Worker int i = ctx->count % sizeof(ctx->buf);
142*8617a60dSAndroid Build Coastguard Worker const uint8_t *p = (const uint8_t*)data;
143*8617a60dSAndroid Build Coastguard Worker
144*8617a60dSAndroid Build Coastguard Worker ctx->count += size;
145*8617a60dSAndroid Build Coastguard Worker
146*8617a60dSAndroid Build Coastguard Worker while (size > sizeof(ctx->buf) - i) {
147*8617a60dSAndroid Build Coastguard Worker memcpy(&ctx->buf.b[i], p, sizeof(ctx->buf) - i);
148*8617a60dSAndroid Build Coastguard Worker size -= sizeof(ctx->buf) - i;
149*8617a60dSAndroid Build Coastguard Worker p += sizeof(ctx->buf) - i;
150*8617a60dSAndroid Build Coastguard Worker sha1_transform(ctx);
151*8617a60dSAndroid Build Coastguard Worker i = 0;
152*8617a60dSAndroid Build Coastguard Worker }
153*8617a60dSAndroid Build Coastguard Worker
154*8617a60dSAndroid Build Coastguard Worker while (size--) {
155*8617a60dSAndroid Build Coastguard Worker ctx->buf.b[i++] = *p++;
156*8617a60dSAndroid Build Coastguard Worker if (i == sizeof(ctx->buf)) {
157*8617a60dSAndroid Build Coastguard Worker sha1_transform(ctx);
158*8617a60dSAndroid Build Coastguard Worker i = 0;
159*8617a60dSAndroid Build Coastguard Worker }
160*8617a60dSAndroid Build Coastguard Worker }
161*8617a60dSAndroid Build Coastguard Worker }
162*8617a60dSAndroid Build Coastguard Worker
vb2_sha1_finalize(struct vb2_sha1_context * ctx)163*8617a60dSAndroid Build Coastguard Worker uint8_t *vb2_sha1_finalize(struct vb2_sha1_context *ctx)
164*8617a60dSAndroid Build Coastguard Worker {
165*8617a60dSAndroid Build Coastguard Worker uint32_t cnt = ctx->count * 8;
166*8617a60dSAndroid Build Coastguard Worker int i;
167*8617a60dSAndroid Build Coastguard Worker
168*8617a60dSAndroid Build Coastguard Worker vb2_sha1_update(ctx, (uint8_t*)"\x80", 1);
169*8617a60dSAndroid Build Coastguard Worker while ((ctx->count % sizeof(ctx->buf)) != (sizeof(ctx->buf) - 8)) {
170*8617a60dSAndroid Build Coastguard Worker vb2_sha1_update(ctx, (uint8_t*)"\0", 1);
171*8617a60dSAndroid Build Coastguard Worker }
172*8617a60dSAndroid Build Coastguard Worker
173*8617a60dSAndroid Build Coastguard Worker for (i = 0; i < 8; ++i) {
174*8617a60dSAndroid Build Coastguard Worker uint8_t tmp = cnt >> ((7 - i) * 8);
175*8617a60dSAndroid Build Coastguard Worker vb2_sha1_update(ctx, &tmp, 1);
176*8617a60dSAndroid Build Coastguard Worker }
177*8617a60dSAndroid Build Coastguard Worker
178*8617a60dSAndroid Build Coastguard Worker for (i = 0; i < 5; i++) {
179*8617a60dSAndroid Build Coastguard Worker ctx->buf.w[i] = bswap_32(ctx->state[i]);
180*8617a60dSAndroid Build Coastguard Worker }
181*8617a60dSAndroid Build Coastguard Worker
182*8617a60dSAndroid Build Coastguard Worker return ctx->buf.b;
183*8617a60dSAndroid Build Coastguard Worker }
184*8617a60dSAndroid Build Coastguard Worker
185*8617a60dSAndroid Build Coastguard Worker #else /* #if defined(HAVE_ENDIAN_H) && defined(HAVE_LITTLE_ENDIAN) */
186*8617a60dSAndroid Build Coastguard Worker
187*8617a60dSAndroid Build Coastguard Worker #define rol(bits, value) (((value) << (bits)) | ((value) >> (32 - (bits))))
188*8617a60dSAndroid Build Coastguard Worker
sha1_transform(struct vb2_sha1_context * ctx)189*8617a60dSAndroid Build Coastguard Worker static void sha1_transform(struct vb2_sha1_context *ctx)
190*8617a60dSAndroid Build Coastguard Worker {
191*8617a60dSAndroid Build Coastguard Worker /* Note that this array uses 80*4=320 bytes of stack */
192*8617a60dSAndroid Build Coastguard Worker uint32_t W[80];
193*8617a60dSAndroid Build Coastguard Worker uint32_t A, B, C, D, E;
194*8617a60dSAndroid Build Coastguard Worker uint8_t *p = ctx->buf;
195*8617a60dSAndroid Build Coastguard Worker int t;
196*8617a60dSAndroid Build Coastguard Worker
197*8617a60dSAndroid Build Coastguard Worker for (t = 0; t < 16; ++t) {
198*8617a60dSAndroid Build Coastguard Worker uint32_t tmp = (uint32_t)*p++ << 24;
199*8617a60dSAndroid Build Coastguard Worker tmp |= *p++ << 16;
200*8617a60dSAndroid Build Coastguard Worker tmp |= *p++ << 8;
201*8617a60dSAndroid Build Coastguard Worker tmp |= *p++;
202*8617a60dSAndroid Build Coastguard Worker W[t] = tmp;
203*8617a60dSAndroid Build Coastguard Worker }
204*8617a60dSAndroid Build Coastguard Worker
205*8617a60dSAndroid Build Coastguard Worker for (; t < 80; t++) {
206*8617a60dSAndroid Build Coastguard Worker W[t] = rol(1,W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]);
207*8617a60dSAndroid Build Coastguard Worker }
208*8617a60dSAndroid Build Coastguard Worker
209*8617a60dSAndroid Build Coastguard Worker A = ctx->state[0];
210*8617a60dSAndroid Build Coastguard Worker B = ctx->state[1];
211*8617a60dSAndroid Build Coastguard Worker C = ctx->state[2];
212*8617a60dSAndroid Build Coastguard Worker D = ctx->state[3];
213*8617a60dSAndroid Build Coastguard Worker E = ctx->state[4];
214*8617a60dSAndroid Build Coastguard Worker
215*8617a60dSAndroid Build Coastguard Worker for (t = 0; t < 80; t++) {
216*8617a60dSAndroid Build Coastguard Worker uint32_t tmp = rol(5,A) + E + W[t];
217*8617a60dSAndroid Build Coastguard Worker
218*8617a60dSAndroid Build Coastguard Worker if (t < 20)
219*8617a60dSAndroid Build Coastguard Worker tmp += (D^(B&(C^D))) + 0x5A827999;
220*8617a60dSAndroid Build Coastguard Worker else if ( t < 40)
221*8617a60dSAndroid Build Coastguard Worker tmp += (B^C^D) + 0x6ED9EBA1;
222*8617a60dSAndroid Build Coastguard Worker else if ( t < 60)
223*8617a60dSAndroid Build Coastguard Worker tmp += ((B&C)|(D&(B|C))) + 0x8F1BBCDC;
224*8617a60dSAndroid Build Coastguard Worker else
225*8617a60dSAndroid Build Coastguard Worker tmp += (B^C^D) + 0xCA62C1D6;
226*8617a60dSAndroid Build Coastguard Worker
227*8617a60dSAndroid Build Coastguard Worker E = D;
228*8617a60dSAndroid Build Coastguard Worker D = C;
229*8617a60dSAndroid Build Coastguard Worker C = rol(30,B);
230*8617a60dSAndroid Build Coastguard Worker B = A;
231*8617a60dSAndroid Build Coastguard Worker A = tmp;
232*8617a60dSAndroid Build Coastguard Worker }
233*8617a60dSAndroid Build Coastguard Worker
234*8617a60dSAndroid Build Coastguard Worker ctx->state[0] += A;
235*8617a60dSAndroid Build Coastguard Worker ctx->state[1] += B;
236*8617a60dSAndroid Build Coastguard Worker ctx->state[2] += C;
237*8617a60dSAndroid Build Coastguard Worker ctx->state[3] += D;
238*8617a60dSAndroid Build Coastguard Worker ctx->state[4] += E;
239*8617a60dSAndroid Build Coastguard Worker }
240*8617a60dSAndroid Build Coastguard Worker
vb2_sha1_update(struct vb2_sha1_context * ctx,const uint8_t * data,uint32_t size)241*8617a60dSAndroid Build Coastguard Worker void vb2_sha1_update(struct vb2_sha1_context *ctx,
242*8617a60dSAndroid Build Coastguard Worker const uint8_t *data,
243*8617a60dSAndroid Build Coastguard Worker uint32_t size)
244*8617a60dSAndroid Build Coastguard Worker {
245*8617a60dSAndroid Build Coastguard Worker int i = (int)(ctx->count % sizeof(ctx->buf));
246*8617a60dSAndroid Build Coastguard Worker const uint8_t* p = (const uint8_t*) data;
247*8617a60dSAndroid Build Coastguard Worker
248*8617a60dSAndroid Build Coastguard Worker ctx->count += size;
249*8617a60dSAndroid Build Coastguard Worker
250*8617a60dSAndroid Build Coastguard Worker while (size--) {
251*8617a60dSAndroid Build Coastguard Worker ctx->buf[i++] = *p++;
252*8617a60dSAndroid Build Coastguard Worker if (i == sizeof(ctx->buf)) {
253*8617a60dSAndroid Build Coastguard Worker sha1_transform(ctx);
254*8617a60dSAndroid Build Coastguard Worker i = 0;
255*8617a60dSAndroid Build Coastguard Worker }
256*8617a60dSAndroid Build Coastguard Worker }
257*8617a60dSAndroid Build Coastguard Worker }
258*8617a60dSAndroid Build Coastguard Worker
vb2_sha1_finalize(struct vb2_sha1_context * ctx,uint8_t * digest)259*8617a60dSAndroid Build Coastguard Worker void vb2_sha1_finalize(struct vb2_sha1_context *ctx, uint8_t *digest)
260*8617a60dSAndroid Build Coastguard Worker {
261*8617a60dSAndroid Build Coastguard Worker uint32_t cnt = ctx->count << 3;
262*8617a60dSAndroid Build Coastguard Worker int i;
263*8617a60dSAndroid Build Coastguard Worker
264*8617a60dSAndroid Build Coastguard Worker vb2_sha1_update(ctx, (uint8_t*)"\x80", 1);
265*8617a60dSAndroid Build Coastguard Worker while ((ctx->count % sizeof(ctx->buf)) != (sizeof(ctx->buf) - 8)) {
266*8617a60dSAndroid Build Coastguard Worker vb2_sha1_update(ctx, (uint8_t*)"\0", 1);
267*8617a60dSAndroid Build Coastguard Worker }
268*8617a60dSAndroid Build Coastguard Worker for (i = 0; i < 8; ++i) {
269*8617a60dSAndroid Build Coastguard Worker uint8_t tmp = (uint8_t)((uint64_t)cnt >> ((7 - i) * 8));
270*8617a60dSAndroid Build Coastguard Worker vb2_sha1_update(ctx, &tmp, 1);
271*8617a60dSAndroid Build Coastguard Worker }
272*8617a60dSAndroid Build Coastguard Worker
273*8617a60dSAndroid Build Coastguard Worker for (i = 0; i < 5; i++) {
274*8617a60dSAndroid Build Coastguard Worker uint32_t tmp = ctx->state[i];
275*8617a60dSAndroid Build Coastguard Worker *digest++ = (uint8_t)(tmp >> 24);
276*8617a60dSAndroid Build Coastguard Worker *digest++ = (uint8_t)(tmp >> 16);
277*8617a60dSAndroid Build Coastguard Worker *digest++ = (uint8_t)(tmp >> 8);
278*8617a60dSAndroid Build Coastguard Worker *digest++ = (uint8_t)(tmp >> 0);
279*8617a60dSAndroid Build Coastguard Worker }
280*8617a60dSAndroid Build Coastguard Worker }
281*8617a60dSAndroid Build Coastguard Worker
282*8617a60dSAndroid Build Coastguard Worker #endif /* endianness */
283*8617a60dSAndroid Build Coastguard Worker
vb2_sha1_init(struct vb2_sha1_context * ctx)284*8617a60dSAndroid Build Coastguard Worker void vb2_sha1_init(struct vb2_sha1_context *ctx)
285*8617a60dSAndroid Build Coastguard Worker {
286*8617a60dSAndroid Build Coastguard Worker ctx->state[0] = 0x67452301;
287*8617a60dSAndroid Build Coastguard Worker ctx->state[1] = 0xefcdab89;
288*8617a60dSAndroid Build Coastguard Worker ctx->state[2] = 0x98badcfe;
289*8617a60dSAndroid Build Coastguard Worker ctx->state[3] = 0x10325476;
290*8617a60dSAndroid Build Coastguard Worker ctx->state[4] = 0xc3d2e1f0;
291*8617a60dSAndroid Build Coastguard Worker ctx->count = 0;
292*8617a60dSAndroid Build Coastguard Worker }
293