Tools to encrypt/decrypt and pack/unpack RouterOS v6.13+ backup files

Overview

RouterOS-Backup-Tools

Build Status

Tools to encrypt/decrypt and pack/unpack RouterOS v6.13+ backup files

Usage examples

Info

cargo run -- info -i MikroTik.backup

Decrypt

Convert an encrypted backup to a plaintext backup
cargo run -- decrypt -i MikroTik-encrypted.backup -o MikroTik-plaintext.backup -p password

Encrypt

Convert a plaintext backup to an encrypted backup
cargo run -- encrypt -i MikroTik-plaintext.backup -o MikroTik-encrypted.backup -e AES -p password

Unpack

Extract all IDX and DAT files from a plaintext backup in a given directory cargo run -- unpack -i MikroTik-plaintext.backup -d unpacked_backup

Pack

Pack all IDX and DAT files from a given directory in a plaintext backup cargo run -- pack -d unpacked_backup -o MikroTik-plaintext.backup

Bruteforce

Bruteforce the password of an encrypted backup using a wordlist file
cargo run --release -- bruteforce -i MikroTik-encrypted.backup -w wordlist.txt
If you have very large wordlist files, you can use parallel brute forcing
cargo run --release -- bruteforce -i MikroTik-encrypted.backup -w wordlist.txt -p

Header structure

Plaintext version

Size (byte) Type Name Description
4 Unsigned LE Int Magic 0xB1A1AC88
4 Unsigned LE Int File size length in bytes

Encrypted version (RC4)

Size (byte) Type Name Description
4 Unsigned LE Int Magic 0x7291A8EF
4 Unsigned LE Int File size length in bytes
32 Byte array Salt Random salt added to password
4 Unsigned LE Int Magic check Encrypted Magic 0xB1A1AC88 to verify if password is correct

Encryption setup (RC4)

  1. A random salt of 32 bytes is generated (RouterOS only populates the first 16 bytes, mistake?) (Fixed)
  2. The password is appended to the salt
  3. salt+password result is hashed using SHA1
  4. RC4 cipher is keyed with the SHA1 hash
  5. RC4 cipher is used to encrypt or decrypt 0x300 (256 * 3 = 768) bytes (of arbitrary value)
  6. The first 4 bytes are decrypted and compared to 0xB1A1AC88 to check if password is correct before performing a decryption

Encrypted version (AES128-CTR)

RouterOS v6.43+ only

Size (byte) Type Name Description
4 Unsigned LE Int Magic 0x7391A8EF
4 Unsigned LE Int File size length in bytes
32 Byte array Salt Random salt added to password
32 Byte array Signature SHA256 HMAC
4 Unsigned LE Int Magic check Encrypted Magic 0xB1A1AC88 to verify if password is correct

Encryption setup (AES128-CTR)

  1. A random salt of 32 bytes is generated
  2. The password is appended to the salt
  3. salt+password result is hashed using SHA256
  4. AES128-CTR cipher is keyed with the first half of the SHA256 hash
  5. CTR mode's nonce is initialized with the first half of the salt
  6. HMAC-SHA256 is keyed with the second half of the SHA256 hash
  7. AES cipher is used to encrypt or decrypt 16 bytes (of arbitrary value)
  8. The first 4 bytes are decrypted and compared to 0xB1A1AC88 to check if password is correct before performing a decryption
  9. The HMAC result is verified against what's stored in the file when performing a decryption

Body structure

In the body are saved all file pair with extension .idx and .dat inside /flash/rw/store/
For each file:

Size (byte) Type Name Description
4 Unsigned LE Int Filename length Filename length without extension (.idx .dat)
Filename length String Filename String without null byte terminator (and without extension .idx .dat)
4 Unsigned LE Int IDX File size length in bytes
IDX File size Byte array IDX File content of IDX file
4 Unsigned LE Int DAT File size length in bytes
DAT File size Byte array DAT File content of DAT file

IDX file structure

The index file contains infos about each entry of DAT file. For each entry:

Size (byte) Type Name Description
4 Signed Int Entry Index The position of this entry in the Webfig/Winbox list, if -1 it means the entry was deleted and it won't be shown on Webfig/Winbox.
4 Signed Int Entry Size The size of this entry in bytes
4 Signed Int Unused It's always 5 (but in net/devices.idx it's 6 and in port_lock.idx it's -1) for each entry

