Git Product home page Git Product logo

slimx's Introduction

SlimX

Basically Signal but built by 3 amateur people in (mostly) 24 hours.

What is it really?

A CodeRED Hackathon project implementing the PQXDH protocol in a real-time chat app. The protocol is just fancy handshake to exchange a secret key securely (though it still lacks plenty of stuff to actually be secure in the real world, namely an SSL connection between client and server).

Some specific details about current implementation...

Messages are only locally decrypted at the client side. Server merely acts as a coordinator. Messages are encrypted with AES-256 (though without an associated data so far). The PQKEM used is the Kyber library from Argyle-Software.

What's the next big thing for it? (updated from time to time)

The Double Ratchet Algorithm!!! There is currently no forward secrecy so any compromise of the shared key immediately means that the conversation will be entirely visible, which is NOT good :(

How to run/build

For the server:

The /server folder has a .env file specifying the MySQL database so
that needs to be changed to whatever the local server needs.

Diesel can be installed through 'cargo install diesel' (which is much
easier on Linux).

Run 'diesel migration run' in the /server folder to setup the database. Anytime you want to just drop the database, just do 'diesel migration redo -n 7'

Then, 'cargo run' will start up the server.

For the client:

Install Flutter and flutter_rust_bridge (https://github.com/fzyzcjy/flutter_rust_bridge)

Run 'flutter_rust_bridge_codegen generate' just in case.

Run 'flutter run' to start the client.

You'll have to resize the client for it to switch to mobile mode. Currently, the desktop/tablet screen is used as a debug button to also wipe all stored data.

slimx's People

Contributors

zentro avatar eoforhild avatar jeffafuh avatar

Stargazers

 avatar

Watchers

 avatar

slimx's Issues

Improve chat request

Can only chat request a person once. Requests that you've sent also show up in your requests as a pending outgoing request (no buttons, etc...).

Server no longer even stores chat rooms

Move all information regarding chats to be entirely local. This is ideally how it should be. Server is only supposed to coordinate. Very very long term goal.

Bind user to a machine on first login

Probably have them present proof that they are who they are (challenge signature on arbitrary message sent by the server, server can verify using their identity key)

Debloat main.rs in server

It's starting to get bloated so consider moving the handlers module to another file and maybe further modularizing that would make it easier to work through and add new paths.

Allow a user to deny a chat request

Denying also means that you are blacklisting them which means that they cannot send a request to you again, unless you unblacklist them. Will need to implement a blacklist screen for this purpose and add a new table to the server.

Better identifiers for keys

Probably a hash of the public opk/pqpk in a map when stored instead of just a literal array :3

On a tangent, this would make it easier to upload new one time keys.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.