diff --git a/Cargo.lock b/Cargo.lock index db24bb3..779b25c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,19 +4,13 @@ version = 4 [[package]] name = "addr2line" -version = "0.15.2" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a2e47a1fbe209ee101dd6d61285226744c6c8d3c21c8dc878ba6cb9f467f3a" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "adler2" version = "2.0.1" @@ -334,17 +328,17 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" -version = "0.3.59" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4717cfcbfaa661a0fd48f8453951837ae7e8f81e481fbb136e3202d72805a744" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", - "cc", "cfg-if 1.0.1", "libc", - "miniz_oxide 0.4.4", + "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -410,21 +404,20 @@ checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" [[package]] name = "bindgen" -version = "0.60.1" +version = "0.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" +checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.1", "cexpr", "clang-sys", - "lazy_static", - "lazycell", - "peeking_take_while", + "itertools 0.13.0", "proc-macro2", "quote 1.0.40", "regex", "rustc-hash", "shlex", + "syn 2.0.104", ] [[package]] @@ -606,7 +599,7 @@ dependencies = [ [[package]] name = "card-cli" -version = "1.13.17" +version = "1.13.18" dependencies = [ "aes-gcm-stream", "authenticator 0.3.1", @@ -654,7 +647,7 @@ dependencies = [ "sshcerts", "swift-secure-enclave-tool-rs", "tabled", - "tokio 1.45.1", + "tokio 1.46.1", "u2f-hatter-fork", "which 8.0.0", "x509", @@ -666,9 +659,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.27" +version = "1.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" +checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" dependencies = [ "shlex", ] @@ -820,9 +813,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if 1.0.1", ] @@ -917,9 +910,9 @@ dependencies = [ [[package]] name = "crypto-mac" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ "generic-array 0.14.7", "subtle", @@ -1177,9 +1170,9 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ "curve25519-dalek", "ed25519", @@ -1304,9 +1297,9 @@ dependencies = [ [[package]] name = "external-command-rs" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef9cd87d142f2e7dee157a39e5dfe5e1987b72918afd8765f1d2bcf985fd1da0" +checksum = "fb012063f6c7e1cb7a5e9e6ad789ad941035e563c7d0b214b05cc3493aeb7cf9" dependencies = [ "base64 0.22.1", "hex", @@ -1366,7 +1359,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", - "miniz_oxide 0.8.9", + "miniz_oxide", ] [[package]] @@ -1584,9 +1577,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.24.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4075386626662786ddb0ec9081e7c7eeb1ba31951f447ca780ef9f5d568189" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" @@ -1618,9 +1611,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" +checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" dependencies = [ "atomic-waker", "bytes 1.10.1", @@ -1630,7 +1623,7 @@ dependencies = [ "http", "indexmap", "slab", - "tokio 1.45.1", + "tokio 1.46.1", "tokio-util", "tracing", ] @@ -1773,26 +1766,10 @@ dependencies = [ "itoa", "pin-project-lite", "smallvec 1.15.1", - "tokio 1.45.1", + "tokio 1.46.1", "want", ] -[[package]] -name = "hyper-rustls" -version = "0.27.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" -dependencies = [ - "http", - "hyper", - "hyper-util", - "rustls", - "rustls-pki-types", - "tokio 1.45.1", - "tokio-rustls", - "tower-service", -] - [[package]] name = "hyper-tls" version = "0.6.0" @@ -1804,18 +1781,17 @@ dependencies = [ "hyper", "hyper-util", "native-tls", - "tokio 1.45.1", + "tokio 1.46.1", "tokio-native-tls", "tower-service", ] [[package]] name = "hyper-util" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" +checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" dependencies = [ - "base64 0.22.1", "bytes 1.10.1", "futures-channel", "futures-core", @@ -1823,16 +1799,12 @@ dependencies = [ "http", "http-body", "hyper", - "ipnet", "libc", - "percent-encoding", "pin-project-lite", "socket2", - "system-configuration", - "tokio 1.45.1", + "tokio 1.46.1", "tower-service", "tracing", - "windows-registry", ] [[package]] @@ -1985,6 +1957,17 @@ dependencies = [ "generic-array 0.14.7", ] +[[package]] +name = "io-uring" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +dependencies = [ + "bitflags 2.9.1", + "cfg-if 1.0.1", + "libc", +] + [[package]] name = "iovec" version = "0.1.4" @@ -2000,16 +1983,6 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" -[[package]] -name = "iri-string" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -2034,6 +2007,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.15" @@ -2108,7 +2090,7 @@ dependencies = [ "ascii-canvas", "bit-set", "ena", - "itertools", + "itertools 0.11.0", "lalrpop-util", "petgraph", "regex", @@ -2122,9 +2104,12 @@ dependencies = [ [[package]] name = "lalrpop-util" -version = "0.20.0" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d" +checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" +dependencies = [ + "regex-automata", +] [[package]] name = "lazy_static" @@ -2135,12 +2120,6 @@ dependencies = [ "spin 0.9.8", ] -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "lexical-core" version = "0.7.6" @@ -2315,16 +2294,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "miniz_oxide" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" -dependencies = [ - "adler", - "autocfg", -] - [[package]] name = "miniz_oxide" version = "0.8.9" @@ -2430,9 +2399,9 @@ dependencies = [ [[package]] name = "nettle-sys" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b495053a10a19a80e3a26bf1212e92e29350797b5f5bdc58268c3f3f818e66ec" +checksum = "61a3f5406064d310d59b1a219d3c5c9a49caf4047b6496032e3f930876488c34" dependencies = [ "bindgen", "cc", @@ -2547,9 +2516,12 @@ dependencies = [ [[package]] name = "object" -version = "0.24.0" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5b3dd1c072ee7963717671d1ca129f1048fda25edea6b752bfc71ac8854170" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] [[package]] name = "oid-registry" @@ -2866,12 +2838,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" - [[package]] name = "pem" version = "3.0.5" @@ -3294,9 +3260,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.20" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabf4c97d9130e2bf606614eb937e86edac8292eaa6f422f995d7e8de1eb1813" +checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" dependencies = [ "base64 0.22.1", "bytes 1.10.1", @@ -3309,29 +3275,30 @@ dependencies = [ "http-body", "http-body-util", "hyper", - "hyper-rustls", "hyper-tls", "hyper-util", + "ipnet", "js-sys", "log", "mime", "native-tls", + "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pki-types", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", - "tokio 1.45.1", + "system-configuration", + "tokio 1.46.1", "tokio-native-tls", - "tower", - "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", + "winreg", ] [[package]] @@ -3559,28 +3526,24 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ "bitflags 2.9.1", "errno", "libc", "linux-raw-sys 0.9.4", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] -name = "rustls" -version = "0.23.28" +name = "rustls-pemfile" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "once_cell", "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", ] [[package]] @@ -3592,17 +3555,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-webpki" -version = "0.103.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" -dependencies = [ - "ring 0.17.14", - "rustls-pki-types", - "untrusted 0.9.0", -] - [[package]] name = "rustversion" version = "1.0.21" @@ -3841,9 +3793,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" dependencies = [ "itoa", "memchr", @@ -4089,7 +4041,7 @@ dependencies = [ "ssh-key", "subtle", "thiserror 1.0.69", - "tokio 1.45.1", + "tokio 1.46.1", "tokio-util", ] @@ -4213,15 +4165,15 @@ dependencies = [ [[package]] name = "subtle" -version = "2.6.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "swift-secure-enclave-tool-rs" -version = "1.2.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9259339c2097f32fbc11464b293f8bbb600e6616c67399e9255e0cffc6888e0c" +checksum = "5b90814f83d0d3d5fc1e6f3bf0b35a902bead5261668c22f8d09e69a817fd18a" dependencies = [ "base64 0.22.1", "hex", @@ -4254,12 +4206,9 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "1.0.2" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "synstructure" @@ -4286,20 +4235,20 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.6.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ - "bitflags 2.9.1", + "bitflags 1.3.2", "core-foundation 0.9.4", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.6.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" dependencies = [ "core-foundation-sys", "libc", @@ -4344,7 +4293,7 @@ dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", - "rustix 1.0.7", + "rustix 1.0.8", "windows-sys 0.59.0", ] @@ -4535,15 +4484,17 @@ dependencies = [ [[package]] name = "tokio" -version = "1.45.1" +version = "1.46.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" dependencies = [ "backtrace", "bytes 1.10.1", + "io-uring", "libc", "mio 1.0.4", "pin-project-lite", + "slab", "socket2", "windows-sys 0.52.0", ] @@ -4608,7 +4559,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", - "tokio 1.45.1", + "tokio 1.46.1", ] [[package]] @@ -4630,16 +4581,6 @@ dependencies = [ "tokio-sync", ] -[[package]] -name = "tokio-rustls" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" -dependencies = [ - "rustls", - "tokio 1.45.1", -] - [[package]] name = "tokio-sync" version = "0.1.8" @@ -4736,48 +4677,9 @@ dependencies = [ "futures-core", "futures-sink", "pin-project-lite", - "tokio 1.45.1", + "tokio 1.46.1", ] -[[package]] -name = "tower" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper", - "tokio 1.45.1", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-http" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" -dependencies = [ - "bitflags 2.9.1", - "bytes 1.10.1", - "futures-util", - "http", - "http-body", - "iri-string", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - [[package]] name = "tower-service" version = "0.3.3" @@ -5076,7 +4978,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fabb953106c3c8eea8306e4393700d7657561cb43122571b172bbfb7c7ba1d" dependencies = [ "env_home", - "rustix 1.0.7", + "rustix 1.0.8", "winsafe", ] @@ -5164,17 +5066,6 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" -[[package]] -name = "windows-registry" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" -dependencies = [ - "windows-link", - "windows-result", - "windows-strings", -] - [[package]] name = "windows-result" version = "0.3.4" @@ -5193,6 +5084,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -5220,6 +5120,21 @@ dependencies = [ "windows-targets 0.53.2", ] +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -5252,6 +5167,12 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -5264,6 +5185,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -5276,6 +5203,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -5300,6 +5233,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -5312,6 +5251,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -5324,6 +5269,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -5336,6 +5287,12 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -5348,6 +5305,16 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if 1.0.1", + "windows-sys 0.48.0", +] + [[package]] name = "winsafe" version = "0.0.19" diff --git a/Cargo.toml b/Cargo.toml index 173bb3c..501ae9a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "card-cli" -version = "1.13.17" +version = "1.13.18" authors = ["Hatter Jiang "] edition = "2018" diff --git a/src/cmd_external_sign.rs b/src/cmd_external_sign.rs index bd2b46e..6cd62a0 100644 --- a/src/cmd_external_sign.rs +++ b/src/cmd_external_sign.rs @@ -13,6 +13,7 @@ use rust_util::util_clap::{Command, CommandError}; use rust_util::XResult; use serde_json::Value; use std::collections::BTreeMap; +use swift_secure_enclave_tool_rs::DigestType; use yubikey::piv::sign_data; pub struct CommandImpl; @@ -28,6 +29,7 @@ impl Command for CommandImpl { .arg(cmdutil::build_alg_arg()) .arg(cmdutil::build_parameter_arg()) .arg(cmdutil::build_message_arg()) + .arg(cmdutil::build_message_type_arg()) .arg(cmdutil::build_pin_arg()) .arg(cmdutil::build_serial_arg()) } @@ -36,11 +38,12 @@ impl Command for CommandImpl { let alg = sub_arg_matches.value_of("alg").unwrap(); let parameter = sub_arg_matches.value_of("parameter").unwrap(); let message_base64 = sub_arg_matches.value_of("message-base64").unwrap(); + let message_type = sub_arg_matches.value_of("message-type"); let message_bytes = base64_decode(message_base64)?; let mut json = BTreeMap::new(); let key_uri = parse_key_uri(parameter)?; - match sign(alg, &message_bytes, key_uri, sub_arg_matches) { + match sign(alg, &message_bytes, message_type, key_uri, sub_arg_matches) { Ok(signature_bytes) => { json.insert("success", Value::Bool(true)); json.insert("signature_base64", base64_encode(&signature_bytes).into()); @@ -56,7 +59,14 @@ impl Command for CommandImpl { } } -pub fn sign(alg: &str, message: &[u8], key_uri: KeyUri, sub_arg_matches: &ArgMatches) -> XResult> { +pub fn sign(alg: &str, message: &[u8], message_type: Option<&str>, key_uri: KeyUri, sub_arg_matches: &ArgMatches) -> XResult> { + let digest_type = DigestType::parse(message_type)?; + if let Some(bytes_len) = digest_type.bytes() { + if message.len() != bytes_len as usize { + return simple_error!("Invalid message length, requires: {}, actual: {}", bytes_len, message.len()); + } + } + let is_raw = DigestType::Raw == digest_type; match key_uri { KeyUri::SecureEnclave(key) => { if "ES256" != alg { @@ -66,7 +76,7 @@ pub fn sign(alg: &str, message: &[u8], key_uri: KeyUri, sub_arg_matches: &ArgMat return simple_error!("Not singing key"); } let private_key = cmd_hmac_decrypt::try_decrypt(&mut None, &key.private_key)?; - seutil::secure_enclave_p256_sign(&private_key, message) + seutil::secure_enclave_p256_sign(&private_key, message, digest_type) } KeyUri::YubikeyPiv(key) => { let mut yk = yubikeyutil::open_yubikey_with_args(sub_arg_matches)?; @@ -87,7 +97,7 @@ pub fn sign(alg: &str, message: &[u8], key_uri: KeyUri, sub_arg_matches: &ArgMat "Yubikey not supported algorithm: {}", key.algorithm.to_str() ); - let raw_in = digest_by_jwt_algorithm(jwt_algorithm, message)?; + let raw_in = iff!(is_raw, digest_by_jwt_algorithm(jwt_algorithm, message)?, message.to_vec()); let signed_data = opt_result!( sign_data(&mut yk, &raw_in, algorithm, key.slot), "Sign YubiKey failed: {}" @@ -99,7 +109,7 @@ pub fn sign(alg: &str, message: &[u8], key_uri: KeyUri, sub_arg_matches: &ArgMat let private_key = cmd_hmac_decrypt::try_decrypt(&mut None, &key.hmac_enc_private_key)?; let (jwt_algorithm, private_key_d) = parse_ecdsa_private_key(&private_key)?; - let raw_in = digest_by_jwt_algorithm(jwt_algorithm, message)?; + let raw_in = iff!(is_raw, digest_by_jwt_algorithm(jwt_algorithm, message)?, message.to_vec()); let ecdsa_algorithm = convert_jwt_algorithm_to_ecdsa_algorithm(jwt_algorithm)?; let signed_data = ecdsautil::ecdsa_sign( ecdsa_algorithm, @@ -117,7 +127,7 @@ pub fn sign(alg: &str, message: &[u8], key_uri: KeyUri, sub_arg_matches: &ArgMat let rsa_sign_algorithm = opt_value_result!(RsaSignAlgorithm::from_str(alg), "Invalid --alg: {}", alg); - rsautil::sign(&rsa_private_key, rsa_sign_algorithm, message) + rsautil::sign(&rsa_private_key, rsa_sign_algorithm, message, is_raw) } else { simple_error!("Invalid algorithm: {}", key.algorithm.to_str()) } @@ -125,7 +135,8 @@ pub fn sign(alg: &str, message: &[u8], key_uri: KeyUri, sub_arg_matches: &ArgMat KeyUri::ExternalCommand(key) => { let parameter = cmd_hmac_decrypt::try_decrypt(&mut None, &key.parameter)?; let alg = key.algorithm.as_jwa_name(); - let signature = external_command_rs::external_sign(&key.external_command, ¶meter, alg, message)?; + let signature = external_command_rs::external_sign_digested( + &key.external_command, ¶meter, alg, message, digest_type.to_str())?; Ok(signature) } } diff --git a/src/cmd_se_ecsign.rs b/src/cmd_se_ecsign.rs index 0a0db00..9d37fa5 100644 --- a/src/cmd_se_ecsign.rs +++ b/src/cmd_se_ecsign.rs @@ -4,6 +4,7 @@ use crate::util::{base64_decode, base64_encode}; use clap::{App, Arg, ArgMatches, SubCommand}; use rust_util::util_clap::{Command, CommandError}; use std::collections::BTreeMap; +use swift_secure_enclave_tool_rs::DigestType; pub struct CommandImpl; @@ -50,7 +51,7 @@ impl Command for CommandImpl { debugging!("Secure enclave key URI: {:?}", se_key_uri); let private_key = cmd_hmac_decrypt::try_decrypt(&mut None, &se_key_uri.private_key)?; - let signature = seutil::secure_enclave_p256_sign(&private_key, &input_bytes)?; + let signature = seutil::secure_enclave_p256_sign(&private_key, &input_bytes, DigestType::Raw)?; if json_output { let mut json = BTreeMap::<&'_ str, String>::new(); diff --git a/src/cmd_sign_jwt.rs b/src/cmd_sign_jwt.rs index 8813a1a..7a67625 100644 --- a/src/cmd_sign_jwt.rs +++ b/src/cmd_sign_jwt.rs @@ -69,7 +69,7 @@ fn sign_jwt( let claims = merge_payload_claims(payload, claims)?; let tobe_signed = merge_header_claims(header.as_bytes(), claims.as_bytes()); - let signature = cmd_external_sign::sign(jwt_algorithm.to_str(), &tobe_signed, key_uri, sub_arg_matches)?; + let signature = cmd_external_sign::sign(jwt_algorithm.to_str(), &tobe_signed, None, key_uri, sub_arg_matches)?; let signed_data = match jwt_algorithm { AlgorithmType::Rs256 => signature, diff --git a/src/cmdutil.rs b/src/cmdutil.rs index 26fbf1c..829ac89 100644 --- a/src/cmdutil.rs +++ b/src/cmdutil.rs @@ -53,6 +53,11 @@ pub fn build_message_arg() -> Arg<'static, 'static> { Arg::with_name("message-base64").long("message-base64").takes_value(true).required(true).help("Message in base64") } + +pub fn build_message_type_arg() -> Arg<'static, 'static> { + Arg::with_name("message-type").long("message-type").takes_value(true).help("Optional, message type, raw, sha256, sha384 or sha512") +} + pub fn build_no_pin_arg() -> Arg<'static, 'static> { Arg::with_name("no-pin").long("no-pin").help("No PIN") } diff --git a/src/rsautil.rs b/src/rsautil.rs index 673ec05..1439b15 100644 --- a/src/rsautil.rs +++ b/src/rsautil.rs @@ -33,18 +33,18 @@ impl RsaSignAlgorithm { } } -pub fn sign(rsa_private_key: &RsaPrivateKey, rsa_sign_algorithm: RsaSignAlgorithm, message: &[u8]) -> XResult> { +pub fn sign(rsa_private_key: &RsaPrivateKey, rsa_sign_algorithm: RsaSignAlgorithm, message: &[u8], is_raw: bool) -> XResult> { match rsa_sign_algorithm { RsaSignAlgorithm::Rs256 => { - let raw_in = digestutil::sha256_bytes(message); + let raw_in = iff!(is_raw, digestutil::sha256_bytes(message), message.to_vec()); Ok(rsa_private_key.sign(Pkcs1v15Sign::new::(), &raw_in)?) } RsaSignAlgorithm::Rs384 => { - let raw_in = digestutil::sha384_bytes(message); + let raw_in = iff!(is_raw, digestutil::sha384_bytes(message), message.to_vec()); Ok(rsa_private_key.sign(Pkcs1v15Sign::new::(), &raw_in)?) } RsaSignAlgorithm::Rs512 => { - let raw_in = digestutil::sha512_bytes(message); + let raw_in = iff!(is_raw, digestutil::sha512_bytes(message), message.to_vec()); Ok(rsa_private_key.sign(Pkcs1v15Sign::new::(), &raw_in)?) } } diff --git a/src/seutil.rs b/src/seutil.rs index 945bd03..862aafd 100644 --- a/src/seutil.rs +++ b/src/seutil.rs @@ -2,7 +2,7 @@ use crate::util::{base64_decode, base64_encode}; use rust_util::XResult; use se_tool::KeyPurpose; use swift_secure_enclave_tool_rs as se_tool; -use swift_secure_enclave_tool_rs::ControlFlag; +use swift_secure_enclave_tool_rs::{ControlFlag, DigestType}; pub fn is_support_se() -> bool { se_tool::is_secure_enclave_supported().unwrap_or_else(|e| { @@ -62,8 +62,8 @@ pub fn secure_enclave_p256_dh( Ok(shared_secret) } -pub fn secure_enclave_p256_sign(private_key: &str, content: &[u8]) -> XResult> { +pub fn secure_enclave_p256_sign(private_key: &str, content: &[u8], digest_type: DigestType) -> XResult> { let private_key_representation = base64_decode(private_key)?; - let signature = se_tool::private_key_sign(&private_key_representation, content)?; + let signature = se_tool::private_key_sign_digested(&private_key_representation, content, digest_type)?; Ok(signature) -} +} \ No newline at end of file