Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include <vlCore/MD5CheckSum.hpp>
00033 #include <vlCore/VirtualFile.hpp>
00034 #include <cstdio>
00035 #include <cstring>
00036
00037 #include "3rdparty/md5/md5.c"
00038
00039 using namespace vl;
00040
00041 std::string MD5CheckSum::toStdString() const
00042 {
00043 char sum[33];
00044 sprintf ( sum, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
00045 mMD5[0], mMD5[1], mMD5[2], mMD5[3], mMD5[4], mMD5[5], mMD5[6], mMD5[7],
00046 mMD5[8], mMD5[9], mMD5[10], mMD5[11], mMD5[12], mMD5[13], mMD5[14], mMD5[15] );
00047 return sum;
00048 }
00049
00050 void MD5CheckSum::compute(void* buffer, int len)
00051 {
00052 MD5Context md5context;
00053 MD5Init(&md5context);
00054 MD5Update(&md5context, (unsigned char*)buffer, len);
00055 MD5Final(mMD5,&md5context);
00056 }
00057
00058 void MD5CheckSum::compute(VirtualFile* file)
00059 {
00060 const int CHUNK_SIZE = 128*1024;
00061 std::vector<unsigned char> buffer;
00062 buffer.resize(CHUNK_SIZE);
00063 MD5Context md5context;
00064 MD5Init(&md5context);
00065
00066 for( unsigned bytes_read = (unsigned)file->read(&buffer.front(), CHUNK_SIZE);
00067 bytes_read;
00068 bytes_read = (unsigned)file->read(&buffer.front(), CHUNK_SIZE) )
00069 {
00070 MD5Update(&md5context, &buffer.front(), bytes_read);
00071 }
00072
00073 MD5Final(mMD5,&md5context);
00074 }
00075