rocket-js 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. data/Rakefile +5 -52
  2. data/spec/ruby/spec_helper.rb +2 -1
  3. metadata +7 -129
  4. data/src/vendor/web-socket-js/FABridge.js +0 -604
  5. data/src/vendor/web-socket-js/README.txt +0 -109
  6. data/src/vendor/web-socket-js/WebSocketMain.swf +0 -0
  7. data/src/vendor/web-socket-js/WebSocketMainInsecure.zip +0 -0
  8. data/src/vendor/web-socket-js/flash-src/WebSocket.as +0 -473
  9. data/src/vendor/web-socket-js/flash-src/WebSocketMain.as +0 -88
  10. data/src/vendor/web-socket-js/flash-src/WebSocketMainInsecure.as +0 -19
  11. data/src/vendor/web-socket-js/flash-src/WebSocketStateEvent.as +0 -32
  12. data/src/vendor/web-socket-js/flash-src/bridge/FABridge.as +0 -943
  13. data/src/vendor/web-socket-js/flash-src/build.sh +0 -10
  14. data/src/vendor/web-socket-js/flash-src/com/adobe/net/proxies/RFC2817Socket.as +0 -204
  15. data/src/vendor/web-socket-js/flash-src/com/gsolo/encryption/MD5.as +0 -375
  16. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/Crypto.as +0 -287
  17. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/MozillaRootCertificates.as +0 -3235
  18. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509Certificate.as +0 -218
  19. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509CertificateCollection.as +0 -57
  20. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/HMAC.as +0 -82
  21. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHMAC.as +0 -27
  22. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHash.as +0 -21
  23. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MAC.as +0 -137
  24. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD2.as +0 -124
  25. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD5.as +0 -204
  26. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA1.as +0 -106
  27. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA224.as +0 -28
  28. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA256.as +0 -115
  29. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHABase.as +0 -71
  30. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/ARC4.as +0 -90
  31. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/IPRNG.as +0 -20
  32. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/Random.as +0 -119
  33. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/TLSPRF.as +0 -142
  34. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/rsa/RSAKey.as +0 -339
  35. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/AESKey.as +0 -2797
  36. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/BlowFishKey.as +0 -375
  37. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CBCMode.as +0 -55
  38. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFB8Mode.as +0 -61
  39. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFBMode.as +0 -64
  40. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CTRMode.as +0 -58
  41. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/DESKey.as +0 -365
  42. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ECBMode.as +0 -86
  43. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ICipher.as +0 -21
  44. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IMode.as +0 -15
  45. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IPad.as +0 -32
  46. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IStreamCipher.as +0 -21
  47. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ISymmetricKey.as +0 -35
  48. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as +0 -110
  49. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/NullPad.as +0 -34
  50. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/OFBMode.as +0 -52
  51. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/PKCS5.as +0 -44
  52. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SSLPad.as +0 -44
  53. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SimpleIVMode.as +0 -60
  54. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TLSPad.as +0 -42
  55. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TripleDESKey.as +0 -88
  56. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/XTeaKey.as +0 -94
  57. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/aeskey.pl +0 -29
  58. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/dump.txt +0 -2304
  59. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/AESKeyTest.as +0 -1220
  60. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ARC4Test.as +0 -58
  61. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BigIntegerTest.as +0 -39
  62. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BlowFishKeyTest.as +0 -148
  63. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CBCModeTest.as +0 -160
  64. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFB8ModeTest.as +0 -71
  65. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFBModeTest.as +0 -98
  66. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CTRModeTest.as +0 -109
  67. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/DESKeyTest.as +0 -112
  68. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ECBModeTest.as +0 -151
  69. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/HMACTest.as +0 -184
  70. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ITestHarness.as +0 -20
  71. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD2Test.as +0 -56
  72. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD5Test.as +0 -58
  73. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/OFBModeTest.as +0 -101
  74. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/RSAKeyTest.as +0 -92
  75. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA1Test.as +0 -198
  76. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA224Test.as +0 -58
  77. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA256Test.as +0 -60
  78. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TLSPRFTest.as +0 -51
  79. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TestCase.as +0 -42
  80. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TripleDESKeyTest.as +0 -59
  81. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/XTeaKeyTest.as +0 -66
  82. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/BulkCiphers.as +0 -102
  83. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/CipherSuites.as +0 -117
  84. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/IConnectionState.as +0 -14
  85. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/ISecurityParameters.as +0 -29
  86. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/KeyExchanges.as +0 -24
  87. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/MACs.as +0 -38
  88. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLConnectionState.as +0 -171
  89. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLEvent.as +0 -26
  90. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLSecurityParameters.as +0 -340
  91. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConfig.as +0 -70
  92. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConnectionState.as +0 -151
  93. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEngine.as +0 -895
  94. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSError.as +0 -39
  95. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEvent.as +0 -27
  96. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSecurityParameters.as +0 -197
  97. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocket.as +0 -370
  98. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocketEvent.as +0 -26
  99. data/src/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as +0 -180
  100. data/src/vendor/web-socket-js/flash-src/com/hurlant/math/BarrettReduction.as +0 -90
  101. data/src/vendor/web-socket-js/flash-src/com/hurlant/math/BigInteger.as +0 -1543
  102. data/src/vendor/web-socket-js/flash-src/com/hurlant/math/ClassicReduction.as +0 -35
  103. data/src/vendor/web-socket-js/flash-src/com/hurlant/math/IReduction.as +0 -11
  104. data/src/vendor/web-socket-js/flash-src/com/hurlant/math/MontgomeryReduction.as +0 -85
  105. data/src/vendor/web-socket-js/flash-src/com/hurlant/math/NullReduction.as +0 -34
  106. data/src/vendor/web-socket-js/flash-src/com/hurlant/math/bi_internal.as +0 -11
  107. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/ArrayUtil.as +0 -25
  108. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/Base64.as +0 -189
  109. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/Hex.as +0 -66
  110. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/Memory.as +0 -28
  111. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/ByteString.as +0 -43
  112. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/DER.as +0 -210
  113. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/IAsn1Type.as +0 -21
  114. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Integer.as +0 -44
  115. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/OID.as +0 -35
  116. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/ObjectIdentifier.as +0 -112
  117. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/PEM.as +0 -118
  118. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/PrintableString.as +0 -49
  119. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Sequence.as +0 -90
  120. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Set.as +0 -27
  121. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/Type.as +0 -94
  122. data/src/vendor/web-socket-js/flash-src/com/hurlant/util/der/UTCTime.as +0 -60
  123. data/src/vendor/web-socket-js/sample.html +0 -76
  124. data/src/vendor/web-socket-js/swfobject.js +0 -4
  125. data/src/vendor/web-socket-js/web_socket.js +0 -388
