Mercurial > projects > dcrypt
diff dcrypt/crypto/Crypto.d @ 12:8c7f8fecdd75
Added ManagedBlockCipher, changed Crypto to just import everything, made Hash.update() return itself (for chaining) and ditched BlockCipherWrapper.
author | Thomas Dixon <reikon@reikon.us> |
---|---|
date | Sat, 30 Aug 2008 14:38:23 -0400 |
parents | 02970e63257d |
children |
line wrap: on
line diff
--- a/dcrypt/crypto/Crypto.d Wed Aug 20 23:33:02 2008 -0400 +++ b/dcrypt/crypto/Crypto.d Sat Aug 30 14:38:23 2008 -0400 @@ -6,16 +6,17 @@ * Authors: Thomas Dixon */ +/** Import _everything_ */ module dcrypt.crypto.Crypto; // Hash functions public import dcrypt.crypto.Hash; -import dcrypt.crypto.hashes.MD5; -import dcrypt.crypto.hashes.SHA1; -import dcrypt.crypto.hashes.SHA224; -import dcrypt.crypto.hashes.SHA256; -import dcrypt.crypto.hashes.SHA384; -import dcrypt.crypto.hashes.SHA512; +public import dcrypt.crypto.hashes.MD5; +public import dcrypt.crypto.hashes.SHA1; +public import dcrypt.crypto.hashes.SHA224; +public import dcrypt.crypto.hashes.SHA256; +public import dcrypt.crypto.hashes.SHA384; +public import dcrypt.crypto.hashes.SHA512; // Message authentication codes public import dcrypt.crypto.MAC; @@ -29,138 +30,22 @@ public import dcrypt.crypto.Cipher; public import dcrypt.crypto.BlockCipher; public import dcrypt.crypto.StreamCipher; -public import dcrypt.crypto.BlockCipherWrapper; -import dcrypt.crypto.ciphers.Blowfish; -import dcrypt.crypto.ciphers.RC6; -import dcrypt.crypto.ciphers.TEA; -import dcrypt.crypto.ciphers.XTEA; -import dcrypt.crypto.ciphers.AES; -import dcrypt.crypto.ciphers.RC4; +public import dcrypt.crypto.ManagedBlockCipher; +public import dcrypt.crypto.ciphers.Blowfish; +public import dcrypt.crypto.ciphers.RC6; +public import dcrypt.crypto.ciphers.TEA; +public import dcrypt.crypto.ciphers.XTEA; +public import dcrypt.crypto.ciphers.AES; +public import dcrypt.crypto.ciphers.RC4; // Block modes -import dcrypt.crypto.modes.CBC; -import dcrypt.crypto.modes.CTR; +public import dcrypt.crypto.modes.CBC; +public import dcrypt.crypto.modes.CTR; // Block padding public import dcrypt.crypto.BlockCipherPadding; -import dcrypt.crypto.padding.NullByte; -import dcrypt.crypto.padding.X923; -import dcrypt.crypto.padding.PKCS7; -import dcrypt.crypto.padding.RFC1321; - -enum Hashes { - MD5=0, - SHA1, - SHA224, - SHA256, - SHA384, - SHA512 -} - -enum Ciphers { - // Block ciphers - Blowfish=0, - AES, - RC6, - TEA, - XTEA, - - // Stream ciphers - RC4 -} - -enum Modes { - ECB=-1, - CTR, - CBC -} - -enum Padding { - None=-1, - NullByte, // lol - X923, - PKCS7, - RFC1321 -} +public import dcrypt.crypto.padding.NullByte; +public import dcrypt.crypto.padding.X923; +public import dcrypt.crypto.padding.PKCS7; +public import dcrypt.crypto.padding.RFC1321; -struct Crypto { - static Hash createHash(uint hash) { - switch (hash) { - case Hashes.MD5: - return new MD5; - case Hashes.SHA1: - return new SHA1; - case Hashes.SHA224: - return new SHA224; - case Hashes.SHA256: - return new SHA256; - case Hashes.SHA384: - return new SHA384; - case Hashes.SHA512: - return new SHA512; - default: - throw new InvalidParameterError("Unknown hash function passed to createHash()"); - } - } - - static Cipher createCipher(uint cipher, int mode=Modes.ECB, int padding=Padding.None) { - BlockCipher c = null, - m = null; - BlockCipherPadding p = null; - switch (cipher) { - case Ciphers.Blowfish: - c = new Blowfish; - break; - case Ciphers.AES: - c = new AES; - break; - case Ciphers.RC6: - c = new RC6; - break; - case Ciphers.TEA: - c = new TEA; - break; - case Ciphers.XTEA: - c = new XTEA; - break; - case Ciphers.RC4: - return new RC4; // Note the return - default: - throw new InvalidParameterError("Unknown cipher passed to createCipher()"); - } - - switch (mode) { - case Modes.ECB: - break; - case Modes.CTR: - m = new CTR(c); - break; - case Modes.CBC: - m = new CBC(c); - break; - default: - throw new InvalidParameterError("Unknown mode passed to createCipher()"); - } - - switch (padding) { - case Padding.None: - break; - case Padding.NullByte: - p = new NullByte; - break; - case Padding.X923: - p = new X923; - break; - case Padding.PKCS7: - p = new PKCS7; - break; - case Padding.RFC1321: - p = new RFC1321; - break; - default: - throw new InvalidParameterError("Unknown padding passed to createCipher()"); - } - - return new BlockCipherWrapper(((m is null) ? c : m), p); - } -}