diff options
author | Brad King <brad.king@kitware.com> | 2011-11-16 15:04:41 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2011-11-16 15:15:44 (GMT) |
commit | 293a7f4e2ae9b458d3efefcfe133d0ad5320a1b2 (patch) | |
tree | e3ff0fa7f5d7ba3d6722b0cc1eef4f917a95e7ea /Source | |
parent | 46ab0561fc29446a736985816b005200aad9489c (diff) | |
download | CMake-293a7f4e2ae9b458d3efefcfe133d0ad5320a1b2.zip CMake-293a7f4e2ae9b458d3efefcfe133d0ad5320a1b2.tar.gz CMake-293a7f4e2ae9b458d3efefcfe133d0ad5320a1b2.tar.bz2 |
cmCryptoHash: Provide factory "New" method
Construct a cmCryptoHash subclass instance based on the name of the
desired hash algorithm.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmCryptoHash.cxx | 19 | ||||
-rw-r--r-- | Source/cmCryptoHash.h | 3 | ||||
-rw-r--r-- | Source/cmFileCommand.cxx | 14 |
3 files changed, 23 insertions, 13 deletions
diff --git a/Source/cmCryptoHash.cxx b/Source/cmCryptoHash.cxx index 411da58..a1505bd 100644 --- a/Source/cmCryptoHash.cxx +++ b/Source/cmCryptoHash.cxx @@ -15,6 +15,25 @@ #include "cm_sha2.h" //---------------------------------------------------------------------------- +cmsys::auto_ptr<cmCryptoHash> cmCryptoHash::New(const char* algo) +{ + if(strcmp(algo,"MD5") == 0) + { return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashMD5); } + else if(strcmp(algo,"SHA1") == 0) + { return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA1); } + else if(strcmp(algo,"SHA224") == 0) + { return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA224); } + else if(strcmp(algo,"SHA256") == 0) + { return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA256); } + else if(strcmp(algo,"SHA384") == 0) + { return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA384); } + else if(strcmp(algo,"SHA512") == 0) + { return cmsys::auto_ptr<cmCryptoHash>(new cmCryptoHashSHA512); } + else + { return cmsys::auto_ptr<cmCryptoHash>(0); } +} + +//---------------------------------------------------------------------------- std::string cmCryptoHash::HashString(const char* input) { this->Initialize(); diff --git a/Source/cmCryptoHash.h b/Source/cmCryptoHash.h index c17104b..0a33365 100644 --- a/Source/cmCryptoHash.h +++ b/Source/cmCryptoHash.h @@ -14,9 +14,12 @@ #include "cmStandardIncludes.h" +#include <cmsys/auto_ptr.hxx> + class cmCryptoHash { public: + static cmsys::auto_ptr<cmCryptoHash> New(const char* algo); std::string HashString(const char* input); std::string HashFile(const char* file); protected: diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index 35c743d..bab3116 100644 --- a/Source/cmFileCommand.cxx +++ b/Source/cmFileCommand.cxx @@ -360,19 +360,7 @@ bool cmFileCommand::HandleHashCommand(std::vector<std::string> const& args) return false; } - cmsys::auto_ptr<cmCryptoHash> hash; - if(args[0] == "MD5") - { hash.reset(new cmCryptoHashMD5); } - else if(args[0] == "SHA1") - { hash.reset(new cmCryptoHashSHA1); } - else if(args[0] == "SHA224") - { hash.reset(new cmCryptoHashSHA224); } - else if(args[0] == "SHA256") - { hash.reset(new cmCryptoHashSHA256); } - else if(args[0] == "SHA384") - { hash.reset(new cmCryptoHashSHA384); } - else if(args[0] == "SHA512") - { hash.reset(new cmCryptoHashSHA512); } + cmsys::auto_ptr<cmCryptoHash> hash(cmCryptoHash::New(args[0].c_str())); if(hash.get()) { std::string out = hash->HashFile(args[1].c_str()); |