diff options
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.as | 180 |
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(); + }); + } + } +} |