úÎ!s¼mj2      !"#$%&'()*+,-./01?Hack into the internals of OpenSSL to add missing functionality(c) Eric Mertens, 2016ISCemertens@gmail.comNone #2hookupdAdd hostname checking to the certificate verification step. Partial wildcards matching is disabled.3hookupparam hookupname hookupnamelen hookup1 success, 0 failure 4hookupparam hookupflags 5hookupctx 2hookup hostname 2&SOCKS5 network protocol implementation(c) Eric Mertens, 2018ISCemertens@gmail.comNonee 6hookup;Server message used to indicate result of client's request.7hookupIClient message used to request a network operation from the SOCKS server.8hookup?Initial SOCKS sent by server with chosen authentication method.9hookupJInitial SOCKS sent by client with proposed list of authentication methods.:hookup%proposed methods (maximum length 255);hookup2Network host identified by address or domain name.<hookupIPv4 host address=hookupIPv6 host address>hookup Domain name (maximum length 255)?hookupNetwork host and port numberhookupSOCKS command reply codes@hookup/Tags used in the protocol messages for encoded ; valuesAhookupSOCKS client commandsBhookupSOCKS authentication methodsChookup Transform a D into a strict EFhookupƒBuild a list of buildable things prefixing the length of the list as a single byte. The list must not be longer than 255 elements.GhookupxParse a list of parsable things where the length of the list is encoded as a single byte before the items to be parsed.Hhookup Match a 16-bit, big-endian word.06IJK7LMN8OP9Q:;<=>?R ASTUBVWXYZ[\]^_`a2Network connections generalized over TLS and SOCKS(c) Eric Mertens, 2016ISCemertens@gmail.comNonekÂ) hookup­A connection to a network service along with its read buffer used for line-oriented protocols. The connection could be a plain network connection, SOCKS connected, or TLS. hookup3Type for errors that can be thrown by this package. hookupFailure during  getAddrInfo resolving remote hosthookupFailure during ) to remote hosthookupFailure during -hookupIncomplete line during -hookup4Socks command rejected by server by given reply codehookup,Socks authentication method was not acceptedhookup3Socks server sent an invalid message or no message.hookup+Domain name was too long for SOCKS protocolhookupcTLS connection parameters. These parameters are passed to OpenSSL when making a secure connection.hookupPath to client certificatehookupPath to client private keyhookupPath to CA certificate bundlehookup OpenSSL cipher suite name (e.g. "HIGH")hookup#Disables certificate checking when bhookupSOCKS connection parametershookupSOCKS server hosthookupSOCKS server port hookupParameters for ).Common defaults for fields: ', (ÿThe address family can be specified in order to force only IPv4 or IPv6 to be used. The default behavior is to support both. It can be useful to specify exactly one of these in the case that the other is misconfigured and a hostname is resolving to both.When a Q is provided the connection will be established using a SOCKS (version 5) proxy.When a Z is provided the connection negotiate TLS at connect time in order to protect the stream."hookupIP Protocol family (default  AF_UNSPEC)#hookupDestination host$hookupDestination TCP port%hookupOptional SOCKS parameters&hookupOptional TLS parameters'hookupDefault c5 value is unspecified and allows both INET and INET6.(hookupMDefault values for TLS that use no client certificates, use system CA root, "HIGH", cipher suite, and which validate hostnames.dhookupPOpen a socket using the given parameters either directly or via a SOCKS server.ehookupLTry establishing a connection to the services indicated by a given list of fY values. Either return a socket that has successfully connected to one of the candidate fs or throw a  / exception will all of the encountered errors.ghookupDCreate a socket and connect to the service identified by the given f! and return the connected socket.hhookupOpen a i using the parameters from an f)hookupJOpen network connection to TCP service specified by the given parameters.-The resulting connection MUST be closed with + to avoid leaking resources.Throws j, , k,  *hookup Create a new  Õ using an already connected socket. This will attempt to start TLS if configured but will ignore any SOCKS server settings as it is assumed that the socket is already actively connected to the intended service.Throws k+hookupClose network connection.,hookupÆReceive the next chunk from the stream. This operation will first return the buffer if it contains a non-empty chunk. Otherwise it will request up to the requested number of bytes from the stream.Throws: j, l, k-hookup2Receive a line from the network connection. Both "\r\n" and "\n" are recognized. Returning m< means that the peer has closed its half of the connection. Unterminated lines will raise a x exception. This can happen if the peer transmits some data and closes its end without transmitting a line terminator.Throws: l, k,  , j.hookupPush a E¡ onto the buffer so that it will be the first bytes to be read on the next receive operation. This could perhaps be useful for putting the unused portion of a ," back into the buffer for future - or , operations.nhookupRemove the trailing '\\r' if one is found./hookupSend bytes on the network connection. This ensures the whole chunk is transmitted, which might take multiple underlying sends.Throws: j, kohookupõInitiate a TLS session on the given socket destined for the given hostname. When successful an active TLS connection is returned with certificate verification successful when requested. This function requires that the TLSParams component of   is set.0hookupp" implemented for prettier messages ehookupaccumulated errors hookupcandidate AddrInfos hookupconnected socket qhookupparameters hookupsocket creation action hookupopen network handle )hookupparameters hookupopen connection *hookupparameters hookupconnected socket hookupopen connection +hookupopen connection ,hookupopen connection hookupmaximum underlying recv size hookupnext chunk from stream -hookupopen connection hookupmaximum line length hookupnext line or end-of-stream .hookupconnection hookupnew head of buffer /hookupopen connection hookupchunk ohookupconnection params hookuphostname hookupsocket creation action hookupconnected TLS rhookup insecure 0    !"#$%&'()*+,-./9 )*+,-/. !"#$%&'(    s       !"#$%&'()*+,-./0123456789:;<=>?@ABCDECFGHIJ5KL6MN7O8>PQRSTUVWXYZ[\]^_`abcdefbghijbcklmnopqoprlstuvlwxyz{#hookup-0.2.2-AFcVlNxxKYAGEiTLr5ZY9JHookupHookup.OpenSSL Hookup.Socks5 CommandReplyAddrNotSupportedCmdNotSupported TTLExpiredConnectionRefusedHostUnreachableNetUnreachable NotAllowedGeneralFailure Succeeded ConnectionConnectionFailureHostnameResolutionFailure LineTooLong LineTruncated SocksErrorSocksAuthenticationErrorSocksProtocolErrorSocksBadDomainName TlsParamstpClientCertificatetpClientPrivateKeytpServerCertificate tpCipherSuite tpInsecure SocksParamsspHostspPortConnectionParamscpFamilycpHostcpPortcpSockscpTls defaultFamilydefaultTlsParamsconnectconnectWithSocketcloserecvrecvLineputBufsend$fExceptionConnectionFailure$fShowConnectionFailureinstallVerificationx509VerifyParamSet1Hostx509VerifyParamSetHostflags sslGet0ParamResponseRequest ServerHello ClientHello cHelloMethodsHostIPv4IPv6 DomainNameAddressHostTagCommand AuthMethod runBuilderbytestring-0.10.8.2 Data.ByteString.Builder.InternalBuilderData.ByteString.Internal ByteString buildListOf parseListOf parseWord16BErspReply rspAddress reqCommand reqAddress sHelloMethodConnectBind UdpAssociateAuthNoAuthenticationRequired AuthGssApiAuthUsernamePasswordAuthNoAcceptableMethodsbuildClientHelloparseClientHellobuildServerHelloparseServerHello buildRequest parseRequest buildResponse parseResponseghc-prim GHC.TypesTrue&network-2.6.3.6-2g6VId0Xlc85XRtUcfQj0TNetwork.Socket.TypesFamily openSocketattemptConnectionsNetwork.SocketAddrInfoconnectToAddrInfosocket'SocketbaseGHC.IO.ExceptionIOError*HsOpenSSL-0.11.4.14-ILMNBoERVzO33BAAjW1SiuOpenSSL.Session ProtocolErrorConnectionAbruptlyTerminatedGHC.BaseNothingcleanEndstartTls GHC.ExceptiondisplayExceptionopenNetworkHandleverificationMode