Skip to content
file self encryptor
Branch: master
Clone or download
ustulation Merge pull request #250 from lionel1704/storage-refactor
Add generate address function to the Storage trait
Latest commit 0e415d6 Aug 5, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
benches chore/all: update rand and remove maidsafe_utilities Jul 26, 2019
examples refactor/storage: refactor the Storage trait to include a generate Aug 2, 2019
img add image Feb 24, 2015
src refactor/storage: refactor the Storage trait to include a generate Aug 2, 2019
.travis.yml chore/all: update some deps and fix warnings Jul 26, 2019 Version change to 0.14.0 (#247) May 29, 2019
Cargo.toml chore/sequencer: update memmap and so avoid unsafe code Jul 26, 2019
LICENSE [MAID-2652] chore/license: update license to include linking exception May 10, 2018 docs/readme:update travis CI url Feb 28, 2019
appveyor.yml chore/all: update some deps and fix warnings Jul 26, 2019
codeowners chore/codeowners:added codeowners file Mar 13, 2019
rustfmt.toml chore/fmt: format using rustfmt 0.8.2-nightly May 31, 2018


Self encrypting files (convergent encryption plus obfuscation)

Crate Documentation Linux/macOS Windows Issues
Documentation Build Status Build status Stories in Ready
MaidSafe website SAFE Dev Forum SAFE Network Forum


A version of convergent encryption with an additional obfuscation step. This pattern allows secured data that can also be de-duplicated. This library presents an API that can be utilised in any application that provides a POSIX like filesystem interface, dealing very effectively with the content part of any data (in tests the parallelised approach can actually be faster than reading/writing data as a single stream). It is important to realise two important aspects of this library:

  1. This library deals with file content only
  2. This library provides very secure data, but does return a data structure (DataMap) that in turn requires to be secured.

image of self encryption

Video of the process

self_encryption process and use case video


Using self_encryptor

This library splits a file into encrypted chunks and also produces a data map for the same. This data map with encrypted chunks enables the file to be reconstituted. Instructions to use the 'basic_encryptor' example are as follows:

Encrypt a file:
cargo run --example basic_encryptor -- -e <full_path_to_any_file>

You should now have the example binary in ../self_encryption/target/debug/examples/. The data_map for the given file and it's encrypted chunks will be written to the current directory.

Decrypt a file:
cargo run --example basic_encryptor -- -d <full_path_to_data_map> <full_destination_path_including_filename>

This will restore the original file to the given destination path.


Licensed under the General Public License (GPL), version 3 (LICENSE

Linking exception

self_encryption is licensed under GPLv3 with linking exception. This means you can link to and use the library from any program, proprietary or open source; paid or gratis. However, if you modify self_encryption, you must distribute the source to your modified version under the terms of the GPLv3.

See the LICENSE file for more details.

You can’t perform that action at this time.