| 200 | static const uchar md5_padding[CSUM_CHUNK] = { 0x80 }; |
| 201 | |
| 202 | void md5_result(md_context *ctx, uchar digest[MD5_DIGEST_LEN]) |
| 203 | { |
| 204 | uint32 last, padn; |
| 205 | uint32 high, low; |
| 206 | uchar msglen[8]; |
| 207 | |
| 208 | high = (ctx->totalN >> 29) |
| 209 | | (ctx->totalN2 << 3); |
| 210 | low = (ctx->totalN << 3); |
| 211 | |
| 212 | SIVALu(msglen, 0, low); |
| 213 | SIVALu(msglen, 4, high); |
| 214 | |
| 215 | last = ctx->totalN & 0x3F; |
| 216 | padn = last < 56 ? 56 - last : 120 - last; |
| 217 | |
| 218 | md5_update(ctx, md5_padding, padn); |
| 219 | md5_update(ctx, msglen, 8); |
| 220 | |
| 221 | SIVALu(digest, 0, ctx->A); |
| 222 | SIVALu(digest, 4, ctx->B); |
| 223 | SIVALu(digest, 8, ctx->C); |
| 224 | SIVALu(digest, 12, ctx->D); |
| 225 | } |
| 226 | |
| 227 | #ifdef TEST_MD5 /* { */ |
| 228 |
no test coverage detected