A secure file encryption utility, written in rust.

Related tags

Cryptography dexios
Overview

Dexios

What is it?

Dexios is a command-line file encryption utility, suitable for encrypting files before uploading them to a cloud-service. It is written entirely in rust and contains no unsafe code (some dependencies may contain unsafe code, but they have received the correct audits and are deemed secure).

It uses AES-256-GCM encryption with argon2id to generate the encryption key.

It has been tested on Void Linux, but more platforms will be tested in the future.

For securely erasing the file, it's about as good as we will get. It doesn't factor in how the host OS handles things, or the filesystems. It overwrites the file with many random bytes, and then with zeros, before truncating it and "removing" it with the OS.

Building notes

As mentioned in the AES-GCM crate docs, please enable certain flags while building. For example:

RUSTFLAGS="-Ctarget-cpu=native -Ctarget-feature=+aes,+sse2,+sse4.1,+ssse3"

Change native to whichever CPU family/model you are going to be running the code on, if it's going to be ran on a different machine.

Checksums

Hashing mode uses Blake3 for verification, due to it's speed, security and regular updates. (very ideal for this use case).

This was originally sha3-512 in versions 3.x.x and below, and was KangarooTwelve in 4.x.x (via the tiny_keccak crate) but since v5 it has been changed to Blake3 for a number of reasons.

The tiny_keccak crate hasn't received updates in a long while, and is no longer actively maintained.

The k12 crate is ideal for this situation - but it is rather immature compared to some other hashing implementations, so Blake3 will be our main hashing algorithm, and there are no plans to change this as of yet.

Blake3 also offered some marginal performance benefits, but this could be due to a number of factors.

Performance

Tests were ran on a system with a Ryzen 7 3700x and 16gb of 3000MHz RAM - running Void Linux. The file used was originally 3.5GiB, and it was stored on a Cruicial MX500 SSD.

Version 6 removed JSON entirely, and dropped base64, which really shows in the performance metrics.

The time was determined via /usr/bin/time -f "%e"

Version -esyk -dsyk
3.2.8 44.37s 40.91s
4.0.0 23.70s 30.43s
5.0.0 22.48s 28.66s
5.0.2 20.14s 21.26s
5.0.9 19.31s 18.92s
6.0.0 11.74s 11.59s

Output file sizes

In versions 5.x.x and below, the 3.5GiB test file was encrypted at 4.72GiB - this involved a lot of overhead for base64 and a tiny amount with the JSON.

As of version 6, JSON and base64 has been dropped entirely. This has reduced the file size down to be marginally higher than our 3.5GiB test file (284 bytes higher, to be exact).

Environment Variables

Dexios can read your key from an environment variable! Just set DEXIOS_KEY and it will automatically be detected and used. Due to using different salts and nonces for every encryption, there is no inherent risk in reusing keys - although it's not a good security practice.

Key Inputs

The priority is as follows:

  1. First, Dexios will check for whether or not you have specified a keyfile (via -k or --keyfile)
  2. If no keyfile is detected, it will look for the DEXIOS_KEY environment variable
  3. If neither of the above are found, you will be shown a prompt to enter a password manually

Usage Examples

To encrypt a file, and show the hash of the encrypted (output) file for verification later on:

dexios -es test.txt test.enc

To decrypt a file, and show the hash of the encrypted file beforehand (to compare with the hash generated above):

dexios -ds test.enc test.txt

To encrypt a file, and erase the original file:

dexios -e --erase test.txt test.enc

To use a keyfile for encryption:

dexios -ek keyfile test.txt test.enc

To encrypt all .mp4 files in a directory, we can use find. This works a LOT better with a keyfile/environment variable key as you will have to input the password manually each time otherwise. It will append .enc to the end of your files. You can remove -maxdepth 1 to make this run recursively.

find *.mp4 -type f -maxdepth 1 -exec dexios -esyk keyfile {} {}.enc \;

To encrypt all .mp4 files in a directory, and remove the original files once encrypted:

find *.mp4 -type f -maxdepth 1 -exec dexios -esy --erase -k keyfile {} {}.enc \;

To Do

  • Error handling
  • Ensure the encryption and decryption functions are air-tight
  • Add a secure-erase function for the input/source file
  • Run some more tests, specifically on large files
  • Test keyfile functionality
  • Don't show stdin text when entering password inside of the terminal
  • Add checks for output files so we don't overwrite any by mistake
  • Hash the file before encryption and after decryption, so the user can confirm the data is exactly the same
  • Use clap subcommands instead of arguments to make it easier to use
  • Optimise reading the input/output files, so less disk usage
    • Find a way to encrypt large files (larger than the system's memory) - this is just another optimisation though
    • Optimise memory usage in general too
  • Further optimise the reading and handling of the data, especially in memory.
    • Larger files in hashing mode will cause dexios to force quit, due to absurdly high memory usage. This is because the data is being copied in memory multiple times, instead of re-using the same buffer. I believe this needs a Cursor to resolve, and a patch will be released once I have found the best solution.
  • Refactor/split everything into semi-specialised files, to make the codebase more maintainable
  • Add benchmarking switch that doesn't write to the disk
  • Manually zeroize sensitive data in RAM
Comments
  • [FEATURE] Encrypting a Directory

    [FEATURE] Encrypting a Directory

    I personally do not plan to add support for encrypting/decrypting based on a glob pattern (at this moment in time anyway). I've tried before and could not get a user-friendly implementation going.

    What I do think could be valuable is encrypting a singular directory. My plan was to encrypt each file in the directory as normal (so they each have their own salt/nonce), and then to compress them into a tar or zip file. I'm leaning more towards tar.

    Then, that compressed file will be encrypted once again, this time with ideally a different key provided by the user, or the same key could work but only with a different salt.

    If the keys were different, a brute force attack would take considerably longer. With the same key and different salts (this is the default implementation in Dexios anyway), an attacker just has to find one key and all of the files will be decrypted. I guess functionality should be added for both use cases.

    As far as I'm aware, there are no cryptographic downfalls to encrypting twice with different nonces in this case. That, and the compression imposed by taring the files should be more than enough, although I'd definitely inspect output files before releasing this feature.

    I would suggest file-name encryption also, but if the whole tar file is encrypted anyway, I don't see the point.

    You may track the progress of this on the directory-encrypt branch - I plan to work heavily on this feature and I don't see it taking more than 2/3 days - most of the groundwork has been laid out.

    Appropriate GA tests will be added also.

    enhancement 
    opened by brxken128 17
  • V5: Add Key-Manipulation Functions

    V5: Add Key-Manipulation Functions

    This adds the functionality to manipulate V5 header's keys (add/delete/change).

    • [x] Use the dexios key xx subcommand
    • [x] Change Key functionality
    • [x] Key Add functionality
    • [x] Key Remove functionality
    • [x] ~~Update change key functionality to use the features added in #140~~ Not viable.
    • [x] Give header restore the functionality to detect if there's empty space at the start of the file or not. If there's no empty space, disallow header restoration as encrypted/detached mode does not account for this. It's assumed the user knows what they are doing here, and I will make sure to add a note about it in the docs.
    • [x] Add GA tests for all of the above
    • [x] Make use of the newly exposed vec_to_arr()
    opened by brxken128 14
  • cli/pack: add possibility to pack many files

    cli/pack: add possibility to pack many files

    Some improvement from me... I currently have the following makefile:

    pack:
    	$(MAKE) DEXIOS_KEY=$$(pass show dexios/business_documents) pack-unchecked
    
    pack-unchecked:
    	dexios -py companies companies.enc
    	dexios -py my_contracts my_contracts.enc
    	dexios -py my_courses my_courses.enc
    	dexios -py nalog nalog.enc
    	dexios -py assets assets.enc
    
    unpack:
    	$(MAKE) DEXIOS_KEY=$$(pass show dexios/business_documents) unpack-unchecked
    
    unpack-unchecked:
    	dexios -uy companies.enc .
    	dexios -uy my_contracts.enc .
    	dexios -uy my_courses.enc .
    	dexios -uy nalog.enc .
    	dexios -uy assets.enc .
    

    these changes allow me to make things easier!

    pack:
    	pass show dexios/business_documents | dexios -pyk - companies my_contracts my_courses nalog assets all.enc
    
    unpack:
    	pass show dexios/business_documents | dexios -uyk - all.enc .
    
    opened by pleshevskiy 12
  • header: implement v5 headers

    header: implement v5 headers

    This is nowhere near done, at all.

    I'm going to mark it as a draft for now - there's a lot to do. I need to:

    • Read the actual information itself from the header
    • Ensure that it can be done in a backwards-compatible manner
    • Handle serialization of the headers (and AAD creation)
    • Update the CLI app's functions (most notably the change password one)
    • Probably some more

    There are a lot of things needed for this to work correctly - hopefully it's not too bad.

    opened by brxken128 12
  • [BUG] --auto parameter

    [BUG] --auto parameter

    Maybe i missed something or what ,but....:

    c:\Users\karbantartokac\Desktop\z>dex encrypt --auto 1.dat 1.enc -960996e0m Your generated passphrase is: September ←[36mℹ←[0m Using XChaCha20-Poly1305 for encryption ←[36mℹ←[0m Encrypting 1.dat (this may take a while) ←[32m✔←[0m Successfully hashed your key [took 2.96s] ←[32m✔←[0m Encryption successful! File saved as 1.enc [took 0.60s]

    c:\Users\karbantartokac\Desktop\z>dex decrypt 1.enc 1.kii Password: September ←[36mℹ←[0m Using XChaCha20-Poly1305 for decryption ←[36mℹ←[0m Decrypting 1.enc (this may take a while) ←[32m✔←[0m Successfully hashed your key [took 2.85s] Error: Unable to decrypt your master key (maybe you supplied the wrong key?)

    Am i do something wrong ?!

    bug 
    opened by Kispisti 10
  • Question: What --password flag do?

    Question: What --password flag do?

    I tried to figure out what the -p (--password) flag for the encrypt and dencrypt subcommands is for, but could not find its use in the code. If we don't pass a key file or env, it always falls back to user input.

    opened by pleshevskiy 9
  • Some small ideas

    Some small ideas

    Hi !

    At first ,thanks for Dexios ! It is a cool ,great job.

      • Well ,it would be nice to integrate it into Explorer/context menu in Win (at least when decrypt) ,but i cant do it. An option is missing to tell Dexios to open a browser window for target folder designation. Can you do it ? Is it a viable idea ?
      • ZSTD : I hope its not too late ,but a customizable compression setting/level would be nice ,too.
      • Two weeks ago you rejected to add SERPENT into cascade mode. But now i please you again to reconsider it. Not for a permanent cascade mode ,just an additional option to use ,just like in P__oC___t. (It has no CLI ,drag and drop based ,i dont use it. Unconvenient for me)

    All the best for you!

    enhancement 
    opened by Kispisti 8
  • v8.0.0

    v8.0.0

    There have been a lot of changes so far. It's not ready to be merged - but this is quite a large change.

    Lots of things have been renamed, refactored, removed or even re-done to make things easier to follow.

    Redundant functions have been removed entirely.

    View the roadmap for specifics of this PR.

    opened by brxken128 8
  • domain/decrypt: extract memory mode logic

    domain/decrypt: extract memory mode logic

    • [x] domain/decrypt: extract memory mode logic
    • [x] domain/decrypt: extract stream mode logic
    • [x] core/key: add decrypt master key
    • [x] domain/decrypt: covert with unit tests
    opened by pleshevskiy 7
  • core: move deoxys to feature

    core: move deoxys to feature

    Based on this MR #126 I made some changes :)

    But we cannot disable default dependencies with path... so we should to update dexios-core or use patch section.

    opened by pleshevskiy 6
  • docker: add possibility to use cli via docker

    docker: add possibility to use cli via docker

    Now anyone can use dexios using the following command

    docker build -t dexios .
    docker run --rm -it -v $PWD:/data dexios -e test.txt test.enc
    

    @brxken128 you can build and publish to the docker hub, then the image name will look like brxken128/dexios.

    Might solve the problem (#103 and possibly another) for Windows users

    opened by pleshevskiy 6
  • chore(deps): bump anyhow from 1.0.65 to 1.0.68

    chore(deps): bump anyhow from 1.0.65 to 1.0.68

    Bumps anyhow from 1.0.65 to 1.0.68.

    Release notes

    Sourced from anyhow's releases.

    1.0.67

    • Improve the backtrace captured when context() is used on an Option (#280)

    1.0.66

    • Reduce unhelpful backtrace frames in backtraces captured during a context call (#279)
    Commits
    • 867763b Release 1.0.68
    • c0a87d0 Opt out -Zrustdoc-scrape-examples on docs.rs
    • 1cc707b Release 1.0.67
    • 613b261 Update build status badge
    • 0f922d7 Disable backtrace CI on Rust 1.50
    • acecd9b Update ui test suite to nightly-2022-12-15
    • 0bac51f Time out workflows after 45 minutes
    • 60e8800 Fix renamed let_underscore_drop lint
    • 8d1c734 Update ui test suite to nightly-2022-11-16
    • 451651b Update ui test suite to nightly-2022-11-11
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • chore(deps): bump blake3 from 1.3.1 to 1.3.3

    chore(deps): bump blake3 from 1.3.1 to 1.3.3

    Bumps blake3 from 1.3.1 to 1.3.3.

    Release notes

    Sourced from blake3's releases.

    1.3.3

    version 1.3.3

    Changes since 1.3.2:

    • Fix incorrect output from AVX-512 intrinsics under GCC 5.4 and 6.1 in debug mode. This bug was found in unit tests and probably doesn't affect the public API in practice. See BLAKE3-team/BLAKE3#271.

    1.3.2

    version 1.3.2:

    Changes since 1.3.1:

    • Dependency updates only. This includes updating Clap to v4, which changes the format of the b3sum --help output. The new MSRV is 1.59.0 for blake3 and 1.60.0 for b3sum. Note that this project doesn't have any particular MSRV policy, and we don't consider MSRV bumps to be breaking changes.
    Commits
    • 67e4d04 version 1.3.3
    • 342f9f8 fix incorrect output from AVX-512 intrinsics in debug mode under GCC 5.4 and 6.1
    • 5dad698 test multiple initial counter values for hash_many
    • 62772b2 add GCC 5.4 to CI
    • 8b9608b grammar fix in b3sum help output
    • 56b72b1 add another retry loop to upload_github_release_asset.py
    • 537e967 version 1.3.2:
    • afa717c downgrade os_str_bytes to v6.3.1 in b3sum/Cargo.lock
    • fa127b2 small update to release.md
    • e067e7f add the MSRV toolchain (currently 1.60.0) to CI
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • chore(deps): bump rpassword from 7.1.0 to 7.2.0

    chore(deps): bump rpassword from 7.1.0 to 7.2.0

    Bumps rpassword from 7.1.0 to 7.2.0.

    Release notes

    Sourced from rpassword's releases.

    v7.2.0

    This release completely removes the dependency on serde. It adds a new dependency rtoolbox which are utility functions I use in multiple projects. This change is meant to improve supply chain security. I don't own serde but I do own rtoolbox. Code for rtoolbox is available in the mono-repo.

    No functionality changes in this release. It is backwards compatible.

    Commits
    • 485438e Remove tests of individual crates
    • 7d61f25 Prepare for publishing of rtoolbox and rpassword
    • c17318a Rename rutil to rtoolbox for publishing to crates.io
    • a0feff4 Add contributing guidelines
    • c9fda3f Simplify directory structure after switch to workspaces
    • 5ea9c16 Use Cargo workspaces instead of symlinks
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • chore(deps): bump indicatif from 0.16.2 to 0.17.2

    chore(deps): bump indicatif from 0.16.2 to 0.17.2

    Bumps indicatif from 0.16.2 to 0.17.2.

    Release notes

    Sourced from indicatif's releases.

    0.17.2

    A small maintenance release which makes indicatif more portable and fixes some minor regressions.

    • Use portable-atomic to fix build on some 32-bit platforms (#484, thanks to @​messense)
    • Implement multi-line progress message support (#443, thanks to @​happenslol)
    • Reset estimator of progress rate on backwards movement (#483, thanks to @​rlee287)
    • Fix percent initial value when there is no length (#491, thanks to @​devmatteini)
    • Bumped the MSRV to 1.56 (#482)

    On behalf of @​djc and @​chris-laplante, thanks to all contributors!

    0.17.1

    2.5 months after the large 0.17 release, we (finally) have a release that addresses most of the regressions found in 0.17. There is ongoing work on changes in the estimation algorithm, tracked in #394, which has regressed for some users.

    Note that we made some technically semver-breaking change of adding a missing Sync bound to the ProgressTracker bounds (#471). We're assuming that most users don't (yet) have custom ProgressTracker impls, and that users who do have probably built one that is Sync anyway.

    Fixed regressions

    • Fixed unicode-width feature spelling (#456)
    • Only tick if the ticker is disabled (#458)
    • Rework MultiProgress zombie line handling (#460)
    • Fix incorrect link in documentation (#469, thanks to @​Jedsek)
    • Take a reference for ProgressBar::style() (#476, thanks to @​andrewchambers)

    Other changes

    Thanks from @​djc and @​chris-laplante to all contributors!

    0.17.0

    indicatif is one of the most popular terminal progress bar libraries in the Rust ecosystem. More than a year after the 0.16.0 release, we're happy to finally release 0.17. In the past year, the indicatif team has grown to two maintainers, since @​chris-laplante joined @​djc as a maintainer. We also now have a Discord channel.

    Apart from many small API additions and fixes, particular effort has gone into reducing the overhead for reporting progress. To this end, we've removed some of the explicit rate limiting APIs in favor of a single refresh rate in the ProgressDrawTarget. We now set a rate limit by default (50ms) that should drastically reduce overhead for most applications while being more than enough for most terminal applications. Additionally, position updates are now synchronized by using atomic integer APIs instead of a mutex. In a basic test the simplest possible progress bar is about 95x faster on 0.17.0 compared to 0.16.2.

    We've made many changes to the way MultiProgress collections work. You no longer need to explicitly join() the MultiProgress, there are more ways to insert new progress bars into the collection, and many correctness improvements have been made, in part to more effort having gone into testing the crate.

    Additionally, we've reduced our dependency footprint, removing lazy_static and regex from our required dependencies.

    Additions

    ... (truncated)

    Commits
    • 25afbed Bump version number to 0.17.2
    • 8e220fd Fix clippy lints
    • 5b8b905 Fix percent initial value when there is no length
    • 2c85ff8 Add an armv5te test job to CI
    • 44ec391 Use portable-atomic to fix build on some 32-bit platforms
    • 14b5ef2 Update test to ensure reset occurs after rewind
    • 997567d Reset estimator of progress rate on backwards movement
    • 517398b Bump MSRV to 1.56
    • 222df5b Add additional tests for multi-progress multiline rendering
    • be579da Improve multiline support in format_style
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Question: Why not ThreadRng?

    Question: Why not ThreadRng?

    The documentation shows that ThreadRng is safer than StdRng::from_entropy

    Unlike StdRng, ThreadRng uses the ReseedingRng wrapper to reseed the PRNG from fresh entropy every 64 kiB of random data as well as after a fork on Unix (though not quite immediately; see documentation of ReseedingRng). Note that the reseeding is done as an extra precaution against side-channel attacks and mis-use (e.g. if somehow weak entropy were supplied initially). The PRNG algorithms used are assumed to be secure.

    Correct me if I'm wrong.

    opened by pleshevskiy 9
  • [FEATURE] Migrate to the `clap` derive API

    [FEATURE] Migrate to the `clap` derive API

    This was mentioned in #100.

    I think files such as cli.rs and main.rs would look exponentially nicer, and they would be easier to manage if we used the clap derive API.

    We re-use a lot of arguments and it would just make the process a lot simpler, in theory.

    enhancement 
    opened by brxken128 0
Releases(v8.8.1)
  • v8.8.1(Aug 27, 2022)

    Main Fixes

    • Fixed pack mode being unable to find a file

    What's Changed

    • Fix nix by @pleshevskiy in https://github.com/brxken128/dexios/pull/217
    • pack: prevent individual files from being packed by @brxken128 in https://github.com/brxken128/dexios/pull/219
    • domain/storage: open file only for file type by @pleshevskiy in https://github.com/brxken128/dexios/pull/220
    • pack+mem: fix stack overflow issues by @brxken128 in https://github.com/brxken128/dexios/pull/221
    • update to v8.8.1 by @brxken128 in https://github.com/brxken128/dexios/pull/222

    Full Changelog: https://github.com/brxken128/dexios/compare/v8.8.0...v8.8.1

    Source code(tar.gz)
    Source code(zip)
    dexios-linux-amd64(2.54 MB)
    dexios-macos-amd64(2.52 MB)
    dexios-windows-amd64.exe(1.97 MB)
  • v8.8.0(Aug 23, 2022)

    The TL;DR

    • Header version V5 is implemented, with the ability to add/remove/delete keyslots at will
    • header details was added to view details about a file's header
    • Extreme cleanup of the command-line output, to be more UNIX-like
    • Better tests and the migration to the domain crate fully
    • General optimizations
    • Removal of the paris dependency
    • Deoxys encryption deprecation
    • An --argon switch to use argon2id instead of BLAKE3-Balloon
    • Fix a bug on Windows where the entered password would not be hidden

    What's Changed

    • nix: add flake by @pleshevskiy in https://github.com/brxken128/dexios/pull/89
    • chore: move images to assets dir by @pleshevskiy in https://github.com/brxken128/dexios/pull/105
    • cli/pack: erase temp file on failure by @pleshevskiy in https://github.com/brxken128/dexios/pull/107
    • cli/erase: fix the file size increase by @pleshevskiy in https://github.com/brxken128/dexios/pull/108
    • docker: add possibility to use cli via docker by @pleshevskiy in https://github.com/brxken128/dexios/pull/118
    • domain/erase: move erase dir to separate command by @pleshevskiy in https://github.com/brxken128/dexios/pull/119
    • Add integration tests FsStorage by @pleshevskiy in https://github.com/brxken128/dexios/pull/121
    • cli: some improvements for password by @pleshevskiy in https://github.com/brxken128/dexios/pull/122
    • header: implement v5 headers by @brxken128 in https://github.com/brxken128/dexios/pull/111
    • chore: remove words with digits by @pleshevskiy in https://github.com/brxken128/dexios/pull/125
    • Depreciate Deoxys Encryption by @brxken128 in https://github.com/brxken128/dexios/pull/126
    • cli: improve use of erase mode by @pleshevskiy in https://github.com/brxken128/dexios/pull/130
    • cli: add stdin support for the keyfile param by @pleshevskiy in https://github.com/brxken128/dexios/pull/131
    • cli/decrypt: fix matching autogenerate arg by @pleshevskiy in https://github.com/brxken128/dexios/pull/134
    • Migrate to ThreadRng from StdRng by @brxken128 in https://github.com/brxken128/dexios/pull/136
    • core: use const to gen master key by @pleshevskiy in https://github.com/brxken128/dexios/pull/138
    • cli/pack: add possibility to pack many files by @pleshevskiy in https://github.com/brxken128/dexios/pull/148
    • deps: add rpassword instead of termion by @pleshevskiy in https://github.com/brxken128/dexios/pull/154
    • V5: Add Key-Manipulation Functions by @brxken128 in https://github.com/brxken128/dexios/pull/142
    • [DEPS] Remove paris dependency by @brxken128 in https://github.com/brxken128/dexios/pull/178
    • [UX] Optimisations by @brxken128 in https://github.com/brxken128/dexios/pull/186
    • deps: bump aead-related deps by @brxken128 in https://github.com/brxken128/dexios/pull/193
    • domain/unpack: extract main logic by @pleshevskiy in https://github.com/brxken128/dexios/pull/195
    • domain/unpack: fix overwriting file by @pleshevskiy in https://github.com/brxken128/dexios/pull/197
    • Configure lints by @pleshevskiy in https://github.com/brxken128/dexios/pull/198
    • key/all: check header version before sourcing keys by @brxken128 in https://github.com/brxken128/dexios/pull/200
    • chore(deps): bump chacha20poly1305 from 0.10.0 to 0.10.1 by @dependabot in https://github.com/brxken128/dexios/pull/202
    • chore(deps): bump aead from 0.5.0 to 0.5.1 by @dependabot in https://github.com/brxken128/dexios/pull/201
    • [UX] Further Improvements by @brxken128 in https://github.com/brxken128/dexios/pull/208
    • [CHORE] Refactor the CLI app by @brxken128 in https://github.com/brxken128/dexios/pull/210
    • [FEATURE] Argon2id switch support by @brxken128 in https://github.com/brxken128/dexios/pull/212
    • docker: fix image by @pleshevskiy in https://github.com/brxken128/dexios/pull/214
    • [DOCS] Update in preparation of v8.8.0 by @brxken128 in https://github.com/brxken128/dexios/pull/215
    • release: update crate versions by @brxken128 in https://github.com/brxken128/dexios/pull/216

    SHA256 Checksums - Please compare with the hash from this Github action

    dexios-linux-amd64: c6dc3b95e041ef68210862cc869afa2b8bfbe0fe39d6f9aaae85dfbfd80143ac
    dexios-windows-amd64: b3d557a8bd71bfe80547dd6f5270bb177cc3285274df059853cb4e8a442720aa
    dexios-macos-amd64: 55e29611046b1e793bb39af981e1a0bcc0ec492705803e64ef5f999890956eaf
    

    Full Changelog: https://github.com/brxken128/dexios/compare/v8.7.0...v8.8.0

    Source code(tar.gz)
    Source code(zip)
    dexios-windows-amd64.exe(1.97 MB)
    dexios-macos-amd64(2.52 MB)
    dexios-linux-amd64(2.54 MB)
  • v8.7.0(Jun 21, 2022)

    What's Changed

    • Implement V4 Header Support by @brxken128 in https://github.com/brxken128/dexios/pull/77
    • Compression support by @brxken128 in https://github.com/brxken128/dexios/pull/79
    • Implement the option to change a key (for files using V4+ headers) by @brxken128 in https://github.com/brxken128/dexios/pull/80
    • Add support for changing/adding keyfiles by @brxken128 in https://github.com/brxken128/dexios/pull/81
    • Implement Passphrase autogeneration and a trivial key handling refactor by @brxken128 in https://github.com/brxken128/dexios/pull/82
    • Detached Header Rework by @brxken128 in https://github.com/brxken128/dexios/pull/83
    • v8.7.0 by @brxken128 in https://github.com/brxken128/dexios/pull/86

    SHA256 Checksums - Please compare with the hash from this Github action

    dexios-linux-amd64: 6774d8106308a7e7c4803b5f629e6eb6862a8656606320d739e80744760b90c4
    dexios-macos-amd64: 1c42e57152d61e96033c34fb3837306e436eb322e74d426dbc4d44d41e6b68aa
    

    Full Changelog: https://github.com/brxken128/dexios/compare/v8.6.2...v8.7.0

    Source code(tar.gz)
    Source code(zip)
    dexios-linux-amd64(2.47 MB)
    dexios-macos-amd64(2.45 MB)
  • v8.6.2(Jun 11, 2022)

    This update fixes some quirks with pack mode on Windows.

    The zip crate was treating the backslash characters in paths as a weird symbol, so the patch replaces \ with / within those paths. This has no adverse effects from my testing, and all works as intended now.

    WalkDir was also implemented for pack mode, and I plan to implement this for erase/directory mode in the near future. It seems to work much better than the file indexer I created, as it handles the root paths in a more appropriate manner.

    What's Changed

    • Implement WalkDir by @brxken128 in https://github.com/brxken128/dexios/pull/62
    • fix annoying zip/windows issue by @brxken128 in https://github.com/brxken128/dexios/pull/63

    SHA256 Checksums - Please compare with the hash from this Github action

    dexios-linux-amd64: 036bd5cfab5c91e17e4378d12c53b89e6e596536ad91f4f9622e9e980237e235
    dexios-windows-amd64.exe:  d08952e62ee1e9dc57d5a4fbe735bb4afbad29147829edd02b744e56fc827139
    

    Full Changelog: https://github.com/brxken128/dexios/compare/v8.6.0...v8.6.2

    Source code(tar.gz)
    Source code(zip)
    dexios-linux-amd64(1.38 MB)
    dexios-windows-amd64.exe(1.24 MB)
  • v8.6.0(Jun 9, 2022)

    What's Changed

    • Add Pack Mode by @brxken128 in https://github.com/brxken128/dexios/pull/61 (implements #50)
    • Support erasing a directory (recursively indexes files within the directory, erases them, and then deletes the dir)

    SHA256 Checksums - Please compare with the hash from this Github action

    dexios-linux-amd64: 5f28d3e13b9590b7dba1eb0c804339b50388a5c55befca0f9374cf4691c181a8
    dexios-windows-amd64.exe:  872dcebdba95a778bd360b7eac11ebe333a006eee1102ae9f15fb3484052b7a9
    

    Full Changelog: https://github.com/brxken128/dexios/compare/v8.5.0...v8.6.0

    Source code(tar.gz)
    Source code(zip)
    dexios-linux-amd64(1.35 MB)
    dexios-windows-amd64.exe(1.21 MB)
  • v8.5.0(Jun 9, 2022)

    What's Changed

    • Implement a HeaderPrefix struct by @brxken128 in https://github.com/brxken128/dexios/pull/39
    • update clap information in regards to args and subcommands (fixes #36) by @brxken128 in https://github.com/brxken128/dexios/pull/40
    • Zeroize buffers that contain plaintext data by @brxken128 in https://github.com/brxken128/dexios/pull/42
    • Large Refactor to the structure of src/ by @brxken128 in https://github.com/brxken128/dexios/pull/46
    • Header Refactor by @brxken128 in https://github.com/brxken128/dexios/pull/48
    • Remove hashing from crypto functions by @brxken128 in https://github.com/brxken128/dexios/pull/49
    • STREAM and Memory Cipher Rework by @brxken128 in https://github.com/brxken128/dexios/pull/51
    • Separates primitives into specialised files by @brxken128 in https://github.com/brxken128/dexios/pull/52
    • Deprecate Memory Mode for encryption by @brxken128 in https://github.com/brxken128/dexios/pull/54
    • Rename Secret<> to Protected<> by @brxken128 in https://github.com/brxken128/dexios/pull/55
    • Refactor encrypt/decrypt functions by @brxken128 in https://github.com/brxken128/dexios/pull/56
    • Add Validity Checks to Header Subcommands by @brxken128 in https://github.com/brxken128/dexios/pull/57
    • Migrate to dexios-core by @brxken128 in https://github.com/brxken128/dexios/pull/58
    • migrate to dexios-core v0.0.7 by @brxken128 in https://github.com/brxken128/dexios/pull/59
    • Updated the documentation

    SHA256 Checksums - Please compare with the hash from this Github action

    dexios-linux-amd64: e25a9766259f569d6252387640c8e9cd3645cd07831f45d16bf2dd8033676356
    dexios-windows-amd64.exe:  322b06c6a4547ebefe92c1088b0bd06298401608891ac252821f5ad12f65c671
    

    Full Changelog: https://github.com/brxken128/dexios/compare/v8.4.0...v8.5.0

    Source code(tar.gz)
    Source code(zip)
    dexios-linux-amd64(1.21 MB)
    dexios-windows-amd64.exe(1.05 MB)
  • v8.4.0(Jun 2, 2022)

    What's Changed

    • Remove Pack/Unpack modes by @brxken128 in https://github.com/brxken128/dexios/pull/28
      • This helps prevent some potential vulnerabilities (such as zip-slipping). As we support more OSes, these become increasingly harder to protect against
    • V3 Headers and AAD by @brxken128 in https://github.com/brxken128/dexios/pull/29
    • Argon2id parameters have been hardened marginally
    • Headers are now authenticated with AAD, and not HMAC
    • The codebase has been cleaned up heavily
    • The attack surface has been reduced
    • Add a warning when users decrypt a file using an older header version, and recommend that they re-encrypt at their earliest convenience

    SHA256 Checksums - Please compare with the hash from this Github action

    dexios-linux-amd64: 083367e7abf88f6d26f2333806b0c1d599621c3e89b337f605a4d66354adb273
    dexios-windows-amd64.exe:  9ed6c380fbca3d867890a9f032f2292936b0448d068358768976254898045fdd
    

    Full Changelog: https://github.com/brxken128/dexios/compare/v8.3.0...v8.4.0

    Source code(tar.gz)
    Source code(zip)
    dexios-linux-amd64(1.22 MB)
    dexios-windows-amd64.exe(1.08 MB)
  • v8.3.0(May 31, 2022)

    What's Changed

    • Bumped header version up to 2
    • Hardened argon2id parameters considerably (m = 512, t = 8, p = 4)
    • Windows is now supported (mostly)
    • SHA3-512 HMAC sign and verify the headers using the spare 16 bytes we had available
    • Fix paris output where newlines would not be added (this involved removing all of the "loading..." features)
    • Remove compression altogether from pack modes

    SHA256 Checksums - Please compare with the hash from this Github action

    dexios-linux-amd64: 26d011d445d99f40ddf7bfde28d2eabfd7fa489f83aa791bc9ccecbece2d18af
    dexios-windows-amd64.exe:  fe0b1b07341e0eba9c79ef674a455a5ebed3ade5c050954cd3ce9930581dc8f9
    
    Source code(tar.gz)
    Source code(zip)
    dexios-linux-amd64(1.34 MB)
    dexios-windows-amd64.exe(1.19 MB)
  • v8.2.0(May 29, 2022)

    What's Changed

    • Allow hash-standalone to hash multiple files at once by @brxken128 in https://github.com/brxken128/dexios/pull/23
    • Implement paris crate to cleanup command-line output by @brxken128 in https://github.com/brxken128/dexios/pull/24
    • This branch adds mdbook documentation, in order to migrate away from GH Wiki by @brxken128 in https://github.com/brxken128/dexios/pull/25
    • Update URLs to point to mdbook docs by @brxken128 in https://github.com/brxken128/dexios/pull/26
    • Beautiful command-line output!

    Full Changelog: https://github.com/brxken128/dexios/compare/v8.1.1...v8.2.0

    Checksums - Please compare with the hash from this Github action

    dexios-linux-amd64: 2753984d2fc1e87923875cc0e62ed6a26817c7663104ffd600e2522043dde0c4
    
    Source code(tar.gz)
    Source code(zip)
    dexios-linux-amd64(1.38 MB)
  • v8.1.1(May 28, 2022)

    What's Changed

    • Subcommand, struct, enum refactoring by @brxken128 in https://github.com/brxken128/dexios/pull/22
    • Fixed FreeBSD compilation issues
    • Fix a potential zip slip vulnerability in unpack mode
    • The malformed files are now automatically deleted if there's an error during stream encryption/decryption modes

    Full Changelog: https://github.com/brxken128/dexios/compare/v8.1.0...v8.1.1

    Checksums - Please compare with the hash from this Github action

    dexios-linux-amd64: 07a428e7801b79d519c09c79b36b682194b4aa6c7dc781a8a27672eeccd632a2
    
    Source code(tar.gz)
    Source code(zip)
    dexios-linux-amd64(1.32 MB)
  • v8.1.0(May 27, 2022)

    What's Changed

    • Implement custom Secret type by @brxken128 in https://github.com/brxken128/dexios/pull/19
    • Implement Deoxys-II-256 and a trivial refactor to STREAM initialization by @brxken128 in https://github.com/brxken128/dexios/pull/21
    • Use termion to read user-entered commands from the terminal

    v8.0.0

    • Directory Packing and Encryption by @brxken128 in https://github.com/brxken128/dexios/pull/11
    • A full header rewrite and standardization by @brxken128 in https://github.com/brxken128/dexios/pull/14
    • v8.0.0 by @brxken128 in https://github.com/brxken128/dexios/pull/16

    New Contributors

    • @Rust-Galt made their first contribution in https://github.com/brxken128/dexios/pull/7

    Full Changelog: https://github.com/brxken128/dexios/compare/v7.4.9...v8.1.0

    Checksums - Please compare with the hash from this Github action

    dexios-linux-amd64: 870c27475f8d8a57a6d5c359656ec5ecbd2f8601ac1ab68fd902c7bb1e8061ff
    
    Source code(tar.gz)
    Source code(zip)
    dexios-linux-amd64(1.31 MB)
  • v7.4.9(May 21, 2022)

    What's Changed

    • Implement XChaCha20-Poly1305 by @brxken128 in https://github.com/brxken128/dexios/pull/4
    • Implement Standalone Hashing Mode by @brxken128 in https://github.com/brxken128/dexios/pull/6
    • General bug fixes and optimisations
    • Better handling of secrets such as raw data and keys

    Please note: XChaCha20-Poly1305 is now the default cipher. AES-256-GCM will still be fully supported, and you can choose to use AES-256-GCM with the -g switch. This switch will be needed to decrypt your previously-encrypted files - I apologise for the inconvenience.

    Checksums - Please compare with the hash from this Github action

    dexios-linux-amd64: 8c752318c99f14c7e8da787f68c843d39037cb3e71546f40f999512904094d78
    

    Full Changelog: https://github.com/brxken128/dexios/compare/v6.3.5...v7.4.9

    Source code(tar.gz)
    Source code(zip)
    dexios-linux-amd64(1.10 MB)
  • v6.3.5(May 13, 2022)

    There has been a lot of improvements in the past few versions.

    What's Changed

    • Remove serde, serde_json and base64 by @brxken128 in https://github.com/brxken128/dexios/pull/1
    • Stream Encryption by @brxken128 in https://github.com/brxken128/dexios/pull/2
    • Massive performance improvements since v4.0.0
    • Changed SHA3-512 to BLAKE3
    • Uses argon2id
    • Has the ability to encrypt/decrypt files in streaming mode, rather than loading it all into memory
    • File sizes have gone down immensely due to dropping base64
    • Support for the DEXIOS_KEY environment variable
    Source code(tar.gz)
    Source code(zip)
    dexios-linux-amd64(1.00 MB)
Owner
brxken
brxken
Authenticated Encryption with Associated Data Algorithms: high-level encryption ciphers

RustCrypto: Authenticated Encryption with Associated Data (AEAD) Algorithms Collection of Authenticated Encryption with Associated Data (AEAD) algorit

Rust Crypto 457 Jan 4, 2023
Easy to use cryptographic framework for data protection: secure messaging with forward secrecy and secure data storage. Has unified APIs across 14 platforms.

Themis provides strong, usable cryptography for busy people General purpose cryptographic library for storage and messaging for iOS (Swift, Obj-C), An

Cossack Labs 1.6k Dec 30, 2022
User-friendly secure computation engine based on secure multi-party computation

CipherCore If you have any questions, or, more generally, would like to discuss CipherCore, please join the Slack community. See a vastly extended ver

CipherMode Labs 356 Jan 5, 2023
A Rust binary for file encryption to multiple participants.

Kaspa-miner A Rust binary for file encryption to multiple participants. Installation From Sources With Rust's package manager cargo, you can install k

Elichai Turkel 31 Dec 30, 2022
🔐 UPLINK is a Rust lightweight (2MB) tool for file transfer and remote management that uses AES-GCM and Envelope Encryption over WebSockets.

UPLINK ░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░░▒▓█▓▒░ ░▒▓█▓▒░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█

Krystian Bajno 5 Sep 28, 2024
DexiosGUI - Simple cross-platform drag-and-drop Dexios file encryption

DexiosGUI Simple cross-platform drag-and-drop Dexios file encryption. Latest Windows x64 release is here. DexiosGUI is a Qt/C++ app for encrypt and de

Fabrice Corraire 4 Jul 25, 2022
Chargo is a tool for file encryption/decryption. It's based on Argon2 and ChaCha20Poly1305 algorithms.

| Documentation Chargo is a tool for file encryption/decryption with password. It's based on Argon2 and ChaCha20Poly1305 algorithms. From arg2u with ♥

Airat Galiullin 7 Jan 1, 2023
rabe is an Attribute Based Encryption library, written in Rust

Rabe rabe is a rust library implementing several Attribute Based Encryption (ABE) schemes using a modified version of the bn library of zcash (type-3

Fraunhofer AISEC 52 Dec 15, 2022
Simple to use CLI tool that makes encryption easy! Written in Rust.

?? eme: Encryption Made Easy an extremely simple AES-256 encryption tool written in Rust Usage: # To encrypt: eme --encrypt secret.png # To decrypt: e

null 5 Jan 3, 2023
A Rust library for lattice-based additive homomorphic encryption.

Cupcake Cupcake is an efficient Rust library for the (additive version of) Fan-Vercauteren homomorphic encryption scheme, offering capabilities to enc

Facebook Research 365 Dec 11, 2022
A Rust Library of China's Standards of Encryption Algorithms (SM2/3/4)

Libsm Libsm is an open source pure rust library of China Cryptographic Algorithm Standards. It is completed by a collaborative effort between the Cryp

CITAHub 149 Dec 23, 2022
In addition to encryption library, pure RUST implementation of SSH-2.0 client protocol

In addition to encryption library, pure RUST implementation of SSH-2.0 client protocol

陈年旧事。 73 Jan 1, 2023
A Rust Implementation of China's Standards of Encryption Algorithms(SM2/SM3/SM4)

gm-rs A Pure Rust High-Performance Implementation of China's Standards of Encryption Algorithms(SM2/SM3/SM4) Usage Add this to your Cargo.toml: [depen

null 2 Oct 27, 2022
Rust library for practical time-lock encryption using `drand` threshold network

tlock-rs: Practical Timelock Encryption/Decryption in Rust This repo contains pure Rust implementation of drand/tlock scheme. It provides time-based e

Timofey 32 Jan 8, 2023
WebAssembly wrapper of the rage encryption library

rage-wasm: WebAssembly wrapper of rage rage is a simple, modern, and secure file encryption tool, using the age format. It features small explicit key

Kan-Ru Chen 35 Dec 16, 2022
End-to-end encryption and mutual authentication for distributed applications.

✨ Hands-on Introduction: Build end-to-end encrypted, mutually-authenticated, secure messaging in Rust ✨ Rust and Elixir libraries for end-to-end encry

Ockam | Trust for Data-in-Motion 2.8k Jan 2, 2023
Meta-repository for Miscreant: misuse-resistant symmetric encryption library with AES-SIV (RFC 5297) and AES-PMAC-SIV support

The best crypto you've never heard of, brought to you by Phil Rogaway A misuse resistant symmetric encryption library designed to support authenticate

miscreant. 480 Dec 8, 2022
The Hybrid Public Key Encryption (HPKE) standard in Python

Hybrid PKE The Hybrid Public Key Encryption (HPKE) standard in Python. hybrid_pke = hpke-rs ➕ PyO3 This library provides Python bindings to the hpke-r

Cape Privacy 4 Nov 7, 2022
Project Masterpass is a deterministic databaseless key management algorithm, aimed to help those who cannot protect their encryption keys in storage

Project Masterpass (working title) Attention! This project is still under heavy development, and SHOULD NOT be used in practice, as the algorithms cou

Gyorgy Wang 2 Sep 11, 2022