From f582dba6664e5ea814f3b33c71ae4d83db17b996 Mon Sep 17 00:00:00 2001 From: Sebastian Holtermann Date: Wed, 10 Aug 2016 11:08:15 +0200 Subject: cmCryptoHash: Return byte vector from internal Finalize method Some callers may want the raw byte vector instead of the hex character string. Convert the internal implementation to use this so that we can later add public APIs to get it. --- Source/cmCryptoHash.cxx | 20 ++++++++++---------- Source/cmCryptoHash.h | 6 +++--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Source/cmCryptoHash.cxx b/Source/cmCryptoHash.cxx index 59b9abd..8d96421 100644 --- a/Source/cmCryptoHash.cxx +++ b/Source/cmCryptoHash.cxx @@ -70,7 +70,7 @@ std::string cmCryptoHash::HashString(const std::string& input) this->Initialize(); this->Append(reinterpret_cast(input.c_str()), static_cast(input.size())); - return this->Finalize(); + return ByteHashToString(this->Finalize()); } std::string cmCryptoHash::HashFile(const std::string& file) @@ -99,7 +99,7 @@ std::string cmCryptoHash::HashFile(const std::string& file) } } if (fin.eof()) { - return this->Finalize(); + return ByteHashToString(this->Finalize()); } return ""; } @@ -124,11 +124,11 @@ void cmCryptoHashMD5::Append(unsigned char const* buf, int sz) cmsysMD5_Append(this->MD5, buf, sz); } -std::string cmCryptoHashMD5::Finalize() +std::vector cmCryptoHashMD5::Finalize() { - char md5out[32]; - cmsysMD5_FinalizeHex(this->MD5, md5out); - return std::string(md5out, 32); + std::vector hash(16, 0); + cmsysMD5_Finalize(this->MD5, &hash[0]); + return hash; } #define cmCryptoHash_SHA_CLASS_IMPL(SHA) \ @@ -142,11 +142,11 @@ std::string cmCryptoHashMD5::Finalize() { \ SHA##_Update(this->SHA, buf, sz); \ } \ - std::string cmCryptoHash##SHA::Finalize() \ + std::vector cmCryptoHash##SHA::Finalize() \ { \ - char out[SHA##_DIGEST_STRING_LENGTH]; \ - SHA##_End(this->SHA, out); \ - return std::string(out, SHA##_DIGEST_STRING_LENGTH - 1); \ + std::vector hash(SHA##_DIGEST_LENGTH, 0); \ + SHA##_Final(&hash[0], this->SHA); \ + return hash; \ } cmCryptoHash_SHA_CLASS_IMPL(SHA1) cmCryptoHash_SHA_CLASS_IMPL(SHA224) diff --git a/Source/cmCryptoHash.h b/Source/cmCryptoHash.h index 80ab269..ab50e82 100644 --- a/Source/cmCryptoHash.h +++ b/Source/cmCryptoHash.h @@ -48,7 +48,7 @@ public: protected: virtual void Initialize() = 0; virtual void Append(unsigned char const*, int) = 0; - virtual std::string Finalize() = 0; + virtual std::vector Finalize() = 0; }; class cmCryptoHashMD5 : public cmCryptoHash @@ -62,7 +62,7 @@ public: protected: void Initialize() CM_OVERRIDE; void Append(unsigned char const* buf, int sz) CM_OVERRIDE; - std::string Finalize() CM_OVERRIDE; + std::vector Finalize() CM_OVERRIDE; }; #define cmCryptoHash_SHA_CLASS_DECL(SHA) \ @@ -77,7 +77,7 @@ protected: protected: \ virtual void Initialize(); \ virtual void Append(unsigned char const* buf, int sz); \ - virtual std::string Finalize(); \ + virtual std::vector Finalize(); \ } cmCryptoHash_SHA_CLASS_DECL(SHA1); -- cgit v0.12