| 84 | |
| 85 | |
| 86 | static void blake2s_compress( blake2s_state *S, const byte block[BLAKE2S_BLOCKBYTES] ) |
| 87 | { |
| 88 | uint32 m[16]; |
| 89 | uint32 v[16]; |
| 90 | |
| 91 | for( size_t i = 0; i < 16; ++i ) |
| 92 | m[i] = RawGet4( block + i * 4 ); |
| 93 | |
| 94 | for( size_t i = 0; i < 8; ++i ) |
| 95 | v[i] = S->h[i]; |
| 96 | |
| 97 | v[ 8] = blake2s_IV[0]; |
| 98 | v[ 9] = blake2s_IV[1]; |
| 99 | v[10] = blake2s_IV[2]; |
| 100 | v[11] = blake2s_IV[3]; |
| 101 | v[12] = S->t[0] ^ blake2s_IV[4]; |
| 102 | v[13] = S->t[1] ^ blake2s_IV[5]; |
| 103 | v[14] = S->f[0] ^ blake2s_IV[6]; |
| 104 | v[15] = S->f[1] ^ blake2s_IV[7]; |
| 105 | |
| 106 | for ( uint r = 0; r <= 9; ++r ) // No gain on i7 if unrolled, but exe size grows. |
| 107 | { |
| 108 | G(r,0,m,v[ 0],v[ 4],v[ 8],v[12]); |
| 109 | G(r,1,m,v[ 1],v[ 5],v[ 9],v[13]); |
| 110 | G(r,2,m,v[ 2],v[ 6],v[10],v[14]); |
| 111 | G(r,3,m,v[ 3],v[ 7],v[11],v[15]); |
| 112 | G(r,4,m,v[ 0],v[ 5],v[10],v[15]); |
| 113 | G(r,5,m,v[ 1],v[ 6],v[11],v[12]); |
| 114 | G(r,6,m,v[ 2],v[ 7],v[ 8],v[13]); |
| 115 | G(r,7,m,v[ 3],v[ 4],v[ 9],v[14]); |
| 116 | } |
| 117 | |
| 118 | for( size_t i = 0; i < 8; ++i ) |
| 119 | S->h[i] = S->h[i] ^ v[i] ^ v[i + 8]; |
| 120 | } |
| 121 | |
| 122 | |
| 123 | void blake2s_update( blake2s_state *S, const byte *in, size_t inlen ) |
no test coverage detected