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