MCPcopy Create free account
hub / github.com/F-Stack/f-stack / blake2s_compress

Function blake2s_compress

freebsd/contrib/libb2/blake2s-ref.c:230–288  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

228}
229
230static int blake2s_compress( blake2s_state *S, const uint8_t block[BLAKE2S_BLOCKBYTES] )
231{
232 uint32_t m[16];
233 uint32_t v[16];
234
235 for( size_t i = 0; i < 16; ++i )
236 m[i] = load32( block + i * sizeof( m[i] ) );
237
238 for( size_t i = 0; i < 8; ++i )
239 v[i] = S->h[i];
240
241 v[ 8] = blake2s_IV[0];
242 v[ 9] = blake2s_IV[1];
243 v[10] = blake2s_IV[2];
244 v[11] = blake2s_IV[3];
245 v[12] = S->t[0] ^ blake2s_IV[4];
246 v[13] = S->t[1] ^ blake2s_IV[5];
247 v[14] = S->f[0] ^ blake2s_IV[6];
248 v[15] = S->f[1] ^ blake2s_IV[7];
249#define G(r,i,a,b,c,d) \
250 do { \
251 a = a + b + m[blake2s_sigma[r][2*i+0]]; \
252 d = rotr32(d ^ a, 16); \
253 c = c + d; \
254 b = rotr32(b ^ c, 12); \
255 a = a + b + m[blake2s_sigma[r][2*i+1]]; \
256 d = rotr32(d ^ a, 8); \
257 c = c + d; \
258 b = rotr32(b ^ c, 7); \
259 } while(0)
260#define ROUND(r) \
261 do { \
262 G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \
263 G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \
264 G(r,2,v[ 2],v[ 6],v[10],v[14]); \
265 G(r,3,v[ 3],v[ 7],v[11],v[15]); \
266 G(r,4,v[ 0],v[ 5],v[10],v[15]); \
267 G(r,5,v[ 1],v[ 6],v[11],v[12]); \
268 G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \
269 G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \
270 } while(0)
271 ROUND( 0 );
272 ROUND( 1 );
273 ROUND( 2 );
274 ROUND( 3 );
275 ROUND( 4 );
276 ROUND( 5 );
277 ROUND( 6 );
278 ROUND( 7 );
279 ROUND( 8 );
280 ROUND( 9 );
281
282 for( size_t i = 0; i < 8; ++i )
283 S->h[i] = S->h[i] ^ v[i] ^ v[i + 8];
284
285#undef G
286#undef ROUND
287 return 0;

Callers 2

blake2s_updateFunction · 0.70
blake2s_finalFunction · 0.70

Calls 1

load32Function · 0.85

Tested by

no test coverage detected