Annotation of truecrypt/volume/cipher.h, revision 1.1

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_Ciphers
        !            10: #define TC_HEADER_Encryption_Ciphers
        !            11: 
        !            12: #include "Platform/Platform.h"
        !            13: 
        !            14: 
        !            15: namespace TrueCrypt
        !            16: {
        !            17:        class Cipher;
        !            18:        typedef vector < shared_ptr <Cipher> > CipherList;
        !            19: 
        !            20:        class Cipher
        !            21:        {
        !            22:        public:
        !            23:                virtual ~Cipher ();
        !            24: 
        !            25:                virtual void DecryptBlock (byte *data) const;
        !            26:                virtual void EncryptBlock (byte *data) const;
        !            27:                static CipherList GetAvailableCiphers ();
        !            28:                virtual size_t GetBlockSize () const = 0;
        !            29:                virtual size_t GetKeySize () const = 0;
        !            30:                virtual wstring GetName () const = 0;
        !            31:                virtual shared_ptr <Cipher> GetNew () const = 0;
        !            32:                virtual void SetKey (const ConstBufferPtr &key);
        !            33: 
        !            34:                static const int MaxBlockSize = 16;
        !            35: 
        !            36:        protected:
        !            37:                Cipher ();
        !            38: 
        !            39:                virtual void Decrypt (byte *data) const = 0;
        !            40:                virtual void Encrypt (byte *data) const = 0;
        !            41:                virtual size_t GetScheduledKeySize () const = 0;
        !            42:                virtual void SetCipherKey (const byte *key) = 0;
        !            43: 
        !            44:                bool Initialized;
        !            45:                SecureBuffer ScheduledKey;
        !            46: 
        !            47:        private:
        !            48:                Cipher (const Cipher &);
        !            49:                Cipher &operator= (const Cipher &);
        !            50:        };
        !            51: 
        !            52:        struct CipherException : public Exception
        !            53:        {
        !            54:        protected:
        !            55:                CipherException () { }
        !            56:                CipherException (const string &message) : Exception (message) { }
        !            57:                CipherException (const string &message, const wstring &subject) : Exception (message, subject) { }
        !            58:        };
        !            59: 
        !            60: 
        !            61: #define TC_CIPHER(NAME, BLOCK_SIZE, KEY_SIZE) \
        !            62:        class TC_JOIN (Cipher,NAME) : public Cipher \
        !            63:        { \
        !            64:        public: \
        !            65:                TC_JOIN (Cipher,NAME) () { } \
        !            66:                virtual ~TC_JOIN (Cipher,NAME) () { } \
        !            67: \
        !            68:                virtual size_t GetBlockSize () const { return BLOCK_SIZE; }; \
        !            69:                virtual size_t GetKeySize () const { return KEY_SIZE; }; \
        !            70:                virtual wstring GetName () const { return L###NAME; }; \
        !            71:                virtual shared_ptr <Cipher> GetNew () const { return shared_ptr <Cipher> (new TC_JOIN (Cipher,NAME)()); } \
        !            72: \
        !            73:        protected: \
        !            74:                virtual void Decrypt (byte *data) const; \
        !            75:                virtual void Encrypt (byte *data) const; \
        !            76:                virtual size_t GetScheduledKeySize () const; \
        !            77:                virtual void SetCipherKey (const byte *key); \
        !            78: \
        !            79:        private: \
        !            80:                TC_JOIN (Cipher,NAME) (const TC_JOIN (Cipher,NAME) &); \
        !            81:                TC_JOIN (Cipher,NAME) &operator= (const TC_JOIN (Cipher,NAME) &); \
        !            82:        }
        !            83:        
        !            84:        TC_CIPHER (AES, 16, 32);
        !            85:        TC_CIPHER (Blowfish, 8, 56);
        !            86:        TC_CIPHER (Cast5, 8, 16);
        !            87:        TC_CIPHER (Serpent, 16, 32);
        !            88:        TC_CIPHER (TripleDES, 8, 24);
        !            89:        TC_CIPHER (Twofish, 16, 32);
        !            90: 
        !            91: #undef TC_CIPHER
        !            92: 
        !            93:        
        !            94: #define TC_EXCEPTION(NAME) TC_EXCEPTION_DECL(NAME,CipherException)
        !            95: 
        !            96: #undef TC_EXCEPTION_SET
        !            97: #define TC_EXCEPTION_SET \
        !            98:        TC_EXCEPTION (CipherInitError); \
        !            99:        TC_EXCEPTION (WeakKeyDetected);
        !           100: 
        !           101:        TC_EXCEPTION_SET;
        !           102: 
        !           103: #undef TC_EXCEPTION
        !           104: }
        !           105: 
        !           106: #endif // TC_HEADER_Encryption_Ciphers

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.