diff options
Diffstat (limited to 'ml/dlib/dlib/md5')
-rw-r--r-- | ml/dlib/dlib/md5/md5_kernel_1.cpp | 617 | ||||
-rw-r--r-- | ml/dlib/dlib/md5/md5_kernel_1.h | 50 | ||||
-rw-r--r-- | ml/dlib/dlib/md5/md5_kernel_abstract.h | 83 |
3 files changed, 0 insertions, 750 deletions
diff --git a/ml/dlib/dlib/md5/md5_kernel_1.cpp b/ml/dlib/dlib/md5/md5_kernel_1.cpp deleted file mode 100644 index f073f9256..000000000 --- a/ml/dlib/dlib/md5/md5_kernel_1.cpp +++ /dev/null @@ -1,617 +0,0 @@ -// Copyright (C) 2003 Davis E. King (davis@dlib.net) -// License: Boost Software License See LICENSE.txt for the full license. -#ifndef DLIB_MD5_KERNEL_1_CPp_ -#define DLIB_MD5_KERNEL_1_CPp_ -#include "md5_kernel_1.h" -#include "../uintn.h" - -#include <sstream> -#include <cstring> - -namespace dlib -{ - -// ---------------------------------------------------------------------------------------- -// ---------------------------------------------------------------------------------------- -// ---------------------------------------------------------------------------------------- - - namespace md5_stuff - { - - inline uint32 F ( - uint32 x, - uint32 y, - uint32 z - ) - { - return ( (x&y) | ((~x)&z) ); - } - - // ------------------------------------------------------------------------------------ - - inline uint32 G ( - uint32 x, - uint32 y, - uint32 z - ) - { - return ( (x&z) | (y&(~z)) ); - } - - // ------------------------------------------------------------------------------------ - - inline uint32 H ( - uint32 x, - uint32 y, - uint32 z - ) - { - return ( x^y^z ); - } - - // ------------------------------------------------------------------------------------ - - inline uint32 I ( - uint32 x, - uint32 y, - uint32 z - ) - { - return ( y ^ (x|(~z)) ); - } - - // ------------------------------------------------------------------------------------ - - inline uint32 rotate_left ( - uint32 x, - uint32 n - ) - { - return ( (x<<n) | (x>>(32-n)) ); - } - - // ------------------------------------------------------------------------------------ - - inline void FF ( - uint32& a, - uint32 b, - uint32 c, - uint32 d, - uint32 x, - uint32 s, - uint32 ac - ) - { - a += F(b, c, d) + x + ac; - a = rotate_left(a, s); - a += b; - } - - // ------------------------------------------------------------------------------------ - - inline void GG ( - uint32& a, - uint32 b, - uint32 c, - uint32 d, - uint32 x, - uint32 s, - uint32 ac - ) - { - a += G(b, c, d) + x + ac; - a = rotate_left(a, s); - a += b; - } - - // ------------------------------------------------------------------------------------ - - inline void HH ( - uint32& a, - uint32 b, - uint32 c, - uint32 d, - uint32 x, - uint32 s, - uint32 ac - ) - { - a += H(b, c, d) + x + ac; - a = rotate_left(a, s); - a += b; - } - - // ------------------------------------------------------------------------------------ - - inline void II ( - uint32& a, - uint32 b, - uint32 c, - uint32 d, - uint32 x, - uint32 s, - uint32 ac - ) - { - a += I(b, c, d) + x + ac; - a = rotate_left(a, s); - a += b; - } - - // ------------------------------------------------------------------------------------ - - void scramble_block ( - uint32& a, - uint32& b, - uint32& c, - uint32& d, - uint32* x - ) - { - const uint32 S11 = 7; - const uint32 S12 = 12; - const uint32 S13 = 17; - const uint32 S14 = 22; - const uint32 S21 = 5; - const uint32 S22 = 9; - const uint32 S23 = 14; - const uint32 S24 = 20; - const uint32 S31 = 4; - const uint32 S32 = 11; - const uint32 S33 = 16; - const uint32 S34 = 23; - const uint32 S41 = 6; - const uint32 S42 = 10; - const uint32 S43 = 15; - const uint32 S44 = 21; - - - // round 1 - FF (a, b, c, d, x[ 0], S11, 0xd76aa478); // 1 - FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); // 2 - FF (c, d, a, b, x[ 2], S13, 0x242070db); // 3 - FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); // 4 - FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); // 5 - FF (d, a, b, c, x[ 5], S12, 0x4787c62a); // 6 - FF (c, d, a, b, x[ 6], S13, 0xa8304613); // 7 - FF (b, c, d, a, x[ 7], S14, 0xfd469501); // 8 - FF (a, b, c, d, x[ 8], S11, 0x698098d8); // 9 - FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); // 10 - FF (c, d, a, b, x[10], S13, 0xffff5bb1); // 11 - FF (b, c, d, a, x[11], S14, 0x895cd7be); // 12 - FF (a, b, c, d, x[12], S11, 0x6b901122); // 13 - FF (d, a, b, c, x[13], S12, 0xfd987193); // 14 - FF (c, d, a, b, x[14], S13, 0xa679438e); // 15 - FF (b, c, d, a, x[15], S14, 0x49b40821); // 16 - - // Round 2 - GG (a, b, c, d, x[ 1], S21, 0xf61e2562); // 17 - GG (d, a, b, c, x[ 6], S22, 0xc040b340); // 18 - GG (c, d, a, b, x[11], S23, 0x265e5a51); // 19 - GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); // 20 - GG (a, b, c, d, x[ 5], S21, 0xd62f105d); // 21 - GG (d, a, b, c, x[10], S22, 0x2441453); // 22 - GG (c, d, a, b, x[15], S23, 0xd8a1e681); // 23 - GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); // 24 - GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); // 25 - GG (d, a, b, c, x[14], S22, 0xc33707d6); // 26 - GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); // 27 - GG (b, c, d, a, x[ 8], S24, 0x455a14ed); // 28 - GG (a, b, c, d, x[13], S21, 0xa9e3e905); // 29 - GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); // 30 - GG (c, d, a, b, x[ 7], S23, 0x676f02d9); // 31 - GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); // 32 - - // Round 3 - HH (a, b, c, d, x[ 5], S31, 0xfffa3942); // 33 - HH (d, a, b, c, x[ 8], S32, 0x8771f681); // 34 - HH (c, d, a, b, x[11], S33, 0x6d9d6122); // 35 - HH (b, c, d, a, x[14], S34, 0xfde5380c); // 36 - HH (a, b, c, d, x[ 1], S31, 0xa4beea44); // 37 - HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); // 38 - HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); // 39 - HH (b, c, d, a, x[10], S34, 0xbebfbc70); // 40 - HH (a, b, c, d, x[13], S31, 0x289b7ec6); // 41 - HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); // 42 - HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); // 43 - HH (b, c, d, a, x[ 6], S34, 0x4881d05); // 44 - HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); // 45 - HH (d, a, b, c, x[12], S32, 0xe6db99e5); // 46 - HH (c, d, a, b, x[15], S33, 0x1fa27cf8); // 47 - HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); // 48 - - // Round 4 - II (a, b, c, d, x[ 0], S41, 0xf4292244); // 49 - II (d, a, b, c, x[ 7], S42, 0x432aff97); // 50 - II (c, d, a, b, x[14], S43, 0xab9423a7); // 51 - II (b, c, d, a, x[ 5], S44, 0xfc93a039); // 52 - II (a, b, c, d, x[12], S41, 0x655b59c3); // 53 - II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); // 54 - II (c, d, a, b, x[10], S43, 0xffeff47d); // 55 - II (b, c, d, a, x[ 1], S44, 0x85845dd1); // 56 - II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); // 57 - II (d, a, b, c, x[15], S42, 0xfe2ce6e0); // 58 - II (c, d, a, b, x[ 6], S43, 0xa3014314); // 59 - II (b, c, d, a, x[13], S44, 0x4e0811a1); // 60 - II (a, b, c, d, x[ 4], S41, 0xf7537e82); // 61 - II (d, a, b, c, x[11], S42, 0xbd3af235); // 62 - II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); // 63 - II (b, c, d, a, x[ 9], S44, 0xeb86d391); // 64 - } - - } - -// ---------------------------------------------------------------------------------------- -// ---------------------------------------------------------------------------------------- -// ---------------------------------------------------------------------------------------- - - - const std::string md5 ( - const std::string& input - ) - { - unsigned char output[16]; - md5 ( - reinterpret_cast<const unsigned char*>(input.data()), - static_cast<unsigned long>(input.size()), - output - ); - - - std::stringstream temp; - for (int i = 0; i < 16; ++i) - { - temp.fill('0'); - temp.width(2); - temp << std::hex << static_cast<unsigned int>(output[i]); - } - - return temp.str(); - } - -// ---------------------------------------------------------------------------------------- - - void md5 ( - const unsigned char* input, - unsigned long len, - unsigned char* output - ) - { - using namespace md5_stuff; - - - - - // make a temp version of input with enough space for padding and len appended - unsigned long extra_len = 64-len%64; - if (extra_len <= 8) - extra_len += 64; - unsigned char* temp = new unsigned char[extra_len + len]; - - // number of 16 word blocks - const unsigned long N = (extra_len + len)/64; - - const unsigned char* input2 = input; - unsigned char* temp2 = temp; - unsigned char* end = temp+len; - - // copy input into temp - while (temp2 != end) - { - *temp2 = *input2; - ++temp2; - ++input2; - } - - // pad temp - end += extra_len-8; - *temp2 = static_cast<unsigned char>(0x80); - ++temp2; - while (temp2 != end) - { - *temp2 = 0; - ++temp2; - } - - // make len the number of bits in the original message - // but first multiply len by 8 and since len is only 32 bits the number might - // overflow so we will carry out the multiplication manually and end up with - // the result in the base 65536 number with three digits - // result = low + high*65536 + upper*65536*65536 - unsigned long low = len & 0xFFFF; - unsigned long high = len >> 16; - unsigned long upper; - unsigned long tmp; - tmp = low * 8; - low = tmp & 0xFFFF; - tmp = high * 8 + (tmp>>16); - high = tmp & 0xFFFF; - upper = tmp >> 16; - - - // append the length - *temp2 = static_cast<unsigned char>(low&0xFF); - ++temp2; - *temp2 = static_cast<unsigned char>((low>>8)&0xFF); - ++temp2; - *temp2 = static_cast<unsigned char>((high)&0xFF); - ++temp2; - *temp2 = static_cast<unsigned char>((high>>8)&0xFF); - ++temp2; - *temp2 = static_cast<unsigned char>((upper)&0xFF);; - ++temp2; - *temp2 = static_cast<unsigned char>((upper>>8)&0xFF);; - ++temp2; - *temp2 = 0; - ++temp2; - *temp2 = 0; - - - uint32 a = 0x67452301; - uint32 b = 0xefcdab89; - uint32 c = 0x98badcfe; - uint32 d = 0x10325476; - - - // an array of 16 words - uint32 x[16]; - - for (unsigned long i = 0; i < N; ++i) - { - - // copy a block of 16 words from m into x - for (unsigned long j = 0; j < 16; ++j) - { - x[j] = ( - (static_cast<uint32>(temp[4*(j + 16*i) + 3]) << 24) | - (static_cast<uint32>(temp[4*(j + 16*i) + 2]) << 16) | - (static_cast<uint32>(temp[4*(j + 16*i) + 1]) << 8 ) | - (static_cast<uint32>(temp[4*(j + 16*i) ]) ) - ); - } - - uint32 aa = a; - uint32 bb = b; - uint32 cc = c; - uint32 dd = d; - - - scramble_block(a,b,c,d,x); - - - a = a + aa; - b = b + bb; - c = c + cc; - d = d + dd; - - } - - - // put a, b, c, and d into output - output[0] = static_cast<unsigned char>((a) &0xFF); - output[1] = static_cast<unsigned char>((a>>8) &0xFF); - output[2] = static_cast<unsigned char>((a>>16)&0xFF); - output[3] = static_cast<unsigned char>((a>>24)&0xFF); - - output[4] = static_cast<unsigned char>((b) &0xFF); - output[5] = static_cast<unsigned char>((b>>8) &0xFF); - output[6] = static_cast<unsigned char>((b>>16)&0xFF); - output[7] = static_cast<unsigned char>((b>>24)&0xFF); - - output[8] = static_cast<unsigned char>((c) &0xFF); - output[9] = static_cast<unsigned char>((c>>8) &0xFF); - output[10] = static_cast<unsigned char>((c>>16)&0xFF); - output[11] = static_cast<unsigned char>((c>>24)&0xFF); - - output[12] = static_cast<unsigned char>((d) &0xFF); - output[13] = static_cast<unsigned char>((d>>8) &0xFF); - output[14] = static_cast<unsigned char>((d>>16)&0xFF); - output[15] = static_cast<unsigned char>((d>>24)&0xFF); - - delete [] temp; - } - -// ---------------------------------------------------------------------------------------- - - const std::string md5 ( - std::istream& input - ) - { - unsigned char output[16]; - md5 ( - input, - output - ); - - - std::stringstream temp; - for (int i = 0; i < 16; ++i) - { - temp.fill('0'); - temp.width(2); - temp << std::hex << static_cast<unsigned int>(output[i]); - } - - return temp.str(); - } - -// ---------------------------------------------------------------------------------------- - - void md5 ( - std::istream& input, - unsigned char* output - ) - { - using namespace md5_stuff; - - - - - uint32 a = 0x67452301; - uint32 b = 0xefcdab89; - uint32 c = 0x98badcfe; - uint32 d = 0x10325476; - - - - unsigned long len = 0; - - // an array of 16 words - uint32 x[16]; - unsigned char temp[64]; - - - - bool write_length = false; - bool at_end = false; - std::streambuf& inputbuf = *input.rdbuf(); - while(!at_end) - { - int num = inputbuf.sgetn(reinterpret_cast<char*>(temp),64); - len += num; - - // if we hit the end of the stream then pad and add length - if (num < 64) - { - at_end = true; - unsigned char* temp2 = temp; - unsigned char* end; - if (num < 56) - end = temp+56; - else - end = temp+64; - - temp2 += num; - - // apply padding - *temp2 = 0x80; - ++temp2; - while (temp2 != end) - { - *temp2 = 0; - ++temp2; - } - - - if (num < 56) - { - write_length = true; - // make len the number of bits in the original message - // but first multiply len by 8 and since len is only 32 bits the number might - // overflow so we will carry out the multiplication manually and end up with - // the result in the base 65536 number with three digits - // result = low + high*65536 + upper*65536*65536 - unsigned long low = len & 0xFFFF; - unsigned long high = len >> 16; - unsigned long upper; - unsigned long tmp; - tmp = low * 8; - low = tmp & 0xFFFF; - tmp = high * 8 + (tmp>>16); - high = tmp & 0xFFFF; - upper = tmp >> 16; - - - // append the length - *temp2 = static_cast<unsigned char>(low&0xFF); - ++temp2; - *temp2 = static_cast<unsigned char>((low>>8)&0xFF); - ++temp2; - *temp2 = static_cast<unsigned char>((high)&0xFF); - ++temp2; - *temp2 = static_cast<unsigned char>((high>>8)&0xFF); - ++temp2; - *temp2 = static_cast<unsigned char>((upper)&0xFF);; - ++temp2; - *temp2 = static_cast<unsigned char>((upper>>8)&0xFF);; - ++temp2; - *temp2 = 0; - ++temp2; - *temp2 = 0; - } - - - } - - - // copy a block of 16 words from m into x - for (unsigned long i = 0; i < 16; ++i) - { - x[i] = ( - (static_cast<uint32>(temp[4*i + 3]) << 24) | - (static_cast<uint32>(temp[4*i + 2]) << 16) | - (static_cast<uint32>(temp[4*i + 1]) << 8 ) | - (static_cast<uint32>(temp[4*i ]) ) - ); - } - - - uint32 aa = a; - uint32 bb = b; - uint32 cc = c; - uint32 dd = d; - - - scramble_block(a,b,c,d,x); - - - a = a + aa; - b = b + bb; - c = c + cc; - d = d + dd; - - } - - if (!write_length) - { - uint64 temp = len*8; - - uint32 aa = a; - uint32 bb = b; - uint32 cc = c; - uint32 dd = d; - - std::memset(x, 0, sizeof(x)); - x[15] = (temp>>32); - x[14] = (temp&0xFFFFFFFF); - - scramble_block(a,b,c,d,x); - - - a = a + aa; - b = b + bb; - c = c + cc; - d = d + dd; - - } - - - // put a, b, c, and d into output - output[0] = static_cast<unsigned char>((a) &0xFF); - output[1] = static_cast<unsigned char>((a>>8) &0xFF); - output[2] = static_cast<unsigned char>((a>>16)&0xFF); - output[3] = static_cast<unsigned char>((a>>24)&0xFF); - - output[4] = static_cast<unsigned char>((b) &0xFF); - output[5] = static_cast<unsigned char>((b>>8) &0xFF); - output[6] = static_cast<unsigned char>((b>>16)&0xFF); - output[7] = static_cast<unsigned char>((b>>24)&0xFF); - - output[8] = static_cast<unsigned char>((c) &0xFF); - output[9] = static_cast<unsigned char>((c>>8) &0xFF); - output[10] = static_cast<unsigned char>((c>>16)&0xFF); - output[11] = static_cast<unsigned char>((c>>24)&0xFF); - - output[12] = static_cast<unsigned char>((d) &0xFF); - output[13] = static_cast<unsigned char>((d>>8) &0xFF); - output[14] = static_cast<unsigned char>((d>>16)&0xFF); - output[15] = static_cast<unsigned char>((d>>24)&0xFF); - - input.clear(std::ios::eofbit); - } - -// ---------------------------------------------------------------------------------------- - -} -#endif // DLIB_MD5_KERNEL_1_CPp_ - diff --git a/ml/dlib/dlib/md5/md5_kernel_1.h b/ml/dlib/dlib/md5/md5_kernel_1.h deleted file mode 100644 index 7031d21ef..000000000 --- a/ml/dlib/dlib/md5/md5_kernel_1.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2003 Davis E. King (davis@dlib.net) -// License: Boost Software License See LICENSE.txt for the full license. -#ifndef DLIB_MD5_KERNEl_1_ -#define DLIB_MD5_KERNEl_1_ - -#include "md5_kernel_abstract.h" -#include <string> -#include <iosfwd> -#include "../algs.h" - -namespace dlib -{ - -// ---------------------------------------------------------------------------------------- - - const std::string md5 ( - const std::string& input - ); - -// ---------------------------------------------------------------------------------------- - - void md5 ( - const unsigned char* input, - unsigned long len, - unsigned char* output - ); - -// ---------------------------------------------------------------------------------------- - - const std::string md5 ( - std::istream& input - ); - -// ---------------------------------------------------------------------------------------- - - void md5 ( - std::istream& input, - unsigned char* output - ); - -// ---------------------------------------------------------------------------------------- - -} - -#ifdef NO_MAKEFILE -#include "md5_kernel_1.cpp" -#endif - -#endif // DLIB_MD5_KERNEl_1_ - diff --git a/ml/dlib/dlib/md5/md5_kernel_abstract.h b/ml/dlib/dlib/md5/md5_kernel_abstract.h deleted file mode 100644 index b7d265d72..000000000 --- a/ml/dlib/dlib/md5/md5_kernel_abstract.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (C) 2003 Davis E. King (davis@dlib.net) -// License: Boost Software License See LICENSE.txt for the full license. -#undef DLIB_MD5_KERNEl_ABSTRACT_ -#ifdef DLIB_MD5_KERNEl_ABSTRACT_ - -#include <string> -#include <iosfwd> - -namespace dlib -{ - - /*! - NOTE: - This is the RSA Data Security, Inc. MD5 Message-Digest Algorithm - as described in rfc1321 - - For the functions which return a unsigned char*. The array contains - the 16 bytes of the digest and are in the correct order. - i.e. output[0], output[1], output[2], ... - !*/ - -// ---------------------------------------------------------------------------------------- - - const std::string md5 ( - const std::string& input - ); - /*! - ensures - - returns the md5 digest of input as a hexadecimal string - !*/ - -// ---------------------------------------------------------------------------------------- - - void md5 ( - const unsigned char* input, - unsigned long len, - unsigned char* output - ); - /*! - requires - - input == pointer to len bytes - - output == pointer to 16 bytes - - input != output - ensures - - #output == the md5 digest of input. - !*/ - -// ---------------------------------------------------------------------------------------- - - const std::string md5 ( - std::istream& input - ); - /*! - requires - - input.fail() == false - ensures - - returns the md5 digest of input as a hexadecimal string - - #input.eof() == true - - #input.fail() == false - !*/ - -// ---------------------------------------------------------------------------------------- - - void md5 ( - std::istream& input - unsigned char* output - ); - /*! - requires - - input.fail() == false - - output == pointer to 16 bytes - ensures - - #output == the md5 digest of input - - #input.eof() == true - - #input.fail() == false - !*/ - -// ---------------------------------------------------------------------------------------- - -} - -#endif // DLIB_MD5_KERNEl_ABSTRACT_ - |