Îõ³h&*ª'(×      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV7Concurrently run actions until one succeeds or all fail(c) Eric Mertens, 2020ISCemertens@gmail.com Safe-Inferred-Üã®Whookup-Main event loop for concurrent attempt systemXhookupÒNo threads are active, either start a new thread or return the complete error listYhookup(Start a new thread for the given attemptZhookup7Create an STM action that only succeeds after at least n microseconds have passed.[hookup#microsecond delay between attempts hookuprelease unneeded success hookupordered list of attempts [?Hack into the internals of OpenSSL to add missing functionality(c) Eric Mertens, 2016ISCemertens@gmail.com Safe-Inferred hookupäAdd hostname checking to the certificate verification step. Partial wildcards matching is disabled. hookup?Set the ciphers to be used by the given context for TLS 1.3 Çhttps://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_cipher_list.htmlèUnrecognised ciphers are ignored. If no ciphers from the list are recognised, an exception is raised.\hookupparam hookupIP address as string hookup1 success, 0 failure ]hookupparam hookupname hookupnamelen hookup1 success, 0 failure ^hookupparam hookupflags _hookupctx hookup hostname   &SOCKS5 network protocol implementation(c) Eric Mertens, 2018ISCemertens@gmail.com Safe-Inferredë Ä`hookup;Server message used to indicate result of client's request.ahookupÉClient message used to request a network operation from the SOCKS server.bhookup?Initial SOCKS sent by server with chosen authentication method.chookupÊInitial SOCKS sent by client with proposed list of authentication methods.dhookup%proposed methods (maximum length 255)ehookup(Plaintext username and password responsefhookup0 for success, failure otherwiseghookup'Plaintext username and password requesthhookupusernameihookuppasswordjhookup2Network host identified by address or domain name.khookupIPv4 host addresslhookupIPv6 host addressmhookup Domain name (maximum length 255)nhookupNetwork host and port number hookupSOCKS command reply codesohookup/Tags used in the protocol messages for encoded j valuesphookupSOCKS client commandsqhookupSOCKS authentication methodsrhookup Transform a s into a strict tuhookupƒ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.vhookupøParse a list of parsable things where the length of the list is encoded as a single byte before the items to be parsed.whookup Match a 16-bit, big-endian word.;`xyza{|}b~c€defg‚hijklmnƒ  p„…†q‡ˆ‰Š‹ŒŽ‘’“”•–2Network connections generalized over TLS and SOCKS(c) Eric Mertens, 2016ISCemertens@gmail.com Safe-Inferred-ã&…6hookup­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 BhookupIncomplete line during Bhookup4Socks command rejected by server by given reply codehookup,Socks authentication method was not acceptedhookup,Socks authentication method was not acceptedhookup"Username or password were too longhookup3Socks server sent an invalid message or no message. hookup+Domain name was too long for SOCKS protocol"hookup%Use the connection hostname to verify#hookupNo verification$hookup Use the given hostname to verify%hookupãTLS connection parameters. These parameters are passed to OpenSSL when making a secure connection.'hookupPath to client certificate(hookupPath to client private key)hookupPrivate key decryption password*hookupPath to CA certificate bundle+hookup OpenSSL cipher suite name (e.g. "HIGH"),hookup!OpenSSL cipher suites for TLS 1.3-hookup2Hostname to use when checking certificate validity/hookupno credentials0hookupRFC 1929 username and password1hookupSOCKS connection parameters3hookupSOCKS server host4hookupSOCKS server port5hookupSOCKS authentication method6hookupParameters for >.Common defaults for fields:  defaultFamily, =When a 1Ñ is provided the connection will be established using a SOCKS (version 5) proxy.When a %Ú is provided the connection negotiate TLS at connect time in order to protect the stream.ìThe binding hostname can be used to force the connect to use a particular interface or IP protocol version.8hookupDestination host9hookupDestination TCP port:hookupOptional SOCKS parameters;hookupOptional TLS parameters<hookupSource address to bind=hookupÍDefault values for TLS that use no client certificates, use system CA root, "HIGH", cipher suite, and which validate hostnames.—hookupÐOpen a socket using the given parameters either directly or via a SOCKS server.˜hookupðWhen no bind address is specified return the full list of destination addresses with no bind address specified.¥When bind addresses are specified return a subset of the destination list matched up with the first address from the bind list that has the correct address family.™hookupÄAlternate list of addresses between IPv6 and other (IPv4) addresses.šhookupÄCreate a socket and connect to the service identified by the given ›! and return the connected socket.œhookup A version of œ that doesn't bother binding on the wildcard address. The effect of binding on a wildcard address in this library is to pick an address family. Because of the matching done earlier this is unnecessary for client connections and causes a local port to be unnecessarily fixed early.žhookupOpen a Ÿ using the parameters from an ›>hookupÊOpen network connection to TCP service specified by the given parameters.-The resulting connection MUST be closed with @ to avoid leaking resources.Throws  , , ¡, ?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 ¡@hookupClose network connection.AhookupÆ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:  , ¢, ¡Bhookup2Receive a line from the network connection. Both "\r\n" and "\n" are recognized. Returning £< means that the peer has closed its half of the connection. Unterminated lines will raise a ø exception. This can happen if the peer transmits some data and closes its end without transmitting a line terminator.Throws: ¢, ¡, ,  ChookupPush a t¡ 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 A" back into the buffer for future B or A operations.¤hookupRemove the trailing '\r' if one is found.DhookupÿSend bytes on the network connection. This ensures the whole chunk is transmitted, which might take multiple underlying sends.Throws:  , ¡¥hookupõ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 6 is set.Fhookup#Get peer certificate if one exists.Ghookup#Get peer certificate if one exists.Ohookup¦" implemented for prettier messages §hookupdestination hookupdestination port hookupsource hookupconnected socket ¨hookupparameters hookupsocket creation action hookupopen network handle >hookupparameters hookupopen connection ?hookupparameters hookupconnected socket hookupopen connection @hookupopen connection Ahookupopen connection hookupmaximum underlying recv size hookupnext chunk from stream Bhookupopen connection hookupmaximum line length hookupnext line or end-of-stream Chookupconnection hookupnew head of buffer Dhookupopen connection hookupchunk Ehookupconnection params hookup hostname ¥hookupconnection params hookuphostname hookupsocket creation action hookup$(client certificate, connected TLS) Ê   !#"$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMÓ>?@EABDC6789:;<12345./0%&'()*+,-!#"$=   GFHIJKLM©      !"#$%&'()**+,-./012345567899:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwuxyz{|b}~c€degip‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œ™žŸ ¡¢£¤¥¤¦¡§¨©ª¡«¬­®¯!hookup-0.8-2wbtOKZuMmkCbB4dscCt1vHookupHookup.OpenSSLHookup.Concurrent Hookup.Socks5)HsOpenSSL-0.11.7.6-1WPCV2dWPbnFqcbmrF4aDN OpenSSL.PEMPwTTY PwCallbackPwBSPwStrPwNonePemPasswordSupplywithDefaultPassword getPubKeyDerinstallVerificationcontextSetTls13Ciphers CommandReplyAddrNotSupportedCmdNotSupported TTLExpiredConnectionRefusedHostUnreachableNetUnreachable NotAllowedGeneralFailure Succeeded ConnectionConnectionFailureHostnameResolutionFailure LineTooLong LineTruncated SocksError!SocksAuthenticationMethodRejected&SocksAuthenticationCredentialsRejected!SocksBadAuthenticationCredentialsSocksProtocolErrorSocksBadDomainName TlsVerify VerifyDefault VerifyNoneVerifyHostname TlsParamstpClientCertificatetpClientPrivateKeytpClientPrivateKeyPasswordtpServerCertificate tpCipherSuitetpCipherSuiteTls13tpVerifySocksAuthenticationNoSocksAuthentication#UsernamePasswordSocksAuthentication SocksParamsspHostspPortspAuthConnectionParamscpHostcpPortcpSockscpTlscpBinddefaultTlsParamsconnectconnectWithSocketcloserecvrecvLineputBufsend upgradeTlsgetPeerCertificategetClientCertificategetPeerCertFingerprintSha1getPeerCertFingerprintSha256getPeerCertFingerprintSha512getPeerPubkeyFingerprintSha1getPeerPubkeyFingerprintSha256getPeerPubkeyFingerprintSha512$fExceptionConnectError$fExceptionConnectionFailure$fShowConnectionFailure$fShowConnectError$fShowConnectionParams$fShowTlsParams$fShowTlsVerify$fShowSocksParams$fShowSocksAuthenticationloopnothingRunningstart startTimerconcurrentAttemptsx509VerifyParamSet1IpAscx509VerifyParamSet1Hostx509VerifyParamSetHostflags sslGet0ParamResponseRequest ServerHello ClientHello cHelloMethodsPlainAuthenticationReply plainStatusPlainAuthentication plainUsername plainPasswordHostIPv4IPv6 DomainNameAddressHostTagCommand AuthMethod runBuilderbytestring-0.11.3.1 Data.ByteString.Builder.InternalBuilderData.ByteString.Internal ByteString buildListOf parseListOf parseWord16BErspReply rspAddress reqCommand reqAddress sHelloMethodConnectBind UdpAssociateAuthNoAuthenticationRequired AuthGssApiAuthUsernamePasswordAuthNoAcceptableMethodsbuildClientHelloparseClientHellobuildServerHelloparseServerHello buildRequest parseRequest buildResponse parseResponsebuildPlainAuthenticationparsePlainAuthenticationbuildPlainAuthenticationReplyparsePlainAuthenticationReply openSocketmatchBindAddrsinterleaveAddressFamiliesconnectToAddrInfo%network-3.1.4.0-B2siKM4RZ608EJIWCrOTuNetwork.Socket.InfoAddrInfobind'Network.Socket.SockAddrbindsocket' NetworkHandlebaseGHC.IO.ExceptionIOErrorOpenSSL.Session ProtocolErrorConnectionAbruptlyTerminated GHC.MaybeNothingcleanEndstartTlsGHC.Exception.TypedisplayException openSocket'openNetworkHandle