| 165 | } |
| 166 | |
| 167 | void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size) { |
| 168 | MD5_u32 saved_lo; |
| 169 | unsigned long used, free; |
| 170 | |
| 171 | saved_lo = ctx->lo; |
| 172 | if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo) ctx->hi++; |
| 173 | ctx->hi += size >> 29; |
| 174 | used = saved_lo & 0x3f; |
| 175 | |
| 176 | if (used) { |
| 177 | free = 64 - used; |
| 178 | if (size < free) { |
| 179 | memcpy(&ctx->buffer[used], data, size); |
| 180 | return; |
| 181 | } |
| 182 | |
| 183 | memcpy(&ctx->buffer[used], data, free); |
| 184 | data = (unsigned char *)data + free; |
| 185 | size -= free; |
| 186 | body(ctx, ctx->buffer, 64); |
| 187 | } |
| 188 | |
| 189 | if (size >= 64) { |
| 190 | data = body(ctx, data, size & ~(unsigned long)0x3f); |
| 191 | size &= 0x3f; |
| 192 | } |
| 193 | |
| 194 | memcpy(ctx->buffer, data, size); |
| 195 | } |
| 196 | |
| 197 | void MD5_Final(unsigned char *result, MD5_CTX *ctx) { |
| 198 | unsigned long used, free; |
no test coverage detected