diff --git a/CHANGELOG.md b/CHANGELOG.md index 3caefd5b..cad581ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,15 +3,19 @@ ### Features - Upgrade the secrets function to version 0.11.0, adding support for static passwords, and KeepassXC integration ([#278][]) +- Add an SE050 driver and its tests ([#335][]) ### Changed - Upgrade the OpenPGP function to version 1.1.0, fixing minor specification compliance issues and an unlikely data corruption scenario +- Use SE050 entropy to bootstrap the random number generator ([#335][]) + ### Fixed - Upgrade ctaphid-dispatch, fixing panics after cancelled operations +[#335]: https://github.com/Nitrokey/nitrokey-3-firmware/pull/335 [#278]: https://github.com/Nitrokey/nitrokey-3-firmware/pull/278 [#277]: https://github.com/Nitrokey/nitrokey-3-firmware/pull/277 diff --git a/Cargo.lock b/Cargo.lock index 9b016a36..d9190fbe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,7 +5,7 @@ version = 3 [[package]] name = "admin-app" version = "0.1.0" -source = "git+https://github.com/Nitrokey/admin-app?tag=v0.1.0-nitrokey.4#5a8aedd1a6ec3d72df1954e8e13fb82982a946ed" +source = "git+https://github.com/Nitrokey/admin-app?tag=v0.1.0-nitrokey.5#68964474c5443fe10799bf9b2ceb31c723d72cf5" dependencies = [ "apdu-dispatch", "cbor-smol", @@ -17,6 +17,7 @@ dependencies = [ "serde", "strum_macros", "trussed", + "trussed-se050-backend", ] [[package]] @@ -43,9 +44,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.20" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab" dependencies = [ "memchr", ] @@ -71,9 +72,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.70" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "apdu-dispatch" @@ -94,17 +95,20 @@ dependencies = [ "apdu-dispatch", "cbor-smol", "ctaphid-dispatch", + "embedded-hal", "fido-authenticator", "hex", "ndef-app", "opcard", "piv-authenticator", "provisioner-app", + "se05x", "secrets-app", "serde", "trussed", "trussed-auth", "trussed-rsa-alloc", + "trussed-se050-backend", "trussed-staging", "trussed-usbip", "usbd-ctaphid", @@ -178,7 +182,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28" dependencies = [ - "critical-section 1.1.1", + "critical-section 1.1.2", ] [[package]] @@ -291,9 +295,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" [[package]] name = "byteorder" @@ -303,9 +307,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "camino" -version = "1.1.4" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" dependencies = [ "serde", ] @@ -322,7 +326,7 @@ dependencies = [ "cargo_metadata", "csv", "getopts", - "semver 1.0.17", + "semver 1.0.19", "serde", "serde_derive", "serde_json", @@ -336,7 +340,7 @@ version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c408da54db4c50d4693f7e649c299bc9de9c23ead86249e5368830bb32a734b" dependencies = [ - "semver 1.0.17", + "semver 1.0.19", "serde", "toml", "url", @@ -344,9 +348,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" +checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" dependencies = [ "serde", ] @@ -359,7 +363,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", - "semver 1.0.17", + "semver 1.0.19", "serde", "serde_json", ] @@ -393,9 +397,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cexpr" @@ -403,7 +410,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" dependencies = [ - "nom 5.1.2", + "nom 5.1.3", ] [[package]] @@ -495,9 +502,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.23" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" dependencies = [ "atty", "bitflags 1.3.2", @@ -521,9 +528,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "3.2.18" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" +checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" dependencies = [ "heck 0.4.1", "proc-macro-error", @@ -541,6 +548,17 @@ dependencies = [ "os_str_bytes", ] +[[package]] +name = "cmac" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8543454e3c3f5126effff9cd44d562af4e31fb8ce1cc0d3dcd8f084515dbc1aa" +dependencies = [ + "cipher 0.4.4", + "dbl", + "digest 0.10.7", +] + [[package]] name = "cobs" version = "0.2.3" @@ -573,9 +591,9 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.2" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" [[package]] name = "cortex-m" @@ -585,7 +603,7 @@ checksum = "8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9" dependencies = [ "bare-metal 0.2.5", "bitfield", - "critical-section 1.1.1", + "critical-section 1.1.2", "embedded-hal", "volatile-register", ] @@ -672,13 +690,19 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.6" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" dependencies = [ "libc", ] +[[package]] +name = "crc16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "338089f42c427b86394a5ee60ff321da23a5c89c9d89514c829687b26359fcff" + [[package]] name = "critical-section" version = "0.2.8" @@ -686,14 +710,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1706d332edc22aef4d9f23a6bb1c92360a403013c291af51247a737472dcae6" dependencies = [ "bare-metal 1.0.0", - "critical-section 1.1.1", + "critical-section 1.1.2", ] [[package]] name = "critical-section" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6548a0ad5d2549e111e1f6a11a6c2e2d00ce6a3dafe22948d67c2b443f775e52" +checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" [[package]] name = "crunchy" @@ -725,9 +749,9 @@ dependencies = [ [[package]] name = "crypto-mac" -version = "0.11.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e" dependencies = [ "generic-array 0.14.7", "subtle", @@ -745,9 +769,9 @@ dependencies = [ [[package]] name = "csv" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b015497079b9a9d69c02ad25de6c0a6edef051ea6360a327d0bd05802ef64ad" +checksum = "626ae34994d3d8d668f4269922248239db4ae42d538b14c398b74a52208e8086" dependencies = [ "csv-core", "itoa", @@ -767,7 +791,7 @@ dependencies = [ [[package]] name = "ctap-types" version = "0.1.2" -source = "git+https://github.com/Nitrokey/ctap-types?rev=42751efdc3c717135e8f26ceaa6ce23fb57d0498#42751efdc3c717135e8f26ceaa6ce23fb57d0498" +source = "git+https://github.com/Nitrokey/ctap-types?rev=v0.1.2-nitrokey.3#0d9f6f5d7ff7f6c90c8f284037699f749daee641" dependencies = [ "bitflags 1.3.2", "cbor-smol", @@ -778,7 +802,9 @@ dependencies = [ "interchange 0.2.2", "iso7816", "serde", + "serde-byte-array", "serde-indexed", + "serde_bytes", "serde_repr", ] @@ -803,22 +829,31 @@ checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" [[package]] name = "dashmap" -version = "5.4.0" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.1", "lock_api", "once_cell", "parking_lot_core", ] +[[package]] +name = "dbl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd2735a791158376708f9347fe8faba9667589d82427ef3aed6794a8981de3d9" +dependencies = [ + "generic-array 0.14.7", +] + [[package]] name = "delog" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd67f90cc14e0a91cf693141453cccf2b74db9d59c40f6be18b79169fe77dfd" +checksum = "af2b93368262340c9d4441251b824500d1b641a50957ecf4219a2cc41b9eac8f" dependencies = [ "log", ] @@ -907,9 +942,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", "const-oid", @@ -1005,9 +1040,11 @@ dependencies = [ "nfc-device", "nrf52840-hal", "nrf52840-pac", + "rand", "rand_core", "ref-swap", "rtt-target", + "se05x", "serde", "spi-memory", "systick-monotonic", @@ -1090,7 +1127,7 @@ dependencies = [ [[package]] name = "fido-authenticator" version = "0.1.1" -source = "git+https://github.com/Nitrokey/fido-authenticator.git?rev=0e3e56558505f5fdc755c41ff91727c20cdd3ba6#0e3e56558505f5fdc755c41ff91727c20cdd3ba6" +source = "git+https://github.com/Nitrokey/fido-authenticator.git?rev=v0.1.1-nitrokey.6#d318c117a26ce75194e122a36f6e03ec95c960e0" dependencies = [ "apdu-dispatch", "ctap-types", @@ -1107,13 +1144,13 @@ dependencies = [ [[package]] name = "fixed" -version = "1.23.1" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79386fdcec5e0fde91b1a6a5bcd89677d1f9304f7f986b154a1b9109038854d9" +checksum = "02c69ce7e7c0f17aa18fdd9d0de39727adb9c6281f2ad12f57cbe54ae6e76e7d" dependencies = [ "az", "bytemuck", - "half 2.2.1", + "half 2.3.1", "typenum", ] @@ -1151,18 +1188,18 @@ dependencies = [ [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ "percent-encoding", ] [[package]] name = "fugit" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab17bb279def6720d058cb6c052249938e7f99260ab534879281a95367a87e5" +checksum = "17186ad64927d5ac8f02c1e77ccefa08ccd9eaa314d5a4772278aa204a22f7e7" dependencies = [ "gcd", ] @@ -1256,16 +1293,16 @@ version = "0.1.0" dependencies = [ "cargo_metadata", "gumdrop", - "semver 1.0.17", + "semver 1.0.19", "serde", "toml", ] [[package]] name = "generator" -version = "0.7.3" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a20a288a94683f5f4da0adecdbe095c94a77c295e514cc6484e9394dd8376e" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" dependencies = [ "cc", "libc", @@ -1313,37 +1350,15 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "libc", "wasi", ] -[[package]] -name = "git-version" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6b0decc02f4636b9ccad390dcbe77b722a77efedfa393caf8379a51d5c61899" -dependencies = [ - "git-version-macro", - "proc-macro-hack", -] - -[[package]] -name = "git-version-macro" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe69f1cbdb6e28af2bac214e943b99ce8a0a06b447d15d3e61161b0423139f3f" -dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "glob" version = "0.3.1" @@ -1389,10 +1404,11 @@ checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" [[package]] name = "half" -version = "2.2.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" dependencies = [ + "cfg-if", "crunchy", ] @@ -1420,6 +1436,12 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" + [[package]] name = "heapless" version = "0.6.1" @@ -1536,7 +1558,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -1556,9 +1578,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -1571,7 +1593,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", ] [[package]] @@ -1602,7 +1624,7 @@ dependencies = [ [[package]] name = "iso7816" version = "0.1.1" -source = "git+https://github.com/Nitrokey/iso7816.git?tag=v0.1.1-nitrokey.1#d1ee4146c43b9f25d21821c70fefdd87b886f4a9" +source = "git+https://github.com/nitrokey/iso7816.git?rev=v0.1.1-nitrokey.2#5765eaac0f19313cf908071d8dfc9b1cd3bdae0a" dependencies = [ "delog", "heapless 0.7.16", @@ -1610,9 +1632,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "lazy_static" @@ -1637,7 +1659,7 @@ dependencies = [ "heapless 0.7.16", "heapless-bytes 0.3.0", "littlefs2", - "postcard 1.0.4", + "postcard 1.0.8", "rand", "serde", "serial_test", @@ -1646,9 +1668,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.141" +version = "0.2.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" +checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b" [[package]] name = "libloading" @@ -1662,9 +1684,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" +checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" [[package]] name = "linked_list_allocator" @@ -1701,9 +1723,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" dependencies = [ "autocfg", "scopeguard", @@ -1711,12 +1733,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "loom" @@ -1796,14 +1815,14 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "micro-ecc-sys" @@ -1890,9 +1909,9 @@ dependencies = [ [[package]] name = "nom" -version = "5.1.2" +version = "5.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +checksum = "08959a387a676302eebf4ddbcbc611da04285579f76f88ee0506c63b1a61dd4b" dependencies = [ "memchr", "version_check", @@ -1988,9 +2007,9 @@ dependencies = [ [[package]] name = "num-bigint-dig" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2399c9463abc5f909349d8aa9ba080e0b88b3ce2885389b60b993f39b1a56905" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" dependencies = [ "byteorder", "lazy_static", @@ -2046,9 +2065,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", "libm", @@ -2056,9 +2075,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "opaque-debug" @@ -2089,9 +2108,9 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "6.5.0" +version = "6.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" +checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac" [[package]] name = "overload" @@ -2148,15 +2167,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys", + "windows-targets 0.48.5", ] [[package]] @@ -2167,15 +2186,15 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -2252,9 +2271,9 @@ dependencies = [ [[package]] name = "postcard" -version = "1.0.4" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfa512cd0d087cc9f99ad30a1bf64795b67871edbead083ffc3a4dfafa59aa00" +checksum = "a55c51ee6c0db07e68448e336cf8ea4131a620edefebf9893e759b2d793420f8" dependencies = [ "cobs", "heapless 0.7.16", @@ -2307,17 +2326,11 @@ dependencies = [ "version_check", ] -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" dependencies = [ "unicode-ident", ] @@ -2356,9 +2369,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.32" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -2401,9 +2414,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ "bitflags 1.3.2", ] @@ -2416,13 +2429,14 @@ checksum = "09c30c54dffee5b40af088d5d50aa3455c91a0127164b51f0215efc4cb28fb3c" [[package]] name = "regex" -version = "1.7.3" +version = "1.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" +checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-automata 0.3.9", + "regex-syntax 0.7.5", ] [[package]] @@ -2431,7 +2445,18 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax", + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.7.5", ] [[package]] @@ -2440,6 +2465,12 @@ version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +[[package]] +name = "regex-syntax" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + [[package]] name = "rsa" version = "0.8.2" @@ -2447,7 +2478,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55a77d189da1fee555ad95b7e50e7457d91c0e089ec68ca69ad2989413bbdab4" dependencies = [ "byteorder", - "digest 0.10.6", + "digest 0.10.7", "num-bigint-dig", "num-integer", "num-iter", @@ -2455,7 +2486,7 @@ dependencies = [ "pkcs1", "pkcs8", "rand_core", - "sha2 0.10.6", + "sha2 0.10.8", "signature 2.1.0", "subtle", "zeroize", @@ -2533,20 +2564,20 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.17", + "semver 1.0.19", ] [[package]] name = "rustversion" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "salty" @@ -2568,9 +2599,32 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "se05x" +version = "0.0.1" +source = "git+https://github.com/Nitrokey/se05x.git?tag=v0.1.0#d8e4d1bdccce12aa8e506fb9b504d85d33efa8ed" +dependencies = [ + "aes", + "bitflags 2.4.0", + "byteorder", + "cmac", + "crc16", + "delog", + "embedded-hal", + "heapless 0.7.16", + "hex-literal 0.4.1", + "iso7816", + "lpc55-hal", + "nrf-hal-common", + "rand", + "serde", + "serde-byte-array", + "typed-builder", +] [[package]] name = "secrets-app" @@ -2606,9 +2660,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0" dependencies = [ "serde", ] @@ -2621,9 +2675,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.180" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea67f183f058fe88a4e3ec6e2788e003840893b91bac4559cabedd00863b3ed" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" dependencies = [ "serde_derive", ] @@ -2640,12 +2694,20 @@ dependencies = [ [[package]] name = "serde-indexed" version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "431fb604dab775c7bdabdab23b491ec773de085afd92b5dac26b8f3db5965f42" +source = "git+https://github.com/nitrokey/serde-indexed.git?tag=v0.1.0-nitrokey.2#5005d23cb4ee8622e62188ea0f9466146f851f0d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.37", +] + +[[package]] +name = "serde_bytes" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" +dependencies = [ + "serde", ] [[package]] @@ -2660,20 +2722,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.180" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e744d7782b686ab3b73267ef05697159cc0e5abbed3f47f9933165e5219036" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.37", ] [[package]] name = "serde_json" -version = "1.0.96" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" dependencies = [ "itoa", "ryu", @@ -2682,13 +2744,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.12" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" +checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.37", ] [[package]] @@ -2724,7 +2786,7 @@ checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.6", + "digest 0.10.7", ] [[package]] @@ -2742,20 +2804,20 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.6" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.6", + "digest 0.10.7", ] [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "c1b21f559e07218024e7e9f90f96f601825397de0e25420135f7f952453fed0b" dependencies = [ "lazy_static", ] @@ -2807,24 +2869,24 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", "rand_core", ] [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" -version = "1.10.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" [[package]] name = "spdx" @@ -2922,14 +2984,14 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.28", + "syn 2.0.37", ] [[package]] name = "subtle" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "syn" @@ -2944,9 +3006,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.28" +version = "2.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567" +checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" dependencies = [ "proc-macro2", "quote", @@ -2978,9 +3040,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" dependencies = [ "winapi-util", ] @@ -3048,20 +3110,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.37", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ "once_cell", "valuable", @@ -3080,9 +3142,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" dependencies = [ "matchers", "nu-ansi-term", @@ -3129,7 +3191,7 @@ dependencies = [ "serde", "serde-indexed", "sha-1", - "sha2 0.10.6", + "sha2 0.10.8", "zeroize", ] @@ -3144,7 +3206,7 @@ dependencies = [ "rand_core", "serde", "serde-byte-array", - "sha2 0.10.6", + "sha2 0.10.8", "subtle", "trussed", ] @@ -3163,6 +3225,27 @@ dependencies = [ "trussed", ] +[[package]] +name = "trussed-se050-backend" +version = "0.1.0" +source = "git+https://github.com/Nitrokey/trussed-se050-backend.git?tag=v0.1.0-test-driver#d71261b350858e117b3766172cbc896fc1b75d11" +dependencies = [ + "cbor-smol", + "delog", + "embedded-hal", + "hex-literal 0.4.1", + "hmac 0.12.1", + "iso7816", + "littlefs2", + "rand", + "rand_chacha", + "se05x", + "serde", + "serde-byte-array", + "serde_bytes", + "trussed", +] + [[package]] name = "trussed-staging" version = "0.1.0" @@ -3175,7 +3258,7 @@ dependencies = [ "rand_core", "serde", "serde-byte-array", - "sha2 0.10.6", + "sha2 0.10.8", "trussed", ] @@ -3195,11 +3278,31 @@ dependencies = [ "usbip-device", ] +[[package]] +name = "typed-builder" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34085c17941e36627a879208083e25d357243812c30e7d7387c3b954f30ade16" +dependencies = [ + "typed-builder-macro", +] + +[[package]] +name = "typed-builder-macro" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f03ca4cb38206e2bef0700092660bb74d696f808514dae47fa1467cbfe26e96e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.37", +] + [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ufmt-write" @@ -3209,9 +3312,9 @@ checksum = "e87a2ed6b42ec5e28cc3b94c09982969e9227600b2e3dcbc1db927a84c06bd69" [[package]] name = "unicase" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" dependencies = [ "version_check", ] @@ -3224,9 +3327,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -3245,9 +3348,9 @@ checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode-xid" @@ -3257,9 +3360,9 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "universal-hash" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ "crypto-common", "subtle", @@ -3273,9 +3376,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.3.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna", @@ -3347,7 +3450,7 @@ version = "1.5.0-test.20230704" dependencies = [ "apps", "cfg-if", - "clap 3.2.23", + "clap 3.2.25", "clap-num", "delog", "dialoguer", @@ -3417,8 +3520,8 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "webcrypt" -version = "0.7.0" -source = "git+https://github.com/Nitrokey/nitrokey-webcrypt-rust?tag=v0.7.0#01f821c9f3a76780e72bec6fe09d40898bfe6f95" +version = "0.8.0" +source = "git+https://github.com/nitrokey/nitrokey-webcrypt-rust?tag=v0.8.0-rc2#d1b9fbb77df998f5fb1e9e8997afefaa69360508" dependencies = [ "apdu-dispatch", "cbor-smol", @@ -3426,11 +3529,11 @@ dependencies = [ "ctaphid-dispatch", "delog", "generic-array 0.14.7", - "git-version", "heapless 0.7.16", "heapless-bytes 0.3.0", "serde", "serde-indexed", + "serde_bytes", "trussed", "trussed-rsa-alloc", "trussed-staging", @@ -3454,9 +3557,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -3469,11 +3572,11 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.44.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -3482,7 +3585,7 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", ] [[package]] @@ -3491,13 +3594,28 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.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]] @@ -3506,42 +3624,84 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[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_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_i686_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[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_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[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_gnullvm" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[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_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "zeroize" version = "1.6.0" @@ -3559,5 +3719,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.37", ] diff --git a/Cargo.toml b/Cargo.toml index c2c38ba8..3192b189 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,11 +12,10 @@ version = "1.5.0-test.20230704" [patch.crates-io] # forked -admin-app = { git = "https://github.com/Nitrokey/admin-app", tag = "v0.1.0-nitrokey.4" } -ctap-types = { git = "https://github.com/Nitrokey/ctap-types", rev = "42751efdc3c717135e8f26ceaa6ce23fb57d0498" } -fido-authenticator = { git = "https://github.com/Nitrokey/fido-authenticator.git", rev = "0e3e56558505f5fdc755c41ff91727c20cdd3ba6" } +admin-app = { git = "https://github.com/Nitrokey/admin-app", tag = "v0.1.0-nitrokey.5" } +ctap-types = { git = "https://github.com/Nitrokey/ctap-types", rev = "v0.1.2-nitrokey.3" } +fido-authenticator = { git = "https://github.com/Nitrokey/fido-authenticator.git", rev = "v0.1.1-nitrokey.6" } flexiber = { git = "https://github.com/Nitrokey/flexiber", tag = "0.1.1.nitrokey" } -iso7816 = { git = "https://github.com/Nitrokey/iso7816.git", tag = "v0.1.1-nitrokey.1"} lpc55-hal = { git = "https://github.com/Nitrokey/lpc55-hal", tag = "v0.3.0-nitrokey.2" } trussed = { git = "https://github.com/Nitrokey/trussed", tag = "v0.1.0-nitrokey.12" } @@ -28,13 +27,17 @@ apdu-dispatch = { git = "https://github.com/Nitrokey/apdu-dispatch", tag = "v0.1 # unreleased crates secrets-app = { git = "https://github.com/Nitrokey/trussed-secrets-app", tag = "v0.13.0-rc1" } -webcrypt = { git = "https://github.com/Nitrokey/nitrokey-webcrypt-rust", tag = "v0.7.0"} +webcrypt = { git = "https://github.com/nitrokey/nitrokey-webcrypt-rust", tag = "v0.8.0-rc2"} opcard = { git = "https://github.com/Nitrokey/opcard-rs", tag = "v1.1.1" } piv-authenticator = { git = "https://github.com/Nitrokey/piv-authenticator", tag = "v0.3.2" } trussed-auth = { git = "https://github.com/Nitrokey/trussed-auth", tag = "v0.2.2-nitrokey.1" } trussed-rsa-alloc = { git = "https://github.com/Nitrokey/trussed-rsa-backend.git", tag = "v0.1.0"} +iso7816 = { git = "https://github.com/nitrokey/iso7816.git", rev = "v0.1.1-nitrokey.2"} trussed-staging = { git = "https://github.com/trussed-dev/trussed-staging.git", branch = "hmacsha256p256" } trussed-usbip = { git = "https://github.com/Nitrokey/pc-usbip-runner.git", tag = "v0.0.1-nitrokey.3" } +se05x = { git = "https://github.com/Nitrokey/se05x.git", tag = "v0.1.0"} +serde-indexed = { git = "https://github.com/nitrokey/serde-indexed.git", tag = "v0.1.0-nitrokey.2" } +trussed-se050-backend = { git = "https://github.com/Nitrokey/trussed-se050-backend.git", tag = "v0.1.0-test-driver" } [profile.release] codegen-units = 1 diff --git a/Makefile b/Makefile index bc7cf2ad..f6248fa6 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,10 @@ check: $(MAKE) -C runners/embedded check-all $(MAKE) -C runners/usbip check +.PHONY: doc +doc: + $(MAKE) -C runners/embedded doc-nk3am + .PHONY: lint lint: cargo fmt -- --check diff --git a/components/apps/Cargo.toml b/components/apps/Cargo.toml index f783bc60..af2f5790 100644 --- a/components/apps/Cargo.toml +++ b/components/apps/Cargo.toml @@ -21,11 +21,14 @@ trussed-staging = { version = "0.1.0", features = ["wrap-key-to-file", "chunked" admin-app = "0.1.0" fido-authenticator = { version = "0.1.1", features = ["dispatch"], optional = true } ndef-app = { path = "../ndef-app", optional = true } -webcrypt = { version = "0.7.0", optional = true } +webcrypt = { version = "0.8.0", optional = true } secrets-app = { version = "0.13.0", features = ["apdu-dispatch", "ctaphid"], optional = true } opcard = { version = "1.1.1", features = ["apdu-dispatch", "delog", "rsa2048-gen", "rsa4096"], optional = true } piv-authenticator = { version = "0.3.1", features = ["apdu-dispatch", "delog"], optional = true } provisioner-app = { path = "../provisioner-app", optional = true } +se05x = { version = "0.0.1", optional = true} +trussed-se050-backend = { version = "0.1.0", optional = true } +embedded-hal = "0.2.7" [dev-dependencies] cbor-smol = "0.4" @@ -42,6 +45,8 @@ webcrypt = ["dep:webcrypt", "backend-auth", "backend-rsa", "backend-staging", "t fido-authenticator = ["dep:fido-authenticator", "usbd-ctaphid"] opcard = ["dep:opcard", "backend-rsa", "backend-auth", "backend-staging"] piv-authenticator = ["dep:piv-authenticator", "backend-rsa", "backend-auth", "backend-staging"] +se050-test-app = ["se050", "admin-app/se050"] +se050 = ["trussed-se050-backend", "dep:se05x"] # backends backend-auth = ["trussed-auth"] diff --git a/components/apps/src/dispatch.rs b/components/apps/src/dispatch.rs index 7e192021..26951812 100644 --- a/components/apps/src/dispatch.rs +++ b/components/apps/src/dispatch.rs @@ -1,3 +1,6 @@ +#[cfg(not(feature = "se050"))] +use core::marker::PhantomData; + use trussed::{ api::{Reply, Request}, error::Error as TrussedError, @@ -6,13 +9,25 @@ use trussed::{ Platform, }; -#[cfg(feature = "backend-auth")] +#[cfg(any( + feature = "backend-auth", + feature = "backend-rsa", + feature = "backend-staging" +))] use trussed::{ api::{reply, request}, backend::Backend as _, serde_extensions::{ExtensionDispatch, ExtensionId, ExtensionImpl}, Bytes, }; + +#[cfg(feature = "se050")] +use embedded_hal::blocking::delay::DelayUs; +#[cfg(feature = "se050")] +use se05x::{se05x::Se05X, t1::I2CForT1}; +#[cfg(feature = "se050")] +use trussed_se050_backend::{manage::ManageExtension, Context as Se050Context, Se050Backend}; + #[cfg(feature = "backend-auth")] use trussed_auth::{AuthBackend, AuthContext, AuthExtension, MAX_HW_KEY_LEN}; @@ -28,12 +43,15 @@ use trussed_staging::{ #[cfg(all(feature = "webcrypt", feature = "backend-staging"))] use trussed_staging::hmacsha256p256::HmacSha256P256Extension; -#[derive(Debug)] -pub struct Dispatch { +pub struct Dispatch { #[cfg(feature = "backend-auth")] auth: AuthBackend, #[cfg(feature = "backend-staging")] staging: StagingBackend, + #[cfg(feature = "se050")] + se050: Option>, + #[cfg(not(feature = "se050"))] + __: PhantomData<(T, D)>, } #[derive(Default)] @@ -42,10 +60,15 @@ pub struct DispatchContext { auth: AuthContext, #[cfg(feature = "backend-staging")] staging: StagingContext, + #[cfg(feature = "se050")] + se050: Se050Context, } -impl Dispatch { - pub fn new(auth_location: Location) -> Self { +impl Dispatch { + pub fn new( + auth_location: Location, + #[cfg(feature = "se050")] se050: Option>, + ) -> Self { #[cfg(not(feature = "backend-auth"))] let _ = auth_location; Self { @@ -53,20 +76,53 @@ impl Dispatch { auth: AuthBackend::new(auth_location), #[cfg(feature = "backend-staging")] staging: StagingBackend::new(), + #[cfg(feature = "se050")] + se050: se050.map(trussed_se050_backend::Se050Backend::new), + #[cfg(not(feature = "se050"))] + __: Default::default(), } } #[cfg(feature = "backend-auth")] - pub fn with_hw_key(auth_location: Location, hw_key: Bytes) -> Self { + pub fn with_hw_key( + auth_location: Location, + hw_key: Bytes, + #[cfg(feature = "se050")] se050: Option>, + ) -> Self { Self { auth: AuthBackend::with_hw_key(auth_location, hw_key), #[cfg(feature = "backend-staging")] staging: StagingBackend::new(), + #[cfg(feature = "se050")] + se050: se050.map(trussed_se050_backend::Se050Backend::new), + #[cfg(not(feature = "se050"))] + __: Default::default(), } } } -impl ExtensionDispatch for Dispatch { +// HACK around #[cfg] for where clauses. See https://users.rust-lang.org/t/cfg-on-where-clause-items/90292 + +#[cfg(feature = "se050")] +pub trait Twi: I2CForT1 {} +#[cfg(feature = "se050")] +impl Twi for T {} +#[cfg(feature = "se050")] +pub trait Delay: DelayUs {} +#[cfg(feature = "se050")] +impl> Delay for D {} + +#[cfg(not(feature = "se050"))] +pub trait Twi {} +#[cfg(not(feature = "se050"))] +impl Twi for T {} + +#[cfg(not(feature = "se050"))] +pub trait Delay {} +#[cfg(not(feature = "se050"))] +impl Delay for D {} + +impl ExtensionDispatch for Dispatch { type Context = DispatchContext; type BackendId = Backend; type ExtensionId = Extension; @@ -91,6 +147,12 @@ impl ExtensionDispatch for Dispatch { self.staging .request(&mut ctx.core, &mut ctx.backends.staging, request, resources) } + #[cfg(feature = "se050")] + Backend::Se050 => self + .se050 + .as_mut() + .ok_or(TrussedError::GeneralError)? + .request(&mut ctx.core, &mut ctx.backends.se050, request, resources), } } @@ -102,6 +164,7 @@ impl ExtensionDispatch for Dispatch { request: &request::SerdeExtension, resources: &mut ServiceResources

