-- | -- Description : A Magic Wormhole library that supports file and directory transfer. -- -- Magic Wormhole is a technology for getting things from one computer to another, safely. -- -- To use it, you must use the MagicWormhole library to first establish an encrypted connection: -- -- 1. Start a 'Rendezvous.Session' with the Rendezvous server, to allow peers to find each other ('Rendezvous.runClient') -- 2. Negotiate a shared 'Messages.Nameplate' so peers can find each other on the server ('Rendezvous.allocate', 'Rendezvous.list') -- 3. Use the shared 'Messages.Nameplate' to 'Rendezvous.open' a shared 'Messages.Mailbox' -- 4. Use a secret password shared between peers to establish an encrypted connection ('Peer.withEncryptedConnection') -- -- Once you've done this, you can communicate with your peer via 'Transit.send' and 'Transit.receive'. -- Once can send and receive either Text messages or Files. -- -- The password is never sent over the wire. -- Rather, it is used to negotiate a session key using SPAKE2, -- and that key itself is used to derive many per-message keys, -- so that each message is encrypted using NaCl SecretBox. -- module Transit ( App.Env(..) , App.prepareAppEnv , App.app , App.runApp , Conf.Options(..) , Conf.Command(..) , Errors.Error(..) , FileTransfer.MessageType(..) , MagicWormhole.parseWebSocketEndpoint , Network.parseTransitRelayUri ) where import qualified Transit.Internal.FileTransfer as FileTransfer import qualified Transit.Internal.Network as Network import qualified Transit.Internal.Errors as Errors import qualified Transit.Internal.Conf as Conf import qualified Transit.Internal.App as App import qualified MagicWormhole