// Filename: hashVal.h // Created by: drose (14Nov00) // //////////////////////////////////////////////////////////////////// // // PANDA 3D SOFTWARE // Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved // // All use of this software is subject to the terms of the Panda 3d // Software license. You should have received a copy of this license // along with this source code; you will also find a current copy of // the license at http://etc.cmu.edu/panda3d/docs/license/ . // // To contact the maintainers of this program write to // panda3d-general@lists.sourceforge.net . // //////////////////////////////////////////////////////////////////// #ifndef HASHVAL_H #define HASHVAL_H #include "pandabase.h" #include "typedef.h" #include "pnotify.h" #include "ramfile.h" #include "datagram.h" #include "datagramIterator.h" #include "streamWriter.h" #include "streamReader.h" //////////////////////////////////////////////////////////////////// // Class : HashVal // Description : Stores a 128-bit value that represents the hashed // contents (typically MD5) of a file or buffer. //////////////////////////////////////////////////////////////////// class EXPCL_PANDAEXPRESS HashVal { PUBLISHED: INLINE HashVal(); INLINE HashVal(const HashVal ©); INLINE void operator = (const HashVal ©); INLINE bool operator == (const HashVal &other) const; INLINE bool operator != (const HashVal &other) const; INLINE bool operator < (const HashVal &other) const; INLINE int compare_to(const HashVal &other) const; INLINE void merge_with(const HashVal &other); INLINE void output_dec(ostream &out) const; INLINE void input_dec(istream &in); void output_hex(ostream &out) const; void input_hex(istream &in); void output_binary(ostream &out) const; void input_binary(istream &in); INLINE void output(ostream &out) const; string as_dec() const; bool set_from_dec(const string &text); string as_hex() const; bool set_from_hex(const string &text); string as_bin() const; bool set_from_bin(const string &text); INLINE void write_datagram(Datagram &destination) const; INLINE void read_datagram(DatagramIterator &source); INLINE void write_stream(StreamWriter &destination) const; INLINE void read_stream(StreamReader &source); #ifdef HAVE_OPENSSL bool hash_file(const Filename &filename); INLINE void hash_ramfile(const Ramfile &ramfile); INLINE void hash_string(const string &data); void hash_buffer(const char *buffer, int length); #endif // HAVE_OPENSSL private: static void encode_hex(PN_uint32 val, char *buffer); static void decode_hex(const char *buffer, PN_uint32 &val); INLINE static char tohex(unsigned int nibble); INLINE static unsigned int fromhex(char digit); PN_uint32 _hv[4]; }; INLINE ostream &operator << (ostream &out, const HashVal &hv); #include "hashVal.I" #endif