00001 #ifndef CRYPTOPP_SHA_H
00002 #define CRYPTOPP_SHA_H
00003
00004 #include "iterhash.h"
00005
00006 NAMESPACE_BEGIN(CryptoPP)
00007
00008
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
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
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
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