Subversion Repositories Applications.papyrus

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2150 mathias 1
if(!dojo._hasResource["dojox.crypto.Blowfish"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
2
dojo._hasResource["dojox.crypto.Blowfish"] = true;
3
dojo.provide("dojox.crypto.Blowfish");
4
 
5
dojo.require("dojox.crypto._base");
6
 
7
/*	Blowfish
8
 *	Created based on the C# implementation by Marcus Hahn (http://www.hotpixel.net/)
9
 *	Unsigned math functions derived from Joe Gregorio's SecureSyndication GM script
10
 *	http://bitworking.org/projects/securesyndication/
11
 *	(Note that this is *not* an adaption of the above script)
12
 *
13
 *	version 1.0
14
 *	TRT
15
 *	2005-12-08
16
 */
17
dojox.crypto.Blowfish = new function(){
18
	//	summary
19
	//	Object for doing Blowfish encryption/decryption.
20
	var POW2=Math.pow(2,2);
21
	var POW3=Math.pow(2,3);
22
	var POW4=Math.pow(2,4);
23
	var POW8=Math.pow(2,8);
24
	var POW16=Math.pow(2,16);
25
	var POW24=Math.pow(2,24);
26
	var iv=null;	//	CBC mode initialization vector
27
	var boxes={
28
		p:[
29
			0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
30
			0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
31
			0x9216d5d9, 0x8979fb1b
32
		],
33
		s0:[
34
			0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
35
			0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
36
			0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
37
			0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
38
			0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
39
			0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
40
			0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
41
			0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
42
			0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
43
			0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
44
			0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
45
			0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
46
			0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
47
			0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
48
			0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
49
			0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
50
			0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
51
			0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
52
			0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
53
			0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
54
			0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
55
			0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
56
			0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
57
			0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
58
			0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
59
			0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
60
			0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
61
			0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
62
			0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
63
			0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
64
			0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
65
			0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a
66
		],
67
		s1:[
68
			0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
69
			0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
70
			0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
71
			0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
72
			0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
73
			0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
74
			0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
75
			0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
76
			0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
77
			0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
78
			0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
79
			0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
80
			0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
81
			0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
82
			0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
83
			0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
84
			0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
85
			0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
86
			0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
87
			0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
88
			0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
89
			0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
90
			0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
91
			0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
92
			0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
93
			0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
94
			0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
95
			0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
96
			0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
97
			0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
98
			0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
99
			0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7
100
		],
101
		s2:[
102
			0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
103
			0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
104
			0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
105
			0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
106
			0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
107
			0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
108
			0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
109
			0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
110
			0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
111
			0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
112
			0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
113
			0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
114
			0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
115
			0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
116
			0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
117
			0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
118
			0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
119
			0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
120
			0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
121
			0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
122
			0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
123
			0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
124
			0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
125
			0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
126
			0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
127
			0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
128
			0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
129
			0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
130
			0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
131
			0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
132
			0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
133
			0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0
134
		],
135
		s3:[
136
			0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
137
			0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
138
			0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
139
			0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
140
			0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
141
			0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
142
			0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
143
			0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
144
			0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
145
			0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
146
			0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
147
			0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
148
			0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
149
			0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
150
			0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
151
			0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
152
			0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
153
			0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
154
			0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
155
			0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
156
			0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
157
			0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
158
			0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
159
			0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
160
			0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
161
			0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
162
			0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
163
			0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
164
			0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
165
			0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
166
			0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
167
			0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
168
		]
169
	}
170
////////////////////////////////////////////////////////////////////////////
171
	function add(x,y){
172
		var sum=(x+y)&0xffffffff;
173
		if (sum<0){
174
			sum=-sum;
175
			return (0x10000*((sum>>16)^0xffff))+(((sum&0xffff)^0xffff)+1);
176
		}
177
		return sum;
178
	}
179
	function split(x){
180
		var r=x&0xffffffff;
181
		if(r<0) {
182
			r=-r;
183
			return [((r&0xffff)^0xffff)+1,(r>>16)^0xffff];
184
		}
185
		return [r&0xffff,(r>>16)];
186
	}
187
	function xor(x,y){
188
		var xs=split(x);
189
		var ys=split(y);
190
		return (0x10000*(xs[1]^ys[1]))+(xs[0]^ys[0]);
191
	}
192
	function $(v, box){
193
		var d=v&0xff; v>>=8;
194
		var c=v&0xff; v>>=8;
195
		var b=v&0xff; v>>=8;
196
		var a=v&0xff;
197
		var r=add(box.s0[a],box.s1[b]);
198
		r=xor(r,box.s2[c]);
199
		return add(r,box.s3[d]);
200
	}
201
////////////////////////////////////////////////////////////////////////////
202
	function eb(o, box){
203
		var l=o.left;
204
		var r=o.right;
205
		l=xor(l,box.p[0]);
206
		r=xor(r,xor($(l,box),box.p[1]));
207
		l=xor(l,xor($(r,box),box.p[2]));
208
		r=xor(r,xor($(l,box),box.p[3]));
209
		l=xor(l,xor($(r,box),box.p[4]));
210
		r=xor(r,xor($(l,box),box.p[5]));
211
		l=xor(l,xor($(r,box),box.p[6]));
212
		r=xor(r,xor($(l,box),box.p[7]));
213
		l=xor(l,xor($(r,box),box.p[8]));
214
		r=xor(r,xor($(l,box),box.p[9]));
215
		l=xor(l,xor($(r,box),box.p[10]));
216
		r=xor(r,xor($(l,box),box.p[11]));
217
		l=xor(l,xor($(r,box),box.p[12]));
218
		r=xor(r,xor($(l,box),box.p[13]));
219
		l=xor(l,xor($(r,box),box.p[14]));
220
		r=xor(r,xor($(l,box),box.p[15]));
221
		l=xor(l,xor($(r,box),box.p[16]));
222
		o.right=l;
223
		o.left=xor(r,box.p[17]);
224
	}
225
 
226
	function db(o, box){
227
		var l=o.left;
228
		var r=o.right;
229
		l=xor(l,box.p[17]);
230
		r=xor(r,xor($(l,box),box.p[16]));
231
		l=xor(l,xor($(r,box),box.p[15]));
232
		r=xor(r,xor($(l,box),box.p[14]));
233
		l=xor(l,xor($(r,box),box.p[13]));
234
		r=xor(r,xor($(l,box),box.p[12]));
235
		l=xor(l,xor($(r,box),box.p[11]));
236
		r=xor(r,xor($(l,box),box.p[10]));
237
		l=xor(l,xor($(r,box),box.p[9]));
238
		r=xor(r,xor($(l,box),box.p[8]));
239
		l=xor(l,xor($(r,box),box.p[7]));
240
		r=xor(r,xor($(l,box),box.p[6]));
241
		l=xor(l,xor($(r,box),box.p[5]));
242
		r=xor(r,xor($(l,box),box.p[4]));
243
		l=xor(l,xor($(r,box),box.p[3]));
244
		r=xor(r,xor($(l,box),box.p[2]));
245
		l=xor(l,xor($(r,box),box.p[1]));
246
		o.right=l;
247
		o.left=xor(r,box.p[0]);
248
	}
249
 
250
	//	Note that we aren't caching contexts here; it might take a little longer
251
	//	but we should be more secure this way.
252
	function init(key){
253
		var k=key;
254
		if (typeof(k)=="string"){
255
			var a=[];
256
			for(var i=0; i<k.length; i++)
257
				a.push(k.charCodeAt(i)&0xff);
258
			k=a;
259
		}
260
		//	init the boxes
261
		var box = { p:[], s0:[], s1:[], s2:[], s3:[] };
262
		for(var i=0; i<boxes.p.length; i++) box.p.push(boxes.p[i]);
263
		for(var i=0; i<boxes.s0.length; i++) box.s0.push(boxes.s0[i]);
264
		for(var i=0; i<boxes.s1.length; i++) box.s1.push(boxes.s1[i]);
265
		for(var i=0; i<boxes.s2.length; i++) box.s2.push(boxes.s2[i]);
266
		for(var i=0; i<boxes.s3.length; i++) box.s3.push(boxes.s3[i]);
267
 
268
		//	init p with the key
269
		var pos=0;
270
		var data=0;
271
		for(var i=0; i < box.p.length; i++){
272
			for (var j=0; j<4; j++){
273
				data = (data*POW8) | k[pos];
274
				if(++pos==k.length) pos=0;
275
			}
276
			box.p[i] = xor(box.p[i], data);
277
		}
278
 
279
		//	encrypt p and the s boxes
280
		var res={ left:0, right:0 };
281
		for(var i=0; i<box.p.length;){
282
			eb(res, box);
283
			box.p[i++]=res.left;
284
			box.p[i++]=res.right;
285
		}
286
		for (var i=0; i<4; i++){
287
			for(var j=0; j<box["s"+i].length;){
288
				eb(res, box);
289
				box["s"+i][j++]=res.left;
290
				box["s"+i][j++]=res.right;
291
			}
292
		}
293
		return box;
294
	}
295
 
296
////////////////////////////////////////////////////////////////////////////
297
//	CONVERSION FUNCTIONS
298
////////////////////////////////////////////////////////////////////////////
299
	//	these operate on byte arrays, NOT word arrays.
300
	function toBase64(ba){
301
		var p="=";
302
		var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
303
		var s=[];
304
		var l=ba.length;
305
		var rm=l%3;
306
		var x=l-rm;
307
		for (var i=0; i<x;){
308
			var t=ba[i++]<<16|ba[i++]<<8|ba[i++];
309
			s.push(tab.charAt((t>>>18)&0x3f));
310
			s.push(tab.charAt((t>>>12)&0x3f));
311
			s.push(tab.charAt((t>>>6)&0x3f));
312
			s.push(tab.charAt(t&0x3f));
313
		}
314
		//	deal with trailers, based on patch from Peter Wood.
315
		switch(rm){
316
			case 2:{
317
				var t=ba[i++]<<16|ba[i++]<<8;
318
				s.push(tab.charAt((t>>>18)&0x3f));
319
				s.push(tab.charAt((t>>>12)&0x3f));
320
				s.push(tab.charAt((t>>>6)&0x3f));
321
				s.push(p);
322
				break;
323
			}
324
			case 1:{
325
				var t=ba[i++]<<16;
326
				s.push(tab.charAt((t>>>18)&0x3f));
327
				s.push(tab.charAt((t>>>12)&0x3f));
328
				s.push(p);
329
				s.push(p);
330
				break;
331
			}
332
		}
333
		return s.join("");
334
	}
335
	function fromBase64(str){
336
		var s=str.split("");
337
		var p="=";
338
		var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
339
		var out=[];
340
		var l=s.length;
341
		while(s[--l]==p){ }
342
		for (var i=0; i<l;){
343
			var t=tab.indexOf(s[i++])<<18;
344
			if(i<=l){ t|=tab.indexOf(s[i++])<<12 };
345
			if(i<=l){ t|=tab.indexOf(s[i++])<<6 };
346
			if(i<=l){ t|=tab.indexOf(s[i++]) };
347
			out.push((t>>>16)&0xff);
348
			out.push((t>>>8)&0xff);
349
			out.push(t&0xff);
350
		}
351
		//	strip off any null bytes
352
		while(out[out.length-1]==0){ out.pop(); }
353
		return out;
354
	}
355
////////////////////////////////////////////////////////////////////////////
356
//	PUBLIC FUNCTIONS
357
//	0.2: Only supporting ECB mode for now.
358
////////////////////////////////////////////////////////////////////////////
359
	this.getIV=function(/* dojox.crypto.outputTypes? */ outputType){
360
		//	summary
361
		//	returns the initialization vector in the output format specified by outputType
362
		var out=outputType||dojox.crypto.outputTypes.Base64;
363
		switch(out){
364
			case dojox.crypto.outputTypes.Hex:{
365
				var s=[];
366
				for(var i=0; i<iv.length; i++)
367
					s.push((iv[i]).toString(16));
368
				return s.join("");		//	string
369
			}
370
			case dojox.crypto.outputTypes.String:{
371
				return iv.join("");		//	string
372
			}
373
			case dojox.crypto.outputTypes.Raw:{
374
				return iv;				//	array
375
			}
376
			default:{
377
				return toBase64(iv); 	//	 string
378
			}
379
		}
380
	};
381
	this.setIV=function(/* string */data, /* dojox.crypto.outputTypes? */inputType){
382
		//	summary
383
		//	sets the initialization vector to data (as interpreted as inputType)
384
		var ip=inputType||dojox.crypto.outputTypes.Base64;
385
		var ba=null;
386
		switch(ip){
387
			case dojox.crypto.outputTypes.String:{
388
				ba=[];
389
				for (var i=0; i<data.length; i++){
390
					ba.push(data.charCodeAt(i));
391
				}
392
				break;
393
			}
394
			case dojox.crypto.outputTypes.Hex:{
395
				ba=[];
396
				var i=0;
397
				while (i+1<data.length){
398
					ba.push(parseInt(data.substr(i,2),16));
399
					i+=2;
400
				}
401
				break;
402
			}
403
			case dojox.crypto.outputTypes.Raw:{
404
				ba=data;
405
				break;
406
			}
407
			default:{
408
				ba=fromBase64(data);
409
				break;
410
			}
411
		}
412
		//	make it a pair of words now
413
		iv={};
414
		iv.left=ba[0]*POW24|ba[1]*POW16|ba[2]*POW8|ba[3];
415
		iv.right=ba[4]*POW24|ba[5]*POW16|ba[6]*POW8|ba[7];
416
	}
417
	this.encrypt = function(/* string */plaintext, /* string */key, /* object? */ao){
418
		//	summary
419
		//	encrypts plaintext using key; allows user to specify output type and cipher mode via keyword object "ao"
420
		var out=dojox.crypto.outputTypes.Base64;
421
		var mode=dojox.crypto.cipherModes.EBC;
422
		if (ao){
423
			if (ao.outputType) out=ao.outputType;
424
			if (ao.cipherMode) mode=ao.cipherMode;
425
		}
426
 
427
		var bx = init(key);
428
		var padding = 8-(plaintext.length&7);
429
		for (var i=0; i<padding; i++) plaintext+=String.fromCharCode(padding);
430
		var cipher=[];
431
		var count=plaintext.length >> 3;
432
		var pos=0;
433
		var o={};
434
		var isCBC=(mode==dojox.crypto.cipherModes.CBC);
435
		var vector={left:iv.left||null, right:iv.right||null};
436
		for(var i=0; i<count; i++){
437
			o.left=plaintext.charCodeAt(pos)*POW24
438
				|plaintext.charCodeAt(pos+1)*POW16
439
				|plaintext.charCodeAt(pos+2)*POW8
440
				|plaintext.charCodeAt(pos+3);
441
			o.right=plaintext.charCodeAt(pos+4)*POW24
442
				|plaintext.charCodeAt(pos+5)*POW16
443
				|plaintext.charCodeAt(pos+6)*POW8
444
				|plaintext.charCodeAt(pos+7);
445
 
446
			if(isCBC){
447
				o.left=xor(o.left, vector.left);
448
				o.right=xor(o.right, vector.right);
449
			}
450
 
451
			eb(o, bx);	//	encrypt the block
452
 
453
			if(isCBC){
454
				vector.left=o.left;
455
				vector.right=o.right;dojox.crypto.outputTypes.Hex
456
			}
457
 
458
			cipher.push((o.left>>24)&0xff);
459
			cipher.push((o.left>>16)&0xff);
460
			cipher.push((o.left>>8)&0xff);
461
			cipher.push(o.left&0xff);
462
			cipher.push((o.right>>24)&0xff);
463
			cipher.push((o.right>>16)&0xff);
464
			cipher.push((o.right>>8)&0xff);
465
			cipher.push(o.right&0xff);
466
			pos+=8;
467
		}
468
		switch(out){
469
			case dojox.crypto.outputTypes.Hex:{
470
				var s=[];
471
				for(var i=0; i<cipher.length; i++)
472
					s.push((cipher[i]).toString(16));
473
				return s.join("");	//	string
474
			}
475
			case dojox.crypto.outputTypes.String:{
476
				return cipher.join("");	//	string
477
			}
478
			case dojox.crypto.outputTypes.Raw:{
479
				return cipher;	//	array
480
			}
481
			default:{
482
				return toBase64(cipher);	//	string
483
			}
484
		}
485
	};
486
 
487
	this.decrypt = function(/* string */ciphertext, /* string */key, /* object? */ao){
488
		//	summary
489
		//	decrypts ciphertext using key; allows specification of how ciphertext is encoded via ao.
490
		var ip=dojox.crypto.outputTypes.Base64;
491
		var mode=dojox.crypto.cipherModes.EBC;
492
		if (ao){
493
			if (ao.outputType) ip=ao.outputType;
494
			if (ao.cipherMode) mode=ao.cipherMode;
495
		}
496
		var bx = init(key);
497
		var pt=[];
498
 
499
		var c=null;
500
		switch(ip){
501
			case dojox.crypto.outputTypes.Hex:{
502
				c=[];
503
				var i=0;
504
				while (i+1<ciphertext.length){
505
					c.push(parseInt(ciphertext.substr(i,2),16));
506
					i+=2;
507
				}
508
				break;
509
			}
510
			case dojox.crypto.outputTypes.String:{
511
				c=[];
512
				for (var i=0; i<ciphertext.length; i++){
513
					c.push(ciphertext.charCodeAt(i));
514
				}
515
				break;
516
			}
517
			case dojox.crypto.outputTypes.Raw:{
518
				c=ciphertext;	//	should be a byte array
519
				break;
520
			}
521
			default:{
522
				c=fromBase64(ciphertext);
523
				break;
524
			}
525
		}
526
 
527
		var count=c.length >> 3;
528
		var pos=0;
529
		var o={};
530
		var isCBC=(mode==dojox.crypto.cipherModes.CBC);
531
		var vector={left:iv.left||null, right:iv.right||null};
532
		for(var i=0; i<count; i++){
533
			o.left=c[pos]*POW24|c[pos+1]*POW16|c[pos+2]*POW8|c[pos+3];
534
			o.right=c[pos+4]*POW24|c[pos+5]*POW16|c[pos+6]*POW8|c[pos+7];
535
 
536
			if(isCBC){
537
				var left=o.left;
538
				var right=o.right;
539
			}
540
 
541
			db(o, bx);	//	decrypt the block
542
 
543
			if(isCBC){
544
				o.left=xor(o.left, vector.left);
545
				o.right=xor(o.right, vector.right);
546
				vector.left=left;
547
				vector.right=right;
548
			}
549
 
550
			pt.push((o.left>>24)&0xff);
551
			pt.push((o.left>>16)&0xff);
552
			pt.push((o.left>>8)&0xff);
553
			pt.push(o.left&0xff);
554
			pt.push((o.right>>24)&0xff);
555
			pt.push((o.right>>16)&0xff);
556
			pt.push((o.right>>8)&0xff);
557
			pt.push(o.right&0xff);
558
			pos+=8;
559
		}
560
 
561
		//	check for padding, and remove.
562
		if(pt[pt.length-1]==pt[pt.length-2]||pt[pt.length-1]==0x01){
563
			var n=pt[pt.length-1];
564
			pt.splice(pt.length-n, n);
565
		}
566
 
567
		//	convert to string
568
		for(var i=0; i<pt.length; i++)
569
			pt[i]=String.fromCharCode(pt[i]);
570
		return pt.join("");		//	string
571
	};
572
 
573
	this.setIV("0000000000000000", dojox.crypto.outputTypes.Hex);
574
}();
575
 
576
}