89 lines
2.5 KiB
C++
89 lines
2.5 KiB
C++
/**
|
|
* PANDA 3D SOFTWARE
|
|
* Copyright (c) Carnegie Mellon University. All rights reserved.
|
|
*
|
|
* All use of this software is subject to the terms of the revised BSD
|
|
* license. You should have received a copy of this license along
|
|
* with this source code in a file named "LICENSE."
|
|
*
|
|
* @file hashVal.h
|
|
* @author drose
|
|
* @date 2000-11-14
|
|
*/
|
|
|
|
#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"
|
|
#include "vector_uchar.h"
|
|
|
|
/**
|
|
* Stores a 128-bit value that represents the hashed contents (typically MD5)
|
|
* of a file or buffer.
|
|
*/
|
|
class EXPCL_PANDA_EXPRESS 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(std::ostream &out) const;
|
|
INLINE void input_dec(std::istream &in);
|
|
void output_hex(std::ostream &out) const;
|
|
void input_hex(std::istream &in);
|
|
void output_binary(std::ostream &out) const;
|
|
void input_binary(std::istream &in);
|
|
|
|
INLINE void output(std::ostream &out) const;
|
|
|
|
std::string as_dec() const;
|
|
bool set_from_dec(const std::string &text);
|
|
|
|
std::string as_hex() const;
|
|
bool set_from_hex(const std::string &text);
|
|
|
|
vector_uchar as_bin() const;
|
|
bool set_from_bin(const vector_uchar &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);
|
|
bool hash_stream(std::istream &stream);
|
|
INLINE void hash_ramfile(const Ramfile &ramfile);
|
|
INLINE void hash_string(const std::string &data);
|
|
INLINE void hash_bytes(const vector_uchar &data);
|
|
void hash_buffer(const char *buffer, int length);
|
|
#endif // HAVE_OPENSSL
|
|
|
|
private:
|
|
static void encode_hex(uint32_t val, char *buffer);
|
|
static void decode_hex(const char *buffer, uint32_t &val);
|
|
INLINE static char tohex(unsigned int nibble);
|
|
INLINE static unsigned int fromhex(char digit);
|
|
|
|
uint32_t _hv[4];
|
|
};
|
|
|
|
INLINE std::ostream &operator << (std::ostream &out, const HashVal &hv);
|
|
|
|
#include "hashVal.I"
|
|
|
|
#endif
|