| 121 | |
| 122 | |
| 123 | void blake2s_update( blake2s_state *S, const byte *in, size_t inlen ) |
| 124 | { |
| 125 | while( inlen > 0 ) |
| 126 | { |
| 127 | size_t left = S->buflen; |
| 128 | size_t fill = 2 * BLAKE2S_BLOCKBYTES - left; |
| 129 | |
| 130 | if( inlen > fill ) |
| 131 | { |
| 132 | memcpy( S->buf + left, in, fill ); // Fill buffer |
| 133 | S->buflen += fill; |
| 134 | blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); |
| 135 | |
| 136 | #ifdef USE_SSE |
| 137 | #ifdef _WIN_32 // We use SSSE3 _mm_shuffle_epi8 only in x64 mode. |
| 138 | if (_SSE_Version>=SSE_SSE2) |
| 139 | #else |
| 140 | if (_SSE_Version>=SSE_SSSE3) |
| 141 | #endif |
| 142 | blake2s_compress_sse( S, S->buf ); |
| 143 | else |
| 144 | blake2s_compress( S, S->buf ); // Compress |
| 145 | #else |
| 146 | blake2s_compress( S, S->buf ); // Compress |
| 147 | #endif |
| 148 | |
| 149 | memcpy( S->buf, S->buf + BLAKE2S_BLOCKBYTES, BLAKE2S_BLOCKBYTES ); // Shift buffer left |
| 150 | S->buflen -= BLAKE2S_BLOCKBYTES; |
| 151 | in += fill; |
| 152 | inlen -= fill; |
| 153 | } |
| 154 | else // inlen <= fill |
| 155 | { |
| 156 | memcpy( S->buf + left, in, (size_t)inlen ); |
| 157 | S->buflen += (size_t)inlen; // Be lazy, do not compress |
| 158 | in += inlen; |
| 159 | inlen = 0; |
| 160 | } |
| 161 | } |
| 162 | } |
| 163 | |
| 164 | |
| 165 | void blake2s_final( blake2s_state *S, byte *digest ) |
no test coverage detected