toxcore-0.2.12: A Tox protocol implementation in Haskell
Safe HaskellNone
LanguageHaskell2010

Tox.Transport.SecureSession

Synopsis

Documentation

data CookieRequest Source #

Cookie Request Packet (0x18 / 24).

Constructors

CookieRequest 

Fields

Instances

Instances details
Eq CookieRequest Source # 
Instance details

Defined in Tox.Transport.SecureSession

Show CookieRequest Source # 
Instance details

Defined in Tox.Transport.SecureSession

Generic CookieRequest Source # 
Instance details

Defined in Tox.Transport.SecureSession

Associated Types

type Rep CookieRequest :: Type -> Type #

Binary CookieRequest Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep CookieRequest Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep CookieRequest = D1 ('MetaData "CookieRequest" "Tox.Transport.SecureSession" "toxcore-0.2.12-inplace" 'False) (C1 ('MetaCons "CookieRequest" 'PrefixI 'True) (S1 ('MetaSel ('Just "crSenderDhtPk") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 PublicKey) :*: (S1 ('MetaSel ('Just "crNonce") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Nonce) :*: S1 ('MetaSel ('Just "crEncryptedMessage") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 CipherText))))

data CookieRequestInner Source #

Inner message of a Cookie Request.

Instances

Instances details
Eq CookieRequestInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

Show CookieRequestInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

Generic CookieRequestInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

Associated Types

type Rep CookieRequestInner :: Type -> Type #

Binary CookieRequestInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep CookieRequestInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep CookieRequestInner = D1 ('MetaData "CookieRequestInner" "Tox.Transport.SecureSession" "toxcore-0.2.12-inplace" 'False) (C1 ('MetaCons "CookieRequestInner" 'PrefixI 'True) (S1 ('MetaSel ('Just "criSenderRealPk") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 PublicKey) :*: (S1 ('MetaSel ('Just "criPadding") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 ByteString) :*: S1 ('MetaSel ('Just "criEchoId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Word64))))

data CookieResponse Source #

Cookie Response Packet (0x19 / 25).

Constructors

CookieResponse 

Fields

Instances

Instances details
Eq CookieResponse Source # 
Instance details

Defined in Tox.Transport.SecureSession

Show CookieResponse Source # 
Instance details

Defined in Tox.Transport.SecureSession

Generic CookieResponse Source # 
Instance details

Defined in Tox.Transport.SecureSession

Associated Types

type Rep CookieResponse :: Type -> Type #

Binary CookieResponse Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep CookieResponse Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep CookieResponse = D1 ('MetaData "CookieResponse" "Tox.Transport.SecureSession" "toxcore-0.2.12-inplace" 'False) (C1 ('MetaCons "CookieResponse" 'PrefixI 'True) (S1 ('MetaSel ('Just "rsNonce") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Nonce) :*: S1 ('MetaSel ('Just "rsEncryptedMessage") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 CipherText)))

data CookieResponseInner Source #

Inner message of a Cookie Response.

data Cookie Source #

Cookie structure (112 bytes).

Constructors

Cookie 

Fields

Instances

Instances details
Eq Cookie Source # 
Instance details

Defined in Tox.Transport.SecureSession

Methods

(==) :: Cookie -> Cookie -> Bool #

(/=) :: Cookie -> Cookie -> Bool #

Show Cookie Source # 
Instance details

Defined in Tox.Transport.SecureSession

Generic Cookie Source # 
Instance details

Defined in Tox.Transport.SecureSession

Associated Types

type Rep Cookie :: Type -> Type #

Methods

from :: Cookie -> Rep Cookie x #

to :: Rep Cookie x -> Cookie #

Binary Cookie Source # 
Instance details

Defined in Tox.Transport.SecureSession

Methods

put :: Cookie -> Put #

get :: Get Cookie #

putList :: [Cookie] -> Put #

type Rep Cookie Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep Cookie = D1 ('MetaData "Cookie" "Tox.Transport.SecureSession" "toxcore-0.2.12-inplace" 'False) (C1 ('MetaCons "Cookie" 'PrefixI 'True) (S1 ('MetaSel ('Just "cookieNonce") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Nonce) :*: S1 ('MetaSel ('Just "cookieEncryptedPayload") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 CipherText)))

data CookieInner Source #

Inner payload of a Cookie.

Instances

Instances details
Eq CookieInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

Show CookieInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

Generic CookieInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

Associated Types

type Rep CookieInner :: Type -> Type #

Binary CookieInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep CookieInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep CookieInner = D1 ('MetaData "CookieInner" "Tox.Transport.SecureSession" "toxcore-0.2.12-inplace" 'False) (C1 ('MetaCons "CookieInner" 'PrefixI 'True) (S1 ('MetaSel ('Just "ciTime") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Word64) :*: (S1 ('MetaSel ('Just "ciSenderRealPk") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 PublicKey) :*: S1 ('MetaSel ('Just "ciSenderDhtPk") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 PublicKey))))

data Handshake Source #

Handshake Packet (0x1a / 26).

Constructors

Handshake 

Fields

Instances

Instances details
Eq Handshake Source # 
Instance details

Defined in Tox.Transport.SecureSession

Show Handshake Source # 
Instance details

Defined in Tox.Transport.SecureSession

Generic Handshake Source # 
Instance details

Defined in Tox.Transport.SecureSession

Associated Types

type Rep Handshake :: Type -> Type #

Binary Handshake Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep Handshake Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep Handshake = D1 ('MetaData "Handshake" "Tox.Transport.SecureSession" "toxcore-0.2.12-inplace" 'False) (C1 ('MetaCons "Handshake" 'PrefixI 'True) (S1 ('MetaSel ('Just "hCookie") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Cookie) :*: (S1 ('MetaSel ('Just "hNonce") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Nonce) :*: S1 ('MetaSel ('Just "hEncryptedMessage") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 CipherText))))

data HandshakeInner Source #

Inner message of a Handshake.

Instances

Instances details
Eq HandshakeInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

Show HandshakeInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

Generic HandshakeInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

Associated Types

type Rep HandshakeInner :: Type -> Type #

Binary HandshakeInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep HandshakeInner Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep HandshakeInner = D1 ('MetaData "HandshakeInner" "Tox.Transport.SecureSession" "toxcore-0.2.12-inplace" 'False) (C1 ('MetaCons "HandshakeInner" 'PrefixI 'True) ((S1 ('MetaSel ('Just "hiBaseNonce") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Nonce) :*: S1 ('MetaSel ('Just "hiSessionPk") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 PublicKey)) :*: (S1 ('MetaSel ('Just "hiCookieHash") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 ByteString) :*: S1 ('MetaSel ('Just "hiOtherCookie") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Cookie))))

data CryptoDataPacket Source #

Encrypted Packet (0x1b / 27).

Constructors

CryptoDataPacket 

Fields

Instances

Instances details
Eq CryptoDataPacket Source # 
Instance details

Defined in Tox.Transport.SecureSession

Show CryptoDataPacket Source # 
Instance details

Defined in Tox.Transport.SecureSession

Generic CryptoDataPacket Source # 
Instance details

Defined in Tox.Transport.SecureSession

Associated Types

type Rep CryptoDataPacket :: Type -> Type #

Binary CryptoDataPacket Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep CryptoDataPacket Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep CryptoDataPacket = D1 ('MetaData "CryptoDataPacket" "Tox.Transport.SecureSession" "toxcore-0.2.12-inplace" 'False) (C1 ('MetaCons "CryptoDataPacket" 'PrefixI 'True) (S1 ('MetaSel ('Just "cdNonceShort") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Word16) :*: S1 ('MetaSel ('Just "cdPayload") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 CipherText)))

data HandshakeStatus Source #

Constructors

SessionCookieSent Word64

Echo ID

SessionHandshakeSent Cookie 
SessionHandshakeAccepted Cookie

Received handshake from peer

SessionConfirmed

Received data packet, session established

Instances

Instances details
Eq HandshakeStatus Source # 
Instance details

Defined in Tox.Transport.SecureSession

Show HandshakeStatus Source # 
Instance details

Defined in Tox.Transport.SecureSession

Generic HandshakeStatus Source # 
Instance details

Defined in Tox.Transport.SecureSession

Associated Types

type Rep HandshakeStatus :: Type -> Type #

type Rep HandshakeStatus Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep HandshakeStatus = D1 ('MetaData "HandshakeStatus" "Tox.Transport.SecureSession" "toxcore-0.2.12-inplace" 'False) ((C1 ('MetaCons "SessionCookieSent" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Word64)) :+: C1 ('MetaCons "SessionHandshakeSent" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Cookie))) :+: (C1 ('MetaCons "SessionHandshakeAccepted" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Cookie)) :+: C1 ('MetaCons "SessionConfirmed" 'PrefixI 'False) (U1 :: Type -> Type)))

data SecureSessionState Source #

Instances

Instances details
Eq SecureSessionState Source # 
Instance details

Defined in Tox.Transport.SecureSession

Show SecureSessionState Source # 
Instance details

Defined in Tox.Transport.SecureSession

Generic SecureSessionState Source # 
Instance details

Defined in Tox.Transport.SecureSession

Associated Types

type Rep SecureSessionState :: Type -> Type #

type Rep SecureSessionState Source # 
Instance details

Defined in Tox.Transport.SecureSession

type Rep SecureSessionState = D1 ('MetaData "SecureSessionState" "Tox.Transport.SecureSession" "toxcore-0.2.12-inplace" 'False) (C1 ('MetaCons "SecureSessionState" 'PrefixI 'True) (((S1 ('MetaSel ('Just "ssOurRealKeyPair") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 KeyPair) :*: (S1 ('MetaSel ('Just "ssPeerRealPk") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 PublicKey) :*: S1 ('MetaSel ('Just "ssOurDhtKeyPair") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 KeyPair))) :*: ((S1 ('MetaSel ('Just "ssPeerDhtPk") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 PublicKey) :*: S1 ('MetaSel ('Just "ssPeerNodeInfo") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 NodeInfo)) :*: (S1 ('MetaSel ('Just "ssStatus") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 (Maybe HandshakeStatus)) :*: S1 ('MetaSel ('Just "ssOurSessionKeyPair") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 KeyPair)))) :*: (((S1 ('MetaSel ('Just "ssPeerSessionPk") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 (Maybe PublicKey)) :*: S1 ('MetaSel ('Just "ssSharedKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 (Maybe CombinedKey))) :*: (S1 ('MetaSel ('Just "ssOurBaseNonce") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Nonce) :*: S1 ('MetaSel ('Just "ssPeerBaseNonce") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 (Maybe Nonce)))) :*: ((S1 ('MetaSel ('Just "ssSentPackets") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Word64) :*: S1 ('MetaSel ('Just "ssRecvPackets") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Word64)) :*: (S1 ('MetaSel ('Just "ssLastAttempt") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 (Maybe Timestamp)) :*: S1 ('MetaSel ('Just "ssRetryCount") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Int))))))

createCookie :: MonadRandomBytes m => CombinedKey -> Word64 -> PublicKey -> PublicKey -> m Cookie Source #

Create a Cookie for a peer.

decryptCookie :: CombinedKey -> Cookie -> Maybe CookieInner Source #

Decrypt and validate a Cookie.

dataNumThreshold :: Word16 Source #

Threshold for base nonce rotation (1/3 of 65536).

calculateNonce :: Nonce -> Word16 -> Nonce Source #

Calculate the full nonce for a received packet.

updateBaseNonce :: Nonce -> Word16 -> Nonce Source #

Update the base nonce after successful decryption if necessary.

initSession :: MonadRandomBytes m => KeyPair -> PublicKey -> KeyPair -> PublicKey -> NodeInfo -> m SecureSessionState Source #

Initial state for a new session. | Initial state for a new session.

handlePacket :: (Timed m, MonadRandomBytes m, Keyed m, Networked m, MonadState SecureSessionState m) => CombinedKey -> NodeInfo -> Packet ByteString -> m () Source #

Handle an incoming packet for this session.

handleCookieRequest :: (Timed m, MonadRandomBytes m, Keyed m, Networked m) => CombinedKey -> KeyPair -> NodeInfo -> ByteString -> m () Source #

Handle a CookieRequest (Server side).