#pragma once #include "../Streams/Stream.hpp" namespace Tesses::Framework::Crypto { bool HaveCrypto(); std::string Base64_Encode(std::vector data); std::vector Base64_Decode(std::string str); class Sha1 { void* inner; public: Sha1(); bool Start(); bool Update(const uint8_t* buffer, size_t sz); bool Update(Tesses::Framework::Streams::Stream* strm); bool Update(Tesses::Framework::Streams::Stream& strm); std::vector Finish(); ~Sha1(); static std::vector ComputeHash(const uint8_t* buffer, size_t len); static std::vector ComputeHash(Tesses::Framework::Streams::Stream* strm); static std::vector ComputeHash(Tesses::Framework::Streams::Stream& strm); }; class Sha256 { void* inner; bool is224; public: Sha256(); bool Start(bool is224=false); bool Is224(); bool Update(const uint8_t* buffer, size_t sz); bool Update(Tesses::Framework::Streams::Stream* strm); bool Update(Tesses::Framework::Streams::Stream& strm); std::vector Finish(); ~Sha256(); static std::vector ComputeHash(const uint8_t* buffer, size_t len,bool is224=false); static std::vector ComputeHash(Tesses::Framework::Streams::Stream* strm,bool is224=false); static std::vector ComputeHash(Tesses::Framework::Streams::Stream& strm,bool is224=false); }; class Sha512 { void* inner; bool is384; public: Sha512(); bool Start(bool is384=false); bool Is384(); bool Update(const uint8_t* buffer, size_t sz); bool Update(Tesses::Framework::Streams::Stream* strm); bool Update(Tesses::Framework::Streams::Stream& strm); std::vector Finish(); ~Sha512(); static std::vector ComputeHash(const uint8_t* buffer, size_t len,bool is384=false); static std::vector ComputeHash(Tesses::Framework::Streams::Stream* strm,bool is384=false); static std::vector ComputeHash(Tesses::Framework::Streams::Stream& strm,bool is384=false); }; typedef enum { VERSION_SHA1=1, VERSION_SHA224=224, VERSION_SHA256=256, VERSION_SHA384=384, VERSION_SHA512=512 } ShaVersion; bool PBKDF2(std::vector& output,std::string pass, std::vector& salt, long itterations, ShaVersion version); bool RandomBytes(std::vector& output, std::string personal_str); }