Comments

  • When you delete some config (in Webfig or Winbox), they are not really deleted, they are only disabled and hidden, so if you unpack your backup, you can still recover them
Comments
  • This thing does not work

    This thing does not work

    ** Decrypt Backup ** ** Backup Info ** RouterOS Encrypted Backup (aes128-ctr-sha256) Length: 221641 bytes Salt (hex): [b6, 35, a9, 3b, 63, 16, b6, 21, 88, 84, 5b, b6, 6c, f1, 97, 4, b1, 3c, c9, 3b, f5, 33, 9, bb, 29, 2, b7, d1, 3f, 6c, f6, b3] Signature: [fe, ff, ed, b9, 29, ee, 6e, 7, c1, db, ca, 64, 88, 81, 74, b7, 84, 70, b0, 6e, 70, 64, 0, d5, 9e, 88, c1, a4, 1f, e3, 47, 9d] Magic Check (hex): c35aa30c Correct password! Decrypting... Decrypted correctly No such file or directory (os error 2)

    opened by SFinctor 2
  • Bump clap from 3.2.22 to 4.0.9

    Bump clap from 3.2.22 to 4.0.9

    Bumps clap from 3.2.22 to 4.0.9.

    Release notes

    Sourced from clap's releases.

    v4.0.9

    [4.0.9] - 2022-10-03

    Fixes

    • (derive) Process doc comments for #[command(subcommand)] like in clap v3

    v4.0.8

    [4.0.8] - 2022-10-01

    Fixes

    • (derive) Remove a low-value assert preventing defaulting Help and Version actions

    v4.0.7

    [4.0.7] - 2022-09-30

    Features

    • (derive) Populate implicit ArgGroup (#3165)

    Fixes

    • (derive) Support #[group(skip)] on Parser derive
    • (derive) Tell users about implicit arg groups when running into group name conflicts
    • (error) Don't report unrelated groups in conflict or requires errors

    v4.0.6

    [4.0.6] - 2022-09-30

    Features

    v4.0.5

    [4.0.5] - 2022-09-30

    v4.0.4

    [4.0.4] - 2022-09-29

    Fixes

    • (error) Specialize the self-conflict error to look like clap v3

    v4.0.3

    [4.0.3] - 2022-09-29

    Fixes

    • (error) Quote literals consistently

    ... (truncated)

    Changelog

    Sourced from clap's changelog.

    [4.0.9] - 2022-10-03

    Fixes

    • (derive) Process doc comments for #[command(subcommand)] like in clap v3

    [4.0.8] - 2022-10-01

    Fixes

    • (derive) Remove a low-value assert preventing defaulting Help and Version actions

    [4.0.7] - 2022-09-30

    Features

    • (derive) Populate implicit ArgGroup (#3165)

    Fixes

    • (derive) Support #[group(skip)] on Parser derive
    • (derive) Tell users about implicit arg groups when running into group name conflicts
    • (error) Don't report unrelated groups in conflict or requires errors

    [4.0.6] - 2022-09-30

    Features

    [4.0.5] - 2022-09-30

    [4.0.4] - 2022-09-29

    Fixes

    • (error) Specialize the self-conflict error to look like clap v3

    [4.0.3] - 2022-09-29

    Fixes

    • (error) Quote literals consistently
    • (error) Stylize escape (--) suggestions
    • (error) Format help flag as a literal

    [4.0.2] - 2022-09-28

    Fixes

    ... (truncated)

    Commits

    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] 1
  • Bump clap from 3.2.22 to 4.0.8

    Bump clap from 3.2.22 to 4.0.8

    Bumps clap from 3.2.22 to 4.0.8.

    Release notes

    Sourced from clap's releases.

    v4.0.8

    [4.0.8] - 2022-10-01

    Fixes

    • (derive) Remove a low-value assert preventing defaulting Help and Version actions

    v4.0.7

    [4.0.7] - 2022-09-30

    Features

    • (derive) Populate implicit ArgGroup (#3165)

    Fixes

    • (derive) Support #[group(skip)] on Parser derive
    • (derive) Tell users about implicit arg groups when running into group name conflicts
    • (error) Don't report unrelated groups in conflict or requires errors

    v4.0.6

    [4.0.6] - 2022-09-30

    Features

    v4.0.5

    [4.0.5] - 2022-09-30

    v4.0.4

    [4.0.4] - 2022-09-29

    Fixes

    • (error) Specialize the self-conflict error to look like clap v3

    v4.0.3

    [4.0.3] - 2022-09-29

    Fixes

    • (error) Quote literals consistently
    • (error) Stylize escape (--) suggestions
    • (error) Format help flag as a literal

    v4.0.2

    [4.0.2] - 2022-09-28

    Fixes

    ... (truncated)

    Changelog

    Sourced from clap's changelog.

    [4.0.8] - 2022-10-01

    Fixes

    • (derive) Remove a low-value assert preventing defaulting Help and Version actions

    [4.0.7] - 2022-09-30

    Features

    • (derive) Populate implicit ArgGroup (#3165)

    Fixes

    • (derive) Support #[group(skip)] on Parser derive
    • (derive) Tell users about implicit arg groups when running into group name conflicts
    • (error) Don't report unrelated groups in conflict or requires errors

    [4.0.6] - 2022-09-30

    Features

    [4.0.5] - 2022-09-30

    [4.0.4] - 2022-09-29

    Fixes

    • (error) Specialize the self-conflict error to look like clap v3

    [4.0.3] - 2022-09-29

    Fixes

    • (error) Quote literals consistently
    • (error) Stylize escape (--) suggestions
    • (error) Format help flag as a literal

    [4.0.2] - 2022-09-28

    Fixes

    • (parser) SetFalse should conflict with itself like SetTrue and Set
    • (parser) Allow one-off overrides

    [4.0.1] - 2022-09-28

    Fixes

    ... (truncated)

    Commits
    • 261fb79 chore: Release
    • 05bf050 chore: Remove outdated replacement
    • 56f4ef7 docs: Update changelog
    • cc0da32 Merge pull request #4330 from epage/assert
    • 5cd7461 Merge pull request #4329 from gilbsgilbs/patch-1
    • dd8e242 fix(parser): Allow defaults for Help/Version
    • 39cf3e7 doc(fix typo): add missing "l" in "toml"
    • 8a124db Merge pull request #4315 from epage/color
    • 6615003 docs(cookbook): Provide example of --color[=WHEN]
    • 03085e9 docs(derive) Fix README links
    • 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] 1
  • Could not parse line: Error { kind: InvalidData, message:

    Could not parse line: Error { kind: InvalidData, message: "stream did not contain valid UTF-8" }

    I get an error trying to bruteforce a backup file. (It's the only operation i have tried so far). The 'rockyou.txt' wordlist have been successfully used with other software.

    Running in WSL2 on Windows 10 x64

    rustc --version
    rustc 1.59.0 (9d1b2106e 2022-02-23)
    
    $ RUST_BACKTRACE=full cargo run --release -- bruteforce -i WSP-Router_v6.29.1.bac
    kup -w rockyou.txt
        Finished release [optimized] target(s) in 0.18s
         Running `target/release/routerosbackuptools bruteforce -i WSP-Router_v6.29.1.backup -w rockyou.txt`
    ** Bruteforce Backup Password **
    ** Backup Info **
    RouterOS Encrypted Backup (rc4-sha1)
    Length: 68386 bytes
    Salt (hex): [4e, b8, 9c, cd, 78, 66, 67, 12, 2, 85, b6, 5d, 5c, 6b, 3, b9, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 41, 6d, a8]
    Magic Check (hex): c34b7996
    thread 'main' panicked at 'Could not parse line: Error { kind: InvalidData, message: "stream did not contain valid UTF-8" }', src/lib.rs:566:20
    stack backtrace:
       0:     0x7f28922b12dc - std::backtrace_rs::backtrace::libunwind::trace::h91c465e73bf6c785
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
       1:     0x7f28922b12dc - std::backtrace_rs::backtrace::trace_unsynchronized::hae9da36f5d58b5f3
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
       2:     0x7f28922b12dc - std::sys_common::backtrace::_print_fmt::h7f499fa126a7effb
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/sys_common/backtrace.rs:67:5
       3:     0x7f28922b12dc - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h3e2b509ce2ce6007
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/sys_common/backtrace.rs:46:22
       4:     0x7f28922d07fc - core::fmt::write::h753c7571fa063ecb
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/core/src/fmt/mod.rs:1168:17
       5:     0x7f28922ad533 - std::io::Write::write_fmt::h2815c0519c99ba09
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/io/mod.rs:1660:15
       6:     0x7f28922b3902 - std::sys_common::backtrace::_print::h64941a6fc8b0ed9b
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/sys_common/backtrace.rs:49:5
       7:     0x7f28922b3902 - std::sys_common::backtrace::print::hcf25e43e1a9b0766
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/sys_common/backtrace.rs:36:9
       8:     0x7f28922b3902 - std::panicking::default_hook::{{closure}}::h78d3e6cf97fc623d
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/panicking.rs:211:50
       9:     0x7f28922b34e5 - std::panicking::default_hook::hda898f8d3ad1a5ae
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/panicking.rs:228:9
      10:     0x7f28922b3f53 - std::panicking::rust_panic_with_hook::h1a5ea2d6c23051aa
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/panicking.rs:606:17
      11:     0x7f28922b3c70 - std::panicking::begin_panic_handler::{{closure}}::h07f549390938b73f
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/panicking.rs:502:13
      12:     0x7f28922b1784 - std::sys_common::backtrace::__rust_end_short_backtrace::h5ec3758a92cfb00d
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/sys_common/backtrace.rs:139:18
      13:     0x7f28922b39a9 - rust_begin_unwind
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/panicking.rs:498:5
      14:     0x7f289221d3e1 - core::panicking::panic_fmt::h3a79a6a99affe1d5
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/core/src/panicking.rs:116:14
      15:     0x7f289221d473 - core::result::unwrap_failed::ha0327e3803285d6e
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/core/src/result.rs:1690:5
      16:     0x7f2892232dd3 - <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter::h7aa8dd6619c118b8
      17:     0x7f28922307f4 - routerosbackuptools::read_wordlist_file::hb5695234fd382f29
      18:     0x7f2892221c9e - routerosbackuptools::main::h6659af2025959ad1
      19:     0x7f289222ab43 - std::sys_common::backtrace::__rust_begin_short_backtrace::h63465ca4296e1276
      20:     0x7f289222d419 - std::rt::lang_start::{{closure}}::h730da29801f22a44
      21:     0x7f28922b0990 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h443f738a8e9f947a
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/core/src/ops/function.rs:259:13
      22:     0x7f28922b0990 - std::panicking::try::do_call::h1e21ba261ba489ec
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/panicking.rs:406:40
      23:     0x7f28922b0990 - std::panicking::try::h6afd48af8b6c96ac
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/panicking.rs:370:19
      24:     0x7f28922b0990 - std::panic::catch_unwind::h85dd95e0bab7fb60
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/panic.rs:133:14
      25:     0x7f28922b0990 - std::rt::lang_start_internal::{{closure}}::h038455e697c8b03e
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/rt.rs:128:48
      26:     0x7f28922b0990 - std::panicking::try::do_call::h6b0ad65979f3077a
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/panicking.rs:406:40
      27:     0x7f28922b0990 - std::panicking::try::h010108d314169ac6
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/panicking.rs:370:19
      28:     0x7f28922b0990 - std::panic::catch_unwind::hff397f912b1535c2
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/panic.rs:133:14
      29:     0x7f28922b0990 - std::rt::lang_start_internal::h52e73755f77c7dd9
                                   at /rustc/9d1b2106e23b1abd32fce1f17267604a5102f57a/library/std/src/rt.rs:128:20
      30:     0x7f2892224752 - main
      31:     0x7f2891e540b3 - __libc_start_main
      32:     0x7f289221dafe - _start
      33:                0x0 - <unknown>
    
    opened by kmpm 1
  • Bump anyhow from 1.0.66 to 1.0.68

    Bump anyhow from 1.0.66 to 1.0.68

    Bumps anyhow from 1.0.66 to 1.0.68.

    Release notes

    Sourced from anyhow's releases.

    1.0.68

    • Opt out of -Zrustdoc-scrape-examples on docs.rs for now

    1.0.67

    • Improve the backtrace captured when context() is used on an Option (#280)
    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
  • 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 
    opened by dependabot[bot] 0
  • Bump rayon from 1.6.0 to 1.6.1

    Bump rayon from 1.6.0 to 1.6.1

    Bumps rayon from 1.6.0 to 1.6.1.

    Changelog

    Sourced from rayon's changelog.

    Release rayon 1.6.1 (2022-12-09)

    • Simplified par_bridge to only pull one item at a time from the iterator, without batching. Threads that are waiting for iterator items will now block appropriately rather than spinning CPU. (Thanks @​njaard!)
    • Added protection against recursion in par_bridge, so iterators that also invoke rayon will not cause mutex recursion deadlocks.

    Release rayon-core 1.10.1 (2022-11-18)

    • Fixed a race condition with threads going to sleep while a broadcast starts.
    Commits

    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
  • Bump clap from 4.0.21 to 4.0.23

    Bump clap from 4.0.21 to 4.0.23

    Bumps clap from 4.0.21 to 4.0.23.

    Release notes

    Sourced from clap's releases.

    v4.0.23

    [4.0.23] - 2022-11-11

    Fixes

    • Don't panic on reporting invalid-long errors when followed by invalid UTF8
    • (help) Clarified argument to help subcommand

    v4.0.22

    [4.0.22] - 2022-11-07

    Fixes

    • (help) Don't overflow into next-line-help early due to stale (pre-v4) padding calculations
    Changelog

    Sourced from clap's changelog.

    [4.0.23] - 2022-11-11

    Fixes

    • Don't panic on reporting invalid-long errors when followed by invalid UTF8
    • (help) Clarified argument to help subcommand

    [4.0.22] - 2022-11-07

    Fixes

    • (help) Don't overflow into next-line-help early due to stale (pre-v4) padding calculations
    Commits
    • 95144b7 chore: Release
    • 20ecae1 docs: Update changelog
    • e6a3529 Merge pull request #4474 from epage/utf8
    • e9cbed3 fix(parser): Don't panic on invalid UTF-8 values
    • 45d26e0 test(parser): Show UTF8 bug
    • 4d69e56 Merge pull request #4471 from epage/assert
    • ec03972 test(assert): Verify empty positional assert exists
    • 0d27188 Merge pull request #4465 from epage/help
    • 9376a57 fix(help): Clarify that 'help' command accepts multiple
    • 6cbe5c4 chore: Release
    • 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
  • Bump clap from 4.0.18 to 4.0.21

    Bump clap from 4.0.18 to 4.0.21

    Bumps clap from 4.0.18 to 4.0.21.

    Release notes

    Sourced from clap's releases.

    v4.0.21

    [4.0.21] - 2022-11-07

    Features

    • (derive) long_about and long_help attributes, without a value, force using doc comment (before it wouldn't be set if there wasn't anything different than the short help)

    v4.0.20

    [4.0.20] - 2022-11-07

    Fixes

    • (derive) Allow defaulted value parser for '()' fields

    v4.0.19

    [4.0.19] - 2022-11-04

    Features

    • ColorChoice now implements ValueEnum
    Changelog

    Sourced from clap's changelog.

    [4.0.21] - 2022-11-07

    Features

    • (derive) long_about and long_help attributes, without a value, force using doc comment (before it wouldn't be set if there wasn't anything different than the short help)

    [4.0.20] - 2022-11-07

    Fixes

    • (derive) Allow defaulted value parser for '()' fields

    [4.0.19] - 2022-11-04

    Features

    • ColorChoice now implements ValueEnum
    Commits
    • bc457b1 chore: Release
    • d5c3c13 docs: Update changelog
    • 87edc19 Merge pull request #4461 from epage/help
    • c37ab6c fix(derive): Allow 'long_help' to force populating from doc comment
    • 8751152 test(derive): Verify long_help behavior
    • c1a9da9 refactor(derive): Decouple extracting and formatting of doc comments
    • 214f6b8 refactor(derive): Clarify bool arg
    • bcbf0b4 Merge pull request #4460 from epage/help
    • 73be1fe refactor(derive): Remove dead code
    • 5ee9e0f refactor(derive): Decouple doc comment parsing from methods
    • 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
  • Bump hmac-sha256 from 1.1.4 to 1.1.5

    Bump hmac-sha256 from 1.1.4 to 1.1.5

    Bumps hmac-sha256 from 1.1.4 to 1.1.5.

    Commits

    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
  • Bump aes from 0.8.1 to 0.8.2

    Bump aes from 0.8.1 to 0.8.2

    Bumps aes from 0.8.1 to 0.8.2.

    Commits

    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
Owner
Marco Grassi
Marco Grassi
A simple tool for extracting files from iOS backup archive.

iBackupExtractor A simple tool for extracting files from iOS backup archive. iOS backup files are not stored with their original directory layouts. Re

Cyandev 132 Oct 10, 2023
Yet Another Texture Packer - a small and simple CLI application to pack multiple textures/sprites into a texture atlas/sprite sheet

YATP (Yet Another Texture Packer) A small and simple CLI application to pack multiple textures/sprites into a texture atlas/sprite sheet. Installation

Petar Petrov 2 Sep 11, 2022
12600+ icons pack for embedded graphics!

?? embedded-icon 12600+ ?? icons for embedded-graphics. ?? Features ?? Support to multiple icon packs - Easy to add support to! ?? Multiple resolution

Patrick José Pereira 3 Jul 24, 2023
A command-line tool and Docker image to automatically backup Git repositories from GitHub or anywhere

A command-line tool and Docker image to automatically backup Git repositories from GitHub or anywhere

Jake Wharton 256 Dec 27, 2022
Neovim Configuration Manager (Swap/Backup/Try Configurations Easily)

ncm-rs Neovim Configuration Manager (Swap/Backup/Try Configurations Easily) I created this package because I wanted to try out Lazyvim (which is why i

instance.id 4 Mar 5, 2023
Sets of libraries and tools to write applications and libraries mixing OCaml and Rust

Sets of libraries and tools to write applications and libraries mixing OCaml and Rust. These libraries will help keeping your types and data structures synchronized, and enable seamless exchange between OCaml and Rust

Meta 36 Jan 28, 2023
Tools - The Rome Toolchain. A linter, compiler, bundler, and more for JavaScript, TypeScript, HTML, Markdown, and CSS.

Rome is currently being rewritten in Rust. Read more about it in our latest blog post. The documentation below is out of date and available for poster

Rome 22k Jan 3, 2023
A tool that allow you to run SQL-like query on local files instead of database files using the GitQL SDK.

FileQL - File Query Language FileQL is a tool that allow you to run SQL-like query on local files instead of database files using the GitQL SDK. Sampl

Amr Hesham 39 Mar 12, 2024
command line tools for coprolite research (paleontology and archaeology): estimate the producer's body mass based on coprolite diameter by the use of regression models

OVERVIEW OF COPROSIZE coprosize employs power, exponential and cubic regression models allowing to estimate the producer's body mass based on coprolit

Piotr Bajdek 7 Nov 25, 2022
Mercy is a public Rust crate created to assist with building cybersecurity frameworks, assessment tools, and numerous other projects

Mercy ?? Documentation Mercy is a public Rust crate created to assist with building cybersecurity frameworks, assessment tools, and numerous other pro

Umiko Security 2 Nov 27, 2022
Mercy is a public Rust crate created to assist with building cybersecurity frameworks, assessment tools, and numerous other projects

Mercy ?? Documentation Mercy is a public Rust crate created to assist with building cybersecurity frameworks, assessment tools, and numerous other pro

CyberSuki 2 Nov 27, 2022
A collection of tools for i3 that assist in window, workspace and output operations.

i3-valet A collection of tools for i3 that assist in window, workspace and output operations. i3-valet can be run directly from the command line or as

Erich Heine 15 Jan 8, 2023
Little example projects for learning Rust and building awesome cli tools! ⭐️

rust-cli-examples Examples of clean and well-tested command line utilities, written in Rust. ?? ?? What is this repo? This repo is a collection of man

Jim Lynch 5 Mar 31, 2023
Little exercises for learning Rust and building awesome cli tools! ⭐️

rust-cli-exercises Little exercises for learning Rust and building awesome cli tools! ⭐️ What's Here This repo is a collection of many extremely small

null 6 Apr 25, 2023
Call is an easy-to-use command tools for remote development.

Call is an easy-to-use command tools for remote development. It helps you to build remote development easily and elegant. It can work with makefile and justfile.

null 21 Dec 14, 2022
CLI tools to process cryptocurrency data

crypto-cli-tools A collection of CLI tools to process cryptocurrency data. Install: RUSTFLAGS="-C target-cpu=native" cargo install crypto-cli-tools cr

soulmachine 2 Mar 23, 2022
A system clipboard command line tools which inspired by pbcopy & pbpaste but better to use.

rclip A command line tool which supports copy a file contents to the system clipboard or copy the contents of the system clipboard to a file. Install

yahaa 3 May 30, 2022
Tree-sitter - An incremental parsing system for programming tools

tree-sitter Tree-sitter is a parser generator tool and an incremental parsing library. It can build a concrete syntax tree for a source file and effic

null 10.6k Jan 9, 2023
Tool to create web interfaces to command-line tools

webgate This command line utility allows you to: serve files and directories listed in a config file remotely run shell commands listed in a config fi

Nathan Royer 2 Jan 8, 2022