/*************************************************************************** * Copyright (C) 2005 by Joris Guisson * * joris.guisson@gmail.com * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #ifndef BTSHA1HASH_H #define BTSHA1HASH_H #include #include "constants.h" class TQString; namespace bt { class Log; /** * @author Joris Guisson * @brief Stores a SHA1 hash * * This class keeps track of a SHA1 hash. A SHA1 hash is a 20 byte * array of bytes. */ class SHA1Hash { protected: Uint8 hash[20]; public: /** * Constructor, sets every byte in the hash to 0. */ SHA1Hash(); /** * Copy constructor. * @param other Hash to copy */ SHA1Hash(const SHA1Hash & other); /** * Directly set the hash data. * @param h The hash data must be 20 bytes large */ SHA1Hash(const Uint8* h); /** * Destructor. */ virtual ~SHA1Hash(); /// Get the idx'th byte of the hash. Uint8 operator [] (const Uint32 idx) const {return idx < 20 ? hash[idx] : 0;} /** * Assignment operator. * @param other Hash to copy */ SHA1Hash & operator = (const SHA1Hash & other); /** * Test wether another hash is equal to this one. * @param other The other hash * @return true if equal, false otherwise */ bool operator == (const SHA1Hash & other) const; /** * Test wether another hash is not equal to this one. * @param other The other hash * @return true if not equal, false otherwise */ bool operator != (const SHA1Hash & other) const {return !operator ==(other);} /** * Generate an SHA1 hash from a bunch of data. * @param data The data * @param len Size in bytes of data * @return The generated SHA1 hash */ static SHA1Hash generate(const Uint8* data,Uint32 len); /** * Convert the hash to a printable string. * @return The string */ TQString toString() const; /** * Convert the hash to a string, usable in http get requests. * @return The string */ TQString toURLString() const; /** * Directly get pointer to the data. * @return The data */ const Uint8* getData() const {return hash;} /** * Function to print a SHA1Hash to the Log. * @param out The Log * @param h The hash * @return out */ friend Log & operator << (Log & out,const SHA1Hash & h); /** * XOR two SHA1Hashes * @param a The first hash * @param b The second * @return a xor b */ friend SHA1Hash operator ^ (const SHA1Hash & a,const SHA1Hash & b); /** * Function to compare 2 hashes * @param a The first hash * @param h The second hash * @return wether a is smaller then b */ friend bool operator < (const SHA1Hash & a,const SHA1Hash & b); /** * Convert the hash to a byte array. */ TQByteArray toByteArray() const; }; } #endif