Inspiration

Inspired by the Ciena challenge, but we wanted to add an element cryptography and security by requiring all parties to consent before you can access a file.

What it does

A user can submit a file / image from their device. It gets split into 512 byte chunks which are then split across all registered devices. The file is then added to each user's library. When a user clicks on the file fragment, the app will reconstruct the original file by getting the pieces from each member of the network.

How we built it

We wanted to try making a Multiplatform app, so we used Kotlin Multiplatform. It enables you to write your business logic in Kotlin, and write platform specific implementations of the necessary functions.

Challenges we ran into

We wanted to write our own application layer for TCP IP to define a custom networking protocol. Unfortunately, we have a bug in our fragmentation logic which corrupts the reconstituted file.

Kotlin Mutliplatform was counterintuitive, and our UI is lacking compared to our expectations.

Apple has blocked UDP broadcasting, and we spent a lot of time trying to figure out why UDP broadcasts were not working. In hindsight, we should have implemented Bonjour to detect other clients on the network.

Accomplishments that we're proud of

We're proud to have written our first TCP application protocol. Even though it has some minor bugs, we're confident that they could be resolved.

We implemented our first SQLite database for Multiplatform.

It's also our first cross platform application, and we were able to call both Android and iOS system functions such as the gallery using shared business logic for both.

What we learned

We've solidified our understanding of TCP/IP, how Bonjour works, and cross platform development with Kotlin

What's next for Totem Crypto

Fix our fragmentation logic Make our UI even better Implement Homomorphic encryption to allow each client to participate in the encryption of the file. This is essential for the purpose of our application because we want to minimize the importance of a single node in the network.

Built With

Share this project:

Updates