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)
  1. cl -> sv: connect
  2. sv: perform connection precheck, accept connection, create client and assign id
  3. sv -> cl: precheck succeeded (SvPublicKeyChallenge)
  4. cl: generate private and public keys
  5. cl -> sv: cl public key (ClPublicKeyRespond)
  6. sv: generate session key and encrypt it using cl public key
  7. sv -> cl: encrypted session key, please login (SvAuthChallenge)
  8. cl: decrypt session key using cl private key
  9. cl: from now on encrypt traffic using session key
  10. cl -> sv: login details (ClAuthRespond)
  11. sv: authenticate client (check login details, banlist, etc)
  12. sv -> cl: connection result (SvAuthResult)

File transfer

  1. cl1 -> sv: file transfer request [receiver + file name + file size + blocksize + checksum] (ClFileTransferRequest)
  2. sv -> cl2: routed request (SvFileTransferRequest)
  3. cl2 -> sv: accept [blocksize] / reject transfer (ClFileTransferRespond)
  4. sv: select block size, initialize file transfer session
  5. sv -> cl1: [session info] (SvFileTransferResult)
  6. cl1 -> sv: [sid + data] (CsFileTransferData)
  7. sv: update session info
  8. sv -> cl2: routed message (CsFileTransferData)
  9. cl2: verify checksum of received file
  10. cl2 -> sv: verification succeeded/failed (ClFileTransferVerificationResult)
  11. sv: delete file transfer session
  12. sv -> cl1: routed message (ClFileTransferVerificationResult)

Any side (cl1/cl2) can abort file transfer using CsFileTransferInterruption message.