/* * Copyright (C) 2012-2014 Arctium Emulation * Copyright (C) 2008-2014 TrinityCore * * 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 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Helper.hpp" #include #include #include namespace Connection_Patcher { namespace Helper { Constants::BinaryTypes GetBinaryType(std::vector const& data) { // Check MS-DOS magic if (*reinterpret_cast(data.data()) == 0x5A4D) { uint32_t const peOffset(*reinterpret_cast(data.data() + 0x3C)); // Check PE magic if (*reinterpret_cast(data.data() + peOffset) != 0x4550) throw std::invalid_argument("Not a PE file!"); return Constants::BinaryTypes(*reinterpret_cast(data.data() + peOffset + 4)); } else { return Constants::BinaryTypes(*reinterpret_cast(data.data())); } } std::string GetFileChecksum(std::vector const& data) { SHA256Hash h; h.UpdateData(data.data(), data.size()); h.Finalize(); return ByteArrayToHexStr(h.GetDigest(), h.GetLength()); } } }