aboutsummaryrefslogtreecommitdiffstats
path: root/signaling-server/node_modules/socket.io/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as
diff options
context:
space:
mode:
Diffstat (limited to 'signaling-server/node_modules/socket.io/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as')
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as180
1 files changed, 180 insertions, 0 deletions
diff --git a/signaling-server/node_modules/socket.io/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as b/signaling-server/node_modules/socket.io/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as
new file mode 100644
index 0000000..d7c70f3
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as
@@ -0,0 +1,180 @@
+/**
+ * TLSTest
+ *
+ * A test class for TLS. Not a finished product.
+ * Copyright (c) 2007 Henri Torgemane
+ *
+ * See LICENSE.txt for full license information.
+ */
+package com.hurlant.crypto.tls {
+ import com.hurlant.crypto.cert.X509Certificate;
+ import com.hurlant.crypto.cert.X509CertificateCollection;
+ import com.hurlant.util.Hex;
+ import com.hurlant.util.der.PEM;
+
+ import flash.events.Event;
+ import flash.events.ProgressEvent;
+ import flash.net.Socket;
+ import flash.utils.ByteArray;
+ import flash.utils.getTimer;
+
+ public class TLSTest {
+
+
+ public var myDebugData:String;
+
+ //[Embed(source="/src/host.cert",mimeType="application/octet-stream")]
+ public var myCert:Class;
+ //[Embed(source="/src/host.key",mimeType="application/octet-stream")]
+ public var myKey:Class;
+
+ public function TLSTest(host:String = null, port:int = 0, type:int = 0 ) {
+ //loopback();
+ if (host != null) {
+ if (type == 0) { // SSL 3.0
+ connectLoginYahooCom();
+ // connectLocalSSL(host, port);
+ } else {
+ connectLocalTLS(host, port);
+ }
+ } else {
+ testSocket();
+ }
+ }
+
+ public function connectLoginYahooCom():void {
+ trace("Connecting test socket");
+ var s:Socket = new Socket("esx.bluebearllc.net", 903);
+
+ var clientConfig:TLSConfig = new TLSConfig(TLSEngine.CLIENT,
+ null,
+ null,
+ null,
+ null,
+ null,
+ SSLSecurityParameters.PROTOCOL_VERSION);
+
+ var client:TLSEngine = new TLSEngine(clientConfig, s, s);
+ // hook some events.
+ s.addEventListener(ProgressEvent.SOCKET_DATA, client.dataAvailable);
+ client.addEventListener(ProgressEvent.SOCKET_DATA, function(e:*):void { s.flush(); });
+ client.start();
+
+ }
+ public function connectLocalTLS(host:String, port:int):void {
+ var s:Socket = new Socket(host, port);
+
+ var clientConfig:TLSConfig = new TLSConfig(TLSEngine.CLIENT);
+
+ var client:TLSEngine = new TLSEngine(clientConfig, s, s);
+ // hook some events.
+ s.addEventListener(ProgressEvent.SOCKET_DATA, client.dataAvailable);
+ client.addEventListener(ProgressEvent.SOCKET_DATA, function(e:*):void { s.flush(); });
+
+ client.start();
+
+ }
+ public function connectLocalSSL(host:String, port:int):void {
+ var s:Socket = new Socket(host, port);
+
+ var clientConfig:TLSConfig = new TLSConfig(TLSEngine.CLIENT,
+ null,
+ null,
+ null,
+ null,
+ null,
+ SSLSecurityParameters.PROTOCOL_VERSION);
+
+ var client:TLSEngine = new TLSEngine(clientConfig, s, s);
+ // hook some events.
+ s.addEventListener(ProgressEvent.SOCKET_DATA, client.dataAvailable);
+ client.addEventListener(ProgressEvent.SOCKET_DATA, function(e:*):void { s.flush(); });
+
+ client.start();
+ }
+
+ public function loopback():void {
+
+ var server_write:ByteArray = new ByteArray;
+ var client_write:ByteArray = new ByteArray;
+ var server_write_cursor:uint = 0;
+ var client_write_cursor:uint = 0;
+
+ var clientConfig:TLSConfig = new TLSConfig(TLSEngine.CLIENT, null, null, null, null, null, SSLSecurityParameters.PROTOCOL_VERSION);
+ var serverConfig:TLSConfig = new TLSConfig(TLSEngine.SERVER, null, null, null, null, null, SSLSecurityParameters.PROTOCOL_VERSION);
+
+
+ var cert:ByteArray = new myCert;
+ var key:ByteArray = new myKey;
+ serverConfig.setPEMCertificate(cert.readUTFBytes(cert.length), key.readUTFBytes(key.length));
+ // tmp, for debugging. currently useless
+ cert.position = 0;
+ key.position = 0;
+ clientConfig.setPEMCertificate(cert.readUTFBytes(cert.length), key.readUTFBytes(key.length));
+ // put the server cert in the client's trusted store, to keep things happy.
+ clientConfig.CAStore = new X509CertificateCollection;
+ cert.position = 0;
+ var x509:X509Certificate = new X509Certificate(PEM.readCertIntoArray(cert.readUTFBytes(cert.length)));
+ clientConfig.CAStore.addCertificate(x509);
+
+
+ var server:TLSEngine = new TLSEngine(serverConfig, client_write, server_write);
+ var client:TLSEngine = new TLSEngine(clientConfig, server_write, client_write);
+
+ server.addEventListener(ProgressEvent.SOCKET_DATA, function(e:*=null):void {
+ trace("server wrote something!");
+ trace(Hex.fromArray(server_write));
+ var l:uint = server_write.position;
+ server_write.position = server_write_cursor;
+ client.dataAvailable(e);
+ server_write.position = l;
+ server_write_cursor = l;
+ });
+ client.addEventListener(ProgressEvent.SOCKET_DATA, function(e:*=null):void {
+ trace("client wrote something!");
+ trace(Hex.fromArray(client_write));
+ var l:uint = client_write.position;
+ client_write.position = client_write_cursor;
+ server.dataAvailable(e);
+ client_write.position = l;
+ client_write_cursor = l;
+ });
+
+ server.start();
+ client.start();
+ }
+
+ public function testSocket():void {
+ var hosts:Array = [
+ "bugs.adobe.com", // apache
+ "login.yahoo.com", // apache, bigger response
+ "login.live.com", // IIS-6, chain of 3 certs
+ "banking.wellsfargo.com", // custom, sends its CA cert along for the ride.
+ "www.bankofamerica.com" // sun-one, chain of 3 certs
+ ];
+ var i:int =0;
+ (function next():void {
+ testHost(hosts[i++], next);
+ })();
+ }
+
+ private function testHost(host:String, next:Function):void {
+ if (host==null) return;
+ var t1:int = getTimer();
+
+ var host:String = host;
+ var t:TLSSocket = new TLSSocket;
+ t.connect(host, 4433);
+ t.writeUTFBytes("GET / HTTP/1.0\nHost: "+host+"\n\n");
+ t.addEventListener(Event.CLOSE, function(e:*):void {
+ var s:String = t.readUTFBytes(t.bytesAvailable);
+ trace("Response from "+host+": "+s.length+" characters");
+ var bytes:ByteArray = new ByteArray();
+ t.readBytes(bytes, 0, t.bytesAvailable);
+ trace(Hex.fromArray(bytes));
+ trace("Time used = "+(getTimer()-t1)+"ms");
+ next();
+ });
+ }
+ }
+}