| 207 | }; |
| 208 | |
| 209 | void md5_finish( struct md5_context *ctx, uint8 digest[16] ) |
| 210 | { |
| 211 | uint32 last, padn; |
| 212 | uint8 msglen[8]; |
| 213 | |
| 214 | PUT_UINT32( ctx->total[0], msglen, 0 ); |
| 215 | PUT_UINT32( ctx->total[1], msglen, 4 ); |
| 216 | |
| 217 | last = ( ctx->total[0] >> 3 ) & 0x3F; |
| 218 | padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); |
| 219 | |
| 220 | md5_update( ctx, md5_padding, padn ); |
| 221 | md5_update( ctx, msglen, 8 ); |
| 222 | |
| 223 | PUT_UINT32( ctx->state[0], digest, 0 ); |
| 224 | PUT_UINT32( ctx->state[1], digest, 4 ); |
| 225 | PUT_UINT32( ctx->state[2], digest, 8 ); |
| 226 | PUT_UINT32( ctx->state[3], digest, 12 ); |
| 227 | } |
| 228 | |
| 229 | |
| 230 | /* Uses a static buffer, so beware of how it's used. */ |
no test coverage detected