diff --git a/.github/cross-docker/Dockerfile-cross-debian-11 b/.github/cross-docker/Dockerfile-cross-debian-11 index 25317eaf..97591db9 100644 --- a/.github/cross-docker/Dockerfile-cross-debian-11 +++ b/.github/cross-docker/Dockerfile-cross-debian-11 @@ -7,7 +7,8 @@ RUN apt-get update && apt-get install --assume-yes --no-install-recommends \ libtss2-dev \ llvm-dev \ libclang-dev \ - clang + clang \ + pkg-config ENV CROSS_TOOLCHAIN_PREFIX=x86_64-linux-gnu- ENV CROSS_SYSROOT=/usr/x86_64-linux-gnu diff --git a/Cargo.lock b/Cargo.lock index e34fc68f..61cacaed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -207,6 +207,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + [[package]] name = "base64" version = "0.21.4" @@ -218,7 +224,7 @@ name = "beacon" version = "0.1.0" source = "git+https://github.com/helium/proto?branch=master#d94ed4b4046263eb78003d484d94ad3cbff7a55f" dependencies = [ - "base64", + "base64 0.21.4", "byteorder", "helium-proto", "prost", @@ -230,29 +236,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "bindgen" -version = "0.65.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" -dependencies = [ - "bitflags 1.3.2", - "cexpr", - "clang-sys", - "lazy_static", - "lazycell", - "log", - "peeking_take_while", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "syn 2.0.38", - "which", -] - [[package]] name = "bitfield" version = "0.14.0" @@ -399,15 +382,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom", -] - [[package]] name = "cfg-if" version = "1.0.0" @@ -423,17 +397,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "clang-sys" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" -dependencies = [ - "glob", - "libc", - "libloading", -] - [[package]] name = "clap" version = "4.4.6" @@ -677,6 +640,26 @@ dependencies = [ "zeroize", ] +[[package]] +name = "enumflags2" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939" +dependencies = [ + "enumflags2_derive", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -853,7 +836,7 @@ version = "1.2.1" dependencies = [ "angry-purple-tiger", "async-trait", - "base64", + "base64 0.21.4", "beacon", "bs58", "clap", @@ -912,12 +895,6 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - [[package]] name = "group" version = "0.11.0" @@ -980,11 +957,11 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "helium-crypto" -version = "0.8.0" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5847434afa99d189f926f2337172a2072785edc1762adb36313e74038c86008" +checksum = "a1448bc3540b1ac62f080db396c0d88ade08b11160237a76b414f36a03da4208" dependencies = [ - "base64", + "base64 0.21.4", "bs58", "byteorder", "drop_guard", @@ -1001,7 +978,7 @@ dependencies = [ "sha2 0.10.8", "signature", "thiserror", - "tss2", + "tss-esapi", ] [[package]] @@ -1034,6 +1011,12 @@ dependencies = [ "digest 0.9.0", ] +[[package]] +name = "hostname-validator" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f558a64ac9af88b5ba400d99b579451af0d39c6d360980045b91aac966d705e2" + [[package]] name = "http" version = "0.2.9" @@ -1213,28 +1196,12 @@ dependencies = [ "spin", ] -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "libc" version = "0.2.149" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" -[[package]] -name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if", - "winapi", -] - [[package]] name = "libm" version = "0.2.8" @@ -1257,7 +1224,7 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" name = "lorawan" version = "0.1.0" dependencies = [ - "base64", + "base64 0.21.4", "bitfield", "bytes", ] @@ -1292,6 +1259,17 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +[[package]] +name = "mbox" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f88d5c34d63aad11aa4321ef55ccb064af58b3ad8091079ae22bf83e5eb75d6" +dependencies = [ + "libc", + "rustc_version", + "stable_deref_trait", +] + [[package]] name = "md5" version = "0.7.0" @@ -1391,6 +1369,17 @@ dependencies = [ "zeroize", ] +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", +] + [[package]] name = "num-integer" version = "0.1.45" @@ -1452,6 +1441,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "oid" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c19903c598813dba001b53beeae59bb77ad4892c5c1b9b3500ce4293a0d06c2" +dependencies = [ + "serde", +] + [[package]] name = "once_cell" version = "1.18.0" @@ -1483,10 +1481,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] -name = "peeking_take_while" -version = "0.1.2" +name = "pem" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" +checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" +dependencies = [ + "base64 0.13.1", + "once_cell", + "regex", +] [[package]] name = "percent-encoding" @@ -1515,6 +1518,41 @@ dependencies = [ "indexmap 2.0.2", ] +[[package]] +name = "picky-asn1" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "295eea0f33c16be21e2a98b908fdd4d73c04dd48c8480991b76dbcf0cb58b212" +dependencies = [ + "oid", + "serde", + "serde_bytes", +] + +[[package]] +name = "picky-asn1-der" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5df7873a9e36d42dadb393bea5e211fe83d793c172afad5fb4ec846ec582793f" +dependencies = [ + "picky-asn1", + "serde", + "serde_bytes", +] + +[[package]] +name = "picky-asn1-x509" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c5f20f71a68499ff32310f418a6fad8816eac1a2859ed3f0c5c741389dd6208" +dependencies = [ + "base64 0.21.4", + "oid", + "picky-asn1", + "picky-asn1-der", + "serde", +] + [[package]] name = "pin-project" version = "1.1.3" @@ -1547,6 +1585,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1818,6 +1862,7 @@ dependencies = [ "num-integer", "num-iter", "num-traits", + "pem", "rand", "simple_asn1", "subtle", @@ -1847,10 +1892,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] -name = "rustc-hash" -version = "1.1.0" +name = "rustc_version" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver", +] [[package]] name = "rustix" @@ -1909,7 +1957,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d23be50e61fa06bbd63768efab380708f73f75010a7df679728c9a82d5f2088" dependencies = [ "arrayref", - "base64", + "base64 0.21.4", "macaddr", "num_enum", "rand", @@ -1948,6 +1996,15 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde_bytes" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" +dependencies = [ + "serde", +] + [[package]] name = "serde_derive" version = "1.0.188" @@ -2043,12 +2100,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "shlex" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" - [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -2127,6 +2178,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "subtle" version = "2.4.1" @@ -2167,6 +2224,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "target-lexicon" +version = "0.12.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" + [[package]] name = "tempfile" version = "3.6.0" @@ -2352,7 +2415,7 @@ dependencies = [ "async-stream", "async-trait", "axum", - "base64", + "base64 0.21.4", "bytes", "h2", "http", @@ -2483,12 +2546,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] -name = "tss2" -version = "0.1.3" +name = "tss-esapi" +version = "7.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de234df360c349f78ecd33f0816ab3842db635732212b5cfad67f2638336864e" +dependencies = [ + "bitfield", + "enumflags2", + "hostname-validator", + "log", + "mbox", + "num-derive", + "num-traits", + "oid", + "picky-asn1", + "picky-asn1-x509", + "regex", + "serde", + "tss-esapi-sys", + "zeroize", +] + +[[package]] +name = "tss-esapi-sys" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168c56265eb9153cbc97235aec648bdae6128ca18cd68e1344f114cdb8de5e69" +checksum = "535cd192581c2ec4d5f82e670b1d3fbba6a23ccce8c85de387642051d7cad5b5" dependencies = [ - "bindgen", + "pkg-config", + "target-lexicon", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 739a1f0c..66c7c10c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -75,7 +75,7 @@ exponential-backoff = { git = "https://github.com/yoshuawuyts/exponential-backof semtech-udp = { version = ">=0.11", default-features = false, features = [ "server", ] } -helium-crypto = ">=0.8" +helium-crypto = ">=0.8.3" time = { version = ">=0.3", features = ["std"] } [features] diff --git a/src/keypair.rs b/src/keypair.rs index dcea5d02..77bfa2a7 100644 --- a/src/keypair.rs +++ b/src/keypair.rs @@ -103,13 +103,20 @@ impl FromStr for Keypair { Some("tpm") => { let args = KeypairArgs::from_uri(&url).map_err(DecodeError::keypair_uri)?; let network = args.get("network", Network::MainNet)?; - let path = url.path(); + let key_identifier = &url.path()[1..]; + let key_access = url.host().unwrap(); - let keypair = tpm::Keypair::from_key_path(network, path) - .map(helium_crypto::Keypair::from) - .map_err(|err| { - uri_error!("could not load tpm keypair on path {path}: {err:?}") - })?; + let keypair = match key_access { + "esys" => tpm::KeypairHandle::from_key_handle( + network, + u32::from_str_radix(&key_identifier[2..], 16).unwrap(), + ) + .map(helium_crypto::Keypair::from), + _ => Err(helium_crypto::Error::invalid_keytype_str( + "unknown tpm key access type", + )), + } + .map_err(|err| uri_error!("could not load tpm key {key_access}: {err:?}"))?; Ok(keypair.into()) }