xref: /aosp_15_r20/external/vboot_reference/firmware/2lib/2sha1.c (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
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