crypt4gh 0.4.1

Encryption and decryption implementation of the Crypt4GH encryption format.
Documentation
# Testing

```sh
cargo test --release -- --test-threads 1
```

## Crypt4GH testsuite

We run the following tests:

These tests treat the system as a black box, only checking the expected output for a given input.

We use 2 users: Alice and Bob.

### Full file Encryption/Decryption

We use a `testfile` containing the sequence of letters `abcd`, where each letter is repeated 65536 times.

- [x] Bob encrypts a 10MB file for Alice, and Alice decrypts it. Expected outcome: Alice reads the same content as Bob had.

- [x] Bob encrypts the testfile for Alice, and Alice decrypts it. Expected outcome: Alice reads the same content as testfile.

- [x] Bob encrypts the testfile for himself. Bob takes the resulting file and only changes the recipient to be Alice. Alice decrypts what she receives. Expected outcome: Alice reads the same content as testfile.

### Segmenting an encrypted file

We use the testfile and Bob encrypts it for himself.

- [x] Bob encrypts only the "b"'s from the testfile for Alice, using the `--range` flag. Alice decrypts what she receives. Expected outcome: Alice reads 65536 "b"s.

- [x] Bob rerranges the encrypted file using the `--range 65536-131073` flag, to only the "b"s. Bob takes the resulting file and only changes the recipient to be Alice. Alice decrypts what she receives. Expected outcome: Alice reads 65536 "b"s.
  
- [x] Bob rerranges the encrypted file using the `--range 65535-131074` flag, for Alice, to match one "a", all the "b"s, and one "c". Expected outcome: Alice reads one "a", 65536 "b"s and one "c".

- [x] Bob sends the secret message `Let's have beers in the sauna! or Dinner at 7pm?` to Alice. The message is buried in the middle of some random data. Alice decrypts what she receives. Expected outcome: Alice reads `Let's have beers in the sauna! or Dinner at 7pm?`.

### Using SSH keys

- [x] Bob encrypts a 10MB file for Alice, using his own SSH keypair, and Alice decrypts it, using her Crypt4GH keypair. Expected outcome: Alice reads the same content as Bob had.

- [x] Bob encrypts a 10MB file for Alice, using his own Crypt4GH keypair, and Alice decrypts it, using her SSH keypair. Expected outcome: Alice reads the same content as testfile.

- [x] Bob encrypts a 10MB file for Alice, and Alice decrypts it, both using their SSH keypair. Expected outcome: Alice reads the same content as testfile.

### Multiple recipients

- [x] Bob sends the testfile secretly to himself and Alice. Expected outcome: They both can read the same content as Bob had.

- [x] Bob encrypts the testfile for himself and reencrypts it for himself and Alice. Expected outcome: They both can read the same content as Bob had.