]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/sha2.h
* apt-pkg/cdrom.{cc,h}:
[apt.git] / apt-pkg / contrib / sha2.h
index 2c3fcae12c337a21b3b4c9fbbd6acf359172fd9f..386225889b69d3e15b4fbe7c89e68a4f780acc7c 100644 (file)
 #include "sha2_internal.h"
 #include "hashsum_template.h"
 
-using std::string;
-using std::min;
-
-class SHA512Summation;
-class SHA256Summation;
-
 typedef HashSumValue<512> SHA512SumValue;
 typedef HashSumValue<256> SHA256SumValue;
 
-class SHA256Summation
+class SHA2SummationBase : public SummationImplementation
+{
+ protected:
+   bool Done;
+ public:
+   bool Add(const unsigned char *inbuf, unsigned long len) = 0;
+
+   void Result();
+};
+
+class SHA256Summation : public SHA2SummationBase
 {
    SHA256_CTX ctx;
    unsigned char Sum[32];
-   bool Done;
 
    public:
+   bool Add(const unsigned char *inbuf, unsigned long len)
+   {
+      if (Done) 
+         return false;
+      SHA256_Update(&ctx, inbuf, len);
+      return true;
+   };
+   using SummationImplementation::Add;
 
-   bool Add(const unsigned char *inbuf,unsigned long inlen);
-   inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));};
-   bool AddFD(int Fd,unsigned long Size);
-   inline bool Add(const unsigned char *Beg,const unsigned char *End) 
-                  {return Add(Beg,End-Beg);};
-   SHA256SumValue Result();
-   
-   SHA256Summation();
+   SHA256SumValue Result()
+   {
+      if (!Done) {
+         SHA256_Final(Sum, &ctx);
+         Done = true;
+      }
+      SHA256SumValue res;
+      res.Set(Sum);
+      return res;
+   };
+   SHA256Summation() 
+   {
+      SHA256_Init(&ctx);
+      Done = false;
+   };
 };
 
-class SHA512Summation
+class SHA512Summation : public SHA2SummationBase
 {
    SHA512_CTX ctx;
    unsigned char Sum[64];
-   bool Done;
 
    public:
+   bool Add(const unsigned char *inbuf, unsigned long len)
+   {
+      if (Done) 
+         return false;
+      SHA512_Update(&ctx, inbuf, len);
+      return true;
+   };
+   using SummationImplementation::Add;
 
-   bool Add(const unsigned char *inbuf,unsigned long inlen);
-   inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));};
-   bool AddFD(int Fd,unsigned long Size);
-   inline bool Add(const unsigned char *Beg,const unsigned char *End) 
-                  {return Add(Beg,End-Beg);};
-   SHA512SumValue Result();
-   
-   SHA512Summation();
+   SHA512SumValue Result()
+   {
+      if (!Done) {
+         SHA512_Final(Sum, &ctx);
+         Done = true;
+      }
+      SHA512SumValue res;
+      res.Set(Sum);
+      return res;
+   };
+   SHA512Summation()
+   {
+      SHA512_Init(&ctx);
+      Done = false;
+   };
 };