Protocol - nitrocaster/SdMessenger GitHub Wiki
Connection & authentication
- session key: used for symmetric encryption (generic traffic)
- private/public keys: used for public key encryption (session key transfer)
- cl -> sv: connect
- sv: perform connection precheck, accept connection, create client and assign id
- sv -> cl: precheck succeeded (
SvPublicKeyChallenge
) - cl: generate private and public keys
- cl -> sv: cl public key (
ClPublicKeyRespond
) - sv: generate session key and encrypt it using cl public key
- sv -> cl: encrypted session key, please login (
SvAuthChallenge
) - cl: decrypt session key using cl private key
- cl: from now on encrypt traffic using session key
- cl -> sv: login details (
ClAuthRespond
) - sv: authenticate client (check login details, banlist, etc)
- sv -> cl: connection result (
SvAuthResult
)
File transfer
- cl1 -> sv: file transfer request [receiver + file name + file size + blocksize + checksum] (
ClFileTransferRequest
) - sv -> cl2: routed request (
SvFileTransferRequest
) - cl2 -> sv: accept [blocksize] / reject transfer (
ClFileTransferRespond
) - sv: select block size, initialize file transfer session
- sv -> cl1: [session info] (
SvFileTransferResult
) - cl1 -> sv: [sid + data] (
CsFileTransferData
) - sv: update session info
- sv -> cl2: routed message (
CsFileTransferData
) - cl2: verify checksum of received file
- cl2 -> sv: verification succeeded/failed (
ClFileTransferVerificationResult
) - sv: delete file transfer session
- sv -> cl1: routed message (
ClFileTransferVerificationResult
)
Any side (cl1/cl2) can abort file transfer using CsFileTransferInterruption
message.