// NeL - MMORPG Framework // Copyright (C) 2010 Winch Gate Property Limited // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 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 Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . #ifndef NL_SHA1_H #define NL_SHA1_H #include #include "common.h" #include "stream.h" struct CHashKey { CHashKey () { HashKeyString.resize(20); } CHashKey (const unsigned char Message_Digest[20]) { HashKeyString = ""; for(sint i = 0; i < 20 ; ++i) { HashKeyString += Message_Digest[i]; } } // Init the hash key with a binary key format or a text key format CHashKey (const std::string &str) { if (str.size() == 20) { HashKeyString = str; } else if (str.size() == 40) { HashKeyString = ""; for(uint i = 0; i < str.size(); i+=2) { uint8 val; if (isdigit((unsigned char)str[i+0])) val = str[i+0]-'0'; else val = 10+tolower(str[i+0])-'a'; val *= 16; if (isdigit((unsigned char)str[i+1])) val += str[i+1]-'0'; else val += 10+tolower(str[i+1])-'a'; HashKeyString += val; } } else { nlwarning ("SHA: Bad hash key format"); } } // return the hash key in text format std::string toString() const { std::string str; for (uint i = 0; i < HashKeyString.size(); i++) { str += NLMISC::toString("%02X", (uint8)(HashKeyString[i])); } return str; } // serial the hash key in binary format void serial (NLMISC::IStream &stream) { stream.serial (HashKeyString); } bool operator==(const CHashKey &v) const { return HashKeyString == v.HashKeyString; } // this string is always 20 bytes long and is the code in binary format (can't print it directly) std::string HashKeyString; }; inline bool operator <(const struct CHashKey &a,const struct CHashKey &b) { return a.HashKeyString