aboutsummaryrefslogtreecommitdiffstats
path: root/signaling-server/node_modules/socket.io/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TripleDESKey.as
blob: 1e750117d52a169475a11a64eaa6677e9ef3e824 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/**
 * TripleDESKey
 * 
 * An Actionscript 3 implementation of Triple DES
 * Copyright (c) 2007 Henri Torgemane
 * 
 * Derived from:
 * 		The Bouncy Castle Crypto package, 
 * 		Copyright (c) 2000-2004 The Legion Of The Bouncy Castle
 * 		(http://www.bouncycastle.org)
 * 
 * See LICENSE.txt for full license information.
 */
package com.hurlant.crypto.symmetric
{
	import flash.utils.ByteArray;
	import com.hurlant.util.Memory;
	import com.hurlant.util.Hex;

	public class TripleDESKey extends DESKey
	{
		protected var encKey2:Array;
		protected var encKey3:Array;
		protected var decKey2:Array;
		protected var decKey3:Array;
		
		/**
		 * This supports 2TDES and 3TDES.
		 * If the key passed is 128 bits, 2TDES is used.
		 * If the key has 192 bits, 3TDES is used.
		 * Other key lengths give "undefined" results.
		 */
		public function TripleDESKey(key:ByteArray)
		{
			super(key);
			encKey2 = generateWorkingKey(false, key, 8);
			decKey2 = generateWorkingKey(true, key, 8);
			if (key.length>16) {
				encKey3 = generateWorkingKey(true, key, 16);
				decKey3 = generateWorkingKey(false, key, 16);
			} else {
				encKey3 = encKey;
				decKey3 = decKey;
			}
		}

		public override function dispose():void
		{
			super.dispose();
			var i:uint = 0;
			if (encKey2!=null) {
				for (i=0;i<encKey2.length;i++) { encKey2[i]=0; }
				encKey2=null;
			}
			if (encKey3!=null) {
				for (i=0;i<encKey3.length;i++) { encKey3[i]=0; }
				encKey3=null;
			}
			if (decKey2!=null) {
				for (i=0;i<decKey2.length;i++) { decKey2[i]=0; }
				decKey2=null
			}
			if (decKey3!=null) {
				for (i=0;i<decKey3.length;i++) { decKey3[i]=0; }
				decKey3=null;
			}
			Memory.gc();
		}
		
		public override function encrypt(block:ByteArray, index:uint=0):void
		{
			desFunc(encKey, block,index, block,index);
			desFunc(encKey2, block,index, block,index);
			desFunc(encKey3, block,index, block,index);
		}
		
		public override function decrypt(block:ByteArray, index:uint=0):void
		{
			desFunc(decKey3, block, index, block, index);
			desFunc(decKey2, block, index, block, index);
			desFunc(decKey, block, index, block, index);
		}
		
		public override function toString():String {
			return "3des";
		}
	}
}