diff options
Diffstat (limited to 'apt-pkg/contrib')
-rw-r--r-- | apt-pkg/contrib/sha2.cc | 85 | ||||
-rw-r--r-- | apt-pkg/contrib/sha2.h | 87 |
2 files changed, 67 insertions, 105 deletions
diff --git a/apt-pkg/contrib/sha2.cc b/apt-pkg/contrib/sha2.cc index dcdbef6e7..4604d3167 100644 --- a/apt-pkg/contrib/sha2.cc +++ b/apt-pkg/contrib/sha2.cc @@ -18,91 +18,10 @@ #include <apt-pkg/sha2.h> #include <apt-pkg/strutl.h> - - - -SHA512Summation::SHA512Summation() /*{{{*/ -{ - SHA512_Init(&ctx); - Done = false; -} - /*}}}*/ - -SHA512SumValue SHA512Summation::Result() /*{{{*/ -{ - if (!Done) { - SHA512_Final(Sum, &ctx); - Done = true; - } - - SHA512SumValue res; - res.Set(Sum); - return res; -} - /*}}}*/ -bool SHA512Summation::Add(const unsigned char *inbuf,unsigned long len) /*{{{*/ -{ - if (Done) - return false; - SHA512_Update(&ctx, inbuf, len); - return true; -} - /*}}}*/ -// SHA512Summation::AddFD - Add content of file into the checksum /*{{{*/ -// --------------------------------------------------------------------- -/* */ -bool SHA512Summation::AddFD(int Fd,unsigned long Size) -{ - unsigned char Buf[64 * 64]; - int Res = 0; - int ToEOF = (Size == 0); - while (Size != 0 || ToEOF) - { - unsigned n = sizeof(Buf); - if (!ToEOF) n = min(Size,(unsigned long)n); - Res = read(Fd,Buf,n); - if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read - return false; - if (ToEOF && Res == 0) // EOF - break; - Size -= Res; - Add(Buf,Res); - } - return true; -} - /*}}}*/ - -SHA256Summation::SHA256Summation() /*{{{*/ -{ - SHA256_Init(&ctx); - Done = false; -} - /*}}}*/ -bool SHA256Summation::Add(const unsigned char *inbuf,unsigned long len) /*{{{*/ -{ - if (Done) - return false; - SHA256_Update(&ctx, inbuf, len); - return true; -} - /*}}}*/ -SHA256SumValue SHA256Summation::Result() /*{{{*/ -{ - if (!Done) { - SHA256_Final(Sum, &ctx); - Done = true; - } - - SHA256SumValue res; - res.Set(Sum); - return res; -} - /*}}}*/ -// SHA256Summation::AddFD - Add content of file into the checksum /*{{{*/ +// SHA2Summation::AddFD - Add content of file into the checksum /*{{{*/ // --------------------------------------------------------------------- /* */ -bool SHA256Summation::AddFD(int Fd,unsigned long Size) -{ +bool SHA2SummationBase::AddFD(int Fd,unsigned long Size){ unsigned char Buf[64 * 64]; int Res = 0; int ToEOF = (Size == 0); diff --git a/apt-pkg/contrib/sha2.h b/apt-pkg/contrib/sha2.h index 2c3fcae12..bd5472527 100644 --- a/apt-pkg/contrib/sha2.h +++ b/apt-pkg/contrib/sha2.h @@ -31,40 +31,83 @@ class SHA256Summation; typedef HashSumValue<512> SHA512SumValue; typedef HashSumValue<256> SHA256SumValue; -class SHA256Summation +class SHA2SummationBase +{ + protected: + bool Done; + public: + virtual bool Add(const unsigned char *inbuf,unsigned long inlen) = 0; + virtual bool AddFD(int Fd,unsigned long Size); + + inline bool Add(const char *Data) + { + return Add((unsigned char *)Data,strlen(Data)); + }; + inline bool Add(const unsigned char *Beg,const unsigned char *End) + { + return Add(Beg,End-Beg); + }; + void Result(); +}; + +class SHA256Summation : public SHA2SummationBase { SHA256_CTX ctx; unsigned char Sum[32]; - bool Done; public: - - 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(); + virtual bool Add(const unsigned char *inbuf, unsigned long len) + { + if (Done) + return false; + SHA256_Update(&ctx, inbuf, len); + return true; + }; + 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 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(); + virtual bool Add(const unsigned char *inbuf, unsigned long len) + { + if (Done) + return false; + SHA512_Update(&ctx, inbuf, len); + return true; + }; + SHA512SumValue Result() + { + if (!Done) { + SHA512_Final(Sum, &ctx); + Done = true; + } + SHA512SumValue res; + res.Set(Sum); + return res; + }; + SHA512Summation() + { + SHA512_Init(&ctx); + Done = false; + }; }; |