|
|
1.1 root 1: /*
2: Copyright (c) 2008 TrueCrypt Foundation. All rights reserved.
3:
4: Governed by the TrueCrypt License 2.4 the full text of which is contained
5: in the file License.txt included in TrueCrypt binary and source code
6: distribution packages.
7: */
8:
9: #ifndef TC_HEADER_Encryption_Hash
10: #define TC_HEADER_Encryption_Hash
11:
12: #include "Platform/Platform.h"
13:
14: namespace TrueCrypt
15: {
16: class Hash;
17: typedef list < shared_ptr <Hash> > HashList;
18:
19: class Hash
20: {
21: public:
22: Hash () : Deprecated (false) { }
23: virtual ~Hash () { }
24:
25: static HashList GetAvailableAlgorithms ();
26: virtual void GetDigest (const BufferPtr &buffer) = 0;
27: virtual size_t GetBlockSize () const = 0;
28: virtual size_t GetDigestSize () const = 0;
29: virtual wstring GetName () const = 0;
30: virtual shared_ptr <Hash> GetNew () const = 0;
31: virtual void Init () = 0;
32: bool IsDeprecated () const { return Deprecated; }
33: virtual void ProcessData (const ConstBufferPtr &data) = 0;
34: virtual void ValidateDataParameters (const ConstBufferPtr &data) const;
35: virtual void ValidateDigestParameters (const BufferPtr &buffer) const;
36:
37: protected:
38: SecureBuffer Context;
39: bool Deprecated;
40:
41: private:
42: Hash (const Hash &);
43: Hash &operator= (const Hash &);
44: };
45:
46: // RIPEMD-160
47: class Ripemd160 : public Hash
48: {
49: public:
50: Ripemd160 ();
51: virtual ~Ripemd160 () { }
52:
53: virtual void GetDigest (const BufferPtr &buffer);
54: virtual size_t GetBlockSize () const { return 64; }
55: virtual size_t GetDigestSize () const { return 160 / 8; }
56: virtual wstring GetName () const { return L"RIPEMD-160"; }
57: virtual shared_ptr <Hash> GetNew () const { return shared_ptr <Hash> (new Ripemd160); }
58: virtual void Init ();
59: virtual void ProcessData (const ConstBufferPtr &data);
60:
61: protected:
62:
63: private:
64: Ripemd160 (const Ripemd160 &);
65: Ripemd160 &operator= (const Ripemd160 &);
66: };
67:
68: // SHA-1
69: class Sha1 : public Hash
70: {
71: public:
72: Sha1 ();
73: virtual ~Sha1 () { }
74:
75: virtual void GetDigest (const BufferPtr &buffer);
76: virtual size_t GetBlockSize () const { return 64; }
77: virtual size_t GetDigestSize () const { return 160 / 8; }
78: virtual wstring GetName () const { return L"SHA-1"; }
79: virtual shared_ptr <Hash> GetNew () const { return shared_ptr <Hash> (new Sha1); }
80: virtual void Init ();
81: virtual void ProcessData (const ConstBufferPtr &data);
82:
83: protected:
84:
85: private:
86: Sha1 (const Sha1 &);
87: Sha1 &operator= (const Sha1 &);
88: };
89:
90: // SHA-512
91: class Sha512 : public Hash
92: {
93: public:
94: Sha512 ();
95: virtual ~Sha512 () { }
96:
97: virtual void GetDigest (const BufferPtr &buffer);
98: virtual size_t GetBlockSize () const { return 128; }
99: virtual size_t GetDigestSize () const { return 512 / 8; }
100: virtual wstring GetName () const { return L"SHA-512"; }
101: virtual shared_ptr <Hash> GetNew () const { return shared_ptr <Hash> (new Sha512); }
102: virtual void Init ();
103: virtual void ProcessData (const ConstBufferPtr &data);
104:
105: protected:
106:
107: private:
108: Sha512 (const Sha512 &);
109: Sha512 &operator= (const Sha512 &);
110: };
111:
112: // Whirlpool
113: class Whirlpool : public Hash
114: {
115: public:
116: Whirlpool ();
117: virtual ~Whirlpool () { }
118:
119: virtual void GetDigest (const BufferPtr &buffer);
120: virtual size_t GetBlockSize () const { return 64; }
121: virtual size_t GetDigestSize () const { return 512 / 8; }
122: virtual wstring GetName () const { return L"Whirlpool"; }
123: virtual shared_ptr <Hash> GetNew () const { return shared_ptr <Hash> (new Whirlpool); }
124: virtual void Init ();
125: virtual void ProcessData (const ConstBufferPtr &data);
126:
127: protected:
128:
129: private:
130: Whirlpool (const Whirlpool &);
131: Whirlpool &operator= (const Whirlpool &);
132: };
133: }
134:
135: #endif // TC_HEADER_Encryption_Hash
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.