Bläddra i källkod

cmCryptoHash: Provide factory "New" method

Construct a cmCryptoHash subclass instance based on the name of the
desired hash algorithm.
Brad King 14 år sedan
förälder
incheckning
293a7f4e2a
3 ändrade filer med 23 tillägg och 13 borttagningar
  1. 19 0
      Source/cmCryptoHash.cxx
  2. 3 0
      Source/cmCryptoHash.h
  3. 1 13
      Source/cmFileCommand.cxx

+ 19 - 0
Source/cmCryptoHash.cxx

@@ -14,6 +14,25 @@
 #include <cmsys/MD5.h>
 #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)
 {

+ 3 - 0
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:

+ 1 - 13
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());