Hash.h

Go to the documentation of this file.
00001 /*
00002  * This program is free software; you can redistribute it and/or modify
00003  * it under the terms of the GNU General Public License as published by
00004  * the Free Software Foundation; either version 3 of the License, or
00005  * (at your option) any later version.
00006  *
00007  * Written (W) 2009 Soeren Sonnenburg
00008  * Copyright (C) 2009 Fraunhofer Institute FIRST and Max-Planck-Society
00009  *
00010  * The MD5 hashing function was integrated from public sources.
00011  * Its copyright follows.
00012  *
00013  * MD5
00014  *
00015  * This code implements the MD5 message-digest algorithm.
00016  * The algorithm is due to Ron Rivest.  This code was
00017  * written by Colin Plumb in 1993, no copyright is claimed.
00018  * This code is in the public domain; do with it what you wish.
00019  *
00020  * Equivalent code is available from RSA Data Security, Inc.
00021  * This code has been tested against that, and is equivalent,
00022  * except that you don't need to include two pages of legalese
00023  * with every copy.
00024  *
00025  * To compute the message digest of a chunk of bytes, declare an
00026  * MD5Context structure, pass it to MD5Init, call MD5Update as
00027  * needed on buffers full of bytes, and then call MD5Final, which
00028  * will fill a supplied 16-byte array with the digest.
00029  *
00030  */
00031 
00032 #ifndef HASH_H
00033 #define HASH_H
00034 
00035 #include <shogun/base/SGObject.h>
00036 #include <shogun/lib/common.h>
00037 #include <shogun/lib/external/PMurHash.h>
00038 
00039 namespace shogun
00040 {
00047 class CHash : public CSGObject
00048 {
00049     public:
00051         CHash() {}
00053         virtual ~CHash() {}
00054 
00060         static uint32_t crc32(uint8_t *data, int32_t len);
00061 
00069         static void MD5(unsigned char *x, unsigned l, unsigned char *buf);
00070 
00080         static uint32_t MurmurHash3(uint8_t* data, int32_t len, uint32_t seed);
00081 
00093         static void IncrementalMurmurHash3(uint32_t *hash, uint32_t *carry,
00094                 uint8_t* data, int32_t len);
00095 
00106         static uint32_t FinalizeIncrementalMurmurHash3(uint32_t h,
00107                 uint32_t carry, uint32_t total_length);
00108 
00119         static uint32_t MurmurHashString(substring s, uint32_t h);
00120 
00122         virtual const char* get_name() const { return "Hash"; }
00123 
00124     protected:
00125 
00126 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00127 
00128         struct MD5Context {
00130             uint32_t buf[4];
00132             uint32_t bits[2];
00133             union
00134             {
00136                 unsigned char in[64];
00138                 uint32_t uin[16];
00139             };
00140         };
00141 #endif // DOXYGEN_SHOULD_SKIP_THIS
00142 
00149         static void MD5Init(struct MD5Context *context);
00150 
00159         static void MD5Update(struct MD5Context *context,
00160                 unsigned char const *buf, unsigned len);
00161 
00169         static void MD5Final(unsigned char digest[16],
00170                 struct MD5Context *context);
00179         static void MD5Transform(uint32_t buf[4], uint32_t const in[16]);
00180 };
00181 }
00182 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

SHOGUN Machine Learning Toolbox - Documentation