md5::Finalize MD5 finalization. Ends an MD5 message-digest operation, writing the message digest and zeroizing the context.
| 217 | // MD5 finalization. Ends an MD5 message-digest operation, writing |
| 218 | // the message digest and zeroizing the context. |
| 219 | void md5::Finalize() |
| 220 | { |
| 221 | uchar bits[8]; |
| 222 | uint4 index, padLen; |
| 223 | |
| 224 | // Save number of bits |
| 225 | Encode (bits, m_Count, 8); |
| 226 | |
| 227 | // Pad out to 56 mod 64 |
| 228 | index = (unsigned int)((m_Count[0] >> 3) & 0x3f); |
| 229 | padLen = (index < 56) ? (56 - index) : (120 - index); |
| 230 | Update(PADDING, padLen); |
| 231 | |
| 232 | // Append length (before padding) |
| 233 | Update (bits, 8); |
| 234 | |
| 235 | // Store state in digest |
| 236 | Encode (m_Digest, m_State, 16); |
| 237 | |
| 238 | //memset(m_Count, 0, 2 * sizeof(uint4)); |
| 239 | m_Count[0] = m_Count[1] = 0; |
| 240 | //memset(m_State, 0, 4 * sizeof(uint4)); |
| 241 | m_State[0] = m_State[1] = m_State[2] = m_State[3] = 0; |
| 242 | //memset(m_Buffer,0, 64 * sizeof(uchar)); |
| 243 | for (register int i = 0; i < 16; i++) ((uint4 *)m_Buffer)[i] = 0UL; |
| 244 | } |
| 245 | |
| 246 | // md5::Transform |
| 247 | // MD5 basic transformation. Transforms state based on block. |