, ) -> Result { + #[allow(unreachable_patterns)] match backend { #[cfg(feature = "backend-auth")] Backend::Auth => match extension { @@ -143,6 +206,20 @@ impl ExtensionDispatch for Dispatch { #[allow(unreachable_patterns)] _ => Err(TrussedError::RequestNotAvailable), }, + #[cfg(feature = "se050")] + Backend::Se050 => { + match extension { + Extension::Se050Manage => as ExtensionImpl>::extension_request_serialized( + self.se050.as_mut().ok_or(TrussedError::GeneralError)?, + &mut ctx.core, + &mut ctx.backends.se050, + request, + resources + ), + _ => Err(TrussedError::RequestNotAvailable), + } + } + _ => Err(TrussedError::RequestNotAvailable), } } } @@ -155,6 +232,8 @@ pub enum Backend { SoftwareRsa, #[cfg(feature = "backend-staging")] Staging, + #[cfg(feature = "se050")] + Se050, } #[derive(Debug, Clone, Copy)] @@ -167,6 +246,8 @@ pub enum Extension { WrapKeyToFile, #[cfg(feature = "backend-staging")] HmacShaP256, + #[cfg(feature = "se050")] + Se050Manage, } impl From for u8 { @@ -180,6 +261,8 @@ impl From for u8 { Extension::WrapKeyToFile => 2, #[cfg(feature = "backend-staging")] Extension::HmacShaP256 => 3, + #[cfg(feature = "se050")] + Extension::Se050Manage => 4, } } } @@ -197,35 +280,44 @@ impl TryFrom for Extension { 2 => Ok(Extension::WrapKeyToFile), #[cfg(feature = "backend-staging")] 3 => Ok(Extension::HmacShaP256), + #[cfg(feature = "se050")] + 4 => Ok(Extension::Se050Manage), _ => Err(TrussedError::InternalError), } } } #[cfg(feature = "backend-auth")] -impl ExtensionId for Dispatch { +impl ExtensionId for Dispatch { type Id = Extension; const ID: Self::Id = Self::Id::Auth; } #[cfg(feature = "backend-staging")] -impl ExtensionId for Dispatch { +impl ExtensionId for Dispatch { type Id = Extension; const ID: Self::Id = Self::Id::Chunked; } #[cfg(feature = "backend-staging")] -impl ExtensionId for Dispatch { +impl ExtensionId for Dispatch { type Id = Extension; const ID: Self::Id = Self::Id::WrapKeyToFile; } #[cfg(all(feature = "backend-staging", feature = "webcrypt"))] -impl ExtensionId for Dispatch { +impl ExtensionId for Dispatch { type Id = Extension; const ID: Self::Id = Self::Id::HmacShaP256; } + +#[cfg(feature = "se050")] +impl ExtensionId for Dispatch { + type Id = Extension; + + const ID: Self::Id = Self::Id::Se050Manage; +} diff --git a/components/apps/src/lib.rs b/components/apps/src/lib.rs index 454c5d2c..ee671a72 100644 --- a/components/apps/src/lib.rs +++ b/components/apps/src/lib.rs @@ -10,6 +10,8 @@ use apdu_dispatch::{ }; use core::marker::PhantomData; use ctaphid_dispatch::app::App as CtaphidApp; +#[cfg(feature = "se050")] +use embedded_hal::blocking::delay::DelayUs; use serde::{Deserialize, Serialize}; use trussed::{ backend::BackendId, client::ClientBuilder, interrupt::InterruptFlag, platform::Syscall, @@ -71,6 +73,14 @@ pub trait Runner { type Store: trussed::store::Store; #[cfg(feature = "provisioner-app")] type Filesystem: trussed::types::LfsStorage + 'static; + #[cfg(feature = "se050")] + type Twi: se05x::t1::I2CForT1 + 'static; + #[cfg(feature = "se050")] + type Se050Timer: DelayUs + 'static; + #[cfg(not(feature = "se050"))] + type Twi: 'static; + #[cfg(not(feature = "se050"))] + type Se050Timer: 'static; fn uuid(&self) -> [u8; 16]; } @@ -82,7 +92,10 @@ pub struct Data { pub _marker: PhantomData, } -type Client = ClientImplementation<::Syscall, Dispatch>; +type Client = ClientImplementation< + ::Syscall, + Dispatch<::Twi, ::Se050Timer>, +>; type AdminApp = admin_app::App, ::Reboot, AdminStatus, Config>; #[cfg(feature = "fido-authenticator")] @@ -174,6 +187,7 @@ impl Apps { App::new(runner, &mut make_client, (), &admin.config().fido), App::new(runner, &mut make_client, (), &()), ); + Self { #[cfg(all(feature = "fido-authenticator", not(feature = "webcrypt")))] fido: App::new(runner, &mut make_client, (), &admin.config().fido), @@ -195,7 +209,7 @@ impl Apps { pub fn with_service( runner: &R, - trussed: &mut Service, + trussed: &mut Service>, data: Data, ) -> Self where @@ -405,6 +419,16 @@ impl App for AdminApp { static INTERRUPT: InterruptFlag = InterruptFlag::new(); Some(&INTERRUPT) } + + fn backends(runner: &R, _config: &()) -> &'static [BackendId] { + const BACKENDS_ADMIN: &[BackendId] = &[ + #[cfg(feature = "se050-test-app")] + BackendId::Custom(Backend::Se050), + BackendId::Core, + ]; + let _ = runner; + BACKENDS_ADMIN + } } #[cfg(feature = "fido-authenticator")] diff --git a/runners/embedded/Cargo.toml b/runners/embedded/Cargo.toml index 1c4d10d7..2771a3fb 100644 --- a/runners/embedded/Cargo.toml +++ b/runners/embedded/Cargo.toml @@ -28,6 +28,7 @@ serde = { version = "1.0", default-features = false } heapless = "0.7" heapless-bytes = { version = "0.3.0", features = ["cbor"] } lfs-backup = { path = "../../components/lfs-backup" } +rand = { version = "0.8.5", default-features = false } ### protocols and dispatchers apdu-dispatch = "0.1" @@ -62,6 +63,7 @@ systick-monotonic = { version = "1.0.0", optional = true } alloc-cortex-m = { version = "0.4.3", optional = true } bitflags = "1.3.2" ref-swap = "0.1.0" +se05x = { version = "0.0.1", optional = true } [build-dependencies] cargo-lock = "7" @@ -96,8 +98,11 @@ board-nk3am = ["soc-nrf52840", "extflash_spi"] board-nk3xn = ["soc-lpc55"] -soc-nrf52840 = ["nrf52840-hal", "nrf52840-pac", "chacha20"] -soc-lpc55 = ["lpc55-hal", "lpc55-pac", "fm11nc08", "systick-monotonic"] +soc-nrf52840 = ["nrf52840-hal", "nrf52840-pac", "chacha20", "se05x?/nrf"] +soc-lpc55 = ["lpc55-hal", "lpc55-pac", "fm11nc08", "systick-monotonic", "se05x?/lpc55", "chacha20"] + +se050 = ["dep:se05x", "apps/se050"] +se050-test-app = ["se050", "apps/se050-test-app"] extflash_qspi = [] extflash_spi = [] diff --git a/runners/embedded/Makefile b/runners/embedded/Makefile index 35b188af..86da2f42 100644 --- a/runners/embedded/Makefile +++ b/runners/embedded/Makefile @@ -41,7 +41,7 @@ delim = , space := $(null) # COMMA_FEATURES = $(subst $(space),$(delim),$(BUILD_FEATURES)) -.PHONY: list build reset program check check-all clean clean-all check-env set-vars +.PHONY: list build reset program check doc check-all clean clean-all check-env set-vars # default target -> just build all "shortcuts" all: build-nrfdk build-nk3am build-proto1 build-nk3xn $(ARTIFACTS) @@ -152,6 +152,20 @@ check: check-banner $(SRCS) check-var-BOARD check-var-BUILD_PROFILE check-var-SO --features $(COMMA_FEATURES) \ --quiet --profile $(CUSTOM_PROFILE) +doc: check-banner $(SRCS) check-var-BOARD check-var-BUILD_PROFILE check-var-SOC + + cargo --version + + cp -f $(CFG_PATH) cfg.toml + echo '' >> cfg.toml + echo '[build]' >> cfg.toml + echo 'build_profile = "$(BUILD_PROFILE)"' >> cfg.toml + echo 'board = "$(BOARD)"' >> cfg.toml + + cargo doc --target $(TARGET) \ + --features $(COMMA_FEATURES) \ + --verbose + clean: clean-banner check-var-BOARD check-var-BUILD_PROFILE rm -f ./$(OUT_BIN) ./$(OUT_ELF) ./$(OUT_IHEX) $(RAW_OUT) $(SYMBOLS) $(LOG) diff --git a/runners/embedded/src/bin/app-nrf.rs b/runners/embedded/src/bin/app-nrf.rs index e9071bc6..673e1eff 100644 --- a/runners/embedded/src/bin/app-nrf.rs +++ b/runners/embedded/src/bin/app-nrf.rs @@ -18,7 +18,6 @@ mod app { rng::Rng, timer::Timer, }; - use rand_core::SeedableRng; use trussed::types::{Bytes, Location}; #[shared] @@ -67,7 +66,9 @@ mod app { ERL::soc::init_bootup(&ctx.device.FICR, &ctx.device.UICR, &mut ctx.device.POWER); + #[cfg(feature = "extflash_qspi")] let mut delay_timer = Timer::::new(ctx.device.TIMER0); + let se050_timer = Timer::::new(ctx.device.TIMER1); let dev_gpiote = Gpiote::new(ctx.device.GPIOTE); let mut board_gpio = { @@ -142,12 +143,6 @@ mod app { let usbnfcinit = ERL::init_usb_nfc(usbd_ref, None); /* TODO: set up fingerprint device */ /* TODO: set up SE050 device */ - - /* *********************************** */ - /* in the meantime just test i2c comms */ - /* SE050 minimal functional test - TO BE REMOVED on SE050 inclusion*/ - - use embedded_hal::blocking::delay::DelayMs; use nrf52840_hal::prelude::OutputPin; if let Some(se_ena) = &mut board_gpio.se_power { @@ -161,48 +156,29 @@ mod app { } } - let mut twim = nrf52840_hal::twim::Twim::new( + let twim = nrf52840_hal::twim::Twim::new( ctx.device.TWIM1, board_gpio.se_pins.take().unwrap(), nrf52840_hal::twim::Frequency::K400, ); - - delay_timer.delay_ms(100u32); - - // RESYNC command - let write_buf = [0x5a, 0xc0, 0x00, 0xff, 0xfc]; - match twim.write(0x48, &write_buf) { - Err(e) => { - panic!("i2c: failed I2C write! - {:?}", e); - } - Ok(_) => { - debug!("i2c: write I2C success...."); - } + #[cfg(not(feature = "se050"))] + { + let _ = se050_timer; + let _ = twim; } - delay_timer.delay_ms(100u32); + /* TODO: set up display */ - // RESYNC response - let mut response = [0; 2]; - match twim.read(0x48, &mut response) { - Err(e) => { - panic!("i2c: failed I2C read! - {:?}", e); - } - Ok(_) => { - if response == [0xa5, 0xe0] { - debug!("i2c: se050 activation RESYNC cool"); - } else { - panic!("i2c: se050 activation RESYNC fail!"); - } - } - } - /* end of se050 minial functional test */ - /* *********************************** */ + let mut dev_rng = Rng::new(ctx.device.RNG); - /* TODO: set up display */ + #[cfg(feature = "se050")] + let (se050, chacha_rng) = + ERL::init_se050(twim, se050_timer, &mut dev_rng, &mut init_status); - let dev_rng = Rng::new(ctx.device.RNG); - let chacha_rng = chacha20::ChaCha8Rng::from_rng(dev_rng).unwrap(); + #[cfg(not(feature = "se050"))] + use rand::{Rng as _, SeedableRng}; + #[cfg(not(feature = "se050"))] + let chacha_rng = chacha20::ChaCha8Rng::from_seed(dev_rng.gen()); #[cfg(feature = "board-nk3am")] let ui = ERL::soc::board::init_ui( @@ -230,7 +206,12 @@ mod app { let mut trussed_service = trussed::service::Service::with_dispatch( platform, - apps::Dispatch::with_hw_key(Location::Internal, Bytes::from_slice(&er).unwrap()), + apps::Dispatch::with_hw_key( + Location::Internal, + Bytes::from_slice(&er).unwrap(), + #[cfg(feature = "se050")] + Some(se050), + ), ); let apps = ERL::init_apps(&mut trussed_service, init_status, &store, !powered_by_usb); diff --git a/runners/embedded/src/lib.rs b/runners/embedded/src/lib.rs index 0ebb6917..92e8b2e2 100644 --- a/runners/embedded/src/lib.rs +++ b/runners/embedded/src/lib.rs @@ -299,6 +299,43 @@ pub fn init_apps( types::Apps::with_service(&types::Runner, trussed, data) } +#[cfg(feature = "se050")] +pub fn init_se050< + I2C: se05x::t1::I2CForT1, + D: embedded_hal::blocking::delay::DelayUs, + R: rand::CryptoRng + rand::RngCore, +>( + i2c: I2C, + delay: D, + dev_rng: &mut R, + init_status: &mut types::InitStatus, +) -> (se05x::se05x::Se05X, chacha20::ChaCha8Rng) { + use chacha20::ChaCha8Rng; + use rand::{Rng as _, SeedableRng}; + use se05x::se05x::commands::GetRandom; + + let seed: [u8; 32] = dev_rng.gen(); + let mut se050 = se05x::se05x::Se05X::new(i2c, 0x48, delay); + let seed = (|| { + se050.enable()?; + let buf = &mut [0; 100]; + let se050_rand = se050.run_command(&GetRandom { length: 32.into() }, buf)?; + let mut s: [u8; 32] = se050_rand + .data + .try_into() + .or(Err(se05x::se05x::Error::Unknown))?; + for (se050, orig) in s.iter_mut().zip(seed) { + *se050 ^= orig; + } + Ok::<_, se05x::se05x::Error>(s) + })() + .unwrap_or_else(|_err| { + debug_now!("Got error when getting SE050 initial entropy: {_err:?}"); + *init_status |= types::InitStatus::SE050_RAND_ERROR; + seed + }); + (se050, ChaCha8Rng::from_seed(seed)) +} #[inline(never)] #[panic_handler] fn panic(_info: &core::panic::PanicInfo) -> ! { diff --git a/runners/embedded/src/soc_lpc55/init.rs b/runners/embedded/src/soc_lpc55/init.rs index 92868c23..ae16ae97 100644 --- a/runners/embedded/src/soc_lpc55/init.rs +++ b/runners/embedded/src/soc_lpc55/init.rs @@ -31,11 +31,14 @@ use lpc55_hal::drivers::timer::Elapsed as _; use trussed::{platform::UserInterface, service::Service, types::Location}; use utils::OptionalStorage; +#[cfg(feature = "se050")] +use super::types::TimerDelay; use super::{ board, clock_controller::DynamicClockController, nfc, spi::{self, FlashCs, FlashCsPin, Spi, SpiConfig}, + types::I2C, }; use crate::{ flash::ExtFlashStorage, @@ -248,6 +251,7 @@ impl Stage1 { adc: hal::Adc, delay_timer: ctimer::Ctimer0, ctimer1: ctimer::Ctimer1, + ctimer2: ctimer::Ctimer2, ctimer3: ctimer::Ctimer3, perf_timer: ctimer::Ctimer4, pfr: Pfr, @@ -272,6 +276,9 @@ impl Stage1 { let mut delay_timer = Timer::new( delay_timer.enabled(syscon, self.clocks.clocks.support_1mhz_fro_token().unwrap()), ); + let se050_timer = Timer::new( + ctimer2.enabled(syscon, self.clocks.clocks.support_1mhz_fro_token().unwrap()), + ); let mut perf_timer = Timer::new( perf_timer.enabled(syscon, self.clocks.clocks.support_1mhz_fro_token().unwrap()), ); @@ -315,6 +322,7 @@ impl Stage1 { status: self.status, peripherals: self.peripherals, clocks: self.clocks, + se050_timer, basic, } } @@ -325,6 +333,7 @@ pub struct Stage2 { peripherals: Peripherals, clocks: Clocks, basic: Basic, + se050_timer: Timer>, } type UsbBusType = usb_device::bus::UsbBusAllocator<::UsbBus>; @@ -392,7 +401,7 @@ impl Stage2 { ) } - fn run_hardware_checks(&mut self, flexcomm5: Flexcomm5) { + fn get_se050_i2c(&mut self, flexcomm5: Flexcomm5) -> I2C { // SE050 check let _enabled = pins::Pio1_26::take() .unwrap() @@ -428,15 +437,16 @@ impl Stage2 { nb::block!(self.basic.delay_timer.wait()).ok(); // RESYNC response - let mut response = [0; 2]; + let mut response = [0; 5]; i2c.read(0x48, &mut response) .expect("failed to read RESYNC response"); - if response != [0xa5, 0xe0] { + if response != [0xa5, 0xe0, 0x00, 0x3F, 0x19] { panic!("Unexpected RESYNC response: {:?}", response); } info_now!("hardware checks successful"); + i2c } #[inline(never)] @@ -449,9 +459,7 @@ impl Stage2 { usbhs: Usbhs, nfc_enabled: bool, ) -> Stage3 { - if cfg!(feature = "lpc55-hardware-checks") { - self.run_hardware_checks(flexcomm5); - } + let se050_i2c = (!self.clocks.is_nfc_passive).then(|| self.get_se050_i2c(flexcomm5)); let use_nfc = nfc_enabled && (cfg!(feature = "provisioner") || self.clocks.is_nfc_passive); let (nfc_chip, spi) = if use_nfc { @@ -477,6 +485,8 @@ impl Stage2 { basic: self.basic, usb_nfc, spi, + se050_timer: self.se050_timer, + se050_i2c, } } } @@ -488,6 +498,8 @@ pub struct Stage3 { basic: Basic, usb_nfc: UsbNfc, spi: Option, + se050_timer: Timer>, + se050_i2c: Option, } impl Stage3 { @@ -521,6 +533,8 @@ impl Stage3 { basic: self.basic, usb_nfc: self.usb_nfc, spi: self.spi, + se050_timer: self.se050_timer, + se050_i2c: self.se050_i2c, flash, } } @@ -534,6 +548,8 @@ pub struct Stage4 { usb_nfc: UsbNfc, spi: Option, flash: Flash, + se050_timer: Timer>, + se050_i2c: Option, } impl Stage4 { @@ -632,6 +648,8 @@ impl Stage4 { basic: self.basic, usb_nfc: self.usb_nfc, rng: self.flash.rng, + se050_timer: self.se050_timer, + se050_i2c: self.se050_i2c, store, } } @@ -687,6 +705,8 @@ pub struct Stage5 { usb_nfc: UsbNfc, rng: Rng, store: RunnerStore, + se050_timer: Timer>, + se050_i2c: Option, } impl Stage5 { @@ -712,8 +732,42 @@ impl Stage5 { super::trussed::UserInterface::new(rtc, three_buttons, rgb, provisioner); solobee_interface.set_status(trussed::platform::ui::Status::Idle); - let board = types::RunnerPlatform::new(self.rng, self.store, solobee_interface); - let trussed = Service::with_dispatch(board, Dispatch::new(Location::Internal)); + use rand::{Rng as _, SeedableRng}; + let mut dev_rng = self.rng; + let rng_and_maybe_se050 = { + #[cfg(feature = "se050")] + let res = if let Some(i2c) = self.se050_i2c { + let (se050, chacha_rng) = crate::init_se050( + i2c, + TimerDelay(self.se050_timer), + &mut dev_rng, + &mut self.status, + ); + (chacha_rng, Some(se050)) + } else { + (chacha20::ChaCha8Rng::from_seed(dev_rng.gen()), None) + }; + #[cfg(not(feature = "se050"))] + let res = (chacha20::ChaCha8Rng::from_seed(dev_rng.gen()),); + res + }; + + let board = + types::RunnerPlatform::new(rng_and_maybe_se050.0, self.store, solobee_interface); + let trussed = Service::with_dispatch( + board, + Dispatch::new( + Location::Internal, + #[cfg(feature = "se050")] + rng_and_maybe_se050.1, + ), + ); + + #[cfg(not(feature = "se050"))] + { + let _ = self.se050_timer; + let _ = self.se050_i2c; + } Stage6 { status: self.status, diff --git a/runners/embedded/src/soc_lpc55/mod.rs b/runners/embedded/src/soc_lpc55/mod.rs index 34de2ae7..5ac7cf3f 100644 --- a/runners/embedded/src/soc_lpc55/mod.rs +++ b/runners/embedded/src/soc_lpc55/mod.rs @@ -47,6 +47,7 @@ pub fn init( hal.adc, hal.ctimer.0, hal.ctimer.1, + hal.ctimer.2, hal.ctimer.3, hal.ctimer.4, hal.pfr, diff --git a/runners/embedded/src/soc_lpc55/types.rs b/runners/embedded/src/soc_lpc55/types.rs index eca7c875..b85eeb3a 100644 --- a/runners/embedded/src/soc_lpc55/types.rs +++ b/runners/embedded/src/soc_lpc55/types.rs @@ -4,13 +4,29 @@ use super::spi::{FlashCs, Spi}; use super::trussed::UserInterface; use crate::flash::ExtFlashStorage; use apps::Variant; +#[cfg(feature = "se050")] +use embedded_hal::{blocking::delay::DelayUs, timer::CountDown}; +#[cfg(feature = "se050")] +use embedded_time::duration::Microseconds; use embedded_time::duration::Milliseconds; +#[cfg(feature = "se050")] +use lpc55_hal::drivers::Timer; use lpc55_hal::{ - drivers::timer, - peripherals::{ctimer, flash, rng, syscon}, + drivers::{ + pins::{Pio0_9, Pio1_14}, + timer, + }, + peripherals::{ctimer, flash, flexcomm::I2c5, syscon}, raw, traits::flash::WriteErase, + typestates::pin::{ + function::{FC5_CTS_SDA_SSEL0, FC5_TXD_SCL_MISO_WS}, + state::Special, + }, + I2cMaster, }; + +use trussed::types::LfsResult; use utils::OptionalStorage; ////////////////////////////////////////////////////////////////////////////// @@ -39,16 +55,48 @@ const INTERFACE_CONFIG: crate::types::Config = crate::types::Config { usb_id_product: crate::types::build_constants::USB_ID_PRODUCT, }; +pub(super) type I2C = I2cMaster< + Pio0_9, + Pio1_14, + I2c5, + ( + lpc55_hal::Pin>, + lpc55_hal::Pin>, + ), +>; + +#[cfg(feature = "se050")] +pub struct TimerDelay(pub T); + +#[cfg(feature = "se050")] +impl DelayUs for TimerDelay +where + T: CountDown