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

Function blake2b_compress

freebsd/contrib/libb2/blake2b-ref.c:237–298  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

235}
236
237static int blake2b_compress( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] )
238{
239 uint64_t m[16];
240 uint64_t v[16];
241 size_t i;
242
243 for( i = 0; i < 16; ++i )
244 m[i] = load64( block + i * sizeof( m[i] ) );
245
246 for( i = 0; i < 8; ++i )
247 v[i] = S->h[i];
248
249 v[ 8] = blake2b_IV[0];
250 v[ 9] = blake2b_IV[1];
251 v[10] = blake2b_IV[2];
252 v[11] = blake2b_IV[3];
253 v[12] = S->t[0] ^ blake2b_IV[4];
254 v[13] = S->t[1] ^ blake2b_IV[5];
255 v[14] = S->f[0] ^ blake2b_IV[6];
256 v[15] = S->f[1] ^ blake2b_IV[7];
257#define G(r,i,a,b,c,d) \
258 do { \
259 a = a + b + m[blake2b_sigma[r][2*i+0]]; \
260 d = rotr64(d ^ a, 32); \
261 c = c + d; \
262 b = rotr64(b ^ c, 24); \
263 a = a + b + m[blake2b_sigma[r][2*i+1]]; \
264 d = rotr64(d ^ a, 16); \
265 c = c + d; \
266 b = rotr64(b ^ c, 63); \
267 } while(0)
268#define ROUND(r) \
269 do { \
270 G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \
271 G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \
272 G(r,2,v[ 2],v[ 6],v[10],v[14]); \
273 G(r,3,v[ 3],v[ 7],v[11],v[15]); \
274 G(r,4,v[ 0],v[ 5],v[10],v[15]); \
275 G(r,5,v[ 1],v[ 6],v[11],v[12]); \
276 G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \
277 G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \
278 } while(0)
279 ROUND( 0 );
280 ROUND( 1 );
281 ROUND( 2 );
282 ROUND( 3 );
283 ROUND( 4 );
284 ROUND( 5 );
285 ROUND( 6 );
286 ROUND( 7 );
287 ROUND( 8 );
288 ROUND( 9 );
289 ROUND( 10 );
290 ROUND( 11 );
291
292 for( i = 0; i < 8; ++i )
293 S->h[i] = S->h[i] ^ v[i] ^ v[i + 8];
294

Callers 2

blake2b_updateFunction · 0.70
blake2b_finalFunction · 0.70

Calls 1

load64Function · 0.85

Tested by

no test coverage detected