diff options
author | Michael Vogt <michael.vogt@ubuntu.com> | 2011-06-08 12:03:34 +0200 |
---|---|---|
committer | Michael Vogt <michael.vogt@ubuntu.com> | 2011-06-08 12:03:34 +0200 |
commit | 12cd178d6eb61306cc99e5e07c463c800d406771 (patch) | |
tree | 90941ebf0adb1c4b3ef9ca780a2b42cb1f2dfb16 /apt-pkg/contrib/sha2.h | |
parent | d953d210bb54accb416f2144104b79dcd29198ba (diff) | |
parent | 31693a8ff0fe593879ed30a4dde8f9be5b0859bf (diff) |
merge lp:~mvo/apt/sha512-template to add support for sha512
Diffstat (limited to 'apt-pkg/contrib/sha2.h')
-rw-r--r-- | apt-pkg/contrib/sha2.h | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/apt-pkg/contrib/sha2.h b/apt-pkg/contrib/sha2.h new file mode 100644 index 000000000..bd5472527 --- /dev/null +++ b/apt-pkg/contrib/sha2.h @@ -0,0 +1,114 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +// $Id: sha512.h,v 1.3 2001/05/07 05:05:47 jgg Exp $ +/* ###################################################################### + + SHA{512,256}SumValue - Storage for a SHA-{512,256} hash. + SHA{512,256}Summation - SHA-{512,256} Secure Hash Algorithm. + + This is a C++ interface to a set of SHA{512,256}Sum functions, that mirrors + the equivalent MD5 & SHA1 classes. + + ##################################################################### */ + /*}}}*/ +#ifndef APTPKG_SHA2_H +#define APTPKG_SHA2_H + +#include <string> +#include <cstring> +#include <algorithm> +#include <stdint.h> + +#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 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]; + + public: + 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 : public SHA2SummationBase +{ + SHA512_CTX ctx; + unsigned char Sum[64]; + + public: + 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; + }; +}; + + +#endif |