Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

sha.h

00001 #ifndef CRYPTOPP_SHA_H
00002 #define CRYPTOPP_SHA_H
00003 
00004 #include "iterhash.h"
00005 
00006 NAMESPACE_BEGIN(CryptoPP)
00007 
00008 /// <a href="http://www.weidai.com/scan-mirror/md.html#SHA-1">SHA-1</a>
00009 class SHA : public IteratedHashWithStaticTransform<word32, BigEndian, 64, SHA>
00010 {
00011 public:
00012         enum {DIGESTSIZE = 20};
00013         SHA() : IteratedHashWithStaticTransform<word32, BigEndian, 64, SHA>(DIGESTSIZE) {Init();}
00014         static void Transform(word32 *digest, const word32 *data);
00015         static const char *StaticAlgorithmName() {return "SHA-1";}
00016 
00017 protected:
00018         void Init();
00019 };
00020 
00021 typedef SHA SHA1;
00022 
00023 //! implements the SHA-256 standard
00024 class SHA256 : public IteratedHashWithStaticTransform<word32, BigEndian, 64, SHA256>
00025 {
00026 public:
00027         enum {DIGESTSIZE = 32};
00028         SHA256() : IteratedHashWithStaticTransform<word32, BigEndian, 64, SHA256>(DIGESTSIZE) {Init();}
00029         static void Transform(word32 *digest, const word32 *data);
00030         static const char *StaticAlgorithmName() {return "SHA-256";}
00031 
00032 protected:
00033         void Init();
00034 
00035         static const word32 K[64];
00036 };
00037 
00038 #ifdef WORD64_AVAILABLE
00039 
00040 //! implements the SHA-512 standard
00041 class SHA512 : public IteratedHashWithStaticTransform<word64, BigEndian, 128, SHA512>
00042 {
00043 public:
00044         enum {DIGESTSIZE = 64};
00045         SHA512() : IteratedHashWithStaticTransform<word64, BigEndian, 128, SHA512>(DIGESTSIZE) {Init();}
00046         static void Transform(word64 *digest, const word64 *data);
00047         static const char *StaticAlgorithmName() {return "SHA-512";}
00048 
00049 protected:
00050         void Init();
00051 
00052         static const word64 K[80];
00053 };
00054 
00055 //! implements the SHA-384 standard
00056 class SHA384 : public IteratedHashWithStaticTransform<word64, BigEndian, 128, SHA512>
00057 {
00058 public:
00059         enum {DIGESTSIZE = 48};
00060         SHA384() : IteratedHashWithStaticTransform<word64, BigEndian, 128, SHA512>(64) {Init();}
00061         unsigned int DigestSize() const {return DIGESTSIZE;};
00062         static const char *StaticAlgorithmName() {return "SHA-384";}
00063 
00064 protected:
00065         void Init();
00066 };
00067 
00068 #endif
00069 
00070 NAMESPACE_END
00071 
00072 #endif

Generated on Mon Apr 19 18:12:33 2004 for Crypto++ by doxygen 1.3.6-20040222