Here is a list of demos for my projects:
For my final year of university, I had to develop a security related product. The task of developing a product came with project management and everything that comes with that, including risk arrestment, resource allocation, development methodology, etc.
- You can choose your own encryption: AES or Blowfish ciphers with PBKDF2 or Argon2 key derivation functions
- Strongest security that adapts to your hardware and patience:
- The program adapts the number of rounds to the time needed to unlock based on a benchmark
- The program can adapt to the amount of RAM available (Argon2 specific)
- Separate identities are available
- Shared recovery method
- Paper recovery method
- Password Generator
- Theming Support
Encryption and Data Security
The user can choose their encryption in the password manager. The user has a choice of Blowfish or AES as encryption methods, and PBKDF2 and Argon2 as key derivation functions. Once the user has selected the appropriate encryption settings, they can fine tune the amount of memory that the program should use and the amount of time the program should take to open one password. Multiple passwords can be added to open the password manager. This is done by encrypting and keeping a copy of the master key in each slot. This removes the need to share the same password. It also makes this password manager secure.
It is not unreasonable to assume any adversary that attempts to decrypt the password manager’s encryption might not be willing to allow the user to walk away free, or worse - the adversary may cause the user to expire in a painful way; or - the user may want to terminate themselves given the alternative of torture. Due to this, this password manager allows the user to distribute a shared recovery scheme before being interrogated that allows other people to unlock and read the contents of the password manager. There is no way to tell how many shared recovery schemes have been made and if done correctly, this also means that any adversary would also not know who the pieces have been distributed to. A shared recovery scheme is a scheme where the user creates a number of pieces and an opening threshold where a secret (like a master key) can be derived. Both the threshold and pieces of the scheme can be set independently of each other. (Adi Shamir, 1979). Alternatively, another backup method exists that does not use the shared recovery scheme if the user trusts a sole entity or wants to back up the master key and keep it in a very secure place.
Another distinct feature of the password manager is that it implements “Identities”, which are fundamentally a collection of accounts. The password manager is designed as a supplement for operating on the Tor network. Having identities ensures that the user does not accidentally “link”, accounts that they do not want to be linked together, allowing the user to assume an identity per Tor session. This allows for a much safer operating security when doing sensitive tasks.
The password manager has many common password manager functions. It's possible to create accounts, generate passwords, delete and edit accounts and more.
Download and Extra Content
This was mostly an exert from my Password Manager Report. The full project is available on GitHub, if you'd like to view it and play with it.
Adi Shamir (1979) ‘How to Share a Secret’, Massachusetts Institute of Technology, 22(11), pp. 612–613.
This website was built using my own open source code. I’ve made it in such a way that it allows users to download the website in full, excluding all of the project files (the file would be too big). The one of most impressive parts is that I’ve developed technologies that allows people to download the website without any external sources, (go on, try it!). This means that images and other media in this page have been embedded into a single HTML file. This includes, but is not limited to:
- Style Sheets
- External Resources
You will see that if you download this website by using the download link, you will be able to still browse it and use it as if it was the main website, even without an internet connection.
The way I encode data is by using Data URIs. While using URIs on a standard page is very silly as it doesn’t take advantage of the latest HTTP technologies, in this case, it fits perfectly simply because my website could no longer exist and you would still have a perfect snapshot of it years later. It also impresses my peers.
Another part that is very worth mentioning is that I can generate my pages from the odt format. This format allows me to write this very document in LibreOffice, where I have spell check and other important tools to help me write.
This is important because as the technologies will evolve and the tools will evolve, it’s important to use something solid to base your website on. In my case, I’ve decided that it would be the best to base it on an open standard that even Microsoft Office supports. Given this stability and availability, I really don’t see this format dying any time soon. I can be certain that it will last a long time. And if it doesn’t, I could always find a better format.
I can also generate pages from HTML/HTM and plain text files. This allows for a backup method for generation and more control over the page that will be generated. In the future, Markdown will be parsed too.
Perfection Every Time
This project can automatically query W3’s NU validator to find any problems with the program or the content that was used to generate the site.
Upon completion, the script can automatically send the HTML to the service to be analysed. The script receives the info/warnings/errors if any are found and displays them, like above. This helps to find any potential errors before they are shipped to the public. This also doubles as a debugger if necessary.
Currently, odt support is lacking in parsing links and more elaborate features of this file format, such as lists and embedded images. This will be addressed in the future updates of this project.
I have been volunteering my network and computing resources to help the Tor Project. I run relay nodes for The Tor Project to help people have clear access to the internet without censorship. I believe that censorship is unjust. I believe full internet privacy is a fundamental right.
I have been running relay nodes where and when I can. You can see my current active nodes here. I have been volunteering, on and off, for roughly 4 years. I hope to be able to volunteer for as long as possible in the future.
I have made a path finding solver. It is available on GitHub and you can see the demo here. This program implements the A* algorithm.
The solver looks like this:
This is one of my third year university projects. You can download a demo here. Simply run the executable. It should run under Wine, but I experienced problems with the file locator. The open source repository is here.
It is a simple drawing program that uses a programming language designed for this project. I was told to instructed to create a program to meet a specific set of guidelines. I achieved 100% of the available marks in this project, meeting all of the criteria necessary. The program can let you draw anything that you might like.
Some of the requirements were:
- Drawing of basic shapes and lines, like circles and squares.
- The ability to store and retrieve variables.
- Flow control, more specifically,
- Methods and functions. Specifically functions with or without parameters (recursions was not required).
- Loading and unloading programs.
- Error detection.
I go over these and my code in two videos. I don't recommend watching them because they are really long and might be really boring. It was requirement for the project. They're here:
Here are some drawings: (tap/hover to preview)
It was required that the software engineering project is fully documented. Every class has documentation regarding its use and place in the program. The documentation was generated Doxygen. You can read the documentation here.
I have made a Sudoku solver. It is available on GitHub and you can see the demo here.
The brute-force Backtracking algorithm is the major solving algorithm in this Sudoku solver with a supporting algorithm that helps remove singles from the graph.
Consider this following graph:
This Sudoku puzzle can be solved completely without the Backtracking algorithm. This is because there are squares where there is only one possible answer. For example, in the top-left grid, the top empty cell has to be 9 because no other possibilities exist. We know this because the possibilities are eliminated by examining the row, column and the square of the cell in any order.
By starting with numbers from 1 to 9 inclusive, we can remove the numbers present in the current square of the cell (1, 2, 3, 6, 8) and are left with numbers 4, 5, 7 and 9.
We can now look at the row of the cell and remove numbers 4 and 5 from our list of numbers. This leaves us wit the numbers 7 and 9.
By looking at the column of the cell, we can remove the 7 from our list of numbers, leaving us with only 9. Since 9 is the only number, we can be certain that only 9 should go into the cell so we write 9 into the cell. We can keep iterating this process until all the squares are filled in:
However, this doesn’t guarantee that there will be a solution. This is where you have to use backtracking. The following example cannot be solved using the previous method but can be solved using Backtracking:
This is the solution to the above using my Sudoku solver: