Trustworthy encrypted command line authenticator app compatible with multiple backups.

Related tags

Cryptography cotp
Overview

cotp - command line totp authenticator

Actions Status AUR package crates.io Downloads

I believe that security is of paramount importance, especially in this digital world. I created cotp because I needed a minimalist, secure, desktop accessible software to manage my two-factor authentication codes.

Overview

Interface

cotp is written with simplicity in mind, the interface is quite minimalist and intuitive as command line apps should be.

GIF demo

Encryption

This program relies on only one database file, encrypted with XChaCha20Poly1305 authenticated encryption and Argon2id for key derivation.

Import/Export

You can import backups (or converted databases) from:

Backup compatibility is growing (check planned features). By typing cotp -ex you can export your database in unencrypted json format.

Compatibility

cotp can generate two-factor authentication coded using HMAC-SHA1, HMAC-SHA256 and HMAC-SHA512, with any digits, to provide a good compatibility to most two-factor authentication systems.

Cross Plaform

Thanks to the glorious Rust Language cotp is easily compilable in every platform supported by rust itself.

So far, I have successfully tested the functionality of the software in the following systems:

  • Arch Linux
  • Alpine Linux 3.12.3
  • Fedora 33
  • Ubuntu 20.04 WSL
  • Windows 10 Pro x64 20H2 Build 19042.746
  • Windows 10 LTSC x64 1809 Build 17763.1637

In addition, cotp has been successfully tested by the community in the following systems:

  • Android (Termux)
  • NixOS

Installation

Arch Linux and arch-based distributions

You can install cotp through the Arch User Repository. Before beginning check you already have the required packages:

pacman -S git base-devel

Then choose how you want to proceed:

  • Using an AUR Helper like yay: yay -S cotp

  • Or paru: paru -S cotp

  • Manually cloning AUR repo and make the pkg

     git clone https://aur.archlinux.org/cotp.git
     cd cotp
     makepkg -si
    

Other distributions, *nix or Windows

Before beginning check that you have the required dependencies to build cotp by yourself:

⚠️ Attention The x86_64-pc-windows-gnu rust toolchain is untested and may not compile! Use MSVC instead.

Using crates.io repository

It's possible to install cotp directly through cargo, as it's listed in the crates.io repository.

Just type cargo install cotp and wait for the installation.

Clone the Github repository and manually install

You can build cotp using these commands:

git clone https://github.com/replydev/cotp.git #or https://codeberg.org/replydev/cotp.git
cargo install --path cotp/

How to use

If you are familiar with the command line interface using cotp will not be a problem. Please note that cotp requires at least an 8 chars length password. If you type cotp -h you get some instruction on how to use cotp utilities. For example, the version 0.1.5 prints out this help screen:

cotp v0.1.5
written by @replydev

USAGE:
  cotp [SUBCOMMAND]

ARGUMENTS:
  -a,--add [ISSUER] [LABEL] [ALGORITHM] [DIGITS]       | Add a new OTP code
  -e,--edit [ID] [ISSUER] [LABEL] [ALGORITHM] [DIGITS] | Edit an OTP code
  -r,--remove [ID]                                     | Remove an OTP code
  -i,--import [APPNAME] [PATH]                         | Import a backup from a given application
  -ex,--export                                         | Export the entire database in a plaintext json format
  -j,--json                                            | Print results in json format
  -s,--single                                          | Print OTP codes in single mode
  -in,--info [ID]                                      | Print info of choosen OTP code
  -h,--help                                            | Print this help

Note that in the --edit command if you type . instead of argument you are specifying not to modify that specific argument.

Example:

Before:

index issuer label algorithm digits
3 Email_Provider [email protected] SHA1 6

Command:

cotp -e 3 . [email protected] . 8

After:

index issuer label algorithm digits
3 Email_Provider [email protected] SHA1 8

Database conversion

To import Authy or Google Authenticator databases you need first to obtain the respective files in your phone in the paths:

  • Authy: /data/data/com.authy.authy/shared_prefs/com.authy.storage.tokens.authenticator.xml
  • Google Authenticator: /data/data/com.google.android.apps.authenticator2/databases/databases

After that run the correct python script located in the converters/ folder in this source code:

python authy.py path/to/database.xml converted.json

It will convert the database in a json format readable by cotp.

To finish import the database: cotp -i authy path/to/database.json

Planned features

  • Reduce binary size and improve compilation speed by removing useless dependencies.
  • Use Argon2id for key derivation
  • CLI Dashboard
  • Support for:
    • SHA256
    • SHA512
    • Custom digit value
  • Backup compatibility with:
    • Aegis
    • andOTP
    • Authy
    • Google Authenticator
    • FreeOTP
  • Graphical User Interface

Contribution

I created this project for my own needs, but I would be happy if this little program is useful to someone else, and I gratefully accept any contributions.

Comments
  • Add protocol URL support to `cotp add`

    Add protocol URL support to `cotp add`

    Would be better ux, and would allow it to work directly with decoded QR codes

    "otpauth://totp/$ISSUER:$LABEL?algorithm=$ALGORITHM&digits=$DIGITS&issuer=$ISSUER&period=$PERIOD&secret=$SECRET"
    
    opened by brian6932 8
  • Feature Request: A search feature to select issuer/label

    Feature Request: A search feature to select issuer/label

    I think a useful feature would be to be able to do a find search to select issuer/label with ctrl + f and/or /

    Also one minor thing: I think it would be nice if k were moved off this bind: k -> Show QRCode of the selected element and instead using k/j as vim alts for / would be better/more universal imo

    enhancement 
    opened by brian6932 8
  • Support OSC52 copying (and Wayland)

    Support OSC52 copying (and Wayland)

    What do you think about this approach? It tries Wayand, then X11, and finally OSC52. Personally that works really well for me, as I mainly run on a remote VPS without a graphics environment.

    Also, I'm still new to Rust, and tried a long to refactor the blocks in copy_to_clipboard_decide_method() but got lost in the types. There seems to be a generic ClipboardProvider type but I just couldn't figure out how to implement it. I'd love to know if you can see a way to DRY it.

    opened by tombh 7
  • segfault in cipher

    segfault in cipher

    hi, i got this segfault, see details:

    • cotp commit 49d2c1f
    • cargo 1.58.0 (f01b232bc 2022-01-19)
    • cargo build target: release
    • ~/.cotp/db.cotp does not exist
    • failing command: cotp add -i xyz -l xyz@xyz -a SHA1 -d 6
    (gdb) bt
    #0  0x8000a4ca in chacha20poly1305::cipher::Cipher$LT$C$GT$::new::hed69a7d757b7398b ()
    #1  0x800327f7 in cotp::database_management::overwrite_database_json::h53b38a1489223167 ()
    #2  0x8003b4e8 in cotp::main::h633cef697bb2ae07 ()
    #3  0x8000b6ae in std::sys_common::backtrace::__rust_begin_short_backtrace::hcb8c7447e08876a5 ()
    #4  0x8003e256 in main ()
    
    bug 
    opened by bAndie91 7
  • Error during compiling on Alpinelinux

    Error during compiling on Alpinelinux

    Thank you for creating this program. I found this when l was looking an OTP manager (compatible with Authy) on Alpine.

    I have tried to compile binary from the source code on Alpine 3.13.5 but it says the following errors. Please help me. Thank you.

    Compiling cotp v0.1.8 (/root/cotp)
    error[E0271]: type mismatch resolving `<[u8; 16] as std::convert::TryFrom<std::vec::Vec<u8>>>::Error == std::vec::Vec<u8>`
      --> src/cryptograpy.rs:86:14
       |
    86 |     byte_vec.try_into()
       |              ^^^^^^^^ expected enum `std::convert::Infallible`, found struct `std::vec::Vec`
       |
       = note: expected enum `std::convert::Infallible`
                found struct `std::vec::Vec<u8>`
    
    error[E0277]: the trait bound `[u8; 16]: std::convert::From<std::vec::Vec<u8>>` is not satisfied
      --> src/cryptograpy.rs:86:14
       |
    86 |     byte_vec.try_into()
       |              ^^^^^^^^ the trait `std::convert::From<std::vec::Vec<u8>>` is not implemented for `[u8; 16]`
       |
       = help: the following implementations were found:
                 <[u8; 4] as std::convert::From<ring::endian::BigEndian<u32>>>
                 <[u8; 4] as std::convert::From<ring::endian::LittleEndian<u32>>>
                 <[u8; 8] as std::convert::From<ring::endian::BigEndian<u64>>>
                 <[u8; 8] as std::convert::From<ring::endian::LittleEndian<u64>>>
       = note: required because of the requirements on the impl of `std::convert::Into<[u8; 16]>` for `std::vec::Vec<u8>`
       = note: required because of the requirements on the impl of `std::convert::TryFrom<std::vec::Vec<u8>>` for `[u8; 16]`
       = note: required because of the requirements on the impl of `std::convert::TryInto<[u8; 16]>` for `std::vec::Vec<u8>`
    
    error[E0271]: type mismatch resolving `<[u8; 24] as std::convert::TryFrom<std::vec::Vec<u8>>>::Error == std::vec::Vec<u8>`
      --> src/cryptograpy.rs:91:14
       |
    91 |     byte_vec.try_into()
       |              ^^^^^^^^ expected enum `std::convert::Infallible`, found struct `std::vec::Vec`
       |
       = note: expected enum `std::convert::Infallible`
                found struct `std::vec::Vec<u8>`
    
    error[E0277]: the trait bound `[u8; 24]: std::convert::From<std::vec::Vec<u8>>` is not satisfied
      --> src/cryptograpy.rs:91:14
       |
    91 |     byte_vec.try_into()
       |              ^^^^^^^^ the trait `std::convert::From<std::vec::Vec<u8>>` is not implemented for `[u8; 24]`
       |
       = help: the following implementations were found:
                 <[u8; 4] as std::convert::From<ring::endian::BigEndian<u32>>>
                 <[u8; 4] as std::convert::From<ring::endian::LittleEndian<u32>>>
                 <[u8; 8] as std::convert::From<ring::endian::BigEndian<u64>>>
                 <[u8; 8] as std::convert::From<ring::endian::LittleEndian<u64>>>
       = note: required because of the requirements on the impl of `std::convert::Into<[u8; 24]>` for `std::vec::Vec<u8>`
       = note: required because of the requirements on the impl of `std::convert::TryFrom<std::vec::Vec<u8>>` for `[u8; 24]`
       = note: required because of the requirements on the impl of `std::convert::TryInto<[u8; 24]>` for `std::vec::Vec<u8>`
    
    error: aborting due to 4 previous errors
    
    Some errors have detailed explanations: E0271, E0277.
    For more information about an error, try `rustc --explain E0271`.
    error: failed to compile `cotp v0.1.8 (/root/cotp)`, intermediate artifacts can be found at `/root/cotp/target`
    
    Caused by:
      could not compile `cotp`.
    
    To learn more, run the command again with --verbose.
    
    bug 
    opened by magicstone1412 5
  • Error after importing from Aegis backup with Steam entries

    Error after importing from Aegis backup with Steam entries

    As mentioned here, Aegis supports Steam entries. If a backup contains a Steam entry and it's imported into cotp, this error shows every time cotp is ran. I assume this same error would occur for Yandex entries, but I have not tested this. image

    Possible Solutions:

    • skip steam and yandex entries and display a warning that these cannot be imported
    • add support for steam and yandex
    bug 
    opened by jschenke488 4
  • Feature Request: Aegis encrypted export

    Feature Request: Aegis encrypted export

    Hey thank you for this neat little tool. When i first tried to import my aegis json file it spit out a huge error. Then i realized it's because of the encryption used when exporting aegis.

    Yes, I'm aware that i can export from aegis without encryption! But it would be convenient if it would take encrypted json files :)

    EDIT: Probably this function for decryption

    enhancement 
    opened by jonas-w 4
  • thread 'main' panicked at 'called `Result::unwrap()`

    thread 'main' panicked at 'called `Result::unwrap()`

    I added a new OTP code, but now cotp crashes when trying to unlock. Did I insert some invalid characters by accident?

    cotp v0.1.7 written by @replydev

    Password: thread 'main' panicked at 'called Result::unwrap() on an Err value: InvalidSecret(DecodeError { position: 6, kind: Symbol })', src/otp/otp_helper.rs:67:90 stack backtrace: 0: 0x5557804e2730 - std::backtrace_rs::backtrace::libunwind::trace::h38f496e2f60ff056 at /build/rust/src/rustc-1.51.0-src/library/std/src/../../backtrace/src/backtrace/libunwind.rs:90:5 1: 0x5557804e2730 - std::backtrace_rs::backtrace::trace_unsynchronized::h56106da60d2adf4e at /build/rust/src/rustc-1.51.0-src/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5 2: 0x5557804e2730 - std::sys_common::backtrace::_print_fmt::he96612ccef88d499 at /build/rust/src/rustc-1.51.0-src/library/std/src/sys_common/backtrace.rs:67:5 3: 0x5557804e2730 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h7bc9abcb54e035e8 at /build/rust/src/rustc-1.51.0-src/library/std/src/sys_common/backtrace.rs:46:22 4: 0x5557804ff4ac - core::fmt::write::hc902605fce7cd9d0 at /build/rust/src/rustc-1.51.0-src/library/core/src/fmt/mod.rs:1096:17 5: 0x5557804df845 - std::io::Write::write_fmt::hc1b61b7b2ff05b80 at /build/rust/src/rustc-1.51.0-src/library/std/src/io/mod.rs:1568:15 6: 0x5557804e4855 - std::sys_common::backtrace::_print::hbfdf09e2f4163e71 at /build/rust/src/rustc-1.51.0-src/library/std/src/sys_common/backtrace.rs:49:5 7: 0x5557804e4855 - std::sys_common::backtrace::print::h0f74697e38abc595 at /build/rust/src/rustc-1.51.0-src/library/std/src/sys_common/backtrace.rs:36:9 8: 0x5557804e4855 - std::panicking::default_hook::{{closure}}::hddc95caf81a22541 at /build/rust/src/rustc-1.51.0-src/library/std/src/panicking.rs:208:50 9: 0x5557804e43b3 - std::panicking::default_hook::h3eba1f2638a2c835 at /build/rust/src/rustc-1.51.0-src/library/std/src/panicking.rs:225:9 10: 0x5557804e4ff1 - std::panicking::rust_panic_with_hook::h8f88f1391abedf2a at /build/rust/src/rustc-1.51.0-src/library/std/src/panicking.rs:591:17 11: 0x5557804e4b37 - std::panicking::begin_panic_handler::{{closure}}::hf473b53e26f56dd7 at /build/rust/src/rustc-1.51.0-src/library/std/src/panicking.rs:497:13 12: 0x5557804e2bcc - std::sys_common::backtrace::__rust_end_short_backtrace::h6fde4603ccb02286 at /build/rust/src/rustc-1.51.0-src/library/std/src/sys_common/backtrace.rs:141:18 13: 0x5557804e4a99 - rust_begin_unwind at /build/rust/src/rustc-1.51.0-src/library/std/src/panicking.rs:493:5 14: 0x5557804fde41 - core::panicking::panic_fmt::hac8c69602870cdf7 at /build/rust/src/rustc-1.51.0-src/library/core/src/panicking.rs:92:14 15: 0x5557804fdc63 - core::option::expect_none_failed::h7dfb96068fc9393b at /build/rust/src/rustc-1.51.0-src/library/core/src/option.rs:1300:5 16: 0x5557804760f0 - cotp::otp::otp_helper::get_good_otp_code::hc0c2526e9ba65e40 17: 0x5557804757a6 - cotp::otp::otp_helper::show_codes::h48fb5873267a30a8 18: 0x555780477d0f - cotp::main::h3f3a62180fef9322 19: 0x5557804786f3 - std::sys_common::backtrace::__rust_begin_short_backtrace::ha6798c2b8a70492a 20: 0x55578046aa89 - std::rt::lang_start::{{closure}}::h06055368eb7f2e5f 21: 0x5557804e5417 - core::ops::function::impls::<impl core::ops::function::FnOnce for &F>::call_once::h6646ba386ff34dbe at /build/rust/src/rustc-1.51.0-src/library/core/src/ops/function.rs:259:13 22: 0x5557804e5417 - std::panicking::try::do_call::h47e376e14a330979 at /build/rust/src/rustc-1.51.0-src/library/std/src/panicking.rs:379:40 23: 0x5557804e5417 - std::panicking::try::hb7ef6d6b3d4db346 at /build/rust/src/rustc-1.51.0-src/library/std/src/panicking.rs:343:19 24: 0x5557804e5417 - std::panic::catch_unwind::h534d7ac891813066 at /build/rust/src/rustc-1.51.0-src/library/std/src/panic.rs:431:14 25: 0x5557804e5417 - std::rt::lang_start_internal::h8191eeb0dbee8736 at /build/rust/src/rustc-1.51.0-src/library/std/src/rt.rs:51:25 26: 0x555780477e82 - main 27: 0x7fbb4bec1b25 - __libc_start_main 28: 0x55578045c17e - _start 29: 0x0 -

    opened by burp 4
  • No issue: just some info

    No issue: just some info

    Hi, first off, thank you! I love this! Although Aegis is amazing, half the time, I need the code for the terminal and cotp does that perfectly, exporting from Aegis was made easy by cotp too. In fact, it works so good that I went a step further completely deleted Aegis and built cotp on Termux (so I can still always access my codes away from my PC), now I am writing a small bash script for a Termux shortcut (a widget on my homescreen), when clicking it, if it detects a URL saved on my clipboard, it will try to find the coresponding entry (e.g https://github.com will return my github code, etc.), else prompts you to select one of your entries. Good bye interpreted, memory-hogging Java and hello Rust! :) So this is... A: Thank you! B: Reporting it works perfectly on Android for your ReadMe, C: Whilst I was there, I noticed "Nix OS" wasnt listed, I can confirm it works on this distro too, another one for the ReadMe!

    I'll close this now 🤣

    question 
    opened by nerd190 4
  • Can you make the json import work with another Authy exporter?

    Can you make the json import work with another Authy exporter?

    https://gist.github.com/gboudreau/94bb0c11a6209c82418d01a59d958c93 This is a root-less way to acquire Authy tokens, and doesn't require any conversion, can this method be parsed as well? Currently when attempting to import, I receive this error: image_201

    enhancement 
    opened by brian6932 3
  • [Feature Request] In-UI HOTP counter incrementation

    [Feature Request] In-UI HOTP counter incrementation

    Howdy!

    I just found this tool, and I think it's super handy! I'm using it with an HOTP secret I need for a login I use regularly. One problem I've encountered is that in order to increment the counter, I need to first run cotp info -i <n> to get the current counter value, followed by cotp edit -i 1 --counter <x+1> to increment it, then finally enter the UI with cotp to get the code - a process which involves entering my password three times, and a lot of commands, even if you have the index memorized.

    I'd like to request a way to increment / decrement the counter from within the UI, perhaps incrementing it when the user presses Enter (+ copying the old code), and decrementing it with Shift+Enter, or whatever way you think best. This would dramatically improve the workflow for using HOTP codes, and I think improve the software over all.

    Thanks for the great software!

    enhancement 
    opened by Alch-Emi 3
  • Bump actions/upload-artifact from 3.1.1 to 3.1.2

    Bump actions/upload-artifact from 3.1.1 to 3.1.2

    Bumps actions/upload-artifact from 3.1.1 to 3.1.2.

    Release notes

    Sourced from actions/upload-artifact's releases.

    v3.1.2

    • Update all @actions/* NPM packages to their latest versions- #374
    • Update all dev dependencies to their most recent versions - #375
    Commits
    • 0b7f8ab ci(github): update action/download-artifact from v1 to v3 (#312)
    • 013d2b8 Create devcontainer for codespaces + update all dev dependencies (#375)
    • 055b8b3 Bump Actions NPM dependencies (#374)
    • 7a5d483 ci(github): update action/checkout from v2 to v3 (#315)
    • e0057a5 README: Bump actions/checkout to v3 (#352)
    • 7fe6c13 Update to latest actions/publish-action (#363)
    • 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 github_actions 
    opened by dependabot[bot] 0
  • Bump serde from 1.0.150 to 1.0.152

    Bump serde from 1.0.150 to 1.0.152

    Bumps serde from 1.0.150 to 1.0.152.

    Release notes

    Sourced from serde's releases.

    v1.0.152

    • Documentation improvements

    v1.0.151

    • Update serde::{ser,de}::StdError to re-export core::error::Error when serde is built with feature="std" off and feature="unstable" on (#2344)
    Commits
    • ccf9c6f Release 1.0.152
    • b25d0ea Link to Hjson data format
    • 4f4557f Link to bencode data format
    • bf400d6 Link to serde_tokenstream data format
    • 4d2e36d Wrap flexbuffers bullet point to 80 columns
    • df6310e Merge pull request #2347 from dtolnay/docsrs
    • 938ab5d Replace docs.serde.rs links with intra-rustdoc links
    • ef5a0de Point documentation links to docs.rs instead of docs.serde.rs
    • 5d186c7 Opt out -Zrustdoc-scrape-examples on docs.rs
    • 44bf363 Release 1.0.151
    • 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 rust 
    opened by dependabot[bot] 0
  • Bump clap from 4.0.29 to 4.0.32

    Bump clap from 4.0.29 to 4.0.32

    Bumps clap from 4.0.29 to 4.0.32.

    Release notes

    Sourced from clap's releases.

    v4.0.32

    [4.0.32] - 2022-12-22

    Fixes

    • (parser) When overriding required(true), consider args that conflict with its group

    v4.0.31

    [4.0.31] - 2022-12-22

    Performance

    • Speed up parsing when a lot of different flags are present (100 unique flags)

    v4.0.30

    [4.0.30] - 2022-12-21

    Fixes

    • (error) Improve error for args_conflicts_with_subcommand
    Changelog

    Sourced from clap's changelog.

    [4.0.32] - 2022-12-22

    Fixes

    • (parser) When overriding required(true), consider args that conflict with its group

    [4.0.31] - 2022-12-22

    Performance

    • Speed up parsing when a lot of different flags are present (100 unique flags)

    [4.0.30] - 2022-12-21

    Fixes

    • (error) Improve error for args_conflicts_with_subcommand
    Commits
    • ec4ccf0 chore: Release
    • 13fdb83 docs: Update changelog
    • b877345 Merge pull request #4573 from epage/conflict
    • 85ecb3e fix(parser): Override required when parent group has conflict
    • d145b8b test(parser): Demonstrate required-overload bug
    • 0eccd55 chore: Release
    • 1e37c25 docs: Update changelog
    • dcd5fec Merge pull request #4572 from epage/group
    • dde22e7 style: Update for latest clippy
    • dd8435d perf(parser): Reduce duplicate lookups
    • 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 rust 
    opened by dependabot[bot] 0
  • Bump serde_json from 1.0.89 to 1.0.91

    Bump serde_json from 1.0.89 to 1.0.91

    Bumps serde_json from 1.0.89 to 1.0.91.

    Release notes

    Sourced from serde_json's releases.

    v1.0.90

    • Documentation improvements
    Commits
    • 26f147f Release 1.0.91
    • d9cdb98 Opt out -Zrustdoc-scrape-examples on docs.rs
    • 331511d Release 1.0.90
    • 8753829 Replace ancient CI service provider in readme
    • 0a43394 Update build status badge
    • 8794844 Prevent build.rs rerunning unnecessarily on all source changes
    • 0b54871 Time out workflows after 45 minutes
    • ecad462 Fix renamed let_underscore_drop lint
    • 9295c96 Resolve needless_borrowed_reference clippy lints
    • 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 rust 
    opened by dependabot[bot] 0
Releases(v1.1.0)
Owner
Reply
Dev for work and hobby, free software believer.
Reply
Decrypt your LUKS partition using a FIDO2 compatible authenticator

fido2luks This will allow you to unlock your LUKS encrypted disk with an FIDO2 compatible key. Note: This has only been tested under Fedora 31, Ubuntu

null 118 Dec 24, 2022
🐴 RusTOTPony — CLI manager of one-time password generators aka Google Authenticator

?? RusTOTPony CLI manager of time-based one-time password generators. It is a desktop alternative for Google Authenticator. Installation Arch Linux Pa

German Lashevich 23 Jan 5, 2023
Fiddi is a command line tool that does the boring and complex process of checking and processing/watching transactions on EVM compatible Blockchain.

Fiddi is a command line tool that does the boring and complex process of checking and processing/watching transactions on EVM compatible Blockchain.

Ahmad Abdullahi Adamu 7 Jan 9, 2023
Sample lightning node command-line app built on top of Ldk Node (similar to ldk-sample).

ldk-node-sample Sample lightning node command-line app built on top of Ldk Node (similar to ldk-sample ). Installation git clone https://github.com/op

optout 3 Nov 21, 2023
a handy utility to work with encrypted DMGs

edmgutil edmgutil is a simple wrapper utility to hdiutil to help you work with disposable, encrypted DMGs. It can decompress an encrypted ZIP into a n

Sentry 9 Nov 29, 2022
Encrypted memories

Diary - Encrypted memories Diary is a TUI program written in Rust for GNU/Linux / *BSD / Android (It probably works on other platforms too, but who ca

Arun Sojan Parolikkal 44 Dec 23, 2022
An application for creating encrypted vaults for the GNOME desktop.

Vaults An application for creating encrypted vaults for the GNOME desktop. It currently uses gocryptfs and CryFS for encryption. Please always keep a

Martin Pobaschnig 51 Dec 17, 2022
age-encrypted secrets for NixOS; drop-in replacement for agenix

ragenix ragenix provides age-encrypted secrets for NixOS systems which live in the Nix store and are decrypted on system activation. Using ragenix to

YAXI 91 Jan 8, 2023
An encrypted multi client messaging system written in pure Rust

?? Preamble This is a pure Rust multi-client encrypted messaging system, also known as Edode's Secured Messaging System. It is an end-to-end(s) commun

Edode 3 Sep 16, 2022
Dione is an anonymize and encrypted messaging system build on top on a peer to peer layer.

Secure and Anonymous Messaging WARNING: Currently Dione is not ready to be used nor does it fulfill its goal of being an anonymous messenger. In order

Dione 41 Jan 5, 2023
NymDrive is a complete, end-to-end encrypted file syncing daemon that runs over the Nym network.

NymDrive NymDrive is a complete, end-to-end encrypted file syncing daemon that runs over the Nym network. Features Active file monitoring of changes i

Hans Bricks 16 Jul 12, 2022
An open source desktop wallet for nano and banano with end-to-end encrypted, on chain messaging using the dagchat protocol.

An open source wallet with end-to-end encrypted, on chain messaging for nano and banano using the dagchat protocol.

derfarctor 22 Nov 6, 2022
Smarter brute-force password searching for PKZIP encrypted files

Zip Blitz Motivation This program was created for a very specfic problem I had. I had a large encrypted zip file that I lost/forgot the password for.

Michael 4 Jul 29, 2022
An HTTP proxy for assets (mainly images) to route requests through an always-encrypted connection.

camo-rs camo-rs is a frontend-compatible Rust-re-implementation of the now archived NodeJS-based atmos/camo - an HTTP proxy for assets (mainly images)

Dennis Schubert 7 Dec 8, 2022
Program to determine the password of an encrypted ZIP file via dictionary attack.

zip-dict-attack Program to determine the password of an encrypted ZIP file via dictionary attack. Inspired by this article. Usage Cargo is used to bui

null 2 Oct 8, 2022
A simple key-value store with a log-structured, append-only storage architecture where data is encrypted with AES GCM.

akvdb A simple key-value store with a log-structured, append-only storage architecture where data is encrypted with AES GCM. Modified from the actionk

Olle W 3 Oct 10, 2022
Koofr Vault is an open-source, client-side encrypted folder for your Koofr cloud storage offering an extra layer of security for your most sensitive files.

Koofr Vault https://vault.koofr.net Koofr Vault is an open-source, client-side encrypted folder for your Koofr cloud storage offering an extra layer o

Koofr 12 Dec 30, 2022
Bijou is a tiny yet fast encrypted file system.

Bijou ✨??✨ Bijou (['bi:ʒu], French for "jewel") is a tiny yet fast encrypted filesystem, built upon RocksDB. Bijou provides a FUSE interface, as well

Mivik 5 Sep 27, 2023
Extends cargo to execute the given command on multiple crates - upstream is at

cargo-multi GitLab CI: master: develop: Travis: master: develop: Extends cargo to execute the given command on multiple crates. Inspired by git multi.

Cyril Plisko 6 Feb 27, 2022