4 * An Actionscript 3 implementation of Triple DES
\r
5 * Copyright (c) 2007 Henri Torgemane
\r
8 * The Bouncy Castle Crypto package,
\r
9 * Copyright (c) 2000-2004 The Legion Of The Bouncy Castle
\r
10 * (http://www.bouncycastle.org)
\r
12 * See LICENSE.txt for full license information.
\r
14 package com.hurlant.crypto.symmetric
\r
16 import flash.utils.ByteArray;
\r
17 import com.hurlant.util.Memory;
\r
18 import com.hurlant.util.Hex;
\r
20 public class TripleDESKey extends DESKey
\r
22 protected var encKey2:Array;
\r
23 protected var encKey3:Array;
\r
24 protected var decKey2:Array;
\r
25 protected var decKey3:Array;
\r
28 * This supports 2TDES and 3TDES.
\r
29 * If the key passed is 128 bits, 2TDES is used.
\r
30 * If the key has 192 bits, 3TDES is used.
\r
31 * Other key lengths give "undefined" results.
\r
33 public function TripleDESKey(key:ByteArray)
\r
36 encKey2 = generateWorkingKey(false, key, 8);
\r
37 decKey2 = generateWorkingKey(true, key, 8);
\r
38 if (key.length>16) {
\r
39 encKey3 = generateWorkingKey(true, key, 16);
\r
40 decKey3 = generateWorkingKey(false, key, 16);
\r
47 public override function dispose():void
\r
51 if (encKey2!=null) {
\r
52 for (i=0;i<encKey2.length;i++) { encKey2[i]=0; }
\r
55 if (encKey3!=null) {
\r
56 for (i=0;i<encKey3.length;i++) { encKey3[i]=0; }
\r
59 if (decKey2!=null) {
\r
60 for (i=0;i<decKey2.length;i++) { decKey2[i]=0; }
\r
63 if (decKey3!=null) {
\r
64 for (i=0;i<decKey3.length;i++) { decKey3[i]=0; }
\r
70 public override function encrypt(block:ByteArray, index:uint=0):void
\r
72 desFunc(encKey, block,index, block,index);
\r
73 desFunc(encKey2, block,index, block,index);
\r
74 desFunc(encKey3, block,index, block,index);
\r
77 public override function decrypt(block:ByteArray, index:uint=0):void
\r
79 desFunc(decKey3, block, index, block, index);
\r
80 desFunc(decKey2, block, index, block, index);
\r
81 desFunc(decKey, block, index, block, index);
\r
84 public override function toString():String {
\r