@@ -1,10 +0,0 @@
1
- #!/bin/sh
2
-
3
- # You need Flex 4 SDK:
4
- # http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4
5
-
6
- mxmlc -static-link-runtime-shared-libraries -output=../WebSocketMain.swf WebSocketMain.as &&
7
- mxmlc -static-link-runtime-shared-libraries -output=../WebSocketMainInsecure.swf WebSocketMainInsecure.as &&
8
- cd .. &&
9
- zip WebSocketMainInsecure.zip WebSocketMainInsecure.swf &&
10
- rm WebSocketMainInsecure.swf
@@ -1,204 +0,0 @@
1
- /*
2
- Adobe Systems Incorporated(r) Source Code License Agreement
3
- Copyright(c) 2005 Adobe Systems Incorporated. All rights reserved.
4
-
5
- Please read this Source Code License Agreement carefully before using
6
- the source code.
7
-
8
- Adobe Systems Incorporated grants to you a perpetual, worldwide, non-exclusive,
9
- no-charge, royalty-free, irrevocable copyright license, to reproduce,
10
- prepare derivative works of, publicly display, publicly perform, and
11
- distribute this source code and such derivative works in source or
12
- object code form without any attribution requirements.
13
-
14
- The name "Adobe Systems Incorporated" must not be used to endorse or promote products
15
- derived from the source code without prior written permission.
16
-
17
- You agree to indemnify, hold harmless and defend Adobe Systems Incorporated from and
18
- against any loss, damage, claims or lawsuits, including attorney's
19
- fees that arise or result from your use or distribution of the source
20
- code.
21
-
22
- THIS SOURCE CODE IS PROVIDED "AS IS" AND "WITH ALL FAULTS", WITHOUT
23
- ANY TECHNICAL SUPPORT OR ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
24
- BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
- FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ALSO, THERE IS NO WARRANTY OF
26
- NON-INFRINGEMENT, TITLE OR QUIET ENJOYMENT. IN NO EVENT SHALL MACROMEDIA
27
- OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
30
- OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
32
- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOURCE CODE, EVEN IF
33
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
- */
35
- package com.adobe.net.proxies
36
- {
37
- import flash.events.Event;
38
- import flash.events.IOErrorEvent;
39
- import flash.events.ProgressEvent;
40
- import flash.net.Socket;
41
-
42
- /**
43
- * This class allows TCP socket connections through HTTP proxies in accordance with
44
- * RFC 2817:
45
- *
46
- * ftp://ftp.rfc-editor.org/in-notes/rfc2817.txt
47
- *
48
- * It can also be used to make direct connections to a destination, as well. If you
49
- * pass the host and port into the constructor, no proxy will be used. You can also
50
- * call connect, passing in the host and the port, and if you didn't set the proxy
51
- * info, a direct connection will be made. A proxy is only used after you have called
52
- * the setProxyInfo function.
53
- *
54
- * The connection to and negotiation with the proxy is completely hidden. All the
55
- * same events are thrown whether you are using a proxy or not, and the data you
56
- * receive from the target server will look exact as it would if you were connected
57
- * to it directly rather than through a proxy.
58
- *
59
- * @author Christian Cantrell
60
- *
61
- **/
62
- public class RFC2817Socket
63
- extends Socket
64
- {
65
- private var proxyHost:String = null;
66
- private var host:String = null;
67
- private var proxyPort:int = 0;
68
- private var port:int = 0;
69
- private var deferredEventHandlers:Object = new Object();
70
- private var buffer:String = new String();
71
-
72
- /**
73
- * Construct a new RFC2817Socket object. If you pass in the host and the port,
74
- * no proxy will be used. If you want to use a proxy, instantiate with no
75
- * arguments, call setProxyInfo, then call connect.
76
- **/
77
- public function RFC2817Socket(host:String = null, port:int = 0)
78
- {
79
- if (host != null && port != 0)
80
- {
81
- super(host, port);
82
- }
83
- }
84
-
85
- /**
86
- * Set the proxy host and port number. Your connection will only proxied if
87
- * this function has been called.
88
- **/
89
- public function setProxyInfo(host:String, port:int):void
90
- {
91
- this.proxyHost = host;
92
- this.proxyPort = port;
93
-
94
- var deferredSocketDataHandler:Object = this.deferredEventHandlers[ProgressEvent.SOCKET_DATA];
95
- var deferredConnectHandler:Object = this.deferredEventHandlers[Event.CONNECT];
96
-
97
- if (deferredSocketDataHandler != null)
98
- {
99
- super.removeEventListener(ProgressEvent.SOCKET_DATA, deferredSocketDataHandler.listener, deferredSocketDataHandler.useCapture);
100
- }
101
-
102
- if (deferredConnectHandler != null)
103
- {
104
- super.removeEventListener(Event.CONNECT, deferredConnectHandler.listener, deferredConnectHandler.useCapture);
105
- }
106
- }
107
-
108
- /**
109
- * Connect to the specified host over the specified port. If you want your
110
- * connection proxied, call the setProxyInfo function first.
111
- **/
112
- public override function connect(host:String, port:int):void
113
- {
114
- if (this.proxyHost == null)
115
- {
116
- this.redirectConnectEvent();
117
- this.redirectSocketDataEvent();
118
- super.connect(host, port);
119
- }
120
- else
121
- {
122
- this.host = host;
123
- this.port = port;
124
- super.addEventListener(Event.CONNECT, this.onConnect);
125
- super.addEventListener(ProgressEvent.SOCKET_DATA, this.onSocketData);
126
- super.connect(this.proxyHost, this.proxyPort);
127
- }
128
- }
129
-
130
- private function onConnect(event:Event):void
131
- {
132
- this.writeUTFBytes("CONNECT "+this.host+":"+this.port+" HTTP/1.1\n\n");
133
- this.flush();
134
- this.redirectConnectEvent();
135
- }
136
-
137
- private function onSocketData(event:ProgressEvent):void
138
- {
139
- while (this.bytesAvailable != 0)
140
- {
141
- this.buffer += this.readUTFBytes(1);
142
- if (this.buffer.search(/\r?\n\r?\n$/) != -1)
143
- {
144
- this.checkResponse(event);
145
- break;
146
- }
147
- }
148
- }
149
-
150
- private function checkResponse(event:ProgressEvent):void
151
- {
152
- var responseCode:String = this.buffer.substr(this.buffer.indexOf(" ")+1, 3);
153
-
154
- if (responseCode.search(/^2/) == -1)
155
- {
156
- var ioError:IOErrorEvent = new IOErrorEvent(IOErrorEvent.IO_ERROR);
157
- ioError.text = "Error connecting to the proxy ["+this.proxyHost+"] on port ["+this.proxyPort+"]: " + this.buffer;
158
- this.dispatchEvent(ioError);
159
- }
160
- else
161
- {
162
- this.redirectSocketDataEvent();
163
- this.dispatchEvent(new Event(Event.CONNECT));
164
- if (this.bytesAvailable > 0)
165
- {
166
- this.dispatchEvent(event);
167
- }
168
- }
169
- this.buffer = null;
170
- }
171
-
172
- private function redirectConnectEvent():void
173
- {
174
- super.removeEventListener(Event.CONNECT, onConnect);
175
- var deferredEventHandler:Object = this.deferredEventHandlers[Event.CONNECT];
176
- if (deferredEventHandler != null)
177
- {
178
- super.addEventListener(Event.CONNECT, deferredEventHandler.listener, deferredEventHandler.useCapture, deferredEventHandler.priority, deferredEventHandler.useWeakReference);
179
- }
180
- }
181
-
182
- private function redirectSocketDataEvent():void
183
- {
184
- super.removeEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
185
- var deferredEventHandler:Object = this.deferredEventHandlers[ProgressEvent.SOCKET_DATA];
186
- if (deferredEventHandler != null)
187
- {
188
- super.addEventListener(ProgressEvent.SOCKET_DATA, deferredEventHandler.listener, deferredEventHandler.useCapture, deferredEventHandler.priority, deferredEventHandler.useWeakReference);
189
- }
190
- }
191
-
192
- public override function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int=0.0, useWeakReference:Boolean=false):void
193
- {
194
- if (type == Event.CONNECT || type == ProgressEvent.SOCKET_DATA)
195
- {
196
- this.deferredEventHandlers[type] = {listener:listener,useCapture:useCapture, priority:priority, useWeakReference:useWeakReference};
197
- }
198
- else
199
- {
200
- super.addEventListener(type, listener, useCapture, priority, useWeakReference);
201
- }
202
- }
203
- }
204
- }
@@ -1,375 +0,0 @@
1
- package com.gsolo.encryption {
2
- public class MD5 {
3
- /*
4
- * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
5
- * Digest Algorithm, as defined in RFC 1321.
6
- * Version 2.2-alpha Copyright (C) Paul Johnston 1999 - 2005
7
- * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8
- * Distributed under the BSD License
9
- * See http://pajhome.org.uk/crypt/md5 for more info.
10
- *
11
- * Converted to AS3 By Geoffrey Williams
12
- */
13
-
14
- /*
15
- * Configurable variables. You may need to tweak these to be compatible with
16
- * the server-side, but the defaults work in most cases.
17
- */
18
-
19
- public static const HEX_FORMAT_LOWERCASE:uint = 0;
20
- public static const HEX_FORMAT_UPPERCASE:uint = 1;
21
-
22
- public static const BASE64_PAD_CHARACTER_DEFAULT_COMPLIANCE:String = "";
23
- public static const BASE64_PAD_CHARACTER_RFC_COMPLIANCE:String = "=";
24
-
25
- public static var hexcase:uint = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
26
- public static var b64pad:String = ""; /* base-64 pad character. "=" for strict RFC compliance */
27
-
28
- public static function encrypt (string:String):String {
29
- return hex_md5 (string);
30
- }
31
-
32
- /*
33
- * These are the functions you'll usually want to call
34
- * They take string arguments and return either hex or base-64 encoded strings
35
- */
36
- public static function hex_md5 (string:String):String {
37
- return rstr2hex (rstr_md5 (str2rstr_utf8 (string)));
38
- }
39
-
40
- public static function b64_md5 (string:String):String {
41
- return rstr2b64 (rstr_md5 (str2rstr_utf8 (string)));
42
- }
43
-
44
- public static function any_md5 (string:String, encoding:String):String {
45
- return rstr2any (rstr_md5 (str2rstr_utf8 (string)), encoding);
46
- }
47
- public static function hex_hmac_md5 (key:String, data:String):String {
48
- return rstr2hex (rstr_hmac_md5 (str2rstr_utf8 (key), str2rstr_utf8 (data)));
49
- }
50
- public static function b64_hmac_md5 (key:String, data:String):String {
51
- return rstr2b64 (rstr_hmac_md5 (str2rstr_utf8 (key), str2rstr_utf8 (data)));
52
- }
53
- public static function any_hmac_md5 (key:String, data:String, encoding:String):String {
54
- return rstr2any(rstr_hmac_md5(str2rstr_utf8(key), str2rstr_utf8(data)), encoding);
55
- }
56
-
57
- /*
58
- * Perform a simple self-test to see if the VM is working
59
- */
60
- public static function md5_vm_test ():Boolean {
61
- return hex_md5 ("abc") == "900150983cd24fb0d6963f7d28e17f72";
62
- }
63
-
64
- /*
65
- * Calculate the MD5 of a raw string
66
- */
67
- public static function rstr_md5 (string:String):String {
68
- return binl2rstr (binl_md5 (rstr2binl (string), string.length * 8));
69
- }
70
-
71
- /*
72
- * Calculate the HMAC-MD5, of a key and some data (raw strings)
73
- */
74
- public static function rstr_hmac_md5 (key:String, data:String):String {
75
- var bkey:Array = rstr2binl (key);
76
- if (bkey.length > 16) bkey = binl_md5 (bkey, key.length * 8);
77
-
78
- var ipad:Array = new Array(16), opad:Array = new Array(16);
79
- for(var i:Number = 0; i < 16; i++) {
80
- ipad[i] = bkey[i] ^ 0x36363636;
81
- opad[i] = bkey[i] ^ 0x5C5C5C5C;
82
- }
83
-
84
- var hash:Array = binl_md5 (ipad.concat (rstr2binl (data)), 512 + data.length * 8);
85
- return binl2rstr (binl_md5 (opad.concat (hash), 512 + 128));
86
- }
87
-
88
- /*
89
- * Convert a raw string to a hex string
90
- */
91
- public static function rstr2hex (input:String):String {
92
- var hex_tab:String = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
93
- var output:String = "";
94
- var x:Number;
95
- for(var i:Number = 0; i < input.length; i++) {
96
- x = input.charCodeAt(i);
97
- output += hex_tab.charAt((x >>> 4) & 0x0F)
98
- + hex_tab.charAt( x & 0x0F);
99
- }
100
- return output;
101
- }
102
-
103
- /*
104
- * Convert a raw string to a base-64 string
105
- */
106
- public static function rstr2b64 (input:String):String {
107
- var tab:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
108
- var output:String = "";
109
- var len:Number = input.length;
110
- for(var i:Number = 0; i < len; i += 3) {
111
- var triplet:Number = (input.charCodeAt(i) << 16)
112
- | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0)
113
- | (i + 2 < len ? input.charCodeAt(i+2) : 0);
114
- for(var j:Number = 0; j < 4; j++) {
115
- if(i * 8 + j * 6 > input.length * 8) output += b64pad;
116
- else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F);
117
- }
118
- }
119
- return output;
120
- }
121
-
122
- /*
123
- * Convert a raw string to an arbitrary string encoding
124
- */
125
- public static function rstr2any(input:String, encoding:String):String {
126
- var divisor:Number = encoding.length;
127
- var remainders:Array = [];
128
- var i:Number, q:Number, x:Number, quotient:Array;
129
-
130
- /* Convert to an array of 16-bit big-endian values, forming the dividend */
131
- var dividend:Array = new Array(input.length / 2);
132
- for(i = 0; i < dividend.length; i++) {
133
- dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
134
- }
135
-
136
- /*
137
- * Repeatedly perform a long division. The binary array forms the dividend,
138
- * the length of the encoding is the divisor. Once computed, the quotient
139
- * forms the dividend for the next step. We stop when the dividend is zero.
140
- * All remainders are stored for later use.
141
- */
142
- while(dividend.length > 0) {
143
- quotient = [];
144
- x = 0;
145
- for(i = 0; i < dividend.length; i++) {
146
- x = (x << 16) + dividend[i];
147
- q = Math.floor(x / divisor);
148
- x -= q * divisor;
149
- if(quotient.length > 0 || q > 0)
150
- quotient[quotient.length] = q;
151
- }
152
- remainders[remainders.length] = x;
153
- dividend = quotient;
154
- }
155
-
156
- /* Convert the remainders to the output string */
157
- var output:String = "";
158
- for(i = remainders.length - 1; i >= 0; i--)
159
- output += encoding.charAt (remainders[i]);
160
-
161
- return output;
162
- }
163
-
164
- /*
165
- * Encode a string as utf-8.
166
- * For efficiency, this assumes the input is valid utf-16.
167
- */
168
- public static function str2rstr_utf8 (input:String):String {
169
- var output:String = "";
170
- var i:Number = -1;
171
- var x:Number, y:Number;
172
-
173
- while(++i < input.length) {
174
- /* Decode utf-16 surrogate pairs */
175
- x = input.charCodeAt(i);
176
- y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;
177
- if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) {
178
- x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
179
- i++;
180
- }
181
-
182
- /* Encode output as utf-8 */
183
- if(x <= 0x7F)
184
- output += String.fromCharCode(x);
185
- else if(x <= 0x7FF)
186
- output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F),
187
- 0x80 | ( x & 0x3F));
188
- else if(x <= 0xFFFF)
189
- output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
190
- 0x80 | ((x >>> 6 ) & 0x3F),
191
- 0x80 | ( x & 0x3F));
192
- else if(x <= 0x1FFFFF)
193
- output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
194
- 0x80 | ((x >>> 12) & 0x3F),
195
- 0x80 | ((x >>> 6 ) & 0x3F),
196
- 0x80 | ( x & 0x3F));
197
- }
198
- return output;
199
- }
200
-
201
- /*
202
- * Encode a string as utf-16
203
- */
204
- public static function str2rstr_utf16le (input:String):String {
205
- var output:String = "";
206
- for(var i:Number = 0; i < input.length; i++)
207
- output += String.fromCharCode( input.charCodeAt(i) & 0xFF,
208
- (input.charCodeAt(i) >>> 8) & 0xFF);
209
- return output;
210
- }
211
-
212
- public static function str2rstr_utf16be (input:String):String {
213
- var output:String = "";
214
- for(var i:Number = 0; i < input.length; i++)
215
- output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF,
216
- input.charCodeAt(i) & 0xFF);
217
- return output;
218
- }
219
-
220
- /*
221
- * Convert a raw string to an array of little-endian words
222
- * Characters >255 have their high-byte silently ignored.
223
- */
224
- public static function rstr2binl (input:String):Array {
225
- var output:Array = new Array(input.length >> 2);
226
- for(var i:Number = 0; i < output.length; i++)
227
- output[i] = 0;
228
- for(i = 0; i < input.length * 8; i += 8)
229
- output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32);
230
- return output;
231
- }
232
-
233
- /*
234
- * Convert an array of little-endian words to a string
235
- */
236
- public static function binl2rstr (input:Array):String {
237
- var output:String = "";
238
- for(var i:Number = 0; i < input.length * 32; i += 8)
239
- output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF);
240
- return output;
241
- }
242
-
243
- /*
244
- * Calculate the MD5 of an array of little-endian words, and a bit length.
245
- */
246
- public static function binl_md5 (x:Array, len:Number):Array {
247
- /* append padding */
248
- x[len >> 5] |= 0x80 << ((len) % 32);
249
- x[(((len + 64) >>> 9) << 4) + 14] = len;
250
-
251
- var a:Number = 1732584193;
252
- var b:Number = -271733879;
253
- var c:Number = -1732584194;
254
- var d:Number = 271733878;
255
-
256
- for(var i:Number = 0; i < x.length; i += 16) {
257
- var olda:Number = a;
258
- var oldb:Number = b;
259
- var oldc:Number = c;
260
- var oldd:Number = d;
261
-
262
- a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
263
- d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
264
- c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
265
- b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
266
- a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
267
- d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
268
- c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
269
- b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
270
- a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
271
- d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
272
- c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
273
- b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
274
- a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
275
- d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
276
- c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
277
- b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
278
-
279
- a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
280
- d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
281
- c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
282
- b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
283
- a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
284
- d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
285
- c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
286
- b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
287
- a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
288
- d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
289
- c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
290
- b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
291
- a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
292
- d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
293
- c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
294
- b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
295
-
296
- a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
297
- d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
298
- c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
299
- b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
300
- a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
301
- d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
302
- c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
303
- b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
304
- a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
305
- d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
306
- c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
307
- b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
308
- a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
309
- d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
310
- c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
311
- b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
312
-
313
- a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
314
- d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
315
- c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
316
- b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
317
- a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
318
- d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
319
- c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
320
- b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
321
- a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
322
- d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
323
- c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
324
- b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
325
- a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
326
- d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
327
- c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
328
- b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
329
-
330
- a = safe_add(a, olda);
331
- b = safe_add(b, oldb);
332
- c = safe_add(c, oldc);
333
- d = safe_add(d, oldd);
334
- }
335
- return [a, b, c, d];
336
- }
337
-
338
- /*
339
- * These functions implement the four basic operations the algorithm uses.
340
- */
341
- public static function md5_cmn (q:Number, a:Number, b:Number, x:Number, s:Number, t:Number):Number {
342
- return safe_add (bit_rol (safe_add (safe_add (a, q), safe_add(x, t)), s), b);
343
- }
344
- public static function md5_ff (a:Number, b:Number, c:Number, d:Number, x:Number, s:Number, t:Number):Number {
345
- return md5_cmn ((b & c) | ((~b) & d), a, b, x, s, t);
346
- }
347
- public static function md5_gg (a:Number, b:Number, c:Number, d:Number, x:Number, s:Number, t:Number):Number {
348
- return md5_cmn ((b & d) | (c & (~d)), a, b, x, s, t);
349
- }
350
- public static function md5_hh (a:Number, b:Number, c:Number, d:Number, x:Number, s:Number, t:Number):Number {
351
- return md5_cmn (b ^ c ^ d, a, b, x, s, t);
352
- }
353
- public static function md5_ii (a:Number, b:Number, c:Number, d:Number, x:Number, s:Number, t:Number):Number {
354
- return md5_cmn (c ^ (b | (~d)), a, b, x, s, t);
355
- }
356
-
357
- /*
358
- * Add integers, wrapping at 2^32. This uses 16-bit operations internally
359
- * to work around bugs in some JS interpreters.
360
- */
361
- public static function safe_add (x:Number, y:Number):Number {
362
- var lsw:Number = (x & 0xFFFF) + (y & 0xFFFF);
363
- var msw:Number = (x >> 16) + (y >> 16) + (lsw >> 16);
364
- return (msw << 16) | (lsw & 0xFFFF);
365
- }
366
-
367
- /*
368
- * Bitwise rotate a 32-bit number to the left.
369
- */
370
- public static function bit_rol (num:Number, cnt:Number):Number {
371
- return (num << cnt) | (num >>> (32 - cnt));
372
- }
373
-
374
- }
375
- }