| 114 | |
| 115 | |
| 116 | int blake2sp_update( blake2sp_state *S, const uint8_t *in, size_t inlen ) |
| 117 | { |
| 118 | size_t left = S->buflen; |
| 119 | size_t fill = sizeof( S->buf ) - left; |
| 120 | |
| 121 | if( left && inlen >= fill ) |
| 122 | { |
| 123 | memcpy( S->buf + left, in, fill ); |
| 124 | |
| 125 | for( size_t i = 0; i < PARALLELISM_DEGREE; ++i ) |
| 126 | blake2s_update( S->S[i], S->buf + i * BLAKE2S_BLOCKBYTES, BLAKE2S_BLOCKBYTES ); |
| 127 | |
| 128 | in += fill; |
| 129 | inlen -= fill; |
| 130 | left = 0; |
| 131 | } |
| 132 | |
| 133 | #if defined(_OPENMP) |
| 134 | omp_set_num_threads(PARALLELISM_DEGREE); |
| 135 | #pragma omp parallel shared(S) |
| 136 | #else |
| 137 | for( size_t id__ = 0; id__ < PARALLELISM_DEGREE; ++id__ ) |
| 138 | #endif |
| 139 | { |
| 140 | #if defined(_OPENMP) |
| 141 | size_t id__ = ( size_t ) omp_get_thread_num(); |
| 142 | #endif |
| 143 | size_t inlen__ = inlen; |
| 144 | const uint8_t *in__ = ( const uint8_t * )in; |
| 145 | in__ += id__ * BLAKE2S_BLOCKBYTES; |
| 146 | |
| 147 | while( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ) |
| 148 | { |
| 149 | blake2s_update( S->S[id__], in__, BLAKE2S_BLOCKBYTES ); |
| 150 | in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; |
| 151 | inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; |
| 152 | } |
| 153 | } |
| 154 | |
| 155 | in += inlen - inlen % ( PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ); |
| 156 | inlen %= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; |
| 157 | |
| 158 | if( inlen > 0 ) |
| 159 | memcpy( S->buf + left, in, inlen ); |
| 160 | |
| 161 | S->buflen = ( uint32_t ) left + ( uint32_t ) inlen; |
| 162 | return 0; |
| 163 | } |
| 164 | |
| 165 | |
| 166 | int blake2sp_final( blake2sp_state *S, uint8_t *out, size_t outlen ) |
nothing calls this directly
no test coverage detected