diff --git a/.github/workflows/cargo_fmt.yml b/.github/workflows/cargo_fmt.yml index 9c57a71c..621b5547 100644 --- a/.github/workflows/cargo_fmt.yml +++ b/.github/workflows/cargo_fmt.yml @@ -22,6 +22,10 @@ jobs: submodules: "true" - name: Install Rust toolchain run: rustup show + - name: Install nightly toolchain + run: rustup toolchain install nightly + - name: Install nightly cargo fmt + run: rustup component add rustfmt --toolchain nightly - uses: actions/setup-python@v1 with: python-version: 3.7 @@ -34,46 +38,59 @@ jobs: uses: actions-rs/cargo@v1 with: command: fmt - args: --all -- --check + args: -- --check - - name: Cargo format fuzz/ + - name: Cargo format libraries/opensk uses: actions-rs/cargo@v1 with: + toolchain: nightly command: fmt - args: --manifest-path fuzz/Cargo.toml --all -- --check + args: --manifest-path libraries/opensk/Cargo.toml -- --check + + - name: Cargo format libraries/opensk/fuzz + uses: actions-rs/cargo@v1 + with: + toolchain: nightly + command: fmt + args: --manifest-path libraries/opensk/fuzz/Cargo.toml -- --check - name: Cargo format libraries/cbor uses: actions-rs/cargo@v1 with: + toolchain: nightly command: fmt - args: --manifest-path libraries/cbor/Cargo.toml --all -- --check + args: --manifest-path libraries/cbor/Cargo.toml -- --check - name: Cargo format libraries/cbor/fuzz uses: actions-rs/cargo@v1 with: + toolchain: nightly command: fmt - args: --manifest-path libraries/cbor/fuzz/Cargo.toml --all -- --check + args: --manifest-path libraries/cbor/fuzz/Cargo.toml -- --check - name: Cargo format libraries/crypto uses: actions-rs/cargo@v1 with: + toolchain: nightly command: fmt - args: --manifest-path libraries/crypto/Cargo.toml --all -- --check + args: --manifest-path libraries/crypto/Cargo.toml -- --check - name: Cargo format libraries/persistent_store uses: actions-rs/cargo@v1 with: + toolchain: nightly command: fmt - args: --manifest-path libraries/persistent_store/Cargo.toml --all -- --check + args: --manifest-path libraries/persistent_store/Cargo.toml -- --check - name: Cargo format tools/heapviz uses: actions-rs/cargo@v1 with: + toolchain: nightly command: fmt - args: --manifest-path tools/heapviz/Cargo.toml --all -- --check + args: --manifest-path tools/heapviz/Cargo.toml -- --check - name: Cargo format bootloader uses: actions-rs/cargo@v1 with: command: fmt - args: --manifest-path bootloader/Cargo.toml --all -- --check + args: --manifest-path bootloader/Cargo.toml -- --check diff --git a/.github/workflows/cargo_fuzz.yml b/.github/workflows/cargo_fuzz.yml index 4083f857..c997ce9b 100644 --- a/.github/workflows/cargo_fuzz.yml +++ b/.github/workflows/cargo_fuzz.yml @@ -11,6 +11,7 @@ jobs: steps: - uses: actions/checkout@v2 with: + toolchain: nightly submodules: "true" - name: Install Rust toolchain run: rustup show @@ -25,8 +26,8 @@ jobs: run: ./fuzzing_setup.sh - name: Cargo fuzz build - run: cargo fuzz build + run: cd libraries/opensk && cargo +nightly fuzz build - name: Cargo fuzz build (libraries/cbor) - run: cd libraries/cbor && cargo fuzz build && cd ../.. + run: cd libraries/cbor && cargo +nightly fuzz build - name: Cargo fuzz build (libraries/persistent_store) - run: cd libraries/persistent_store && cargo fuzz build && cd ../.. + run: cd libraries/persistent_store && cargo +nightly fuzz build diff --git a/.github/workflows/coveralls.yml b/.github/workflows/coveralls.yml index 5be1ef18..fe6b52dd 100644 --- a/.github/workflows/coveralls.yml +++ b/.github/workflows/coveralls.yml @@ -3,7 +3,6 @@ name: OpenSK code coverage report on: push: paths: - - 'src/**/*.rs' - 'libraries/**/*.rs' pull_request: types: [opened, synchronize, reopened] @@ -27,22 +26,24 @@ jobs: - name: Set up OpenSK run: ./setup.sh - name: Install llvm tools - run: rustup component add llvm-tools-preview + run: rustup +nightly component add llvm-tools-preview - name: Install grcov run: if [[ ! -e ~/.cargo/bin/grcov ]]; then cargo +stable install grcov; fi - uses: actions-rs/cargo@v1 with: + toolchain: nightly command: test - args: --features "with_ctap1,vendor_hid,ed25519,with_nfc,std" --no-fail-fast + args: --manifest-path libraries/opensk/Cargo.toml --features "std,with_ctap1,vendor_hid,ed25519" --no-fail-fast env: - RUSTFLAGS: "-Zinstrument-coverage" + RUSTFLAGS: "-Cinstrument-coverage" LLVM_PROFILE_FILE: "opensk-%p-%m.profraw" - name: Run grcov - run: grcov . --binary-path ./target/debug/ --source-dir . --output-type lcov --ignore-not-existing ---output-path ./lcov.info --ignore "/*" --ignore "examples/*" --ignore "third_party/*" + run: RUSTUP_TOOLCHAIN=nightly grcov . --binary-path ./libraries/opensk/target/debug/ --source-dir libraries/opensk/ --output-type lcov --ignore-not-existing ---output-path ./lcov.info --ignore "/*" --ignore "examples/*" --ignore "third_party/*" - uses: coverallsapp/github-action@1.1.3 name: upload report to coveralls with: github-token: ${{ secrets.GITHUB_TOKEN }} path-to-lcov: "./lcov.info" + base-path: "libraries/opensk" diff --git a/.github/workflows/crypto_test.yml b/.github/workflows/crypto_test.yml index b87dff4a..19724351 100644 --- a/.github/workflows/crypto_test.yml +++ b/.github/workflows/crypto_test.yml @@ -31,11 +31,13 @@ jobs: - name: Unit testing of crypto library (release mode) uses: actions-rs/cargo@v1 with: + toolchain: nightly command: test args: --manifest-path libraries/crypto/Cargo.toml --release --features std - name: Unit testing of crypto library (debug mode) uses: actions-rs/cargo@v1 with: + toolchain: nightly command: test args: --manifest-path libraries/crypto/Cargo.toml --features std diff --git a/.github/workflows/opensk_test.yml b/.github/workflows/opensk_test.yml index 88397454..2aae23f9 100644 --- a/.github/workflows/opensk_test.yml +++ b/.github/workflows/opensk_test.yml @@ -29,24 +29,28 @@ jobs: - name: Unit testing of CTAP2 (release mode) uses: actions-rs/cargo@v1 with: + toolchain: nightly command: test - args: --release --features std + args: --manifest-path libraries/opensk/Cargo.toml --release --features std - name: Unit testing of CTAP2 (debug mode) uses: actions-rs/cargo@v1 with: + toolchain: nightly command: test - args: --features std + args: --manifest-path libraries/opensk/Cargo.toml --features std - - name: Unit testing of CTAP2 (release mode + CTAP1) + - name: Unit testing of CTAP2 (release mode + all features) uses: actions-rs/cargo@v1 with: + toolchain: nightly command: test - args: --release --features std,with_ctap1 + args: --manifest-path libraries/opensk/Cargo.toml --release --features std,debug_ctap,with_ctap1,vendor_hid,ed25519 - - name: Unit testing of CTAP2 (debug mode + CTAP1) + - name: Unit testing of CTAP2 (debug mode + all features) uses: actions-rs/cargo@v1 with: + toolchain: nightly command: test - args: --features std,with_ctap1 + args: --manifest-path libraries/opensk/Cargo.toml --features std,debug_ctap,with_ctap1,vendor_hid,ed25519 diff --git a/.gitignore b/.gitignore index f915925b..d380480d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,4 @@ -fuzz/artifacts -fuzz/corpus -fuzz/coverage +libraries/**/Cargo.lock target/ # Local installation of elf2tab. diff --git a/Cargo.lock b/Cargo.lock index 292af1d3..599327f6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -109,6 +109,7 @@ dependencies = [ "lang_items", "libtock_core", "libtock_drivers", + "opensk", "openssl", "persistent_store", "rand 0.8.5", @@ -273,6 +274,23 @@ version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0" +[[package]] +name = "opensk" +version = "1.0.0" +dependencies = [ + "arrayref", + "byteorder", + "crypto", + "ed25519-compact", + "openssl", + "persistent_store", + "rand 0.8.5", + "rng256", + "sk-cbor", + "subtle", + "uuid", +] + [[package]] name = "openssl" version = "0.10.41" diff --git a/Cargo.toml b/Cargo.toml index c1770067..98929d9c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ edition = "2018" libtock_core = { path = "third_party/libtock-rs/core" } libtock_drivers = { path = "third_party/libtock-drivers" } lang_items = { path = "third_party/lang-items" } +opensk = { path = "libraries/opensk" } sk-cbor = { path = "libraries/cbor" } crypto = { path = "libraries/crypto" } rng256 = { path = "libraries/rng256" } @@ -27,15 +28,14 @@ ed25519-compact = { version = "1", default-features = false, optional = true } [features] debug_allocations = ["lang_items/debug_allocations"] -debug_ctap = ["libtock_drivers/debug_ctap"] +debug_ctap = ["libtock_drivers/debug_ctap", "opensk/debug_ctap"] panic_console = ["lang_items/panic_console"] -std = ["crypto/std", "lang_items/std", "persistent_store/std", "rng256/std", "rand"] +std = ["crypto/std", "lang_items/std", "persistent_store/std", "rng256/std", "rand", "opensk/std"] verbose = ["debug_ctap", "libtock_drivers/verbose_usb"] -with_ctap1 = ["crypto/with_ctap1"] +with_ctap1 = ["crypto/with_ctap1", "opensk/with_ctap1"] with_nfc = ["libtock_drivers/with_nfc"] -vendor_hid = [] -fuzz = ["arbitrary", "std"] -ed25519 = ["ed25519-compact"] +vendor_hid = ["opensk/vendor_hid"] +ed25519 = ["ed25519-compact", "opensk/ed25519"] [dev-dependencies] enum-iterator = "0.6.0" diff --git a/fuzz/Cargo.lock b/fuzz/Cargo.lock deleted file mode 100644 index 23ab2ac0..00000000 --- a/fuzz/Cargo.lock +++ /dev/null @@ -1,792 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "aho-corasick" -version = "0.7.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" -dependencies = [ - "memchr", -] - -[[package]] -name = "arbitrary" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db55d72333851e17d572bec876e390cd3b11eb1ef53ae821dd9f3b653d2b4569" -dependencies = [ - "derive_arbitrary", -] - -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "autocfg" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" -dependencies = [ - "autocfg 1.1.0", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bumpalo" -version = "3.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "cc" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -dependencies = [ - "bitflags", -] - -[[package]] -name = "crypto" -version = "0.1.0" -dependencies = [ - "arrayref", - "byteorder", - "hex", - "regex", - "ring", - "rng256", - "serde", - "serde_json", - "subtle", - "untrusted", -] - -[[package]] -name = "ctap2" -version = "1.0.0" -dependencies = [ - "arbitrary", - "arrayref", - "byteorder", - "crypto", - "lang_items", - "libtock_core", - "libtock_drivers", - "openssl", - "persistent_store", - "rand 0.8.5", - "rng256", - "sk-cbor", - "subtle", - "uuid", -] - -[[package]] -name = "ctap2-fuzz" -version = "0.0.0" -dependencies = [ - "fuzz_helper", - "libfuzzer-sys", -] - -[[package]] -name = "derive_arbitrary" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a012b5e473dc912f0db0546a1c9c6a194ce8494feb66fa0237160926f9e0e6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "embedded-time" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a4b4d10ac48d08bfe3db7688c402baadb244721f30a77ce360bd24c3dffe58" -dependencies = [ - "num", -] - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - -[[package]] -name = "fuzz_helper" -version = "0.1.0" -dependencies = [ - "arbitrary", - "arrayref", - "crypto", - "ctap2", - "embedded-time", - "lang_items", - "libtock_drivers", - "rng256", - "sk-cbor", -] - -[[package]] -name = "getrandom" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "hex" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "js-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lang_items" -version = "0.1.0" -dependencies = [ - "libtock_core", - "libtock_drivers", - "linked_list_allocator", -] - -[[package]] -name = "libc" -version = "0.2.133" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966" - -[[package]] -name = "libfuzzer-sys" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf184a4b6b274f82a5df6b357da6055d3e82272327bba281c28bbba6f1664ef" -dependencies = [ - "arbitrary", - "cc", -] - -[[package]] -name = "libtock_codegen" -version = "0.1.0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "libtock_core" -version = "0.1.0" -dependencies = [ - "libtock_codegen", -] - -[[package]] -name = "libtock_drivers" -version = "0.1.0" -dependencies = [ - "libtock_core", -] - -[[package]] -name = "linked_list_allocator" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e322f259d225fbae43a1b053b2dc6a5968a6bdf8b205f5de684dab485b95030e" - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "num" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b7a8e9be5e039e2ff869df49155f1c06bd01ade2117ec783e56ab0932b67a8f" -dependencies = [ - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg 1.1.0", - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" -dependencies = [ - "autocfg 1.1.0", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" -dependencies = [ - "autocfg 1.1.0", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg 1.1.0", -] - -[[package]] -name = "once_cell" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0" - -[[package]] -name = "openssl" -version = "0.10.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "openssl-sys" -version = "0.9.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f" -dependencies = [ - "autocfg 1.1.0", - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "persistent_store" -version = "0.1.0" - -[[package]] -name = "pkg-config" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" - -[[package]] -name = "ppv-lite86" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" - -[[package]] -name = "proc-macro2" -version = "1.0.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -dependencies = [ - "autocfg 0.1.8", - "libc", - "rand_chacha 0.1.1", - "rand_core 0.4.2", - "rand_hc", - "rand_isaac", - "rand_jitter", - "rand_os", - "rand_pcg", - "rand_xorshift", - "winapi", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -dependencies = [ - "autocfg 0.1.8", - "rand_core 0.3.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -dependencies = [ - "libc", - "rand_core 0.4.2", - "winapi", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -dependencies = [ - "cloudabi", - "fuchsia-cprng", - "libc", - "rand_core 0.4.2", - "rdrand", - "winapi", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -dependencies = [ - "autocfg 0.1.8", - "rand_core 0.4.2", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "regex" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi", -] - -[[package]] -name = "rng256" -version = "0.1.0" -dependencies = [ - "arrayref", - "rand 0.6.5", -] - -[[package]] -name = "ryu" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" - -[[package]] -name = "serde" -version = "1.0.144" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.144" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e466864e431129c7e0d3476b92f20458e5879919a0596c6472738d9fa2d342f8" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sk-cbor" -version = "0.1.2" - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "syn" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "unicode-ident" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" -dependencies = [ - "getrandom", -] - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" - -[[package]] -name = "web-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/fuzz/fuzz_helper/Cargo.toml b/fuzz/fuzz_helper/Cargo.toml deleted file mode 100644 index 219458c5..00000000 --- a/fuzz/fuzz_helper/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "fuzz_helper" -version = "0.1.0" -authors = ["Mingxiao Guo "] -license = "Apache-2.0" -edition = "2018" - -[dependencies] -arrayref = "0.3.6" -embedded-time = "0.12.1" -libtock_drivers = { path = "../../third_party/libtock-drivers" } -crypto = { path = "../../libraries/crypto", features = ['std'] } -rng256 = { path = "../../libraries/rng256", features = ['std'] } -sk-cbor = { path = "../../libraries/cbor" } -ctap2 = { path = "../..", features = ["fuzz"] } -lang_items = { path = "../../third_party/lang-items", features = ['std'] } -arbitrary = { version = "0.4.7", features = ["derive"] } diff --git a/libraries/cbor/Cargo.lock b/libraries/cbor/Cargo.lock deleted file mode 100644 index cfc370d3..00000000 --- a/libraries/cbor/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "sk-cbor" -version = "0.1.2" diff --git a/libraries/cbor/fuzz/.gitignore b/libraries/cbor/fuzz/.gitignore new file mode 100644 index 00000000..e370a75e --- /dev/null +++ b/libraries/cbor/fuzz/.gitignore @@ -0,0 +1,3 @@ +/artifacts/ +/corpus/ +/target/ diff --git a/libraries/cbor/fuzz/Cargo.lock b/libraries/cbor/fuzz/Cargo.lock deleted file mode 100644 index 85abb694..00000000 --- a/libraries/cbor/fuzz/Cargo.lock +++ /dev/null @@ -1,37 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "arbitrary" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db55d72333851e17d572bec876e390cd3b11eb1ef53ae821dd9f3b653d2b4569" - -[[package]] -name = "cc" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" - -[[package]] -name = "libfuzzer-sys" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf184a4b6b274f82a5df6b357da6055d3e82272327bba281c28bbba6f1664ef" -dependencies = [ - "arbitrary", - "cc", -] - -[[package]] -name = "sk-cbor" -version = "0.1.2" - -[[package]] -name = "sk-cbor-fuzz" -version = "0.0.0" -dependencies = [ - "libfuzzer-sys", - "sk-cbor", -] diff --git a/libraries/crypto/Cargo.lock b/libraries/crypto/Cargo.lock deleted file mode 100644 index cf72e372..00000000 --- a/libraries/crypto/Cargo.lock +++ /dev/null @@ -1,479 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "aho-corasick" -version = "0.7.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" -dependencies = [ - "memchr", -] - -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "autocfg" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" -dependencies = [ - "autocfg 1.1.0", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bumpalo" -version = "3.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "cc" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -dependencies = [ - "bitflags", -] - -[[package]] -name = "crypto" -version = "0.1.0" -dependencies = [ - "arrayref", - "byteorder", - "hex", - "regex", - "ring", - "rng256", - "serde", - "serde_json", - "subtle", - "untrusted", -] - -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - -[[package]] -name = "hex" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "js-sys" -version = "0.3.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.133" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966" - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "once_cell" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0" - -[[package]] -name = "proc-macro2" -version = "1.0.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -dependencies = [ - "autocfg 0.1.8", - "libc", - "rand_chacha", - "rand_core 0.4.2", - "rand_hc", - "rand_isaac", - "rand_jitter", - "rand_os", - "rand_pcg", - "rand_xorshift", - "winapi", -] - -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -dependencies = [ - "autocfg 0.1.8", - "rand_core 0.3.1", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -dependencies = [ - "libc", - "rand_core 0.4.2", - "winapi", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -dependencies = [ - "cloudabi", - "fuchsia-cprng", - "libc", - "rand_core 0.4.2", - "rdrand", - "winapi", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -dependencies = [ - "autocfg 0.1.8", - "rand_core 0.4.2", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "regex" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi", -] - -[[package]] -name = "rng256" -version = "0.1.0" -dependencies = [ - "arrayref", - "rand", -] - -[[package]] -name = "ryu" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" - -[[package]] -name = "serde" -version = "1.0.144" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.144" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e466864e431129c7e0d3476b92f20458e5879919a0596c6472738d9fa2d342f8" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "syn" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "unicode-ident" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "wasm-bindgen" -version = "0.2.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" -dependencies = [ - "bumpalo", - "lazy_static", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" - -[[package]] -name = "web-sys" -version = "0.3.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/libraries/opensk/Cargo.toml b/libraries/opensk/Cargo.toml new file mode 100644 index 00000000..91fe9cbf --- /dev/null +++ b/libraries/opensk/Cargo.toml @@ -0,0 +1,50 @@ +[package] +name = "opensk" +version = "1.0.0" +authors = [ + "Fabian Kaczmarczyck ", + "Guillaume Endignoux ", + "Jean-Michel Picod ", + "Julien Cretin ", +] +license = "Apache-2.0" +edition = "2018" +rust-version = "1.47" + +[dependencies] +sk-cbor = { path = "../cbor" } +crypto = { path = "../crypto" } +rng256 = { path = "../rng256" } +persistent_store = { path = "../persistent_store" } +byteorder = { version = "1", default-features = false } +arrayref = "0.3.6" +subtle = { version = "2.2", default-features = false, features = ["nightly"] } +arbitrary = { version = "0.4.7", features = ["derive"], optional = true } +rand = { version = "0.8.4", optional = true } +ed25519-compact = { version = "1", default-features = false, optional = true } + +[features] +debug_ctap = [] +std = ["crypto/std", "persistent_store/std", "rng256/std", "rand"] +with_ctap1 = ["crypto/with_ctap1"] +vendor_hid = [] +fuzz = ["arbitrary", "std"] +ed25519 = ["ed25519-compact"] + +[dev-dependencies] +enum-iterator = "0.6.0" + +[build-dependencies] +sk-cbor = { path = "../cbor" } +uuid = { version = "0.8", features = ["v4"] } +openssl = "0.10.36" + +[profile.dev] +panic = "abort" +lto = true # Link Time Optimization usually reduces size of binaries and static libraries + +[profile.release] +panic = "abort" +lto = true # Link Time Optimization usually reduces size of binaries and static libraries +opt-level = "z" +codegen-units = 1 diff --git a/libraries/opensk/fuzz/.gitignore b/libraries/opensk/fuzz/.gitignore new file mode 100644 index 00000000..e370a75e --- /dev/null +++ b/libraries/opensk/fuzz/.gitignore @@ -0,0 +1,3 @@ +/artifacts/ +/corpus/ +/target/ diff --git a/fuzz/Cargo.toml b/libraries/opensk/fuzz/Cargo.toml similarity index 98% rename from fuzz/Cargo.toml rename to libraries/opensk/fuzz/Cargo.toml index e00bac39..c34d29bb 100644 --- a/fuzz/Cargo.toml +++ b/libraries/opensk/fuzz/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "ctap2-fuzz" +name = "opensk-fuzz" version = "0.0.0" authors = ["Automatically generated"] publish = false diff --git a/fuzz/ctap2_commands_parameters_corpus.json b/libraries/opensk/fuzz/ctap2_commands_parameters_corpus.json similarity index 100% rename from fuzz/ctap2_commands_parameters_corpus.json rename to libraries/opensk/fuzz/ctap2_commands_parameters_corpus.json diff --git a/libraries/opensk/fuzz/fuzz_helper/Cargo.toml b/libraries/opensk/fuzz/fuzz_helper/Cargo.toml new file mode 100644 index 00000000..09ae13d0 --- /dev/null +++ b/libraries/opensk/fuzz/fuzz_helper/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "fuzz_helper" +version = "0.1.0" +authors = ["Mingxiao Guo "] +license = "Apache-2.0" +edition = "2018" + +[dependencies] +arrayref = "0.3.6" +opensk = { path = "../..", features = ["fuzz"] } +crypto = { path = "../../../crypto", features = ['std'] } +rng256 = { path = "../../../rng256", features = ['std'] } +sk-cbor = { path = "../../../cbor" } +arbitrary = { version = "0.4.7", features = ["derive"] } diff --git a/fuzz/fuzz_helper/src/lib.rs b/libraries/opensk/fuzz/fuzz_helper/src/lib.rs similarity index 95% rename from fuzz/fuzz_helper/src/lib.rs rename to libraries/opensk/fuzz/fuzz_helper/src/lib.rs index e4346fb9..a79462d0 100644 --- a/fuzz/fuzz_helper/src/lib.rs +++ b/libraries/opensk/fuzz/fuzz_helper/src/lib.rs @@ -12,26 +12,22 @@ // See the License for the specific language governing permissions and // limitations under the License. -// This explicit "extern crate" is needed to make the linker aware of the -// `libtock_alloc_init` symbol. -extern crate lang_items; - use arbitrary::{Arbitrary, Unstructured}; use arrayref::array_ref; use core::convert::TryFrom; -use ctap2::api::customization::is_valid; -use ctap2::ctap::command::{ +use opensk::api::customization::is_valid; +use opensk::ctap::command::{ AuthenticatorClientPinParameters, AuthenticatorGetAssertionParameters, AuthenticatorMakeCredentialParameters, Command, }; -use ctap2::ctap::data_formats::EnterpriseAttestationMode; -use ctap2::ctap::hid::{ +use opensk::ctap::data_formats::EnterpriseAttestationMode; +use opensk::ctap::hid::{ ChannelID, CtapHidCommand, HidPacket, HidPacketIterator, Message, MessageAssembler, }; -use ctap2::ctap::{cbor_read, Channel, CtapState}; -use ctap2::env::test::customization::TestCustomization; -use ctap2::env::test::TestEnv; -use ctap2::{test_helpers, Ctap, Transport}; +use opensk::ctap::{cbor_read, Channel, CtapState}; +use opensk::env::test::customization::TestCustomization; +use opensk::env::test::TestEnv; +use opensk::{test_helpers, Ctap, Transport}; const CHANNEL_BROADCAST: ChannelID = [0xFF, 0xFF, 0xFF, 0xFF]; diff --git a/fuzz/fuzz_targets/fuzz_target_process_ctap1.rs b/libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap1.rs similarity index 100% rename from fuzz/fuzz_targets/fuzz_target_process_ctap1.rs rename to libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap1.rs diff --git a/fuzz/fuzz_targets/fuzz_target_process_ctap2_client_pin.rs b/libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap2_client_pin.rs similarity index 100% rename from fuzz/fuzz_targets/fuzz_target_process_ctap2_client_pin.rs rename to libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap2_client_pin.rs diff --git a/fuzz/fuzz_targets/fuzz_target_process_ctap2_client_pin_structured.rs b/libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap2_client_pin_structured.rs similarity index 100% rename from fuzz/fuzz_targets/fuzz_target_process_ctap2_client_pin_structured.rs rename to libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap2_client_pin_structured.rs diff --git a/fuzz/fuzz_targets/fuzz_target_process_ctap2_get_assertion.rs b/libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap2_get_assertion.rs similarity index 100% rename from fuzz/fuzz_targets/fuzz_target_process_ctap2_get_assertion.rs rename to libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap2_get_assertion.rs diff --git a/fuzz/fuzz_targets/fuzz_target_process_ctap2_get_assertion_structured.rs b/libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap2_get_assertion_structured.rs similarity index 100% rename from fuzz/fuzz_targets/fuzz_target_process_ctap2_get_assertion_structured.rs rename to libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap2_get_assertion_structured.rs diff --git a/fuzz/fuzz_targets/fuzz_target_process_ctap2_make_credential.rs b/libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap2_make_credential.rs similarity index 100% rename from fuzz/fuzz_targets/fuzz_target_process_ctap2_make_credential.rs rename to libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap2_make_credential.rs diff --git a/fuzz/fuzz_targets/fuzz_target_process_ctap2_make_credential_structured.rs b/libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap2_make_credential_structured.rs similarity index 100% rename from fuzz/fuzz_targets/fuzz_target_process_ctap2_make_credential_structured.rs rename to libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap2_make_credential_structured.rs diff --git a/fuzz/fuzz_targets/fuzz_target_process_ctap_command.rs b/libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap_command.rs similarity index 100% rename from fuzz/fuzz_targets/fuzz_target_process_ctap_command.rs rename to libraries/opensk/fuzz/fuzz_targets/fuzz_target_process_ctap_command.rs diff --git a/fuzz/fuzz_targets/fuzz_target_split_assemble.rs b/libraries/opensk/fuzz/fuzz_targets/fuzz_target_split_assemble.rs similarity index 100% rename from fuzz/fuzz_targets/fuzz_target_split_assemble.rs rename to libraries/opensk/fuzz/fuzz_targets/fuzz_target_split_assemble.rs diff --git a/fuzz/make_corpus.py b/libraries/opensk/fuzz/make_corpus.py similarity index 100% rename from fuzz/make_corpus.py rename to libraries/opensk/fuzz/make_corpus.py diff --git a/src/api/attestation_store.rs b/libraries/opensk/src/api/attestation_store.rs similarity index 100% rename from src/api/attestation_store.rs rename to libraries/opensk/src/api/attestation_store.rs diff --git a/src/api/clock.rs b/libraries/opensk/src/api/clock.rs similarity index 100% rename from src/api/clock.rs rename to libraries/opensk/src/api/clock.rs diff --git a/src/api/connection.rs b/libraries/opensk/src/api/connection.rs similarity index 100% rename from src/api/connection.rs rename to libraries/opensk/src/api/connection.rs diff --git a/src/api/customization.rs b/libraries/opensk/src/api/customization.rs similarity index 100% rename from src/api/customization.rs rename to libraries/opensk/src/api/customization.rs diff --git a/src/api/firmware_protection.rs b/libraries/opensk/src/api/firmware_protection.rs similarity index 100% rename from src/api/firmware_protection.rs rename to libraries/opensk/src/api/firmware_protection.rs diff --git a/src/api/key_store.rs b/libraries/opensk/src/api/key_store.rs similarity index 100% rename from src/api/key_store.rs rename to libraries/opensk/src/api/key_store.rs diff --git a/src/api/mod.rs b/libraries/opensk/src/api/mod.rs similarity index 100% rename from src/api/mod.rs rename to libraries/opensk/src/api/mod.rs diff --git a/src/api/upgrade_storage/helper.rs b/libraries/opensk/src/api/upgrade_storage/helper.rs similarity index 100% rename from src/api/upgrade_storage/helper.rs rename to libraries/opensk/src/api/upgrade_storage/helper.rs diff --git a/src/api/upgrade_storage/mod.rs b/libraries/opensk/src/api/upgrade_storage/mod.rs similarity index 98% rename from src/api/upgrade_storage/mod.rs rename to libraries/opensk/src/api/upgrade_storage/mod.rs index 09e5c9d7..ed54d298 100644 --- a/src/api/upgrade_storage/mod.rs +++ b/libraries/opensk/src/api/upgrade_storage/mod.rs @@ -15,7 +15,7 @@ use alloc::vec::Vec; use persistent_store::StorageResult; -pub(crate) mod helper; +pub mod helper; /// Accessors to storage locations used for upgrading from a CTAP command. pub trait UpgradeStorage { diff --git a/src/api/user_presence.rs b/libraries/opensk/src/api/user_presence.rs similarity index 100% rename from src/api/user_presence.rs rename to libraries/opensk/src/api/user_presence.rs diff --git a/src/ctap/apdu.rs b/libraries/opensk/src/ctap/apdu.rs similarity index 100% rename from src/ctap/apdu.rs rename to libraries/opensk/src/ctap/apdu.rs diff --git a/src/ctap/client_pin.rs b/libraries/opensk/src/ctap/client_pin.rs similarity index 100% rename from src/ctap/client_pin.rs rename to libraries/opensk/src/ctap/client_pin.rs diff --git a/src/ctap/command.rs b/libraries/opensk/src/ctap/command.rs similarity index 100% rename from src/ctap/command.rs rename to libraries/opensk/src/ctap/command.rs diff --git a/src/ctap/config_command.rs b/libraries/opensk/src/ctap/config_command.rs similarity index 100% rename from src/ctap/config_command.rs rename to libraries/opensk/src/ctap/config_command.rs diff --git a/src/ctap/credential_id.rs b/libraries/opensk/src/ctap/credential_id.rs similarity index 100% rename from src/ctap/credential_id.rs rename to libraries/opensk/src/ctap/credential_id.rs diff --git a/src/ctap/credential_management.rs b/libraries/opensk/src/ctap/credential_management.rs similarity index 100% rename from src/ctap/credential_management.rs rename to libraries/opensk/src/ctap/credential_management.rs diff --git a/src/ctap/crypto_wrapper.rs b/libraries/opensk/src/ctap/crypto_wrapper.rs similarity index 100% rename from src/ctap/crypto_wrapper.rs rename to libraries/opensk/src/ctap/crypto_wrapper.rs diff --git a/src/ctap/ctap1.rs b/libraries/opensk/src/ctap/ctap1.rs similarity index 100% rename from src/ctap/ctap1.rs rename to libraries/opensk/src/ctap/ctap1.rs diff --git a/src/ctap/data_formats.rs b/libraries/opensk/src/ctap/data_formats.rs similarity index 100% rename from src/ctap/data_formats.rs rename to libraries/opensk/src/ctap/data_formats.rs diff --git a/src/ctap/hid/mod.rs b/libraries/opensk/src/ctap/hid/mod.rs similarity index 100% rename from src/ctap/hid/mod.rs rename to libraries/opensk/src/ctap/hid/mod.rs diff --git a/src/ctap/hid/receive.rs b/libraries/opensk/src/ctap/hid/receive.rs similarity index 100% rename from src/ctap/hid/receive.rs rename to libraries/opensk/src/ctap/hid/receive.rs diff --git a/src/ctap/hid/send.rs b/libraries/opensk/src/ctap/hid/send.rs similarity index 100% rename from src/ctap/hid/send.rs rename to libraries/opensk/src/ctap/hid/send.rs diff --git a/src/ctap/large_blobs.rs b/libraries/opensk/src/ctap/large_blobs.rs similarity index 100% rename from src/ctap/large_blobs.rs rename to libraries/opensk/src/ctap/large_blobs.rs diff --git a/src/ctap/main_hid.rs b/libraries/opensk/src/ctap/main_hid.rs similarity index 100% rename from src/ctap/main_hid.rs rename to libraries/opensk/src/ctap/main_hid.rs diff --git a/src/ctap/mod.rs b/libraries/opensk/src/ctap/mod.rs similarity index 100% rename from src/ctap/mod.rs rename to libraries/opensk/src/ctap/mod.rs diff --git a/src/ctap/pin_protocol.rs b/libraries/opensk/src/ctap/pin_protocol.rs similarity index 100% rename from src/ctap/pin_protocol.rs rename to libraries/opensk/src/ctap/pin_protocol.rs diff --git a/src/ctap/response.rs b/libraries/opensk/src/ctap/response.rs similarity index 100% rename from src/ctap/response.rs rename to libraries/opensk/src/ctap/response.rs diff --git a/src/ctap/status_code.rs b/libraries/opensk/src/ctap/status_code.rs similarity index 100% rename from src/ctap/status_code.rs rename to libraries/opensk/src/ctap/status_code.rs diff --git a/src/ctap/storage.rs b/libraries/opensk/src/ctap/storage.rs similarity index 100% rename from src/ctap/storage.rs rename to libraries/opensk/src/ctap/storage.rs diff --git a/src/ctap/storage/key.rs b/libraries/opensk/src/ctap/storage/key.rs similarity index 100% rename from src/ctap/storage/key.rs rename to libraries/opensk/src/ctap/storage/key.rs diff --git a/src/ctap/token_state.rs b/libraries/opensk/src/ctap/token_state.rs similarity index 100% rename from src/ctap/token_state.rs rename to libraries/opensk/src/ctap/token_state.rs diff --git a/src/ctap/u2f_up.rs b/libraries/opensk/src/ctap/u2f_up.rs similarity index 100% rename from src/ctap/u2f_up.rs rename to libraries/opensk/src/ctap/u2f_up.rs diff --git a/src/ctap/vendor_hid.rs b/libraries/opensk/src/ctap/vendor_hid.rs similarity index 100% rename from src/ctap/vendor_hid.rs rename to libraries/opensk/src/ctap/vendor_hid.rs diff --git a/libraries/opensk/src/env/mod.rs b/libraries/opensk/src/env/mod.rs new file mode 100644 index 00000000..a9e69c18 --- /dev/null +++ b/libraries/opensk/src/env/mod.rs @@ -0,0 +1,74 @@ +// Copyright 2022-2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use crate::api::attestation_store::AttestationStore; +use crate::api::clock::Clock; +use crate::api::connection::HidConnection; +use crate::api::customization::Customization; +use crate::api::firmware_protection::FirmwareProtection; +use crate::api::key_store::KeyStore; +use crate::api::upgrade_storage::UpgradeStorage; +use crate::api::user_presence::UserPresence; +use persistent_store::{Storage, Store}; +use rng256::Rng256; + +#[cfg(feature = "std")] +pub mod test; + +/// Describes what CTAP needs to function. +pub trait Env { + type Rng: Rng256; + type UserPresence: UserPresence; + type Storage: Storage; + type KeyStore: KeyStore; + type UpgradeStorage: UpgradeStorage; + type FirmwareProtection: FirmwareProtection; + type Write: core::fmt::Write; + type Customization: Customization; + type HidConnection: HidConnection; + type AttestationStore: AttestationStore; + type Clock: Clock; + + fn rng(&mut self) -> &mut Self::Rng; + fn user_presence(&mut self) -> &mut Self::UserPresence; + fn store(&mut self) -> &mut Store; + fn key_store(&mut self) -> &mut Self::KeyStore; + fn attestation_store(&mut self) -> &mut Self::AttestationStore; + fn clock(&mut self) -> &mut Self::Clock; + + /// Returns the upgrade storage instance. + /// + /// Upgrade storage is optional, so implementations may return `None`. However, implementations + /// should either always return `None` or always return `Some`. + fn upgrade_storage(&mut self) -> Option<&mut Self::UpgradeStorage>; + + fn firmware_protection(&mut self) -> &mut Self::FirmwareProtection; + + /// Creates a write instance for debugging. + /// + /// This API doesn't return a reference such that drop may flush. This matches the Tock + /// environment. Non-Tock embedded environments should use the defmt feature (to be implemented + /// using the defmt crate) and ignore this API. Non-embedded environments may either use this + /// API or use the log feature (to be implemented using the log crate). + fn write(&mut self) -> Self::Write; + + fn customization(&self) -> &Self::Customization; + + /// I/O connection for sending packets implementing CTAP HID protocol. + fn main_hid_connection(&mut self) -> &mut Self::HidConnection; + + /// I/O connection for sending packets implementing vendor extensions to CTAP HID protocol. + #[cfg(feature = "vendor_hid")] + fn vendor_hid_connection(&mut self) -> &mut Self::HidConnection; +} diff --git a/src/env/test/customization.rs b/libraries/opensk/src/env/test/customization.rs similarity index 100% rename from src/env/test/customization.rs rename to libraries/opensk/src/env/test/customization.rs diff --git a/src/env/test/mod.rs b/libraries/opensk/src/env/test/mod.rs similarity index 100% rename from src/env/test/mod.rs rename to libraries/opensk/src/env/test/mod.rs diff --git a/src/env/test/upgrade_storage.rs b/libraries/opensk/src/env/test/upgrade_storage.rs similarity index 100% rename from src/env/test/upgrade_storage.rs rename to libraries/opensk/src/env/test/upgrade_storage.rs diff --git a/libraries/opensk/src/lib.rs b/libraries/opensk/src/lib.rs new file mode 100644 index 00000000..d172fc33 --- /dev/null +++ b/libraries/opensk/src/lib.rs @@ -0,0 +1,123 @@ +// Copyright 2019-2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#![cfg_attr(not(feature = "std"), no_std)] + +extern crate alloc; +#[macro_use] +extern crate arrayref; + +use crate::ctap::hid::{HidPacket, HidPacketIterator}; +use crate::ctap::main_hid::MainHid; +#[cfg(feature = "vendor_hid")] +use crate::ctap::vendor_hid::VendorHid; +use crate::ctap::CtapState; +pub use crate::ctap::Transport; +use crate::env::Env; + +// Those macros should eventually be split into trace, debug, info, warn, and error macros when +// adding either the defmt or log feature and crate dependency. +#[cfg(feature = "debug_ctap")] +macro_rules! debug_ctap { + ($env: expr, $($rest:tt)*) => {{ + use core::fmt::Write; + writeln!($env.write(), $($rest)*).unwrap(); + }}; +} +#[cfg(not(feature = "debug_ctap"))] +macro_rules! debug_ctap { + ($env: expr, $($rest:tt)*) => { + // To avoid unused variable warnings. + let _ = $env; + }; +} + +pub mod api; +// TODO(kaczmarczyck): Refactor this so that ctap module isn't public. +pub mod ctap; +pub mod env; +#[cfg(feature = "std")] +pub mod test_helpers; + +/// CTAP implementation parameterized by its environment. +pub struct Ctap { + env: E, + state: CtapState, + hid: MainHid, + #[cfg(feature = "vendor_hid")] + vendor_hid: VendorHid, +} + +impl Ctap { + /// Instantiates a CTAP implementation given its environment. + // This should only take the environment, but it temporarily takes the boot time until the + // clock is part of the environment. + pub fn new(mut env: E) -> Self { + let state = CtapState::::new(&mut env); + let hid = MainHid::default(); + #[cfg(feature = "vendor_hid")] + let vendor_hid = VendorHid::default(); + Ctap { + env, + state, + hid, + #[cfg(feature = "vendor_hid")] + vendor_hid, + } + } + + pub fn state(&mut self) -> &mut CtapState { + &mut self.state + } + + pub fn hid(&mut self) -> &mut MainHid { + &mut self.hid + } + + pub fn env(&mut self) -> &mut E { + &mut self.env + } + + pub fn process_hid_packet( + &mut self, + packet: &HidPacket, + transport: Transport, + ) -> HidPacketIterator { + match transport { + Transport::MainHid => { + self.hid + .process_hid_packet(&mut self.env, packet, &mut self.state) + } + #[cfg(feature = "vendor_hid")] + Transport::VendorHid => { + self.vendor_hid + .process_hid_packet(&mut self.env, packet, &mut self.state) + } + } + } + + pub fn should_wink(&mut self) -> bool { + self.hid.should_wink(&mut self.env) + } + + #[cfg(feature = "with_ctap1")] + pub fn u2f_grant_user_presence(&mut self) { + self.state.u2f_grant_user_presence(&mut self.env) + } + + #[cfg(feature = "with_ctap1")] + pub fn u2f_needs_user_presence(&mut self) -> bool { + self.state.u2f_needs_user_presence(&mut self.env) + } +} diff --git a/src/test_helpers/mod.rs b/libraries/opensk/src/test_helpers/mod.rs similarity index 100% rename from src/test_helpers/mod.rs rename to libraries/opensk/src/test_helpers/mod.rs diff --git a/libraries/persistent_store/Cargo.lock b/libraries/persistent_store/Cargo.lock deleted file mode 100644 index 0cff0f9b..00000000 --- a/libraries/persistent_store/Cargo.lock +++ /dev/null @@ -1,100 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "fastrand" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" -dependencies = [ - "instant", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "libc" -version = "0.2.133" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966" - -[[package]] -name = "persistent_store" -version = "0.1.0" -dependencies = [ - "tempfile", -] - -[[package]] -name = "redox_syscall" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" -dependencies = [ - "bitflags", -] - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - -[[package]] -name = "tempfile" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" -dependencies = [ - "cfg-if", - "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/libraries/persistent_store/fuzz/Cargo.lock b/libraries/persistent_store/fuzz/Cargo.lock deleted file mode 100644 index 433f52c0..00000000 --- a/libraries/persistent_store/fuzz/Cargo.lock +++ /dev/null @@ -1,126 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "arbitrary" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db55d72333851e17d572bec876e390cd3b11eb1ef53ae821dd9f3b653d2b4569" - -[[package]] -name = "cc" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" - -[[package]] -name = "fuzz-store" -version = "0.0.0" -dependencies = [ - "libfuzzer-sys", - "persistent_store", - "rand_core", - "rand_pcg", - "strum", -] - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "libfuzzer-sys" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf184a4b6b274f82a5df6b357da6055d3e82272327bba281c28bbba6f1664ef" -dependencies = [ - "arbitrary", - "cc", -] - -[[package]] -name = "persistent_store" -version = "0.1.0" - -[[package]] -name = "proc-macro2" -version = "1.0.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core", -] - -[[package]] -name = "strum" -version = "0.19.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89a286a7e3b5720b9a477b23253bc50debac207c8d21505f8e70b36792f11b5" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.19.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e61bb0be289045cb80bfce000512e32d09f8337e54c186725da381377ad1f8d5" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "syn" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "unicode-ident" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" - -[[package]] -name = "unicode-segmentation" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" diff --git a/libraries/rng256/Cargo.lock b/libraries/rng256/Cargo.lock deleted file mode 100644 index e6add989..00000000 --- a/libraries/rng256/Cargo.lock +++ /dev/null @@ -1,196 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "autocfg" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" -dependencies = [ - "autocfg 1.1.0", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -dependencies = [ - "bitflags", -] - -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - -[[package]] -name = "libc" -version = "0.2.133" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966" - -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -dependencies = [ - "autocfg 0.1.8", - "libc", - "rand_chacha", - "rand_core 0.4.2", - "rand_hc", - "rand_isaac", - "rand_jitter", - "rand_os", - "rand_pcg", - "rand_xorshift", - "winapi", -] - -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -dependencies = [ - "autocfg 0.1.8", - "rand_core 0.3.1", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -dependencies = [ - "libc", - "rand_core 0.4.2", - "winapi", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -dependencies = [ - "cloudabi", - "fuchsia-cprng", - "libc", - "rand_core 0.4.2", - "rdrand", - "winapi", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -dependencies = [ - "autocfg 0.1.8", - "rand_core 0.4.2", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rng256" -version = "0.1.0" -dependencies = [ - "arrayref", - "rand", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/run_desktop_tests.sh b/run_desktop_tests.sh index 1e9cda6c..334277ec 100755 --- a/run_desktop_tests.sh +++ b/run_desktop_tests.sh @@ -16,24 +16,27 @@ set -ex echo "Checking formatting..." -cargo fmt --all -- --check +cargo fmt -- --check +cd libraries/opensk +cargo +nightly fmt -- --check +cd ../.. cd libraries/cbor -cargo fmt --all -- --check +cargo fmt -- --check cd ../.. cd libraries/crypto -cargo fmt --all -- --check +cargo fmt -- --check cd ../.. cd libraries/rng256 -cargo fmt --all -- --check +cargo fmt -- --check cd ../.. cd libraries/persistent_store -cargo fmt --all -- --check +cargo fmt -- --check cd ../.. cd tools/heapviz -cargo fmt --all -- --check +cargo fmt -- --check cd ../.. cd bootloader -cargo fmt --all -- --check +cargo fmt -- --check cd .. echo "Running Clippy lints..." @@ -70,12 +73,15 @@ cargo check --release --target=thumbv7em-none-eabi cd .. echo "Checking that fuzz targets build properly..." -cargo fuzz build +# Uses nightly since our old toolchain causes problems. +cd libraries/opensk +cargo +nightly fuzz build +cd ../.. cd libraries/cbor -cargo fuzz build +cargo +nightly fuzz build cd ../.. cd libraries/persistent_store -cargo fuzz build +cargo +nightly fuzz build cd ../.. echo "Checking that CTAP2 builds and links properly (1 set of features)..." @@ -101,6 +107,7 @@ echo "Checking deployment of other boards..." if [ -z "${TRAVIS_OS_NAME}" -o "${TRAVIS_OS_NAME}" = "linux" ] then echo "Running unit tests on the desktop (release mode)..." + cargo test --release --features std cd libraries/cbor cargo test --release cd ../.. @@ -113,6 +120,7 @@ then cargo test --release --features std echo "Running unit tests on the desktop (debug mode)..." + cargo test --features std cd libraries/cbor cargo test cd ../.. @@ -124,9 +132,14 @@ then cd ../.. cargo test --features std - echo "Running unit tests on the desktop (release mode + CTAP1 + Vendor HID)..." - cargo test --release --features std,with_ctap1,vendor_hid + cd libraries/opensk + echo "Running CTAP library unit tests (release mode)..." + cargo +nightly test --release --features std + echo "Running CTAP library unit tests (release mode + all features)..." + cargo +nightly test --release --features std,debug_ctap,with_ctap1,vendor_hid,ed25519 - echo "Running unit tests on the desktop (debug mode + CTAP1)..." - cargo test --features std,with_ctap1,vendor_hid + echo "Running CTAP library unit tests (debug mode)..." + cargo +nightly test --features std + echo "Running CTAP library unit tests (debug mode + all features)..." + cargo +nightly test --features std,debug_ctap,with_ctap1,vendor_hid,ed25519 fi diff --git a/setup.sh b/setup.sh index 709c3914..72842b67 100755 --- a/setup.sh +++ b/setup.sh @@ -38,6 +38,8 @@ source tools/gen_key_materials.sh generate_crypto_materials N rustup show +# Nightly is used for testing and fuzzing libraries +rustup install nightly pip3 install --upgrade -r requirements.txt # Install dependency to create applications. diff --git a/src/env/mod.rs b/src/env/mod.rs index ba3e8145..82fba632 100644 --- a/src/env/mod.rs +++ b/src/env/mod.rs @@ -1,4 +1,4 @@ -// Copyright 2022-2023 Google LLC +// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,64 +12,4 @@ // See the License for the specific language governing permissions and // limitations under the License. -use crate::api::attestation_store::AttestationStore; -use crate::api::clock::Clock; -use crate::api::connection::HidConnection; -use crate::api::customization::Customization; -use crate::api::firmware_protection::FirmwareProtection; -use crate::api::key_store::KeyStore; -use crate::api::upgrade_storage::UpgradeStorage; -use crate::api::user_presence::UserPresence; -use persistent_store::{Storage, Store}; -use rng256::Rng256; - -#[cfg(feature = "std")] -pub mod test; pub mod tock; - -/// Describes what CTAP needs to function. -pub trait Env { - type Rng: Rng256; - type UserPresence: UserPresence; - type Storage: Storage; - type KeyStore: KeyStore; - type UpgradeStorage: UpgradeStorage; - type FirmwareProtection: FirmwareProtection; - type Write: core::fmt::Write; - type Customization: Customization; - type HidConnection: HidConnection; - type AttestationStore: AttestationStore; - type Clock: Clock; - - fn rng(&mut self) -> &mut Self::Rng; - fn user_presence(&mut self) -> &mut Self::UserPresence; - fn store(&mut self) -> &mut Store; - fn key_store(&mut self) -> &mut Self::KeyStore; - fn attestation_store(&mut self) -> &mut Self::AttestationStore; - fn clock(&mut self) -> &mut Self::Clock; - - /// Returns the upgrade storage instance. - /// - /// Upgrade storage is optional, so implementations may return `None`. However, implementations - /// should either always return `None` or always return `Some`. - fn upgrade_storage(&mut self) -> Option<&mut Self::UpgradeStorage>; - - fn firmware_protection(&mut self) -> &mut Self::FirmwareProtection; - - /// Creates a write instance for debugging. - /// - /// This API doesn't return a reference such that drop may flush. This matches the Tock - /// environment. Non-Tock embedded environments should use the defmt feature (to be implemented - /// using the defmt crate) and ignore this API. Non-embedded environments may either use this - /// API or use the log feature (to be implemented using the log crate). - fn write(&mut self) -> Self::Write; - - fn customization(&self) -> &Self::Customization; - - /// I/O connection for sending packets implementing CTAP HID protocol. - fn main_hid_connection(&mut self) -> &mut Self::HidConnection; - - /// I/O connection for sending packets implementing vendor extensions to CTAP HID protocol. - #[cfg(feature = "vendor_hid")] - fn vendor_hid_connection(&mut self) -> &mut Self::HidConnection; -} diff --git a/src/env/tock/clock.rs b/src/env/tock/clock.rs index 8ca01e71..a0a34aaa 100644 --- a/src/env/tock/clock.rs +++ b/src/env/tock/clock.rs @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -use crate::api::clock::Clock; use libtock_drivers::timer::{get_clock_frequency, get_ticks}; +use opensk::api::clock::Clock; /// 56-bits timestamp (valid for 70k+ years) #[derive(Clone, Copy, Debug, Default, PartialOrd, Ord, PartialEq, Eq)] diff --git a/src/env/tock/mod.rs b/src/env/tock/mod.rs index 40462c99..e6f4bc82 100644 --- a/src/env/tock/mod.rs +++ b/src/env/tock/mod.rs @@ -13,15 +13,6 @@ // limitations under the License. pub use self::storage::{TockStorage, TockUpgradeStorage}; -use crate::api::attestation_store::AttestationStore; -use crate::api::connection::{ - HidConnection, SendOrRecvError, SendOrRecvResult, SendOrRecvStatus, UsbEndpoint, -}; -use crate::api::customization::{CustomizationImpl, AAGUID_LENGTH, DEFAULT_CUSTOMIZATION}; -use crate::api::firmware_protection::FirmwareProtection; -use crate::api::user_presence::{UserPresence, UserPresenceError, UserPresenceResult}; -use crate::api::{attestation_store, key_store}; -use crate::env::Env; use clock::TockClock; use core::cell::Cell; use core::convert::TryFrom; @@ -32,6 +23,15 @@ use libtock_drivers::console::Console; use libtock_drivers::result::{FlexUnwrap, TockError}; use libtock_drivers::timer::Duration; use libtock_drivers::{crp, led, rng, timer, usb_ctap_hid}; +use opensk::api::attestation_store::AttestationStore; +use opensk::api::connection::{ + HidConnection, SendOrRecvError, SendOrRecvResult, SendOrRecvStatus, UsbEndpoint, +}; +use opensk::api::customization::{CustomizationImpl, AAGUID_LENGTH, DEFAULT_CUSTOMIZATION}; +use opensk::api::firmware_protection::FirmwareProtection; +use opensk::api::user_presence::{UserPresence, UserPresenceError, UserPresenceResult}; +use opensk::api::{attestation_store, key_store}; +use opensk::env::Env; use persistent_store::{StorageResult, Store}; use rng256::Rng256; @@ -348,3 +348,14 @@ pub fn switch_off_leds() { led::get(l).flex_unwrap().off().flex_unwrap(); } } + +#[cfg(test)] +mod test { + use super::*; + use opensk::api::customization::is_valid; + + #[test] + fn test_invariants() { + assert!(is_valid(&TOCK_CUSTOMIZATION)); + } +} diff --git a/src/env/tock/storage.rs b/src/env/tock/storage.rs index 753fb223..c0cacd79 100644 --- a/src/env/tock/storage.rs +++ b/src/env/tock/storage.rs @@ -12,8 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -use crate::api::upgrade_storage::helper::{find_slice, is_aligned, ModRange, Partition}; -use crate::api::upgrade_storage::UpgradeStorage; use alloc::borrow::Cow; use alloc::vec::Vec; use arrayref::array_ref; @@ -22,6 +20,8 @@ use core::cell::Cell; use crypto::sha256::Sha256; use crypto::{ecdsa, Hash256}; use libtock_core::{callback, syscalls}; +use opensk::api::upgrade_storage::helper::{find_slice, is_aligned, ModRange, Partition}; +use opensk::api::upgrade_storage::UpgradeStorage; use persistent_store::{Storage, StorageError, StorageIndex, StorageResult}; const DRIVER_NUMBER: usize = 0x50003; @@ -470,8 +470,8 @@ fn verify_signature( #[cfg(test)] mod test { use super::*; - use crate::env::test::TestEnv; - use crate::env::Env; + use opensk::env::test::TestEnv; + use opensk::env::Env; #[test] fn test_check_metadata() { diff --git a/src/lib.rs b/src/lib.rs index 13687914..725ba7b0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -15,109 +15,5 @@ #![cfg_attr(not(feature = "std"), no_std)] extern crate alloc; -#[macro_use] -extern crate arrayref; -use crate::ctap::hid::{HidPacket, HidPacketIterator}; -use crate::ctap::main_hid::MainHid; -#[cfg(feature = "vendor_hid")] -use crate::ctap::vendor_hid::VendorHid; -use crate::ctap::CtapState; -pub use crate::ctap::Transport; -use crate::env::Env; - -// Those macros should eventually be split into trace, debug, info, warn, and error macros when -// adding either the defmt or log feature and crate dependency. -#[cfg(feature = "debug_ctap")] -macro_rules! debug_ctap { - ($env: expr, $($rest:tt)*) => {{ - use core::fmt::Write; - writeln!($env.write(), $($rest)*).unwrap(); - }}; -} -#[cfg(not(feature = "debug_ctap"))] -macro_rules! debug_ctap { - ($env: expr, $($rest:tt)*) => { - // To avoid unused variable warnings. - let _ = $env; - }; -} - -pub mod api; -// TODO(kaczmarczyck): Refactor this so that ctap module isn't public. -pub mod ctap; pub mod env; -#[cfg(feature = "std")] -pub mod test_helpers; - -/// CTAP implementation parameterized by its environment. -pub struct Ctap { - env: E, - state: CtapState, - hid: MainHid, - #[cfg(feature = "vendor_hid")] - vendor_hid: VendorHid, -} - -impl Ctap { - /// Instantiates a CTAP implementation given its environment. - // This should only take the environment, but it temporarily takes the boot time until the - // clock is part of the environment. - pub fn new(mut env: E) -> Self { - let state = CtapState::::new(&mut env); - let hid = MainHid::default(); - #[cfg(feature = "vendor_hid")] - let vendor_hid = VendorHid::default(); - Ctap { - env, - state, - hid, - #[cfg(feature = "vendor_hid")] - vendor_hid, - } - } - - pub fn state(&mut self) -> &mut CtapState { - &mut self.state - } - - pub fn hid(&mut self) -> &mut MainHid { - &mut self.hid - } - - pub fn env(&mut self) -> &mut E { - &mut self.env - } - - pub fn process_hid_packet( - &mut self, - packet: &HidPacket, - transport: Transport, - ) -> HidPacketIterator { - match transport { - Transport::MainHid => { - self.hid - .process_hid_packet(&mut self.env, packet, &mut self.state) - } - #[cfg(feature = "vendor_hid")] - Transport::VendorHid => { - self.vendor_hid - .process_hid_packet(&mut self.env, packet, &mut self.state) - } - } - } - - pub fn should_wink(&mut self) -> bool { - self.hid.should_wink(&mut self.env) - } - - #[cfg(feature = "with_ctap1")] - pub fn u2f_grant_user_presence(&mut self) { - self.state.u2f_grant_user_presence(&mut self.env) - } - - #[cfg(feature = "with_ctap1")] - pub fn u2f_needs_user_presence(&mut self) -> bool { - self.state.u2f_needs_user_presence(&mut self.env) - } -} diff --git a/src/main.rs b/src/main.rs index 7487d0f0..015f9435 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,15 +26,9 @@ use core::cell::Cell; use core::convert::TryFrom; #[cfg(feature = "debug_ctap")] use core::fmt::Write; -use ctap2::api::clock::Clock; -use ctap2::api::connection::{HidConnection, SendOrRecvStatus, UsbEndpoint}; -use ctap2::ctap::hid::HidPacketIterator; -use ctap2::ctap::KEEPALIVE_DELAY_MS; #[cfg(feature = "with_ctap1")] use ctap2::env::tock::blink_leds; use ctap2::env::tock::{switch_off_leds, wink_leds, TockEnv}; -use ctap2::env::Env; -use ctap2::Transport; #[cfg(feature = "with_ctap1")] use libtock_drivers::buttons::{self, ButtonState}; #[cfg(feature = "debug_ctap")] @@ -42,6 +36,12 @@ use libtock_drivers::console::Console; use libtock_drivers::result::FlexUnwrap; use libtock_drivers::timer::Duration; use libtock_drivers::usb_ctap_hid; +use opensk::api::clock::Clock; +use opensk::api::connection::{HidConnection, SendOrRecvStatus, UsbEndpoint}; +use opensk::ctap::hid::HidPacketIterator; +use opensk::ctap::KEEPALIVE_DELAY_MS; +use opensk::env::Env; +use opensk::Transport; libtock_core::stack_size! {0x4000} @@ -115,7 +115,7 @@ fn main() { } let env = TockEnv::default(); - let mut ctap = ctap2::Ctap::new(env); + let mut ctap = opensk::Ctap::new(env); let mut led_counter = 0; let mut led_blink_timer = <::Clock as Clock>::Timer::default();