From eb8d65eb4fba8f0aca61eecadd66d704f4cb1fbc Mon Sep 17 00:00:00 2001 From: shimun Date: Wed, 23 Mar 2022 19:30:24 +0100 Subject: [PATCH 01/13] switch to ctap-hid-fido2 --- Cargo.lock | 1128 +++++++++++++++++++++++++++------------------------- Cargo.toml | 8 +- flake.lock | 18 +- flake.nix | 2 +- 4 files changed, 604 insertions(+), 552 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9c15de8..c56ec51 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,37 +4,82 @@ version = 3 [[package]] name = "addr2line" -version = "0.13.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ "gimli", ] [[package]] name = "adler" -version = "0.2.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aho-corasick" -version = "0.7.13" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043164d8ba5c4c3035fec9bbee8647c0261d788f3474306f93bb65901cae0e86" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" dependencies = [ "memchr", ] [[package]] name = "ansi_term" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ "winapi", ] +[[package]] +name = "anyhow" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" + +[[package]] +name = "asn1-rs" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33" +dependencies = [ + "asn1-rs-derive", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time 0.3.9", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "atty" version = "0.2.14" @@ -48,23 +93,18 @@ dependencies = [ [[package]] name = "autocfg" -version = "0.1.7" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" - -[[package]] -name = "autocfg" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.50" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46254cf2fdcdf1badb5934448c1bcbe046a56537b3987d96c51a7afc5d03f293" +checksum = "5e121dee8023ce33ab248d9ce1493df03c3b38a659b240096fcbd7048ff9c31f" dependencies = [ "addr2line", + "cc", "cfg-if", "libc", "miniz_oxide", @@ -73,14 +113,19 @@ dependencies = [ ] [[package]] -name = "bindgen" -version = "0.54.0" +name = "base64" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c0bb6167449588ff70803f4127f0684f9063097eca5016f37eb52b92c2cf36" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "bindgen" +version = "0.59.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" dependencies = [ "bitflags", "cexpr", - "cfg-if", "clang-sys", "clap", "env_logger", @@ -88,8 +133,8 @@ dependencies = [ "lazycell", "log", "peeking_take_while", - "proc-macro2 1.0.27", - "quote 1.0.7", + "proc-macro2", + "quote", "regex", "rustc-hash", "shlex", @@ -98,64 +143,48 @@ dependencies = [ [[package]] name = "bitflags" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "bstr" -version = "0.2.15" +name = "bumpalo" +version = "3.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata", - "serde", -] +checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" [[package]] name = "byteorder" -version = "1.3.4" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" - -[[package]] -name = "cbor-codec" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e083a023562b37c52837e850131a51b1154cceb9d149f41ee3d386737b140f46" -dependencies = [ - "byteorder", - "libc", -] +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "cc" -version = "1.0.59" +version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66120af515773fb005778dc07c261bd201ec8ce50bd6e7144c927753fe013381" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" [[package]] name = "cexpr" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ "nom", ] [[package]] name = "cfg-if" -version = "0.1.10" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clang-sys" -version = "0.29.3" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6837df1d5cba2397b835c8530f51723267e16abbf83892e9e5af4f0e5dd10a" +checksum = "4cc00842eed744b858222c4c9faf7243aafc6d33f92f96935263ef4d8a41ce21" dependencies = [ "glob", "libc", @@ -164,216 +193,83 @@ dependencies = [ [[package]] name = "clap" -version = "2.33.3" +version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", "bitflags", - "strsim 0.8.0", + "strsim", "textwrap", "unicode-width", "vec_map", ] [[package]] -name = "cloudabi" -version = "0.0.3" +name = "ctap-hid-fido2" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -dependencies = [ - "bitflags", -] - -[[package]] -name = "crossbeam" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69323bff1fb41c635347b8ead484a5ca6c3f11914d784170b158d8449ab07f8e" -dependencies = [ - "cfg-if", - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-epoch", - "crossbeam-queue", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-channel" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" -dependencies = [ - "crossbeam-utils", - "maybe-uninit", -] - -[[package]] -name = "crossbeam-deque" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", - "maybe-uninit", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" -dependencies = [ - "autocfg 1.0.1", - "cfg-if", - "crossbeam-utils", - "lazy_static", - "maybe-uninit", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-queue" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "maybe-uninit", -] - -[[package]] -name = "crossbeam-utils" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" -dependencies = [ - "autocfg 1.0.1", - "cfg-if", - "lazy_static", -] - -[[package]] -name = "csv" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" -dependencies = [ - "bstr", - "csv-core", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "csv-core" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" -dependencies = [ - "memchr", -] - -[[package]] -name = "ctap_hmac" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9c22d4c95aeeb4e2d41e823912d5460cfa1ebf672363eb97b32fa7c91cab89a" +checksum = "ad55f610dc4c229ee03c8ca8c79f201b57d5b75797d15c0fa415f8c48d9834bf" dependencies = [ + "anyhow", + "base64", "byteorder", - "cbor-codec", - "crossbeam", - "csv", - "derive_builder", - "failure", - "failure_derive", - "num-derive", - "num-traits", - "rand 0.6.5", + "hex 0.4.3", + "hidapi", + "num", + "pad", "ring", "rust-crypto", "serde", - "serde_derive", - "untrusted", + "serde_cbor", + "strum", + "strum_macros", + "x509-parser", ] [[package]] -name = "darling" -version = "0.10.2" +name = "data-encoding" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" +checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" + +[[package]] +name = "der-parser" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" dependencies = [ - "darling_core", - "darling_macro", + "asn1-rs", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", ] [[package]] -name = "darling_core" -version = "0.10.2" +name = "displaydoc" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" +checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ - "fnv", - "ident_case", - "proc-macro2 1.0.27", - "quote 1.0.7", - "strsim 0.9.3", - "syn 1.0.73", -] - -[[package]] -name = "darling_macro" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" -dependencies = [ - "darling_core", - "quote 1.0.7", - "syn 1.0.73", -] - -[[package]] -name = "derive_builder" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2658621297f2cf68762a6f7dc0bb7e1ff2cfd6583daef8ee0fed6f7ec468ec0" -dependencies = [ - "darling", - "derive_builder_core", - "proc-macro2 1.0.27", - "quote 1.0.7", - "syn 1.0.73", -] - -[[package]] -name = "derive_builder_core" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef" -dependencies = [ - "darling", - "proc-macro2 1.0.27", - "quote 1.0.7", - "syn 1.0.73", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "either" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56b59865bce947ac5958779cfa508f6c3b9497cc762b7e24a12d11ccde2c4f" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" [[package]] name = "env_logger" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" +checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" dependencies = [ "atty", "humantime", @@ -398,9 +294,9 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ - "proc-macro2 1.0.27", - "quote 1.0.7", - "syn 1.0.73", + "proc-macro2", + "quote", + "syn", "synstructure", ] @@ -408,9 +304,9 @@ dependencies = [ name = "fido2luks" version = "0.3.0-alpha" dependencies = [ - "ctap_hmac", + "ctap-hid-fido2", "failure", - "hex", + "hex 0.3.2", "libcryptsetup-rs", "ring", "rpassword", @@ -420,12 +316,6 @@ dependencies = [ "structopt", ] -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - [[package]] name = "fuchsia-cprng" version = "0.1.1" @@ -439,10 +329,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" [[package]] -name = "gimli" -version = "0.22.0" +name = "getrandom" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724" +checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" [[package]] name = "glob" @@ -451,19 +352,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] -name = "heck" -version = "0.3.1" +name = "half" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" dependencies = [ "unicode-segmentation", ] [[package]] -name = "hermit-abi" -version = "0.1.15" +name = "heck" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3deed196b6e7f9e44a2ae8d94225d80302d81208b1bb673fd21fe634645c85a9" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", ] @@ -475,25 +388,42 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" [[package]] -name = "humantime" -version = "1.3.0" +name = "hex" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hidapi" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2ec6bf425a5c3af047bb2a029de540a7d74cefa4761f14be67d7884dcd497b0" dependencies = [ - "quick-error", + "cc", + "libc", + "pkg-config", ] [[package]] -name = "ident_case" -version = "1.0.1" +name = "humantime" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "itoa" -version = "0.4.6" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" +checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" + +[[package]] +name = "js-sys" +version = "0.3.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" +dependencies = [ + "wasm-bindgen", +] [[package]] name = "lazy_static" @@ -509,121 +439,205 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.76" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "755456fae044e6fa1ebbbd1b3e902ae19e73097ed4ed87bb79934a867c007bc3" +checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" [[package]] name = "libcryptsetup-rs" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9042dbf4b7e4309494949696496e230c9052af64559d3441627d639898c172c" +checksum = "dccc914e228f8b36aae1173b8dba2abf62eed833e9f816ec27b0917b26655d09" dependencies = [ "either", "libc", "libcryptsetup-rs-sys", "pkg-config", - "semver", + "semver 0.11.0", "serde_json", "uuid", ] [[package]] name = "libcryptsetup-rs-sys" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b75a2b946509fb39fdb4b232c973166da14be373d09a43eb36b82f775d8244e" +checksum = "41ef25e923679fe233e3c109702829717404d1266c80d6f30236e82e7b2798dc" dependencies = [ "bindgen", "cc", "pkg-config", - "semver", + "semver 1.0.6", ] [[package]] name = "libloading" -version = "0.5.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" +checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" dependencies = [ - "cc", + "cfg-if", "winapi", ] [[package]] name = "log" -version = "0.4.11" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" dependencies = [ "cfg-if", ] -[[package]] -name = "maybe-uninit" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" - [[package]] name = "memchr" -version = "2.3.3" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] -name = "memoffset" -version = "0.5.5" +name = "minimal-lexical" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c198b026e1bbf08a937e94c6c60f9ec4a2267f5b0d2eec9c1b21b061ce2be55f" -dependencies = [ - "autocfg 1.0.1", -] +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.4.1" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d7559a8a40d0f97e1edea3220f698f78b1c5ab67532e49f68fde3910323b722" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" dependencies = [ "adler", + "autocfg", ] [[package]] name = "nom" -version = "5.1.2" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" dependencies = [ "memchr", - "version_check", + "minimal-lexical", ] [[package]] -name = "num-derive" -version = "0.2.5" +name = "num" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eafd0b45c5537c3ba526f79d3e75120036502bebacbb3f3220914067ce39dbf2" +checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "syn 0.15.44", + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", ] [[package]] name = "num-traits" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" dependencies = [ - "autocfg 1.0.1", + "autocfg", +] + +[[package]] +name = "num_threads" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aba1801fb138d8e85e11d0fc70baf4fe1cdfffda7c6cd34a854905df588e5ed0" +dependencies = [ + "libc", ] [[package]] name = "object" -version = "0.20.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab52be62400ca80aa00285d25253d7f7c437b7375c4de678f5405d3afe82ca5" +checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" +dependencies = [ + "memchr", +] + +[[package]] +name = "oid-registry" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" +dependencies = [ + "asn1-rs", +] + +[[package]] +name = "once_cell" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" + +[[package]] +name = "pad" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3" +dependencies = [ + "unicode-width", +] [[package]] name = "peeking_take_while" @@ -632,10 +646,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] -name = "pkg-config" -version = "0.3.18" +name = "pest" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +dependencies = [ + "ucd-trie", +] + +[[package]] +name = "pkg-config" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe" [[package]] name = "proc-macro-error" @@ -644,9 +667,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.27", - "quote 1.0.7", - "syn 1.0.73", + "proc-macro2", + "quote", + "syn", "version_check", ] @@ -656,51 +679,27 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.27", - "quote 1.0.7", + "proc-macro2", + "quote", "version_check", ] [[package]] name = "proc-macro2" -version = "0.4.30" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" dependencies = [ - "unicode-xid 0.1.0", -] - -[[package]] -name = "proc-macro2" -version = "1.0.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038" -dependencies = [ - "unicode-xid 0.2.1", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quote" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -dependencies = [ - "proc-macro2 0.4.30", + "unicode-xid", ] [[package]] name = "quote" -version = "1.0.7" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +checksum = "b4af2ec4714533fcdf07e886f17025ace8b997b9ce51204ee69b6da831c3da57" dependencies = [ - "proc-macro2 1.0.27", + "proc-macro2", ] [[package]] @@ -726,35 +725,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -dependencies = [ - "autocfg 0.1.7", - "libc", - "rand_chacha", - "rand_core 0.4.2", - "rand_hc", - "rand_isaac", - "rand_jitter", - "rand_os", - "rand_pcg", - "rand_xorshift", - "winapi", -] - -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -dependencies = [ - "autocfg 0.1.7", - "rand_core 0.3.1", -] - [[package]] name = "rand_core" version = "0.3.1" @@ -770,68 +740,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -dependencies = [ - "libc", - "rand_core 0.4.2", - "winapi", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -dependencies = [ - "cloudabi", - "fuchsia-cprng", - "libc", - "rand_core 0.4.2", - "rdrand", - "winapi", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -dependencies = [ - "autocfg 0.1.7", - "rand_core 0.4.2", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "rdrand" version = "0.4.0" @@ -843,38 +751,34 @@ dependencies = [ [[package]] name = "regex" -version = "1.3.9" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3780fcf44b193bc4d09f36d2a3c87b251da4a046c87795a0d35f4f927ad8e6" +checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" dependencies = [ "aho-corasick", "memchr", "regex-syntax", - "thread_local", ] -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" - [[package]] name = "regex-syntax" -version = "0.6.18" +version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "ring" -version = "0.13.5" +version = "0.16.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4db68a2e35f3497146b7e4563df7d4773a2433230c5e4b448328e31740458a" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" dependencies = [ "cc", - "lazy_static", "libc", + "once_cell", + "spin", "untrusted", + "web-sys", + "winapi", ] [[package]] @@ -897,14 +801,14 @@ dependencies = [ "libc", "rand 0.3.23", "rustc-serialize", - "time", + "time 0.1.43", ] [[package]] name = "rustc-demangle" -version = "0.1.16" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustc-hash" @@ -919,54 +823,82 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" [[package]] -name = "ryu" -version = "1.0.5" +name = "rusticata-macros" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] [[package]] -name = "scopeguard" -version = "1.1.0" +name = "rustversion" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" + +[[package]] +name = "ryu" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" [[package]] name = "semver" -version = "0.9.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" dependencies = [ "semver-parser", ] [[package]] -name = "semver-parser" -version = "0.7.0" +name = "semver" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d" + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] [[package]] name = "serde" -version = "1.0.126" +version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03" +checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" + +[[package]] +name = "serde_cbor" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" +dependencies = [ + "half", + "serde", +] [[package]] name = "serde_derive" -version = "1.0.126" +version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43" +checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" dependencies = [ - "proc-macro2 1.0.27", - "quote 1.0.7", - "syn 1.0.73", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "serde_json" -version = "1.0.57" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164eacbdb13512ec2745fb09d51fd5b22b0d65ed294a1dcf7285a360c80a675c" +checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" dependencies = [ "itoa", "ryu", @@ -975,9 +907,15 @@ dependencies = [ [[package]] name = "shlex" -version = "0.1.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" +checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "strsim" @@ -985,17 +923,11 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" -[[package]] -name = "strsim" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" - [[package]] name = "structopt" -version = "0.3.17" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cc388d94ffabf39b5ed5fadddc40147cb21e605f53db6f8f36a625d27489ac5" +checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" dependencies = [ "clap", "lazy_static", @@ -1004,56 +936,64 @@ dependencies = [ [[package]] name = "structopt-derive" -version = "0.4.10" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e2513111825077552a6751dfad9e11ce0fba07d7276a3943a037d7e93e64c5f" +checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ - "heck", + "heck 0.3.3", "proc-macro-error", - "proc-macro2 1.0.27", - "quote 1.0.7", - "syn 1.0.73", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "strum" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e96acfc1b70604b8b2f1ffa4c57e59176c7dbb05d556c71ecd2f5498a1dee7f8" + +[[package]] +name = "strum_macros" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6878079b17446e4d3eba6192bb0a2950d5b14f0ed8424b852310e5a94345d0ef" +dependencies = [ + "heck 0.4.0", + "proc-macro2", + "quote", + "rustversion", + "syn", ] [[package]] name = "syn" -version = "0.15.44" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" +checksum = "ea297be220d52398dcc07ce15a209fce436d361735ac1db700cab3b6cdfb9f54" dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "unicode-xid 0.1.0", -] - -[[package]] -name = "syn" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7" -dependencies = [ - "proc-macro2 1.0.27", - "quote 1.0.7", - "unicode-xid 0.2.1", + "proc-macro2", + "quote", + "unicode-xid", ] [[package]] name = "synstructure" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.27", - "quote 1.0.7", - "syn 1.0.73", - "unicode-xid 0.2.1", + "proc-macro2", + "quote", + "syn", + "unicode-xid", ] [[package]] name = "termcolor" -version = "1.1.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" dependencies = [ "winapi-util", ] @@ -1068,62 +1008,90 @@ dependencies = [ ] [[package]] -name = "thread_local" -version = "1.0.1" +name = "thiserror" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" dependencies = [ - "lazy_static", + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] name = "time" -version = "0.1.44" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" dependencies = [ "libc", - "wasi", "winapi", ] [[package]] -name = "unicode-segmentation" -version = "1.6.0" +name = "time" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" +checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd" +dependencies = [ + "itoa", + "libc", + "num_threads", + "time-macros", +] + +[[package]] +name = "time-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" + +[[package]] +name = "ucd-trie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" + +[[package]] +name = "unicode-segmentation" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" [[package]] name = "unicode-width" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" [[package]] name = "unicode-xid" -version = "0.1.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" - -[[package]] -name = "unicode-xid" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" [[package]] name = "untrusted" -version = "0.6.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cd1f4b4e96b46aeb8d4855db4a7a9bd96eeeb5c6a1ab54593328761642ce2f" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "uuid" -version = "0.7.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "rand 0.6.5", + "getrandom", ] [[package]] @@ -1134,22 +1102,88 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" +version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "wasm-bindgen" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" + +[[package]] +name = "web-sys" +version = "0.3.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] name = "which" -version = "3.1.1" +version = "4.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" +checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae" dependencies = [ + "either", + "lazy_static", "libc", ] @@ -1183,3 +1217,21 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "x509-parser" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64bcfe6a33d9a2d5451de520881469863bd05a095f6b6f7f2ad1a5cd8d4ea2f" +dependencies = [ + "asn1-rs", + "base64", + "data-encoding", + "der-parser", + "lazy_static", + "nom", + "oid-registry", + "rusticata-macros", + "thiserror", + "time 0.3.9", +] diff --git a/Cargo.toml b/Cargo.toml index f768f4a..917d66b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,9 +14,9 @@ categories = ["command-line-utilities"] license = "MPL-2.0" [dependencies] -ctap_hmac = { version="0.4.5", features = ["request_multiple"] } +ctap-hid-fido2 = "2.2.2" hex = "0.3.2" -ring = "0.13.5" +ring = "0.16.5" failure = "0.1.5" rpassword = "4.0.1" structopt = "0.3.2" @@ -26,9 +26,9 @@ serde_derive = "1.0.116" serde = "1.0.116" [build-dependencies] -ctap_hmac = { version="0.4.5", features = ["request_multiple"] } +ctap-hid-fido2 = "2.2.2" hex = "0.3.2" -ring = "0.13.5" +ring = "0.16.5" failure = "0.1.5" rpassword = "4.0.1" libcryptsetup-rs = "0.4.1" diff --git a/flake.lock b/flake.lock index 29d2eda..c22b945 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1639051343, - "narHash": "sha256-62qARP+5Q0GmudcpuQHJP3/yXIgmUVoHR4orD/+FAC4=", + "lastModified": 1639947939, + "narHash": "sha256-pGsM8haJadVP80GFq4xhnSpNitYNQpaXk4cnA796Cso=", "owner": "nmattia", "repo": "naersk", - "rev": "ebde51ec0eec82dc71eaca03bc24cf8eb44a3d74", + "rev": "2fc8ce9d3c025d59fee349c1f80be9785049d653", "type": "github" }, "original": { @@ -22,11 +22,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1638109994, - "narHash": "sha256-OpA37PTiPMIqoRJbufbl5rOLII7HeeGcA0yl7FoyCIE=", + "lastModified": 1647282937, + "narHash": "sha256-K8Oo6QyFCfiEWTRpQVfzcwI3YNMKlz6Tu8rr+o3rzRQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a284564b7f75ac4db73607db02076e8da9d42c9d", + "rev": "64fc73bd74f04d3e10cb4e70e1c65b92337e76db", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "utils": { "locked": { - "lastModified": 1638122382, - "narHash": "sha256-sQzZzAbvKEqN9s0bzWuYmRaA03v40gaJ4+iL1LXjaeI=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "74f7e4319258e287b0f9cb95426c9853b282730b", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index c9f1d05..8ae05fc 100644 --- a/flake.nix +++ b/flake.nix @@ -16,7 +16,7 @@ forPkgs = pkgs: let naersk-lib = naersk.lib."${pkgs.system}"; - buildInputs = with pkgs; [ cryptsetup ]; + buildInputs = with pkgs; [ cryptsetup libusb.dev ]; LIBCLANG_PATH = "${pkgs.clang.cc.lib}/lib"; nativeBuildInputs = with pkgs; [ pkgconfig From d5b043840f732653c01971bd67f74974ccf473f0 Mon Sep 17 00:00:00 2001 From: shimun Date: Sat, 26 Mar 2022 13:28:29 +0100 Subject: [PATCH 02/13] chore: migrate to ctap-hid-fido2 --- Cargo.lock | 164 ++++++++++++++++++++++---------------------------- Cargo.toml | 6 +- build.rs | 1 - src/cli.rs | 74 ++++++++++++----------- src/device.rs | 137 ++++++++++++++++++++++------------------- src/error.rs | 16 ++--- src/main.rs | 1 - 7 files changed, 200 insertions(+), 199 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c56ec51..139303a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,18 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", + "opaque-debug", +] + [[package]] name = "aho-corasick" version = "0.7.18" @@ -54,7 +66,7 @@ dependencies = [ "num-traits", "rusticata-macros", "thiserror", - "time 0.3.9", + "time", ] [[package]] @@ -147,6 +159,22 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "block-modes" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e" +dependencies = [ + "block-padding", + "cipher", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + [[package]] name = "bumpalo" version = "3.9.1" @@ -180,6 +208,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] + [[package]] name = "clang-sys" version = "1.3.1" @@ -207,20 +244,30 @@ dependencies = [ ] [[package]] -name = "ctap-hid-fido2" -version = "2.2.2" +name = "cpufeatures" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad55f610dc4c229ee03c8ca8c79f201b57d5b75797d15c0fa415f8c48d9834bf" +checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" dependencies = [ + "libc", +] + +[[package]] +name = "ctap-hid-fido2" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66d39f08d7b0949b5c82b2d3cc5d721eb47c8d42f889da8ee722b6b42db7a408" +dependencies = [ + "aes", "anyhow", "base64", + "block-modes", "byteorder", "hex 0.4.3", "hidapi", "num", "pad", "ring", - "rust-crypto", "serde", "serde_cbor", "strum", @@ -304,6 +351,7 @@ dependencies = [ name = "fido2luks" version = "0.3.0-alpha" dependencies = [ + "anyhow", "ctap-hid-fido2", "failure", "hex 0.3.2", @@ -317,16 +365,14 @@ dependencies = [ ] [[package]] -name = "fuchsia-cprng" -version = "0.1.1" +name = "generic-array" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - -[[package]] -name = "gcc" -version = "0.3.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" +checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +dependencies = [ + "typenum", + "version_check", +] [[package]] name = "getrandom" @@ -630,6 +676,12 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + [[package]] name = "pad" version = "0.1.6" @@ -702,53 +754,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "rand" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" -dependencies = [ - "libc", - "rand 0.4.6", -] - -[[package]] -name = "rand" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" -dependencies = [ - "fuchsia-cprng", - "libc", - "rand_core 0.3.1", - "rdrand", - "winapi", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "regex" version = "1.5.5" @@ -791,19 +796,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "rust-crypto" -version = "0.2.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a" -dependencies = [ - "gcc", - "libc", - "rand 0.3.23", - "rustc-serialize", - "time 0.1.43", -] - [[package]] name = "rustc-demangle" version = "0.1.21" @@ -816,12 +808,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustc-serialize" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" - [[package]] name = "rusticata-macros" version = "4.1.0" @@ -1027,16 +1013,6 @@ dependencies = [ "syn", ] -[[package]] -name = "time" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "time" version = "0.3.9" @@ -1055,6 +1031,12 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + [[package]] name = "ucd-trie" version = "0.1.3" @@ -1233,5 +1215,5 @@ dependencies = [ "oid-registry", "rusticata-macros", "thiserror", - "time 0.3.9", + "time", ] diff --git a/Cargo.toml b/Cargo.toml index 917d66b..764e12e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ categories = ["command-line-utilities"] license = "MPL-2.0" [dependencies] -ctap-hid-fido2 = "2.2.2" +ctap-hid-fido2 = "2.2.3" hex = "0.3.2" ring = "0.16.5" failure = "0.1.5" @@ -24,14 +24,16 @@ libcryptsetup-rs = "0.4.2" serde_json = "1.0.51" serde_derive = "1.0.116" serde = "1.0.116" +anyhow = "1.0.56" [build-dependencies] -ctap-hid-fido2 = "2.2.2" +ctap-hid-fido2 = "2.2.3" hex = "0.3.2" ring = "0.16.5" failure = "0.1.5" rpassword = "4.0.1" libcryptsetup-rs = "0.4.1" +anyhow = "1.0.56" structopt = "0.3.2" [profile.release] diff --git a/build.rs b/build.rs index c6bd9c0..47ea4bc 100644 --- a/build.rs +++ b/build.rs @@ -1,7 +1,6 @@ #![allow(warnings)] #[macro_use] extern crate failure; -extern crate ctap_hmac as ctap; #[path = "src/cli_args/mod.rs"] mod cli_args; diff --git a/src/cli.rs b/src/cli.rs index 1f5a2b5..c245f6e 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -4,7 +4,7 @@ use crate::util::sha256; use crate::*; pub use cli_args::Args; use cli_args::*; -use ctap::{FidoCredential, FidoErrorKind}; +use ctap_hid_fido2::public_key_credential_descriptor::PublicKeyCredentialDescriptor; use std::borrow::Cow; use std::collections::HashSet; use std::io::Write; @@ -26,31 +26,31 @@ fn derive_secret( salt: &[u8; 32], timeout: u64, pin: Option<&str>, -) -> Fido2LuksResult<([u8; 32], FidoCredential)> { +) -> Fido2LuksResult<([u8; 32], PublicKeyCredentialDescriptor)> { if credentials.is_empty() { return Err(Fido2LuksError::InsufficientCredentials); } let timeout = Duration::from_secs(timeout); let start = SystemTime::now(); - while let Ok(el) = start.elapsed() { - if el > timeout { - return Err(error::Fido2LuksError::NoAuthenticatorError); - } - if get_devices() - .map(|devices| !devices.is_empty()) - .unwrap_or(false) - { - break; - } - thread::sleep(Duration::from_millis(500)); - } + //while let Ok(el) = start.elapsed() { + // if el > timeout { + // return Err(error::Fido2LuksError::NoAuthenticatorError); + // } + // if get_devices() + // .map(|devices| !devices.is_empty()) + // .unwrap_or(false) + // { + // break; + // } + // thread::sleep(Duration::from_millis(500)); + //} let credentials = credentials .iter() - .map(|hex| FidoCredential { + .map(|hex| PublicKeyCredentialDescriptor { id: hex.0.clone(), - public_key: None, + ctype: Default::default(), }) .collect::>(); let credentials = credentials.iter().collect::>(); @@ -289,7 +289,10 @@ pub fn run_cli() -> Fido2LuksResult<()> { let other_secret = |salt_q: &str, verify: bool| - -> Fido2LuksResult<(Vec, Option)> { + -> Fido2LuksResult<( + Vec, + Option, + )> { match other_secret { OtherSecret { keyfile: Some(file), @@ -314,14 +317,15 @@ pub fn run_cli() -> Fido2LuksResult<()> { )), } }; - let secret = |q: &str, - verify: bool, - credentials: &[HexEncoded]| - -> Fido2LuksResult<([u8; 32], FidoCredential)> { - let (pin, salt) = inputs(q, verify)?; - prompt_interaction(interactive); - derive_secret(credentials, &salt, authenticator.await_time, pin.as_deref()) - }; + let secret = + |q: &str, + verify: bool, + credentials: &[HexEncoded]| + -> Fido2LuksResult<([u8; 32], PublicKeyCredentialDescriptor)> { + let (pin, salt) = inputs(q, verify)?; + prompt_interaction(interactive); + derive_secret(credentials, &salt, authenticator.await_time, pin.as_deref()) + }; // Non overlap match &args.command { Command::AddKey { @@ -501,9 +505,8 @@ pub fn run_cli() -> Fido2LuksResult<()> { Err(e) => { match e { Fido2LuksError::WrongSecret if retries > 0 => {} - Fido2LuksError::AuthenticatorError { ref cause } - if cause.kind() == FidoErrorKind::Timeout && retries > 0 => {} - + //Fido2LuksError::AuthenticatorError { ref cause } + // if cause.kind() == FidoErrorKind::Timeout && retries > 0 => {} e => return Err(e), }; retries -= 1; @@ -516,13 +519,14 @@ pub fn run_cli() -> Fido2LuksResult<()> { } } } - Command::Connected => match get_devices() { - Ok(ref devs) if !devs.is_empty() => { - println!("Found {} devices", devs.len()); - Ok(()) - } - _ => exit(1), - }, + Command::Connected => unimplemented!("Not supported by current backend"), + //Command::Connected => match get_devices() { + // Ok(ref devs) if !devs.is_empty() => { + // println!("Found {} devices", devs.len()); + // Ok(()) + // } + // _ => exit(1), + //}, Command::Token(cmd) => match cmd { TokenCommand::List { device, diff --git a/src/device.rs b/src/device.rs index e735165..119942f 100644 --- a/src/device.rs +++ b/src/device.rs @@ -1,84 +1,99 @@ use crate::error::*; use crate::util; -use ctap::{ - self, extensions::hmac::HmacExtension, request_multiple_devices, FidoAssertionRequestBuilder, - FidoCredential, FidoCredentialRequestBuilder, FidoDevice, FidoError, FidoErrorKind, -}; +use ctap_hid_fido2; +use ctap_hid_fido2::get_assertion_params; +use ctap_hid_fido2::get_assertion_with_args; +use ctap_hid_fido2::get_info; +use ctap_hid_fido2::make_credential_params; +use ctap_hid_fido2::public_key_credential_descriptor::PublicKeyCredentialDescriptor; +use ctap_hid_fido2::public_key_credential_user_entity::PublicKeyCredentialUserEntity; +use ctap_hid_fido2::GetAssertionArgsBuilder; +use ctap_hid_fido2::LibCfg; +use ctap_hid_fido2::MakeCredentialArgsBuilder; use std::time::Duration; const RP_ID: &str = "fido2luks"; +fn lib_cfg() -> LibCfg { + let mut cfg = LibCfg::init(); + cfg.enable_log = false; + cfg +} + pub fn make_credential_id( name: Option<&str>, pin: Option<&str>, -) -> Fido2LuksResult { - let mut request = FidoCredentialRequestBuilder::default().rp_id(RP_ID); - if let Some(user_name) = name { - request = request.user_name(user_name); +) -> Fido2LuksResult { + let mut req = MakeCredentialArgsBuilder::new(RP_ID, &[]) + .extensions(&[make_credential_params::Extension::HmacSecret(Some(true))]); + if let Some(pin) = pin { + req = req.pin(pin); + } else { + req = req.without_pin_and_uv(); } - let request = request.build().unwrap(); - let make_credential = |device: &mut FidoDevice| { - if let Some(pin) = pin.filter(|_| device.needs_pin()) { - device.unlock(pin)?; - } - device.make_hmac_credential(&request) - }; - Ok(request_multiple_devices( - get_devices()? - .iter_mut() - .map(|device| (device, &make_credential)), - None, - )?) + if let Some(_) = name { + req = req.rkparam(&PublicKeyCredentialUserEntity::new( + Some(b"00"), + name.clone(), + name, + )); + } + let resp = ctap_hid_fido2::make_credential_with_args(&lib_cfg(), &req.build())?; + Ok(resp.credential_descriptor) } pub fn perform_challenge<'a>( - credentials: &'a [&'a FidoCredential], + credentials: &'a [&'a PublicKeyCredentialDescriptor], salt: &[u8; 32], timeout: Duration, pin: Option<&str>, -) -> Fido2LuksResult<([u8; 32], &'a FidoCredential)> { - let request = FidoAssertionRequestBuilder::default() - .rp_id(RP_ID) - .credentials(credentials) - .build() - .unwrap(); - let get_assertion = |device: &mut FidoDevice| { - if let Some(pin) = pin.filter(|_| device.needs_pin()) { - device.unlock(pin)?; - } - device.get_hmac_assertion(&request, &util::sha256(&[&salt[..]]), None) - }; - let (credential, (secret, _)) = request_multiple_devices( - get_devices()? - .iter_mut() - .map(|device| (device, &get_assertion)), - Some(timeout), - )?; - Ok((secret, credential)) -} - -pub fn may_require_pin() -> Fido2LuksResult { - for di in ctap::get_devices()? { - if let Ok(dev) = FidoDevice::new(&di) { - if dev.needs_pin() { - return Ok(true); +) -> Fido2LuksResult<([u8; 32], &'a PublicKeyCredentialDescriptor)> { + let mut req = GetAssertionArgsBuilder::new(RP_ID, &[]).extensions(&[ + get_assertion_params::Extension::HmacSecret(Some(util::sha256(&[&salt[..]]))), + ]); + if let Some(pin) = pin { + req = req.pin(pin); + } else { + req = req.without_pin_and_uv(); + } + let resp = get_assertion_with_args(&lib_cfg(), &req.build())?; + fn dbg_hex<'a>(name: &str, vec: &'a Vec) -> &'a Vec { + dbg!((name, hex::encode(&vec))); + vec + } + let cred_used2 = credentials.iter().copied().find(|cred| { + resp.iter() + .any(|att| dbg_hex("att", &att.credential_id) == dbg_hex("cred", &cred.id)) + }); + for att in resp { + for ext in att.extensions.iter() { + match ext { + get_assertion_params::Extension::HmacSecret(Some(secret)) => { + dbg!(cred_used2); + //TODO: eliminate unwrap + let cred_used = credentials + .iter() + .copied() + .find(|cred| { + dbg_hex("att", &att.credential_id) == dbg_hex("cred", &cred.id) + }) + .unwrap(); + return Ok((secret.clone(), cred_used)); + } + _ => continue, } } } - Ok(false) + //TODO: create fitting error + Err(Fido2LuksError::WrongSecret) } -pub fn get_devices() -> Fido2LuksResult> { - let mut devices = Vec::with_capacity(2); - for di in ctap::get_devices()? { - match FidoDevice::new(&di) { - Err(e) => match e.kind() { - FidoErrorKind::ParseCtap | FidoErrorKind::DeviceUnsupported => (), - err => return Err(FidoError::from(err).into()), - }, - Ok(dev) => devices.push(dev), - } - } - Ok(devices) +pub fn may_require_pin() -> Fido2LuksResult { + let info = get_info(&lib_cfg())?; + let needs_pin = info + .options + .iter() + .any(|(name, val)| &name[..] == "clientPin" && *val); + Ok(needs_pin) } diff --git a/src/error.rs b/src/error.rs index f451f1c..995c495 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,4 +1,4 @@ -use ctap::FidoError; +use anyhow; use libcryptsetup_rs::LibcryptErr; use std::io; use std::io::ErrorKind; @@ -14,7 +14,7 @@ pub enum Fido2LuksError { #[fail(display = "unable to read keyfile: {}", cause)] KeyfileError { cause: io::Error }, #[fail(display = "authenticator error: {}", cause)] - AuthenticatorError { cause: ctap::FidoError }, + AuthenticatorError { cause: anyhow::Error }, #[fail(display = "no authenticator found, please ensure your device is plugged in")] NoAuthenticatorError, #[fail(display = " {}", cause)] @@ -35,6 +35,12 @@ pub enum Fido2LuksError { InsufficientCredentials, } +impl From for Fido2LuksError { + fn from(cause: anyhow::Error) -> Self { + Fido2LuksError::AuthenticatorError { cause } + } +} + impl Fido2LuksError { pub fn exit_code(&self) -> i32 { use Fido2LuksError::*; @@ -91,12 +97,6 @@ impl From for Fido2LuksError { } } -impl From for Fido2LuksError { - fn from(e: FidoError) -> Self { - AuthenticatorError { cause: e } - } -} - impl From for Fido2LuksError { fn from(e: LibcryptErr) -> Self { match e { diff --git a/src/main.rs b/src/main.rs index cc5f42e..92d8d09 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,5 @@ #[macro_use] extern crate failure; -extern crate ctap_hmac as ctap; #[macro_use] extern crate serde_derive; use crate::cli::*; From ca822939766828c2584a1924a55452b062f93349 Mon Sep 17 00:00:00 2001 From: shimun Date: Tue, 29 Mar 2022 15:58:16 +0200 Subject: [PATCH 03/13] fix: reintroduce connected command --- src/cli.rs | 15 +++++++-------- src/device.rs | 23 +++++++++++++---------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index c245f6e..6ebb2f7 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -519,14 +519,13 @@ pub fn run_cli() -> Fido2LuksResult<()> { } } } - Command::Connected => unimplemented!("Not supported by current backend"), - //Command::Connected => match get_devices() { - // Ok(ref devs) if !devs.is_empty() => { - // println!("Found {} devices", devs.len()); - // Ok(()) - // } - // _ => exit(1), - //}, + Command::Connected => match get_devices() { + Ok(ref devs) if !devs.is_empty() => { + println!("Found {} devices", devs.len()); + Ok(()) + } + _ => exit(1), + }, Command::Token(cmd) => match cmd { TokenCommand::List { device, diff --git a/src/device.rs b/src/device.rs index 119942f..4cfa5b7 100644 --- a/src/device.rs +++ b/src/device.rs @@ -2,8 +2,10 @@ use crate::error::*; use crate::util; use ctap_hid_fido2; +use ctap_hid_fido2::HidParam; use ctap_hid_fido2::get_assertion_params; use ctap_hid_fido2::get_assertion_with_args; +use ctap_hid_fido2::get_fidokey_devices; use ctap_hid_fido2::get_info; use ctap_hid_fido2::make_credential_params; use ctap_hid_fido2::public_key_credential_descriptor::PublicKeyCredentialDescriptor; @@ -49,34 +51,31 @@ pub fn perform_challenge<'a>( timeout: Duration, pin: Option<&str>, ) -> Fido2LuksResult<([u8; 32], &'a PublicKeyCredentialDescriptor)> { + if credentials.is_empty() { + return Err(Fido2LuksError::InsufficientCredentials); + } let mut req = GetAssertionArgsBuilder::new(RP_ID, &[]).extensions(&[ get_assertion_params::Extension::HmacSecret(Some(util::sha256(&[&salt[..]]))), ]); + for cred in credentials { + req = req.add_credential_id(&cred.id); + } if let Some(pin) = pin { req = req.pin(pin); } else { req = req.without_pin_and_uv(); } let resp = get_assertion_with_args(&lib_cfg(), &req.build())?; - fn dbg_hex<'a>(name: &str, vec: &'a Vec) -> &'a Vec { - dbg!((name, hex::encode(&vec))); - vec - } - let cred_used2 = credentials.iter().copied().find(|cred| { - resp.iter() - .any(|att| dbg_hex("att", &att.credential_id) == dbg_hex("cred", &cred.id)) - }); for att in resp { for ext in att.extensions.iter() { match ext { get_assertion_params::Extension::HmacSecret(Some(secret)) => { - dbg!(cred_used2); //TODO: eliminate unwrap let cred_used = credentials .iter() .copied() .find(|cred| { - dbg_hex("att", &att.credential_id) == dbg_hex("cred", &cred.id) + att.credential_id == cred.id }) .unwrap(); return Ok((secret.clone(), cred_used)); @@ -97,3 +96,7 @@ pub fn may_require_pin() -> Fido2LuksResult { .any(|(name, val)| &name[..] == "clientPin" && *val); Ok(needs_pin) } + +pub fn get_devices() -> Fido2LuksResult> { + Ok(get_fidokey_devices()) +} From 4e986b8f059eb3665e27e5d4d8c76d3d4d98b7ba Mon Sep 17 00:00:00 2001 From: shimun Date: Tue, 29 Mar 2022 15:58:51 +0200 Subject: [PATCH 04/13] removed: keepalive msg --- src/device.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/device.rs b/src/device.rs index 4cfa5b7..5c9b324 100644 --- a/src/device.rs +++ b/src/device.rs @@ -20,6 +20,7 @@ const RP_ID: &str = "fido2luks"; fn lib_cfg() -> LibCfg { let mut cfg = LibCfg::init(); cfg.enable_log = false; + cfg.keep_alive_msg = String::new(); cfg } From 7daa5a3fdb32eaae9e159a58672eb1bca5a01dbd Mon Sep 17 00:00:00 2001 From: shimun Date: Mon, 4 Apr 2022 10:57:57 +0200 Subject: [PATCH 05/13] use develop version --- Cargo.lock | 9 ++++--- Cargo.toml | 8 +++++-- src/cli.rs | 1 - src/device.rs | 66 +++++++++++++++++++++++++++++++++++---------------- 4 files changed, 56 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 139303a..c4b76fd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -254,9 +254,8 @@ dependencies = [ [[package]] name = "ctap-hid-fido2" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d39f08d7b0949b5c82b2d3cc5d721eb47c8d42f889da8ee722b6b42db7a408" +version = "3.0.0" +source = "git+https://github.com/gebogebogebo/ctap-hid-fido2.git?branch=develop#a7b108e1fcafd38a10f990cf28a41fc06b27cd15" dependencies = [ "aes", "anyhow", @@ -747,9 +746,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4af2ec4714533fcdf07e886f17025ace8b997b9ce51204ee69b6da831c3da57" +checksum = "632d02bff7f874a36f33ea8bb416cd484b90cc66c1194b1a1110d067a7013f58" dependencies = [ "proc-macro2", ] diff --git a/Cargo.toml b/Cargo.toml index 764e12e..5f89a16 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,9 @@ categories = ["command-line-utilities"] license = "MPL-2.0" [dependencies] -ctap-hid-fido2 = "2.2.3" +# ctap-hid-fido2 = "2.2.3" +# ctap-hid-fido2 = { path = "../ctap-hid-fido2" } +ctap-hid-fido2 = { git = "https://github.com/gebogebogebo/ctap-hid-fido2.git", branch = "develop" } hex = "0.3.2" ring = "0.16.5" failure = "0.1.5" @@ -27,7 +29,9 @@ serde = "1.0.116" anyhow = "1.0.56" [build-dependencies] -ctap-hid-fido2 = "2.2.3" +# ctap-hid-fido2 = "2.2.3" +# ctap-hid-fido2 = { path = "../ctap-hid-fido2" } +ctap-hid-fido2 = { git = "https://github.com/gebogebogebo/ctap-hid-fido2.git", branch = "develop" } hex = "0.3.2" ring = "0.16.5" failure = "0.1.5" diff --git a/src/cli.rs b/src/cli.rs index 6ebb2f7..400a596 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -11,7 +11,6 @@ use std::io::Write; use std::iter::FromIterator; use std::path::Path; use std::str::FromStr; -use std::thread; use std::time::Duration; use std::time::SystemTime; use structopt::clap::Shell; diff --git a/src/device.rs b/src/device.rs index 5c9b324..2a70bc2 100644 --- a/src/device.rs +++ b/src/device.rs @@ -2,17 +2,16 @@ use crate::error::*; use crate::util; use ctap_hid_fido2; -use ctap_hid_fido2::HidParam; -use ctap_hid_fido2::get_assertion_params; -use ctap_hid_fido2::get_assertion_with_args; +use ctap_hid_fido2::fidokey::get_assertion::get_assertion_params; +use ctap_hid_fido2::fidokey::make_credential::make_credential_params; +use ctap_hid_fido2::fidokey::GetAssertionArgsBuilder; +use ctap_hid_fido2::fidokey::MakeCredentialArgsBuilder; use ctap_hid_fido2::get_fidokey_devices; -use ctap_hid_fido2::get_info; -use ctap_hid_fido2::make_credential_params; use ctap_hid_fido2::public_key_credential_descriptor::PublicKeyCredentialDescriptor; use ctap_hid_fido2::public_key_credential_user_entity::PublicKeyCredentialUserEntity; -use ctap_hid_fido2::GetAssertionArgsBuilder; +use ctap_hid_fido2::FidoKeyHid; +use ctap_hid_fido2::HidInfo; use ctap_hid_fido2::LibCfg; -use ctap_hid_fido2::MakeCredentialArgsBuilder; use std::time::Duration; const RP_ID: &str = "fido2luks"; @@ -42,14 +41,23 @@ pub fn make_credential_id( name, )); } - let resp = ctap_hid_fido2::make_credential_with_args(&lib_cfg(), &req.build())?; - Ok(resp.credential_descriptor) + let devices = get_devices()?; + let mut err: Option = None; + let req = req.build(); + for dev in devices { + let handle = FidoKeyHid::new(&vec![dev.param], &lib_cfg()).unwrap(); + match handle.make_credential_with_args(&req) { + Ok(resp) => return Ok(resp.credential_descriptor), + Err(e) => err = Some(e.into()), + } + } + Err(err.unwrap_or(Fido2LuksError::NoAuthenticatorError)) } pub fn perform_challenge<'a>( credentials: &'a [&'a PublicKeyCredentialDescriptor], salt: &[u8; 32], - timeout: Duration, + _timeout: Duration, pin: Option<&str>, ) -> Fido2LuksResult<([u8; 32], &'a PublicKeyCredentialDescriptor)> { if credentials.is_empty() { @@ -66,7 +74,7 @@ pub fn perform_challenge<'a>( } else { req = req.without_pin_and_uv(); } - let resp = get_assertion_with_args(&lib_cfg(), &req.build())?; + let process_response = |resp: Vec| -> Fido2LuksResult<([u8; 32], &'a PublicKeyCredentialDescriptor)> { for att in resp { for ext in att.extensions.iter() { match ext { @@ -84,20 +92,38 @@ pub fn perform_challenge<'a>( _ => continue, } } + } + Err(Fido2LuksError::WrongSecret) + }; + + let devices = get_devices()?; + let mut err: Option = None; + let req = req.build(); + for dev in devices { + let handle = FidoKeyHid::new(&vec![dev.param], &lib_cfg()).unwrap(); + match handle.get_assertion_with_args(&req) { + Ok(resp) => return process_response(resp), + Err(e) => err = Some(e.into()), + } } - //TODO: create fitting error - Err(Fido2LuksError::WrongSecret) + Err(err.unwrap_or(Fido2LuksError::NoAuthenticatorError)) } pub fn may_require_pin() -> Fido2LuksResult { - let info = get_info(&lib_cfg())?; - let needs_pin = info - .options - .iter() - .any(|(name, val)| &name[..] == "clientPin" && *val); - Ok(needs_pin) + for dev in get_devices()? { + let dev = FidoKeyHid::new(&vec![dev.param], &lib_cfg()).unwrap(); + let info = dev.get_info()?; + let needs_pin = info + .options + .iter() + .any(|(name, val)| &name[..] == "clientPin" && *val); + if needs_pin { + return Ok(true); + } + } + Ok(false) } -pub fn get_devices() -> Fido2LuksResult> { +pub fn get_devices() -> Fido2LuksResult> { Ok(get_fidokey_devices()) } From 581e1780d1bd02c0fbab9566da85a28de1ce5915 Mon Sep 17 00:00:00 2001 From: shimun Date: Sun, 10 Apr 2022 17:15:50 +0200 Subject: [PATCH 06/13] update ctap-hid --- Cargo.lock | 60 +++++++++++++++++++++++++-------------------------- src/cli.rs | 12 +++++++++-- src/device.rs | 14 +++++++----- 3 files changed, 49 insertions(+), 37 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c4b76fd..01cc4ac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -255,7 +255,7 @@ dependencies = [ [[package]] name = "ctap-hid-fido2" version = "3.0.0" -source = "git+https://github.com/gebogebogebo/ctap-hid-fido2.git?branch=develop#a7b108e1fcafd38a10f990cf28a41fc06b27cd15" +source = "git+https://github.com/gebogebogebo/ctap-hid-fido2.git?branch=develop#a13d7174a5936f4ea3209b0d1341a2404c6f8302" dependencies = [ "aes", "anyhow", @@ -375,9 +375,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77" +checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" dependencies = [ "cfg-if", "libc", @@ -440,9 +440,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hidapi" -version = "1.3.4" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ec6bf425a5c3af047bb2a029de540a7d74cefa4761f14be67d7884dcd497b0" +checksum = "253bfb01a7a31d71212dc3e920540546fa4a4fe08e2d87fc3299c42bae7ee2f9" dependencies = [ "cc", "libc", @@ -463,9 +463,9 @@ checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" [[package]] name = "js-sys" -version = "0.3.56" +version = "0.3.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" +checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" dependencies = [ "wasm-bindgen", ] @@ -484,9 +484,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" +checksum = "ec647867e2bf0772e28c8bcde4f0d19a9216916e890543b5a03ed8ef27b8f259" [[package]] name = "libcryptsetup-rs" @@ -512,7 +512,7 @@ dependencies = [ "bindgen", "cc", "pkg-config", - "semver 1.0.6", + "semver 1.0.7", ] [[package]] @@ -707,9 +707,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" [[package]] name = "proc-macro-error" @@ -737,9 +737,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" dependencies = [ "unicode-xid", ] @@ -839,9 +839,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d" +checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4" [[package]] name = "semver-parser" @@ -953,9 +953,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea297be220d52398dcc07ce15a209fce436d361735ac1db700cab3b6cdfb9f54" +checksum = "b683b2b825c8eef438b77c36a06dc262294da3d5a5813fac20da149241dcd44d" dependencies = [ "proc-macro2", "quote", @@ -1095,9 +1095,9 @@ checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" [[package]] name = "wasm-bindgen" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" +checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1105,9 +1105,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" +checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" dependencies = [ "bumpalo", "lazy_static", @@ -1120,9 +1120,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" +checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1130,9 +1130,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" +checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" dependencies = [ "proc-macro2", "quote", @@ -1143,15 +1143,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.79" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" +checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" [[package]] name = "web-sys" -version = "0.3.56" +version = "0.3.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" +checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/src/cli.rs b/src/cli.rs index 400a596..26653e9 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -181,7 +181,7 @@ pub fn run_cli() -> Fido2LuksResult<()> { } else { None }; - let cred = make_credential_id(Some(name.as_ref()), pin)?; + let cred = make_credential_id(Some(name.as_ref()), pin, &[])?; println!("{}", hex::encode(&cred.id)); Ok(()) } @@ -332,7 +332,14 @@ pub fn run_cli() -> Fido2LuksResult<()> { generate_credential, .. } => { - let (existing_secret, _) = other_secret("Current password", false)?; + let (existing_secret, existing_credential) = + other_secret("Current password", false)?; + let excluded_credential = existing_credential.as_ref(); + let exclude_list = excluded_credential + .as_ref() + .map(core::slice::from_ref) + .unwrap_or_default(); + existing_credential.iter().for_each(|cred| log(&|| format!("using credential to unlock container: {}", hex::encode(&cred.id)))); let (new_secret, cred) = if *generate_credential && luks2 { let cred = make_credential_id( Some(derive_credential_name(luks.device.as_path()).as_str()), @@ -343,6 +350,7 @@ pub fn run_cli() -> Fido2LuksResult<()> { None }) .as_deref(), + dbg!(exclude_list), )?; log(&|| { format!( diff --git a/src/device.rs b/src/device.rs index 2a70bc2..8045fbd 100644 --- a/src/device.rs +++ b/src/device.rs @@ -2,6 +2,7 @@ use crate::error::*; use crate::util; use ctap_hid_fido2; +use ctap_hid_fido2::FidoKeyHidFactory; use ctap_hid_fido2::fidokey::get_assertion::get_assertion_params; use ctap_hid_fido2::fidokey::make_credential::make_credential_params; use ctap_hid_fido2::fidokey::GetAssertionArgsBuilder; @@ -9,7 +10,6 @@ use ctap_hid_fido2::fidokey::MakeCredentialArgsBuilder; use ctap_hid_fido2::get_fidokey_devices; use ctap_hid_fido2::public_key_credential_descriptor::PublicKeyCredentialDescriptor; use ctap_hid_fido2::public_key_credential_user_entity::PublicKeyCredentialUserEntity; -use ctap_hid_fido2::FidoKeyHid; use ctap_hid_fido2::HidInfo; use ctap_hid_fido2::LibCfg; use std::time::Duration; @@ -26,6 +26,7 @@ fn lib_cfg() -> LibCfg { pub fn make_credential_id( name: Option<&str>, pin: Option<&str>, + exclude: &[&PublicKeyCredentialDescriptor], ) -> Fido2LuksResult { let mut req = MakeCredentialArgsBuilder::new(RP_ID, &[]) .extensions(&[make_credential_params::Extension::HmacSecret(Some(true))]); @@ -34,6 +35,9 @@ pub fn make_credential_id( } else { req = req.without_pin_and_uv(); } + for cred in exclude { + req = req.exclude_authenticator(cred.id.as_ref()); + } if let Some(_) = name { req = req.rkparam(&PublicKeyCredentialUserEntity::new( Some(b"00"), @@ -45,7 +49,7 @@ pub fn make_credential_id( let mut err: Option = None; let req = req.build(); for dev in devices { - let handle = FidoKeyHid::new(&vec![dev.param], &lib_cfg()).unwrap(); + let handle = FidoKeyHidFactory::create_by_params(&vec![dev.param], &lib_cfg()).unwrap(); match handle.make_credential_with_args(&req) { Ok(resp) => return Ok(resp.credential_descriptor), Err(e) => err = Some(e.into()), @@ -100,7 +104,7 @@ pub fn perform_challenge<'a>( let mut err: Option = None; let req = req.build(); for dev in devices { - let handle = FidoKeyHid::new(&vec![dev.param], &lib_cfg()).unwrap(); + let handle = FidoKeyHidFactory::create_by_params(&vec![dev.param], &lib_cfg()).unwrap(); match handle.get_assertion_with_args(&req) { Ok(resp) => return process_response(resp), Err(e) => err = Some(e.into()), @@ -111,8 +115,8 @@ pub fn perform_challenge<'a>( pub fn may_require_pin() -> Fido2LuksResult { for dev in get_devices()? { - let dev = FidoKeyHid::new(&vec![dev.param], &lib_cfg()).unwrap(); - let info = dev.get_info()?; + let handle = FidoKeyHidFactory::create_by_params(&vec![dev.param], &lib_cfg()).unwrap(); + let info = handle.get_info()?; let needs_pin = info .options .iter() From 2255f224a571363de5ad21b44a29bd345b450d56 Mon Sep 17 00:00:00 2001 From: shimun Date: Mon, 11 Apr 2022 14:36:07 +0200 Subject: [PATCH 07/13] bump version --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 01cc4ac..93cccfb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -348,7 +348,7 @@ dependencies = [ [[package]] name = "fido2luks" -version = "0.3.0-alpha" +version = "0.3.1-alpha" dependencies = [ "anyhow", "ctap-hid-fido2", diff --git a/Cargo.toml b/Cargo.toml index 5f89a16..510cf5f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fido2luks" -version = "0.3.0-alpha" +version = "0.3.1-alpha" authors = ["shimunn "] edition = "2018" From 1f0d555cea1a6dd55bb20bbd9ffb41c23b4954e6 Mon Sep 17 00:00:00 2001 From: shimun Date: Fri, 15 Apr 2022 17:06:11 +0200 Subject: [PATCH 08/13] added: comment field to luks header data --- src/cli.rs | 26 +++++++++++++++++++++++--- src/cli_args/mod.rs | 6 ++++++ src/luks.rs | 27 +++++++++++++++++++++------ 3 files changed, 50 insertions(+), 9 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 26653e9..c4239de 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -330,6 +330,7 @@ pub fn run_cli() -> Fido2LuksResult<()> { Command::AddKey { exclusive, generate_credential, + comment, .. } => { let (existing_secret, existing_credential) = @@ -339,7 +340,14 @@ pub fn run_cli() -> Fido2LuksResult<()> { .as_ref() .map(core::slice::from_ref) .unwrap_or_default(); - existing_credential.iter().for_each(|cred| log(&|| format!("using credential to unlock container: {}", hex::encode(&cred.id)))); + existing_credential.iter().for_each(|cred| { + log(&|| { + format!( + "using credential to unlock container: {}", + hex::encode(&cred.id) + ) + }) + }); let (new_secret, cred) = if *generate_credential && luks2 { let cred = make_credential_id( Some(derive_credential_name(luks.device.as_path()).as_str()), @@ -372,6 +380,7 @@ pub fn run_cli() -> Fido2LuksResult<()> { Some(&cred.id[..]) .filter(|_| !luks.disable_token || *generate_credential) .filter(|_| luks2), + comment.as_deref().map(String::from), )?; if *exclusive { let destroyed = luks_dev.remove_keyslots(&[added_slot])?; @@ -407,6 +416,7 @@ pub fn run_cli() -> Fido2LuksResult<()> { .filter(|_| !luks.disable_token) .filter(|_| luks2) .map(|cred| &cred.id[..]), + None, ) } else { let slot = luks_dev.replace_key( @@ -554,8 +564,13 @@ pub fn run_cli() -> Fido2LuksResult<()> { continue; } println!( - "{}:\n\tSlots: {}\n\tCredentials: {}", + "{}{}:\n\tSlots: {}\n\tCredentials: {}", id, + token + .comment + .as_deref() + .map(|comment| format!(" - {}", comment)) + .unwrap_or_default(), if token.keyslots.is_empty() { "None".into() } else { @@ -581,6 +596,7 @@ pub fn run_cli() -> Fido2LuksResult<()> { TokenCommand::Add { device, credentials, + comment, slot, } => { let mut dev = LuksDevice::load(device)?; @@ -592,7 +608,11 @@ pub fn run_cli() -> Fido2LuksResult<()> { } } let count = if tokens.is_empty() { - dev.add_token(&Fido2LuksToken::with_credentials(&credentials.0, *slot))?; + dev.add_token(&Fido2LuksToken::with_credentials( + &credentials.0, + *slot, + comment.as_deref().map(String::from), + ))?; 1 } else { tokens.len() diff --git a/src/cli_args/mod.rs b/src/cli_args/mod.rs index b884939..618b8f2 100644 --- a/src/cli_args/mod.rs +++ b/src/cli_args/mod.rs @@ -189,6 +189,9 @@ pub enum Command { luks: LuksParameters, #[structopt(flatten)] credentials: Credentials, + /// Comment to be associated with this credential + #[structopt(long = "comment")] + comment: Option, #[structopt(flatten)] authenticator: AuthenticatorParameters, #[structopt(flatten)] @@ -295,6 +298,9 @@ pub enum TokenCommand { long = "creds" )] credentials: CommaSeparated, + /// Comment to be associated with this credential + #[structopt(long = "comment")] + comment: Option, /// Slot to which the credentials will be added #[structopt(long = "slot", env = "FIDO2LUKS_DEVICE_SLOT")] slot: u32, diff --git a/src/luks.rs b/src/luks.rs index 5ad6d5c..dc14d6a 100644 --- a/src/luks.rs +++ b/src/luks.rs @@ -142,6 +142,7 @@ impl LuksDevice { old_secret: &[u8], iteration_time: Option, credential_id: Option<&[u8]>, + comment: Option, ) -> Fido2LuksResult { if let Some(millis) = iteration_time { self.device.settings_handle().set_iteration_time(millis) @@ -152,7 +153,7 @@ impl LuksDevice { .add_by_passphrase(None, old_secret, secret)?; if let Some(id) = credential_id { self.device.token_handle().json_set(TokenInput::AddToken( - &serde_json::to_value(&Fido2LuksToken::new(id, slot)).unwrap(), + &serde_json::to_value(&Fido2LuksToken::new(id, slot, comment)).unwrap(), ))?; } @@ -216,9 +217,18 @@ impl LuksDevice { )? as u32; if let Some(id) = credential_id { if self.is_luks2()? { - let token = self.find_token(slot)?.map(|(t, _)| t); - let json = serde_json::to_value(&Fido2LuksToken::new(id, slot)).unwrap(); - if let Some(token) = token { + let (token_id, token_data) = match self.find_token(slot)? { + Some((id, data)) => (Some(id), Some(data)), + _ => (None, None), + }; + let json = serde_json::to_value(&Fido2LuksToken::new( + id, + slot, + // retain comment on replace + token_data.map(|data| data.comment).flatten(), + )) + .unwrap(); + if let Some(token) = token_id { self.device .token_handle() .json_set(TokenInput::ReplaceToken(token, &json))?; @@ -315,16 +325,19 @@ pub struct Fido2LuksToken { pub type_: String, pub credential: HashSet, pub keyslots: HashSet, + #[serde(skip_serializing_if = "Option::is_none")] + pub comment: Option, } impl Fido2LuksToken { - pub fn new(credential_id: impl AsRef<[u8]>, slot: u32) -> Self { - Self::with_credentials(std::iter::once(credential_id), slot) + pub fn new(credential_id: impl AsRef<[u8]>, slot: u32, comment: Option) -> Self { + Self::with_credentials(std::iter::once(credential_id), slot, comment) } pub fn with_credentials, B: AsRef<[u8]>>( credentials: I, slot: u32, + comment: Option, ) -> Self { Self { credential: credentials @@ -332,6 +345,7 @@ impl Fido2LuksToken { .map(|cred| hex::encode(cred.as_ref())) .collect(), keyslots: vec![slot.to_string()].into_iter().collect(), + comment, ..Default::default() } } @@ -346,6 +360,7 @@ impl Default for Fido2LuksToken { type_: Self::default_type().into(), credential: HashSet::new(), keyslots: HashSet::new(), + comment: None, } } } From b566af46f7a09251b75494f2eb5340a2a45be564 Mon Sep 17 00:00:00 2001 From: shimun Date: Wed, 15 Jun 2022 01:16:06 +0200 Subject: [PATCH 09/13] fix: prevent creation of rk credential --- src/cli.rs | 3 ++- src/cli_args/mod.rs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index c4239de..c620eba 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -181,7 +181,8 @@ pub fn run_cli() -> Fido2LuksResult<()> { } else { None }; - let cred = make_credential_id(Some(name.as_ref()), pin, &[])?; + let cred = + make_credential_id(Some(name.as_str()).filter(|name| name.len() > 0), pin, &[])?; println!("{}", hex::encode(&cred.id)); Ok(()) } diff --git a/src/cli_args/mod.rs b/src/cli_args/mod.rs index 618b8f2..c36df7d 100644 --- a/src/cli_args/mod.rs +++ b/src/cli_args/mod.rs @@ -257,7 +257,7 @@ pub enum Command { #[structopt(flatten)] authenticator: AuthenticatorParameters, /// Name to be displayed on the authenticator display - #[structopt(env = "FIDO2LUKS_CREDENTIAL_NAME", default_value = "fido2luks")] + #[structopt(env = "FIDO2LUKS_CREDENTIAL_NAME", default_value = "")] name: String, }, /// Check if an authenticator is connected From fce6ea2e31ee702ae6a873014a0179091638f8b7 Mon Sep 17 00:00:00 2001 From: shimun Date: Thu, 16 Jun 2022 17:24:40 +0200 Subject: [PATCH 10/13] fix: use patched ctap-hid crate --- Cargo.lock | 185 ++++++++++++++++++++++++++------------------------ Cargo.toml | 4 +- src/device.rs | 4 +- 3 files changed, 99 insertions(+), 94 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 93cccfb..ae6cf98 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -49,9 +49,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" +checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" [[package]] name = "asn1-rs" @@ -111,9 +111,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e121dee8023ce33ab248d9ce1493df03c3b38a659b240096fcbd7048ff9c31f" +checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61" dependencies = [ "addr2line", "cc", @@ -177,9 +177,9 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "bumpalo" -version = "3.9.1" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" +checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" [[package]] name = "byteorder" @@ -219,9 +219,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.3.1" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cc00842eed744b858222c4c9faf7243aafc6d33f92f96935263ef4d8a41ce21" +checksum = "5a050e2153c5be08febd6734e29298e844fdb0fa21aeddd63b4eb7baa106c69b" dependencies = [ "glob", "libc", @@ -254,8 +254,8 @@ dependencies = [ [[package]] name = "ctap-hid-fido2" -version = "3.0.0" -source = "git+https://github.com/gebogebogebo/ctap-hid-fido2.git?branch=develop#a13d7174a5936f4ea3209b0d1341a2404c6f8302" +version = "3.3.1" +source = "git+https://github.com/shimunn/ctap-hid-fido2.git?branch=user_entity#ad95bc3b389e2b9a332b9e9514831a59f964c131" dependencies = [ "aes", "anyhow", @@ -375,9 +375,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ "cfg-if", "libc", @@ -440,9 +440,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hidapi" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "253bfb01a7a31d71212dc3e920540546fa4a4fe08e2d87fc3299c42bae7ee2f9" +checksum = "38b1717343691998deb81766bfcd1dce6df0d5d6c37070b5a3de2bb6d39f7822" dependencies = [ "cc", "libc", @@ -457,15 +457,15 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "itoa" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" [[package]] name = "js-sys" -version = "0.3.57" +version = "0.3.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" +checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" dependencies = [ "wasm-bindgen", ] @@ -484,9 +484,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.122" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec647867e2bf0772e28c8bcde4f0d19a9216916e890543b5a03ed8ef27b8f259" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" [[package]] name = "libcryptsetup-rs" @@ -512,7 +512,7 @@ dependencies = [ "bindgen", "cc", "pkg-config", - "semver 1.0.7", + "semver 1.0.10", ] [[package]] @@ -527,18 +527,18 @@ dependencies = [ [[package]] name = "log" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if", ] [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "minimal-lexical" @@ -548,12 +548,11 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.4.4" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" dependencies = [ "adler", - "autocfg", ] [[package]] @@ -593,18 +592,18 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +checksum = "97fbc387afefefd5e9e39493299f3069e14a140dd34dc19b4c1c1a8fddb6a790" dependencies = [ "num-traits", ] [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", "num-traits", @@ -612,9 +611,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" dependencies = [ "autocfg", "num-integer", @@ -635,27 +634,27 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", ] [[package]] name = "num_threads" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aba1801fb138d8e85e11d0fc70baf4fe1cdfffda7c6cd34a854905df588e5ed0" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" dependencies = [ "libc", ] [[package]] name = "object" -version = "0.27.1" +version = "0.28.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" +checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424" dependencies = [ "memchr", ] @@ -671,9 +670,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.10.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" +checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" [[package]] name = "opaque-debug" @@ -737,27 +736,27 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.37" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" +checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] name = "quote" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632d02bff7f874a36f33ea8bb416cd484b90cc66c1194b1a1110d067a7013f58" +checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" dependencies = [ "proc-macro2", ] [[package]] name = "regex" -version = "1.5.5" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" +checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1" dependencies = [ "aho-corasick", "memchr", @@ -766,9 +765,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.6.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" [[package]] name = "ring" @@ -824,9 +823,9 @@ checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" [[package]] name = "ryu" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" [[package]] name = "semver" @@ -839,9 +838,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.7" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4" +checksum = "a41d061efea015927ac527063765e73601444cdc344ba855bc7bd44578b25e1c" [[package]] name = "semver-parser" @@ -854,9 +853,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" [[package]] name = "serde_cbor" @@ -870,9 +869,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" dependencies = [ "proc-macro2", "quote", @@ -881,9 +880,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.79" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" dependencies = [ "itoa", "ryu", @@ -934,15 +933,15 @@ dependencies = [ [[package]] name = "strum" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96acfc1b70604b8b2f1ffa4c57e59176c7dbb05d556c71ecd2f5498a1dee7f8" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" [[package]] name = "strum_macros" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6878079b17446e4d3eba6192bb0a2950d5b14f0ed8424b852310e5a94345d0ef" +checksum = "9550962e7cf70d9980392878dfaf1dcc3ece024f4cf3bf3c46b978d0bad61d6c" dependencies = [ "heck 0.4.0", "proc-macro2", @@ -953,13 +952,13 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.91" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b683b2b825c8eef438b77c36a06dc262294da3d5a5813fac20da149241dcd44d" +checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] @@ -994,18 +993,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ "proc-macro2", "quote", @@ -1042,6 +1041,12 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +[[package]] +name = "unicode-ident" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" + [[package]] name = "unicode-segmentation" version = "1.9.0" @@ -1056,9 +1061,9 @@ checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" [[package]] name = "unicode-xid" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" [[package]] name = "untrusted" @@ -1089,15 +1094,15 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" +checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1105,9 +1110,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" +checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" dependencies = [ "bumpalo", "lazy_static", @@ -1120,9 +1125,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" +checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1130,9 +1135,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" +checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" dependencies = [ "proc-macro2", "quote", @@ -1143,15 +1148,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" +checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" [[package]] name = "web-sys" -version = "0.3.57" +version = "0.3.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" +checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" dependencies = [ "js-sys", "wasm-bindgen", @@ -1201,9 +1206,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "x509-parser" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64bcfe6a33d9a2d5451de520881469863bd05a095f6b6f7f2ad1a5cd8d4ea2f" +checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c" dependencies = [ "asn1-rs", "base64", diff --git a/Cargo.toml b/Cargo.toml index 510cf5f..8aac429 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ license = "MPL-2.0" [dependencies] # ctap-hid-fido2 = "2.2.3" # ctap-hid-fido2 = { path = "../ctap-hid-fido2" } -ctap-hid-fido2 = { git = "https://github.com/gebogebogebo/ctap-hid-fido2.git", branch = "develop" } +ctap-hid-fido2 = { git = "https://github.com/shimunn/ctap-hid-fido2.git", branch = "user_entity" } hex = "0.3.2" ring = "0.16.5" failure = "0.1.5" @@ -31,7 +31,7 @@ anyhow = "1.0.56" [build-dependencies] # ctap-hid-fido2 = "2.2.3" # ctap-hid-fido2 = { path = "../ctap-hid-fido2" } -ctap-hid-fido2 = { git = "https://github.com/gebogebogebo/ctap-hid-fido2.git", branch = "develop" } +ctap-hid-fido2 = { git = "https://github.com/shimunn/ctap-hid-fido2.git", branch = "user_entity" } hex = "0.3.2" ring = "0.16.5" failure = "0.1.5" diff --git a/src/device.rs b/src/device.rs index 8045fbd..fbae8a9 100644 --- a/src/device.rs +++ b/src/device.rs @@ -2,7 +2,6 @@ use crate::error::*; use crate::util; use ctap_hid_fido2; -use ctap_hid_fido2::FidoKeyHidFactory; use ctap_hid_fido2::fidokey::get_assertion::get_assertion_params; use ctap_hid_fido2::fidokey::make_credential::make_credential_params; use ctap_hid_fido2::fidokey::GetAssertionArgsBuilder; @@ -10,6 +9,7 @@ use ctap_hid_fido2::fidokey::MakeCredentialArgsBuilder; use ctap_hid_fido2::get_fidokey_devices; use ctap_hid_fido2::public_key_credential_descriptor::PublicKeyCredentialDescriptor; use ctap_hid_fido2::public_key_credential_user_entity::PublicKeyCredentialUserEntity; +use ctap_hid_fido2::FidoKeyHidFactory; use ctap_hid_fido2::HidInfo; use ctap_hid_fido2::LibCfg; use std::time::Duration; @@ -39,7 +39,7 @@ pub fn make_credential_id( req = req.exclude_authenticator(cred.id.as_ref()); } if let Some(_) = name { - req = req.rkparam(&PublicKeyCredentialUserEntity::new( + req = req.user_entity(&PublicKeyCredentialUserEntity::new( Some(b"00"), name.clone(), name, From 17c96090bdd6262789308e3942ab1bc5a9a0de4e Mon Sep 17 00:00:00 2001 From: shimun Date: Tue, 5 Jul 2022 15:35:54 +0200 Subject: [PATCH 11/13] fix: ctap crate --- Cargo.lock | 4 ++-- Cargo.toml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ae6cf98..7564bce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -254,8 +254,8 @@ dependencies = [ [[package]] name = "ctap-hid-fido2" -version = "3.3.1" -source = "git+https://github.com/shimunn/ctap-hid-fido2.git?branch=user_entity#ad95bc3b389e2b9a332b9e9514831a59f964c131" +version = "3.4.0" +source = "git+https://github.com/shimunn/ctap-hid-fido2.git?branch=explicit_uv#19161c29835648cc8629b836ddbb757c7f63536a" dependencies = [ "aes", "anyhow", diff --git a/Cargo.toml b/Cargo.toml index 8aac429..3f6b210 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ license = "MPL-2.0" [dependencies] # ctap-hid-fido2 = "2.2.3" # ctap-hid-fido2 = { path = "../ctap-hid-fido2" } -ctap-hid-fido2 = { git = "https://github.com/shimunn/ctap-hid-fido2.git", branch = "user_entity" } +ctap-hid-fido2 = { git = "https://github.com/shimunn/ctap-hid-fido2.git", branch = "explicit_uv" } hex = "0.3.2" ring = "0.16.5" failure = "0.1.5" @@ -31,7 +31,7 @@ anyhow = "1.0.56" [build-dependencies] # ctap-hid-fido2 = "2.2.3" # ctap-hid-fido2 = { path = "../ctap-hid-fido2" } -ctap-hid-fido2 = { git = "https://github.com/shimunn/ctap-hid-fido2.git", branch = "user_entity" } +ctap-hid-fido2 = { git = "https://github.com/shimunn/ctap-hid-fido2.git", branch = "explicit_uv" } hex = "0.3.2" ring = "0.16.5" failure = "0.1.5" From f436ae538d2998dacbe2f280a9fe36eedfa0e537 Mon Sep 17 00:00:00 2001 From: shimun Date: Thu, 28 Jul 2022 15:10:28 +0200 Subject: [PATCH 12/13] chore: update --- Cargo.lock | 169 ++++++++++++++++++++++------------------------------- Cargo.toml | 11 +--- 2 files changed, 72 insertions(+), 108 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7564bce..18b3165 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -49,9 +49,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.57" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" +checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" [[package]] name = "asn1-rs" @@ -111,9 +111,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.65" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61" +checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7" dependencies = [ "addr2line", "cc", @@ -254,8 +254,9 @@ dependencies = [ [[package]] name = "ctap-hid-fido2" -version = "3.4.0" -source = "git+https://github.com/shimunn/ctap-hid-fido2.git?branch=explicit_uv#19161c29835648cc8629b836ddbb757c7f63536a" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b32fddb045ada349f0f9c2c9c9c04b62562c5964be69205a6352a9ff2b28488" dependencies = [ "aes", "anyhow", @@ -307,9 +308,9 @@ dependencies = [ [[package]] name = "either" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be" [[package]] name = "env_logger" @@ -386,9 +387,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.26.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" [[package]] name = "glob" @@ -463,9 +464,9 @@ checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" [[package]] name = "js-sys" -version = "0.3.58" +version = "0.3.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" +checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" dependencies = [ "wasm-bindgen", ] @@ -490,29 +491,30 @@ checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" [[package]] name = "libcryptsetup-rs" -version = "0.4.4" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dccc914e228f8b36aae1173b8dba2abf62eed833e9f816ec27b0917b26655d09" +checksum = "0fe68061beaa409d095b8010a37cb611685a627889aa29d79a0380c93ff89c13" dependencies = [ "either", + "lazy_static", "libc", "libcryptsetup-rs-sys", "pkg-config", - "semver 0.11.0", + "semver", "serde_json", "uuid", ] [[package]] name = "libcryptsetup-rs-sys" -version = "0.1.6" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ef25e923679fe233e3c109702829717404d1266c80d6f30236e82e7b2798dc" +checksum = "0c136e640bca5c6394092ee31eb55b4b6a9b307c32fa2db8a1764efac8239f9c" dependencies = [ "bindgen", "cc", "pkg-config", - "semver 1.0.10", + "semver", ] [[package]] @@ -592,9 +594,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fbc387afefefd5e9e39493299f3069e14a140dd34dc19b4c1c1a8fddb6a790" +checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" dependencies = [ "num-traits", ] @@ -622,9 +624,9 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", "num-bigint", @@ -652,9 +654,9 @@ dependencies = [ [[package]] name = "object" -version = "0.28.4" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424" +checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" dependencies = [ "memchr", ] @@ -670,9 +672,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" +checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" [[package]] name = "opaque-debug" @@ -695,15 +697,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" -[[package]] -name = "pest" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" -dependencies = [ - "ucd-trie", -] - [[package]] name = "pkg-config" version = "0.3.25" @@ -736,27 +729,27 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.39" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" +checksum = "c278e965f1d8cf32d6e0e96de3d3e79712178ae67986d9cf9151f51e95aac89b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" dependencies = [ "proc-macro2", ] [[package]] name = "regex" -version = "1.5.6" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" dependencies = [ "aho-corasick", "memchr", @@ -765,9 +758,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.26" +version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" [[package]] name = "ring" @@ -817,9 +810,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" +checksum = "24c8ad4f0c00e1eb5bc7614d236a7f1300e3dbd76b68cac8e06fb00b015ad8d8" [[package]] name = "ryu" @@ -829,33 +822,15 @@ checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" [[package]] name = "semver" -version = "0.11.0" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41d061efea015927ac527063765e73601444cdc344ba855bc7bd44578b25e1c" - -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] +checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1" [[package]] name = "serde" -version = "1.0.137" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03" [[package]] name = "serde_cbor" @@ -869,9 +844,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.137" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da" dependencies = [ "proc-macro2", "quote", @@ -880,9 +855,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.81" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" +checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" dependencies = [ "itoa", "ryu", @@ -939,9 +914,9 @@ checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" [[package]] name = "strum_macros" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9550962e7cf70d9980392878dfaf1dcc3ece024f4cf3bf3c46b978d0bad61d6c" +checksum = "4faebde00e8ff94316c01800f9054fd2ba77d30d9e922541913051d1d978918b" dependencies = [ "heck 0.4.0", "proc-macro2", @@ -952,9 +927,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.96" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf" +checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" dependencies = [ "proc-macro2", "quote", @@ -1013,9 +988,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd" +checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217" dependencies = [ "itoa", "libc", @@ -1035,17 +1010,11 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" -[[package]] -name = "ucd-trie" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" - [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" [[package]] name = "unicode-segmentation" @@ -1073,9 +1042,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "uuid" -version = "0.8.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +checksum = "dd6469f4314d5f1ffec476e05f17cc9a78bc7a27a6a857842170bdf8d6f98d2f" dependencies = [ "getrandom", ] @@ -1100,9 +1069,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" +checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1110,13 +1079,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" +checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -1125,9 +1094,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" +checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1135,9 +1104,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" +checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" dependencies = [ "proc-macro2", "quote", @@ -1148,15 +1117,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" +checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" [[package]] name = "web-sys" -version = "0.3.58" +version = "0.3.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" +checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/Cargo.toml b/Cargo.toml index 3f6b210..d9366ca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,29 +14,24 @@ categories = ["command-line-utilities"] license = "MPL-2.0" [dependencies] -# ctap-hid-fido2 = "2.2.3" -# ctap-hid-fido2 = { path = "../ctap-hid-fido2" } -ctap-hid-fido2 = { git = "https://github.com/shimunn/ctap-hid-fido2.git", branch = "explicit_uv" } hex = "0.3.2" ring = "0.16.5" failure = "0.1.5" rpassword = "4.0.1" structopt = "0.3.2" -libcryptsetup-rs = "0.4.2" +libcryptsetup-rs = "0.5.1" serde_json = "1.0.51" serde_derive = "1.0.116" serde = "1.0.116" anyhow = "1.0.56" +ctap-hid-fido2 = "3.4.1" [build-dependencies] -# ctap-hid-fido2 = "2.2.3" -# ctap-hid-fido2 = { path = "../ctap-hid-fido2" } -ctap-hid-fido2 = { git = "https://github.com/shimunn/ctap-hid-fido2.git", branch = "explicit_uv" } hex = "0.3.2" ring = "0.16.5" failure = "0.1.5" rpassword = "4.0.1" -libcryptsetup-rs = "0.4.1" +libcryptsetup-rs = "0.5.1" anyhow = "1.0.56" structopt = "0.3.2" From 871b2863b2dbd49d4448cc09302ef901099471dd Mon Sep 17 00:00:00 2001 From: shimun Date: Wed, 28 Sep 2022 19:48:30 +0200 Subject: [PATCH 13/13] fix: build env --- Cargo.lock | 283 ++++++++++++++++++++++------------------------------- Cargo.toml | 4 +- build.rs | 7 +- flake.nix | 91 ++++++++++++----- 4 files changed, 190 insertions(+), 195 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 18b3165..ccd1b20 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,23 +19,13 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aes" -version = "0.7.5" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +checksum = "bfe0133578c0986e1fe3dfcd4af1cc5b2dd6c3dbf534d69916ce16a2701d40ba" dependencies = [ "cfg-if", "cipher", "cpufeatures", - "opaque-debug", -] - -[[package]] -name = "aho-corasick" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" -dependencies = [ - "memchr", ] [[package]] @@ -49,15 +39,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.58" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" +checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602" [[package]] name = "asn1-rs" -version = "0.3.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33" +checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" dependencies = [ "asn1-rs-derive", "asn1-rs-impl", @@ -71,9 +61,9 @@ dependencies = [ [[package]] name = "asn1-rs-derive" -version = "0.1.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" +checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", @@ -139,18 +129,14 @@ dependencies = [ "bitflags", "cexpr", "clang-sys", - "clap", - "env_logger", "lazy_static", "lazycell", - "log", "peeking_take_while", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "which", ] [[package]] @@ -160,26 +146,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "block-modes" -version = "0.8.1" +name = "block-padding" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e" +checksum = "0a90ec2df9600c28a01c56c4784c9207a96d2451833aeceb8cc97e4c9548bb78" dependencies = [ - "block-padding", - "cipher", + "generic-array", ] -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - [[package]] name = "bumpalo" -version = "3.10.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" +checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" [[package]] name = "byteorder" @@ -187,6 +166,15 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher", +] + [[package]] name = "cc" version = "1.0.73" @@ -210,11 +198,12 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cipher" -version = "0.3.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" dependencies = [ - "generic-array", + "crypto-common", + "inout", ] [[package]] @@ -245,24 +234,34 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.2" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ "libc", ] [[package]] -name = "ctap-hid-fido2" -version = "3.4.1" +name = "crypto-common" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b32fddb045ada349f0f9c2c9c9c04b62562c5964be69205a6352a9ff2b28488" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "ctap-hid-fido2" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43150cf02f8e7c3caa32d5704a908bcdbd31899f6b9cc11ad6e0e42c9b7280ac" dependencies = [ "aes", "anyhow", "base64", - "block-modes", "byteorder", + "cbc", "hex 0.4.3", "hidapi", "num", @@ -283,9 +282,9 @@ checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" [[package]] name = "der-parser" -version = "7.0.0" +version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" +checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" dependencies = [ "asn1-rs", "displaydoc", @@ -308,22 +307,9 @@ dependencies = [ [[package]] name = "either" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be" - -[[package]] -name = "env_logger" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "failure" @@ -366,9 +352,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", @@ -441,9 +427,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hidapi" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b1717343691998deb81766bfcd1dce6df0d5d6c37070b5a3de2bb6d39f7822" +checksum = "9d26e1151deaab68f34fbfd16d491a2a0170cf98d69d3efa23873b567a4199e1" dependencies = [ "cc", "libc", @@ -451,22 +437,26 @@ dependencies = [ ] [[package]] -name = "humantime" -version = "2.1.0" +name = "inout" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "block-padding", + "generic-array", +] [[package]] name = "itoa" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" [[package]] name = "js-sys" -version = "0.3.59" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" dependencies = [ "wasm-bindgen", ] @@ -485,9 +475,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.126" +version = "0.2.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" [[package]] name = "libcryptsetup-rs" @@ -507,9 +497,9 @@ dependencies = [ [[package]] name = "libcryptsetup-rs-sys" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c136e640bca5c6394092ee31eb55b4b6a9b307c32fa2db8a1764efac8239f9c" +checksum = "0af91b644699911c839309edbb8c8f6addd61e6b9553aa6d02ba71c37597afbe" dependencies = [ "bindgen", "cc", @@ -550,9 +540,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" +checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" dependencies = [ "adler", ] @@ -663,24 +653,18 @@ dependencies = [ [[package]] name = "oid-registry" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" +checksum = "7d4bda43fd1b844cbc6e6e54b5444e2b1bc7838bce59ad205902cccbb26d6761" dependencies = [ "asn1-rs", ] [[package]] name = "once_cell" -version = "1.13.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0" [[package]] name = "pad" @@ -729,18 +713,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.42" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c278e965f1d8cf32d6e0e96de3d3e79712178ae67986d9cf9151f51e95aac89b" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] @@ -751,8 +735,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" dependencies = [ - "aho-corasick", - "memchr", "regex-syntax", ] @@ -810,27 +792,27 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c8ad4f0c00e1eb5bc7614d236a7f1300e3dbd76b68cac8e06fb00b015ad8d8" +checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" [[package]] name = "ryu" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" [[package]] name = "semver" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1" +checksum = "93f6841e709003d68bb2deee8c343572bf446003ec20a583e76f7b15cebf3711" [[package]] name = "serde" -version = "1.0.140" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03" +checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" [[package]] name = "serde_cbor" @@ -844,9 +826,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.140" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da" +checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" dependencies = [ "proc-macro2", "quote", @@ -855,9 +837,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.82" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" +checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" dependencies = [ "itoa", "ryu", @@ -914,9 +896,9 @@ checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" [[package]] name = "strum_macros" -version = "0.24.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4faebde00e8ff94316c01800f9054fd2ba77d30d9e922541913051d1d978918b" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck 0.4.0", "proc-macro2", @@ -927,9 +909,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" dependencies = [ "proc-macro2", "quote", @@ -948,15 +930,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "termcolor" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" -dependencies = [ - "winapi-util", -] - [[package]] name = "textwrap" version = "0.11.0" @@ -968,18 +941,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.31" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +checksum = "c53f98874615aea268107765aa1ed8f6116782501d18e53d08b471733bea6c85" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.31" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +checksum = "f8b463991b4eab2d801e724172285ec4195c650e8ec79b149e6c2a8e6dd3f783" dependencies = [ "proc-macro2", "quote", @@ -988,9 +961,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.11" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217" +checksum = "3c3f9a28b618c3a6b9251b6908e9c99e04b9e5c02e6581ccbb67d59c34ef7f9b" dependencies = [ "itoa", "libc", @@ -1012,21 +985,21 @@ checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" [[package]] name = "unicode-ident" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" +checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" [[package]] name = "unicode-segmentation" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" +checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" [[package]] name = "unicode-width" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "unicode-xid" @@ -1069,9 +1042,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.82" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1079,9 +1052,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.82" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" dependencies = [ "bumpalo", "log", @@ -1094,9 +1067,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.82" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1104,9 +1077,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.82" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", @@ -1117,31 +1090,20 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.82" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "web-sys" -version = "0.3.59" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" dependencies = [ "js-sys", "wasm-bindgen", ] -[[package]] -name = "which" -version = "4.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae" -dependencies = [ - "either", - "lazy_static", - "libc", -] - [[package]] name = "winapi" version = "0.3.9" @@ -1158,15 +1120,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -1175,9 +1128,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "x509-parser" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c" +checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ "asn1-rs", "base64", diff --git a/Cargo.toml b/Cargo.toml index d9366ca..442ff8a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,20 +19,20 @@ ring = "0.16.5" failure = "0.1.5" rpassword = "4.0.1" structopt = "0.3.2" -libcryptsetup-rs = "0.5.1" serde_json = "1.0.51" serde_derive = "1.0.116" serde = "1.0.116" anyhow = "1.0.56" ctap-hid-fido2 = "3.4.1" +libcryptsetup-rs = "0.5.1" [build-dependencies] hex = "0.3.2" ring = "0.16.5" failure = "0.1.5" rpassword = "4.0.1" -libcryptsetup-rs = "0.5.1" anyhow = "1.0.56" +libcryptsetup-rs = "0.5.1" structopt = "0.3.2" [profile.release] diff --git a/build.rs b/build.rs index 47ea4bc..65ddbc0 100644 --- a/build.rs +++ b/build.rs @@ -11,17 +11,22 @@ mod util; use cli_args::Args; use std::env; +use std::fs; +use std::path::PathBuf; use std::str::FromStr; use structopt::clap::Shell; use structopt::StructOpt; fn main() { + let env_outdir = env::var_os("OUT_DIR").unwrap(); + let outdir = PathBuf::from(PathBuf::from(env_outdir).ancestors().nth(3).unwrap()); + fs::create_dir_all(&outdir).unwrap(); // generate completion scripts, zsh does panic for some reason for shell in Shell::variants().iter().filter(|shell| **shell != "zsh") { Args::clap().gen_completions( env!("CARGO_PKG_NAME"), Shell::from_str(shell).unwrap(), - env!("CARGO_MANIFEST_DIR"), + &outdir, ); } } diff --git a/flake.nix b/flake.nix index 8ae05fc..52341d6 100644 --- a/flake.nix +++ b/flake.nix @@ -9,32 +9,42 @@ }; }; - outputs = { self, nixpkgs, utils, naersk }: +outputs = inputs @ { self, nixpkgs, utils, naersk, ... }: let - root = ./.; - pname = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).package.name; - forPkgs = pkgs: - let - naersk-lib = naersk.lib."${pkgs.system}"; - buildInputs = with pkgs; [ cryptsetup libusb.dev ]; - LIBCLANG_PATH = "${pkgs.clang.cc.lib}/lib"; - nativeBuildInputs = with pkgs; [ - pkgconfig - clang - ]; - in + root = inputs.source or self; + pname = (builtins.fromTOML (builtins.readFile (root + "/Cargo.toml"))).package.name; + # toolchains: stable, beta, default(nightly) + toolchain = pkgs: if inputs ? fenix then inputs.fenix.packages."${pkgs.system}".complete.toolchain + else with pkgs; symlinkJoin { name = "rust-toolchain"; paths = [ rustc cargo ]; }; + forSystem = system: + let + pkgs = nixpkgs.legacyPackages."${system}"; + in rec { # `nix build` - packages.${pname} = naersk-lib.buildPackage { - inherit pname root buildInputs nativeBuildInputs LIBCLANG_PATH; - }; - defaultPackage = packages.${pname}; + packages.${pname} = (self.overlay pkgs pkgs).${pname}; + + packages.dockerImage = pkgs.runCommandLocal "docker-${pname}.tar.gz" {} "${apps.streamDockerImage.program} | gzip --fast > $out"; + + packages.default = packages.${pname}; # `nix run` apps.${pname} = utils.lib.mkApp { drv = packages.${pname}; }; - defaultApp = apps.${pname}; + + # `nix run .#streamDockerImage | docker load` + apps.streamDockerImage = utils.lib.mkApp { + drv = with pkgs; dockerTools.streamLayeredImage { + name = pname; + tag = self.shortRev or "latest"; + config = { + Entrypoint = apps.default.program; + }; + }; + exePath = ""; + }; + apps.default = apps.${pname}; # `nix flake check` checks = { @@ -49,15 +59,42 @@ hydraJobs = checks // packages; # `nix develop` - devShell = pkgs.mkShell { - nativeBuildInputs = with pkgs; [ rustc cargo rustfmt nixpkgs-fmt ] ++ nativeBuildInputs; - inherit buildInputs LIBCLANG_PATH; + devShell = pkgs.mkShell rec { + RUST_SRC_PATH = "${if inputs ? fenix then "${toolchain pkgs}/lib/rustlib" else pkgs.rustPlatform.rustLibSrc}"; + nativeBuildInputs = with pkgs; [ (toolchain pkgs) cargo-edit rustfmt nixpkgs-fmt ] ++ packages.default.nativeBuildInputs; + inherit (packages.default) buildInputs LIBCLANG_PATH; + shellHook = '' + printf "Rust version:" + rustc --version + printf "\nbuild inputs: ${pkgs.lib.concatStringsSep ", " (map (bi: bi.name) (buildInputs ++ nativeBuildInputs))}" + ''; }; - }; - forSystem = system: forPkgs nixpkgs.legacyPackages."${system}"; - in - (utils.lib.eachSystem [ "aarch64-linux" "i686-linux" "x86_64-linux" ] forSystem) // { - overlay = final: prev: (forPkgs final).packages; - }; + }; + in + (utils.lib.eachDefaultSystem forSystem) // { + overlays.pinned = final: prev: (self.overlay final (import nixpkgs { + inherit (final) localSystem; + })).packages; + overlay = final: prev: + let + naersk-lib = naersk.lib."${final.system}".override { + rustc = toolchain prev; + cargo = toolchain prev; + }; + buildInputs = with prev; [ + udev cryptsetup.dev + ]; + nativeBuildInputs = with prev; [ + pkg-config clang + ]; + in + { + "${pname}" = + naersk-lib.buildPackage { + LIBCLANG_PATH = "${final.llvmPackages.libclang.lib}/lib"; + inherit pname root buildInputs nativeBuildInputs; + }; + }; + }; }