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);
-    }
-}