# Filou > cryptography (without) loophole Filou is in devlopment. It is not yet a super hyper cool program but we are going there. ![travis](https://travis-ci.org/didiercrunch/filou.svg "travis") ## the name *Filou* is my brother, Charles Philippe Amyot, child nickname. He died the 9th octobre 2014. This program is dedicated to his memory. ## Use case Filou is the *npm* for cryptography. It revolutionizes the way the people use cryptography on a everyday use. The general design is to do what programs like *npm* did for dependencies management but for cryptography. Filou user interface is a command line user interface (*CLI*) and its source code. For us, the readability of the source code is as important as the functionality of the software. ### using filou #### creating keys The first thing you want to do when using filou is to create your personal private-public key pair. your keys will be kept in your `~/.filou` directory. ~~~ filou createkey ~~~ Then, you might want to publish your public key to the public repository ~~~ filou publish -email alice@lechef.com ~~~ #### encrypting file To encrypt a file to send to *bob@lechef.com*, you can do the following things 1. if *bob@lechef.com*'s public key is on the public repository, you can simply use ~~~ filou encrypt -to bob@lechef.com -file mysecretdocument.doc -out mycypherdoc.cyp ~~~ 2. if *bob@lechef.com*'s public key is on your local file path you can use ~~~ filou encrypt -to /path/to/bob@lechef.com -file mysecretdocument.doc -out mycypherdoc.cyp ~~~ 3. if *bob@lechef.com*'s public key is on accessible on a public url you can use ~~~ filou encrypt -to https://example.com/path/to/bob@lechef.com -file mysecretdocument.doc -out mycypherdoc.cyp ~~~ In anycase, the command line output will be a cypher file called mycypherdoc.cyp. You are then responsible to send the file to its recipient by the mean you wish; email, dropbox, floppy disc... #### decrypting file Once you received a file `encrypted_file.cyp`, you can decrypt it via the following command. ~~~ filou decrypt encrypted_file.cyp ~~~ #### so you want to hack filou That's cool because it is made for that! That you are a high school student with basic programming knownledge, a math student that wants to see an implementation of cryptographic algorithm or a senior security engineer, we welcome you! Before everything, you will need to learn a little bit of [Go](http://golang.org). We really like the official [go tour](http://tour.golang.org/) because you do not need to download or install anything; everything runs in your web browser. Then, you only need to dig into the code! We are proud of our source code. The unit test code coverage is almost 100%. All the functions are bellow 10 line of code. So if you do not understand a small piece of code, just look at its unit tests. All our file formats are well documented [yaml](http://www.yaml.org/) files. You can open any file and read the comments and make sure everything make sense. --- ## first road map * make a simple web service to use as remote key location * make blue print for the file --- ## things to do not forget In the long run, there are some things we will want to do and we need not to forget about it or lock ourselves out of those goals. * Use many encryption algorithms (symetrics, asymetrics, modes and hashes) * Has many keys for the same email * Rotate its keys * Encrypt a file to many people at the same time * Keys could be some where else like in [npm](https://www.npmjs.org/doc/cli/npm-install.html) * Using threshold cryptography * make a neet web site like npm.org to store keys * make alias for known public keys * make it easy for rapper applications ---