diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3d92bfdb..1e36d28a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,7 +33,8 @@ jobs: strategy: matrix: target: - - wasm32-wasi + - wasm32-wasip1 + - wasm32-wasip2 steps: - uses: actions/checkout@v4 @@ -51,6 +52,19 @@ jobs: - uses: actions/checkout@v4 - name: Install linux build dependencies run: sudo apt update && sudo apt install libfuse-dev + - run: > + cargo check + --all-targets + --features armor + --features async + --features cli-common + --features plugin + --features ssh + --features unstable + # Check with rage-mount MSRV as well. + - uses: dtolnay/rust-toolchain@1.88.0 + id: toolchain + - run: rustup override set ${{steps.toolchain.outputs.name}} - run: cargo check --all-targets --all-features clippy: @@ -61,11 +75,32 @@ jobs: - name: Install linux build dependencies run: sudo apt update && sudo apt install libfuse-dev - name: Clippy check - uses: actions-rs/clippy-check@v1 + uses: auguwu/clippy-action@9817d076b82df0194935be9db6154c56ac07b317 # 1.5.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + check-args: > + --features armor + --features async + --features cli-common + --features plugin + --features ssh + --features unstable + --all-targets + deny: warnings + # Check with rage-mount MSRV as well. + - uses: dtolnay/rust-toolchain@1.88.0 + id: toolchain + with: + components: clippy + - run: rustup override set ${{steps.toolchain.outputs.name}} + - name: Clippy check + uses: auguwu/clippy-action@9817d076b82df0194935be9db6154c56ac07b317 # 1.5.0 with: - name: Clippy (MSRV) token: ${{ secrets.GITHUB_TOKEN }} - args: --all-features --all-targets -- -D warnings + check-args: > + --all-features + --all-targets + deny: warnings codecov: name: Code coverage diff --git a/Cargo.lock b/Cargo.lock index 7ea55e3c..9ed272eb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,12 +1,12 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] @@ -19,30 +19,30 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aead" -version = "0.5.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +checksum = "1973cfbc1a2daf9cf550e74e1f088c28e7f7d8c1e1418fb6c9dc5184b7e84c99" dependencies = [ "crypto-common", - "generic-array", + "inout", ] [[package]] name = "aes" -version = "0.8.4" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138" dependencies = [ - "cfg-if", "cipher", + "cpubits", "cpufeatures", ] [[package]] name = "aes-gcm" -version = "0.10.3" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +checksum = "fdf011db2e21ce0d575593d749db5554b47fed37aff429e4dc50bc91ac93a028" dependencies = [ "aead", "aes", @@ -90,13 +90,13 @@ dependencies = [ "pinentry", "pprof", "proptest", - "rand", + "rand 0.10.2", "rpassword", "rsa", "rust-embed", "scrypt", "sha2", - "sha3", + "sha3 0.12.0", "subtle", "test-case", "tokio", @@ -119,7 +119,7 @@ dependencies = [ "hpke", "io_tee", "nom", - "rand", + "rand 0.10.2", "secrecy", "sha2", "tempfile", @@ -138,15 +138,15 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.2.17", + "getrandom 0.3.4", "once_cell", "version_check", - "zerocopy 0.7.35", + "zerocopy", ] [[package]] @@ -247,15 +247,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" -dependencies = [ - "derive_arbitrary", -] - [[package]] name = "arc-swap" version = "1.9.2" @@ -290,9 +281,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -300,14 +291,14 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-link", ] [[package]] name = "base16ct" -version = "0.2.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" [[package]] name = "base64" @@ -317,9 +308,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.6.0" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "basic-toml" @@ -332,9 +323,9 @@ dependencies = [ [[package]] name = "bcrypt-pbkdf" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aeac2e1fe888769f34f05ac343bbef98b14d1ffb292ab69d4608b3abc86f2a2" +checksum = "144e573728da132683b9488acd528274c790e07fc06ff81ee29f9d8f8b1041e0" dependencies = [ "blowfish", "pbkdf2", @@ -376,27 +367,37 @@ checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "block-buffer" -version = "0.10.4" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ - "generic-array", + "hybrid-array", + "zeroize", ] [[package]] name = "block-padding" -version = "0.3.3" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +checksum = "710f1dd022ef4e93f8a438b4ba958de7f64308434fa6a87104481645cc30068b" dependencies = [ - "generic-array", + "hybrid-array", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", ] [[package]] name = "blowfish" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7" +checksum = "62ce3946557b35e71d1bbe07ec385073ce9eda05043f95de134eb578fcf1a298" dependencies = [ "byteorder", "cipher", @@ -422,22 +423,11 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bzip2" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" -dependencies = [ - "bzip2-sys", - "libc", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.13+1.0.8" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" +checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" dependencies = [ - "cc", - "pkg-config", + "libbz2-rs-sys", ] [[package]] @@ -448,9 +438,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cbc" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +checksum = "ce2dc9ee5f88d11e0beb842c88b33c8a5cf0d1329c4b19494af42b07dbfe8896" dependencies = [ "cipher", ] @@ -481,26 +471,26 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chacha20" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", "cipher", "cpufeatures", + "rand_core 0.10.1", ] [[package]] name = "chacha20poly1305" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +checksum = "9b89e1c441e926b9c82a8d023f6e1b7ae0adcfaa7d621814e4d60789bac751cb" dependencies = [ "aead", "chacha20", "cipher", "poly1305", - "zeroize", ] [[package]] @@ -545,20 +535,20 @@ dependencies = [ [[package]] name = "cipher" -version = "0.4.4" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" dependencies = [ + "block-buffer", "crypto-common", "inout", - "zeroize", ] [[package]] name = "clap" -version = "4.5.61" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52fa72306bb30daf11bc97773431628e5b4916e97aaa74b7d3f625d4d495da02" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" dependencies = [ "clap_builder", "clap_derive", @@ -566,9 +556,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.61" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2071365c5c56eae7d77414029dde2f4f4ba151cf68d5a3261c9a40de428ace93" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" dependencies = [ "anstream 1.0.0", "anstyle", @@ -578,18 +568,18 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.67" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1248e420506b523e97ebd7b610656114abadbe73b04279a86768a12ce1860837" +checksum = "db8b397918185f0161ff3d6fcaa9e4bfc09b8367caf6e1d4a2848e5477ed027b" dependencies = [ "clap", ] [[package]] name = "clap_derive" -version = "4.5.61" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec5be1eea072311774b7b84ded287adbd9f293f9d23456817605c6042f4f5e0" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" dependencies = [ "heck", "proc-macro2", @@ -599,20 +589,26 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e78417baa3b3114dc0e95e7357389a249c4da97c3c2b540700079db6171bfd7" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "clap_mangen" -version = "0.2.32" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f98eb8c611cdbd2a8bbfe35408903badf2e7f9d47f756907f1b1434c49b6655" +checksum = "7e30ffc187e2e3aeafcd1c6e2aa416e29739454c0ccaa419226d5ecd181f2d78" dependencies = [ "clap", "roff", ] +[[package]] +name = "cmov" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" + [[package]] name = "colorchoice" version = "1.0.5" @@ -632,15 +628,15 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.6" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "constant_time_eq" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" [[package]] name = "content_inspector" @@ -675,11 +671,17 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "cpubits" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" + [[package]] name = "cpufeatures" -version = "0.2.17" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" dependencies = [ "libc", ] @@ -772,51 +774,76 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" -version = "0.5.5" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "1a52aa3fcda4e6302a9f48734f234d35d4721b96f8fe07d073f07ce9df4f0271" dependencies = [ - "generic-array", - "rand_core", + "cpubits", + "ctutils", + "hybrid-array", + "num-traits", + "rand_core 0.10.1", + "serdect", "subtle", "zeroize", ] [[package]] name = "crypto-common" -version = "0.1.7" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ - "generic-array", - "rand_core", - "typenum", + "getrandom 0.4.3", + "hybrid-array", + "rand_core 0.10.1", +] + +[[package]] +name = "crypto-primes" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3633a51a39c69ebbaa4feaa694bd83d241e4093901c84a0963b19d9bb3f0cf8f" +dependencies = [ + "crypto-bigint", + "rand_core 0.10.1", ] [[package]] name = "ctr" -version = "0.9.2" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +checksum = "baaca1c4b237092596f64d571e9db6ce4109c4ef9742e27590f1709594461f21" dependencies = [ "cipher", ] [[package]] name = "ctrlc" -version = "3.4.7" +version = "3.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f93780a459b7d656ef7f071fe699c4d3d2cb201c4b24d085b6ddc505276e73" +checksum = "e0b1fab2ae45819af2d0731d60f2afe17227ebb1a1538a236da84c93e9a60162" dependencies = [ - "nix 0.30.1", - "windows-sys 0.59.0", + "dispatch2", + "nix 0.31.3", + "windows-sys 0.61.2", +] + +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", + "subtle", ] [[package]] name = "curve25519-dalek" -version = "4.1.3" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23" dependencies = [ "cfg-if", "cpufeatures", @@ -849,44 +876,44 @@ dependencies = [ [[package]] name = "der" -version = "0.7.10" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +checksum = "a69dedd701da44b0536442edf09c81a64b0ab97a7a4a5e3d1971f00027cbc63d" dependencies = [ "const-oid", + "pem-rfc7468", "zeroize", ] [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" -dependencies = [ - "powerfmt", -] +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" [[package]] -name = "derive_arbitrary" -version = "1.4.2" +name = "digest" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ - "proc-macro2", - "quote", - "syn", + "block-buffer", + "const-oid", + "crypto-common", + "ctutils", + "zeroize", ] [[package]] -name = "digest" -version = "0.10.7" +name = "dispatch2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", + "bitflags 2.13.0", + "block2", + "libc", + "objc2", ] [[package]] @@ -914,18 +941,19 @@ checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "elliptic-curve" -version = "0.13.8" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "9d65aa39b3a5c1c9c1b745c9a019234bb7a21b77abcb4f4d266d706e2d577d65" dependencies = [ "base16ct", "crypto-bigint", + "crypto-common", "digest", "ff", - "generic-array", "group", "hkdf", - "rand_core", + "hybrid-array", + "rand_core 0.10.1", "sec1", "subtle", "zeroize", @@ -963,7 +991,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -974,29 +1002,28 @@ checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "ff" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f" dependencies = [ - "rand_core", + "rand_core 0.10.1", "subtle", ] [[package]] name = "fiat-crypto" -version = "0.2.9" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" [[package]] name = "filetime" -version = "0.2.27" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" dependencies = [ "cfg-if", "libc", - "libredox", ] [[package]] @@ -1034,6 +1061,7 @@ checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", + "zlib-rs", ] [[package]] @@ -1089,9 +1117,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fuse_mt" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e098b8dc4cd32e9ba31d9c8cdfef11271d8191233c64c2a671432ff19d354948" +checksum = "a9f59af312f6f40a721dafd2662f4bb33eacc90d3a2e1dfebc4536aa732a79be" dependencies = [ "fuser", "libc", @@ -1101,17 +1129,17 @@ dependencies = [ [[package]] name = "fuser" -version = "0.13.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21370f84640642c8ea36dfb2a6bfc4c55941f476fcf431f6fef25a5ddcf0169b" +checksum = "0bb29a3ae32279fe3e79a958fe01899f5fb23eadccee919cf88e145b54ed9367" dependencies = [ "libc", "log", "memchr", + "nix 0.29.0", "page_size", - "pkg-config", "smallvec", - "zerocopy 0.6.6", + "zerocopy", ] [[package]] @@ -1218,55 +1246,46 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - [[package]] name = "getrandom" -version = "0.2.17" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "r-efi 5.3.0", + "wasip2", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", + "js-sys", "libc", - "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "r-efi 6.0.0", + "rand_core 0.10.1", + "wasm-bindgen", ] [[package]] name = "ghash" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +checksum = "2eecf2d5dc9b66b732b97707a0210906b1d30523eb773193ab777c0c84b3e8d5" dependencies = [ - "opaque-debug", "polyval", ] [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "glob" @@ -1276,30 +1295,31 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "group" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4" dependencies = [ "ff", - "rand_core", + "rand_core 0.10.1", "subtle", ] [[package]] name = "half" -version = "2.4.1" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", + "zerocopy", ] [[package]] name = "hashbrown" -version = "0.16.1" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "heck" @@ -1321,39 +1341,43 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hkdf" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" dependencies = [ "hmac", ] [[package]] name = "hmac" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ "digest", ] [[package]] name = "hpke" -version = "0.12.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4917627a14198c3603282c5158b815ad5534795451d3c074b53cf3cee0960b11" +checksum = "dd5130e119706b4d8c2180da6126f7e60b6c38c2d340d539219f57051f0a7af7" dependencies = [ "aead", - "aes-gcm", "chacha20poly1305", - "digest", - "generic-array", "hkdf", - "hmac", + "hybrid-array", + "ml-kem", "p256", - "rand_core", + "p384", + "p521", + "rand_core 0.10.1", "sha2", + "sha3 0.12.0", + "shake", "subtle", + "turboshake", + "x-wing", "zeroize", ] @@ -1375,11 +1399,14 @@ dependencies = [ [[package]] name = "hybrid-array" -version = "0.2.0-rc.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d306b679262030ad8813a82d4915fc04efff97776e4db7f8eb5137039d56400" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" dependencies = [ + "ctutils", + "subtle", "typenum", + "zeroize", ] [[package]] @@ -1475,9 +1502,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.4" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", "hashbrown", @@ -1503,12 +1530,12 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.4" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" dependencies = [ "block-padding", - "generic-array", + "hybrid-array", ] [[package]] @@ -1544,7 +1571,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1570,41 +1597,43 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.4.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.94" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ - "once_cell", + "cfg-if", + "futures-util", "wasm-bindgen", ] [[package]] name = "keccak" -version = "0.1.6" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" +checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" dependencies = [ + "cfg-if", "cpufeatures", ] [[package]] name = "kem" -version = "0.3.0-pre.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b8645470337db67b01a7f966decf7d0bafedbae74147d33e641c67a91df239f" +checksum = "01737161ba802849cfd486b5bd209d38ba4943494c249a8126005170c7621edd" dependencies = [ - "rand_core", - "zeroize", + "crypto-common", + "rand_core 0.10.1", ] [[package]] @@ -1612,33 +1641,18 @@ name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] - -[[package]] -name = "libc" -version = "0.2.186" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] -name = "libm" -version = "0.2.16" +name = "libbz2-rs-sys" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" +checksum = "34b357333733e8260735ba5894eb928c02ecc69c78715f01a8019e7fa7f2db4c" [[package]] -name = "libredox" -version = "0.1.18" +name = "libc" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" -dependencies = [ - "bitflags 2.13.0", - "libc", - "plain", - "redox_syscall 0.9.0", -] +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "linux-raw-sys" @@ -1676,6 +1690,22 @@ dependencies = [ "libc", ] +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "miniz_oxide" version = "0.8.9" @@ -1688,14 +1718,29 @@ dependencies = [ [[package]] name = "ml-kem" -version = "0.2.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de49b3df74c35498c0232031bb7e85f9389f913e2796169c8ab47a53993a18f" +checksum = "5e15f3e5b957493873e396a66914e83e616b6afe335cdef7efe5c6e1216aba66" dependencies = [ "hybrid-array", "kem", - "rand_core", - "sha3", + "module-lattice", + "pkcs8", + "rand_core 0.10.1", + "sha3 0.11.0", + "zeroize", +] + +[[package]] +name = "module-lattice" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c61b87c9683ab7cb1c6871d261ad5479b6b10ceb52c4352aaca3b5d35a8febe" +dependencies = [ + "ctutils", + "hybrid-array", + "num-traits", + "zeroize", ] [[package]] @@ -1711,9 +1756,21 @@ dependencies = [ [[package]] name = "nix" -version = "0.30.1" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.13.0", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "nix" +version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" +checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" dependencies = [ "bitflags 2.13.0", "cfg-if", @@ -1736,27 +1793,11 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" -[[package]] -name = "num-bigint-dig" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" -dependencies = [ - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand", - "smallvec", - "zeroize", -] - [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-format" @@ -1768,25 +1809,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" -dependencies = [ - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -1794,7 +1816,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -1808,32 +1829,25 @@ dependencies = [ ] [[package]] -name = "num_enum" -version = "0.7.6" +name = "objc2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" dependencies = [ - "num_enum_derive", - "rustversion", + "objc2-encode", ] [[package]] -name = "num_enum_derive" -version = "0.7.6" +name = "objc2-encode" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" [[package]] name = "object" -version = "0.36.7" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] @@ -1856,12 +1870,6 @@ version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - [[package]] name = "os_pipe" version = "1.2.3" @@ -1869,37 +1877,62 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "p256" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +checksum = "d2c9239b2dbc807adbbe147e8cf72ea7450c3a0aabe62cb8e75ff4ec22e1f72a" dependencies = [ "elliptic-curve", + "primefield", "primeorder", ] [[package]] -name = "page_size" -version = "0.5.0" +name = "p384" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b7663cbd190cfd818d08efa8497f6cd383076688c49a391ef7c0d03cd12b561" +checksum = "d17b851e6b3e378ab4ecb07fa2ed23f4d15f075735f8fec9fa1e7bdce5f8301f" dependencies = [ - "libc", - "winapi", + "elliptic-curve", + "fiat-crypto", + "primefield", + "primeorder", ] [[package]] -name = "parking_lot" -version = "0.12.5" +name = "p521" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +checksum = "4ad64cc32c2dc466317c12ee5853e61f159f9eab1fe7efade0395dc2e7b43449" dependencies = [ - "lock_api", - "parking_lot_core", + "base16ct", + "elliptic-curve", + "primefield", + "primeorder", +] + +[[package]] +name = "page_size" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40da" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", ] [[package]] @@ -1910,21 +1943,30 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.18", + "redox_syscall", "smallvec", "windows-link", ] [[package]] name = "pbkdf2" -version = "0.12.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +checksum = "112d82ceb8c5bf524d9af484d4e4970c9fd5a0cc15ba14ad93dccd28873b0629" dependencies = [ "digest", "hmac", ] +[[package]] +name = "pem-rfc7468" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6305423e0e7738146434843d1694d621cce767262b2a86910beab705e4493d9" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.2" @@ -1974,20 +2016,19 @@ dependencies = [ [[package]] name = "pkcs1" -version = "0.7.5" +version = "0.8.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +checksum = "986d2e952779af96ea048f160fd9194e1751b4faea78bcf3ceb456efe008088e" dependencies = [ "der", - "pkcs8", "spki", ] [[package]] name = "pkcs8" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" dependencies = [ "der", "spki", @@ -1999,12 +2040,6 @@ version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" - [[package]] name = "plotters" version = "0.3.7" @@ -2035,24 +2070,22 @@ dependencies = [ [[package]] name = "poly1305" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +checksum = "6e2d0073b297041425c7c3df6eb4792d598a15323fe63346852b092eca02904c" dependencies = [ "cpufeatures", - "opaque-debug", "universal-hash", ] [[package]] name = "polyval" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +checksum = "b20f20e954175de5f463f67781b35583397d916b1d148738923711b2ad16bee8" dependencies = [ - "cfg-if", + "cpubits", "cpufeatures", - "opaque-debug", "universal-hash", ] @@ -2090,25 +2123,32 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.54", + "zerocopy", ] [[package]] -name = "primeorder" -version = "0.13.6" +name = "primefield" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4" dependencies = [ - "elliptic-curve", + "crypto-bigint", + "crypto-common", + "ff", + "rand_core 0.10.1", + "subtle", + "zeroize", ] [[package]] -name = "proc-macro-crate" -version = "3.4.0" +name = "primeorder" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06" dependencies = [ - "toml_edit 0.23.5", + "elliptic-curve", + "primefield", + "wnaf", ] [[package]] @@ -2144,16 +2184,15 @@ dependencies = [ [[package]] name = "proptest" -version = "1.6.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" +checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ "bit-set", "bit-vec", "bitflags 2.13.0", - "lazy_static", "num-traits", - "rand", + "rand 0.9.5", "rand_chacha", "rand_xorshift", "regex-syntax", @@ -2192,6 +2231,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "rage" version = "0.12.0" @@ -2222,48 +2267,64 @@ dependencies = [ [[package]] name = "rand" -version = "0.8.7" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ - "libc", "rand_chacha", - "rand_core", + "rand_core 0.9.5", +] + +[[package]] +name = "rand" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +dependencies = [ + "chacha20", + "getrandom 0.4.3", + "rand_core 0.10.1", ] [[package]] name = "rand_chacha" -version = "0.3.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.9.5", ] [[package]] name = "rand_core" -version = "0.6.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ - "getrandom 0.2.17", + "getrandom 0.3.4", ] +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + [[package]] name = "rand_xorshift" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "rand_core", + "rand_core 0.9.5", ] [[package]] name = "rayon" -version = "1.10.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" dependencies = [ "either", "rayon-core", @@ -2271,9 +2332,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -2288,15 +2349,6 @@ dependencies = [ "bitflags 2.13.0", ] -[[package]] -name = "redox_syscall" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5102a6aaa05aa011a238e178e6bca86d2cb56fc9f586d37cb80f5bca6e07759" -dependencies = [ - "bitflags 2.13.0", -] - [[package]] name = "regex" version = "1.13.0" @@ -2337,38 +2389,36 @@ dependencies = [ [[package]] name = "roff" -version = "1.0.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a65c4aa82d26fd949433258cada661b1816175012149f0b8cc3269b2df5913" +checksum = "323c417e1d9665a65b263ec744ba09030cfb277e9daa0b018a4ab62e57bc8189" [[package]] name = "rpassword" -version = "7.4.0" +version = "7.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d4c8b64f049c6721ec8ccec37ddfc3d641c4a7fca57e8f2a89de509c73df39" +checksum = "2da316a15f47e3d053de9cb2c439650bd8fa4aaeb9365f2e5f27f492ff73c196" dependencies = [ "libc", "rtoolbox", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "rsa" -version = "0.9.10" +version = "0.10.0-rc.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" +checksum = "30b2aa4ba0d89f73d1e332df05be0eeab8840351c36ca5654341dfdb57bb3caf" dependencies = [ "const-oid", + "crypto-bigint", + "crypto-primes", "digest", - "num-bigint-dig", - "num-integer", - "num-traits", "pkcs1", "pkcs8", - "rand_core", + "rand_core 0.10.1", "signature", "spki", - "subtle", "zeroize", ] @@ -2384,9 +2434,9 @@ dependencies = [ [[package]] name = "rust-embed" -version = "8.9.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "947d7f3fad52b283d261c4c99a084937e2fe492248cb9a68a8435a861b8798ca" +checksum = "e9e7760e252aaba7b09f4be00e36476cf585bdb68a53552ac954cdf504ab4bc9" dependencies = [ "rust-embed-impl", "rust-embed-utils", @@ -2395,10 +2445,11 @@ dependencies = [ [[package]] name = "rust-embed-impl" -version = "8.9.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fa2c8c9e8711e10f9c4fd2d64317ef13feaab820a4c51541f1a8c8e2e851ab2" +checksum = "3bcfc4d6f53af43755f7a723e4b6b8794fcce052a178dd8c6c1dadc5f5343097" dependencies = [ + "mime_guess", "proc-macro2", "quote", "rust-embed-utils", @@ -2408,9 +2459,9 @@ dependencies = [ [[package]] name = "rust-embed-utils" -version = "8.9.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b161f275cb337fe0a44d924a5f4df0ed69c2c39519858f931ce61c779d3475" +checksum = "42ffa149f6aa81b58a5b3011d01a857c4ed12c7a732d2c51947a4c7c692185f0" dependencies = [ "sha2", "walkdir", @@ -2424,9 +2475,9 @@ checksum = "b74b56ffa8bb2830709a538c2cbcae9aa062db0d2a42563bfb09bdaae44020eb" [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -2447,7 +2498,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2470,10 +2521,11 @@ dependencies = [ [[package]] name = "salsa20" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +checksum = "2f874456e72520ff1375a06c588eaf074b0f01f9e9e1aada45bd9b7954a6e42c" dependencies = [ + "cfg-if", "cipher", ] @@ -2494,10 +2546,11 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scrypt" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" +checksum = "d87af57419b594aa23fa95f09f0e06d80d84ba01c26148c43844cad6ff4485f0" dependencies = [ + "cfg-if", "pbkdf2", "salsa20", "sha2", @@ -2505,13 +2558,14 @@ dependencies = [ [[package]] name = "sec1" -version = "0.7.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" dependencies = [ "base16ct", + "ctutils", "der", - "generic-array", + "hybrid-array", "subtle", "zeroize", ] @@ -2589,11 +2643,21 @@ dependencies = [ "serde", ] +[[package]] +name = "serdect" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e" +dependencies = [ + "base16ct", + "serde", +] + [[package]] name = "sha1" -version = "0.10.7" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" +checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" dependencies = [ "cfg-if", "cpufeatures", @@ -2602,9 +2666,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.9" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", "cpufeatures", @@ -2613,12 +2677,34 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.9" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1" +dependencies = [ + "digest", + "keccak", +] + +[[package]] +name = "sha3" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9bad02c26382724b2d2692c6f179285e4b54eeecd7968f52a50059c3c11759" +dependencies = [ + "digest", + "keccak", + "sponge-cursor", +] + +[[package]] +name = "shake" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874" +checksum = "09057cb2149ad4cbd2da1e26b351f9a4c354219421229c69c3063e6f61947c4a" dependencies = [ "digest", "keccak", + "sponge-cursor", ] [[package]] @@ -2635,12 +2721,12 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signature" -version = "2.2.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" dependencies = [ "digest", - "rand_core", + "rand_core 0.10.1", ] [[package]] @@ -2698,22 +2784,25 @@ dependencies = [ "anstream 0.6.21", ] -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - [[package]] name = "spki" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f" dependencies = [ "base64ct", "der", ] +[[package]] +name = "sponge-cursor" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a0219bd7d979d58245a4f41f695e1ac9f8befdffadd7f61f1bae9e39abc6620" +dependencies = [ + "zeroize", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -2740,9 +2829,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "symbolic-common" -version = "12.15.5" +version = "12.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a1150bdda9314f6cfeeea801c23f5593c6e6a6c72e64f67e48d723a12b8efdb" +checksum = "332615d90111d8eeaf86a84dc9bbe9f65d0d8c5cf11b4caccedc37754eb0dcfd" dependencies = [ "debugid", "memmap2", @@ -2752,9 +2841,9 @@ dependencies = [ [[package]] name = "symbolic-demangle" -version = "12.15.5" +version = "12.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f66537def48fbc704a92e4fdaab7833bc7cb2255faca8182592fb5fa617eb82" +checksum = "912017718eb4d21930546245af9a3475c9dccf15675a5c215664e76621afc471" dependencies = [ "cpp_demangle", "rustc-demangle", @@ -2799,10 +2888,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.4.3", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2898,30 +2987,33 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" dependencies = [ "deranged", + "js-sys", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", ] [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", + "serde_core", + "zerovec", ] [[package]] @@ -2973,15 +3065,6 @@ dependencies = [ "serde", ] -[[package]] -name = "toml_datetime" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a197c0ec7d131bfc6f7e82c8442ba1595aeab35da7adbf05b6b73cd06a16b6be" -dependencies = [ - "serde_core", -] - [[package]] name = "toml_edit" version = "0.22.27" @@ -2991,32 +3074,11 @@ dependencies = [ "indexmap", "serde", "serde_spanned", - "toml_datetime 0.6.11", + "toml_datetime", "toml_write", "winnow", ] -[[package]] -name = "toml_edit" -version = "0.23.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ad0b7ae9cfeef5605163839cb9221f453399f15cfb5c10be9885fcf56611f9" -dependencies = [ - "indexmap", - "toml_datetime 0.7.1", - "toml_parser", - "winnow", -] - -[[package]] -name = "toml_parser" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" -dependencies = [ - "winnow", -] - [[package]] name = "toml_write" version = "0.1.2" @@ -3038,7 +3100,18 @@ dependencies = [ "serde", "shlex 1.3.0", "snapbox", - "toml_edit 0.22.27", + "toml_edit", +] + +[[package]] +name = "turboshake" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f892c6904b0bd5a9241eac848347abcbbbd2b9f3892bad23ac3e6efab8d6f06a" +dependencies = [ + "digest", + "keccak", + "sponge-cursor", ] [[package]] @@ -3050,6 +3123,12 @@ dependencies = [ "rustc-hash", ] +[[package]] +name = "typed-path" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" + [[package]] name = "typenum" version = "1.20.1" @@ -3064,23 +3143,29 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unic-langid" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dd9d1e72a73b25e07123a80776aae3e7b0ec461ef94f9151eed6ec88005a44" +checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" dependencies = [ "unic-langid-impl", ] [[package]] name = "unic-langid-impl" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5422c1f65949306c99240b81de9f3f15929f5a8bfe05bb44b034cc8bf593e5" +checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" dependencies = [ "serde", "tinystr", ] +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + [[package]] name = "unicode-ident" version = "1.0.24" @@ -3089,12 +3174,12 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "universal-hash" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96" dependencies = [ "crypto-common", - "subtle", + "ctutils", ] [[package]] @@ -3105,9 +3190,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.20.0" +version = "1.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" +checksum = "ea5fab0d6c3c01ae70085a09cb03d4c7a1d6314e2b3e075392783396d724ca0a" dependencies = [ "js-sys", "wasm-bindgen", @@ -3139,25 +3224,19 @@ dependencies = [ ] [[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.117" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", @@ -3168,9 +3247,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.117" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3178,9 +3257,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.117" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", @@ -3191,18 +3270,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.117" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.94" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" dependencies = [ "js-sys", "wasm-bindgen", @@ -3239,7 +3318,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3473,12 +3552,20 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "wnaf" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab12e7090f27e2ffd9322651492942d50c2926094af30601e1964337db39daf1" dependencies = [ - "bitflags 2.13.0", + "ff", + "group", + "hybrid-array", ] [[package]] @@ -3487,15 +3574,27 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dab7ac864710bdea6594becbea5b5050333cf34fefb0dc319567eb347950d4" +[[package]] +name = "x-wing" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b51507b887016c3925c84591108dadb8c099f776eb04fec6a60ae3519fee856f" +dependencies = [ + "kem", + "ml-kem", + "sha3 0.12.0", + "shake", + "x25519-dalek", +] + [[package]] name = "x25519-dalek" -version = "2.0.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +checksum = "e7e8131a03190127fb2263afc72b322ecadae46b6ff8c6f399ff5d02f5559af6" dependencies = [ "curve25519-dalek", - "rand_core", - "serde", + "rand_core 0.10.1", "zeroize", ] @@ -3509,50 +3608,20 @@ dependencies = [ "rustix", ] -[[package]] -name = "zerocopy" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854e949ac82d619ee9a14c66a1b674ac730422372ccb759ce0c39cabcf2bf8e6" -dependencies = [ - "byteorder", - "zerocopy-derive 0.6.6", -] - -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "zerocopy-derive 0.7.35", -] - [[package]] name = "zerocopy" version = "0.8.54" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" dependencies = [ - "zerocopy-derive 0.8.54", + "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "125139de3f6b9d625c39e2efdd73d41bdac468ccd556556440e322be0e1bbd91" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" dependencies = [ "proc-macro2", "quote", @@ -3560,66 +3629,89 @@ dependencies = [ ] [[package]] -name = "zerocopy-derive" -version = "0.8.54" +name = "zerofrom" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" +checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", "syn", ] +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "serde", + "zerofrom", +] + [[package]] name = "zip" -version = "1.1.4" +version = "8.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cc23c04387f4da0374be4533ad1208cbb091d5c11d070dfef13676ad6497164" +checksum = "2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b" dependencies = [ "aes", - "arbitrary", "bzip2", "constant_time_eq", "crc32fast", - "crossbeam-utils", - "displaydoc", "flate2", + "getrandom 0.4.3", "hmac", "indexmap", - "num_enum", + "memchr", "pbkdf2", "sha1", - "thiserror 1.0.69", "time", + "typed-path", + "zeroize", + "zopfli", "zstd", ] +[[package]] +name = "zlib-rs" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b142a20ec14a91d5bc708c1dc21b080c550113d8aa77afa29635673a65dd02c5" + [[package]] name = "zmij" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd2f034a4bebf216c9e4b7083603e024cf930873fd67830cfb083c9fa33129d9" +[[package]] +name = "zopfli" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" +dependencies = [ + "bumpalo", + "crc32fast", + "log", + "simd-adler32", +] + [[package]] name = "zstd" version = "0.13.3" diff --git a/Cargo.toml b/Cargo.toml index b785023b..fba25adb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,8 +9,8 @@ resolver = "2" [workspace.package] authors = ["Jack Grigg "] -edition = "2021" -rust-version = "1.74" +edition = "2024" +rust-version = "1.85" repository = "https://github.com/str4d/rage" license = "MIT OR Apache-2.0" @@ -23,34 +23,39 @@ age-core = { version = "0.12.0", path = "age-core" } base64 = "0.22" # - ChaCha20-Poly1305 from RFC 7539 -chacha20poly1305 = { version = "0.10", default-features = false, features = ["alloc"] } +chacha20poly1305 = { version = "0.11", default-features = false, features = [ + "alloc", +] } # - SHA3-256 from FIPS 202 -sha3 = "0.10" +sha3 = "0.12" # - ML-KEM from FIPS 203 -ml-kem = { version = "0.2", features = ["deterministic"] } +ml-kem = "0.3" # - X25519 from RFC 7748 -x25519-dalek = { version = "2", features = ["static_secrets"] } +x25519-dalek = { version = "3", features = ["static_secrets"] } # - P-256 -p256 = { version = "0.13", default-features = false, features = ["arithmetic"] } +p256 = { version = "0.14", default-features = false, features = ["arithmetic"] } # - HKDF from RFC 5869 with SHA-256 # - HMAC from RFC 2104 with SHA-256 -hkdf = "0.12" -hmac = "0.12" -sha2 = "0.10" +hkdf = "0.13" +hmac = "0.13" +sha2 = "0.11" # - HPKE from RFC 9180 -hpke = { version = "0.12", default-features = false, features = ["alloc"] } +hpke = { version = "0.14", default-features = false, features = [ + "alloc", + "chacha", +] } # - scrypt from RFC 7914 -scrypt = { version = "0.11", default-features = false } +scrypt = { version = "0.12", default-features = false } # - CSPRNG -rand = "0.8" +rand = "0.10" # - Key encoding bech32 = "0.11" @@ -79,5 +84,4 @@ env_logger = "0.10" log = "0.4" [workspace.lints.rust] -# Requires MSRV 1.80 -#unexpected_cfgs = { level = "warn", check-cfg = ['cfg(fuzzing)'] } +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(fuzzing)'] } diff --git a/README.md b/README.md index cc8883cd..d970d478 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ For more plugins, implementations, tools, and integrations, check out the | Environment | CLI command | |-------------|-------------| -| Cargo (Rust 1.74+) | `cargo install rage` | +| Cargo (Rust 1.85+) | `cargo install rage` | | Homebrew (macOS or Linux) | `brew install rage` | | MacPorts | `port install rage` | | Alpine Linux (edge) | `apk add rage` | @@ -174,8 +174,8 @@ and `--features comma,separated,flags` to enable or disable the following feature flags: - `mount` enables the `rage-mount` tool, which can mount age-encrypted TAR or - ZIP archives as read-only. It is currently only usable on Unix systems, as it - relies on `libfuse`. + ZIP archives as read-only. It is currently only usable on Unix systems (as it + relies on `libfuse`), and has an MSRV of 1.88. - `ssh` (enabled by default) enables support for reusing existing SSH key files for age encryption. diff --git a/age-core/CHANGELOG.md b/age-core/CHANGELOG.md index d6a6617f..f53a6fe1 100644 --- a/age-core/CHANGELOG.md +++ b/age-core/CHANGELOG.md @@ -8,6 +8,10 @@ to 1.0.0 are beta releases. ## [Unreleased] +### Changed +- MSRV is now 1.85.0. +- Migrated to `chacha20poly1305 0.11`, `hpke 0.14`. + ## [0.12.0] - 2026-07-13 ### Added - `age_core::primitives`: diff --git a/age-core/Cargo.toml b/age-core/Cargo.toml index a1c7712d..46ac3085 100644 --- a/age-core/Cargo.toml +++ b/age-core/Cargo.toml @@ -36,7 +36,7 @@ sha2.workspace = true tempfile = { version = "3.2.0", optional = true } [dev-dependencies] -hpke = { workspace = true, features = ["p256"] } +hpke = { workspace = true, features = ["mlkem", "nistp"] } [features] plugin = ["tempfile"] diff --git a/age-core/src/format.rs b/age-core/src/format.rs index 2c51e170..ab5b8317 100644 --- a/age-core/src/format.rs +++ b/age-core/src/format.rs @@ -1,9 +1,9 @@ //! Core types and encoding operations used by the age file format. -use base64::{prelude::BASE64_STANDARD_NO_PAD, Engine}; +use base64::{Engine, prelude::BASE64_STANDARD_NO_PAD}; use rand::{ - distributions::{Distribution, Uniform}, - thread_rng, RngCore, + Rng, + distr::{Distribution, Uniform}, }; use secrecy::{ExposeSecret, ExposeSecretMut, SecretBox}; @@ -61,7 +61,7 @@ pub struct AgeStanza<'a> { body: Vec<&'a [u8]>, } -impl<'a> AgeStanza<'a> { +impl AgeStanza<'_> { /// Decodes and returns the body of this stanza. pub fn body(&self) -> Vec { // An AgeStanza will always contain at least one chunk. @@ -121,23 +121,24 @@ pub fn is_arbitrary_string>(s: &S) -> bool { /// about the stanza's fields. pub fn grease_the_joint() -> Stanza { // Generate arbitrary strings between 1 and 9 characters long. - fn gen_arbitrary_string(rng: &mut R) -> String { - let length = Uniform::from(1..9).sample(rng); - Uniform::from(33..=126) + fn gen_arbitrary_string(rng: &mut R) -> String { + let length = Uniform::try_from(1..9).expect("valid").sample(rng); + Uniform::try_from(33..=126) + .expect("valid") .sample_iter(rng) .map(char::from) .take(length) .collect() } - let mut rng = thread_rng(); + let mut rng = rand::rng(); // Add a suffix to the random tag so users know what is going on. let tag = format!("{}-grease", gen_arbitrary_string(&mut rng)); // Between this and the above generation bounds, the first line of the recipient // stanza will be between eight and 66 characters. - let args = (0..Uniform::from(0..5).sample(&mut rng)) + let args = (0..Uniform::try_from(0..5).expect("valid").sample(&mut rng)) .map(|_| gen_arbitrary_string(&mut rng)) .collect(); @@ -148,7 +149,7 @@ pub fn grease_the_joint() -> Stanza { // - Two lines, second short // - Two lines, both full // - Three lines, last short - let mut body = vec![0; Uniform::from(0..100).sample(&mut rng)]; + let mut body = vec![0; Uniform::try_from(0..100).expect("valid").sample(&mut rng)]; rng.fill_bytes(&mut body); Stanza { tag, args, body } @@ -157,13 +158,13 @@ pub fn grease_the_joint() -> Stanza { /// Decoding operations for age types. pub mod read { use nom::{ + IResult, Parser, branch::alt, - bytes::streaming::{tag, take_while1, take_while_m_n}, + bytes::streaming::{tag, take_while_m_n, take_while1}, character::streaming::newline, combinator::{map, map_opt, opt, verify}, multi::{many_till, separated_list1}, sequence::{pair, preceded, terminated}, - IResult, Parser, }; use super::{AgeStanza, STANZA_TAG}; @@ -355,19 +356,21 @@ pub mod read { /// Encoding operations for age types. pub mod write { - use base64::{prelude::BASE64_STANDARD_NO_PAD, Engine}; + use base64::{Engine, prelude::BASE64_STANDARD_NO_PAD}; use cookie_factory::{ + SerializeFn, WriteContext, combinator::string, multi::separated_list, sequence::{pair, tuple}, - SerializeFn, WriteContext, }; use std::io::Write; use std::iter; use super::STANZA_TAG; - fn wrapped_encoded_data<'a, W: 'a + Write>(data: &[u8]) -> impl SerializeFn + 'a { + fn wrapped_encoded_data<'a, W: 'a + Write>( + data: &[u8], + ) -> impl SerializeFn + 'a + use<'a, W> { let encoded = BASE64_STANDARD_NO_PAD.encode(data); move |mut w: WriteContext| { @@ -409,7 +412,7 @@ pub mod write { #[cfg(test)] mod tests { - use base64::{prelude::BASE64_STANDARD_NO_PAD, Engine}; + use base64::{Engine, prelude::BASE64_STANDARD_NO_PAD}; use nom::error::ErrorKind; use super::{read, write}; @@ -523,7 +526,7 @@ xD7o4VEOu1t7KZQ1gDgq2FPzBEeSRqbnqvQEXdLRYy143BxR6oFxsUUJCRB0ErXA // should reject this artifact. match read::age_stanza(artifact.as_bytes()) { Err(nom::Err::Error(e)) => assert_eq!(e.code, ErrorKind::TakeWhileMN), - Err(e) => panic!("Unexpected error: {}", e), + Err(e) => panic!("Unexpected error: {e}"), Ok((rest, stanza)) => { assert_eq!(rest, b"\n"); // This is where the fuzzer triggered a panic. @@ -560,7 +563,7 @@ dy // should reject this artifact. match read::age_stanza(artifact.as_bytes()) { Err(nom::Err::Error(e)) => assert_eq!(e.code, ErrorKind::TakeWhileMN), - Err(e) => panic!("Unexpected error: {}", e), + Err(e) => panic!("Unexpected error: {e}"), Ok((rest, stanza)) => { assert_eq!(rest, b"\n"); // This is where the fuzzer triggered a panic. @@ -596,7 +599,7 @@ ddd // should reject this artifact. match read::age_stanza(artifact.as_bytes()) { Err(nom::Err::Error(e)) => assert_eq!(e.code, ErrorKind::TakeWhileMN), - Err(e) => panic!("Unexpected error: {}", e), + Err(e) => panic!("Unexpected error: {e}"), Ok((rest, stanza)) => { assert_eq!(rest, b"\n"); // This is where the fuzzer triggered a panic. diff --git a/age-core/src/plugin.rs b/age-core/src/plugin.rs index aa3e40c3..886cc4e9 100644 --- a/age-core/src/plugin.rs +++ b/age-core/src/plugin.rs @@ -3,7 +3,7 @@ //! These are shared between the client implementation in the `age` crate, and the plugin //! implementations built around the `age-plugin` crate. -use rand::{thread_rng, Rng}; +use rand::RngExt; use secrecy::zeroize::Zeroize; use std::env; use std::fmt; @@ -13,7 +13,7 @@ use std::path::Path; use std::process::{ChildStdin, ChildStdout, Command, Stdio}; use crate::{ - format::{grease_the_joint, read, write, Stanza}, + format::{Stanza, grease_the_joint, read, write}, io::{DebugReader, DebugWriter}, }; @@ -76,7 +76,7 @@ impl Connection, DebugWriter> { let working_dir = tempfile::tempdir()?; let debug_enabled = env::var("AGEDEBUG").map(|s| s == "plugin").unwrap_or(false); let process = Command::new(binary.canonicalize()?) - .arg(format!("--age-plugin={}", state_machine)) + .arg(format!("--age-plugin={state_machine}")) .current_dir(working_dir.path()) .stdin(Stdio::piped()) .stdout(Stdio::piped()) @@ -124,7 +124,7 @@ impl Connection { cookie_factory::gen_simple(write::age_stanza(command, metadata, data), &mut self.output) .map_err(|e| match e { GenError::IoError(e) => e, - e => io::Error::new(io::ErrorKind::Other, format!("{}", e)), + e => io::Error::other(format!("{e}")), }) .and_then(|w| w.flush()) } @@ -174,11 +174,11 @@ impl Connection { Ok(stanza) } - fn grease_gun(&mut self) -> impl Iterator { + fn grease_gun(&mut self) -> impl Iterator + use { // Add 5% grease - let mut rng = thread_rng(); + let mut rng = rand::rng(); (0..2).filter_map(move |_| { - if rng.gen_range(0..100) < 5 { + if rng.random_range(0..100) < 5 { Some(grease_the_joint()) } else { None @@ -313,7 +313,7 @@ impl Connection { /// Grease is applied automatically. pub struct UnidirSend<'a, R: Read, W: Write>(&'a mut Connection); -impl<'a, R: Read, W: Write> UnidirSend<'a, R, W> { +impl UnidirSend<'_, R, W> { /// Send a command. pub fn send(&mut self, command: &str, metadata: &[&str], data: &[u8]) -> io::Result<()> { for grease in self.0.grease_gun() { @@ -341,7 +341,7 @@ impl<'a, R: Read, W: Write> UnidirSend<'a, R, W> { /// Grease is applied automatically. pub struct BidirSend<'a, R: Read, W: Write>(&'a mut Connection); -impl<'a, R: Read, W: Write> BidirSend<'a, R, W> { +impl BidirSend<'_, R, W> { /// Send a command and receive a response. pub fn send(&mut self, command: &str, metadata: &[&str], data: &[u8]) -> Result { for grease in self.0.grease_gun() { @@ -356,7 +356,7 @@ impl<'a, R: Read, W: Write> BidirSend<'a, R, W> { RESPONSE_UNSUPPORTED => Ok(Err(Error::Unsupported)), tag => Err(io::Error::new( io::ErrorKind::InvalidData, - format!("unexpected response: {}", tag), + format!("unexpected response: {tag}"), )), } } @@ -380,7 +380,7 @@ impl<'a, R: Read, W: Write> BidirSend<'a, R, W> { RESPONSE_UNSUPPORTED => Ok(Err(Error::Unsupported)), tag => Err(io::Error::new( io::ErrorKind::InvalidData, - format!("unexpected response: {}", tag), + format!("unexpected response: {tag}"), )), } } @@ -389,7 +389,7 @@ impl<'a, R: Read, W: Write> BidirSend<'a, R, W> { /// The possible replies to a bidirectional command. pub struct Reply<'a, R: Read, W: Write>(&'a mut Connection); -impl<'a, R: Read, W: Write> Reply<'a, R, W> { +impl Reply<'_, R, W> { /// Reply with `ok` and optional data. pub fn ok(self, data: Option<&[u8]>) -> Response { Response( diff --git a/age-core/src/primitives.rs b/age-core/src/primitives.rs index 78165f60..ebf257e3 100644 --- a/age-core/src/primitives.rs +++ b/age-core/src/primitives.rs @@ -4,8 +4,8 @@ use core::fmt; use bech32::primitives::decode::CheckedHrpstring; use chacha20poly1305::{ - aead::{self, generic_array::typenum::Unsigned, Aead, AeadCore, KeyInit}, ChaCha20Poly1305, + aead::{self, Aead, AeadCore, KeyInit, common::typenum::Unsigned}, }; use hkdf::Hkdf; use sha2::Sha256; @@ -135,13 +135,13 @@ where /// that you choose a KEM with equivalent properties. /// /// [RFC 9180]: https://tools.ietf.org/html/rfc9180 -pub fn hpke_seal( +pub fn hpke_seal( pk_recip: &Kem::PublicKey, info: &[u8], plaintext: &[u8], rng: &mut R, ) -> (Kem::EncappedKey, Vec) { - hpke::single_shot_seal::( + hpke::single_shot_seal_with_rng::( &hpke::OpModeS::Base, pk_recip, info, @@ -179,7 +179,7 @@ pub fn hpke_open( #[cfg(test)] mod tests { use hpke::Kem; - use rand::rngs::OsRng; + use rand::{rand_core::UnwrapErr, rngs::SysRng}; use super::{aead_decrypt, aead_encrypt, bech32_decode, bech32_encode, hpke_open, hpke_seal}; @@ -210,9 +210,9 @@ mod tests { #[test] fn hpke_round_trip() { type Kem = hpke::kem::DhP256HkdfSha256; - let mut rng = OsRng; + let mut rng = UnwrapErr(SysRng); - let (sk_recip, pk_recip) = Kem::gen_keypair(&mut rng); + let (sk_recip, pk_recip) = Kem::gen_keypair_with_rng(&mut rng); let info = b"foobar"; let plaintext = b"12345678"; diff --git a/age-plugin/CHANGELOG.md b/age-plugin/CHANGELOG.md index 83e5cfbf..621b7ef6 100644 --- a/age-plugin/CHANGELOG.md +++ b/age-plugin/CHANGELOG.md @@ -10,6 +10,9 @@ to 1.0.0 are beta releases. ## [Unreleased] +### Changed +- MSRV is now 1.85.0. + ## [0.7.0] - 2026-07-13 ### Changed - MSRV is now 1.74.0. diff --git a/age-plugin/examples/age-plugin-unencrypted.rs b/age-plugin/examples/age-plugin-unencrypted.rs index 4152a827..01293c3d 100644 --- a/age-plugin/examples/age-plugin-unencrypted.rs +++ b/age-plugin/examples/age-plugin-unencrypted.rs @@ -3,10 +3,11 @@ use age_core::{ secrecy::ExposeSecret, }; use age_plugin::{ + Callbacks, PluginHandler, identity::{self, IdentityPluginV1}, print_new_identity, recipient::{self, RecipientPluginV1}, - run_state_machine, Callbacks, PluginHandler, + run_state_machine, }; use clap::Parser; @@ -21,7 +22,7 @@ const RECIPIENT_TAG: &str = PLUGIN_NAME; fn explode(location: &str) { if let Ok(s) = env::var("AGE_EXPLODES") { if s == location { - panic!("Env variable AGE_EXPLODES={} is set. Boom! 💥", location); + panic!("Env variable AGE_EXPLODES={location} is set. Boom! 💥"); } } } diff --git a/age-plugin/src/identity.rs b/age-plugin/src/identity.rs index 1a431fbd..7ed65d8b 100644 --- a/age-plugin/src/identity.rs +++ b/age-plugin/src/identity.rs @@ -6,7 +6,7 @@ use age_core::{ primitives::bech32_decode, secrecy::{ExposeSecret, SecretString}, }; -use base64::{prelude::BASE64_STANDARD_NO_PAD, Engine}; +use base64::{Engine, prelude::BASE64_STANDARD_NO_PAD}; use std::collections::HashMap; use std::convert::Infallible; @@ -74,7 +74,7 @@ impl IdentityPluginV1 for Infallible { /// The interface that age plugins can use to interact with an age implementation. struct BidirCallbacks<'a, 'b, R: io::Read, W: io::Write>(&'b mut BidirSend<'a, R, W>); -impl<'a, 'b, R: io::Read, W: io::Write> Callbacks for BidirCallbacks<'a, 'b, R, W> { +impl Callbacks for BidirCallbacks<'_, '_, R, W> { /// Shows a message to the user. /// /// This can be used to prompt the user to take some physical action, such as @@ -227,8 +227,7 @@ pub(crate) fn run_v1(mut plugin: P) -> io::Result<()> { ([identity], []) => Ok(identity.clone()), _ => Err(Error::Internal { message: format!( - "{} command must have exactly one metadata argument and no data", - ADD_IDENTITY + "{ADD_IDENTITY} command must have exactly one metadata argument and no data" ), }), }), @@ -241,15 +240,13 @@ pub(crate) fn run_v1(mut plugin: P) -> io::Result<()> { .map(|i| (i, s)) .map_err(|_| Error::Internal { message: format!( - "first metadata argument to {} must be an integer", - RECIPIENT_STANZA + "first metadata argument to {RECIPIENT_STANZA} must be an integer" ), }) } else { Err(Error::Internal { message: format!( - "{} command must have at least two metadata arguments", - RECIPIENT_STANZA + "{RECIPIENT_STANZA} command must have at least two metadata arguments" ), }) } @@ -313,8 +310,7 @@ pub(crate) fn run_v1(mut plugin: P) -> io::Result<()> { } else { errors.push(Error::Internal { message: format!( - "{} file indices are not ordered and monotonically increasing", - RECIPIENT_STANZA + "{RECIPIENT_STANZA} file indices are not ordered and monotonically increasing" ), }); } @@ -355,7 +351,7 @@ pub(crate) fn run_v1(mut plugin: P) -> io::Result<()> { phase .send( "file-key", - &[&format!("{}", file_index)], + &[&format!("{file_index}")], file_key.expose_secret(), )? .unwrap(); diff --git a/age-plugin/src/lib.rs b/age-plugin/src/lib.rs index 9178e9ac..7773eb16 100644 --- a/age-plugin/src/lib.rs +++ b/age-plugin/src/lib.rs @@ -180,7 +180,7 @@ use age_core::{ primitives::bech32_encode, - secrecy::{zeroize::Zeroize, SecretString}, + secrecy::{SecretString, zeroize::Zeroize}, }; use bech32::Hrp; use std::io; @@ -197,7 +197,7 @@ const PLUGIN_IDENTITY_PREFIX: &str = "AGE-PLUGIN-"; /// A "created" time is included in the output, set to the current local time. pub fn print_new_identity(plugin_name: &str, identity: &[u8], recipient: &[u8]) { let mut identity_lower = bech32_encode( - Hrp::parse_unchecked(&format!("{}{}-", PLUGIN_IDENTITY_PREFIX, plugin_name)), + Hrp::parse_unchecked(&format!("{PLUGIN_IDENTITY_PREFIX}{plugin_name}-")), identity, ); @@ -208,7 +208,7 @@ pub fn print_new_identity(plugin_name: &str, identity: &[u8], recipient: &[u8]) println!( "# recipient: {}", bech32_encode( - Hrp::parse_unchecked(&format!("{}{}", PLUGIN_RECIPIENT_PREFIX, plugin_name)), + Hrp::parse_unchecked(&format!("{PLUGIN_RECIPIENT_PREFIX}{plugin_name}")), recipient, ) ); diff --git a/age-plugin/src/recipient.rs b/age-plugin/src/recipient.rs index 57c2489d..373c80d3 100644 --- a/age-plugin/src/recipient.rs +++ b/age-plugin/src/recipient.rs @@ -1,12 +1,12 @@ //! Recipient plugin helpers. use age_core::{ - format::{is_arbitrary_string, FileKey, Stanza}, + format::{FileKey, Stanza, is_arbitrary_string}, plugin::{self, BidirSend, Connection}, primitives::bech32_decode, secrecy::SecretString, }; -use base64::{prelude::BASE64_STANDARD_NO_PAD, Engine}; +use base64::{Engine, prelude::BASE64_STANDARD_NO_PAD}; use std::collections::HashSet; use std::convert::Infallible; @@ -39,7 +39,7 @@ pub trait RecipientPluginV1 { /// /// Returns an error if the recipient is unknown or invalid. fn add_recipient(&mut self, index: usize, plugin_name: &str, bytes: &[u8]) - -> Result<(), Error>; + -> Result<(), Error>; /// Stores an identity that the user would like to encrypt age files to. /// @@ -126,7 +126,7 @@ impl RecipientPluginV1 for Infallible { /// The interface that age plugins can use to interact with an age implementation. struct BidirCallbacks<'a, 'b, R: io::Read, W: io::Write>(&'b mut BidirSend<'a, R, W>); -impl<'a, 'b, R: io::Read, W: io::Write> Callbacks for BidirCallbacks<'a, 'b, R, W> { +impl Callbacks for BidirCallbacks<'_, '_, R, W> { /// Shows a message to the user. /// /// This can be used to prompt the user to take some physical action, such as @@ -269,8 +269,7 @@ pub(crate) fn run_v1(mut plugin: P) -> io::Result<()> { ([recipient], []) => Ok(recipient.clone()), _ => Err(Error::Internal { message: format!( - "{} command must have exactly one metadata argument and no data", - ADD_RECIPIENT + "{ADD_RECIPIENT} command must have exactly one metadata argument and no data" ), }), }), @@ -278,8 +277,7 @@ pub(crate) fn run_v1(mut plugin: P) -> io::Result<()> { ([identity], []) => Ok(identity.clone()), _ => Err(Error::Internal { message: format!( - "{} command must have exactly one metadata argument and no data", - ADD_IDENTITY + "{ADD_IDENTITY} command must have exactly one metadata argument and no data" ), }), }), @@ -303,8 +301,7 @@ pub(crate) fn run_v1(mut plugin: P) -> io::Result<()> { (Ok(r), Ok(i)) if r.is_empty() && i.is_empty() => ( Err(vec![Error::Internal { message: format!( - "Need at least one {} or {} command", - ADD_RECIPIENT, ADD_IDENTITY + "Need at least one {ADD_RECIPIENT} or {ADD_IDENTITY} command" ), }]), Err(vec![]), @@ -313,7 +310,7 @@ pub(crate) fn run_v1(mut plugin: P) -> io::Result<()> { }, match file_keys.unwrap() { Ok(f) if f.is_empty() => Err(vec![Error::Internal { - message: format!("Need at least one {} command", WRAP_FILE_KEY), + message: format!("Need at least one {WRAP_FILE_KEY} command"), }]), r => r, }, @@ -321,7 +318,7 @@ pub(crate) fn run_v1(mut plugin: P) -> io::Result<()> { Ok(v) if v.is_empty() => Ok(false), Ok(v) if v.len() == 1 => Ok(true), _ => Err(vec![Error::Internal { - message: format!("Received more than one {} command", EXTENSION_LABELS), + message: format!("Received more than one {EXTENSION_LABELS} command"), }]), }, ) diff --git a/age/CHANGELOG.md b/age/CHANGELOG.md index 07faef39..d5818e4e 100644 --- a/age/CHANGELOG.md +++ b/age/CHANGELOG.md @@ -10,6 +10,11 @@ to 1.0.0 are beta releases. ## [Unreleased] +### Changed +- MSRV is now 1.85.0. +- Migrated to `chacha20poly1305 0.11`, `curve25519-dalek 5`, `hmac 0.13`, + `rand 0.10`, `rsa =0.10.0-rc.18`. + ## [0.12.0] - 2026-07-13 ### Added - Support for new native age recipient types: diff --git a/age/Cargo.toml b/age/Cargo.toml index c2e97f09..a2480d3a 100644 --- a/age/Cargo.toml +++ b/age/Cargo.toml @@ -27,10 +27,12 @@ rand.workspace = true # OpenSSH-specific dependencies: # - RSAES-OAEP from RFC 8017 with SHA-256 and MGF1 -rsa = { version = "0.9", default-features = false, optional = true } +rsa = { version = "=0.10.0-rc.18", default-features = false, features = [ + "encoding", +], optional = true } # - Conversion of public keys from Ed25519 to X25519 -curve25519-dalek = { version = "4", optional = true } +curve25519-dalek = { version = "5", optional = true } # Async I/O futures = { version = "0.3", optional = true } @@ -42,10 +44,10 @@ pinentry = { workspace = true, optional = true } # Dependencies used internally: # (Breaking upgrades to these are usually backwards-compatible, but check MSRVs.) bech32.workspace = true -cipher = { version = "0.4.3", features = ["alloc"] } +cipher = { version = "0.5", features = ["alloc"] } cookie-factory.workspace = true hkdf.workspace = true -hpke = { workspace = true, features = ["p256"] } +hpke = { workspace = true, features = ["mlkem", "nistp"] } i18n-embed-fl.workspace = true lazy_static.workspace = true ml-kem.workspace = true @@ -64,14 +66,17 @@ zeroize.workspace = true num-traits = { version = "0.2", optional = true } # - Encrypted keys -aes = { version = "0.8", optional = true } -aes-gcm = { version = "0.10", optional = true } -bcrypt-pbkdf = { version = "0.10", optional = true } -cbc = { version = "0.1", optional = true } -ctr = { version = "0.9", optional = true } +aes = { version = "0.9", optional = true } +aes-gcm = { version = "0.11", optional = true } +bcrypt-pbkdf = { version = "0.11", optional = true } +cbc = { version = "0.2", optional = true } +ctr = { version = "0.10", optional = true } # scrypt Performance timer -web-sys = { version = "0.3", optional = true, features = ["Window", "Performance"]} +web-sys = { version = "0.3", optional = true, features = [ + "Window", + "Performance", +] } # Async I/O memchr = { version = "2.5", optional = true } diff --git a/age/benches/parser.rs b/age/benches/parser.rs index cea37c4e..75fadf79 100644 --- a/age/benches/parser.rs +++ b/age/benches/parser.rs @@ -1,5 +1,5 @@ -use age::{x25519, Decryptor, Encryptor}; -use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput}; +use age::{Decryptor, Encryptor, x25519}; +use criterion::{BenchmarkId, Criterion, Throughput, criterion_group, criterion_main}; #[cfg(unix)] use pprof::criterion::{Output, PProfProfiler}; diff --git a/age/benches/throughput.rs b/age/benches/throughput.rs index 8c5c349d..f7ac51ab 100644 --- a/age/benches/throughput.rs +++ b/age/benches/throughput.rs @@ -1,5 +1,5 @@ -use age::{x25519, Decryptor, Encryptor}; -use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput}; +use age::{Decryptor, Encryptor, x25519}; +use criterion::{BenchmarkId, Criterion, Throughput, criterion_group, criterion_main}; #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] use criterion_cycles_per_byte::CyclesPerByte; diff --git a/age/src/cli_common.rs b/age/src/cli_common.rs index c508544c..c0a1e585 100644 --- a/age/src/cli_common.rs +++ b/age/src/cli_common.rs @@ -3,16 +3,17 @@ use age_core::secrecy::{ExposeSecret, SecretString}; use pinentry::{ConfirmationDialog, PassphraseInput}; use rand::{ - distributions::{Distribution, Uniform}, - rngs::OsRng, - CryptoRng, RngCore, + CryptoRng, + distr::{Distribution, Uniform}, + rand_core::UnwrapErr, + rngs::SysRng, }; use rpassword::prompt_password; use std::io; use subtle::ConstantTimeEq; -use crate::{fl, Callbacks}; +use crate::{Callbacks, fl}; mod error; pub use error::ReadError; @@ -66,7 +67,7 @@ fn confirm(query: &str, ok: &str, cancel: Option<&str>) -> pinentry::Result) -> Option { @@ -183,8 +184,8 @@ pub enum Passphrase { impl Passphrase { /// Generates a secure passphrase. - pub fn random(mut rng: R) -> Self { - let between = Uniform::from(0..2048); + pub fn random(mut rng: R) -> Self { + let between = Uniform::try_from(0..2048).expect("valid"); let new_passphrase = (0..10) .map(|_| { BIP39_WORDLIST @@ -212,7 +213,7 @@ pub fn read_or_generate_passphrase() -> pinentry::Result { )?; if res.expose_secret().is_empty() { - Ok(Passphrase::random(OsRng)) + Ok(Passphrase::random(UnwrapErr(SysRng))) } else { Ok(Passphrase::Typed(res)) } diff --git a/age/src/cli_common/error.rs b/age/src/cli_common/error.rs index b7d4a07a..13b7cb0a 100644 --- a/age/src/cli_common/error.rs +++ b/age/src/cli_common/error.rs @@ -1,7 +1,7 @@ use std::fmt; use std::io; -use crate::{wfl, DecryptError}; +use crate::{DecryptError, wfl}; /// Errors that can occur while reading recipients or identities. #[derive(Debug)] @@ -83,7 +83,7 @@ impl fmt::Display for ReadError { filename = filename.as_str(), line_number = line_number, ), - ReadError::Io(e) => write!(f, "{}", e), + ReadError::Io(e) => write!(f, "{e}"), ReadError::MissingRecipientsFile(filename) => wfl!( f, "err-read-missing-recipients-file", @@ -91,7 +91,7 @@ impl fmt::Display for ReadError { ), ReadError::MultipleStdin => wfl!(f, "err-read-multiple-stdin"), #[cfg(feature = "plugin")] - ReadError::PluginResolve(e) => write!(f, "{}", e), + ReadError::PluginResolve(e) => write!(f, "{e}"), #[cfg(feature = "ssh")] ReadError::RsaModulusTooLarge => { wfl!(f, "err-read-rsa-modulus-too-large", max_size = 4096) diff --git a/age/src/cli_common/file_io.rs b/age/src/cli_common/file_io.rs index 7275df83..fb0dc667 100644 --- a/age/src/cli_common/file_io.rs +++ b/age/src/cli_common/file_io.rs @@ -308,7 +308,7 @@ impl LazyFile { .as_mut() .unwrap() .as_mut() - .map_err(|e| io::Error::new(e.kind(), format!("Failed to open file '{}'", filename))) + .map_err(|e| io::Error::new(e.kind(), format!("Failed to open file '{filename}'"))) } } @@ -395,10 +395,7 @@ impl OutputWriter { } else if is_tty { if let OutputFormat::Binary = format { // If output == Some("-") then this error is skipped. - return Err(io::Error::new( - io::ErrorKind::Other, - FileError::DenyBinaryOutput, - )); + return Err(io::Error::other(FileError::DenyBinaryOutput)); } } diff --git a/age/src/cli_common/identities.rs b/age/src/cli_common/identities.rs index 70a2acff..f22113a2 100644 --- a/age/src/cli_common/identities.rs +++ b/age/src/cli_common/identities.rs @@ -1,7 +1,7 @@ use std::io::{self, BufReader}; use super::{ReadError, StdinGuard, UiCallbacks}; -use crate::{identity::IdentityFile, Identity}; +use crate::{Identity, identity::IdentityFile}; #[cfg(feature = "armor")] use crate::{armor::ArmoredReader, cli_common::file_io::InputReader}; @@ -134,7 +134,7 @@ pub(super) fn parse_identity_files + From>( Some(filename.clone()), ) { Ok(crate::ssh::Identity::Unsupported(k)) => { - return Err(ReadError::UnsupportedKey(filename, k).into()) + return Err(ReadError::UnsupportedKey(filename, k).into()); } Ok(identity) => { ssh_identity(ctx, &filename, identity)?; diff --git a/age/src/cli_common/recipients.rs b/age/src/cli_common/recipients.rs index e23af876..bd39ea00 100644 --- a/age/src/cli_common/recipients.rs +++ b/age/src/cli_common/recipients.rs @@ -1,8 +1,8 @@ use std::io::{self, BufReader}; use super::StdinGuard; -use super::{identities::parse_identity_files, ReadError}; -use crate::{identity::RecipientsAccumulator, tag, tagpq, util::LimitedReader, x25519, Recipient}; +use super::{ReadError, identities::parse_identity_files}; +use crate::{Recipient, identity::RecipientsAccumulator, tag, tagpq, util::LimitedReader, x25519}; #[cfg(feature = "plugin")] use crate::{cli_common::UiCallbacks, plugin}; @@ -62,30 +62,38 @@ fn parse_recipient( recipients.push(Box::new(pk)); } else if let Ok(pk) = s.parse::() { recipients.push(Box::new(pk)); - } else if let Some(pk) = { - #[cfg(feature = "ssh")] - { - parse_ssh_recipient(|| s.parse::(), || Ok(None), _filename)? - } + } else { + #[cfg_attr(feature = "ssh", allow(clippy::blocks_in_conditions))] + match { + #[cfg(feature = "ssh")] + { + parse_ssh_recipient(|| s.parse::(), || Ok(None), _filename)? + } - #[cfg(not(feature = "ssh"))] - None - } { - recipients.push(pk); - } else if let Some(_recipient) = { - #[cfg(feature = "plugin")] - { - // TODO Do something with the error? - s.parse::().ok() + #[cfg(not(feature = "ssh"))] + None + } { + Some(pk) => { + recipients.push(pk); + } + _ => { + if let Some(_recipient) = { + #[cfg(feature = "plugin")] + { + // TODO Do something with the error? + s.parse::().ok() + } + + #[cfg(not(feature = "plugin"))] + None:: + } { + #[cfg(feature = "plugin")] + recipients.push_plugin(_recipient); + } else { + return Err(ReadError::InvalidRecipient(s)); + } + } } - - #[cfg(not(feature = "plugin"))] - None:: - } { - #[cfg(feature = "plugin")] - recipients.push_plugin(_recipient); - } else { - return Err(ReadError::InvalidRecipient(s)); } Ok(()) @@ -166,10 +174,11 @@ pub fn read_recipients( |recipients, identity| { recipients.extend(identity.recipients().map_err(|e| { // Only one error can occur here. - if let EncryptError::EncryptedIdentities(e) = e { - ReadError::EncryptedIdentities(e) - } else { - unreachable!() + match e { + EncryptError::EncryptedIdentities(e) => ReadError::EncryptedIdentities(e), + _ => { + unreachable!() + } } })?); Ok(()) @@ -200,10 +209,11 @@ pub fn read_recipients( // Only one error can occur here. #[cfg(feature = "plugin")] { - if let EncryptError::PluginResolve(e) = _e { - ReadError::PluginResolve(e) - } else { - unreachable!() + match _e { + EncryptError::PluginResolve(e) => ReadError::PluginResolve(e), + _ => { + unreachable!() + } } } diff --git a/age/src/encrypted.rs b/age/src/encrypted.rs index cb40a2bd..adaa22e5 100644 --- a/age/src/encrypted.rs +++ b/age/src/encrypted.rs @@ -2,7 +2,7 @@ use std::{cell::Cell, io}; -use crate::{fl, scrypt, Callbacks, DecryptError, Decryptor, EncryptError, IdentityFile}; +use crate::{Callbacks, DecryptError, Decryptor, EncryptError, IdentityFile, fl, scrypt}; /// An encrypted age identity file. /// @@ -229,7 +229,7 @@ mod tests { use age_core::secrecy::{ExposeSecret, SecretString}; use super::Identity; - use crate::{x25519, Callbacks, DecryptError, Identity as _, Recipient as _}; + use crate::{Callbacks, DecryptError, Identity as _, Recipient as _, x25519}; #[cfg(feature = "armor")] use crate::armor::ArmoredReader; @@ -306,10 +306,13 @@ fOrxrKTj7xCdNS3+OrCdnBC8Z9cKDxjCGWW3fkjLsYha0Jo= .unwrap() .unwrap(); - if let Err(e) = identity.unwrap_stanzas(&wrapped).unwrap() { - assert!(matches!(e, DecryptError::KeyDecryptionFailed)); - } else { - panic!("Should have failed"); + match identity.unwrap_stanzas(&wrapped).unwrap() { + Err(e) => { + assert!(matches!(e, DecryptError::KeyDecryptionFailed)); + } + _ => { + panic!("Should have failed"); + } } } @@ -320,10 +323,13 @@ fOrxrKTj7xCdNS3+OrCdnBC8Z9cKDxjCGWW3fkjLsYha0Jo= .unwrap() .unwrap(); - if let Err(e) = identity.unwrap_stanzas(&wrapped).unwrap() { - assert!(matches!(e, DecryptError::KeyDecryptionFailed)); - } else { - panic!("Should have failed"); + match identity.unwrap_stanzas(&wrapped).unwrap() { + Err(e) => { + assert!(matches!(e, DecryptError::KeyDecryptionFailed)); + } + _ => { + panic!("Should have failed"); + } } } diff --git a/age/src/error.rs b/age/src/error.rs index e1c28abf..93894748 100644 --- a/age/src/error.rs +++ b/age/src/error.rs @@ -157,13 +157,13 @@ impl fmt::Display for PluginError { metadata, message, } => { - write!(f, "({}", kind)?; + write!(f, "({kind}")?; for d in metadata { - write!(f, " {}", d)?; + write!(f, " {d}")?; } write!(f, ")")?; if !message.is_empty() { - write!(f, " {}", message)?; + write!(f, " {message}")?; } Ok(()) } @@ -286,11 +286,11 @@ impl fmt::Display for EncryptError { #[cfg(feature = "plugin")] EncryptError::Plugin(errors) => match &errors[..] { [] => unreachable!(), - [e] => write!(f, "{}", e), + [e] => write!(f, "{e}"), _ => { wlnfl!(f, "err-plugin-multiple")?; for e in errors { - writeln!(f, "- {}", e)?; + writeln!(f, "- {e}")?; } Ok(()) } @@ -388,11 +388,11 @@ impl fmt::Display for DecryptError { #[cfg(feature = "plugin")] DecryptError::Plugin(errors) => match &errors[..] { [] => unreachable!(), - [e] => write!(f, "{}", e), + [e] => write!(f, "{e}"), _ => { wlnfl!(f, "err-plugin-multiple")?; for e in errors { - writeln!(f, "- {}", e)?; + writeln!(f, "- {e}")?; } Ok(()) } diff --git a/age/src/format.rs b/age/src/format.rs index a28dbe42..b1752d91 100644 --- a/age/src/format.rs +++ b/age/src/format.rs @@ -2,12 +2,13 @@ use std::io::{self, BufRead, Read, Write}; -use age_core::format::{grease_the_joint, Stanza}; +use age_core::format::{Stanza, grease_the_joint}; use crate::{ + EncryptError, error::DecryptError, primitives::{HmacKey, HmacWriter}, - scrypt, EncryptError, + scrypt, }; #[cfg(feature = "async")] @@ -51,7 +52,7 @@ impl HeaderV1 { } let mut mac = HmacWriter::new(mac_key); - cookie_factory::gen(write::header_v1_minus_mac(&header), &mut mac) + cookie_factory::r#gen(write::header_v1_minus_mac(&header), &mut mac) .expect("can serialize Header into HmacWriter"); header .mac @@ -67,7 +68,7 @@ impl HeaderV1 { mac.write_all(&bytes[..bytes.len() - ENCODED_MAC_LENGTH - 2]) .expect("can serialize Header into HmacWriter"); } else { - cookie_factory::gen(write::header_v1_minus_mac(self), &mut mac) + cookie_factory::r#gen(write::header_v1_minus_mac(self), &mut mac) .expect("can serialize Header into HmacWriter"); } mac.verify(&self.mac) @@ -219,28 +220,18 @@ impl Header { } pub(crate) fn write(&self, mut output: W) -> io::Result<()> { - cookie_factory::gen(write::header(self), &mut output) + cookie_factory::r#gen(write::header(self), &mut output) .map(|_| ()) - .map_err(|e| { - io::Error::new( - io::ErrorKind::Other, - format!("failed to write header: {}", e), - ) - }) + .map_err(|e| io::Error::other(format!("failed to write header: {e}"))) } #[cfg(feature = "async")] #[cfg_attr(docsrs, doc(cfg(feature = "async")))] pub(crate) async fn write_async(&self, mut output: W) -> io::Result<()> { let mut buf = vec![]; - cookie_factory::gen(write::header(self), &mut buf) + cookie_factory::r#gen(write::header(self), &mut buf) .map(|_| ()) - .map_err(|e| { - io::Error::new( - io::ErrorKind::Other, - format!("failed to write header: {}", e), - ) - })?; + .map_err(|e| io::Error::other(format!("failed to write header: {e}")))?; output.write_all(&buf).await } @@ -255,13 +246,13 @@ pub(crate) enum Header { mod read { use age_core::format::read::{arbitrary_string, legacy_age_stanza}; use nom::{ + IResult, Parser, branch::alt, bytes::streaming::{tag, take}, character::streaming::newline, combinator::{map, map_opt}, multi::many1, sequence::{pair, preceded, terminated}, - IResult, Parser, }; use super::*; @@ -316,10 +307,10 @@ mod read { mod write { use age_core::format::write::age_stanza; use cookie_factory::{ + SerializeFn, WriteContext, combinator::{slice, string}, multi::all, sequence::tuple, - SerializeFn, WriteContext, }; use std::io::Write; diff --git a/age/src/i18n.rs b/age/src/i18n.rs index fb1c9f1a..02e3c179 100644 --- a/age/src/i18n.rs +++ b/age/src/i18n.rs @@ -1,7 +1,7 @@ use i18n_embed::{ - fluent::{fluent_language_loader, FluentLanguageLoader}, - unic_langid::LanguageIdentifier, I18nEmbedError, LanguageLoader, Localizer, + fluent::{FluentLanguageLoader, fluent_language_loader}, + unic_langid::LanguageIdentifier, }; use lazy_static::lazy_static; use rust_embed::RustEmbed; diff --git a/age/src/identity.rs b/age/src/identity.rs index e677bc86..f3fec4e0 100644 --- a/age/src/identity.rs +++ b/age/src/identity.rs @@ -6,8 +6,8 @@ use std::{ use zeroize::Zeroize; use crate::{ - util::LimitedReader, x25519, Callbacks, DecryptError, EncryptError, IdentityFileConvertError, - NoCallbacks, + Callbacks, DecryptError, EncryptError, IdentityFileConvertError, NoCallbacks, + util::LimitedReader, x25519, }; #[cfg(feature = "cli-common")] @@ -89,45 +89,50 @@ impl IdentityFile { continue; } - if let Ok(identity) = line.parse::() { - identities.push(IdentityFileEntry::Native(identity)); - } else if let Some(identity) = { - #[cfg(feature = "plugin")] - { - line.parse::().ok() - } - - #[cfg(not(feature = "plugin"))] - None - } { - #[cfg(feature = "plugin")] - { - identities.push(IdentityFileEntry::Plugin(identity)); + match line.parse::() { + Ok(identity) => { + identities.push(IdentityFileEntry::Native(identity)); } - - // Add a binding to provide a type when plugins are disabled. - #[cfg(not(feature = "plugin"))] - let _: () = identity; - } else { - line.zeroize(); - - // Return a line number in place of the line, so we don't leak the file - // contents in error messages. - return Err(io::Error::new( - io::ErrorKind::InvalidData, - if let Some(filename) = filename { - format!( - "identity file {} contains non-identity data on line {}", - filename, - line_number + 1 - ) + _ => { + if let Some(identity) = { + #[cfg(feature = "plugin")] + { + line.parse::().ok() + } + + #[cfg(not(feature = "plugin"))] + None + } { + #[cfg(feature = "plugin")] + { + identities.push(IdentityFileEntry::Plugin(identity)); + } + + // Add a binding to provide a type when plugins are disabled. + #[cfg(not(feature = "plugin"))] + let _: () = identity; } else { - format!( - "identity file contains non-identity data on line {}", - line_number + 1 - ) - }, - )); + line.zeroize(); + + // Return a line number in place of the line, so we don't leak the file + // contents in error messages. + return Err(io::Error::new( + io::ErrorKind::InvalidData, + if let Some(filename) = filename { + format!( + "identity file {} contains non-identity data on line {}", + filename, + line_number + 1 + ) + } else { + format!( + "identity file contains non-identity data on line {}", + line_number + 1 + ) + }, + )); + } + } } line.zeroize(); @@ -342,44 +347,44 @@ pub(crate) mod tests { #[test] fn secret_key_lf() { - valid_secret_key_encoding(&format!("{}\n", TEST_SK), 1); + valid_secret_key_encoding(&format!("{TEST_SK}\n"), 1); } #[test] fn two_secret_keys_lf() { - valid_secret_key_encoding(&format!("{}\n{}", TEST_SK, TEST_SK), 2); + valid_secret_key_encoding(&format!("{TEST_SK}\n{TEST_SK}"), 2); } #[test] fn secret_key_with_comment_lf() { - valid_secret_key_encoding(&format!("# Foo bar baz\n{}", TEST_SK), 1); - valid_secret_key_encoding(&format!("{}\n# Foo bar baz", TEST_SK), 1); + valid_secret_key_encoding(&format!("# Foo bar baz\n{TEST_SK}"), 1); + valid_secret_key_encoding(&format!("{TEST_SK}\n# Foo bar baz"), 1); } #[test] fn secret_key_with_empty_line_lf() { - valid_secret_key_encoding(&format!("\n\n{}", TEST_SK), 1); + valid_secret_key_encoding(&format!("\n\n{TEST_SK}"), 1); } #[test] fn secret_key_crlf() { - valid_secret_key_encoding(&format!("{}\r\n", TEST_SK), 1); + valid_secret_key_encoding(&format!("{TEST_SK}\r\n"), 1); } #[test] fn two_secret_keys_crlf() { - valid_secret_key_encoding(&format!("{}\r\n{}", TEST_SK, TEST_SK), 2); + valid_secret_key_encoding(&format!("{TEST_SK}\r\n{TEST_SK}"), 2); } #[test] fn secret_key_with_comment_crlf() { - valid_secret_key_encoding(&format!("# Foo bar baz\r\n{}", TEST_SK), 1); - valid_secret_key_encoding(&format!("{}\r\n# Foo bar baz", TEST_SK), 1); + valid_secret_key_encoding(&format!("# Foo bar baz\r\n{TEST_SK}"), 1); + valid_secret_key_encoding(&format!("{TEST_SK}\r\n# Foo bar baz"), 1); } #[test] fn secret_key_with_empty_line_crlf() { - valid_secret_key_encoding(&format!("\r\n\r\n{}", TEST_SK), 1); + valid_secret_key_encoding(&format!("\r\n\r\n{TEST_SK}"), 1); } #[test] diff --git a/age/src/keys.rs b/age/src/keys.rs index 06b6bd55..c8a1dd8e 100644 --- a/age/src/keys.rs +++ b/age/src/keys.rs @@ -5,12 +5,12 @@ use age_core::{ primitives::hkdf, secrecy::{ExposeSecret, SecretBox}, }; -use rand::{rngs::OsRng, RngCore}; +use rand::{Rng, rand_core::UnwrapErr, rngs::SysRng}; use crate::{ error::DecryptError, format::HeaderV1, - primitives::{stream::PayloadKey, HmacKey}, + primitives::{HmacKey, stream::PayloadKey}, protocol::Nonce, }; @@ -18,7 +18,7 @@ const HEADER_KEY_LABEL: &[u8] = b"header"; const PAYLOAD_KEY_LABEL: &[u8] = b"payload"; pub(crate) fn new_file_key() -> FileKey { - FileKey::init_with_mut(|file_key| OsRng.fill_bytes(file_key)) + FileKey::init_with_mut(|file_key| UnwrapErr(SysRng).fill_bytes(file_key)) } pub(crate) fn mac_key(file_key: &FileKey) -> HmacKey { diff --git a/age/src/native/scrypt.rs b/age/src/native/scrypt.rs index 70fefef9..9d492f0c 100644 --- a/age/src/native/scrypt.rs +++ b/age/src/native/scrypt.rs @@ -5,15 +5,16 @@ use std::iter; use std::time::Duration; use age_core::{ - format::{FileKey, Stanza, FILE_KEY_BYTES}, + format::{FILE_KEY_BYTES, FileKey, Stanza}, primitives::{aead_decrypt, aead_encrypt}, secrecy::{ExposeSecret, SecretString}, }; -use base64::{prelude::BASE64_STANDARD_NO_PAD, Engine}; +use base64::{Engine, prelude::BASE64_STANDARD_NO_PAD}; use rand::{ - distributions::{Alphanumeric, DistString}, - rngs::OsRng, - RngCore, + Rng, + distr::{Alphanumeric, SampleString}, + rand_core::UnwrapErr, + rngs::SysRng, }; use zeroize::Zeroize; @@ -139,7 +140,7 @@ impl crate::Recipient for Recipient { &self, file_key: &FileKey, ) -> Result<(Vec, HashSet), EncryptError> { - let mut rng = OsRng; + let mut rng = UnwrapErr(SysRng); let mut salt = [0; SALT_LEN]; rng.fill_bytes(&mut salt); diff --git a/age/src/native/tag.rs b/age/src/native/tag.rs index 3ebe3e86..c5e4e914 100644 --- a/age/src/native/tag.rs +++ b/age/src/native/tag.rs @@ -8,13 +8,13 @@ use age_core::{ primitives::{bech32_decode, bech32_encode_to_fmt, hpke_seal}, secrecy::ExposeSecret, }; -use base64::{prelude::BASE64_STANDARD_NO_PAD, Engine}; +use base64::{Engine, prelude::BASE64_STANDARD_NO_PAD}; use hpke::{Deserializable, Serializable}; use p256::{ - elliptic_curve::sec1::{FromEncodedPoint, ToEncodedPoint}, - EncodedPoint, PublicKey, + PublicKey, Sec1Point, + elliptic_curve::sec1::{FromSec1Point, ToSec1Point}, }; -use rand::rngs::OsRng; +use rand::{rand_core::UnwrapErr, rngs::SysRng}; use crate::EncryptError; @@ -34,7 +34,7 @@ type Kem = hpke::kem::DhP256HkdfSha256; #[derive(Clone, PartialEq, Eq)] pub struct Recipient { /// Compressed encoding of the recipient public key. - compressed: EncodedPoint, + compressed: Sec1Point, /// Cached in-memory representation, for HPKE. pk_recip: ::PublicKey, } @@ -55,17 +55,17 @@ impl std::str::FromStr for Recipient { |_, bytes| Ok(bytes.collect::>()), )?; - let encoded = EncodedPoint::from_bytes(bytes).map_err(|_| "invalid SEC-1 encoding")?; + let encoded = Sec1Point::from_bytes(bytes).map_err(|_| "invalid SEC-1 encoding")?; if !encoded.is_compressed() { return Err("not a compressed SEC-1 encoding"); } - let point = PublicKey::from_encoded_point(&encoded) + let point = PublicKey::from_sec1_point(&encoded) .into_option() .ok_or("invalid P-256 point")?; let pk_recip = - ::PublicKey::from_bytes(point.to_encoded_point(false).as_bytes()) + ::PublicKey::from_bytes(point.to_sec1_point(false).as_bytes()) .expect("valid"); Ok(Self { @@ -83,7 +83,7 @@ impl fmt::Display for Recipient { impl fmt::Debug for Recipient { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}", self) + write!(f, "{self}") } } @@ -96,7 +96,7 @@ impl crate::Recipient for Recipient { &self.pk_recip, P256TAG_SALT.as_bytes(), file_key.expose_secret(), - &mut OsRng, + &mut UnwrapErr(SysRng), ); let ikm = enc diff --git a/age/src/native/tagpq.rs b/age/src/native/tagpq.rs index e6bf7ffb..fd64a422 100644 --- a/age/src/native/tagpq.rs +++ b/age/src/native/tagpq.rs @@ -6,43 +6,23 @@ use std::fmt; use age_core::{ format::{FileKey, Stanza}, primitives::{bech32_decode, bech32_encode_to_fmt, hpke_seal}, - secrecy::{zeroize::Zeroize, ExposeSecret}, + secrecy::ExposeSecret, }; -use base64::{prelude::BASE64_STANDARD_NO_PAD, Engine}; +use base64::{Engine, prelude::BASE64_STANDARD_NO_PAD}; +use cipher::{KeySizeUser, typenum::Unsigned}; use hpke::{Deserializable, Serializable}; -use ml_kem::{KemCore, MlKem768}; -use p256::elliptic_curve::sec1::ToEncodedPoint; -use rand::rngs::OsRng; +use ml_kem::{Kem as KemCore, MlKem768}; +use rand::{rand_core::UnwrapErr, rngs::SysRng}; use crate::EncryptError; -mod kem; - const RECIPIENT_PREFIX: bech32::Hrp = bech32::Hrp::parse_unchecked("age1tagpq"); const MLKEM768P256TAG_RECIPIENT_TAG: &str = "mlkem768p256tag"; const MLKEM768P256TAG_SALT: &str = "age-encryption.org/mlkem768p256tag"; -type Kem = kem::MlKem768P256; - -pub(crate) fn expand_pq_key( - seed: &[u8; 64], -) -> ( - ::DecapsulationKey, - ::EncapsulationKey, -) { - let mut d = [0; 32]; - let mut z = [0; 32]; - d.copy_from_slice(&seed[..32]); - z.copy_from_slice(&seed[32..]); - - let (dk_pq, ek_pq) = MlKem768::generate_deterministic(&d.into(), &z.into()); - - d.zeroize(); - z.zeroize(); - - (dk_pq, ek_pq) -} +type Kem = hpke::kem::MlKem768P256; +type KemNek = <::EncapsulationKey as KeySizeUser>::KeySize; /// The hybrid post-quantum tagged age recipient type, designed for hardware keys where /// decryption potentially requires user presence. @@ -83,7 +63,7 @@ impl fmt::Display for Recipient { impl fmt::Debug for Recipient { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}", self) + write!(f, "{self}") } } @@ -96,15 +76,14 @@ impl crate::Recipient for Recipient { &self.0, MLKEM768P256TAG_SALT.as_bytes(), file_key.expose_secret(), - &mut OsRng, + &mut UnwrapErr(SysRng), ); + let kem_nek = KemNek::to_usize(); let ikm = enc .to_bytes() .into_iter() - .chain(super::static_tag( - self.0.ek_t.to_encoded_point(false).as_bytes(), - )) + .chain(super::static_tag(&self.0.to_bytes()[kem_nek..])) .collect::>(); let tag = super::stanza_tag(&ikm, MLKEM768P256TAG_SALT); @@ -126,8 +105,7 @@ impl crate::Recipient for Recipient { pub(crate) mod tests { use super::Recipient; - pub(crate) const TEST_RECIPIENT: &str = - "age1tagpq1m3e4wvp6hzcrn9exhy0ae3xfx2sjymp594k3tg7j4dpmj922we65vtnmrt2pyallax8669zqkr2pmfchptr4n38kug2xmcmp3adk2lnjqu00x5kxz5pvhmrltvfh9wuq973pcx35cnq8syn9qd3tzpehgztl4xpzr3tpd67g8af9trnjpc05gh7wu536aq4qt2y8zhsm4tvrfpsfl36qs5fpzysnk3sp9w77qzeg49357xex40v4s2lvt620swyys7u8yxdcnu4rkkwxdmt55gsuc3h5c5swahnegjgqwc60hn085ec3sjztwm45l44y3j2at9t6v9zra4ek3kek6waecqm98yaxl37w0d2zra626nz63jdm5sg59w7lyptw83zm6fntd8d0x03a9z6h9prfgpygzar6zrxjcrt4cdctk2mhf95s4a6v4zklfd49xhpsaeujm57thx2x3e3hwzc86ftfhmq5mkxxz3d6r8ws24xj4qfn73eyezg2wy094e3why592pghz27ruq3vkyegrv80eftnw9wqzwgvnwyseaus0yt84fylzrpzp6x2fguxuqjmgudr8xd33qm30evdpxd3jvjg8qh4q60kyq80jgff369k7nrepdc38grd2dava520excqp0ey0x39khx8ry03yffcatgv84fsx5j49djpapedsy693zute5xv5g2ewzrlj5se7akvkc4g4vmzhputpq8eyj9wz5dz6qtn7g3cfpd95nahw4ytspan0feyye04dcylv24ege7zkaj004gjwcxqxfqu2quawa83sx452jqjn8t48czp0xspwgnmvjyhttzzy6nhq8xzkdwnvsfefkwva6asrqc93zjn4rly5gnlv93xy3uzmr39szvjnf63426qzyeyvguc4vdcquwgsxgq236afcpqz866ny4tn7ckc0umefj242rt5vtvwqzzrvfev2mpvqcufp9pqvefyv4ftyuhgausfzuaadsczeykmft5wv3frzgrcp9ztr93h478ke4t86spp2uhyjkj73mp9g92ddk2fpv7v3njzsqgwhq3789sqrgkskehn0zjscckhwftyq4vet7vrlx2hs5kd9cwnq6t0djffhh3zquh4j3p0yaj9z2rc9wykg0usqw7983rrgur9jg8rnnqypwcz2lyclnnc705fc5g3an93ps60q6mxqp85u0ewtxdjlqcks84yduft0a0g6e7naew3v9u2d08knarvajn8q3gq9pgxde3s7nx94lus48wwvw2xjm7k82tvylec2393jdsuvch2xpe77w8hpv9nvsxfsrs270njpmfvpmgyk2cffl9tjp3qqcc4dfkf5rme2dg0x7ew8g39www5smm705q5da4eqvnqwrkavtq6xje9ss38hnkglz4eddz8f5qruvqmq2ff9l22gwkv8h432rdkysy0grkul8e2fedvkyyapfxt760udcgu92m54wl9yavmj4ga3ph9r5n99cjrq6wj5v33x33fe5vkjvfwnnt40wuv2hyexc9f4ylyqv9ldqq9epd4yuv8vrsfx2qy2kqz08kqhnzspy6s0x8fa5c2xkg5y2q0rvz4vnk7rp0acg6eksc3t7cxnn8y7glkjsqja3p56uz6vvhcw55d3ysad0hvsqxpjnc7svenf2gc5xn5kyr0et2vvyruxlnpqcdpqh9pzplumy5yzjxftyzh9ujfw0jq7ee60zx2x23p0jzyh9dvmly8p9h9ysptlqu7kwnejd65dnr75a0np2fvke8xen38r57w6z3wz3mycjmmn267wwxndfh9jdps7uxtct2wwfgamkpa5ap8s96lhfjztpwcm6fguhphu38yunu2v4vz3syzrvgwtqpemkewzp766nyu6texxvjlaemnhyyqutkcy6a42vqfsz49rw5wr4gt70r4vdaasehqjg46fnyts4sthrxadfllha3avu49wsj2c4jx"; + pub(crate) const TEST_RECIPIENT: &str = "age1tagpq1m3e4wvp6hzcrn9exhy0ae3xfx2sjymp594k3tg7j4dpmj922we65vtnmrt2pyallax8669zqkr2pmfchptr4n38kug2xmcmp3adk2lnjqu00x5kxz5pvhmrltvfh9wuq973pcx35cnq8syn9qd3tzpehgztl4xpzr3tpd67g8af9trnjpc05gh7wu536aq4qt2y8zhsm4tvrfpsfl36qs5fpzysnk3sp9w77qzeg49357xex40v4s2lvt620swyys7u8yxdcnu4rkkwxdmt55gsuc3h5c5swahnegjgqwc60hn085ec3sjztwm45l44y3j2at9t6v9zra4ek3kek6waecqm98yaxl37w0d2zra626nz63jdm5sg59w7lyptw83zm6fntd8d0x03a9z6h9prfgpygzar6zrxjcrt4cdctk2mhf95s4a6v4zklfd49xhpsaeujm57thx2x3e3hwzc86ftfhmq5mkxxz3d6r8ws24xj4qfn73eyezg2wy094e3why592pghz27ruq3vkyegrv80eftnw9wqzwgvnwyseaus0yt84fylzrpzp6x2fguxuqjmgudr8xd33qm30evdpxd3jvjg8qh4q60kyq80jgff369k7nrepdc38grd2dava520excqp0ey0x39khx8ry03yffcatgv84fsx5j49djpapedsy693zute5xv5g2ewzrlj5se7akvkc4g4vmzhputpq8eyj9wz5dz6qtn7g3cfpd95nahw4ytspan0feyye04dcylv24ege7zkaj004gjwcxqxfqu2quawa83sx452jqjn8t48czp0xspwgnmvjyhttzzy6nhq8xzkdwnvsfefkwva6asrqc93zjn4rly5gnlv93xy3uzmr39szvjnf63426qzyeyvguc4vdcquwgsxgq236afcpqz866ny4tn7ckc0umefj242rt5vtvwqzzrvfev2mpvqcufp9pqvefyv4ftyuhgausfzuaadsczeykmft5wv3frzgrcp9ztr93h478ke4t86spp2uhyjkj73mp9g92ddk2fpv7v3njzsqgwhq3789sqrgkskehn0zjscckhwftyq4vet7vrlx2hs5kd9cwnq6t0djffhh3zquh4j3p0yaj9z2rc9wykg0usqw7983rrgur9jg8rnnqypwcz2lyclnnc705fc5g3an93ps60q6mxqp85u0ewtxdjlqcks84yduft0a0g6e7naew3v9u2d08knarvajn8q3gq9pgxde3s7nx94lus48wwvw2xjm7k82tvylec2393jdsuvch2xpe77w8hpv9nvsxfsrs270njpmfvpmgyk2cffl9tjp3qqcc4dfkf5rme2dg0x7ew8g39www5smm705q5da4eqvnqwrkavtq6xje9ss38hnkglz4eddz8f5qruvqmq2ff9l22gwkv8h432rdkysy0grkul8e2fedvkyyapfxt760udcgu92m54wl9yavmj4ga3ph9r5n99cjrq6wj5v33x33fe5vkjvfwnnt40wuv2hyexc9f4ylyqv9ldqq9epd4yuv8vrsfx2qy2kqz08kqhnzspy6s0x8fa5c2xkg5y2q0rvz4vnk7rp0acg6eksc3t7cxnn8y7glkjsqja3p56uz6vvhcw55d3ysad0hvsqxpjnc7svenf2gc5xn5kyr0et2vvyruxlnpqcdpqh9pzplumy5yzjxftyzh9ujfw0jq7ee60zx2x23p0jzyh9dvmly8p9h9ysptlqu7kwnejd65dnr75a0np2fvke8xen38r57w6z3wz3mycjmmn267wwxndfh9jdps7uxtct2wwfgamkpa5ap8s96lhfjztpwcm6fguhphu38yunu2v4vz3syzrvgwtqpemkewzp766nyu6texxvjlaemnhyyqutkcy6a42vqfsz49rw5wr4gt70r4vdaasehqjg46fnyts4sthrxadfllha3avu49wsj2c4jx"; #[test] fn recipient_encoding() { diff --git a/age/src/native/tagpq/kem.rs b/age/src/native/tagpq/kem.rs deleted file mode 100644 index 71aaf7b8..00000000 --- a/age/src/native/tagpq/kem.rs +++ /dev/null @@ -1,373 +0,0 @@ -use age_core::secrecy::zeroize::Zeroize; -use cipher::{ - consts::{U32, U65}, - typenum, Unsigned, -}; -use hpke::{kem::SharedSecret, Deserializable, HpkeError, Serializable}; -use ml_kem::{ - kem::{Decapsulate, Encapsulate}, - Ciphertext, EncodedSizeUser, KemCore, MlKem768, -}; -use p256::elliptic_curve::sec1::{FromEncodedPoint, ToEncodedPoint}; -use rand::{CryptoRng, RngCore}; -use sha2::digest::XofReader; -use sha3::{ - digest::{ExtendableOutput, FixedOutput, OutputSizeUser, Update}, - Sha3_256, Shake256, -}; - -const LABEL: &[u8] = b"MLKEM768-P256"; -type KemNct = ::CiphertextSize; -type KemNek = <::EncapsulationKey as EncodedSizeUser>::EncodedSize; -type GroupNelem = U65; - -#[derive(Clone)] -pub(super) struct PrivateKey { - seed: [u8; 32], - dk_pq: ::DecapsulationKey, - dk_t: p256::SecretKey, -} - -impl PartialEq for PrivateKey { - fn eq(&self, other: &Self) -> bool { - self.seed == other.seed - } -} -impl Eq for PrivateKey {} - -impl Deserializable for PrivateKey { - fn from_bytes(encoded: &[u8]) -> Result { - let seed = encoded.try_into().map_err(|_| { - HpkeError::IncorrectInputLength(Self::OutputSize::to_usize(), encoded.len()) - })?; - let (_, _, dk_pq, dk_t) = expand_key(&seed); - Ok(Self { seed, dk_pq, dk_t }) - } -} - -impl Serializable for PrivateKey { - type OutputSize = U32; - - fn write_exact(&self, buf: &mut [u8]) { - buf.copy_from_slice(&self.seed); - } -} - -#[derive(Clone, Debug, PartialEq)] -pub(super) struct PublicKey { - pub(super) ek_pq: ::EncapsulationKey, - pub(super) ek_t: p256::PublicKey, -} - -impl Eq for PublicKey {} - -impl Deserializable for PublicKey { - fn from_bytes(encoded: &[u8]) -> Result { - if encoded.len() != Self::OutputSize::to_usize() { - return Err(HpkeError::IncorrectInputLength( - Self::OutputSize::to_usize(), - encoded.len(), - )); - } - let (encoded_pq, encoded_t) = encoded.split_at(KemNek::to_usize()); - - let ek_pq = ::EncapsulationKey::from_bytes( - encoded_pq.try_into().expect("correct length"), - ); - - let ek_t = - p256::EncodedPoint::from_bytes(encoded_t).map_err(|_| HpkeError::ValidationError)?; - if ek_t.is_compressed() { - return Err(HpkeError::ValidationError); - } - let ek_t = p256::PublicKey::from_encoded_point(&ek_t) - .into_option() - .ok_or(HpkeError::ValidationError)?; - - Ok(Self { ek_pq, ek_t }) - } -} - -impl Serializable for PublicKey { - type OutputSize = typenum::Sum; - - fn write_exact(&self, buf: &mut [u8]) { - let kem_neq = KemNek::to_usize(); - buf[..kem_neq].copy_from_slice(&self.ek_pq.as_bytes()); - buf[kem_neq..].copy_from_slice(self.ek_t.to_encoded_point(false).as_bytes()); - } -} - -#[derive(Clone)] -pub(super) struct EncappedKey { - ct_pq: Ciphertext, - ct_t: p256::EncodedPoint, -} - -impl Deserializable for EncappedKey { - fn from_bytes(encoded: &[u8]) -> Result { - if encoded.len() != Self::OutputSize::to_usize() { - return Err(HpkeError::IncorrectInputLength( - Self::OutputSize::to_usize(), - encoded.len(), - )); - } - let (encoded_pq, encoded_t) = encoded.split_at(KemNct::to_usize()); - - let ct_pq = <[u8; KemNct::USIZE]>::try_from(encoded_pq) - .expect("correct length") - .into(); - - let ct_t = - p256::EncodedPoint::from_bytes(encoded_t).map_err(|_| HpkeError::ValidationError)?; - if ct_t.is_compressed() { - return Err(HpkeError::ValidationError); - } - - Ok(Self { ct_pq, ct_t }) - } -} - -impl Serializable for EncappedKey { - type OutputSize = typenum::Sum; - - fn write_exact(&self, buf: &mut [u8]) { - let kem_nct = KemNct::to_usize(); - buf[..kem_nct].copy_from_slice(&self.ct_pq.0); - buf[kem_nct..].copy_from_slice(self.ct_t.as_bytes()); - } -} - -pub(super) struct MlKem768P256; - -impl hpke::Kem for MlKem768P256 { - type PublicKey = PublicKey; - type PrivateKey = PrivateKey; - - fn sk_to_pk(sk: &Self::PrivateKey) -> Self::PublicKey { - PublicKey { - ek_pq: sk.dk_pq.encapsulation_key().clone(), - ek_t: sk.dk_t.public_key(), - } - } - - type EncappedKey = EncappedKey; - type NSecret = ::OutputSize; - const KEM_ID: u16 = 0x0050; - - fn derive_keypair(ikm: &[u8]) -> (Self::PrivateKey, Self::PublicKey) { - let seed = shake256_labeled_derive::<32>(ikm, Self::KEM_ID, b"DeriveKeyPair", b""); - let (ek_pq, ek_t, dk_pq, dk_t) = expand_key(&seed); - (PrivateKey { seed, dk_pq, dk_t }, PublicKey { ek_pq, ek_t }) - } - - fn decap( - sk_recip: &Self::PrivateKey, - pk_sender_id: Option<&Self::PublicKey>, - encapped_key: &Self::EncappedKey, - ) -> Result, HpkeError> { - // TODO: Implement this if it is upstreamed. - assert!(pk_sender_id.is_none()); - - let ct_t = p256::PublicKey::from_encoded_point(&encapped_key.ct_t) - .into_option() - .ok_or(HpkeError::DecapError)?; - - let ss_pq = sk_recip - .dk_pq - .decapsulate(&encapped_key.ct_pq) - .map_err(|()| HpkeError::DecapError)?; - let ss_t = p256::ecdh::diffie_hellman(sk_recip.dk_t.to_nonzero_scalar(), ct_t.as_affine()); - - let ss = ss( - &ss_pq, - ss_t.raw_secret_bytes(), - encapped_key.ct_t.as_bytes(), - sk_recip - .dk_t - .public_key() - .to_encoded_point(false) - .as_bytes(), - ); - - Ok(SharedSecret(ss)) - } - - fn encap( - pk_recip: &Self::PublicKey, - sender_id_keypair: Option<(&Self::PrivateKey, &Self::PublicKey)>, - csprng: &mut R, - ) -> Result<(SharedSecret, Self::EncappedKey), HpkeError> { - // TODO: Implement this if it is upstreamed. - assert!(sender_id_keypair.is_none()); - - let (ct_pq, ss_pq) = pk_recip - .ek_pq - .encapsulate(csprng) - .map_err(|()| HpkeError::EncapError)?; - - let sk_e = p256::ecdh::EphemeralSecret::random(csprng); - let ct_t = sk_e.public_key().to_encoded_point(false); - let ss_t = sk_e.diffie_hellman(&pk_recip.ek_t); - - let ss = ss( - &ss_pq, - ss_t.raw_secret_bytes(), - ct_t.as_bytes(), - pk_recip.ek_t.to_encoded_point(false).as_bytes(), - ); - - Ok((SharedSecret(ss), EncappedKey { ct_pq, ct_t })) - } -} - -fn expand_key( - seed: &[u8; 32], -) -> ( - ::EncapsulationKey, - p256::PublicKey, - ::DecapsulationKey, - p256::SecretKey, -) { - let mut seed_pq = [0; 64]; - let mut seed_t = [0; 128]; - let mut xof = Shake256::default().chain(seed).finalize_xof(); - xof.read(&mut seed_pq); - xof.read(&mut seed_t); - - let (dk_pq, ek_pq) = super::expand_pq_key(&seed_pq); - let dk_t = p256_random_scalar(&seed_t); - let ek_t = dk_t.public_key(); - - seed_pq.zeroize(); - seed_t.zeroize(); - - (ek_pq, ek_t, dk_pq, dk_t) -} - -fn p256_random_scalar(seed: &[u8; 128]) -> p256::SecretKey { - for sk in seed.chunks_exact(32) { - if let Ok(sk) = p256::SecretKey::from_bytes(sk.try_into().expect("correct length")) { - return sk; - } - } - // This happens with cryptographically negligible probability. - // The chance of a single rejection is < 2^-32 for P-256. - // The chance of reaching this is thus < 2^-128 for P-256. - panic!("Rejection sampling failed"); -} - -fn shake256_labeled_derive( - ikm: &[u8], - kem_id: u16, - label: &[u8], - context: &[u8], -) -> [u8; L] { - let mut out = [0; L]; - Shake256::default() - .chain(ikm) - .chain(b"HPKE-v1") - // suite_id - .chain(b"KEM") - .chain(kem_id.to_be_bytes()) - // prefixed_label - .chain( - u16::try_from(label.len()) - .expect("short enough") - .to_be_bytes(), - ) - .chain(label) - .chain(u16::try_from(L).expect("short enough").to_be_bytes()) - .chain(context) - .finalize_xof_into(&mut out); - out -} - -fn ss(ss_pq: &[u8], ss_t: &[u8], ct_t: &[u8], ek_t: &[u8]) -> sha3::digest::Output { - let mut h = Sha3_256::default(); - h.update(ss_pq); - h.update(ss_t); - h.update(ct_t); - h.update(ek_t); - h.update(LABEL); - h.finalize_fixed() -} - -#[cfg(test)] -mod test_vectors; - -#[cfg(test)] -mod tests { - use age_core::primitives::{hpke_open, hpke_seal}; - use hpke::{rand_core, Deserializable, Kem, Serializable}; - use rand::{rngs::OsRng, CryptoRng, RngCore}; - - use super::{test_vectors::TEST_VECTORS, MlKem768P256, PrivateKey, PublicKey}; - - #[test] - fn hpke_round_trip() { - type Kem = MlKem768P256; - let mut rng = OsRng; - - let (sk_recip, pk_recip) = Kem::gen_keypair(&mut rng); - - let info = b"foobar"; - let plaintext = b"12345678"; - - let (encapped_key, ciphertext) = hpke_seal::(&pk_recip, info, plaintext, &mut rng); - let decrypted = hpke_open::(&encapped_key, &sk_recip, info, &ciphertext).unwrap(); - - assert_eq!(decrypted, plaintext); - } - - #[test] - fn test_vectors() { - struct FakeCsprng<'a> { - bytes: &'a [u8], - } - impl<'a> RngCore for FakeCsprng<'a> { - fn next_u32(&mut self) -> u32 { - rand_core::impls::next_u32_via_fill(self) - } - - fn next_u64(&mut self) -> u64 { - rand_core::impls::next_u64_via_fill(self) - } - - fn fill_bytes(&mut self, dest: &mut [u8]) { - self.try_fill_bytes(dest).unwrap() - } - - fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand::Error> { - if dest.len() > self.bytes.len() { - Err(rand::Error::new("ran out of randomness")) - } else { - let (taken, rest) = self.bytes.split_at(dest.len()); - dest.copy_from_slice(taken); - self.bytes = rest; - Ok(()) - } - } - } - impl<'a> CryptoRng for FakeCsprng<'a> {} - - for tv in TEST_VECTORS { - let dk = PrivateKey::from_bytes(&tv.dk).unwrap(); - assert_eq!(dk.dk_t.to_bytes().as_slice(), tv.dk_t.as_slice()); - - let ek = PublicKey::from_bytes(tv.ek).unwrap(); - assert_eq!(MlKem768P256::sk_to_pk(&dk), ek); - - let mut csprng = FakeCsprng { - bytes: &tv.randomness, - }; - let (ss, ct) = MlKem768P256::encap(&ek, None, &mut csprng).unwrap(); - assert_eq!(ss.0.as_slice(), tv.ss.as_slice()); - assert_eq!(ct.to_bytes().as_slice(), tv.ct); - - let enc = super::EncappedKey::from_bytes(tv.ct).unwrap(); - let ss = MlKem768P256::decap(&dk, None, &enc).unwrap(); - assert_eq!(ss.0.as_slice(), tv.ss.as_slice()); - } - } -} diff --git a/age/src/native/tagpq/kem/test_vectors.rs b/age/src/native/tagpq/kem/test_vectors.rs deleted file mode 100644 index dc19402b..00000000 --- a/age/src/native/tagpq/kem/test_vectors.rs +++ /dev/null @@ -1,2005 +0,0 @@ -#[allow(dead_code)] -pub(super) struct TestVector { - pub(super) seed: [u8; 32], - pub(super) randomness: [u8; 128], - pub(super) ek: &'static [u8], - pub(super) dk: [u8; 32], - pub(super) dk_pq: [u8; 64], - pub(super) dk_t: [u8; 32], - pub(super) ct: &'static [u8], - pub(super) ss: [u8; 32], -} - -/// From https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-concrete-hybrid-kems-02#appendix-A.1 -pub(super) const TEST_VECTORS: &[TestVector] = &[ - TestVector { - seed: [0x00; 32], - randomness: [0x64; 128], - ek: &[ - 0x3d, 0x20, 0x9f, 0x71, 0x67, 0x52, 0xf6, 0x40, 0x8e, 0x7f, 0x89, 0xbc, 0xee, 0xf9, - 0x7a, 0xc3, 0x88, 0x53, 0x00, 0x45, 0x37, 0x79, 0x27, 0x64, 0x4e, 0xf0, 0x46, 0xc0, - 0xa7, 0xca, 0xe9, 0x78, 0xc8, 0x84, 0x1a, 0x01, 0x33, 0xaa, 0xc4, 0xf1, 0xe1, 0xa7, - 0x02, 0x72, 0x77, 0xf6, 0x71, 0x21, 0x9c, 0xf5, 0x8b, 0x85, 0xd2, 0x9c, 0x8f, 0xec, - 0x08, 0xed, 0xd4, 0x32, 0xe7, 0x87, 0xa3, 0xcf, 0x99, 0x36, 0xfe, 0x00, 0x26, 0xa1, - 0x13, 0xcb, 0x9e, 0xfb, 0x1d, 0x72, 0x14, 0x04, 0x95, 0x27, 0xbf, 0xe2, 0x14, 0x1e, - 0xa1, 0x70, 0xb0, 0x29, 0x4a, 0x59, 0x40, 0x3a, 0xb0, 0xce, 0x16, 0x76, 0x0a, 0x8b, - 0xaa, 0x95, 0xb8, 0x23, 0xcb, 0xb8, 0xaa, 0xcd, 0xcc, 0x17, 0xef, 0x32, 0x77, 0x52, - 0x23, 0xc7, 0x91, 0xe3, 0x74, 0x01, 0x63, 0x94, 0x1f, 0x9b, 0xb3, 0xf6, 0x33, 0x46, - 0xbe, 0xf1, 0xc0, 0x50, 0xc3, 0x1f, 0x93, 0x2c, 0x62, 0x71, 0x94, 0x29, 0xaf, 0xf1, - 0x4c, 0x2b, 0xd4, 0x38, 0xab, 0x13, 0x5b, 0xed, 0x69, 0x2d, 0x56, 0xc7, 0x7c, 0x04, - 0xcb, 0xbf, 0xfd, 0x63, 0x35, 0xb5, 0x78, 0x31, 0x8b, 0x51, 0x37, 0x71, 0xe8, 0x4b, - 0x14, 0xea, 0x82, 0x12, 0x62, 0x14, 0x1c, 0xa0, 0x06, 0xcc, 0xb8, 0xbf, 0x25, 0x00, - 0xaa, 0x10, 0x08, 0x97, 0x0f, 0x21, 0x6f, 0xe7, 0xf1, 0xae, 0x34, 0x12, 0x5a, 0xa2, - 0x90, 0x49, 0x2c, 0x06, 0x9a, 0x18, 0x92, 0x22, 0xad, 0xc3, 0x22, 0xf9, 0x76, 0x49, - 0xc7, 0x62, 0xc7, 0xd3, 0x12, 0x8a, 0xd3, 0xbb, 0x26, 0x67, 0x97, 0x1d, 0x07, 0x44, - 0x01, 0x4b, 0xc3, 0xb6, 0x74, 0x45, 0xcb, 0xcd, 0x0b, 0x3e, 0x7e, 0xa6, 0x9f, 0xb1, - 0xcb, 0x9f, 0x9c, 0x33, 0x1f, 0x97, 0x48, 0x79, 0x20, 0x18, 0x72, 0x92, 0x92, 0x6d, - 0x04, 0xa2, 0x5a, 0x26, 0x50, 0xab, 0xbd, 0x44, 0x98, 0x2b, 0xb0, 0xc3, 0xc6, 0x30, - 0x1f, 0xe6, 0xa6, 0x13, 0x30, 0xd2, 0x4d, 0x8a, 0x3c, 0x70, 0x21, 0xdc, 0x3e, 0x33, - 0x92, 0xc7, 0x9a, 0x13, 0x9b, 0x37, 0x61, 0x3b, 0xba, 0x67, 0xa2, 0x98, 0x42, 0x98, - 0x50, 0x7b, 0x84, 0xa4, 0xd6, 0x1e, 0xef, 0x18, 0xac, 0xfb, 0x97, 0x9a, 0xf2, 0xd3, - 0x9c, 0xaa, 0x4c, 0x0d, 0xb4, 0x51, 0x38, 0x15, 0x35, 0x9d, 0x76, 0xfc, 0x37, 0x8c, - 0x63, 0xa7, 0xf4, 0xf3, 0x05, 0x3b, 0x17, 0x16, 0x8d, 0x02, 0x21, 0xcf, 0x0c, 0x2e, - 0xec, 0x55, 0x14, 0xba, 0x23, 0x5f, 0x81, 0xd0, 0x4d, 0x67, 0xc3, 0xb5, 0xc5, 0x18, - 0x09, 0x49, 0x17, 0x67, 0x1c, 0x26, 0xa7, 0xc0, 0x46, 0x45, 0x75, 0x33, 0xcc, 0x32, - 0x84, 0x45, 0x81, 0x27, 0x7a, 0x03, 0xeb, 0x06, 0x5c, 0x45, 0x29, 0xa7, 0x79, 0xa9, - 0xa5, 0x87, 0x8f, 0x2a, 0xac, 0x3f, 0x81, 0xdb, 0x9e, 0xd3, 0xd8, 0xc9, 0x34, 0x56, - 0x97, 0x05, 0x8c, 0xbb, 0x99, 0xd3, 0x79, 0xbc, 0xa1, 0x6d, 0x8f, 0xdb, 0x61, 0xd1, - 0x29, 0x96, 0x03, 0x90, 0x52, 0x47, 0x91, 0xb9, 0xd3, 0xe5, 0x01, 0xb9, 0x00, 0xbd, - 0x1e, 0x50, 0x02, 0xe0, 0x95, 0xbe, 0x06, 0xc2, 0x3f, 0x1f, 0xb2, 0x12, 0xf5, 0x80, - 0x1f, 0x24, 0xb6, 0xb2, 0x8c, 0x0c, 0x54, 0x93, 0xd2, 0x46, 0xd0, 0x2a, 0xa2, 0x9f, - 0xa3, 0xac, 0xfb, 0xe1, 0x5a, 0xc4, 0xe2, 0x12, 0xeb, 0x0b, 0x6f, 0x69, 0xeb, 0xbe, - 0xa2, 0x59, 0xa2, 0x70, 0x3a, 0xa4, 0xc3, 0x08, 0x22, 0x4b, 0xdb, 0x74, 0x1c, 0x65, - 0xc7, 0xa5, 0xd4, 0xbf, 0xf7, 0x88, 0x27, 0x95, 0x07, 0xbb, 0xfe, 0x51, 0x3d, 0x7a, - 0xa5, 0x69, 0x4e, 0x7b, 0x3c, 0xdf, 0x62, 0xab, 0x36, 0x43, 0x27, 0x42, 0xd4, 0xa0, - 0xca, 0x9b, 0x35, 0x70, 0xba, 0x74, 0x2f, 0xa8, 0x03, 0xb4, 0x69, 0x89, 0xc8, 0x52, - 0x6e, 0xa5, 0x86, 0xcc, 0x4f, 0xc3, 0x28, 0x66, 0x14, 0x3b, 0x79, 0x60, 0x17, 0x25, - 0xfa, 0x54, 0x5f, 0xd2, 0x80, 0xb4, 0x04, 0x53, 0x03, 0x18, 0xbb, 0xc3, 0x37, 0x11, - 0x94, 0x71, 0x0b, 0x6d, 0x74, 0xbe, 0xaa, 0x62, 0x9e, 0xb1, 0x8a, 0x36, 0xa9, 0x53, - 0xb7, 0x59, 0x15, 0xae, 0x96, 0x99, 0x9b, 0xa5, 0xc8, 0x8c, 0xdc, 0x56, 0xa4, 0x68, - 0x61, 0xc5, 0x00, 0x32, 0xc9, 0xb6, 0x30, 0xbc, 0xc1, 0x44, 0x5a, 0x30, 0x87, 0x89, - 0x79, 0xbc, 0x55, 0xa2, 0xc0, 0x95, 0x5b, 0xf3, 0x99, 0xb2, 0x31, 0x20, 0x3b, 0x90, - 0xc6, 0x51, 0xb6, 0xaf, 0xe0, 0xe2, 0x42, 0xb5, 0xa5, 0x43, 0x25, 0x0b, 0x14, 0x2f, - 0x72, 0x91, 0xed, 0x75, 0x3d, 0x81, 0x60, 0x98, 0xf7, 0x91, 0x33, 0x02, 0xa8, 0xce, - 0x91, 0x64, 0x17, 0x16, 0x62, 0x3d, 0x4f, 0xc2, 0xac, 0x67, 0x72, 0xaa, 0x5f, 0x36, - 0x74, 0x04, 0x2b, 0x7c, 0x4a, 0x18, 0xa2, 0x18, 0x62, 0x89, 0xa4, 0xac, 0x4e, 0x20, - 0x07, 0x74, 0x59, 0x6c, 0xa0, 0x3e, 0x67, 0x98, 0xc7, 0x50, 0x6b, 0x98, 0x49, 0x99, - 0xdb, 0x6a, 0xc1, 0x42, 0x58, 0x6b, 0xae, 0x07, 0x99, 0xf1, 0xe7, 0x76, 0xf9, 0xf5, - 0x24, 0x7d, 0xc5, 0x74, 0xd8, 0x55, 0x6d, 0xdf, 0x9b, 0xbb, 0xc4, 0xca, 0x36, 0x43, - 0x26, 0x34, 0x57, 0xf7, 0x42, 0x48, 0x01, 0x0d, 0x62, 0xd4, 0x31, 0x12, 0x68, 0x36, - 0x0a, 0xec, 0xb4, 0x90, 0x2b, 0x45, 0x0b, 0xf2, 0x05, 0x0e, 0xcb, 0x8b, 0xa7, 0xa9, - 0x28, 0x20, 0xd2, 0x33, 0xf5, 0xa1, 0x4e, 0xd3, 0x12, 0x25, 0xa1, 0xd1, 0x7c, 0xa6, - 0xf1, 0x9e, 0x82, 0x58, 0x94, 0xcf, 0xb1, 0x80, 0x7d, 0x92, 0x2c, 0xbd, 0x60, 0x76, - 0x11, 0x34, 0xbe, 0x41, 0x91, 0x44, 0xbc, 0xf7, 0x20, 0x06, 0x36, 0x6a, 0x44, 0x60, - 0x13, 0x7a, 0xd9, 0x13, 0x6c, 0x11, 0x3f, 0x05, 0xeb, 0x54, 0xc4, 0x09, 0x52, 0x0e, - 0xdc, 0x72, 0xe4, 0x15, 0x0c, 0xc3, 0xa2, 0x4b, 0x0f, 0x81, 0x9e, 0xec, 0x11, 0xbb, - 0xd1, 0x9c, 0xa9, 0x64, 0x5b, 0x08, 0x10, 0xa6, 0x0b, 0x4a, 0x8a, 0x9e, 0x9c, 0x39, - 0x55, 0x39, 0x6a, 0x16, 0x53, 0x95, 0x5b, 0x04, 0x7b, 0xcf, 0x4f, 0x98, 0x43, 0x3c, - 0x27, 0x23, 0x6c, 0x57, 0x0d, 0x75, 0xf8, 0x09, 0xe4, 0x4a, 0xaf, 0x2d, 0xc3, 0x36, - 0x65, 0x82, 0x63, 0x51, 0x87, 0x2c, 0x29, 0x33, 0x50, 0xab, 0x32, 0x45, 0x18, 0xc8, - 0xc0, 0xc8, 0x0b, 0x52, 0x1c, 0x80, 0xc8, 0x1a, 0x56, 0xbd, 0xc9, 0x68, 0xa5, 0x65, - 0x03, 0x15, 0xa8, 0x30, 0xc8, 0xbb, 0x17, 0x53, 0x2c, 0x62, 0xcc, 0xc2, 0x3b, 0x1d, - 0x46, 0x41, 0x2c, 0x25, 0x6b, 0x22, 0x4f, 0xd4, 0x67, 0x44, 0x91, 0x80, 0x35, 0x01, - 0xd0, 0x14, 0x31, 0x25, 0xc7, 0x57, 0x72, 0x39, 0x68, 0x99, 0x65, 0xb6, 0x98, 0x9c, - 0xa5, 0x61, 0x79, 0x3c, 0x0f, 0x85, 0xc6, 0x2a, 0x9e, 0x13, 0x48, 0x7d, 0xa1, 0x76, - 0x62, 0xa7, 0x18, 0x8c, 0x70, 0xb1, 0x04, 0x0a, 0x67, 0xed, 0x4c, 0x3f, 0x85, 0xe7, - 0x4e, 0x36, 0x91, 0x82, 0x2f, 0xb9, 0x63, 0x14, 0xd6, 0x13, 0x4f, 0xe6, 0xa6, 0x26, - 0xb3, 0xcb, 0xe1, 0x46, 0x1d, 0x62, 0xa7, 0xb5, 0x73, 0xb2, 0xcc, 0x75, 0x57, 0x9f, - 0xfa, 0x22, 0x96, 0x7e, 0x36, 0xce, 0xb2, 0xa1, 0xaa, 0x0b, 0x71, 0x87, 0x5a, 0x22, - 0x75, 0x1d, 0x70, 0x6b, 0x72, 0xca, 0x9e, 0xcd, 0x0c, 0x81, 0x00, 0xad, 0x0a, 0xa5, - 0x80, 0x09, 0xa5, 0xc8, 0x3f, 0xff, 0xe9, 0x17, 0x59, 0xe6, 0xba, 0xa0, 0xa9, 0x34, - 0x5a, 0xf9, 0x9f, 0xe3, 0xb6, 0x95, 0x09, 0xdb, 0xc8, 0x40, 0x32, 0x86, 0x88, 0x44, - 0xab, 0x3f, 0x65, 0xbb, 0x1d, 0xf8, 0xbe, 0xad, 0xf3, 0x64, 0x42, 0xe4, 0x8e, 0x33, - 0x9c, 0x96, 0x70, 0x23, 0xa5, 0x25, 0x41, 0x15, 0x44, 0xc7, 0x89, 0xa2, 0xf0, 0x4d, - 0xac, 0xd0, 0x6f, 0xfe, 0xf7, 0x83, 0x02, 0x21, 0x04, 0x50, 0xb9, 0x31, 0xf6, 0xb4, - 0xc3, 0x2a, 0xab, 0x34, 0xa3, 0xf5, 0x26, 0x0b, 0x81, 0x0f, 0x4c, 0x9a, 0x94, 0x6f, - 0xc2, 0x2d, 0x3b, 0xaa, 0xba, 0xa8, 0x0b, 0xa8, 0xd9, 0x95, 0x5d, 0x6d, 0xc3, 0x5e, - 0x86, 0x09, 0xb4, 0x25, 0x6b, 0x48, 0x2c, 0xdc, 0x9d, 0x89, 0x77, 0xc1, 0xa4, 0x7a, - 0x35, 0x4e, 0x7c, 0x52, 0x7f, 0xdb, 0x16, 0x72, 0xe1, 0x66, 0x91, 0x7b, 0x95, 0xcd, - 0x63, 0x51, 0x82, 0x02, 0x61, 0xda, 0xab, 0x36, 0x1f, 0x8a, 0x2d, 0xcb, 0xb2, 0x40, - 0xc5, 0x5a, 0xbd, 0x6a, 0x81, 0x05, 0xe5, 0x29, 0x1b, 0x42, 0x7b, 0x56, 0x6d, 0x73, - 0x1e, 0x6b, 0x70, 0x47, 0x18, 0x9c, 0xff, 0x20, 0xd8, 0xb1, 0x20, 0xe0, 0xb3, 0xe7, - 0x24, 0x72, 0xd1, 0xb0, 0x08, 0x68, 0x12, 0x20, 0x0f, 0xd3, 0x69, 0x8e, 0x23, 0xf0, - 0x6e, 0x4f, 0x4e, 0x08, 0xbb, 0xb5, 0x4c, 0xc2, 0x04, 0x9c, 0x03, 0x9c, 0x84, 0x5b, - 0xe6, 0x59, 0x99, 0x9c, 0x8f, 0xa4, 0x8d, 0x7f, 0x62, 0x32, 0x7c, 0x14, 0x6c, 0xf1, - 0xbc, 0x0b, 0x0b, 0xb1, 0xb9, 0x1b, 0x30, 0x17, 0x4b, 0x7b, 0xc2, 0x20, 0xd4, 0x22, - 0x02, 0x3b, 0xff, 0x6b, 0x0d, 0xee, 0x26, 0x35, 0x32, 0xc5, 0x03, 0xf3, 0x98, 0x2e, - 0x4d, 0x3e, 0x27, 0x07, 0x1b, 0x85, 0x55, 0x78, 0xa9, 0xa9, 0xaa, 0x63, 0xb8, 0xa8, - 0xc3, 0x39, 0xbf, - ], - dk: [0x00; 32], - dk_pq: [ - 0xf5, 0x97, 0x7c, 0x82, 0x83, 0x54, 0x6a, 0x63, 0x72, 0x3b, 0xc3, 0x1d, 0x26, 0x19, - 0x12, 0x4f, 0x11, 0xdb, 0x46, 0x58, 0x64, 0x33, 0x36, 0x74, 0x1d, 0xf8, 0x17, 0x57, - 0xd5, 0xad, 0x30, 0x62, 0x22, 0x1e, 0x12, 0x43, 0x11, 0xec, 0x7f, 0x71, 0x81, 0x56, - 0x8d, 0xe7, 0x93, 0x8d, 0xf8, 0x05, 0xd8, 0x94, 0xf5, 0xfd, 0xed, 0x46, 0x50, 0x01, - 0xa0, 0x4e, 0x26, 0x0a, 0x49, 0x48, 0x2c, 0xf5, - ], - dk_t: [ - 0xe0, 0x0b, 0x3f, 0x9d, 0x33, 0x8d, 0xe9, 0x04, 0x88, 0x97, 0x37, 0x87, 0xb0, 0x91, - 0x6a, 0x4a, 0x9a, 0xe8, 0xbe, 0xbf, 0x4e, 0x2b, 0xc0, 0x7a, 0x7b, 0xc1, 0x8f, 0x1a, - 0x62, 0x21, 0x51, 0x82, - ], - ct: &[ - 0xd8, 0x10, 0x18, 0xa9, 0x4f, 0x80, 0x78, 0xe0, 0x21, 0x05, 0xbe, 0xaa, 0x81, 0x4e, - 0x00, 0x33, 0x90, 0xbe, 0xfa, 0x45, 0x89, 0xbb, 0x61, 0x4f, 0x77, 0x39, 0x7a, 0xf4, - 0x2d, 0x8e, 0x81, 0x50, 0x79, 0x6f, 0x2c, 0x88, 0xa4, 0xef, 0xca, 0x81, 0xb8, 0xcf, - 0x93, 0xc0, 0xae, 0x37, 0x16, 0xc5, 0x4e, 0xc1, 0xb0, 0x45, 0xe3, 0x87, 0x5f, 0x38, - 0xc2, 0xdd, 0x12, 0xd7, 0xf7, 0x17, 0xbd, 0x7f, 0xb7, 0x01, 0xa9, 0xfe, 0xcd, 0xa5, - 0xed, 0x8b, 0x76, 0x4c, 0x9a, 0x35, 0xd4, 0xa5, 0xc1, 0xd8, 0x93, 0x0f, 0x60, 0x71, - 0xf6, 0x53, 0xee, 0xbb, 0x2d, 0x1a, 0xfa, 0x77, 0xde, 0xbb, 0x83, 0x02, 0xd1, 0x6f, - 0x17, 0xe0, 0xf5, 0xf3, 0x92, 0x0a, 0x71, 0xa4, 0xd4, 0x9b, 0xea, 0xfa, 0x0e, 0x1c, - 0x7e, 0x44, 0x3f, 0x8a, 0xbc, 0xa6, 0x4a, 0x65, 0xa9, 0xe8, 0x1a, 0x97, 0xe7, 0x35, - 0x7b, 0xf9, 0x02, 0x57, 0x33, 0x63, 0xc0, 0xe1, 0xa1, 0x2e, 0x52, 0x28, 0x03, 0x68, - 0x28, 0xe3, 0xf7, 0x59, 0x12, 0x1f, 0xad, 0xa9, 0x24, 0x41, 0xfe, 0x33, 0x4e, 0x85, - 0xd7, 0x93, 0x47, 0xe4, 0x70, 0xd2, 0xfe, 0xd9, 0x45, 0x54, 0x1d, 0x83, 0x2c, 0x54, - 0xba, 0xaa, 0x3c, 0xb7, 0x52, 0x6c, 0x38, 0x53, 0x95, 0x4d, 0xb4, 0xf7, 0x35, 0x47, - 0xcc, 0x7c, 0x27, 0xfd, 0x38, 0x39, 0x8b, 0xfa, 0x77, 0x04, 0x95, 0x2c, 0xb8, 0x41, - 0xe3, 0x8b, 0x27, 0x0e, 0x4d, 0xb7, 0x43, 0x5f, 0x0e, 0xe2, 0x2f, 0x57, 0xd7, 0xad, - 0x32, 0x70, 0xbd, 0x0c, 0x88, 0xe7, 0x1b, 0x4b, 0x86, 0x4c, 0xf2, 0x27, 0x7c, 0x65, - 0xda, 0xa1, 0x0a, 0x6d, 0xad, 0x4c, 0x7a, 0xbe, 0xcd, 0x95, 0xcc, 0x4e, 0xbe, 0xc3, - 0x9c, 0x08, 0x40, 0x4b, 0x52, 0x2e, 0x4e, 0xcc, 0x15, 0x45, 0x71, 0x3f, 0x76, 0xbe, - 0xbd, 0x3b, 0x5a, 0x0f, 0x2f, 0xeb, 0x34, 0x61, 0x93, 0x60, 0x65, 0xdb, 0xd1, 0x3f, - 0x6a, 0x1f, 0x61, 0xe1, 0xb1, 0x42, 0xa2, 0xaf, 0x2e, 0x5a, 0x48, 0x2b, 0xa2, 0xc5, - 0x0c, 0xf0, 0x31, 0x70, 0x49, 0xc0, 0xb3, 0xbf, 0xd6, 0xd5, 0xe9, 0x24, 0x0e, 0xba, - 0x91, 0x11, 0xd2, 0x03, 0x0f, 0xde, 0xa1, 0x7e, 0x33, 0xb6, 0x52, 0x40, 0x20, 0xd3, - 0x0b, 0x0c, 0x4f, 0x80, 0x69, 0x28, 0x5f, 0x3a, 0x6c, 0xa2, 0x67, 0xd2, 0x87, 0xd0, - 0x1e, 0x82, 0x7d, 0x84, 0x22, 0xbf, 0x54, 0x26, 0xe1, 0x16, 0x88, 0xbf, 0xc7, 0x37, - 0x56, 0xaf, 0x18, 0x41, 0xb1, 0xc8, 0x7e, 0x12, 0x6c, 0xb5, 0x0c, 0x91, 0x4b, 0x5b, - 0x2b, 0x86, 0x73, 0x48, 0x8a, 0xd3, 0xb0, 0x74, 0xca, 0xd7, 0x7a, 0x38, 0x40, 0xeb, - 0x12, 0xdd, 0x68, 0x8f, 0x31, 0x3e, 0xe1, 0xe9, 0xff, 0x8c, 0x47, 0x9a, 0x67, 0x8f, - 0x27, 0x63, 0x56, 0xfc, 0x9d, 0x65, 0xe1, 0xd5, 0xb4, 0xc1, 0xe9, 0x85, 0x5b, 0x41, - 0x75, 0xdb, 0x14, 0x4f, 0x77, 0x67, 0xc1, 0x20, 0x61, 0x76, 0x91, 0x90, 0xfe, 0x6b, - 0x5e, 0x51, 0x56, 0x3b, 0x91, 0xf9, 0x4d, 0x13, 0x1a, 0x2b, 0x79, 0x6b, 0xd2, 0x98, - 0x0e, 0xd0, 0xda, 0xb4, 0xae, 0x7a, 0x71, 0x10, 0xe9, 0x20, 0x00, 0x7a, 0x75, 0x71, - 0x58, 0xa5, 0xeb, 0x86, 0x62, 0xcb, 0xf8, 0x9d, 0xdf, 0xfe, 0x9d, 0x81, 0x96, 0x82, - 0x13, 0x13, 0xcd, 0xc0, 0x01, 0x08, 0x85, 0x3f, 0xc4, 0x74, 0x6b, 0x11, 0x1d, 0x5b, - 0x56, 0xda, 0x63, 0x8d, 0x8e, 0xd2, 0x97, 0x39, 0x18, 0x96, 0x0f, 0x5d, 0xfe, 0x93, - 0xea, 0xd3, 0xae, 0x52, 0x1e, 0x95, 0x7c, 0xec, 0x3c, 0x8d, 0x84, 0x3e, 0x8f, 0xce, - 0x23, 0x4c, 0x70, 0xad, 0x05, 0x51, 0x77, 0xf2, 0x35, 0x43, 0x9d, 0x60, 0x98, 0xbd, - 0xd7, 0x71, 0xb1, 0xcf, 0xcf, 0xad, 0xaa, 0xb4, 0xf5, 0x0a, 0x73, 0x78, 0x18, 0x5c, - 0x62, 0x40, 0x9f, 0x38, 0x3c, 0x8f, 0xf6, 0x58, 0xc2, 0xa2, 0xaf, 0x66, 0x49, 0x8c, - 0xfd, 0x81, 0xe9, 0x62, 0x76, 0x6a, 0xc6, 0xb7, 0x74, 0xe8, 0x84, 0x24, 0xfb, 0x4f, - 0x33, 0x18, 0x37, 0xd0, 0xa2, 0x85, 0x02, 0x70, 0x84, 0x77, 0xca, 0xf8, 0x78, 0x0a, - 0x15, 0x6d, 0x72, 0x3f, 0x68, 0xfc, 0xa7, 0x91, 0xe1, 0xcd, 0x23, 0x97, 0xbf, 0xc2, - 0xb2, 0x4c, 0x77, 0xc7, 0x65, 0xd9, 0xb2, 0xaf, 0x36, 0xf7, 0x32, 0xd5, 0x21, 0x07, - 0x51, 0x7e, 0xfd, 0x81, 0x57, 0xb2, 0x83, 0xb4, 0x40, 0xa6, 0x13, 0xf7, 0x56, 0xc3, - 0x64, 0xca, 0x10, 0x89, 0x71, 0xa8, 0x87, 0x81, 0x99, 0xa9, 0x3f, 0x26, 0x0b, 0xae, - 0xc3, 0xe8, 0x50, 0x03, 0x3c, 0xc0, 0x32, 0xc2, 0xe5, 0x3f, 0x82, 0x35, 0x76, 0xaf, - 0xfb, 0x4d, 0x3b, 0x11, 0x6e, 0x2d, 0x16, 0x04, 0x91, 0x52, 0xc3, 0x5a, 0xaa, 0x26, - 0x3a, 0xb3, 0x76, 0xf0, 0xad, 0x5e, 0xde, 0x6a, 0x74, 0x96, 0x07, 0xa2, 0x83, 0xe3, - 0x01, 0x6e, 0x62, 0x19, 0x1c, 0x0e, 0x8f, 0xde, 0x33, 0xe7, 0x18, 0xcd, 0x98, 0x95, - 0x91, 0xc9, 0xa2, 0x05, 0xd6, 0x08, 0xd9, 0x9f, 0xcb, 0x8a, 0x74, 0x71, 0x60, 0x3d, - 0x71, 0x6c, 0xb0, 0x1b, 0x56, 0x32, 0x8d, 0x7d, 0x88, 0x0a, 0xec, 0x28, 0x51, 0xf4, - 0xe6, 0xd8, 0xb5, 0x01, 0x6c, 0x25, 0x64, 0x7e, 0x90, 0x26, 0xeb, 0xb4, 0x41, 0x54, - 0x3e, 0x80, 0x12, 0xdb, 0xfc, 0xf0, 0x78, 0xd4, 0x01, 0x2b, 0x8c, 0x39, 0x18, 0x4d, - 0xd6, 0x4f, 0x38, 0x21, 0xb4, 0x77, 0x4a, 0xe4, 0xe3, 0x63, 0x65, 0xf8, 0xba, 0xf2, - 0xbd, 0x1f, 0x66, 0x67, 0xc0, 0x17, 0xa1, 0xe6, 0x5f, 0xf8, 0xa1, 0x55, 0x44, 0x58, - 0xfb, 0x3f, 0x36, 0x7c, 0x02, 0x72, 0x17, 0x52, 0xbf, 0xa5, 0x6f, 0xc7, 0xfd, 0x56, - 0x6a, 0xe9, 0x5f, 0xfb, 0x20, 0x8f, 0x91, 0x9e, 0xf1, 0x2f, 0x4c, 0xf8, 0xa2, 0xfd, - 0xd1, 0x41, 0xa8, 0xdf, 0x55, 0x9b, 0xdd, 0xb7, 0xb8, 0xd1, 0xf0, 0x4e, 0xe6, 0xd4, - 0xcf, 0x78, 0x05, 0xd1, 0x42, 0x98, 0x9c, 0xaf, 0x21, 0x6d, 0xfa, 0xe9, 0x85, 0xfa, - 0xaa, 0xb9, 0x97, 0x4f, 0x6d, 0x9f, 0x8a, 0xa1, 0x12, 0x90, 0x84, 0xdb, 0x8d, 0xb9, - 0x12, 0xb1, 0x65, 0x5f, 0x59, 0x5f, 0xfb, 0xaa, 0x66, 0x49, 0x1a, 0xb4, 0x65, 0x5f, - 0xd7, 0x34, 0xcf, 0xd4, 0xbb, 0x0c, 0x02, 0x89, 0xd4, 0xbc, 0xc8, 0xfc, 0x5e, 0x99, - 0x43, 0xb3, 0x51, 0xcb, 0x14, 0x7c, 0x8d, 0xb0, 0x59, 0xa2, 0x40, 0x04, 0xd1, 0xc3, - 0xe3, 0xbb, 0x4c, 0x14, 0xa8, 0x81, 0xe5, 0x10, 0x1a, 0xcb, 0x73, 0x6c, 0x65, 0xc5, - 0xd5, 0x79, 0xac, 0xb6, 0x7e, 0xe8, 0x5a, 0x56, 0x02, 0x77, 0xb4, 0x33, 0x38, 0xfe, - 0x79, 0xd3, 0x4b, 0x77, 0x2c, 0x5d, 0xa0, 0x01, 0xda, 0x3b, 0x5a, 0x33, 0x83, 0xdd, - 0x81, 0x31, 0x9a, 0x0b, 0x45, 0x42, 0xe6, 0xd7, 0xe4, 0x6e, 0xed, 0x53, 0x14, 0xcc, - 0x70, 0xeb, 0x23, 0x1d, 0xe2, 0x7b, 0x6e, 0x76, 0x0d, 0xb5, 0x98, 0xba, 0x19, 0x99, - 0x5c, 0xf6, 0x9b, 0xe0, 0xe4, 0x45, 0x8e, 0x35, 0xf3, 0xf2, 0x74, 0xac, 0xa2, 0x45, - 0x5d, 0x43, 0xfe, 0x33, 0x44, 0xe1, 0x83, 0xc6, 0xdc, 0x47, 0xc8, 0x57, 0xdb, 0xe9, - 0x90, 0x7b, 0x41, 0xe4, 0x10, 0x06, 0xd9, 0x1b, 0x25, 0xad, 0xca, 0xfc, 0x09, 0x8f, - 0xe6, 0x6f, 0x75, 0x54, 0xbe, 0x8d, 0xad, 0x49, 0x3c, 0x4f, 0x4b, 0x1d, 0xbf, 0x7a, - 0x51, 0x46, 0x41, 0x39, 0xdb, 0x47, 0x4a, 0xfa, 0xb5, 0x57, 0x2f, 0x92, 0xa2, 0x23, - 0x2b, 0x59, 0xbe, 0x56, 0xa7, 0x2c, 0x05, 0x05, 0x14, 0x9d, 0xae, 0x5c, 0xde, 0x1e, - 0x60, 0x28, 0x77, 0x03, 0x7d, 0xe7, 0x80, 0x2b, 0x5f, 0x6f, 0xa4, 0x7a, 0x4c, 0x9a, - 0x3e, 0x52, 0xd6, 0xca, 0x15, 0x33, 0x99, 0x20, 0x25, 0x4e, 0x9f, 0xfb, 0x53, 0xc7, - 0xb8, 0x34, 0xcc, 0x02, 0x88, 0xed, 0x99, 0x05, 0xa1, 0x84, 0x1e, 0x93, 0x90, 0xea, - 0x94, 0xa8, 0x89, 0x8b, 0xd4, 0xc6, 0xb6, 0xd6, 0x02, 0x7e, 0x4d, 0x43, 0xc7, 0x86, - 0x72, 0x42, 0x51, 0x5b, 0xbe, 0xef, 0xe1, 0x23, 0x40, 0xfc, 0x04, 0x42, 0x8a, 0x82, - 0x4e, 0xa7, 0xcf, 0x56, 0xad, 0x2a, 0x64, 0xed, 0x36, 0x8b, 0x71, 0x31, 0x5d, 0x80, - 0xce, 0xe8, 0x46, 0x00, 0x7c, 0xff, 0x1d, 0x2e, 0xea, 0x2c, 0x3f, 0x0f, 0x92, 0x15, - 0x37, 0x30, 0x4a, 0xe5, 0x98, 0xf9, 0x8d, 0xd1, 0x0d, 0x1f, 0x10, 0x28, 0x11, 0xa4, - 0xe2, 0xd1, 0x61, 0xc3, 0xfd, 0x8b, 0xbb, 0x19, 0x3d, 0x4b, 0x25, 0xbe, 0xe9, 0x50, - 0xac, 0x83, 0x9c, 0x0f, 0x9d, - ], - ss: [ - 0x9b, 0xd0, 0x18, 0xe8, 0x69, 0xbb, 0x01, 0xb6, 0x3f, 0xb8, 0xf5, 0xda, 0x37, 0x4a, - 0x73, 0xd3, 0x47, 0xea, 0x14, 0xcb, 0x2b, 0xc5, 0x70, 0xb1, 0x3d, 0x09, 0x08, 0xe2, - 0x28, 0x8e, 0xc4, 0x56, - ], - }, - TestVector { - seed: [0x01; 32], - randomness: [0x65; 128], - ek: &[ - 0xec, 0x7b, 0x50, 0xcd, 0xdc, 0x83, 0x60, 0xf9, 0x8b, 0x18, 0x9b, 0xac, 0x73, 0xd3, - 0x95, 0xef, 0x94, 0x7b, 0x37, 0xd8, 0x45, 0x38, 0x86, 0xa2, 0x53, 0x26, 0x9f, 0x7b, - 0x18, 0xb9, 0xeb, 0x78, 0xc1, 0xb6, 0x32, 0x12, 0x47, 0x1a, 0x0f, 0x97, 0x97, 0x93, - 0xf9, 0x93, 0x6b, 0x3f, 0x49, 0x6f, 0x4b, 0x53, 0x94, 0xea, 0x69, 0xc2, 0xa3, 0x57, - 0x29, 0xf9, 0x1c, 0x68, 0x8f, 0x6b, 0xbb, 0xb8, 0x64, 0xcd, 0x5e, 0x87, 0x10, 0x86, - 0x76, 0xc4, 0x01, 0x4c, 0x2b, 0xa9, 0x82, 0x04, 0xf9, 0x11, 0xbe, 0xca, 0xe3, 0x3a, - 0x71, 0xe8, 0x32, 0xac, 0x01, 0x2b, 0xb8, 0x27, 0x57, 0x88, 0x10, 0x95, 0x5f, 0x8c, - 0x6e, 0x2d, 0x26, 0xc0, 0xb1, 0x7b, 0x7b, 0xa5, 0x74, 0x99, 0x08, 0x84, 0x54, 0x6b, - 0xa5, 0x8b, 0xf6, 0x78, 0x57, 0x21, 0xf3, 0x85, 0x4f, 0x43, 0x4c, 0xfe, 0xa6, 0x02, - 0xe8, 0x59, 0x5c, 0x71, 0x64, 0x2e, 0x8d, 0x4c, 0x70, 0x93, 0x4b, 0x7e, 0x54, 0xc6, - 0x38, 0xf5, 0xa1, 0x3e, 0x1a, 0x13, 0x6b, 0xc8, 0x65, 0x65, 0xe6, 0xb4, 0x0a, 0xbc, - 0x16, 0x3c, 0xa6, 0x56, 0x50, 0xba, 0xf9, 0x53, 0xde, 0x7b, 0xb9, 0x9b, 0x13, 0x8a, - 0xc1, 0xb6, 0x95, 0x02, 0x31, 0x03, 0xc9, 0xb4, 0x17, 0x85, 0x3c, 0x9d, 0x42, 0xe5, - 0x4f, 0xdb, 0x81, 0x61, 0x74, 0x65, 0x9d, 0x85, 0xa7, 0x83, 0xe3, 0xd4, 0x61, 0x3d, - 0xb1, 0xcb, 0xba, 0xa6, 0x3f, 0xb6, 0x67, 0xa4, 0xa6, 0x36, 0x80, 0x4b, 0x6c, 0x4a, - 0xe8, 0x21, 0xac, 0x5d, 0x65, 0x56, 0x68, 0x8b, 0xab, 0x1d, 0xc1, 0x0d, 0x67, 0x79, - 0xb4, 0x85, 0xc6, 0x3c, 0x0d, 0xda, 0xcb, 0x91, 0x83, 0x7c, 0x4f, 0xf3, 0x40, 0x2e, - 0x62, 0x14, 0x18, 0x80, 0x72, 0xb4, 0x18, 0x6a, 0x39, 0xc6, 0x5b, 0xde, 0x52, 0x4c, - 0x68, 0x3c, 0x95, 0xd3, 0xc8, 0xb6, 0x5e, 0x37, 0x10, 0x4f, 0x55, 0x1b, 0x6a, 0x36, - 0x02, 0xed, 0xa5, 0x0b, 0x78, 0x71, 0x82, 0xd7, 0x03, 0xac, 0x6a, 0x22, 0x14, 0x28, - 0xb4, 0x55, 0x3e, 0x3b, 0x99, 0xc2, 0xb2, 0x51, 0xef, 0x64, 0x2e, 0x31, 0x25, 0x6c, - 0x32, 0x9b, 0x21, 0xd1, 0x24, 0x6a, 0x71, 0x45, 0x6f, 0xce, 0x70, 0x0d, 0x7f, 0x50, - 0xcf, 0xe5, 0x39, 0x0a, 0x1c, 0x37, 0xbc, 0x13, 0x38, 0x09, 0xf1, 0x02, 0xc2, 0x29, - 0x14, 0xa1, 0x40, 0x2c, 0x20, 0x5c, 0x05, 0x12, 0xb7, 0x33, 0xaf, 0xee, 0xa0, 0x44, - 0x11, 0xca, 0x5e, 0xbb, 0x0b, 0xca, 0x93, 0x92, 0xb1, 0xee, 0x23, 0x93, 0x5e, 0xb1, - 0x96, 0x02, 0x47, 0x32, 0xda, 0xa2, 0xa1, 0xf7, 0x93, 0x58, 0xe6, 0xe7, 0x4b, 0x73, - 0xc9, 0x65, 0xa9, 0xe7, 0x47, 0x78, 0xdc, 0x69, 0x21, 0x44, 0x2b, 0x19, 0x32, 0x8f, - 0x62, 0x16, 0xa5, 0xe8, 0x14, 0xcc, 0xc0, 0x63, 0x9a, 0x86, 0x3a, 0x43, 0x7a, 0x61, - 0x4d, 0xef, 0x5a, 0x61, 0xf3, 0x88, 0x52, 0x15, 0x10, 0x11, 0xb0, 0x4a, 0x37, 0xbb, - 0xc7, 0x8c, 0x1e, 0xba, 0x4d, 0x8d, 0x1b, 0x3a, 0x16, 0x22, 0xa0, 0xdf, 0xf7, 0x4d, - 0x25, 0xc7, 0x31, 0xab, 0xb2, 0xa5, 0xfe, 0x59, 0x19, 0xf8, 0x35, 0xbd, 0x3d, 0xd9, - 0x73, 0x30, 0xcb, 0xb7, 0xdb, 0xa0, 0xb7, 0x42, 0x60, 0xc9, 0x63, 0x40, 0x21, 0x60, - 0xc4, 0x01, 0x7d, 0x92, 0x25, 0x6a, 0x37, 0x13, 0xc9, 0xe7, 0x7e, 0xa0, 0xf4, 0x90, - 0x1a, 0xcc, 0xbd, 0x38, 0x71, 0x55, 0x11, 0x78, 0x4c, 0x9e, 0xc2, 0x87, 0xdd, 0x85, - 0xa7, 0x69, 0xe0, 0x81, 0x85, 0x4b, 0x32, 0xab, 0xa9, 0x32, 0x2a, 0x38, 0x40, 0xf6, - 0x06, 0x51, 0x33, 0x22, 0x8c, 0x41, 0x85, 0x1a, 0xfc, 0xb4, 0x0e, 0xa5, 0x09, 0xcf, - 0xbb, 0x86, 0x14, 0x5f, 0xb8, 0x85, 0x3c, 0xe1, 0x4c, 0x64, 0x96, 0x91, 0x13, 0x6b, - 0x86, 0x60, 0xb0, 0x07, 0x7f, 0x3b, 0x2f, 0x9d, 0xa8, 0x2d, 0x48, 0x3c, 0x14, 0x14, - 0xc3, 0x9a, 0x97, 0x77, 0x66, 0x58, 0x99, 0x13, 0x1a, 0x83, 0x36, 0xfb, 0x82, 0x84, - 0x80, 0x98, 0x6d, 0xf1, 0x02, 0x62, 0x8d, 0x10, 0xb5, 0x42, 0x39, 0xcc, 0x20, 0x23, - 0x14, 0x57, 0xd4, 0xbb, 0xb7, 0x01, 0x6f, 0x76, 0x02, 0x96, 0x61, 0xf1, 0x4f, 0xfd, - 0x35, 0x32, 0xe2, 0xf8, 0x49, 0x4e, 0x16, 0x13, 0x43, 0x07, 0x30, 0xab, 0x91, 0x56, - 0x83, 0xc3, 0xc8, 0xc4, 0xdb, 0x2b, 0x43, 0x73, 0xa3, 0x05, 0x7a, 0x09, 0x7e, 0x23, - 0x33, 0x36, 0x05, 0x39, 0x8b, 0x15, 0xcc, 0x4d, 0x6a, 0xc3, 0xfb, 0xd0, 0x73, 0x2f, - 0x21, 0x02, 0x6b, 0xb0, 0xcd, 0x51, 0xfb, 0x73, 0x8a, 0x74, 0x04, 0x67, 0x11, 0x4e, - 0x7c, 0x66, 0x25, 0x6b, 0x83, 0x00, 0x22, 0xf2, 0x8c, 0x02, 0x83, 0x92, 0xcf, 0xf8, - 0x01, 0x3d, 0x61, 0x7c, 0x77, 0xa4, 0x7b, 0xbd, 0xa1, 0x1c, 0x4a, 0x52, 0x2f, 0x8f, - 0x2b, 0x49, 0xf2, 0x82, 0x2c, 0xc0, 0x63, 0x38, 0x60, 0x56, 0x71, 0xfc, 0xa4, 0x51, - 0x8d, 0xf9, 0xb3, 0xc5, 0x06, 0x53, 0x2c, 0x9c, 0xca, 0x31, 0x75, 0x33, 0x0f, 0x87, - 0x33, 0xce, 0x11, 0xcb, 0x3f, 0xd8, 0xb9, 0x52, 0x39, 0xce, 0xeb, 0xc9, 0x48, 0x3c, - 0xb6, 0x8b, 0xff, 0x43, 0xb6, 0x22, 0x91, 0x1f, 0xcf, 0x4a, 0x9c, 0x57, 0xc2, 0x26, - 0xca, 0xa3, 0x8b, 0xf0, 0xb0, 0x81, 0x53, 0x59, 0x99, 0xf5, 0x73, 0x01, 0x6b, 0x14, - 0x56, 0x3e, 0xc4, 0x82, 0x6d, 0xc2, 0x81, 0xdb, 0xab, 0xc6, 0x33, 0x86, 0x8a, 0x1d, - 0x90, 0x3d, 0x59, 0x20, 0x7f, 0xc6, 0x62, 0xa2, 0x93, 0x73, 0x50, 0x85, 0xc0, 0x1f, - 0x40, 0xb5, 0xb5, 0x6c, 0xbb, 0x79, 0x5e, 0xca, 0xbf, 0xad, 0x70, 0x9d, 0x61, 0x1c, - 0xac, 0x73, 0xea, 0xca, 0x57, 0x97, 0x68, 0x21, 0x3c, 0x18, 0xc9, 0x69, 0xc5, 0x9b, - 0xe5, 0x8f, 0xce, 0xf6, 0xbd, 0xd8, 0xa8, 0x51, 0x92, 0x90, 0x7c, 0xd0, 0x77, 0x3f, - 0x81, 0xea, 0xa2, 0x4b, 0xe0, 0x7e, 0x0d, 0x62, 0x0e, 0x96, 0x85, 0xac, 0xb0, 0xc6, - 0xb0, 0xf5, 0x4b, 0x47, 0xdf, 0xfb, 0x51, 0x03, 0x84, 0x24, 0x1c, 0x4b, 0x73, 0x3f, - 0xe0, 0x8d, 0xac, 0xb2, 0x85, 0x2b, 0x2b, 0x74, 0xcc, 0x01, 0x4e, 0x97, 0x4a, 0x5e, - 0x9d, 0xb3, 0x5d, 0x80, 0xd7, 0xb8, 0x3a, 0xd3, 0x1d, 0xa1, 0x48, 0x7a, 0x01, 0x70, - 0xba, 0x7f, 0xbc, 0x1c, 0x55, 0x1a, 0x6f, 0x1e, 0xec, 0xb5, 0x72, 0x08, 0x41, 0x80, - 0xb2, 0x56, 0x96, 0x27, 0x48, 0xd5, 0xe3, 0x20, 0x0b, 0x73, 0x1a, 0xc7, 0xc3, 0x92, - 0x85, 0x85, 0xa1, 0x53, 0xb1, 0x67, 0xc9, 0x2a, 0x48, 0xcd, 0x91, 0x66, 0x8c, 0x77, - 0x37, 0x07, 0xc0, 0x54, 0xaf, 0x16, 0xaa, 0x7b, 0xfa, 0xca, 0xa1, 0x61, 0xa6, 0x20, - 0x60, 0x0e, 0x8d, 0x08, 0xcc, 0x97, 0x60, 0x1a, 0x53, 0x39, 0x1d, 0xa0, 0x24, 0x7e, - 0x5f, 0xca, 0x60, 0xcd, 0x1b, 0xb6, 0x5e, 0xc0, 0x41, 0x71, 0x77, 0xa9, 0xeb, 0x78, - 0xcd, 0xe5, 0xaa, 0x1d, 0xfa, 0xe3, 0x4e, 0x94, 0x84, 0x17, 0xb3, 0xcc, 0x0b, 0x22, - 0x38, 0x03, 0xf5, 0xf4, 0x0e, 0x8a, 0xe3, 0xa3, 0x82, 0x84, 0x8f, 0xf8, 0x0c, 0x41, - 0x85, 0x82, 0x40, 0x76, 0x42, 0x3a, 0xe4, 0xc1, 0x37, 0xbd, 0x30, 0xbd, 0x81, 0xf0, - 0x40, 0x95, 0xc2, 0x0a, 0x01, 0xe0, 0xa4, 0x9f, 0x66, 0x4f, 0x8f, 0x2b, 0x7f, 0x6b, - 0xf6, 0xa9, 0x90, 0x99, 0x3c, 0xbc, 0x05, 0x96, 0xa5, 0x14, 0xcc, 0xeb, 0xc5, 0x78, - 0xc6, 0x41, 0x8e, 0x82, 0x59, 0x03, 0xae, 0x11, 0xac, 0x52, 0x83, 0x1c, 0x6a, 0x48, - 0xc6, 0x77, 0x27, 0x40, 0x9e, 0xd7, 0x27, 0x4e, 0xea, 0x03, 0xee, 0xf3, 0x20, 0x94, - 0x27, 0x1b, 0x02, 0xd4, 0x53, 0x55, 0x63, 0xaa, 0x49, 0x24, 0xa2, 0x66, 0x68, 0x71, - 0xa4, 0xb6, 0x90, 0x54, 0x0c, 0x78, 0xb0, 0x60, 0x43, 0xbc, 0xa3, 0x1c, 0xa4, 0xe4, - 0x2a, 0x03, 0x65, 0x0e, 0xca, 0xb7, 0x47, 0x92, 0x01, 0x72, 0x17, 0xd1, 0x06, 0x15, - 0xd0, 0xac, 0xde, 0xe1, 0x24, 0xe3, 0x22, 0x2c, 0x90, 0xd7, 0x93, 0x62, 0x20, 0x7e, - 0x4f, 0x77, 0x79, 0xe0, 0x97, 0x50, 0x1c, 0xf1, 0x40, 0xb1, 0xa3, 0x43, 0x1e, 0xe0, - 0xcf, 0x27, 0xb2, 0x3a, 0x50, 0x37, 0x3d, 0x59, 0x97, 0x6d, 0x82, 0xb5, 0xb1, 0xce, - 0x16, 0x5f, 0x4a, 0xa1, 0x36, 0x11, 0x57, 0xaf, 0xad, 0x56, 0x40, 0x81, 0xc8, 0x57, - 0x77, 0x58, 0x4d, 0xd6, 0x05, 0x8a, 0x1a, 0x46, 0x63, 0xb5, 0x32, 0x34, 0xd7, 0x26, - 0x4f, 0xba, 0xc6, 0x87, 0x73, 0x51, 0xd1, 0x92, 0x8c, 0x67, 0x80, 0xf7, 0x7d, 0x47, - 0x20, 0x93, 0x37, 0x27, 0x1e, 0x30, 0x53, 0x70, 0xdf, 0x9a, 0xef, 0xfb, 0x74, 0xd7, - 0xc7, 0x5d, 0xe5, 0x5c, 0x00, 0x6e, 0x2b, 0x2a, 0x04, 0x7a, 0x93, 0xf1, 0x83, 0x3d, - 0xa6, 0xf7, 0xc4, 0x22, 0x6f, 0x8c, 0x05, 0x39, 0x2b, 0xa9, 0x06, 0x26, 0xe4, 0xed, - 0x81, 0xbc, 0x9d, 0xff, 0x57, 0x3a, 0xa2, 0x43, 0x05, 0x5f, 0x08, 0xa5, 0x67, 0xe2, - 0x95, 0x77, 0xce, 0x8d, 0xaf, 0xa0, 0x82, 0x97, 0xe6, 0xb0, 0x4a, 0x77, 0x9b, 0xed, - 0x85, 0x2b, 0x95, 0xec, 0x0a, 0xc1, 0x4e, 0x04, 0xb1, 0xcb, 0x58, 0xeb, 0x65, 0x64, - 0x55, 0xba, 0xd9, - ], - dk: [0x01; 32], - dk_pq: [ - 0xdb, 0xf7, 0x7c, 0x8d, 0x79, 0xc8, 0x0a, 0xd6, 0xb0, 0x76, 0x3d, 0x42, 0xa3, 0xfe, - 0x53, 0xf0, 0xf1, 0xdc, 0x03, 0x02, 0x20, 0xc2, 0xe3, 0xfe, 0xdc, 0x2a, 0xa9, 0x03, - 0xab, 0xfc, 0xad, 0x08, 0x33, 0x0d, 0xb4, 0xba, 0x49, 0x0c, 0xce, 0xe0, 0x95, 0x98, - 0x8d, 0x93, 0x55, 0xe8, 0x16, 0x05, 0x5c, 0xf9, 0x86, 0xe2, 0x80, 0x53, 0x2d, 0x47, - 0xcc, 0x19, 0xf2, 0x24, 0x0c, 0xc2, 0x34, 0x19, - ], - dk_t: [ - 0xa2, 0x03, 0x15, 0x48, 0x5f, 0x73, 0xa3, 0xc1, 0x7e, 0x18, 0xa3, 0xf1, 0x55, 0xac, - 0x33, 0xe9, 0xa9, 0x80, 0x89, 0x6b, 0x2f, 0x17, 0xdc, 0x7f, 0x96, 0xa9, 0x49, 0x5d, - 0x95, 0x84, 0x05, 0x60, - ], - ct: &[ - 0x60, 0x0e, 0xcf, 0x40, 0x26, 0x68, 0x38, 0x98, 0xd0, 0xe3, 0x39, 0xee, 0xea, 0x9e, - 0xbd, 0x43, 0x7a, 0x4a, 0x80, 0x29, 0x52, 0xbf, 0x32, 0xbf, 0xa3, 0x26, 0xb4, 0x8e, - 0xb7, 0x49, 0x46, 0xd0, 0xcd, 0xd5, 0x43, 0x7e, 0x70, 0xdf, 0x4b, 0x6b, 0x7a, 0xcb, - 0xf7, 0x9e, 0xfe, 0x60, 0xdd, 0xcd, 0xe9, 0x85, 0xac, 0xfd, 0x8c, 0x2d, 0x23, 0x77, - 0x5e, 0x1e, 0xcc, 0x54, 0xeb, 0x6e, 0xe0, 0x3d, 0xcc, 0x9b, 0x4a, 0xac, 0x15, 0x01, - 0x72, 0x73, 0x78, 0x31, 0xad, 0xfa, 0xf0, 0xe6, 0x3a, 0x47, 0x82, 0xba, 0xd2, 0xa7, - 0x85, 0xb9, 0xc3, 0x9b, 0xf5, 0xe3, 0x46, 0x40, 0xea, 0x3d, 0xa4, 0x47, 0xef, 0xc2, - 0xa0, 0x3e, 0x23, 0xa3, 0x37, 0xad, 0x1f, 0x54, 0x2c, 0x32, 0xc2, 0xeb, 0x46, 0xf7, - 0xb8, 0x8d, 0x0b, 0xfb, 0xa8, 0x7d, 0x8e, 0xfe, 0x8c, 0xd4, 0x45, 0x6e, 0x6f, 0x21, - 0xbe, 0xeb, 0xcf, 0x3d, 0xd5, 0x02, 0xb5, 0x3d, 0x53, 0x73, 0x95, 0x75, 0x0c, 0xe9, - 0x63, 0xd2, 0x89, 0xef, 0xf7, 0x46, 0x21, 0x54, 0x5d, 0x4a, 0x5d, 0x92, 0x62, 0xbd, - 0x14, 0xb3, 0xdd, 0xdd, 0x4e, 0xf8, 0x80, 0xe6, 0x5c, 0xbe, 0x8f, 0x2f, 0x8a, 0xad, - 0x82, 0x6f, 0x57, 0xf7, 0x27, 0xa6, 0x0a, 0xaa, 0xee, 0xe8, 0xc6, 0x9e, 0x89, 0xaf, - 0x6c, 0x53, 0x9f, 0xd4, 0xf2, 0x67, 0xc4, 0x4b, 0xee, 0x8b, 0x53, 0x85, 0xa4, 0x60, - 0xa7, 0xc8, 0xe4, 0xa8, 0x09, 0x95, 0x9d, 0xf8, 0x6c, 0x11, 0x36, 0xee, 0x23, 0xe7, - 0x54, 0x4c, 0xfa, 0x75, 0x24, 0xc6, 0xc0, 0x4e, 0xd9, 0xec, 0x29, 0xae, 0xd3, 0x07, - 0xb5, 0xdf, 0xd0, 0x10, 0x8f, 0x29, 0x29, 0x4a, 0xce, 0xeb, 0x51, 0x7a, 0x09, 0x8b, - 0x8c, 0xdb, 0xad, 0x59, 0x11, 0xbc, 0x75, 0xe9, 0x62, 0x58, 0xbb, 0xf3, 0x8a, 0x20, - 0x28, 0x8c, 0x69, 0x11, 0xb2, 0x34, 0x6f, 0x84, 0x2c, 0x09, 0x43, 0xbf, 0x8e, 0x9c, - 0x34, 0xa0, 0xa8, 0xe5, 0x18, 0xe9, 0x2c, 0x87, 0x61, 0xc6, 0xef, 0xe6, 0xb1, 0xd3, - 0xea, 0x8a, 0xed, 0x9b, 0x2c, 0x4f, 0xea, 0xcf, 0xbf, 0x35, 0x59, 0xf3, 0xa5, 0xe4, - 0x6e, 0x4d, 0xfd, 0xdf, 0x81, 0x93, 0x61, 0x83, 0xd4, 0xd1, 0xf9, 0xc8, 0xc1, 0x61, - 0x6b, 0x14, 0xdb, 0x20, 0x57, 0x43, 0x5a, 0xd7, 0x16, 0x55, 0xd7, 0x43, 0xfa, 0xd4, - 0x98, 0x7a, 0x19, 0xe8, 0x21, 0xd0, 0xac, 0x66, 0x6f, 0xf3, 0xe4, 0x6b, 0x7c, 0xc0, - 0xe9, 0x0b, 0x85, 0xe1, 0x96, 0x69, 0x62, 0x27, 0x9a, 0x48, 0xaf, 0xe2, 0xe9, 0xbb, - 0xce, 0x89, 0xc8, 0x19, 0xa8, 0xba, 0x52, 0x47, 0x6a, 0xf0, 0x74, 0xa0, 0x71, 0x49, - 0x53, 0x98, 0xbd, 0x49, 0x7f, 0x4d, 0x4f, 0x34, 0x02, 0x60, 0x25, 0x45, 0x29, 0x75, - 0xcf, 0xda, 0xa3, 0xe7, 0xe1, 0x83, 0xa9, 0x62, 0xbd, 0xa0, 0x09, 0x10, 0x82, 0x21, - 0xec, 0xb2, 0x0d, 0x21, 0x8c, 0x42, 0xe3, 0x87, 0x74, 0x01, 0x9d, 0x2d, 0xc3, 0x26, - 0x21, 0x27, 0x8b, 0x5e, 0x88, 0xf9, 0x9b, 0x62, 0xa9, 0xe7, 0x46, 0xd1, 0x6c, 0x16, - 0x91, 0xcc, 0xf3, 0xe7, 0xe9, 0x18, 0x5c, 0x3c, 0x49, 0x3e, 0x76, 0x17, 0xf4, 0x51, - 0xf6, 0x32, 0xc1, 0x61, 0xfb, 0xe6, 0xd8, 0xac, 0x32, 0x17, 0xf1, 0x0e, 0xd4, 0xbf, - 0xee, 0xe4, 0x7e, 0x49, 0x60, 0xec, 0x4a, 0x53, 0xe4, 0x85, 0x2c, 0xa0, 0x24, 0x15, - 0x43, 0x84, 0x84, 0x22, 0x04, 0x4a, 0x67, 0x56, 0x7a, 0x83, 0xe0, 0x9d, 0x8e, 0x74, - 0xb9, 0xd1, 0x1a, 0xf1, 0x7d, 0x53, 0xc4, 0x95, 0x65, 0xca, 0x53, 0xde, 0xda, 0x7c, - 0x4d, 0xf0, 0x76, 0xa3, 0xe1, 0xb6, 0x36, 0x8b, 0x19, 0x31, 0xd8, 0x1d, 0xb9, 0x3e, - 0x87, 0xf7, 0x5b, 0xea, 0x69, 0x24, 0xa3, 0x21, 0x37, 0x6f, 0xe7, 0x3b, 0x5a, 0x5b, - 0x07, 0xb8, 0x0a, 0x98, 0xdc, 0x3a, 0xb8, 0xd1, 0x47, 0x32, 0x54, 0x0f, 0x1b, 0x4b, - 0x71, 0x76, 0xe2, 0x74, 0xa9, 0x05, 0xd4, 0x53, 0xea, 0xc1, 0xca, 0xaf, 0xe2, 0xbf, - 0xe4, 0xe6, 0xc9, 0x04, 0x55, 0x6c, 0xa9, 0x1b, 0x01, 0xb2, 0x30, 0x22, 0x15, 0xab, - 0x3d, 0xfe, 0x6b, 0x49, 0xf4, 0x69, 0x63, 0xdf, 0x63, 0x2a, 0x9e, 0x7c, 0xb8, 0x43, - 0x9c, 0xd5, 0xee, 0x56, 0xa1, 0xf8, 0xe2, 0xcd, 0x3f, 0xaa, 0xe5, 0xd8, 0xf3, 0x46, - 0x2d, 0x0f, 0xf9, 0x31, 0xf5, 0x03, 0x8c, 0xfa, 0x70, 0x25, 0x9d, 0x96, 0x31, 0x63, - 0xd6, 0x16, 0x3e, 0xf2, 0x2b, 0x0c, 0x32, 0x08, 0x1b, 0xff, 0x27, 0x63, 0xe9, 0x8d, - 0xa8, 0x78, 0x17, 0x04, 0x8d, 0x4c, 0xe7, 0x55, 0xe5, 0xd2, 0xb1, 0xcf, 0xe7, 0xd6, - 0xee, 0xab, 0x0f, 0xdb, 0xe7, 0x66, 0xc9, 0x5f, 0x12, 0x55, 0x37, 0xa0, 0x4b, 0xcf, - 0x99, 0x02, 0x6f, 0x9b, 0xd5, 0xbe, 0x3b, 0x26, 0xb9, 0xb7, 0x61, 0x4f, 0x13, 0x2f, - 0x67, 0x47, 0xdd, 0x6d, 0x96, 0x00, 0x9a, 0x85, 0xae, 0x6c, 0xbb, 0x1a, 0x14, 0xb9, - 0x23, 0x10, 0x99, 0xb6, 0x7b, 0x04, 0xd7, 0x84, 0x98, 0x75, 0xb6, 0x49, 0x2f, 0x3b, - 0x64, 0x82, 0xf8, 0xbd, 0xac, 0x30, 0x5f, 0x7e, 0xc2, 0x9f, 0x28, 0xef, 0x47, 0x39, - 0x93, 0x4c, 0x6a, 0x7a, 0x28, 0x00, 0xfb, 0xdb, 0xff, 0x6e, 0xb2, 0x23, 0x7d, 0x6a, - 0x08, 0x5d, 0xdf, 0xab, 0x85, 0x19, 0xdb, 0x1d, 0x2b, 0x1e, 0x63, 0xaa, 0x6c, 0xb9, - 0xb3, 0xb0, 0x44, 0x27, 0x89, 0x47, 0xdc, 0x3b, 0xcd, 0x32, 0x9a, 0xa4, 0x27, 0xd1, - 0x32, 0x67, 0xf9, 0x3a, 0x6c, 0xf2, 0xae, 0xe8, 0xa2, 0xab, 0x74, 0xd4, 0x28, 0x8f, - 0xe0, 0xb6, 0x76, 0xea, 0x85, 0x58, 0x68, 0x34, 0xab, 0x57, 0xe8, 0x63, 0xd4, 0x80, - 0x57, 0x03, 0xeb, 0x8b, 0xf6, 0xe7, 0x1f, 0xbb, 0x11, 0xa3, 0x86, 0xe7, 0xb6, 0x4a, - 0x0d, 0x66, 0x1d, 0xbd, 0x05, 0xf5, 0xe2, 0x92, 0x4f, 0x14, 0x19, 0xbc, 0x79, 0x9a, - 0x08, 0x9d, 0x44, 0xdd, 0xa9, 0x06, 0x6c, 0x6c, 0x50, 0x3f, 0x8c, 0x80, 0xbe, 0x8d, - 0xaa, 0x99, 0xbd, 0x48, 0x33, 0x8d, 0xae, 0xb4, 0x91, 0x1a, 0xcf, 0x19, 0x32, 0x81, - 0x03, 0xc9, 0x6f, 0x40, 0xa7, 0x7f, 0xfd, 0x82, 0x7d, 0x52, 0x29, 0x4b, 0xa2, 0x1a, - 0xd1, 0xd5, 0x2f, 0xc2, 0x7e, 0x8b, 0x12, 0xad, 0x65, 0x88, 0x70, 0x24, 0xf4, 0x1e, - 0x63, 0xfc, 0xfe, 0x65, 0x41, 0x52, 0x67, 0x6a, 0xc3, 0x63, 0xf2, 0x37, 0x7c, 0x5b, - 0x0b, 0x43, 0x7e, 0x07, 0x58, 0x97, 0xe3, 0x3d, 0xd8, 0xd5, 0x72, 0x27, 0xfc, 0x5a, - 0x53, 0x66, 0x29, 0xef, 0xad, 0x99, 0x8a, 0x27, 0x91, 0x03, 0x15, 0x0e, 0x7d, 0x47, - 0xe4, 0xb7, 0xd1, 0x1a, 0x0d, 0x64, 0x9d, 0x14, 0x6c, 0x65, 0x60, 0xc4, 0x8c, 0x9c, - 0x0c, 0x56, 0xc8, 0x11, 0xcf, 0xa6, 0xf3, 0xf6, 0x2c, 0xf7, 0x17, 0xae, 0x57, 0x15, - 0x97, 0xbc, 0x29, 0x7d, 0xee, 0xd8, 0x87, 0x67, 0x2d, 0x8a, 0x8c, 0xec, 0x29, 0x29, - 0xc2, 0xb5, 0x5b, 0x95, 0xf2, 0x6b, 0xd5, 0xd1, 0x0e, 0xf3, 0x0c, 0x0c, 0x4a, 0x62, - 0x95, 0xd5, 0xca, 0x60, 0x15, 0x38, 0xf5, 0xa2, 0x0a, 0xc1, 0x06, 0x4d, 0x2f, 0x4c, - 0x2a, 0x07, 0x8a, 0xf1, 0xb1, 0x62, 0x9a, 0x0c, 0x20, 0x3a, 0xd0, 0x47, 0x12, 0x5e, - 0xb9, 0xdc, 0xe0, 0xd1, 0x26, 0x0e, 0xef, 0x19, 0xcd, 0x4a, 0xd8, 0xec, 0x5d, 0x73, - 0xa0, 0x1b, 0xa2, 0x3e, 0x26, 0x6c, 0xc6, 0xdd, 0x26, 0x6c, 0x5a, 0x81, 0xaf, 0x58, - 0xcc, 0xf1, 0xb5, 0xce, 0x04, 0x40, 0xef, 0xdd, 0x1f, 0xe7, 0xbb, 0x42, 0x17, 0x76, - 0x79, 0xb5, 0xe5, 0x09, 0x5f, 0xfa, 0x0d, 0x45, 0x3b, 0xc1, 0x7b, 0x89, 0x21, 0x00, - 0x85, 0x31, 0xc2, 0xd0, 0x96, 0xa3, 0xa4, 0xa4, 0x85, 0x63, 0x37, 0x04, 0x62, 0xa5, - 0x9f, 0xe1, 0xfa, 0xff, 0x2a, 0x81, 0x60, 0x3f, 0x2d, 0x09, 0xca, 0x2e, 0x0b, 0xea, - 0xc4, 0x42, 0x04, 0xa4, 0xe0, 0x3a, 0xa8, 0x52, 0x74, 0x5b, 0x17, 0x47, 0xbb, 0x6c, - 0x42, 0x42, 0x06, 0xae, 0x09, 0x3e, 0xcb, 0x91, 0x78, 0x97, 0x04, 0x20, 0x39, 0x48, - 0x06, 0x0e, 0xfd, 0x68, 0x1e, 0xda, 0xf7, 0xf1, 0xab, 0x49, 0xd5, 0xf6, 0x31, 0xf1, - 0x12, 0x2d, 0x2e, 0x0c, 0xb4, 0x52, 0xa2, 0xce, 0x54, 0x90, 0x49, 0x7b, 0x32, 0xdf, - 0x22, 0x53, 0x72, 0xb8, 0x0b, 0x86, 0xe5, 0xa7, 0x10, 0xa6, 0x4e, 0x8b, 0x4d, 0x92, - 0x31, 0x84, 0x14, 0xa1, 0x79, 0x47, 0x9b, 0x96, 0x82, 0x7f, 0x33, 0x79, 0xde, 0x24, - 0x71, 0x63, 0x94, 0x90, 0x84, - ], - ss: [ - 0xd3, 0x3a, 0x83, 0xed, 0xb4, 0xfb, 0x5a, 0x75, 0x08, 0x68, 0x6b, 0xa4, 0xdd, 0xff, - 0x00, 0x1c, 0x17, 0xba, 0x88, 0x90, 0xe9, 0xe3, 0xbe, 0x06, 0x7d, 0x50, 0xc9, 0x59, - 0xb5, 0x12, 0xf9, 0xbe, - ], - }, - TestVector { - seed: [0x02; 32], - randomness: [0x66; 128], - ek: &[ - 0x08, 0x11, 0x8d, 0x88, 0x19, 0x77, 0x22, 0x92, 0xc9, 0x76, 0xec, 0x97, 0x1e, 0xe3, - 0x03, 0x91, 0x95, 0x80, 0x0c, 0x82, 0x35, 0x44, 0x48, 0x45, 0x95, 0xcc, 0x63, 0x45, - 0x0b, 0x9d, 0xb9, 0x41, 0x43, 0x30, 0x41, 0x92, 0x08, 0xc5, 0x09, 0xcb, 0x62, 0x62, - 0x60, 0x67, 0xa8, 0xfd, 0x82, 0x59, 0x16, 0x01, 0x05, 0xb6, 0xd8, 0xa4, 0x02, 0x3b, - 0x05, 0x6f, 0x5a, 0xc2, 0xd6, 0x15, 0x9f, 0xa5, 0xf2, 0x45, 0xf0, 0x0c, 0x71, 0x95, - 0x39, 0xa4, 0x60, 0x14, 0x66, 0xf6, 0xb4, 0x5b, 0x2a, 0x68, 0xbd, 0xb0, 0xdb, 0x74, - 0x24, 0xd4, 0xca, 0xd4, 0x75, 0xa8, 0xd6, 0x8b, 0x0d, 0x6e, 0x08, 0x6c, 0x3f, 0x01, - 0x24, 0x14, 0xe2, 0x29, 0x00, 0xf0, 0x11, 0x79, 0xe8, 0xc9, 0x0a, 0x8b, 0xa1, 0xd2, - 0x85, 0xcd, 0xcc, 0x7c, 0x7a, 0xb1, 0xc7, 0x06, 0x4e, 0x2c, 0x15, 0x23, 0x3a, 0xce, - 0xe1, 0x83, 0xa1, 0x07, 0x5c, 0x04, 0xf0, 0x92, 0xa5, 0xe3, 0x67, 0x6b, 0x1e, 0xc0, - 0x6d, 0x15, 0xd3, 0x48, 0xe7, 0x78, 0x13, 0x46, 0xec, 0x95, 0x80, 0x6a, 0x5e, 0x00, - 0xf6, 0x4d, 0x1e, 0x10, 0x1b, 0xfb, 0x28, 0xbb, 0xc6, 0x82, 0x93, 0x72, 0xf3, 0x2b, - 0xed, 0xcc, 0x0d, 0xe9, 0xa7, 0x0a, 0x02, 0xe5, 0x08, 0xb7, 0x60, 0x42, 0x25, 0x05, - 0x48, 0x17, 0x09, 0xbe, 0xf1, 0x06, 0x97, 0xfb, 0xfa, 0x21, 0x9b, 0x99, 0xa8, 0x15, - 0xf4, 0x7e, 0x4b, 0xac, 0xab, 0x0e, 0x78, 0x9c, 0xa1, 0xe4, 0x14, 0xdb, 0x52, 0x9d, - 0xeb, 0x04, 0x3b, 0xd8, 0x52, 0x1c, 0x2d, 0x45, 0x6a, 0x06, 0x2a, 0x65, 0xae, 0xba, - 0x2a, 0x40, 0xdc, 0x6b, 0x9c, 0xe0, 0x24, 0x74, 0xa7, 0x1f, 0xdf, 0x85, 0x2f, 0x34, - 0x3b, 0x22, 0xd2, 0x11, 0x05, 0x19, 0x95, 0x5b, 0x96, 0x43, 0x82, 0xe7, 0x4a, 0x3c, - 0xf7, 0x85, 0x86, 0xea, 0xba, 0x35, 0x3b, 0x98, 0x22, 0x8b, 0x02, 0x68, 0xf8, 0x48, - 0x0b, 0x02, 0xc4, 0xb4, 0xee, 0x20, 0x81, 0x98, 0xfb, 0xc4, 0x72, 0x11, 0x7c, 0x4b, - 0xe5, 0x67, 0x85, 0x8c, 0x09, 0x7f, 0xb0, 0x86, 0x9a, 0x40, 0x58, 0x84, 0x18, 0x97, - 0x3c, 0x58, 0x75, 0x3d, 0xa8, 0x45, 0xe3, 0x6c, 0x0a, 0xdf, 0x39, 0xc5, 0x3e, 0xa9, - 0xc8, 0xae, 0x24, 0xc3, 0x43, 0xbc, 0x87, 0xbc, 0xc3, 0xbe, 0x69, 0xea, 0x40, 0xd9, - 0x49, 0x05, 0x92, 0xec, 0x99, 0xe9, 0xa8, 0x53, 0xf4, 0xf2, 0x2b, 0x02, 0x4a, 0x1b, - 0x15, 0x96, 0x2b, 0x04, 0x9a, 0x62, 0xbc, 0x19, 0x87, 0x06, 0xe3, 0x10, 0xc8, 0x52, - 0x4c, 0x51, 0x87, 0x27, 0x18, 0xd7, 0x6c, 0x6d, 0xb2, 0x5c, 0xd8, 0x24, 0xa1, 0xb7, - 0x5a, 0x94, 0xa7, 0xd3, 0x41, 0xca, 0x40, 0xbe, 0x12, 0x83, 0xb2, 0x11, 0x1b, 0x68, - 0x7b, 0xe6, 0x9d, 0x38, 0xb7, 0x29, 0x7a, 0x90, 0x38, 0x4b, 0x0c, 0x02, 0x69, 0xac, - 0x91, 0x1c, 0xd8, 0x03, 0x84, 0xb3, 0x26, 0x35, 0x72, 0x62, 0xac, 0x13, 0x68, 0x0d, - 0xca, 0x37, 0xee, 0x18, 0x47, 0x7a, 0xb2, 0x3e, 0x16, 0x44, 0x88, 0x05, 0x67, 0x6a, - 0xdb, 0xe1, 0xa5, 0xb7, 0x73, 0x2e, 0x73, 0xc0, 0xab, 0xc3, 0xc5, 0x18, 0x8e, 0x6c, - 0x7a, 0xda, 0x3c, 0x1f, 0x1f, 0x12, 0x46, 0x63, 0xe8, 0x3a, 0xd5, 0x89, 0x96, 0x74, - 0x25, 0x3e, 0x9b, 0xb1, 0x5f, 0x39, 0x90, 0x8b, 0xa4, 0x91, 0x7d, 0xc1, 0x10, 0x25, - 0xf7, 0x50, 0x44, 0x25, 0xa3, 0x05, 0x84, 0x86, 0x61, 0xc3, 0x8c, 0xb0, 0x9a, 0x82, - 0x02, 0x6d, 0x20, 0xc9, 0xbd, 0x23, 0x94, 0x9f, 0x28, 0x55, 0x19, 0xdb, 0x29, 0x84, - 0x18, 0x71, 0x80, 0x23, 0xc8, 0xd7, 0xe3, 0x7a, 0x5b, 0xb1, 0x06, 0x29, 0x51, 0xb4, - 0x32, 0x52, 0x49, 0xaa, 0xd5, 0x9a, 0xcc, 0x06, 0xb1, 0x01, 0x61, 0x41, 0x6c, 0xcc, - 0x78, 0xdb, 0x6c, 0x6c, 0x3f, 0x68, 0x5a, 0xd3, 0xd9, 0xb4, 0x91, 0x6c, 0x62, 0x21, - 0x63, 0x01, 0x7f, 0x96, 0x62, 0xda, 0x42, 0x34, 0xba, 0xb8, 0xb8, 0xb1, 0xe7, 0x72, - 0x90, 0x86, 0x7d, 0x48, 0xc2, 0x8a, 0x2c, 0xb3, 0x3c, 0x7d, 0x2c, 0x78, 0x74, 0xc2, - 0xbe, 0x93, 0x6c, 0xa0, 0xd6, 0xba, 0x90, 0x7d, 0x6a, 0x82, 0x3f, 0xa2, 0x4a, 0x18, - 0xc5, 0x6c, 0xc1, 0x24, 0x20, 0x9e, 0xa4, 0x88, 0xce, 0x62, 0x0c, 0x18, 0xd0, 0x0f, - 0xfc, 0x8b, 0x8f, 0x0c, 0x11, 0xcc, 0x58, 0x50, 0xc3, 0x0b, 0x3a, 0x0f, 0xb7, 0xfa, - 0xaf, 0x6e, 0x52, 0x6f, 0x9b, 0x08, 0x97, 0x22, 0x07, 0xa3, 0x8f, 0x76, 0x0b, 0xad, - 0x18, 0x24, 0x72, 0x60, 0x17, 0xa3, 0x06, 0x34, 0xfd, 0x23, 0x9e, 0xbd, 0xa5, 0x96, - 0x51, 0xb4, 0xc8, 0x16, 0x23, 0x46, 0xbb, 0x36, 0x52, 0xde, 0xc3, 0x9f, 0x56, 0x62, - 0x65, 0x47, 0x82, 0x9f, 0xfb, 0xb0, 0x52, 0xa5, 0xa6, 0x93, 0x0f, 0x27, 0x00, 0xfa, - 0xd3, 0x3f, 0xb1, 0xec, 0xa8, 0xbb, 0xc4, 0x0f, 0xcf, 0xe7, 0x78, 0x18, 0x93, 0x98, - 0xb5, 0x52, 0x7a, 0x09, 0xa2, 0x4a, 0x53, 0xa9, 0x58, 0xe5, 0xc2, 0x53, 0x53, 0x95, - 0x1b, 0x78, 0xd8, 0x59, 0x16, 0x45, 0x7c, 0x1c, 0x50, 0x46, 0xe4, 0x97, 0xae, 0x0f, - 0xa2, 0x48, 0x10, 0xe8, 0x2d, 0x36, 0x00, 0x50, 0xe4, 0xfa, 0x1b, 0xf5, 0x5b, 0x71, - 0x9a, 0xb8, 0xa0, 0x80, 0xc2, 0x3d, 0xcd, 0x80, 0xc0, 0xd4, 0x91, 0x5d, 0x84, 0x58, - 0x65, 0x2d, 0x47, 0x6f, 0x50, 0xf3, 0xa5, 0xb8, 0x0b, 0xa6, 0xff, 0xa9, 0xa7, 0x6b, - 0xd9, 0x52, 0x4d, 0xbb, 0x39, 0xdf, 0x78, 0x26, 0xcc, 0x50, 0x7a, 0x9d, 0x31, 0xaa, - 0x29, 0xb6, 0x20, 0x7e, 0xaa, 0x52, 0xb3, 0xe2, 0x24, 0x25, 0x9c, 0x49, 0x31, 0xb1, - 0xce, 0xd9, 0xb9, 0x7a, 0x42, 0xe6, 0x74, 0x57, 0x52, 0xac, 0x06, 0x03, 0x91, 0x7a, - 0x69, 0x4d, 0x7e, 0xc9, 0x51, 0x45, 0x09, 0x4e, 0xd0, 0x89, 0x00, 0x8a, 0xf6, 0x75, - 0xfe, 0x51, 0xb2, 0xb7, 0x99, 0x70, 0xab, 0xc2, 0x82, 0xdc, 0xb6, 0x32, 0xc1, 0xfc, - 0x3d, 0xab, 0x85, 0xad, 0x14, 0x89, 0x3d, 0x0a, 0xb6, 0x3b, 0x9e, 0x21, 0xa3, 0x68, - 0x84, 0x5e, 0x87, 0x2b, 0xb1, 0x46, 0x8a, 0xa2, 0x52, 0x55, 0x4f, 0x59, 0xf9, 0x0c, - 0x96, 0x75, 0xcd, 0x04, 0x4b, 0x93, 0x0e, 0x37, 0xa9, 0x6a, 0x21, 0x3a, 0x28, 0x27, - 0x76, 0x14, 0x44, 0x3c, 0xca, 0x43, 0x17, 0xe4, 0xa2, 0xaf, 0x9f, 0x4c, 0x71, 0x24, - 0xfa, 0x76, 0xe1, 0xd4, 0x8f, 0x38, 0x98, 0x1d, 0x7d, 0xf0, 0x3d, 0x2b, 0xf8, 0x40, - 0x61, 0x08, 0x61, 0xb2, 0x10, 0x30, 0x01, 0x56, 0xc3, 0xf9, 0x99, 0xaa, 0xac, 0x1b, - 0x29, 0x83, 0xc4, 0x5c, 0xf0, 0x00, 0x2c, 0x92, 0x20, 0x37, 0xbb, 0x40, 0x55, 0xdd, - 0x1c, 0x27, 0xdf, 0x51, 0x1c, 0xed, 0x57, 0x7b, 0xb8, 0x04, 0x6e, 0x00, 0x35, 0x07, - 0xaa, 0x7b, 0x2c, 0x52, 0x19, 0x46, 0x80, 0xb9, 0x3e, 0x2e, 0xb4, 0x07, 0x19, 0x53, - 0x9b, 0x8a, 0x93, 0xb8, 0xe8, 0x3b, 0x9e, 0x20, 0x57, 0x14, 0x92, 0x72, 0x64, 0xcb, - 0xf0, 0x65, 0x3d, 0x44, 0x29, 0xf5, 0x04, 0x81, 0x67, 0x66, 0xbf, 0x97, 0xf1, 0x41, - 0x41, 0x62, 0x2e, 0x91, 0xb2, 0x01, 0x77, 0xd9, 0x8b, 0x8d, 0xb9, 0x35, 0x1b, 0x39, - 0x63, 0x2b, 0xe4, 0x1a, 0x48, 0xf3, 0x9e, 0xe0, 0x50, 0xcc, 0x19, 0x19, 0x14, 0x3a, - 0x24, 0x48, 0xd0, 0x9c, 0x2f, 0xb1, 0x5a, 0x68, 0x0e, 0xbc, 0x07, 0x96, 0x3b, 0x78, - 0x84, 0x80, 0x63, 0x1e, 0xca, 0x37, 0xe1, 0x92, 0x13, 0xdb, 0xb6, 0xc5, 0xe8, 0xda, - 0xc3, 0xee, 0xe8, 0x1b, 0x02, 0x92, 0xcb, 0xc6, 0x81, 0x56, 0x3d, 0x05, 0x77, 0x9b, - 0x79, 0xb5, 0xd8, 0xec, 0x37, 0xb3, 0x31, 0xb3, 0xc0, 0x21, 0x71, 0x9c, 0xb9, 0x5e, - 0x69, 0xec, 0x99, 0xa0, 0xf9, 0x7b, 0x72, 0x33, 0x03, 0x27, 0x8b, 0x94, 0x03, 0xfb, - 0xaa, 0x7f, 0x71, 0xba, 0x70, 0xd6, 0x1d, 0x08, 0x2c, 0x91, 0xa6, 0xaa, 0x2c, 0x8a, - 0x35, 0x43, 0xb5, 0x28, 0x1e, 0x16, 0x05, 0x83, 0x2c, 0x74, 0x0b, 0xf6, 0x70, 0x36, - 0xf2, 0x37, 0x35, 0x71, 0xf0, 0x94, 0x82, 0xb2, 0x72, 0x72, 0xc8, 0xac, 0x2c, 0x69, - 0xb0, 0x1f, 0x71, 0x5d, 0xda, 0x83, 0x37, 0x7a, 0xa0, 0x93, 0xa0, 0x44, 0x54, 0x1f, - 0x60, 0x00, 0x84, 0x8a, 0xb1, 0xea, 0x65, 0xca, 0xb1, 0x34, 0x51, 0x35, 0xa4, 0x55, - 0x2b, 0xe4, 0x2b, 0x27, 0xc4, 0xb9, 0x80, 0x06, 0x56, 0x94, 0x13, 0x4a, 0x90, 0xd4, - 0x36, 0xf0, 0xe0, 0x91, 0xb0, 0x2a, 0x02, 0xaa, 0x99, 0xea, 0xc7, 0x33, 0x99, 0x07, - 0xaf, 0xbb, 0xc1, 0x58, 0xa5, 0x12, 0x75, 0x40, 0x42, 0x3f, 0x23, 0xf6, 0x92, 0x7e, - 0xff, 0x66, 0x91, 0x5d, 0x74, 0x5f, 0x4d, 0x42, 0x04, 0x59, 0xd5, 0x05, 0x76, 0x31, - 0xd9, 0x42, 0x14, 0x46, 0x1c, 0x9b, 0xe8, 0x03, 0xe9, 0xd6, 0x08, 0x0e, 0x10, 0x89, - 0x78, 0xf6, 0x0a, 0xf4, 0x79, 0x5f, 0xc3, 0x48, 0x70, 0xe1, 0xc0, 0x18, 0x19, 0x8d, - 0x85, 0xa4, 0xa1, 0x16, 0xee, 0x21, 0xdf, 0x20, 0xfe, 0x81, 0xd9, 0x21, 0x8e, 0xe2, - 0x2a, 0x9e, 0x81, 0x65, 0x2b, 0x80, 0x6a, 0x71, 0xae, 0xe1, 0x4f, 0x84, 0x50, 0x74, - 0x85, 0x35, 0x6e, - ], - dk: [0x02; 32], - dk_pq: [ - 0x97, 0x16, 0x19, 0xc0, 0x9e, 0x66, 0x27, 0xce, 0xa8, 0x55, 0xbb, 0xf7, 0x81, 0x7d, - 0xd3, 0x6c, 0xdb, 0xf7, 0xd2, 0xde, 0x91, 0x2d, 0x66, 0xaa, 0x2d, 0x94, 0xdd, 0x0d, - 0xa3, 0x0c, 0x9a, 0xc1, 0x20, 0x0f, 0xe8, 0x1d, 0x6e, 0xa2, 0xb4, 0x29, 0x28, 0xde, - 0x29, 0x42, 0x0f, 0xb4, 0x51, 0x10, 0x33, 0x47, 0x53, 0x6b, 0xb6, 0x55, 0xa2, 0xba, - 0xb5, 0xfb, 0xab, 0xa8, 0xa6, 0x78, 0x6f, 0xe9, - ], - dk_t: [ - 0x96, 0x14, 0x18, 0x96, 0x44, 0x2e, 0x2d, 0xca, 0x19, 0xab, 0x5f, 0x49, 0xcc, 0x24, - 0x50, 0xf8, 0x04, 0xfa, 0x3e, 0xb9, 0x49, 0x7f, 0x87, 0x96, 0x79, 0x27, 0x41, 0x66, - 0x88, 0x15, 0x96, 0xf0, - ], - ct: &[ - 0x41, 0x3c, 0x55, 0xd5, 0x71, 0x0b, 0xae, 0x63, 0x76, 0x76, 0x1d, 0xad, 0xa8, 0x07, - 0xda, 0xff, 0xd4, 0xdc, 0x45, 0xf9, 0xf7, 0x0d, 0x82, 0x5e, 0x0d, 0x46, 0x17, 0x6d, - 0x4a, 0x34, 0x2f, 0x58, 0xf2, 0x0d, 0x61, 0x87, 0x92, 0x15, 0xbb, 0xe4, 0xa7, 0x74, - 0x58, 0x88, 0x38, 0x17, 0x53, 0x42, 0x62, 0x8a, 0x90, 0x5d, 0xa0, 0xdb, 0xaa, 0x13, - 0x46, 0xe8, 0xe9, 0x13, 0xf4, 0x73, 0x8d, 0xef, 0xa0, 0x76, 0x84, 0x45, 0xf1, 0xc6, - 0x25, 0xd2, 0x96, 0xab, 0x06, 0xcd, 0x54, 0x7b, 0x93, 0xe7, 0x64, 0xa3, 0x88, 0xe6, - 0x38, 0x15, 0xb5, 0x88, 0x05, 0x97, 0x96, 0xe9, 0xbf, 0x3f, 0xbe, 0xad, 0x07, 0x27, - 0x27, 0x70, 0x3b, 0x03, 0x6a, 0xa7, 0x32, 0x23, 0x00, 0x7a, 0xd1, 0xca, 0xaa, 0xea, - 0x0c, 0x6c, 0xc3, 0x8d, 0x38, 0x5b, 0xeb, 0x06, 0xfe, 0x8d, 0x37, 0x2e, 0x91, 0x45, - 0xc0, 0x8e, 0x1b, 0xc3, 0xcb, 0x5c, 0xcb, 0x12, 0xf4, 0x50, 0xab, 0x0f, 0x6f, 0x9d, - 0xa5, 0x52, 0x96, 0x29, 0xa3, 0xf1, 0xff, 0x63, 0x12, 0x34, 0x6b, 0x6d, 0x2f, 0xcb, - 0x20, 0x46, 0x1e, 0x7b, 0x3b, 0x24, 0x5a, 0x97, 0xa0, 0x3e, 0xf2, 0x7f, 0x2e, 0x54, - 0x42, 0xda, 0xf2, 0xa5, 0xea, 0x31, 0x7f, 0x45, 0x45, 0x28, 0xe9, 0x74, 0x9f, 0x06, - 0x34, 0x2a, 0xa7, 0x59, 0x4e, 0xa9, 0xbd, 0xa0, 0xcd, 0xcc, 0x7c, 0x09, 0x53, 0xc3, - 0x63, 0x72, 0x35, 0x9f, 0xfd, 0x69, 0xf2, 0xae, 0xdc, 0x1a, 0xda, 0xbf, 0x8a, 0x35, - 0x40, 0xe3, 0x2a, 0xb3, 0x6e, 0xbc, 0x13, 0x50, 0xad, 0xed, 0x10, 0x72, 0xaf, 0xe3, - 0xb7, 0x8a, 0x6e, 0xc2, 0xf9, 0x43, 0xd5, 0x60, 0xf4, 0x84, 0x9d, 0x6b, 0xb1, 0xee, - 0x24, 0x67, 0x9e, 0x8f, 0x70, 0xcc, 0x0f, 0x4c, 0xab, 0xe7, 0xd4, 0xcb, 0xc6, 0xe0, - 0x90, 0x35, 0x3c, 0xe8, 0x41, 0x4a, 0x93, 0xde, 0x9c, 0x84, 0xa3, 0x2e, 0x19, 0x7a, - 0x2a, 0xc9, 0x5e, 0x9f, 0xbc, 0x5d, 0x61, 0x6f, 0x85, 0xfe, 0x19, 0x9e, 0x80, 0x79, - 0x3f, 0x6d, 0xcc, 0xac, 0x20, 0x3d, 0x2f, 0x23, 0x6e, 0x7b, 0xad, 0x1a, 0x4e, 0x7f, - 0xf5, 0x1b, 0x3f, 0x33, 0x26, 0xa9, 0x74, 0x28, 0x26, 0xac, 0x6a, 0x23, 0xef, 0x5a, - 0x94, 0x5a, 0xaf, 0xfb, 0x54, 0xfa, 0xf5, 0x0a, 0x8f, 0x0b, 0x8c, 0x09, 0xc5, 0x5c, - 0xf2, 0xbc, 0x81, 0x2e, 0x30, 0xfb, 0x3e, 0x68, 0x7e, 0xca, 0x91, 0xb4, 0x94, 0x78, - 0x5f, 0x12, 0x12, 0x41, 0xa1, 0xea, 0x8d, 0x0c, 0xea, 0x08, 0x92, 0x16, 0xc5, 0xa9, - 0x6a, 0x46, 0x7c, 0x06, 0xd4, 0xf0, 0xa1, 0x0c, 0x2a, 0x6b, 0xf5, 0x51, 0x63, 0x7f, - 0x0f, 0xd5, 0x63, 0x5d, 0xc1, 0x73, 0x4e, 0x96, 0xec, 0xa5, 0xe7, 0xc5, 0x45, 0xd6, - 0x64, 0x35, 0xb8, 0xb5, 0xdd, 0x88, 0xef, 0xf4, 0xc2, 0xcb, 0x3c, 0x73, 0xc4, 0x9d, - 0xfc, 0x9e, 0x56, 0xc2, 0x93, 0xfe, 0xbe, 0xf7, 0x97, 0xa7, 0xd3, 0x6d, 0x21, 0xba, - 0x30, 0x36, 0x1f, 0x7f, 0xec, 0x7b, 0x0e, 0x51, 0x79, 0x3f, 0x6f, 0xdc, 0x22, 0x14, - 0xf4, 0x20, 0xb7, 0x13, 0xa1, 0x59, 0x8f, 0x4d, 0xda, 0x1a, 0x29, 0xf9, 0x12, 0x44, - 0x69, 0x40, 0x7e, 0x5c, 0x5c, 0x5c, 0x90, 0x8e, 0x39, 0xa7, 0x8e, 0xa0, 0xfc, 0xfe, - 0x4d, 0xf3, 0x41, 0x96, 0x92, 0x43, 0x5a, 0x92, 0xe0, 0xf9, 0xa5, 0x84, 0x66, 0x90, - 0x70, 0x6c, 0xdd, 0x23, 0xb1, 0x82, 0x5b, 0xe8, 0xd0, 0xa8, 0x43, 0x75, 0x6f, 0xd9, - 0x7b, 0x4f, 0x27, 0x7c, 0xf0, 0x71, 0x4a, 0x0d, 0x9d, 0xa3, 0xcc, 0xf1, 0xa3, 0x1a, - 0x07, 0x17, 0x83, 0x99, 0xb8, 0x03, 0xc7, 0xb4, 0x83, 0x79, 0x80, 0xbc, 0x01, 0x72, - 0xf5, 0x87, 0x16, 0xb3, 0xba, 0xee, 0x5e, 0x86, 0x44, 0x1d, 0x32, 0xbf, 0x31, 0xc7, - 0xed, 0x6e, 0x9c, 0x6d, 0x55, 0xeb, 0x1e, 0xd5, 0x28, 0xa4, 0xa3, 0x06, 0xde, 0xc7, - 0xf3, 0x7b, 0x3a, 0x57, 0x50, 0x86, 0x38, 0x5a, 0x9f, 0x46, 0x41, 0xef, 0x28, 0xda, - 0x16, 0xd3, 0x55, 0x78, 0xc7, 0x43, 0xc8, 0xec, 0xcb, 0x05, 0x81, 0xb2, 0xfd, 0x30, - 0x8a, 0x3c, 0x9f, 0xa1, 0x5c, 0x83, 0x19, 0x95, 0x4c, 0x8f, 0x42, 0x59, 0xab, 0x09, - 0xf1, 0x78, 0x50, 0x87, 0x20, 0xeb, 0xb8, 0xa0, 0xd8, 0x93, 0xa8, 0xc4, 0x5e, 0xc2, - 0x3b, 0x2c, 0x1c, 0x2e, 0x43, 0xdb, 0x43, 0x9f, 0xf7, 0x1f, 0xea, 0x6a, 0x9f, 0xdc, - 0xd8, 0xa9, 0xd3, 0xc6, 0xe0, 0xf8, 0xb9, 0xe9, 0xe7, 0x1d, 0xdc, 0x2a, 0xa5, 0x2f, - 0xc5, 0xcb, 0xf2, 0x2e, 0xd6, 0x72, 0x17, 0xd8, 0x47, 0xe4, 0xc8, 0x4b, 0x72, 0xe7, - 0xf2, 0x01, 0xac, 0xa5, 0x6c, 0x7d, 0x1d, 0x5e, 0x51, 0xe0, 0xc0, 0x3c, 0xb5, 0x96, - 0xa0, 0x1d, 0x20, 0x20, 0x3b, 0x38, 0xe0, 0xe7, 0xd3, 0x08, 0x6c, 0x83, 0xa4, 0xa1, - 0x93, 0x07, 0x54, 0x13, 0x49, 0x04, 0x48, 0x7c, 0x43, 0xfb, 0x96, 0xde, 0xb4, 0x49, - 0xaa, 0x83, 0x2e, 0x63, 0xa8, 0x2d, 0x13, 0x26, 0x60, 0xcb, 0x79, 0x76, 0xd9, 0xd5, - 0x07, 0x42, 0x64, 0x1c, 0x28, 0xc8, 0xe2, 0xe1, 0xbb, 0x00, 0xa2, 0xc6, 0x5e, 0x9f, - 0x8b, 0x95, 0x91, 0x50, 0x1a, 0xd6, 0x05, 0x68, 0xaf, 0x11, 0x2a, 0x5c, 0xba, 0xb1, - 0x34, 0xbb, 0x47, 0x2f, 0xec, 0xbd, 0xf2, 0x4b, 0xad, 0xbc, 0x65, 0x62, 0x20, 0x1e, - 0x02, 0x2c, 0x23, 0xfb, 0xc6, 0x35, 0x42, 0x92, 0xab, 0x74, 0x3a, 0x86, 0x3a, 0x13, - 0x9d, 0xd4, 0xd6, 0x7b, 0x1b, 0xdb, 0x55, 0x3b, 0x3c, 0x57, 0xa5, 0xc7, 0xf5, 0xb9, - 0x8c, 0xf1, 0x45, 0xac, 0x14, 0x2e, 0x1a, 0xd6, 0xad, 0x5e, 0xa3, 0x95, 0x4f, 0xa3, - 0xc2, 0xb8, 0xeb, 0xfb, 0x6c, 0xd0, 0x5b, 0x91, 0x5d, 0xd1, 0xd8, 0x72, 0x62, 0xd7, - 0xab, 0x1f, 0x1b, 0x47, 0xcc, 0x0a, 0x3b, 0xab, 0xc1, 0x5a, 0x7a, 0x14, 0x15, 0x97, - 0x66, 0x44, 0xc5, 0x4e, 0x29, 0x33, 0x8d, 0x79, 0xaf, 0xa9, 0xd1, 0x2a, 0x66, 0x9d, - 0x3c, 0x67, 0xbf, 0x70, 0xe6, 0x04, 0x15, 0x78, 0x15, 0xf0, 0x41, 0x55, 0x6a, 0x5c, - 0xc1, 0xc8, 0x42, 0x98, 0x80, 0xa5, 0x44, 0x9d, 0x03, 0x3b, 0xb3, 0xf1, 0xf2, 0xb8, - 0x79, 0xf0, 0xe6, 0x89, 0xfc, 0x2a, 0x3e, 0x29, 0x72, 0xf7, 0x5f, 0x6f, 0x25, 0xb9, - 0x5b, 0xea, 0xd0, 0x46, 0x0f, 0x35, 0xef, 0x71, 0xd0, 0xbd, 0xba, 0x38, 0x0e, 0xfb, - 0xab, 0xed, 0x63, 0x65, 0xc6, 0xe7, 0xfc, 0xf2, 0xe2, 0x23, 0x61, 0xb5, 0x72, 0x02, - 0x9f, 0x0c, 0x90, 0xf2, 0xf7, 0x4c, 0x8e, 0x40, 0xc7, 0x94, 0x1e, 0xd8, 0xb6, 0xee, - 0xf5, 0xa7, 0x22, 0xbf, 0x2e, 0x51, 0x41, 0xcf, 0x43, 0xed, 0x2a, 0x69, 0xb8, 0x79, - 0x01, 0xd5, 0x46, 0xa8, 0x57, 0x65, 0xfc, 0x49, 0x45, 0x31, 0xe6, 0x1f, 0x3d, 0x72, - 0x31, 0x07, 0x65, 0x9b, 0x4c, 0xe1, 0xf2, 0x94, 0xc3, 0x52, 0xfc, 0x45, 0xc2, 0x8a, - 0x82, 0xcb, 0x3c, 0x24, 0x2e, 0x5d, 0x6b, 0x9c, 0xf4, 0x3d, 0x07, 0x1b, 0xd5, 0x5b, - 0x8b, 0xc0, 0xd4, 0x7b, 0x22, 0x54, 0x63, 0xa5, 0x07, 0x56, 0x39, 0x56, 0x9c, 0xb0, - 0x73, 0xff, 0xc4, 0xe0, 0x74, 0x17, 0xdb, 0xc5, 0xa3, 0x0a, 0x8e, 0x30, 0x54, 0x52, - 0x64, 0xd6, 0x4d, 0x98, 0xd1, 0x33, 0x36, 0xfd, 0xb6, 0xbd, 0xf8, 0xc7, 0x10, 0x41, - 0xe9, 0x95, 0xcd, 0x43, 0x3a, 0x77, 0xa9, 0xd4, 0xee, 0x25, 0xe2, 0x0f, 0x75, 0x7c, - 0xf7, 0x6d, 0xd7, 0x02, 0xf7, 0xc8, 0xf2, 0x2a, 0x26, 0x77, 0xf0, 0x3d, 0xcb, 0xa4, - 0x7e, 0xa1, 0x99, 0x6b, 0x9d, 0x78, 0x3e, 0x44, 0x73, 0x7e, 0xc5, 0x01, 0xa8, 0xc7, - 0x5a, 0xcb, 0x6d, 0x76, 0x06, 0xa2, 0xb6, 0xeb, 0x1e, 0x06, 0x95, 0x76, 0xf3, 0xa8, - 0x7b, 0x32, 0xe5, 0x87, 0x92, 0x3f, 0xb7, 0x91, 0x71, 0xc7, 0x70, 0x83, 0xbb, 0x62, - 0x9e, 0xfd, 0xa6, 0xb9, 0xdd, 0xc1, 0xd5, 0x66, 0xd7, 0x2a, 0x53, 0x16, 0x1c, 0x16, - 0x5d, 0x0c, 0xce, 0xa7, 0x67, 0x4e, 0x5b, 0x1a, 0xf4, 0x2b, 0x04, 0x0b, 0xbb, 0xc5, - 0xe8, 0xbc, 0x84, 0xbd, 0x33, 0xd1, 0xd3, 0xce, 0x03, 0xff, 0xac, 0x9a, 0x74, 0x7f, - 0x4c, 0x19, 0x93, 0xfd, 0xdb, 0x2e, 0xc9, 0x3a, 0x41, 0x16, 0xa8, 0x6f, 0x02, 0x2a, - 0x77, 0xc3, 0xc1, 0x71, 0x91, 0x55, 0x9a, 0x4c, 0x2a, 0x1a, 0xa5, 0x7e, 0x79, 0xb8, - 0xd1, 0x97, 0x7d, 0xa2, 0xc9, 0x59, 0x17, 0x2f, 0x47, 0x8e, 0x34, 0x1e, 0x27, 0x02, - 0x8d, 0x69, 0xff, 0xfb, 0x7b, - ], - ss: [ - 0xd1, 0x7a, 0x7c, 0xa8, 0x59, 0xa1, 0x8c, 0xfb, 0xb5, 0xfc, 0x7b, 0xcb, 0xa2, 0xec, - 0x54, 0xaa, 0x0e, 0x9a, 0xc4, 0x49, 0x59, 0x02, 0x31, 0x99, 0xff, 0xf5, 0xb6, 0x0d, - 0xb9, 0xf2, 0x44, 0x01, - ], - }, - TestVector { - seed: [0x03; 32], - randomness: [0x67; 128], - ek: &[ - 0x04, 0xcc, 0xc6, 0x8e, 0xbb, 0x7b, 0x60, 0xc6, 0x14, 0x8f, 0xa9, 0x45, 0x74, 0xeb, - 0xae, 0xdb, 0x9c, 0x5c, 0xe5, 0xeb, 0x1a, 0xd6, 0x9c, 0xc5, 0xa4, 0xd7, 0xbb, 0xf9, - 0xa4, 0x10, 0x29, 0x55, 0x40, 0xbb, 0xa2, 0x71, 0xae, 0x8a, 0x17, 0x8b, 0xd0, 0x25, - 0xea, 0x28, 0x88, 0x7c, 0xa8, 0x80, 0x8a, 0xba, 0x8f, 0xac, 0x7a, 0x44, 0x26, 0x0c, - 0x6e, 0x39, 0xb8, 0x83, 0x11, 0x01, 0x55, 0xd0, 0xdc, 0xb8, 0x2a, 0xe7, 0x60, 0x9b, - 0xc8, 0x03, 0xa8, 0xf9, 0x27, 0xdc, 0xc2, 0xc2, 0x03, 0x3c, 0xb0, 0x7b, 0xa9, 0x0f, - 0xc8, 0xb0, 0x68, 0x18, 0x8a, 0x72, 0x14, 0xe7, 0x13, 0x57, 0x95, 0x37, 0xe6, 0x98, - 0x01, 0xce, 0x30, 0x42, 0x51, 0xea, 0xbc, 0x8b, 0x34, 0xb0, 0x3a, 0xd7, 0x12, 0x46, - 0xcc, 0x22, 0xf7, 0x67, 0x1a, 0xdf, 0x57, 0x2c, 0xd6, 0xa2, 0x73, 0x09, 0x76, 0x95, - 0x35, 0x35, 0xc5, 0x9d, 0x7c, 0x93, 0xba, 0xa5, 0x78, 0x88, 0x54, 0xad, 0x52, 0xf4, - 0x8e, 0x9c, 0xdc, 0x8a, 0xcc, 0xf4, 0xa3, 0x44, 0x13, 0x92, 0xf0, 0x06, 0x37, 0x8a, - 0x45, 0x02, 0x89, 0x05, 0x3c, 0x2e, 0xa6, 0x89, 0xa8, 0x06, 0x99, 0xde, 0x7a, 0xcc, - 0x6b, 0xec, 0x4c, 0x2b, 0x18, 0x2e, 0x31, 0x94, 0xac, 0xc9, 0xfb, 0x1c, 0xe3, 0xe1, - 0xb3, 0x89, 0xc5, 0x87, 0x9c, 0xe6, 0x6b, 0xc6, 0x92, 0xa3, 0xb1, 0x53, 0x43, 0xd6, - 0xe5, 0x57, 0xff, 0x93, 0x12, 0x7a, 0xe6, 0x90, 0x07, 0xe6, 0x91, 0x3d, 0x51, 0xce, - 0x70, 0x38, 0x98, 0xc5, 0x44, 0x9e, 0xd3, 0x60, 0x25, 0x93, 0x84, 0x81, 0x95, 0x29, - 0xc7, 0xb5, 0x4b, 0x9f, 0x5b, 0x6c, 0x97, 0x55, 0xd0, 0xa6, 0x27, 0x55, 0x47, 0x72, - 0x84, 0x61, 0x27, 0xc8, 0xa5, 0x80, 0xa5, 0xb6, 0xa9, 0xea, 0x66, 0x95, 0x44, 0x9b, - 0xe1, 0x44, 0x30, 0x6d, 0x64, 0xcc, 0x81, 0x02, 0x12, 0x72, 0x78, 0x82, 0x7d, 0xc2, - 0x5d, 0xa9, 0x6b, 0x6f, 0x48, 0x23, 0xce, 0x5e, 0xd2, 0x5a, 0x2b, 0x19, 0x9f, 0x39, - 0x02, 0xcd, 0x8b, 0xb8, 0x20, 0x58, 0xd4, 0x69, 0x4b, 0x40, 0xce, 0x0c, 0xe1, 0xca, - 0xc1, 0xea, 0x8a, 0x04, 0x7a, 0x1c, 0xed, 0x94, 0x2d, 0x78, 0xac, 0x29, 0x23, 0xc9, - 0xce, 0xd1, 0xd5, 0x63, 0xfc, 0xc2, 0x48, 0x95, 0xb1, 0x68, 0x36, 0x15, 0xb1, 0x34, - 0x85, 0x6a, 0xe3, 0xf3, 0x6e, 0x4b, 0x38, 0x2b, 0xb1, 0x60, 0x17, 0x1e, 0xd4, 0x00, - 0x90, 0x24, 0x99, 0xc6, 0xa0, 0xb1, 0xb8, 0x70, 0x1d, 0x89, 0x09, 0x3d, 0x6d, 0x72, - 0xa9, 0x92, 0xc9, 0xad, 0x29, 0x63, 0x08, 0xa2, 0xd4, 0x4d, 0x26, 0x81, 0x6b, 0x1c, - 0x94, 0x2a, 0x3b, 0xc4, 0x79, 0x97, 0x95, 0x16, 0xa0, 0xdc, 0xbf, 0x16, 0xbb, 0xca, - 0x11, 0x40, 0x55, 0x4b, 0xe6, 0x98, 0x85, 0xa4, 0x77, 0xd0, 0x78, 0xac, 0x0a, 0x26, - 0x7e, 0x82, 0x94, 0x11, 0x1c, 0xbb, 0x42, 0xba, 0xc3, 0xcc, 0x73, 0x32, 0x69, 0xc7, - 0xf8, 0x4b, 0xf3, 0x15, 0x25, 0x8c, 0xf8, 0xcd, 0x04, 0x77, 0x4f, 0x9c, 0xa9, 0x32, - 0xc7, 0x41, 0x67, 0x85, 0x79, 0x6e, 0xcd, 0x78, 0x1e, 0x17, 0xb6, 0xac, 0x32, 0x27, - 0x7d, 0x6d, 0x14, 0x19, 0x06, 0x81, 0x14, 0x30, 0xda, 0x86, 0x64, 0x78, 0x49, 0x9a, - 0x8c, 0x94, 0xc5, 0x21, 0xaa, 0x4d, 0x46, 0x63, 0xaf, 0x06, 0x7f, 0xcd, 0x2c, 0x82, - 0x32, 0x52, 0xc1, 0xdf, 0xba, 0x80, 0x0c, 0x7b, 0x16, 0x81, 0x95, 0x5d, 0xe3, 0x91, - 0x12, 0xc2, 0xfc, 0x5f, 0x4a, 0x14, 0x02, 0x04, 0x69, 0xbc, 0x22, 0x27, 0x8a, 0x84, - 0x49, 0x48, 0x06, 0xd4, 0x35, 0x28, 0xf8, 0xad, 0x8e, 0xfc, 0x88, 0x64, 0x30, 0x38, - 0xd9, 0xd7, 0x1c, 0x79, 0xa5, 0x07, 0x10, 0xdb, 0xac, 0xff, 0x68, 0x63, 0x96, 0xc3, - 0x4f, 0x98, 0x00, 0xb0, 0x67, 0x1b, 0x0d, 0xa3, 0xc2, 0xad, 0x4d, 0xbb, 0x37, 0x51, - 0xb3, 0xb3, 0x74, 0x9b, 0x63, 0xe1, 0x32, 0xa3, 0x36, 0xf1, 0x9a, 0xe8, 0xf3, 0x7a, - 0x79, 0xf6, 0xc7, 0x13, 0xc4, 0x8b, 0x72, 0x4c, 0x80, 0x46, 0x5b, 0x28, 0xe5, 0x78, - 0x65, 0x8b, 0xc8, 0x32, 0x9f, 0x0c, 0x1d, 0x75, 0xd0, 0xab, 0x1d, 0x63, 0x20, 0x27, - 0xa3, 0xcc, 0x8d, 0x74, 0x92, 0x16, 0xf5, 0x04, 0x40, 0x10, 0x9a, 0xd7, 0x63, 0x7f, - 0x3a, 0xb1, 0x66, 0x1e, 0xe7, 0x63, 0x7e, 0xb0, 0x6e, 0x70, 0xd4, 0xc1, 0x5d, 0xb8, - 0x1a, 0x2e, 0xa2, 0x5e, 0xca, 0xe4, 0x52, 0x44, 0x76, 0x10, 0x62, 0x10, 0x36, 0x2a, - 0x7b, 0x35, 0xc0, 0x13, 0x12, 0x0b, 0x51, 0xad, 0x9b, 0x2c, 0x88, 0xb4, 0x52, 0x45, - 0x7b, 0x75, 0xa9, 0x8f, 0xa3, 0xcc, 0xdc, 0xb1, 0x83, 0xae, 0xbb, 0x16, 0x84, 0xb7, - 0x2c, 0x3f, 0xb5, 0x43, 0x4c, 0x27, 0x79, 0x07, 0x68, 0x0e, 0x8c, 0xec, 0xa5, 0xd2, - 0xfb, 0x88, 0xdc, 0xb4, 0x3b, 0x05, 0x0a, 0x55, 0x57, 0xb1, 0x9d, 0x15, 0x9a, 0x60, - 0x50, 0xa6, 0x11, 0x5c, 0x1c, 0x49, 0x23, 0x2c, 0xb5, 0x15, 0x04, 0x63, 0xe1, 0x65, - 0xac, 0xd4, 0x62, 0x9c, 0xa4, 0x92, 0x7e, 0x3c, 0xe4, 0x6d, 0xdd, 0x1a, 0x73, 0x3d, - 0xd2, 0x3f, 0x77, 0xb4, 0x4d, 0xfb, 0x7b, 0x46, 0xeb, 0xe4, 0x29, 0x15, 0x94, 0x01, - 0x5a, 0x4a, 0xb5, 0xff, 0x00, 0xb6, 0x43, 0x32, 0x18, 0x56, 0xb3, 0xb0, 0x62, 0xac, - 0x28, 0xf2, 0xc4, 0xcf, 0x7b, 0x30, 0x71, 0x6b, 0x6c, 0x9a, 0x53, 0x27, 0x11, 0x39, - 0x68, 0x5b, 0x3d, 0x2b, 0xc2, 0x0c, 0xf5, 0xc7, 0x66, 0x26, 0x5a, 0x66, 0x66, 0x65, - 0x23, 0x93, 0xaf, 0x58, 0xac, 0x25, 0xef, 0xcb, 0x50, 0x2a, 0x30, 0xb9, 0xf6, 0xbc, - 0x25, 0x24, 0xcc, 0x61, 0x5a, 0x91, 0x1b, 0x1d, 0xe6, 0x3b, 0xf1, 0x71, 0x0f, 0x9f, - 0x82, 0x9c, 0x91, 0xa5, 0x73, 0xa9, 0x60, 0xa4, 0x4d, 0x43, 0x13, 0x8a, 0x65, 0xc4, - 0x2d, 0x41, 0x00, 0x0c, 0x60, 0x1c, 0x7a, 0xd1, 0x53, 0x76, 0x33, 0x43, 0x3e, 0xdb, - 0x50, 0x23, 0x38, 0x7a, 0xad, 0x50, 0x07, 0xa0, 0x98, 0x27, 0xa5, 0x5b, 0x6a, 0x7e, - 0x7a, 0x29, 0x11, 0x30, 0x7e, 0x0f, 0x22, 0x6e, 0x9e, 0x52, 0xae, 0x3b, 0xa4, 0xc0, - 0xf1, 0x4a, 0x1e, 0xfe, 0x95, 0x71, 0x35, 0x22, 0x78, 0xc5, 0xa4, 0xa0, 0x8c, 0xbb, - 0xa7, 0x40, 0x3c, 0x35, 0xec, 0x69, 0xcc, 0x2a, 0x2b, 0x36, 0x4e, 0xd1, 0x45, 0xb1, - 0x1a, 0x4e, 0x85, 0x94, 0x08, 0x72, 0x36, 0xa4, 0xba, 0x7a, 0x2d, 0x00, 0x3a, 0xa8, - 0x9f, 0xb2, 0xc9, 0x75, 0x80, 0xc3, 0xce, 0x11, 0x57, 0x27, 0xea, 0x0e, 0x99, 0xea, - 0x81, 0xcc, 0x83, 0x54, 0x16, 0x4b, 0x06, 0x02, 0xe5, 0x3c, 0xb3, 0x36, 0x38, 0xda, - 0xd5, 0xa3, 0x96, 0x32, 0xb7, 0x0f, 0x47, 0x06, 0xeb, 0x8b, 0xb6, 0xd5, 0x98, 0xc6, - 0x71, 0x76, 0x27, 0xfe, 0x3c, 0x02, 0x42, 0x05, 0x83, 0xcb, 0xda, 0xc9, 0x46, 0x0a, - 0x9d, 0x55, 0x58, 0x8f, 0xfa, 0xfb, 0xa8, 0xcf, 0x74, 0x8c, 0x16, 0x28, 0x3b, 0x0e, - 0x96, 0xb8, 0xf9, 0x51, 0x00, 0xca, 0xa7, 0xa8, 0xd1, 0x20, 0x29, 0xa4, 0x33, 0xab, - 0x4e, 0xfb, 0xb9, 0xb2, 0x06, 0x7a, 0x0c, 0x61, 0x5d, 0x53, 0x58, 0xac, 0xee, 0xa0, - 0x4b, 0x4c, 0xa4, 0xbf, 0x58, 0x4a, 0x45, 0x2f, 0xe2, 0x76, 0x8c, 0xb5, 0xba, 0xb0, - 0xfb, 0x52, 0xae, 0xc3, 0x75, 0xc3, 0x33, 0x7f, 0xae, 0x44, 0xb3, 0x05, 0xf1, 0x38, - 0x9f, 0x12, 0x31, 0x03, 0x66, 0x9c, 0x79, 0x01, 0xa1, 0x82, 0x1c, 0x47, 0x15, 0xb5, - 0xca, 0xc1, 0xc8, 0x93, 0x89, 0xcc, 0x9f, 0x4d, 0xf1, 0x92, 0xcc, 0xa7, 0x89, 0xed, - 0x23, 0x6f, 0x7b, 0x37, 0x8f, 0xb2, 0x91, 0x51, 0x06, 0xea, 0x3c, 0xc1, 0xb9, 0x0c, - 0xe9, 0xd6, 0xc0, 0x7b, 0x36, 0xc4, 0xf0, 0x9b, 0x56, 0x54, 0xe3, 0xa1, 0x16, 0xc6, - 0x0d, 0xda, 0x68, 0x5b, 0x9e, 0xf6, 0x89, 0x3b, 0x1b, 0x42, 0x34, 0x8a, 0x3a, 0xc8, - 0x72, 0x84, 0xee, 0xd6, 0x83, 0xfb, 0x34, 0x6d, 0x25, 0xa5, 0x62, 0xb9, 0x0a, 0x77, - 0x8e, 0x6b, 0x54, 0x6e, 0x40, 0xb4, 0xfd, 0x7c, 0x1d, 0x3c, 0x01, 0x98, 0x3f, 0x85, - 0x14, 0x74, 0xc3, 0x83, 0x22, 0x97, 0x01, 0x9a, 0x80, 0x8e, 0xf6, 0x49, 0x57, 0xd7, - 0x90, 0x25, 0x78, 0x98, 0x1d, 0x92, 0x31, 0xb3, 0x82, 0x16, 0x9d, 0x53, 0x3a, 0x22, - 0x02, 0xe9, 0x5d, 0x18, 0xf1, 0x52, 0xe8, 0xfc, 0x25, 0xb6, 0x15, 0xbb, 0x8a, 0x65, - 0x48, 0x2a, 0x21, 0x67, 0xdf, 0x6a, 0xb2, 0x81, 0x1c, 0x73, 0xbf, 0x8f, 0xef, 0xbe, - 0xc0, 0x77, 0xf1, 0xe6, 0x68, 0x49, 0x4d, 0x42, 0x24, 0x43, 0xa0, 0x83, 0xb9, 0x61, - 0x92, 0x54, 0xec, 0x3e, 0x6b, 0xc6, 0xf3, 0x02, 0x04, 0x78, 0xcd, 0x35, 0xc1, 0x61, - 0x6f, 0xf2, 0x9a, 0x19, 0x60, 0x10, 0x8b, 0xe1, 0x2b, 0x65, 0xf0, 0xa2, 0x99, 0xf3, - 0xe1, 0xa5, 0xef, 0xe7, 0x66, 0x4d, 0xdb, 0xe3, 0x38, 0x52, 0xe4, 0x80, 0x5a, 0xaf, - 0x60, 0x43, 0x5e, 0xfc, 0x12, 0x31, 0x44, 0x54, 0x03, 0x91, 0xb8, 0x16, 0x83, 0xb5, - 0x71, 0x2f, 0xef, 0xe4, 0x01, 0x26, 0xd0, 0x70, 0xb4, 0xf9, 0xfc, 0x5e, 0x40, 0x9d, - 0xa8, 0x96, 0xa4, - ], - dk: [0x03; 32], - dk_pq: [ - 0x49, 0xb4, 0x63, 0x21, 0xef, 0x5a, 0x24, 0xc1, 0xc0, 0x36, 0x75, 0x08, 0x79, 0xc0, - 0xad, 0x29, 0xdd, 0x08, 0x60, 0x7d, 0x48, 0x9b, 0xd7, 0xea, 0xa5, 0x86, 0x94, 0x92, - 0x75, 0x9d, 0x99, 0x4d, 0x87, 0x5e, 0x0b, 0xea, 0xac, 0x3c, 0xf9, 0x0d, 0xf1, 0xb3, - 0xf1, 0xe0, 0xdd, 0x70, 0x35, 0x7a, 0x5b, 0xaf, 0xae, 0xc8, 0xa3, 0x6f, 0xc2, 0xd9, - 0xb7, 0x2e, 0xdf, 0x3f, 0x57, 0xf9, 0xdb, 0x20, - ], - dk_t: [ - 0xd2, 0x00, 0x34, 0xc3, 0x80, 0x88, 0xae, 0x9e, 0x33, 0x38, 0xd7, 0x5e, 0x19, 0x54, - 0xdd, 0x00, 0x00, 0x1b, 0xda, 0x61, 0x03, 0x6e, 0xab, 0xac, 0x6a, 0x3e, 0xe5, 0x63, - 0x39, 0xd3, 0x7c, 0xe9, - ], - ct: &[ - 0xf4, 0x0d, 0x55, 0x6d, 0x50, 0x78, 0x02, 0xeb, 0xe7, 0xbe, 0x0e, 0x65, 0xab, 0x82, - 0xb0, 0xaa, 0x9f, 0xf2, 0x6c, 0x82, 0x5d, 0x24, 0xf9, 0x81, 0x48, 0xf7, 0x5d, 0x7e, - 0x91, 0x0d, 0x6c, 0x7f, 0x58, 0x52, 0xe7, 0x02, 0x3a, 0x4e, 0x24, 0x6b, 0xe8, 0x1b, - 0x80, 0x7f, 0xea, 0x96, 0x92, 0x8d, 0xa6, 0xa8, 0xc4, 0xd2, 0x3b, 0x83, 0x26, 0xea, - 0x90, 0xaa, 0x7f, 0x1f, 0x06, 0x73, 0xa5, 0x72, 0x77, 0xbd, 0xd0, 0x89, 0x60, 0xf7, - 0xf8, 0x86, 0x77, 0x7f, 0x17, 0x25, 0xb8, 0x82, 0xe1, 0x99, 0x66, 0x32, 0x58, 0x4f, - 0xce, 0x43, 0x56, 0xf7, 0x34, 0x5a, 0xbd, 0x8f, 0x48, 0x05, 0x14, 0x27, 0x5f, 0xbb, - 0xd9, 0x6e, 0xc6, 0xd3, 0x20, 0x2d, 0xe4, 0x6e, 0x18, 0xe7, 0xa8, 0x27, 0xd4, 0xdc, - 0x62, 0xc1, 0x68, 0x1c, 0x36, 0x01, 0x88, 0x61, 0xc3, 0x3c, 0xb2, 0xf4, 0xe1, 0x3b, - 0xa5, 0xda, 0x65, 0x55, 0x84, 0x41, 0xca, 0xa6, 0xec, 0xf8, 0x2a, 0x5e, 0x74, 0x84, - 0x22, 0x68, 0xf4, 0xef, 0x50, 0x36, 0xde, 0xb2, 0xf0, 0xf6, 0xf5, 0xcb, 0x42, 0x2d, - 0xc2, 0xb7, 0x23, 0xa7, 0xf2, 0xf6, 0x98, 0x30, 0xa5, 0x23, 0x26, 0x62, 0x1e, 0xe0, - 0x34, 0xc8, 0xa9, 0xe8, 0x0f, 0x39, 0x07, 0x04, 0x56, 0xbf, 0xdd, 0xe6, 0x53, 0x31, - 0x40, 0x40, 0xb4, 0xf4, 0x15, 0x90, 0x72, 0x3b, 0x66, 0xa2, 0xd7, 0xe4, 0x11, 0x53, - 0x93, 0x25, 0x21, 0xe8, 0xe5, 0x11, 0x08, 0xd2, 0xd9, 0x88, 0x41, 0xb2, 0x98, 0x3b, - 0xaa, 0x43, 0xb0, 0xdd, 0x6a, 0x46, 0x78, 0x3b, 0xe0, 0x63, 0x85, 0x0b, 0x22, 0xa2, - 0xdd, 0x05, 0xc1, 0xf9, 0xf5, 0x78, 0x36, 0x0d, 0xc3, 0xdf, 0xef, 0x4d, 0x79, 0xe8, - 0xc2, 0x0d, 0x2d, 0x0c, 0x45, 0x68, 0x7a, 0xe1, 0x93, 0x95, 0x35, 0x5e, 0x7c, 0xdc, - 0xfa, 0x03, 0x9e, 0x3c, 0x36, 0xb6, 0xdf, 0x4e, 0xa1, 0x1b, 0x41, 0x22, 0x91, 0x8f, - 0xd6, 0xec, 0x63, 0xec, 0x67, 0x2a, 0xce, 0x58, 0xa8, 0xed, 0x9d, 0xfc, 0x61, 0xe7, - 0xd3, 0xb5, 0x82, 0x9d, 0x57, 0x48, 0x33, 0xe0, 0xe6, 0x1f, 0xa0, 0x84, 0x19, 0xcb, - 0xda, 0x05, 0xa8, 0x5b, 0x3c, 0x4b, 0x99, 0x57, 0xa0, 0x96, 0x8d, 0x58, 0x25, 0xd0, - 0xd0, 0x52, 0x01, 0x3e, 0x75, 0xf1, 0x38, 0xc8, 0xd7, 0x49, 0x29, 0xa6, 0x31, 0xa0, - 0xba, 0x2e, 0xc9, 0x55, 0x5e, 0x27, 0x67, 0xf1, 0x7e, 0x6e, 0x22, 0x89, 0x0a, 0x5c, - 0xb0, 0x0f, 0x63, 0xf0, 0x9e, 0x00, 0xb8, 0xde, 0xcc, 0xcf, 0x7d, 0x7d, 0x0e, 0x36, - 0x9c, 0x43, 0x96, 0xcb, 0x42, 0x9e, 0x53, 0xd8, 0xcd, 0x46, 0x36, 0xea, 0x63, 0x0d, - 0x6f, 0xc5, 0x51, 0x43, 0xe6, 0x14, 0x6a, 0x96, 0x9e, 0xd0, 0x83, 0x9a, 0xb0, 0x5d, - 0xd0, 0x79, 0xda, 0x3f, 0x94, 0x6b, 0x3d, 0xea, 0xad, 0x27, 0x74, 0x36, 0x05, 0x29, - 0xf2, 0xaa, 0x7e, 0x6c, 0x40, 0x0b, 0x66, 0xa5, 0xc4, 0x49, 0xdd, 0x83, 0x62, 0xfa, - 0xe1, 0xa1, 0xbb, 0xf1, 0x10, 0x22, 0x98, 0x10, 0xe0, 0xd4, 0x72, 0x5c, 0xfa, 0x2d, - 0xfd, 0xc0, 0x46, 0xd4, 0xc1, 0x86, 0x37, 0xe1, 0xde, 0x3e, 0xc2, 0xb5, 0x20, 0x55, - 0xc2, 0x37, 0x23, 0x8d, 0xe0, 0x16, 0x7e, 0xb0, 0x84, 0x4c, 0x24, 0xa8, 0xfd, 0x91, - 0xac, 0x9f, 0x66, 0xf8, 0x6e, 0xfc, 0x94, 0x5c, 0x0a, 0x50, 0x67, 0x29, 0x26, 0xef, - 0xab, 0x53, 0xbd, 0x07, 0x25, 0xae, 0x9f, 0xf3, 0x6e, 0x9f, 0xcb, 0xec, 0xd5, 0x82, - 0x12, 0xcb, 0xe7, 0xe0, 0xf2, 0x48, 0xb9, 0xab, 0x90, 0xb2, 0xf5, 0x64, 0x97, 0xf1, - 0x96, 0x19, 0x80, 0x43, 0xfa, 0x10, 0xde, 0x90, 0x9b, 0x05, 0xbf, 0x3d, 0xd1, 0xd2, - 0x06, 0x30, 0xf9, 0x70, 0x70, 0x95, 0xf4, 0xf8, 0x0d, 0x04, 0x44, 0x18, 0xe6, 0x7c, - 0xcd, 0x79, 0xe8, 0xf2, 0x8d, 0xb7, 0xac, 0xb1, 0x08, 0x3a, 0x2b, 0xc6, 0x32, 0x33, - 0xa4, 0xf4, 0x79, 0x8f, 0x13, 0xf2, 0x1e, 0x81, 0xda, 0x6e, 0xe0, 0x3c, 0x61, 0x4c, - 0xb3, 0x67, 0xaf, 0xf0, 0x54, 0x10, 0x96, 0x0f, 0xd3, 0x66, 0xdf, 0x06, 0x69, 0x1b, - 0x37, 0x42, 0x47, 0xde, 0x70, 0xfc, 0xf9, 0x16, 0xe6, 0x53, 0xb2, 0xbf, 0x01, 0xb4, - 0x9c, 0xf1, 0x16, 0x32, 0x4e, 0x81, 0x04, 0xda, 0x61, 0xa6, 0x21, 0xb5, 0x66, 0xa6, - 0x2c, 0x97, 0xc6, 0xc0, 0x58, 0x20, 0x8e, 0x48, 0x25, 0x72, 0x7c, 0xbb, 0x6c, 0x2e, - 0xba, 0xa0, 0xe8, 0x88, 0x65, 0x90, 0x94, 0xaa, 0x03, 0x70, 0x96, 0x59, 0xe2, 0x72, - 0xb4, 0x20, 0x9c, 0x18, 0x36, 0x61, 0x96, 0x11, 0x0d, 0x71, 0x12, 0x0b, 0x20, 0x3f, - 0xc7, 0x1d, 0xd5, 0xd3, 0xc1, 0x7b, 0xe4, 0x58, 0x0e, 0x5a, 0xde, 0x64, 0xa3, 0xfd, - 0xee, 0xa5, 0xb8, 0x5a, 0xd3, 0x3f, 0xce, 0xbf, 0x30, 0xb8, 0x57, 0xdc, 0x7c, 0xfe, - 0x3b, 0xa5, 0x2e, 0xa8, 0x26, 0x9c, 0xad, 0xd7, 0xdd, 0xa3, 0x08, 0x46, 0x02, 0x01, - 0xe0, 0x11, 0x9f, 0x89, 0x18, 0xde, 0x89, 0x80, 0xf0, 0x4b, 0x31, 0x8f, 0x39, 0x48, - 0x7e, 0x65, 0xef, 0x0e, 0x0b, 0x83, 0xc2, 0x39, 0x6d, 0x2f, 0xd8, 0x7f, 0x4d, 0x54, - 0xdd, 0x00, 0xb4, 0x05, 0x06, 0x3f, 0x07, 0x26, 0x59, 0xd6, 0xb1, 0x15, 0x13, 0xf4, - 0x48, 0xb2, 0x0d, 0xed, 0xa3, 0xd8, 0x74, 0x98, 0x7c, 0x25, 0x2b, 0x7d, 0x16, 0xd9, - 0x4c, 0x4f, 0x81, 0x1c, 0x97, 0x13, 0x4e, 0x5e, 0x00, 0xbf, 0xf8, 0x30, 0x0e, 0x71, - 0x8e, 0x17, 0xde, 0x37, 0x35, 0xbb, 0x4b, 0xc0, 0x52, 0x10, 0x0a, 0x38, 0x23, 0xf8, - 0xdb, 0x4b, 0xe2, 0xd7, 0x55, 0x40, 0x03, 0x48, 0x1c, 0xe6, 0xd8, 0x99, 0xd7, 0x4c, - 0x1a, 0xd9, 0x94, 0x4c, 0x01, 0xd9, 0x33, 0x30, 0x58, 0x51, 0x45, 0x89, 0x33, 0xb3, - 0xf7, 0x80, 0xad, 0x6c, 0x1d, 0xb4, 0x89, 0xda, 0x50, 0x76, 0x21, 0xe3, 0x9b, 0xe1, - 0x74, 0xc7, 0x1f, 0x73, 0xec, 0x9c, 0x1e, 0xf6, 0x44, 0x57, 0x8b, 0xb1, 0x56, 0x61, - 0x36, 0xf1, 0x7e, 0x91, 0xb4, 0x75, 0xfd, 0xbf, 0x35, 0x4c, 0xf4, 0xf5, 0xa6, 0xee, - 0x30, 0x0d, 0x39, 0x38, 0xf5, 0xb4, 0xa7, 0xb9, 0xbc, 0xb9, 0x01, 0x88, 0xa3, 0xd9, - 0xc8, 0xfa, 0xb1, 0x32, 0x6d, 0xf6, 0x9f, 0x5c, 0x37, 0x53, 0xa8, 0xff, 0x9c, 0x5a, - 0x7b, 0xbc, 0x4e, 0x22, 0x55, 0x95, 0x4d, 0xfb, 0x6a, 0x2c, 0xe8, 0x13, 0x81, 0xea, - 0xf9, 0xd2, 0x24, 0x00, 0x5e, 0x05, 0x0e, 0xb5, 0xf5, 0x3d, 0x05, 0xf0, 0xa4, 0x1b, - 0xcf, 0x4f, 0x3c, 0x0e, 0x87, 0x71, 0xe8, 0x4e, 0xaa, 0x46, 0xce, 0x27, 0xb0, 0x43, - 0x8d, 0x4c, 0xe3, 0xeb, 0xf9, 0xeb, 0x25, 0xb5, 0x35, 0x16, 0x43, 0xa2, 0x6f, 0x60, - 0x7c, 0x41, 0xb6, 0x49, 0x4a, 0xc7, 0x7e, 0x4c, 0x4a, 0x2f, 0xaf, 0xac, 0x8e, 0x3c, - 0xd8, 0x72, 0xf3, 0x18, 0x16, 0x50, 0x1e, 0xfd, 0x66, 0xc4, 0x17, 0x95, 0xfa, 0x0d, - 0x01, 0xac, 0x02, 0x90, 0x25, 0x3c, 0xf6, 0xc9, 0xd0, 0xdd, 0x8d, 0x58, 0x65, 0x68, - 0x4c, 0x1a, 0x02, 0x74, 0x8a, 0x82, 0x44, 0x17, 0x82, 0x7e, 0xe3, 0x74, 0x40, 0x4a, - 0x59, 0xba, 0x87, 0xc3, 0xec, 0x3c, 0xaa, 0xdf, 0x08, 0xb0, 0xf9, 0x20, 0x66, 0x7f, - 0xae, 0x9a, 0xd1, 0x85, 0x60, 0xed, 0xc3, 0xf8, 0x57, 0x19, 0x86, 0xca, 0x0b, 0xf1, - 0xef, 0x11, 0x4d, 0x39, 0x4c, 0x08, 0xec, 0x5f, 0xf2, 0x21, 0xe9, 0xf9, 0xce, 0x7b, - 0x65, 0x08, 0xeb, 0x6c, 0x38, 0xd6, 0x04, 0x1f, 0xbe, 0x73, 0x19, 0xbd, 0x88, 0x74, - 0xf3, 0x5b, 0xac, 0xe8, 0x5c, 0x0b, 0xcc, 0x08, 0xcd, 0xcc, 0x64, 0x2a, 0xe7, 0xfc, - 0x26, 0x4b, 0x9b, 0xe0, 0x8a, 0x26, 0xe5, 0xec, 0x6a, 0x36, 0x18, 0xa0, 0x78, 0xa1, - 0x28, 0xd0, 0xb8, 0xda, 0xf4, 0x6e, 0x40, 0x4e, 0xee, 0x41, 0x23, 0xb3, 0x79, 0xa8, - 0x16, 0x80, 0xc8, 0x33, 0x60, 0x36, 0xd9, 0xa4, 0x4c, 0x12, 0xbc, 0xc2, 0x3e, 0xd7, - 0xb1, 0xb9, 0x64, 0x42, 0x10, 0x88, 0x43, 0xe5, 0xfc, 0xee, 0x04, 0x23, 0x94, 0xb4, - 0x56, 0x98, 0x4b, 0x83, 0xea, 0x78, 0x59, 0xf7, 0xa0, 0xfb, 0x64, 0x75, 0xd5, 0x3b, - 0x4f, 0xd5, 0x52, 0x36, 0xec, 0xf4, 0xf3, 0x31, 0x83, 0xc1, 0xd7, 0x19, 0xee, 0x10, - 0x68, 0x3a, 0x6b, 0x68, 0x9b, 0x46, 0x3a, 0x82, 0x36, 0x65, 0xa4, 0x0b, 0x63, 0x73, - 0x56, 0x47, 0xc2, 0x93, 0x0f, 0x3c, 0x4b, 0x1d, 0x87, 0x87, 0xd4, 0x19, 0x9b, 0xfc, - 0x2d, 0xb8, 0x49, 0x9e, 0x61, - ], - ss: [ - 0xb3, 0xdb, 0x69, 0xcc, 0x03, 0x85, 0xb1, 0xba, 0x71, 0x61, 0x28, 0xb7, 0x0b, 0xd4, - 0xb9, 0x32, 0x88, 0xf9, 0x45, 0xf4, 0x18, 0xce, 0xf5, 0x1d, 0x12, 0x2c, 0xa7, 0xa4, - 0xde, 0x56, 0x4a, 0x81, - ], - }, - TestVector { - seed: [0x04; 32], - randomness: [0x68; 128], - ek: &[ - 0x6a, 0xfa, 0x82, 0xec, 0x0b, 0x8e, 0x84, 0x49, 0x59, 0x1c, 0xb9, 0xa1, 0x1b, 0xe3, - 0x6d, 0xc4, 0x31, 0x46, 0xc1, 0x8a, 0x6a, 0xd3, 0xf1, 0x75, 0x89, 0x79, 0x33, 0xd2, - 0x59, 0x44, 0xc3, 0xc6, 0x43, 0xf5, 0x03, 0x32, 0xf1, 0xcc, 0x4f, 0x6a, 0x97, 0x07, - 0xa3, 0x87, 0xb5, 0xc4, 0x06, 0x61, 0xec, 0x41, 0xb3, 0x6d, 0x2b, 0xbc, 0x45, 0x07, - 0x75, 0x83, 0x87, 0x67, 0x2f, 0xb4, 0xa1, 0xc1, 0x19, 0x6e, 0xaa, 0x81, 0xb0, 0x1b, - 0xe2, 0x86, 0x4c, 0xc9, 0x58, 0xa0, 0x64, 0x24, 0x96, 0xf2, 0x64, 0xb4, 0x04, 0x2e, - 0xc5, 0xf7, 0xb2, 0x5a, 0x52, 0x20, 0xa8, 0xa9, 0xc9, 0x63, 0x30, 0x81, 0xae, 0xf1, - 0x04, 0xef, 0x9a, 0xbd, 0x4d, 0xa0, 0xaf, 0x06, 0x8a, 0x84, 0xe7, 0xb0, 0x3f, 0x21, - 0xe6, 0xb6, 0x02, 0x12, 0xa0, 0x2d, 0xc4, 0x8b, 0xa7, 0x86, 0x58, 0x77, 0x08, 0x4a, - 0x1b, 0x02, 0x54, 0x43, 0xe3, 0x8d, 0x60, 0xbb, 0x6f, 0xae, 0x8b, 0xa8, 0x8e, 0xa4, - 0x53, 0x8d, 0x08, 0x8b, 0xea, 0x75, 0x8f, 0x6f, 0x9a, 0x5c, 0x26, 0xa9, 0xc4, 0x46, - 0x99, 0xad, 0x43, 0x08, 0x0d, 0x3f, 0xdc, 0xc2, 0xd9, 0x10, 0xb1, 0x6b, 0x29, 0x7b, - 0xb8, 0x64, 0x36, 0xe3, 0xd5, 0xb7, 0x9d, 0xc0, 0x12, 0x30, 0x12, 0x48, 0x67, 0xc1, - 0xbe, 0x64, 0xa9, 0xca, 0xb7, 0xaa, 0xb9, 0xfd, 0xb4, 0x7e, 0xad, 0xd1, 0x5d, 0x00, - 0xed, 0x84, 0xac, 0x9a, 0x37, 0x40, 0x6a, 0x36, 0x65, 0xd7, 0xcb, 0xdd, 0x10, 0x6d, - 0x1e, 0x6a, 0x29, 0xa8, 0x1c, 0x94, 0xe3, 0xc8, 0x41, 0xfe, 0x9c, 0xb5, 0x83, 0x00, - 0x4a, 0xa4, 0x71, 0xad, 0x2e, 0xb4, 0x77, 0x62, 0x34, 0x01, 0xe6, 0x95, 0x9a, 0x04, - 0x43, 0x9b, 0xae, 0x06, 0xa0, 0x70, 0x58, 0xcf, 0x2e, 0xd9, 0x4b, 0xce, 0x18, 0x39, - 0xe6, 0x36, 0xa8, 0xc0, 0xb2, 0x2f, 0x78, 0x24, 0x83, 0xce, 0x79, 0x8e, 0x60, 0x9b, - 0xcd, 0x78, 0x46, 0x05, 0xea, 0xdc, 0x0a, 0x06, 0xc7, 0x69, 0x9b, 0x1b, 0x9e, 0xce, - 0x55, 0x04, 0x84, 0x12, 0x40, 0x95, 0xa1, 0x33, 0x71, 0x02, 0x81, 0x01, 0xc9, 0x57, - 0x21, 0xc2, 0xc7, 0x1b, 0x09, 0x8b, 0x15, 0xf3, 0x99, 0x87, 0x85, 0xb3, 0x61, 0x92, - 0x4f, 0x89, 0xdb, 0xa9, 0xf2, 0x92, 0xb9, 0xb1, 0x8c, 0xbe, 0x23, 0x2c, 0xb7, 0x6e, - 0x41, 0xbb, 0x5b, 0x35, 0xca, 0xd9, 0x76, 0x96, 0x2f, 0xca, 0x29, 0x57, 0xeb, 0x8e, - 0x06, 0x35, 0x6c, 0x25, 0x05, 0x25, 0xe8, 0x82, 0x5d, 0xce, 0x66, 0x47, 0x8f, 0xa5, - 0x87, 0xab, 0x6b, 0x42, 0x9b, 0xb2, 0x87, 0xaa, 0xf2, 0x1a, 0x58, 0xc9, 0x00, 0xde, - 0x09, 0x46, 0xeb, 0xc2, 0x84, 0x87, 0x34, 0x50, 0xc7, 0xe7, 0xa0, 0xe0, 0x8c, 0x85, - 0x6d, 0xca, 0x21, 0x91, 0x19, 0x5f, 0x73, 0xb3, 0xae, 0xcc, 0xe1, 0xb1, 0xc1, 0xc2, - 0x9c, 0xb2, 0x4a, 0x6c, 0x2f, 0xc3, 0xc1, 0x4c, 0xa1, 0x49, 0x51, 0x82, 0x64, 0x5c, - 0xf8, 0x48, 0x6c, 0xb8, 0x77, 0xd0, 0x67, 0x44, 0x0f, 0x11, 0x8b, 0x80, 0x71, 0x37, - 0x84, 0x47, 0x4b, 0xd0, 0x21, 0x4f, 0x23, 0xfc, 0x09, 0xe2, 0xc8, 0xb5, 0xdf, 0x35, - 0x7b, 0x37, 0x33, 0xc1, 0x35, 0x45, 0xc9, 0x49, 0x03, 0x78, 0x29, 0x16, 0x46, 0xfb, - 0xdb, 0x84, 0x03, 0x81, 0x8f, 0x7d, 0x57, 0x1a, 0x40, 0xba, 0x7f, 0x5c, 0xea, 0x48, - 0x0f, 0xa0, 0x0b, 0xa1, 0x53, 0x73, 0xc6, 0x02, 0x55, 0xe5, 0x43, 0x84, 0xe9, 0x6c, - 0x45, 0x5d, 0xa1, 0x3f, 0xd7, 0xdb, 0xcb, 0xc1, 0xe7, 0xa5, 0xe9, 0xd6, 0x55, 0xb0, - 0x14, 0x59, 0x76, 0xe1, 0x90, 0x78, 0x0b, 0x55, 0xc9, 0xc8, 0x6c, 0xa6, 0xc9, 0x88, - 0xd1, 0x23, 0x0a, 0xab, 0xc8, 0x55, 0x8c, 0xec, 0xa8, 0xd5, 0xcb, 0xb8, 0x44, 0xca, - 0x8d, 0x95, 0xb3, 0x0b, 0x64, 0xc0, 0x24, 0x40, 0x52, 0x26, 0x61, 0xc9, 0xb0, 0x7c, - 0x86, 0x6e, 0x49, 0x7b, 0x5a, 0x7d, 0xaa, 0x23, 0x98, 0xa5, 0xa8, 0x88, 0xa4, 0x24, - 0x4d, 0x90, 0x21, 0x01, 0x05, 0x46, 0x0f, 0xab, 0x31, 0xc6, 0xdb, 0x3f, 0xd5, 0x79, - 0x41, 0xb8, 0x69, 0xc2, 0x42, 0x18, 0xb2, 0xeb, 0xd7, 0xae, 0x67, 0x88, 0x5e, 0x1f, - 0xd6, 0x91, 0xa3, 0xdc, 0x43, 0x88, 0xb8, 0x72, 0xf4, 0xca, 0xb5, 0xfc, 0xd9, 0x40, - 0x67, 0xea, 0x95, 0x3d, 0x73, 0xac, 0xf1, 0xf4, 0xc7, 0x52, 0x77, 0x63, 0x57, 0x97, - 0x4b, 0x0a, 0xd7, 0x87, 0x2a, 0xd6, 0x03, 0xc3, 0x0a, 0x17, 0x4f, 0x96, 0x39, 0x83, - 0x73, 0x9e, 0x5f, 0xa5, 0x30, 0x4d, 0x17, 0x05, 0xc6, 0x79, 0x1e, 0x9c, 0x90, 0x34, - 0x26, 0x83, 0xa3, 0xb1, 0x76, 0xa2, 0x89, 0x7a, 0xb9, 0x14, 0x21, 0x90, 0xb3, 0x90, - 0x0d, 0x08, 0x9c, 0x77, 0xec, 0xe4, 0x13, 0x16, 0xb4, 0x06, 0x11, 0xfc, 0x6b, 0xf7, - 0xc8, 0x1e, 0xb7, 0xb5, 0x89, 0xd6, 0x55, 0x24, 0xf9, 0xc6, 0x88, 0x8f, 0xd7, 0xc5, - 0x3b, 0xa8, 0x10, 0xb0, 0xc7, 0x07, 0x66, 0x43, 0x06, 0x38, 0x59, 0x5d, 0xc3, 0x13, - 0x4e, 0xf5, 0xda, 0x09, 0xc6, 0x68, 0xa8, 0x04, 0xea, 0x1e, 0x2f, 0x14, 0x69, 0xed, - 0xba, 0x0d, 0x45, 0x7a, 0xcd, 0x82, 0x81, 0x82, 0x8d, 0x02, 0xa9, 0x15, 0xbc, 0xbc, - 0x05, 0x94, 0x9d, 0x2e, 0xdc, 0x5c, 0x1c, 0x58, 0x56, 0xfa, 0x79, 0x8e, 0x5c, 0xd3, - 0x58, 0x74, 0x72, 0x90, 0x3c, 0x6c, 0xc2, 0xbb, 0x43, 0xb0, 0x32, 0x29, 0x35, 0x25, - 0x87, 0xcd, 0xe9, 0x88, 0xab, 0x60, 0x04, 0x9b, 0x6f, 0x87, 0x2a, 0x9a, 0xa8, 0x2f, - 0x25, 0xb5, 0x34, 0x6f, 0xc5, 0x6f, 0xe8, 0x68, 0x64, 0x23, 0xb2, 0x7e, 0x0f, 0x36, - 0x8a, 0x43, 0xd3, 0x6a, 0x21, 0x60, 0x2b, 0x40, 0x56, 0x02, 0x2d, 0x25, 0x21, 0x7d, - 0xf4, 0x4a, 0x1f, 0xa3, 0x30, 0x12, 0x21, 0x52, 0xcd, 0x2a, 0x58, 0x1c, 0xa0, 0x5d, - 0x38, 0x01, 0xbf, 0x9f, 0x0a, 0x31, 0xbf, 0x79, 0xb8, 0xa7, 0x39, 0x4f, 0xb8, 0xc9, - 0xbc, 0x16, 0x52, 0xcf, 0xea, 0x9c, 0x38, 0x6c, 0xa7, 0xc7, 0x03, 0xb5, 0x75, 0x4c, - 0x82, 0x43, 0xf7, 0xb0, 0xa3, 0x6b, 0xc2, 0x90, 0xe0, 0x73, 0x3a, 0x17, 0xa9, 0x44, - 0x31, 0xd7, 0xb0, 0x5e, 0x0b, 0x42, 0x98, 0xa8, 0xb2, 0x87, 0xfb, 0x1a, 0xd3, 0xb3, - 0x2a, 0x57, 0x69, 0x3a, 0x1e, 0x78, 0x67, 0xb0, 0xf3, 0xc4, 0x83, 0xc0, 0xab, 0xdd, - 0x2c, 0x05, 0xc8, 0x1c, 0x26, 0xa6, 0x03, 0x20, 0xd9, 0x12, 0x07, 0xf2, 0x04, 0xc2, - 0xe8, 0x39, 0x3a, 0x78, 0xe7, 0x57, 0x2c, 0x8c, 0x29, 0x62, 0x60, 0x35, 0x1e, 0xb6, - 0x29, 0x40, 0xc3, 0x94, 0x94, 0x3c, 0x6a, 0x62, 0x2a, 0x87, 0x10, 0xaa, 0x09, 0xa0, - 0x76, 0xb5, 0x13, 0xdb, 0xbf, 0xdd, 0xfc, 0x31, 0x05, 0x37, 0x9d, 0xa0, 0x8b, 0x97, - 0xa6, 0xfc, 0x68, 0xf2, 0x10, 0x50, 0x88, 0xcb, 0x35, 0xf9, 0x68, 0x31, 0x44, 0xba, - 0x24, 0x67, 0x35, 0x13, 0xf0, 0xb6, 0xaa, 0xca, 0x32, 0xc0, 0xe7, 0x71, 0x73, 0xd7, - 0x38, 0x72, 0x94, 0xa9, 0xb9, 0x6a, 0x08, 0xa0, 0x14, 0xac, 0x88, 0xaf, 0xac, 0xa9, - 0x49, 0xc2, 0xc3, 0x76, 0x0b, 0x46, 0x1d, 0xfc, 0x1b, 0xa5, 0xc0, 0x1a, 0x95, 0x6c, - 0xac, 0x46, 0xa0, 0x1d, 0xc7, 0xd9, 0xa9, 0x92, 0xe1, 0xaa, 0x70, 0x4a, 0xa1, 0x5a, - 0xf5, 0x25, 0x91, 0x18, 0x57, 0xd4, 0x66, 0x82, 0xb1, 0x37, 0xa3, 0x71, 0x9a, 0xaa, - 0x71, 0xf7, 0xa8, 0xba, 0x88, 0xaf, 0xd6, 0xd4, 0x3b, 0x12, 0x78, 0x05, 0xf6, 0xc2, - 0xcb, 0x55, 0xf8, 0x8d, 0x6c, 0x59, 0x07, 0x75, 0x57, 0x73, 0x73, 0xac, 0x87, 0x35, - 0x6a, 0x56, 0xb8, 0x93, 0x41, 0xd0, 0xe8, 0x65, 0x77, 0x37, 0x24, 0x9b, 0xca, 0x66, - 0xb0, 0xb4, 0x19, 0x4a, 0x5c, 0x13, 0xdc, 0xe0, 0x45, 0x03, 0x91, 0x64, 0xfe, 0x15, - 0x30, 0xe3, 0x89, 0x81, 0xf0, 0x8c, 0x66, 0xad, 0x2b, 0xb0, 0x53, 0x1c, 0x36, 0x31, - 0xa8, 0x6f, 0x6c, 0xfa, 0x71, 0x57, 0x1b, 0x77, 0x7b, 0x24, 0x61, 0x60, 0x1b, 0xc7, - 0xa1, 0x46, 0xc3, 0x58, 0x95, 0x5a, 0x5b, 0x44, 0x13, 0x0d, 0x26, 0xb5, 0xc3, 0x53, - 0x22, 0x13, 0x81, 0x33, 0xc0, 0x83, 0xab, 0xa3, 0x00, 0xa5, 0xde, 0xf2, 0xc4, 0xf0, - 0xd9, 0x4d, 0x42, 0x67, 0xa2, 0xad, 0x23, 0x42, 0x0b, 0x76, 0x8c, 0x77, 0xd8, 0xa1, - 0xf0, 0x42, 0x85, 0x36, 0x66, 0x7d, 0x2d, 0xf4, 0x21, 0x27, 0x01, 0x22, 0x91, 0x51, - 0x1a, 0x8c, 0x72, 0x73, 0x8b, 0x82, 0xf0, 0xcf, 0xf8, 0x3b, 0x93, 0x15, 0x33, 0x08, - 0x86, 0xd6, 0x11, 0x18, 0x0d, 0x23, 0x83, 0xcf, 0x55, 0x1a, 0xfe, 0xc4, 0xaa, 0x75, - 0x15, 0xeb, 0x13, 0x8a, 0x39, 0x8e, 0xb4, 0x4c, 0x04, 0x99, 0x86, 0x3a, 0x8f, 0xd0, - 0xda, 0x25, 0x30, 0xb7, 0xde, 0xef, 0xd5, 0xf1, 0x18, 0x36, 0x46, 0x01, 0x05, 0x55, - 0x33, 0x3a, 0x6c, 0xd0, 0xe6, 0xad, 0x0d, 0x6b, 0xf9, 0x19, 0x67, 0x82, 0x52, 0xc4, - 0x93, 0x58, 0xa3, 0x53, 0x22, 0xa4, 0x58, 0x53, 0x0b, 0x7c, 0x2b, 0x60, 0xf3, 0xb1, - 0x70, 0xd5, 0x0a, 0x58, 0x92, 0xe0, 0x6a, 0x9f, 0x82, 0xee, 0x0e, 0x34, 0xd5, 0x6c, - 0x99, 0x31, 0x2b, - ], - dk: [0x04; 32], - dk_pq: [ - 0x79, 0xf1, 0xb2, 0xce, 0x3b, 0x60, 0x1e, 0xbf, 0x5b, 0xa3, 0x10, 0x06, 0xe5, 0xa8, - 0xe4, 0xc8, 0x6c, 0xd5, 0x81, 0x48, 0xc7, 0x5a, 0x89, 0x17, 0x37, 0x11, 0xae, 0xad, - 0x9a, 0xcc, 0xf0, 0x9f, 0x15, 0x8d, 0x0f, 0xac, 0xb0, 0x85, 0xbf, 0x62, 0x4b, 0x4d, - 0xe5, 0xa3, 0x88, 0xfa, 0xb8, 0xe6, 0x04, 0x19, 0xb0, 0x47, 0x10, 0x47, 0x53, 0x67, - 0xa0, 0xfa, 0x9c, 0x13, 0x97, 0xc9, 0x6d, 0x61, - ], - dk_t: [ - 0x43, 0x2e, 0xab, 0x0f, 0x3a, 0x8e, 0xeb, 0x77, 0xc6, 0xb0, 0x00, 0x0b, 0x92, 0x92, - 0xc6, 0xe1, 0x63, 0x91, 0x40, 0x78, 0xc9, 0x4a, 0x16, 0x18, 0x29, 0xfc, 0xfb, 0x9b, - 0xb3, 0x44, 0x73, 0x93, - ], - ct: &[ - 0xcf, 0xe3, 0x18, 0x62, 0x85, 0x31, 0x64, 0x95, 0x01, 0x23, 0xba, 0xa7, 0x55, 0x49, - 0x41, 0x8c, 0x7a, 0x40, 0x6c, 0xfb, 0x60, 0x00, 0x3b, 0x82, 0x5e, 0xb2, 0x92, 0xf1, - 0xba, 0x1f, 0x25, 0xc3, 0xb5, 0xb0, 0x44, 0xdc, 0xe0, 0xb8, 0xb1, 0x6c, 0xb2, 0x54, - 0xd6, 0x96, 0x58, 0xd5, 0x16, 0xcd, 0x34, 0x45, 0xe3, 0xf1, 0x8b, 0xcd, 0xe3, 0x2c, - 0x4f, 0x46, 0xb4, 0xac, 0x25, 0xdc, 0xa4, 0xc4, 0x57, 0x36, 0x47, 0xab, 0x7c, 0xef, - 0xd7, 0xfc, 0xbb, 0x7c, 0x19, 0x2d, 0x99, 0x71, 0x94, 0x65, 0x4a, 0xea, 0xc0, 0xf5, - 0x93, 0xed, 0xdc, 0x44, 0x64, 0xe7, 0xe1, 0x25, 0x67, 0x2f, 0xc7, 0x26, 0x5f, 0x16, - 0x64, 0xb3, 0x21, 0x99, 0xca, 0xd4, 0x50, 0x95, 0x35, 0x9a, 0x4d, 0xd8, 0x0e, 0x96, - 0x37, 0xf0, 0x14, 0x05, 0x04, 0xa7, 0xb1, 0x30, 0x3f, 0xa6, 0x9d, 0x12, 0x1d, 0x2d, - 0x21, 0x4d, 0x5e, 0xa4, 0x4e, 0x00, 0x46, 0xa1, 0x20, 0xfe, 0xf7, 0xd5, 0x73, 0x01, - 0x6d, 0x8e, 0xdf, 0x0c, 0x20, 0x74, 0x9f, 0x05, 0xed, 0xcc, 0xca, 0x4a, 0x30, 0x56, - 0x5d, 0xf6, 0xe7, 0x90, 0x15, 0xf0, 0x4b, 0x03, 0x62, 0x3d, 0x3a, 0xa2, 0x5c, 0xdb, - 0xaf, 0xf3, 0x30, 0x63, 0x34, 0x70, 0xc0, 0x28, 0x96, 0x89, 0x98, 0x8c, 0x27, 0xfe, - 0x49, 0xac, 0xc9, 0x57, 0xd3, 0xbe, 0x72, 0xc4, 0xbc, 0xe0, 0x5f, 0x1c, 0x80, 0xf3, - 0xc2, 0xad, 0x5b, 0x4e, 0x8a, 0x27, 0x14, 0xc1, 0xd1, 0xea, 0x51, 0x8f, 0x43, 0x1f, - 0x97, 0xf6, 0xd6, 0x8e, 0xaf, 0xb0, 0x6a, 0xd7, 0x22, 0x6a, 0x29, 0xa2, 0xb3, 0xa9, - 0xe5, 0x40, 0x3c, 0xdd, 0x92, 0x34, 0x00, 0xa4, 0x30, 0x30, 0x54, 0x87, 0x69, 0x86, - 0xf8, 0x34, 0x84, 0x8a, 0x49, 0x02, 0x65, 0x9b, 0x28, 0x8d, 0x5e, 0x3e, 0xf2, 0x6a, - 0x9e, 0xcb, 0x3f, 0x1b, 0xe3, 0x63, 0x00, 0x37, 0xd1, 0x47, 0x30, 0x14, 0x98, 0xbf, - 0xe1, 0x98, 0xb8, 0x11, 0x6f, 0x24, 0x4a, 0x12, 0x54, 0x7f, 0xfe, 0x6a, 0x50, 0x06, - 0xf7, 0x48, 0xc0, 0x48, 0x5f, 0xd7, 0x22, 0x32, 0xe0, 0xc5, 0x5d, 0xf0, 0x90, 0x01, - 0x19, 0x46, 0xc8, 0xb4, 0x93, 0xf8, 0xaa, 0xf9, 0x2d, 0xe0, 0x73, 0x96, 0xe9, 0x01, - 0xfb, 0x4d, 0xd8, 0xa4, 0xf2, 0x91, 0x64, 0x52, 0x67, 0xe7, 0xec, 0x03, 0x35, 0xea, - 0xed, 0xec, 0xa2, 0x8a, 0xb4, 0xc3, 0x63, 0x28, 0xc7, 0x32, 0x03, 0xdb, 0xca, 0x87, - 0xe4, 0x0d, 0xcf, 0x00, 0x7b, 0xf8, 0x68, 0x7d, 0xd4, 0xa7, 0x76, 0x15, 0x1e, 0x9d, - 0x23, 0x4f, 0x52, 0x44, 0x2a, 0x33, 0xc7, 0x56, 0x6b, 0x00, 0x7f, 0x65, 0x37, 0x83, - 0x7c, 0xf7, 0x52, 0x60, 0x26, 0x24, 0x03, 0x06, 0x15, 0xd0, 0xcb, 0x88, 0x23, 0x8b, - 0x91, 0xf5, 0x78, 0xe0, 0x72, 0x8b, 0x32, 0x73, 0x43, 0x63, 0x94, 0x4b, 0xbf, 0xce, - 0x58, 0x84, 0xdc, 0x3c, 0x77, 0x7e, 0x0b, 0x3f, 0x1e, 0xe4, 0x02, 0x92, 0x98, 0x89, - 0x5e, 0x6b, 0x82, 0xf6, 0xf2, 0x30, 0x7d, 0xfc, 0x26, 0x7e, 0x27, 0xca, 0x8d, 0x7d, - 0x9b, 0x49, 0xb9, 0x07, 0x86, 0xb7, 0xf3, 0x9d, 0x90, 0x6c, 0xa7, 0xb6, 0x52, 0x7d, - 0x5e, 0x31, 0x31, 0x6f, 0xce, 0x02, 0x14, 0x41, 0x8f, 0x95, 0xab, 0x95, 0x04, 0xc9, - 0x8b, 0xa9, 0xe8, 0x68, 0x75, 0x4c, 0xb8, 0x13, 0x01, 0x4c, 0xbb, 0x19, 0x6e, 0xac, - 0x15, 0x28, 0x61, 0xaf, 0x71, 0x9c, 0x76, 0x32, 0x71, 0x07, 0x54, 0xcd, 0x2c, 0x72, - 0x54, 0x4c, 0x25, 0xb6, 0x6d, 0x1d, 0x01, 0x6f, 0x97, 0xa4, 0x09, 0xec, 0xd1, 0x15, - 0x77, 0xa3, 0x58, 0x64, 0x7e, 0x17, 0x26, 0xda, 0x16, 0xd0, 0xa0, 0xe2, 0x59, 0x1e, - 0xb3, 0xb7, 0xca, 0xc7, 0xfe, 0x47, 0xfb, 0xee, 0xf1, 0x0c, 0x6e, 0xeb, 0x92, 0x89, - 0xaa, 0x41, 0x54, 0xd4, 0x2e, 0xa7, 0x5b, 0x86, 0x4e, 0x0a, 0x12, 0x15, 0xae, 0x35, - 0xdd, 0x0d, 0xb3, 0xfb, 0xbe, 0xf3, 0x9a, 0xd3, 0x99, 0xc3, 0xd0, 0x4d, 0x0d, 0x4a, - 0xd9, 0xf2, 0xce, 0x44, 0x2b, 0xc0, 0x7d, 0xab, 0xd3, 0x66, 0x30, 0x7e, 0xef, 0xcb, - 0x2a, 0xb4, 0x83, 0xdb, 0xe8, 0x0b, 0x3e, 0xb4, 0xfe, 0x96, 0x61, 0x31, 0xa5, 0x87, - 0xff, 0xb2, 0xe3, 0x66, 0x4d, 0x31, 0xe2, 0xc5, 0x20, 0x72, 0x2d, 0xc1, 0xa1, 0xf5, - 0xd2, 0x7e, 0xd0, 0xe9, 0x37, 0xc4, 0xc8, 0x99, 0x63, 0x57, 0x6c, 0xdc, 0xa0, 0x01, - 0x36, 0x1f, 0x11, 0xbd, 0x39, 0xe2, 0xe2, 0xb3, 0x67, 0x94, 0x33, 0x05, 0xfc, 0xdd, - 0xcb, 0xce, 0x64, 0x60, 0xa8, 0xba, 0xfe, 0xff, 0x83, 0x94, 0xbe, 0xba, 0x9b, 0xb8, - 0x93, 0xf1, 0xa7, 0xab, 0xfd, 0x2e, 0x80, 0xbf, 0x10, 0xf0, 0x54, 0x6e, 0x72, 0xa4, - 0x05, 0x18, 0x83, 0xe1, 0xf7, 0xed, 0xfe, 0x12, 0xee, 0x15, 0x05, 0xd9, 0x50, 0x3a, - 0x83, 0xdd, 0xb2, 0xb9, 0x98, 0xcb, 0x24, 0x75, 0xb8, 0x8d, 0x28, 0x0f, 0x1d, 0xf6, - 0x88, 0xf4, 0x72, 0x96, 0x8f, 0x8c, 0x71, 0x8f, 0x1f, 0x9f, 0xbd, 0x39, 0xfb, 0x30, - 0x73, 0x31, 0x2b, 0xc5, 0x4c, 0x75, 0x52, 0x10, 0xd0, 0xef, 0x49, 0xf9, 0xf2, 0xbc, - 0xf0, 0x6a, 0x10, 0x99, 0x13, 0x2a, 0x1e, 0x08, 0xd8, 0x4b, 0x68, 0x54, 0x38, 0x48, - 0xe1, 0x53, 0x8e, 0xdd, 0x88, 0x16, 0x20, 0x56, 0x0e, 0x54, 0xd8, 0xd6, 0xf9, 0xa7, - 0x1c, 0xa2, 0xfd, 0x44, 0xf8, 0xfa, 0xb9, 0xd0, 0x94, 0xf1, 0xdc, 0xe5, 0x2f, 0x40, - 0xc5, 0xaa, 0xfe, 0x1f, 0x73, 0xe9, 0x8a, 0x2a, 0x39, 0x5f, 0x48, 0xd5, 0xda, 0x98, - 0xfa, 0x5c, 0x95, 0xe4, 0xaf, 0xaf, 0x84, 0xe7, 0xa1, 0x38, 0x80, 0x7f, 0x71, 0xeb, - 0x64, 0xfc, 0xb3, 0xb5, 0x16, 0x9e, 0x8b, 0xed, 0xae, 0x1d, 0xff, 0xd7, 0x25, 0xad, - 0x6f, 0xba, 0x9f, 0xd5, 0x0f, 0x39, 0xdb, 0x94, 0x32, 0xcd, 0x5f, 0x37, 0x9b, 0x68, - 0x0c, 0x09, 0xc5, 0x31, 0x3e, 0xa7, 0x35, 0x17, 0xf0, 0x17, 0xdd, 0xcc, 0xa3, 0x3a, - 0x40, 0x5c, 0x0c, 0xa2, 0x93, 0xd8, 0xc3, 0x47, 0x14, 0xae, 0xc2, 0x41, 0xb9, 0xa6, - 0x34, 0xec, 0x65, 0xc8, 0xc0, 0xb5, 0x6e, 0x59, 0xdf, 0x8e, 0x66, 0x8e, 0x74, 0xd2, - 0x49, 0x4b, 0xca, 0x14, 0xd8, 0x10, 0x2d, 0xc0, 0x59, 0x2d, 0xbf, 0x93, 0xc0, 0xad, - 0x5f, 0x9d, 0xc8, 0x9a, 0xc2, 0x4a, 0x7e, 0x98, 0x1f, 0xec, 0xa0, 0x46, 0x1d, 0x3f, - 0xce, 0x1e, 0xec, 0x98, 0xa4, 0xaf, 0xbb, 0x0b, 0x7e, 0x6c, 0x46, 0xae, 0xc3, 0x85, - 0xc9, 0xc0, 0xfb, 0xc2, 0x03, 0x26, 0x4a, 0xa6, 0xaa, 0x71, 0xc6, 0x7f, 0xff, 0x15, - 0x9c, 0xcb, 0xac, 0x01, 0xcd, 0xd8, 0x5c, 0x28, 0x83, 0x5a, 0x98, 0xe9, 0xb7, 0xd0, - 0xcd, 0x4c, 0x43, 0x30, 0xa0, 0xa5, 0x33, 0x4b, 0x58, 0x38, 0xc0, 0x72, 0xdf, 0x4b, - 0xd7, 0x29, 0x72, 0x51, 0xcb, 0xf8, 0x5d, 0xd8, 0x30, 0x6e, 0x1a, 0x8e, 0xc8, 0x93, - 0xf4, 0xb9, 0x55, 0x81, 0x33, 0xe2, 0x0e, 0x0c, 0x95, 0x98, 0xf0, 0x54, 0xe2, 0xb0, - 0xb7, 0x7d, 0x44, 0x94, 0xc3, 0x93, 0xc5, 0xdd, 0x0e, 0x83, 0xa6, 0x52, 0x02, 0x43, - 0xed, 0xc5, 0x62, 0x00, 0xf1, 0xcd, 0x34, 0xb8, 0xf6, 0x9d, 0x53, 0xe4, 0xa8, 0x23, - 0xa4, 0x68, 0x52, 0xe6, 0x16, 0x72, 0xba, 0x69, 0x44, 0x7e, 0xe4, 0x95, 0x22, 0x97, - 0x8c, 0x64, 0x61, 0x6e, 0xa4, 0x2a, 0x0b, 0x0c, 0x6c, 0xc9, 0x53, 0xc7, 0x48, 0xa5, - 0x50, 0xdb, 0xab, 0xd7, 0x40, 0x10, 0xcd, 0xb8, 0xfd, 0x19, 0xc8, 0x86, 0x24, 0x73, - 0xf8, 0x26, 0x26, 0x7c, 0x8c, 0xf4, 0x1c, 0xfc, 0x36, 0x10, 0x06, 0x65, 0xeb, 0xd7, - 0x66, 0x39, 0x0d, 0x83, 0xc1, 0xb2, 0xf7, 0x95, 0xcb, 0x6d, 0x3c, 0x38, 0xdc, 0xb8, - 0xe9, 0x8c, 0x6e, 0xc0, 0xcd, 0x51, 0x11, 0x10, 0x8a, 0x07, 0x9d, 0x57, 0xf9, 0xb1, - 0x69, 0x60, 0xd9, 0x4a, 0x4f, 0x23, 0x8a, 0x6d, 0x7a, 0x25, 0xb6, 0x25, 0x3b, 0x0a, - 0xe0, 0x08, 0x8c, 0xe4, 0x14, 0x40, 0x6f, 0xa7, 0xd0, 0x20, 0x04, 0x69, 0x26, 0x81, - 0xe4, 0xd9, 0x57, 0x78, 0x6b, 0xe9, 0xfb, 0x7f, 0x06, 0x41, 0x13, 0x52, 0x63, 0x89, - 0xda, 0xb6, 0xff, 0x0a, 0x2d, 0xd6, 0xdd, 0xe4, 0x2c, 0x5e, 0x57, 0x9b, 0xf9, 0x96, - 0xd6, 0xea, 0x33, 0xdc, 0x52, 0xc8, 0xb1, 0x5c, 0x92, 0xb6, 0x17, 0x2b, 0xe0, 0x78, - 0x1e, 0x33, 0x96, 0x00, 0x66, 0x65, 0x00, 0x88, 0x27, 0x4a, 0xe5, 0x77, 0xe6, 0x46, - 0x5e, 0x8f, 0xcf, 0xca, 0xe7, - ], - ss: [ - 0x79, 0x4e, 0x2f, 0x99, 0xd9, 0xa8, 0x90, 0xc3, 0x38, 0xc2, 0x4a, 0x01, 0x80, 0x35, - 0xf8, 0xf5, 0x1d, 0xb5, 0x76, 0xfa, 0xf0, 0xcd, 0xe9, 0x6c, 0xf7, 0x77, 0xa8, 0x1b, - 0xdc, 0xcc, 0xe8, 0x64, - ], - }, - TestVector { - seed: [0x05; 32], - randomness: [0x69; 128], - ek: &[ - 0x33, 0x39, 0x34, 0x46, 0xa7, 0x6c, 0x2c, 0x01, 0xb4, 0x4d, 0xa5, 0x69, 0x6d, 0x84, - 0x52, 0xb2, 0x9a, 0xb7, 0xb9, 0x17, 0x87, 0x76, 0x53, 0x66, 0xbc, 0x1a, 0x15, 0xb1, - 0x49, 0x79, 0x24, 0x27, 0x84, 0x4f, 0xf6, 0x87, 0x53, 0xf9, 0x57, 0x18, 0x7c, 0x10, - 0x2d, 0x09, 0x40, 0xc4, 0x98, 0xb6, 0x73, 0x32, 0xa7, 0xf9, 0xcb, 0xb8, 0x2f, 0xd3, - 0xbe, 0xc9, 0x91, 0x4e, 0x05, 0xa9, 0x55, 0x03, 0x53, 0x62, 0xdc, 0x74, 0x62, 0x07, - 0x1c, 0x19, 0xe2, 0x25, 0xac, 0x96, 0xc1, 0x2f, 0xa3, 0x4a, 0x2e, 0x86, 0xe0, 0xa8, - 0x4a, 0x0c, 0x63, 0x3e, 0x04, 0x4b, 0x3d, 0x93, 0x96, 0x97, 0x05, 0x83, 0x3a, 0x53, - 0xa4, 0x25, 0x7b, 0x7f, 0x4c, 0x15, 0x15, 0xce, 0xaa, 0x8a, 0xf9, 0xeb, 0x7f, 0x53, - 0xca, 0x7c, 0xb4, 0x02, 0xa4, 0xab, 0xa1, 0x1c, 0x9d, 0x32, 0x06, 0xf8, 0x20, 0x9c, - 0x43, 0x6b, 0xc3, 0xea, 0x04, 0x87, 0xc4, 0x56, 0xa7, 0x9e, 0x24, 0x0f, 0xc4, 0xf5, - 0x82, 0x9e, 0x49, 0x77, 0x81, 0x7a, 0xac, 0x9d, 0xe9, 0xa0, 0xcf, 0x6c, 0xc2, 0x81, - 0x31, 0xbe, 0x92, 0xc2, 0xa6, 0xec, 0x67, 0x2b, 0xca, 0x1a, 0x8b, 0x37, 0x58, 0x09, - 0x2f, 0x8b, 0x87, 0xa1, 0x15, 0x65, 0xc0, 0x31, 0x2e, 0x82, 0x93, 0x9f, 0x8f, 0xd1, - 0x80, 0x24, 0xa7, 0x1b, 0xb9, 0x8a, 0x88, 0x5c, 0x6a, 0xb9, 0x92, 0x99, 0xcd, 0x43, - 0xa6, 0x20, 0x8d, 0x21, 0x98, 0xa4, 0x5b, 0xcd, 0xbe, 0xc5, 0x90, 0x15, 0x73, 0x75, - 0xc1, 0x6a, 0x45, 0x63, 0x27, 0xbb, 0xd4, 0x40, 0x11, 0xb6, 0x35, 0xcd, 0x1f, 0x67, - 0x82, 0x77, 0x34, 0x7a, 0xa5, 0xa7, 0x65, 0xb7, 0x20, 0x8a, 0xca, 0xa4, 0x31, 0x6e, - 0xa5, 0x23, 0xf5, 0x9a, 0x06, 0x71, 0x59, 0x4e, 0x56, 0x12, 0x16, 0x54, 0xf3, 0x58, - 0x1e, 0x88, 0x20, 0x72, 0x39, 0x69, 0x32, 0xda, 0x2e, 0x2e, 0xa0, 0x2b, 0xf5, 0x48, - 0x9e, 0x54, 0x6c, 0x45, 0x2b, 0x7c, 0x6f, 0x60, 0xe8, 0xa4, 0xc6, 0x11, 0x2f, 0x6c, - 0xcc, 0x7e, 0x3a, 0x7a, 0x44, 0x74, 0x8a, 0xa1, 0x30, 0x88, 0x07, 0xa0, 0x8c, 0x15, - 0xd7, 0x8a, 0x2e, 0x19, 0xa2, 0x75, 0x0a, 0x91, 0x6b, 0x8c, 0x46, 0x84, 0x4b, 0x25, - 0x7c, 0x26, 0x63, 0xa8, 0x89, 0x5b, 0x3d, 0xf8, 0xc4, 0x09, 0x60, 0xe6, 0xb9, 0x12, - 0x62, 0x3c, 0x8a, 0x92, 0xc9, 0xfb, 0x43, 0x5d, 0x20, 0xe6, 0xcd, 0xa9, 0xfb, 0x45, - 0x6e, 0x55, 0xc1, 0xdd, 0x90, 0xa5, 0xf6, 0x4a, 0x5a, 0xc2, 0xc6, 0x12, 0x50, 0x46, - 0x17, 0x57, 0x51, 0xaa, 0x74, 0x29, 0x71, 0xf1, 0x72, 0x83, 0x28, 0xc3, 0x53, 0xf4, - 0xa7, 0xa0, 0x8f, 0xf1, 0x6b, 0x8f, 0x97, 0x8a, 0xe4, 0x17, 0x24, 0x49, 0x4c, 0x43, - 0x64, 0x71, 0x50, 0x5e, 0x2c, 0x17, 0xba, 0x95, 0x8a, 0xde, 0x7b, 0x2a, 0xfb, 0xf9, - 0xcc, 0x26, 0x65, 0x51, 0x89, 0x49, 0x75, 0x5f, 0xd5, 0xbb, 0x8b, 0x15, 0xac, 0x9b, - 0x80, 0xb7, 0x8f, 0xa6, 0x15, 0xa9, 0x18, 0xc4, 0xa9, 0x95, 0x49, 0xc3, 0x7c, 0x6a, - 0xd0, 0x01, 0x7c, 0x51, 0xc3, 0x96, 0x3e, 0x34, 0x08, 0xb1, 0x18, 0x48, 0xdd, 0xd4, - 0xaf, 0xe9, 0x6b, 0x67, 0xcd, 0x66, 0xc7, 0x6e, 0x81, 0x7d, 0x4c, 0x15, 0x0d, 0xe5, - 0x2a, 0x72, 0x05, 0x05, 0xb9, 0xa4, 0xb0, 0x90, 0x08, 0x24, 0x3c, 0x0f, 0xb0, 0x5e, - 0xf0, 0x04, 0xb9, 0xc2, 0xc2, 0x23, 0xf9, 0x23, 0x0d, 0xc5, 0x7b, 0x1d, 0xd3, 0xd1, - 0x87, 0x34, 0x57, 0x84, 0x2b, 0x47, 0xc5, 0x9b, 0x9a, 0x6b, 0x39, 0xd7, 0xb6, 0x17, - 0x87, 0xb4, 0x2a, 0x50, 0x0c, 0x9f, 0x57, 0x11, 0x4e, 0xc7, 0x37, 0xbf, 0x7c, 0x45, - 0x30, 0x3b, 0x8a, 0x3f, 0xa7, 0x8b, 0x3c, 0x64, 0x9c, 0xfb, 0xd1, 0x66, 0xc6, 0x0c, - 0x37, 0xde, 0xa8, 0x9e, 0x2d, 0xf7, 0x1c, 0xe4, 0xc6, 0x05, 0xfe, 0x45, 0xab, 0xca, - 0xf3, 0xa6, 0x04, 0xf5, 0x48, 0xee, 0x50, 0x30, 0xfd, 0xf4, 0x9a, 0xd4, 0x12, 0x9b, - 0x94, 0x51, 0x6a, 0x22, 0xa8, 0xb7, 0x28, 0x11, 0x2b, 0xfd, 0x20, 0x9e, 0x5a, 0x5b, - 0x56, 0x5e, 0x20, 0xa8, 0xdc, 0xe9, 0x77, 0x48, 0xa7, 0x90, 0x63, 0x79, 0x0b, 0xec, - 0x93, 0xbc, 0x89, 0x10, 0x3c, 0x32, 0x41, 0x9b, 0xba, 0xdc, 0x1f, 0xfc, 0x67, 0x9e, - 0x48, 0x13, 0x9a, 0x0c, 0x88, 0x56, 0x3f, 0x17, 0x0d, 0x16, 0x57, 0x29, 0xe3, 0xd7, - 0x10, 0x36, 0x5c, 0x40, 0x4d, 0xfc, 0x87, 0xd7, 0xc3, 0x1e, 0xfd, 0x24, 0x78, 0x5a, - 0x92, 0x65, 0xe5, 0x5c, 0x4a, 0x62, 0x43, 0x15, 0xdb, 0x40, 0x05, 0x01, 0x98, 0x18, - 0xa1, 0xe7, 0xc0, 0x36, 0x7a, 0x70, 0xfb, 0xd1, 0x60, 0x98, 0xe2, 0x7a, 0x64, 0x0b, - 0x0f, 0x3d, 0xd9, 0x51, 0x5d, 0x82, 0xbe, 0x06, 0x37, 0x50, 0x6f, 0xf1, 0x71, 0xc6, - 0xa3, 0x1e, 0xdf, 0x45, 0x3b, 0x40, 0xa6, 0x16, 0x2f, 0xeb, 0x7c, 0x35, 0x43, 0x50, - 0x6b, 0xc1, 0x10, 0x5c, 0xe1, 0x96, 0xe4, 0x60, 0x97, 0xdb, 0x74, 0x9b, 0x48, 0x58, - 0x08, 0xdc, 0xc3, 0xb4, 0x22, 0x14, 0x70, 0xac, 0x21, 0x88, 0x0b, 0xc2, 0x3c, 0x7e, - 0xf4, 0xb3, 0x15, 0xf4, 0x0d, 0xf4, 0x08, 0x02, 0xf7, 0x32, 0x49, 0x57, 0xb4, 0x50, - 0x03, 0x2c, 0x31, 0x04, 0xf8, 0x71, 0x25, 0x05, 0x90, 0xa4, 0xc9, 0xa2, 0x96, 0x87, - 0xc7, 0x0e, 0x02, 0xb4, 0x63, 0x50, 0x78, 0x1a, 0xbc, 0x7c, 0x2b, 0x25, 0x6c, 0x54, - 0xbb, 0xc9, 0x6e, 0xb2, 0x0b, 0x89, 0x18, 0x77, 0xc3, 0xa6, 0x73, 0xf6, 0x7c, 0x18, - 0x19, 0x7a, 0x0e, 0x3d, 0x65, 0x71, 0x96, 0xd5, 0x67, 0x3e, 0xfb, 0x19, 0xeb, 0xf9, - 0xb3, 0xe4, 0x96, 0x91, 0x61, 0x28, 0x34, 0xcb, 0x66, 0x2d, 0x28, 0x28, 0x93, 0x8b, - 0x1a, 0xc1, 0xa4, 0x58, 0x81, 0xb9, 0xe5, 0x1c, 0x78, 0x6c, 0x1a, 0x32, 0x18, 0x14, - 0xa8, 0xc3, 0x96, 0x42, 0x1b, 0x7f, 0x31, 0x3c, 0xc2, 0xe4, 0x44, 0x7e, 0x6e, 0x87, - 0x97, 0x1e, 0x16, 0x60, 0xd9, 0x4a, 0xad, 0x5f, 0x13, 0xb2, 0x6b, 0xf4, 0x9f, 0xa4, - 0x99, 0x82, 0x2b, 0x19, 0x59, 0xf4, 0x8a, 0xa8, 0x8d, 0xfa, 0x51, 0x01, 0xf4, 0x63, - 0xd5, 0xbb, 0xc8, 0xca, 0x21, 0xb9, 0xd0, 0x85, 0x7f, 0xd2, 0xe4, 0x2d, 0x5c, 0x1c, - 0x7a, 0x91, 0x92, 0x76, 0x5a, 0x30, 0x13, 0xee, 0xf5, 0x4c, 0xa9, 0xe4, 0x3f, 0xa9, - 0x9a, 0xbf, 0xd8, 0x05, 0x3e, 0x90, 0x59, 0x65, 0x0b, 0x96, 0x4d, 0x6a, 0xea, 0x8c, - 0x26, 0xc1, 0x3a, 0xdc, 0x0a, 0x6d, 0x91, 0x20, 0x8f, 0x2d, 0xea, 0x0d, 0xa4, 0xd5, - 0x7a, 0x3a, 0x8a, 0x6b, 0xe9, 0x15, 0x6a, 0x40, 0x65, 0x05, 0x8c, 0xf9, 0x65, 0xda, - 0x10, 0x58, 0x6b, 0x09, 0x45, 0xc3, 0x09, 0x65, 0xbf, 0x8a, 0x43, 0x6a, 0xaa, 0x11, - 0x5a, 0xb1, 0x70, 0x07, 0x1c, 0x30, 0x80, 0xf5, 0xc7, 0x23, 0xc1, 0x0d, 0x05, 0x96, - 0x3a, 0x16, 0x26, 0x22, 0x43, 0x86, 0x82, 0xfe, 0xe1, 0xb6, 0x19, 0xc2, 0xb1, 0x0c, - 0x20, 0x7a, 0xd7, 0xd3, 0x8a, 0xb1, 0xea, 0x7e, 0xda, 0x09, 0x24, 0xd9, 0xab, 0x6b, - 0x44, 0x33, 0x86, 0xaf, 0x7b, 0x07, 0xfe, 0x26, 0xb8, 0xfc, 0x69, 0x11, 0x78, 0x96, - 0x66, 0xbc, 0x14, 0x61, 0x9a, 0x38, 0x1e, 0xba, 0x79, 0x66, 0xe0, 0xb4, 0xab, 0x0e, - 0x52, 0x80, 0x83, 0x80, 0x6f, 0x46, 0x45, 0x6f, 0x97, 0xe5, 0x92, 0x76, 0xd5, 0xa6, - 0x11, 0x9b, 0x76, 0x6b, 0x18, 0x47, 0xd3, 0xa1, 0xad, 0x3c, 0x40, 0x22, 0xcd, 0x06, - 0x16, 0xbb, 0xc3, 0x48, 0xd4, 0xe0, 0x72, 0xf7, 0xd6, 0x82, 0x72, 0x61, 0x7b, 0x03, - 0xbc, 0x9b, 0x25, 0xf5, 0x69, 0xd0, 0xb1, 0x1d, 0xab, 0x8c, 0x5a, 0x7e, 0xe1, 0x1e, - 0xe6, 0xc7, 0x61, 0xee, 0x68, 0x46, 0x25, 0x32, 0x2c, 0x6c, 0xdc, 0x81, 0x5e, 0xe1, - 0xc0, 0xac, 0xd2, 0x9a, 0x8e, 0x1c, 0x82, 0x6c, 0xf8, 0x9f, 0x25, 0x94, 0x45, 0x93, - 0x33, 0x66, 0x43, 0xa4, 0x64, 0x83, 0xdc, 0xac, 0xa9, 0xe1, 0xba, 0xe9, 0xa1, 0x96, - 0xf6, 0x92, 0xac, 0x05, 0x32, 0xcd, 0x91, 0x11, 0x3d, 0x5d, 0x97, 0x49, 0x63, 0xa5, - 0x24, 0xbf, 0x70, 0x8c, 0x44, 0xe1, 0x98, 0xdd, 0x21, 0x2d, 0xfc, 0xf6, 0x92, 0x13, - 0xa4, 0x2e, 0x32, 0xe6, 0xb7, 0xc8, 0x60, 0x14, 0x8e, 0xd3, 0x8c, 0x51, 0x00, 0x2b, - 0x83, 0xb0, 0xc4, 0xb9, 0x79, 0xb5, 0x2a, 0x75, 0x3b, 0xf2, 0xc3, 0x38, 0x1c, 0x02, - 0x76, 0x23, 0xb8, 0xa8, 0x25, 0x1e, 0x60, 0xf5, 0x55, 0x24, 0xb5, 0x6b, 0x95, 0x9a, - 0x14, 0xd8, 0x46, 0x37, 0x08, 0x6a, 0x15, 0x56, 0x77, 0x17, 0xdb, 0xda, 0x7a, 0xff, - 0x9f, 0xd6, 0x1d, 0x09, 0x58, 0x9a, 0xc8, 0xc0, 0x04, 0x45, 0x38, 0xba, 0xfe, 0xa1, - 0x20, 0x05, 0x48, 0x04, 0x6b, 0x8f, 0xe3, 0x68, 0x1c, 0xfc, 0xb4, 0x3a, 0x8a, 0x1b, - 0x5d, 0xf7, 0x85, 0xf3, 0xb0, 0xcc, 0x71, 0x3c, 0x0b, 0xbb, 0xff, 0xd9, 0xfd, 0x69, - 0x1d, 0xf9, 0xac, 0xd2, 0x25, 0x8c, 0x96, 0x71, 0xa1, 0x4b, 0x4c, 0xee, 0x57, 0x3e, - 0x71, 0x1c, 0xf6, 0xd8, 0xeb, 0x9e, 0xe0, 0x1f, 0x95, 0x63, 0xde, 0xa7, 0x43, 0x8d, - 0x48, 0x4b, 0x5d, - ], - dk: [0x05; 32], - dk_pq: [ - 0x74, 0x9f, 0xe3, 0xa6, 0xfc, 0x42, 0x9b, 0x23, 0x69, 0xd9, 0xe8, 0x19, 0x1f, 0x72, - 0xd4, 0xfd, 0x3b, 0x29, 0x2f, 0x2f, 0x12, 0x23, 0x12, 0xbf, 0xaf, 0x4b, 0x6a, 0x90, - 0xf1, 0x60, 0x0c, 0x46, 0x70, 0xeb, 0xea, 0x7a, 0xec, 0x85, 0x1d, 0x89, 0xf0, 0x09, - 0x5c, 0x61, 0xa2, 0xca, 0xff, 0xb3, 0x7f, 0x1b, 0xa7, 0xf2, 0x1d, 0xd5, 0x14, 0xb0, - 0xe2, 0x00, 0x06, 0x96, 0x9d, 0x48, 0x5c, 0xa9, - ], - dk_t: [ - 0x73, 0x0d, 0xef, 0x4e, 0x09, 0x0b, 0x60, 0xc0, 0x56, 0xe1, 0xa9, 0xb6, 0x53, 0xf4, - 0x79, 0xaf, 0x73, 0x98, 0xbe, 0xa9, 0x57, 0x71, 0x05, 0x4a, 0xb4, 0xf4, 0x55, 0xc9, - 0xa8, 0x6d, 0x7e, 0x49, - ], - ct: &[ - 0x6d, 0xc4, 0x76, 0xcb, 0xc9, 0x1f, 0xa3, 0x89, 0x5c, 0xfd, 0x69, 0xbd, 0xa5, 0x79, - 0x9b, 0x95, 0xb7, 0xc0, 0xdc, 0x87, 0xe5, 0xc7, 0x8d, 0xec, 0x9b, 0x36, 0x7d, 0xf5, - 0x8a, 0xbf, 0x3e, 0x78, 0x52, 0xaf, 0xb7, 0xb3, 0x1c, 0xaf, 0xf8, 0x56, 0xe5, 0xe4, - 0x13, 0x6a, 0x23, 0xa2, 0x4f, 0x30, 0x3c, 0x61, 0x00, 0xd9, 0xa0, 0xa6, 0x67, 0x31, - 0x64, 0xf6, 0xf4, 0x4e, 0xa4, 0x72, 0xf4, 0x61, 0x4c, 0x2b, 0x42, 0x49, 0x6d, 0x00, - 0x49, 0xa2, 0x7e, 0x02, 0xf1, 0xaa, 0x45, 0xba, 0x04, 0x44, 0x2a, 0x74, 0xb5, 0xe0, - 0x03, 0x5d, 0xf3, 0xd8, 0x87, 0x72, 0x66, 0xa4, 0x24, 0x1e, 0x65, 0x0a, 0x86, 0xcc, - 0xdf, 0xb0, 0xc6, 0xce, 0xf2, 0x2c, 0x62, 0xf3, 0x76, 0x54, 0x3b, 0xd5, 0x74, 0x93, - 0x53, 0xf8, 0x08, 0x30, 0x8e, 0xb7, 0x4e, 0xd0, 0x31, 0xe7, 0x3c, 0x9f, 0x42, 0xeb, - 0xdc, 0x8a, 0x48, 0x4b, 0x30, 0x76, 0x9a, 0x17, 0x90, 0x6e, 0x39, 0xfe, 0x8f, 0xa6, - 0x5c, 0x0f, 0x88, 0xfc, 0xc3, 0x43, 0x6c, 0x0b, 0xfe, 0x26, 0xa4, 0x99, 0x5d, 0x82, - 0xa4, 0x1c, 0x6a, 0x99, 0x14, 0x0a, 0x36, 0xd1, 0x66, 0xcb, 0xa6, 0xad, 0x2d, 0xd0, - 0x65, 0xac, 0x19, 0xce, 0xba, 0xdf, 0xd4, 0x55, 0xc9, 0xfd, 0x5d, 0x15, 0xab, 0x2f, - 0xac, 0xaf, 0x9f, 0x5c, 0x79, 0xbc, 0xd1, 0x2d, 0x31, 0xef, 0x88, 0x84, 0x24, 0x03, - 0xeb, 0xfe, 0xf2, 0x26, 0xf9, 0xa1, 0xde, 0x78, 0xd1, 0x8d, 0x2a, 0x0a, 0x57, 0xa7, - 0x80, 0x8e, 0x5c, 0x4d, 0x9c, 0x7c, 0x51, 0x0b, 0xd1, 0x81, 0x3d, 0xb6, 0x0a, 0x2e, - 0x01, 0x21, 0xe7, 0x2c, 0x52, 0xed, 0xf7, 0x70, 0x84, 0x22, 0x2d, 0xbc, 0xd9, 0x4a, - 0x10, 0xcd, 0x4d, 0xc3, 0xb0, 0x90, 0x80, 0xe8, 0xe5, 0xa8, 0x97, 0x17, 0x61, 0xcd, - 0x46, 0xde, 0xd6, 0x5c, 0x78, 0xac, 0x4d, 0x89, 0x6d, 0x81, 0x8a, 0x40, 0x0e, 0xd8, - 0x32, 0x83, 0x05, 0x70, 0xd4, 0x92, 0x66, 0x5d, 0xec, 0x3f, 0x8c, 0x11, 0x16, 0x8e, - 0xee, 0x66, 0xf3, 0x3d, 0x0c, 0x13, 0xce, 0x30, 0x62, 0x25, 0x2f, 0x10, 0x7a, 0x37, - 0x77, 0xd1, 0xd9, 0x12, 0x34, 0xf5, 0x85, 0x98, 0x18, 0x4f, 0xf8, 0x27, 0xf6, 0xb2, - 0xe7, 0x36, 0x38, 0xfc, 0xe0, 0xe4, 0xe5, 0x1e, 0xf7, 0x04, 0xe1, 0xd3, 0xf8, 0xdd, - 0x53, 0x12, 0x19, 0x1e, 0x36, 0xdb, 0x31, 0xd8, 0x2b, 0x2b, 0x76, 0x86, 0x9d, 0x7e, - 0xb0, 0x34, 0x74, 0xff, 0x61, 0x60, 0x08, 0x15, 0x8f, 0x3b, 0xf9, 0x66, 0xa2, 0x36, - 0xcb, 0x3e, 0x8c, 0x52, 0xde, 0x4d, 0x01, 0x0c, 0xc7, 0x12, 0xab, 0xc2, 0x3d, 0xff, - 0x6f, 0x5c, 0xe0, 0x06, 0x31, 0xfd, 0x3d, 0xba, 0xce, 0xba, 0x03, 0x0c, 0x2e, 0xc1, - 0x8f, 0xd0, 0xc3, 0x9c, 0x9c, 0x60, 0x13, 0x4a, 0x4d, 0xfc, 0xa5, 0x21, 0xdc, 0xd7, - 0x1c, 0xda, 0x11, 0x79, 0xd8, 0xef, 0x08, 0xf0, 0x6a, 0x42, 0x68, 0x6c, 0x36, 0x0c, - 0x92, 0x72, 0xf1, 0x5b, 0x42, 0x58, 0xe7, 0x85, 0x14, 0xc8, 0x81, 0x4a, 0xd7, 0x0a, - 0x10, 0x92, 0xd2, 0x65, 0x57, 0xa4, 0x57, 0x64, 0x04, 0x1b, 0x83, 0x24, 0xbb, 0xcd, - 0x69, 0xb5, 0xd2, 0x86, 0x8a, 0x6f, 0xd9, 0x6c, 0x87, 0x1c, 0xf8, 0x34, 0x13, 0x11, - 0x3c, 0x89, 0x8e, 0x4b, 0xb9, 0x83, 0x18, 0x7f, 0xa4, 0xc1, 0xcb, 0xb7, 0x3c, 0xd4, - 0x1d, 0x3d, 0x4f, 0x4d, 0xb1, 0x85, 0x04, 0x7a, 0xfd, 0xd2, 0x41, 0xf1, 0xb7, 0xe7, - 0x00, 0x7c, 0x00, 0xb0, 0x3a, 0xa8, 0xab, 0x83, 0x6c, 0xed, 0xad, 0x61, 0x27, 0x93, - 0x8f, 0x87, 0x86, 0x11, 0x08, 0x04, 0x72, 0x98, 0xd3, 0xd9, 0x45, 0xb3, 0x43, 0xc6, - 0x2e, 0x2f, 0xe8, 0x52, 0xa0, 0x35, 0x4f, 0xf3, 0x1d, 0xad, 0xc1, 0xed, 0x08, 0xa4, - 0xdd, 0xab, 0x41, 0xd9, 0x1c, 0x02, 0x62, 0x28, 0x3b, 0x11, 0xfc, 0xbb, 0x1d, 0xdb, - 0x4e, 0x9f, 0xdd, 0xd7, 0xcc, 0x33, 0x8e, 0x92, 0x5c, 0xed, 0xfa, 0xdf, 0x4e, 0x30, - 0x6f, 0x84, 0x86, 0x3f, 0xd4, 0x5a, 0x70, 0xf5, 0x7d, 0xf0, 0x38, 0x4e, 0x12, 0x34, - 0x22, 0x01, 0x03, 0xb0, 0xf6, 0x93, 0x14, 0x4a, 0x5e, 0xcc, 0x9d, 0x99, 0xab, 0x1d, - 0x6f, 0x72, 0x57, 0x40, 0xd1, 0xbb, 0x09, 0xc3, 0xa4, 0xb4, 0xea, 0x61, 0x4a, 0xc0, - 0x1b, 0xfb, 0x12, 0x88, 0xbb, 0xf1, 0x4d, 0xcd, 0x57, 0x2e, 0xcb, 0xb6, 0xc8, 0x22, - 0xfe, 0x54, 0x1b, 0x04, 0xa0, 0xd6, 0x49, 0x8b, 0x5a, 0x14, 0x72, 0x7c, 0x2d, 0x54, - 0x3c, 0x96, 0x47, 0x27, 0x7b, 0xd6, 0x78, 0x22, 0xa5, 0xfa, 0xbd, 0xa4, 0xa9, 0x8f, - 0x23, 0xef, 0x50, 0xad, 0x12, 0xb3, 0x21, 0x37, 0x7f, 0xd4, 0xee, 0x24, 0xb2, 0x34, - 0xb0, 0xf2, 0x96, 0x04, 0x99, 0x06, 0xac, 0xed, 0x9d, 0x08, 0x67, 0x1d, 0xe9, 0x94, - 0x95, 0x6a, 0x21, 0x79, 0x39, 0x4d, 0x37, 0xb5, 0x85, 0xa3, 0x1e, 0x40, 0x53, 0x25, - 0xef, 0x88, 0x0a, 0x10, 0x8e, 0xc4, 0x92, 0xc1, 0xc8, 0x7d, 0xa9, 0x0a, 0xdb, 0xa7, - 0x2d, 0x8b, 0xe4, 0x64, 0x3c, 0xcf, 0x29, 0x43, 0x1c, 0xae, 0x05, 0x3f, 0x9c, 0xf5, - 0x27, 0x1f, 0x7e, 0x1c, 0x7a, 0x4d, 0xe0, 0x93, 0xce, 0xb0, 0x53, 0x35, 0x18, 0x73, - 0xd6, 0x57, 0x73, 0x7e, 0xbb, 0xef, 0x08, 0x66, 0x40, 0xd4, 0x17, 0xc6, 0xa0, 0x5a, - 0xe7, 0xfa, 0x9e, 0x30, 0xb1, 0x12, 0x92, 0x13, 0x59, 0x52, 0x90, 0x42, 0x70, 0x32, - 0xf2, 0x6e, 0xbc, 0xd1, 0x54, 0x6b, 0x9c, 0x9c, 0x1b, 0xcf, 0x01, 0xff, 0x3d, 0x18, - 0xfb, 0x1e, 0xbd, 0xbe, 0x0f, 0xee, 0x54, 0x0f, 0x4b, 0x53, 0x18, 0xba, 0x65, 0x87, - 0x7f, 0x45, 0x77, 0x36, 0xd3, 0x0c, 0x75, 0x0e, 0x42, 0xe0, 0xe7, 0x73, 0xaa, 0xa6, - 0xe5, 0x26, 0xbc, 0x61, 0x43, 0xef, 0x63, 0x1f, 0x6b, 0x3f, 0x88, 0x11, 0xa0, 0x26, - 0x37, 0x4d, 0xc2, 0x8e, 0x06, 0xc9, 0x2a, 0xcd, 0x09, 0xe1, 0xf3, 0xf9, 0x7c, 0x12, - 0xe5, 0x12, 0xb7, 0x78, 0x03, 0x85, 0x63, 0xb6, 0x7d, 0xe0, 0xd6, 0xb3, 0x4a, 0x48, - 0x15, 0x7f, 0x1b, 0x93, 0x6a, 0xbb, 0x8b, 0x9f, 0x3d, 0xa3, 0xad, 0xb8, 0x8b, 0x5f, - 0x36, 0xd0, 0xda, 0xe4, 0x86, 0x27, 0xcd, 0xc1, 0xa4, 0x03, 0x81, 0x0c, 0x81, 0x6e, - 0x32, 0xe0, 0xd1, 0x11, 0x25, 0x94, 0xa4, 0xf3, 0x72, 0xe9, 0xab, 0xe4, 0xe6, 0x72, - 0x1f, 0xf8, 0x3f, 0x48, 0x84, 0x21, 0x02, 0x21, 0x89, 0xb8, 0x2e, 0x1f, 0x7f, 0x27, - 0xa3, 0x3e, 0x4d, 0x11, 0x96, 0x95, 0x22, 0xe9, 0x1d, 0x19, 0xfb, 0xe1, 0xa3, 0xb9, - 0xeb, 0x6e, 0xb3, 0xdb, 0xdc, 0x2b, 0x19, 0x9d, 0xb9, 0xe8, 0x6e, 0x56, 0xbf, 0x69, - 0x5d, 0x0e, 0x6e, 0x79, 0x45, 0x72, 0x26, 0xb2, 0xb3, 0xce, 0xfd, 0xd2, 0xee, 0x37, - 0x75, 0xda, 0xe2, 0x68, 0x02, 0x03, 0x92, 0xf0, 0x33, 0x6c, 0x6f, 0xcb, 0x39, 0x28, - 0xbd, 0xfd, 0xea, 0xc7, 0x12, 0x46, 0x34, 0x3c, 0x08, 0xf2, 0xbe, 0x39, 0x7d, 0xaa, - 0x1f, 0xb9, 0xc2, 0x52, 0x65, 0x33, 0x07, 0xd0, 0xf7, 0xbc, 0x24, 0x11, 0x1b, 0xa8, - 0xdf, 0x6a, 0xb2, 0x99, 0x23, 0xb4, 0xe7, 0xf3, 0x47, 0x1b, 0xe2, 0x92, 0x3f, 0x46, - 0xdc, 0xca, 0xbb, 0x20, 0x63, 0x42, 0x7f, 0x3d, 0x4e, 0x53, 0xba, 0xf6, 0xa9, 0xec, - 0xb8, 0x8c, 0x12, 0xd9, 0xc2, 0x33, 0xff, 0x14, 0xf6, 0x3c, 0xcf, 0xd7, 0x6a, 0x8f, - 0x04, 0x6c, 0xc2, 0xd9, 0x67, 0x33, 0xe7, 0x2d, 0x56, 0xc8, 0x35, 0xdb, 0xc9, 0xa1, - 0xaa, 0x2a, 0x5b, 0xde, 0xe9, 0x15, 0xae, 0x7e, 0xb3, 0xe5, 0xdb, 0xbc, 0x8b, 0xa2, - 0x4d, 0xf6, 0xe6, 0x34, 0xbf, 0xfb, 0x43, 0x64, 0xa8, 0x10, 0x39, 0xb0, 0x6a, 0x2c, - 0x5c, 0xb3, 0x1c, 0x9c, 0xd8, 0x98, 0x5e, 0x7f, 0xe2, 0x98, 0x5c, 0x3e, 0x0a, 0x8f, - 0x1d, 0x52, 0xfe, 0xb2, 0xbf, 0xc3, 0x54, 0x9c, 0x38, 0x17, 0x98, 0x9c, 0xc1, 0x74, - 0x6f, 0xcf, 0xe8, 0x93, 0x88, 0x88, 0xe1, 0x22, 0x74, 0x48, 0x04, 0x91, 0xe5, 0x60, - 0x68, 0x00, 0x96, 0x1d, 0xc7, 0xae, 0xa8, 0x2d, 0x79, 0x3c, 0x00, 0x28, 0x1a, 0xdd, - 0x57, 0x9d, 0x5b, 0x67, 0x24, 0xed, 0xf7, 0xa5, 0xba, 0xae, 0x28, 0x5f, 0xbc, 0x7a, - 0xeb, 0xfd, 0x9c, 0x93, 0x04, 0xf9, 0x62, 0xb1, 0x45, 0x57, 0x3b, 0x14, 0x19, 0x1f, - 0xae, 0x24, 0xfe, 0x3a, 0x91, 0x29, 0x20, 0x59, 0x3f, 0xbb, 0x7c, 0xc1, 0x41, 0x86, - 0xb3, 0x37, 0x48, 0x49, 0xb7, - ], - ss: [ - 0x6f, 0x1c, 0x31, 0x7d, 0x16, 0x60, 0x8f, 0x30, 0x9e, 0x6b, 0x59, 0xa4, 0x8b, 0xe6, - 0x27, 0x22, 0x08, 0x1f, 0x4e, 0x2d, 0xe9, 0xe2, 0x74, 0x2a, 0x6d, 0x0e, 0x94, 0x67, - 0x9b, 0xa8, 0x56, 0xf7, - ], - }, - TestVector { - seed: [0x06; 32], - randomness: [0x6a; 128], - ek: &[ - 0xc3, 0xf9, 0xa6, 0x30, 0x52, 0x22, 0x86, 0x2c, 0x2c, 0x89, 0xec, 0x0d, 0xbd, 0x80, - 0x5c, 0x54, 0x7b, 0x21, 0x20, 0x40, 0x5b, 0xa8, 0xe9, 0x94, 0x94, 0x7b, 0x1d, 0x74, - 0xea, 0xcc, 0x58, 0x27, 0x72, 0x60, 0xba, 0x83, 0x7d, 0xe2, 0x9a, 0x0a, 0x2b, 0x84, - 0xa7, 0xfc, 0x80, 0x58, 0x93, 0x34, 0xfb, 0x26, 0x26, 0xc9, 0xf6, 0x1c, 0x01, 0xc8, - 0x8d, 0x60, 0xb2, 0x0b, 0x07, 0x28, 0x11, 0x0f, 0x08, 0x40, 0xfc, 0x01, 0xa6, 0x18, - 0x7a, 0x50, 0x6a, 0xb2, 0x3d, 0x2b, 0x45, 0x9f, 0xe0, 0x85, 0x3c, 0x44, 0xf8, 0x6a, - 0x69, 0x95, 0x33, 0x28, 0x45, 0x77, 0xf7, 0x91, 0x3b, 0x69, 0x89, 0x83, 0x61, 0xbb, - 0x67, 0xd3, 0x71, 0x16, 0x80, 0xc6, 0xc2, 0x5f, 0x25, 0x24, 0xc5, 0x60, 0x22, 0x22, - 0x74, 0x77, 0xf2, 0x8a, 0x19, 0x4e, 0x90, 0xb4, 0x70, 0x29, 0x01, 0xb0, 0x04, 0x6b, - 0xa7, 0x98, 0xcd, 0x1b, 0x84, 0x31, 0x92, 0xf3, 0xbc, 0x84, 0x1c, 0x8f, 0x97, 0x48, - 0xa1, 0xab, 0x34, 0xb5, 0x33, 0x6b, 0x12, 0xc5, 0x85, 0x85, 0xfc, 0xd0, 0x10, 0xbf, - 0xd6, 0xc4, 0x8e, 0x77, 0x5e, 0x76, 0x15, 0x25, 0xb2, 0x60, 0xc7, 0xf6, 0xe6, 0x46, - 0xe8, 0xf1, 0x76, 0x90, 0xaa, 0xb5, 0x1b, 0xab, 0x30, 0xc9, 0x76, 0x3f, 0xc5, 0x3b, - 0x85, 0x47, 0xd0, 0xb5, 0x6b, 0x0c, 0x82, 0xc4, 0x58, 0xc6, 0x1d, 0x84, 0x58, 0x7d, - 0x98, 0x97, 0x85, 0x60, 0x0b, 0x8e, 0x98, 0x7a, 0x36, 0x42, 0x3d, 0x38, 0x8c, 0xa1, - 0x1d, 0x61, 0x76, 0x5a, 0x01, 0xa4, 0xa7, 0x9c, 0xa2, 0x0a, 0x92, 0x59, 0x08, 0x49, - 0x4e, 0xae, 0x0a, 0x3b, 0x6d, 0xb1, 0xb0, 0x8c, 0xbb, 0xb7, 0xa4, 0xab, 0x5e, 0xdc, - 0xd9, 0x6b, 0xd7, 0x67, 0x25, 0xe9, 0x28, 0x05, 0x5b, 0x0c, 0x28, 0x83, 0xeb, 0xce, - 0x0a, 0x59, 0xbc, 0x9e, 0xc2, 0x82, 0xcf, 0x30, 0x0b, 0xa6, 0xc5, 0x38, 0x0d, 0x1b, - 0x70, 0xf1, 0x3b, 0x2d, 0xc6, 0xf6, 0x16, 0xc7, 0x60, 0x87, 0xa7, 0x3a, 0x70, 0xda, - 0xab, 0x7a, 0x6f, 0x97, 0x17, 0x1c, 0xa5, 0x99, 0x7b, 0xf4, 0x0e, 0x87, 0xb9, 0x5f, - 0x33, 0xa5, 0x33, 0x47, 0xba, 0x6c, 0x7b, 0xa8, 0x9b, 0xce, 0xc9, 0x04, 0x17, 0x01, - 0x22, 0x6f, 0xda, 0x12, 0x43, 0xf4, 0xb1, 0xfa, 0x04, 0x77, 0x40, 0xc7, 0xb7, 0x53, - 0xd6, 0x30, 0xfe, 0x38, 0x6f, 0x09, 0xe2, 0xa2, 0xf9, 0x65, 0x59, 0xae, 0x97, 0x9e, - 0xd9, 0xfa, 0x5a, 0x78, 0xd1, 0x31, 0x0e, 0xf3, 0x11, 0xf9, 0x7c, 0xc3, 0xb6, 0xa7, - 0x38, 0xbe, 0xe4, 0x5b, 0x75, 0xe3, 0xa0, 0xcc, 0x71, 0x4c, 0x81, 0xf7, 0x21, 0x87, - 0xb1, 0x05, 0xa2, 0x12, 0x0b, 0x9b, 0xea, 0xaa, 0xc1, 0x16, 0xbf, 0x98, 0x35, 0xc5, - 0x04, 0x71, 0x3f, 0x22, 0x18, 0xb5, 0x26, 0xf1, 0x3d, 0x8a, 0x8c, 0x02, 0xc9, 0x5a, - 0xa0, 0xf2, 0x92, 0x7c, 0x27, 0xe9, 0x96, 0xe4, 0x56, 0x45, 0x78, 0xe0, 0x56, 0x22, - 0x7b, 0x07, 0xbb, 0xda, 0x8a, 0xf0, 0xcc, 0x5d, 0x99, 0xf5, 0x5e, 0xab, 0x98, 0x68, - 0xb8, 0xeb, 0x4d, 0x1b, 0x14, 0x06, 0x58, 0x43, 0xb2, 0x29, 0xea, 0x3e, 0x2a, 0x0a, - 0x74, 0x8d, 0x89, 0xc4, 0xc3, 0x04, 0x19, 0x8c, 0xd4, 0x4c, 0xf7, 0x71, 0x80, 0xbb, - 0x86, 0x64, 0xf9, 0xaa, 0x1a, 0x95, 0x11, 0x52, 0x72, 0x33, 0xcd, 0xb6, 0x82, 0x69, - 0x76, 0xd3, 0x42, 0x76, 0xf6, 0x22, 0x57, 0xec, 0x38, 0x21, 0x72, 0xbf, 0x97, 0xb3, - 0x10, 0xbd, 0xd3, 0x40, 0x56, 0xea, 0x61, 0xf2, 0xd7, 0x4c, 0xe1, 0xcc, 0x95, 0x44, - 0xb0, 0x22, 0x63, 0xcc, 0x3d, 0x31, 0x33, 0xa3, 0x08, 0x91, 0x15, 0x56, 0x34, 0x5a, - 0x17, 0xc3, 0x2a, 0xcb, 0x47, 0x04, 0x44, 0xf5, 0x53, 0x6f, 0xd2, 0x1f, 0x81, 0xcc, - 0x3c, 0x96, 0x8a, 0xb7, 0xe4, 0xdb, 0x9c, 0xea, 0x56, 0x4c, 0x55, 0xd3, 0xa6, 0x01, - 0x06, 0x63, 0x75, 0xf6, 0x41, 0x76, 0x91, 0xc0, 0xee, 0x3b, 0x39, 0x22, 0x88, 0x60, - 0xf1, 0xbc, 0x00, 0x69, 0x32, 0x93, 0xc4, 0xbc, 0xa3, 0x27, 0x17, 0x6d, 0xa5, 0x2b, - 0x72, 0x82, 0x49, 0x5b, 0xaf, 0xc2, 0x93, 0x2d, 0x11, 0x54, 0xc0, 0x36, 0x72, 0xf4, - 0xdb, 0x49, 0xbd, 0x40, 0x96, 0x7c, 0xa4, 0x1f, 0xb8, 0xf8, 0x69, 0x63, 0x82, 0xa5, - 0x20, 0x8c, 0x55, 0x47, 0x64, 0x0e, 0x51, 0x93, 0x45, 0x9b, 0x35, 0x07, 0xf4, 0x81, - 0x7a, 0xe3, 0x70, 0x79, 0x30, 0x50, 0x89, 0x69, 0xa1, 0x8b, 0x1d, 0x16, 0x8e, 0x67, - 0xb5, 0x93, 0x95, 0x32, 0x16, 0x0b, 0x50, 0xa5, 0x38, 0xec, 0x90, 0x74, 0xe7, 0x33, - 0xdf, 0xaa, 0x4a, 0xf0, 0x97, 0x55, 0xf8, 0x31, 0x72, 0x0c, 0xec, 0x85, 0x19, 0xf3, - 0xbd, 0x74, 0x80, 0x95, 0x39, 0x34, 0x7b, 0x87, 0x86, 0x86, 0x8f, 0xb2, 0xab, 0x9a, - 0xb7, 0x42, 0xfe, 0x02, 0x0c, 0x87, 0x93, 0x0d, 0x37, 0xc4, 0x5a, 0xa9, 0xb8, 0x36, - 0xc9, 0x86, 0xba, 0x01, 0x80, 0x4a, 0x5d, 0xe2, 0x69, 0x74, 0xac, 0x64, 0x7d, 0x8b, - 0x92, 0x14, 0x84, 0xb7, 0x48, 0xd9, 0x99, 0x94, 0x47, 0x87, 0x5f, 0xe2, 0x74, 0x6a, - 0xd1, 0x11, 0x2f, 0xc5, 0x7e, 0xa3, 0x99, 0x9f, 0x58, 0x99, 0x37, 0x4c, 0xe2, 0x53, - 0x6c, 0x58, 0x31, 0x00, 0x33, 0xcc, 0xda, 0xbc, 0x75, 0xd6, 0x3a, 0x64, 0x1a, 0x56, - 0x51, 0xbd, 0x08, 0x07, 0x9a, 0x41, 0xc1, 0xe5, 0x98, 0x94, 0xcb, 0x3a, 0x1c, 0x8b, - 0xac, 0x76, 0x14, 0xe9, 0x60, 0x58, 0x1a, 0x1d, 0x19, 0x1a, 0x3a, 0x38, 0x62, 0x09, - 0xb6, 0xe8, 0x2e, 0xfc, 0x92, 0xb6, 0x55, 0xc5, 0x1d, 0x91, 0xe1, 0x1e, 0x8d, 0x39, - 0x19, 0x08, 0x63, 0x90, 0x9a, 0x97, 0xcc, 0x60, 0x17, 0xaf, 0x2c, 0x35, 0x50, 0x0b, - 0x86, 0x0a, 0x21, 0xc9, 0xc4, 0x8d, 0x48, 0x83, 0x4e, 0xb5, 0x61, 0xf5, 0x8c, 0x68, - 0x33, 0x72, 0x96, 0x8f, 0xd8, 0x9b, 0xe5, 0x2a, 0x26, 0x99, 0x53, 0x17, 0x85, 0x5b, - 0x31, 0x23, 0xac, 0xc2, 0x07, 0x16, 0x83, 0xca, 0x66, 0x9d, 0x78, 0xc3, 0xcc, 0xe5, - 0xbb, 0x9c, 0x9f, 0x94, 0x29, 0xa6, 0x43, 0xbb, 0xb1, 0x40, 0x1d, 0x1d, 0x66, 0x5d, - 0xbf, 0x45, 0xac, 0xe6, 0x52, 0x4c, 0xba, 0x3b, 0x0d, 0x33, 0x58, 0x21, 0x05, 0xdc, - 0x7c, 0x38, 0x16, 0x5f, 0xf0, 0x95, 0x9d, 0x32, 0x59, 0x14, 0xf4, 0x37, 0xa4, 0x00, - 0x8c, 0xa7, 0x51, 0x87, 0x8b, 0xb8, 0x28, 0x7e, 0xea, 0xf0, 0x92, 0x02, 0x1b, 0x1b, - 0x36, 0x47, 0xbb, 0x4a, 0x9b, 0x56, 0x2a, 0x7a, 0xae, 0x80, 0x62, 0x57, 0x39, 0xf6, - 0x6b, 0x63, 0x6c, 0x30, 0x9a, 0x09, 0x37, 0x6a, 0xc4, 0xce, 0xc6, 0xd7, 0x6c, 0xe4, - 0x62, 0x9a, 0xef, 0x46, 0xae, 0x48, 0x8b, 0x4c, 0x69, 0x61, 0x06, 0x95, 0x27, 0x59, - 0x4e, 0x0c, 0x22, 0xec, 0x55, 0x22, 0x6f, 0x47, 0x08, 0x5b, 0xec, 0x5e, 0x03, 0x43, - 0xcb, 0xfb, 0x42, 0x1f, 0xfc, 0x83, 0x8b, 0x56, 0xe9, 0x55, 0x3e, 0x41, 0x1c, 0xe3, - 0x9c, 0x81, 0x1a, 0x1b, 0x4a, 0x53, 0xb0, 0x51, 0xb4, 0x04, 0xaf, 0x3b, 0x58, 0xbf, - 0x65, 0x13, 0x76, 0x36, 0x0c, 0x04, 0x0a, 0x60, 0x7f, 0x94, 0x6c, 0x63, 0x57, 0x02, - 0x0b, 0xa1, 0xfa, 0x99, 0xda, 0xf1, 0x9a, 0xd3, 0xf0, 0x20, 0x43, 0x1a, 0x98, 0xb1, - 0x64, 0x70, 0x40, 0x03, 0x83, 0x83, 0x71, 0x9f, 0xf9, 0xfc, 0x7d, 0x4c, 0xc7, 0x5d, - 0x6b, 0xcb, 0x6d, 0x4f, 0x00, 0xc8, 0x34, 0x87, 0x4b, 0x01, 0xb9, 0xa8, 0x5e, 0x0c, - 0x0f, 0x5c, 0x63, 0x27, 0x34, 0xa3, 0x26, 0x4d, 0x15, 0x6c, 0x97, 0x3c, 0x14, 0xca, - 0xe9, 0x20, 0xbf, 0x09, 0x17, 0xcc, 0xcc, 0x92, 0x4b, 0xa9, 0x0f, 0xef, 0x18, 0x7f, - 0x97, 0x83, 0x11, 0x9a, 0x7a, 0x26, 0x86, 0x21, 0xc7, 0xf2, 0x9b, 0xbb, 0x28, 0xda, - 0x1c, 0xce, 0xab, 0x36, 0x96, 0x09, 0xc6, 0x4e, 0xfc, 0x5e, 0x91, 0xa7, 0x94, 0x51, - 0xbc, 0x81, 0x00, 0xea, 0xbc, 0x85, 0x54, 0x1d, 0x1f, 0x24, 0x35, 0xb9, 0x6b, 0x53, - 0x2f, 0xa1, 0x4c, 0x1c, 0xb7, 0x6b, 0x99, 0x90, 0x8c, 0x41, 0x81, 0x18, 0xe2, 0x47, - 0x2c, 0x66, 0x51, 0x1a, 0xb5, 0x58, 0xaa, 0x06, 0xf0, 0x3f, 0xd8, 0xfc, 0x15, 0xf1, - 0x0a, 0x20, 0x99, 0xdc, 0x4d, 0xf1, 0x36, 0x0d, 0x15, 0x91, 0x0d, 0x2a, 0x77, 0x47, - 0xd8, 0xab, 0xab, 0x40, 0xfa, 0x3d, 0x77, 0xb7, 0x47, 0x0d, 0x84, 0x77, 0xcd, 0x63, - 0x02, 0x4a, 0xa4, 0x02, 0x68, 0xf5, 0x51, 0x39, 0xd3, 0x75, 0x48, 0x22, 0x3e, 0xd5, - 0x82, 0x3f, 0x13, 0x68, 0x05, 0x75, 0x2c, 0x0b, 0x5f, 0x7f, 0x23, 0xed, 0xfd, 0x90, - 0xa8, 0x9d, 0xd1, 0xf9, 0x0e, 0xe3, 0x44, 0xdf, 0x04, 0x63, 0x6c, 0xb9, 0x7b, 0xe2, - 0x40, 0x6e, 0x55, 0x15, 0x64, 0x1b, 0x4c, 0x5a, 0xd1, 0x86, 0xa0, 0x78, 0x9e, 0x8b, - 0xa4, 0x8a, 0xb8, 0x30, 0xd4, 0xf5, 0x70, 0xcf, 0xd1, 0x58, 0xfd, 0xd6, 0x3d, 0x38, - 0xde, 0x1e, 0x92, 0x52, 0xba, 0xec, 0xa9, 0xa7, 0x6c, 0x4a, 0xfc, 0x77, 0x68, 0x26, - 0x64, 0x28, 0xca, 0xae, 0x91, 0x3d, 0x20, 0x3f, 0x47, 0x09, 0xef, 0x6d, 0xd7, 0xe6, - 0x75, 0x44, 0xa9, - ], - dk: [0x06; 32], - dk_pq: [ - 0xf7, 0xd6, 0xc6, 0xa4, 0x6a, 0x9c, 0x53, 0x4d, 0x6e, 0xe0, 0x53, 0x29, 0x38, 0xa9, - 0x9f, 0x0c, 0x45, 0x0d, 0xa4, 0x93, 0x5e, 0x29, 0x53, 0xc4, 0xda, 0xea, 0x5d, 0x5b, - 0x0a, 0x59, 0xea, 0x69, 0xc7, 0x00, 0xa4, 0x08, 0x17, 0xfd, 0xf4, 0x45, 0xdd, 0x5b, - 0x73, 0xed, 0x69, 0xa5, 0x57, 0xaf, 0xa2, 0x78, 0x39, 0x19, 0x1b, 0x8e, 0x71, 0x21, - 0x4e, 0xf9, 0xef, 0x97, 0xe9, 0xd9, 0xbb, 0x99, - ], - dk_t: [ - 0x0a, 0x92, 0x5a, 0x53, 0xf7, 0xce, 0xaa, 0xa3, 0x73, 0xf3, 0xf8, 0xec, 0xf9, 0xc2, - 0xd9, 0xea, 0xeb, 0x35, 0x1e, 0xaa, 0xe4, 0xdd, 0xde, 0xcb, 0xd7, 0xeb, 0x18, 0x0b, - 0x54, 0x32, 0x30, 0x6e, - ], - ct: &[ - 0x56, 0xa0, 0x6e, 0x64, 0x43, 0xb5, 0x3c, 0x24, 0xf6, 0x47, 0xcb, 0x67, 0x98, 0x25, - 0x78, 0x99, 0xea, 0x1c, 0x49, 0xcb, 0xfd, 0x4c, 0x4e, 0x3e, 0x54, 0xdd, 0x73, 0xa1, - 0x13, 0x9d, 0xc4, 0xdf, 0x51, 0x90, 0x67, 0xa5, 0x93, 0x47, 0x33, 0xa3, 0x45, 0x38, - 0xf9, 0x41, 0xcd, 0x9a, 0x2d, 0x9d, 0xe3, 0x71, 0x62, 0x32, 0x47, 0xf1, 0xbb, 0xcb, - 0x72, 0x8d, 0x8c, 0xfd, 0x59, 0xb5, 0x9d, 0x69, 0x95, 0xa2, 0x43, 0x0a, 0xb1, 0x44, - 0x90, 0xb3, 0x36, 0xac, 0x50, 0x2c, 0xd2, 0x1d, 0xea, 0x47, 0xdc, 0x7c, 0x89, 0xfa, - 0x02, 0x63, 0x10, 0xec, 0x05, 0xfb, 0xbe, 0x50, 0x17, 0x9b, 0x45, 0xe4, 0xb6, 0x8c, - 0x50, 0x7f, 0xd9, 0x0f, 0xab, 0x06, 0xe3, 0x6f, 0xb1, 0xc9, 0xb2, 0x1c, 0x06, 0x11, - 0x5f, 0xe4, 0x2b, 0xeb, 0xa1, 0x50, 0x83, 0x38, 0x57, 0x64, 0xcd, 0xe8, 0xc5, 0x27, - 0xc3, 0x66, 0x95, 0x07, 0xbc, 0xad, 0xed, 0x45, 0xf7, 0x0a, 0x8c, 0xca, 0x78, 0x9a, - 0xd7, 0x1e, 0x90, 0x87, 0x94, 0x8e, 0x4f, 0x1d, 0x68, 0x2c, 0x4a, 0x77, 0xad, 0x30, - 0x6c, 0x25, 0xb1, 0xe6, 0x36, 0x4f, 0x43, 0xfb, 0x51, 0xc0, 0xc5, 0xd7, 0x2f, 0x45, - 0x5d, 0xa7, 0x2f, 0x46, 0x04, 0x1f, 0x8f, 0xcb, 0x14, 0x3f, 0x67, 0xc7, 0x51, 0x7b, - 0x42, 0x5e, 0x24, 0xcd, 0x80, 0x30, 0x32, 0x64, 0x5c, 0xfe, 0xba, 0x77, 0xe0, 0xd8, - 0xd2, 0xd0, 0xcf, 0xb5, 0x77, 0x68, 0xb8, 0xfa, 0x32, 0x38, 0xc1, 0x0e, 0xbb, 0x99, - 0x47, 0x17, 0x10, 0x97, 0x3b, 0xf9, 0xd2, 0x2f, 0xea, 0x51, 0x47, 0x13, 0x54, 0xe5, - 0x3f, 0x15, 0x3d, 0xfb, 0xac, 0x69, 0x5a, 0x6f, 0x8c, 0xcb, 0x10, 0x52, 0x4a, 0x04, - 0x53, 0xe8, 0x04, 0xbb, 0x01, 0x3b, 0x45, 0x0f, 0x38, 0x00, 0x7f, 0xe2, 0x1c, 0xe8, - 0x98, 0xc0, 0x52, 0xa1, 0x32, 0xea, 0x74, 0xc9, 0xe6, 0x95, 0x12, 0xca, 0x4c, 0x18, - 0xc3, 0x2a, 0xe3, 0x78, 0x84, 0xdf, 0x52, 0x0d, 0x12, 0x72, 0x1b, 0x95, 0xac, 0xb5, - 0x15, 0x06, 0x7f, 0x35, 0x16, 0xce, 0xd7, 0x3c, 0x93, 0x07, 0x86, 0xd6, 0x92, 0x4c, - 0xc7, 0xdc, 0xc0, 0x8b, 0x50, 0xa3, 0xab, 0xef, 0x4e, 0x0d, 0xf8, 0x2a, 0xa0, 0xb9, - 0xc7, 0xbc, 0x19, 0x9c, 0xb2, 0xdc, 0xbc, 0x7c, 0xba, 0xa3, 0x8f, 0xfb, 0xee, 0xa6, - 0x0e, 0x41, 0xae, 0x20, 0xe8, 0x40, 0x07, 0x30, 0x13, 0x2f, 0x36, 0x27, 0xe1, 0xf6, - 0x2f, 0xc7, 0x84, 0xf2, 0x22, 0x21, 0x3c, 0x2c, 0x47, 0x9c, 0x4e, 0xd1, 0xf2, 0x15, - 0x9f, 0x72, 0x4e, 0xdd, 0xff, 0x87, 0xe6, 0xa4, 0xb5, 0xb3, 0x44, 0x5e, 0x18, 0x95, - 0x90, 0xde, 0x4b, 0xb6, 0x2b, 0xf6, 0x6e, 0x93, 0x05, 0x50, 0x14, 0x4b, 0x44, 0xe2, - 0x3d, 0x6c, 0x04, 0x5d, 0x77, 0x9a, 0xce, 0x9f, 0x94, 0xc0, 0xa6, 0x88, 0xf7, 0x29, - 0xa0, 0xb9, 0x48, 0x21, 0xb6, 0x69, 0xb5, 0xec, 0x49, 0x65, 0x2e, 0x55, 0xa8, 0xc1, - 0x9c, 0xfc, 0xb4, 0xd3, 0x89, 0x06, 0x6b, 0xb3, 0xaa, 0x4d, 0x9d, 0x71, 0x95, 0xd3, - 0x0c, 0x49, 0x6e, 0xc4, 0x25, 0x01, 0x38, 0xea, 0x1c, 0x33, 0x5d, 0x61, 0x81, 0xb2, - 0x57, 0x93, 0xff, 0x5d, 0x0f, 0xea, 0xf9, 0x1b, 0x7d, 0x27, 0xc8, 0x26, 0xec, 0xda, - 0x49, 0xa9, 0xb9, 0xc8, 0xff, 0x88, 0x00, 0x91, 0x96, 0x3a, 0x2c, 0xcb, 0xdb, 0x5c, - 0xb4, 0x5e, 0xaa, 0xfb, 0xfc, 0x8b, 0x93, 0xe7, 0x53, 0xbf, 0x32, 0x3e, 0x2f, 0x76, - 0xb0, 0xa6, 0x1a, 0xf9, 0x69, 0x97, 0xd9, 0x7f, 0x42, 0x9d, 0xb9, 0x08, 0x98, 0xfb, - 0xcc, 0x2d, 0xdd, 0xce, 0xbf, 0x04, 0xd0, 0xe2, 0xa3, 0xd6, 0x88, 0xfa, 0x56, 0x65, - 0x5b, 0x41, 0xb0, 0xa6, 0x28, 0xe4, 0x16, 0x4a, 0x31, 0x30, 0x87, 0x99, 0xea, 0x58, - 0x98, 0x4d, 0x44, 0x73, 0x9d, 0x97, 0x20, 0xdc, 0xfd, 0xf4, 0xbc, 0xf2, 0x80, 0x82, - 0x17, 0x40, 0x8c, 0x43, 0x3d, 0x26, 0x37, 0x87, 0x40, 0x5d, 0x11, 0xdc, 0xe0, 0x85, - 0x4f, 0xba, 0xfe, 0x59, 0xf5, 0x8d, 0x39, 0xa2, 0x99, 0x5b, 0x99, 0x11, 0x87, 0xff, - 0x86, 0xd3, 0x90, 0x6e, 0x1e, 0x27, 0x81, 0x2d, 0x5a, 0xcd, 0x2a, 0x8d, 0x11, 0xb9, - 0x5e, 0xa2, 0x0c, 0x7b, 0xf1, 0xe8, 0xca, 0x91, 0x46, 0xcd, 0x9b, 0xdd, 0x10, 0xf8, - 0x99, 0xe3, 0x28, 0x9b, 0xb1, 0x83, 0x81, 0x91, 0xfe, 0xab, 0x93, 0x7a, 0x67, 0x49, - 0xc9, 0x65, 0xc0, 0x1b, 0x41, 0xe6, 0xfe, 0xbb, 0x62, 0xb5, 0x15, 0xef, 0xc4, 0x16, - 0xb9, 0x47, 0x02, 0x14, 0xd7, 0x8d, 0x4a, 0x47, 0xbd, 0xe4, 0x6b, 0x0c, 0x8a, 0x5f, - 0x8c, 0x46, 0x72, 0xe8, 0xd9, 0x5d, 0xff, 0x71, 0xb9, 0xd7, 0xbc, 0xd2, 0xf9, 0x4c, - 0x1d, 0x11, 0x54, 0x61, 0xc5, 0xa8, 0x47, 0xba, 0xa8, 0xee, 0x4a, 0x8a, 0x67, 0xde, - 0xde, 0xf4, 0xea, 0x40, 0x40, 0x33, 0x26, 0x71, 0x0c, 0x23, 0x39, 0x4b, 0x7b, 0x38, - 0xe1, 0x93, 0xb0, 0x16, 0x70, 0x66, 0x9f, 0x2c, 0x6e, 0x06, 0xc7, 0x96, 0x3d, 0xa8, - 0xde, 0xbe, 0x10, 0x3a, 0x33, 0xb4, 0x95, 0x41, 0xfd, 0x5e, 0x0b, 0xc7, 0x7b, 0x91, - 0x6d, 0xae, 0x22, 0x44, 0xd3, 0x6b, 0xfc, 0x3d, 0x53, 0xf0, 0xf1, 0xba, 0x51, 0xee, - 0xc5, 0xa1, 0x8c, 0x2f, 0x25, 0x8e, 0xde, 0xfa, 0x29, 0x46, 0xf7, 0x99, 0xb8, 0x8e, - 0x17, 0xea, 0x47, 0x5e, 0x8b, 0xda, 0x8c, 0xff, 0xa3, 0x53, 0x1e, 0xd2, 0x46, 0x82, - 0x08, 0x82, 0xe3, 0x2f, 0x7a, 0xe0, 0x42, 0x5b, 0x12, 0x9a, 0x8b, 0x0d, 0x20, 0xe6, - 0x20, 0x5d, 0x1a, 0x7f, 0x85, 0xbd, 0x8e, 0xfd, 0x9f, 0xbc, 0x7d, 0xab, 0x57, 0xeb, - 0x45, 0xd1, 0x87, 0xa2, 0x5d, 0x29, 0xb7, 0x1d, 0x69, 0x25, 0x4a, 0x36, 0xa5, 0x12, - 0x5b, 0x6a, 0xf9, 0xdb, 0x41, 0xca, 0xf3, 0x69, 0x18, 0x39, 0x87, 0xe0, 0xf7, 0x07, - 0x72, 0x53, 0x96, 0x9d, 0x9d, 0x1c, 0x08, 0x87, 0xa3, 0x5f, 0xd2, 0xea, 0x34, 0xee, - 0xa8, 0x1f, 0xc9, 0x30, 0xb1, 0xa1, 0xaa, 0x11, 0xdb, 0x1e, 0x99, 0x6a, 0x11, 0xc4, - 0x9c, 0x39, 0xf5, 0x70, 0xd0, 0xe3, 0xcf, 0xb3, 0xef, 0x58, 0x11, 0xa6, 0x78, 0xdc, - 0x44, 0x51, 0xc5, 0xcf, 0x64, 0x89, 0x8a, 0xe3, 0xb5, 0x3e, 0x41, 0x7c, 0x69, 0xf0, - 0x94, 0x38, 0xc9, 0x97, 0xfb, 0xb4, 0x53, 0xb9, 0xd8, 0x8a, 0x1c, 0xb6, 0x03, 0xe2, - 0x01, 0x6c, 0x1e, 0xe7, 0x9a, 0x36, 0xf2, 0xe9, 0xdf, 0x75, 0xf6, 0x5e, 0xaf, 0xa3, - 0xdb, 0x33, 0xf0, 0xf3, 0x77, 0xc7, 0x1e, 0x72, 0xf7, 0x7a, 0xf8, 0x5a, 0x01, 0x14, - 0x30, 0x6e, 0x1b, 0x21, 0x92, 0x1d, 0x53, 0x2b, 0x6d, 0x14, 0x0e, 0x3a, 0x2c, 0x5a, - 0x47, 0x9f, 0x33, 0xc1, 0x58, 0x23, 0x86, 0xc7, 0x0c, 0x75, 0xe8, 0x47, 0x65, 0x73, - 0x5b, 0x61, 0x05, 0x59, 0xe8, 0xaa, 0xc6, 0x14, 0x9a, 0xd1, 0x74, 0x21, 0x3f, 0x2a, - 0x15, 0x95, 0x47, 0x6b, 0x29, 0x07, 0x5b, 0x71, 0xa0, 0x25, 0xf0, 0x5f, 0xec, 0x67, - 0xfe, 0xd0, 0x5e, 0x5f, 0x19, 0x3f, 0x2b, 0x71, 0xe0, 0x35, 0x27, 0x55, 0xff, 0x4a, - 0xa6, 0x1b, 0xc6, 0x3f, 0x02, 0x40, 0x57, 0x60, 0x33, 0x35, 0x16, 0x76, 0x69, 0x06, - 0x15, 0x8a, 0x2c, 0xf8, 0x12, 0xfd, 0xd5, 0xd1, 0x1e, 0xed, 0x2c, 0xa3, 0xe4, 0x40, - 0x45, 0x8a, 0xe1, 0xbf, 0x76, 0xcb, 0x64, 0x2d, 0xb5, 0x77, 0x2d, 0x67, 0x2d, 0x93, - 0x2a, 0x33, 0x6c, 0xd8, 0x38, 0x33, 0x9d, 0x9d, 0xf2, 0xdc, 0x24, 0x59, 0xa1, 0x5c, - 0x17, 0x3b, 0x9e, 0x80, 0x3a, 0x53, 0x11, 0x2a, 0x08, 0x1e, 0x7c, 0x2c, 0x94, 0x57, - 0x86, 0xb2, 0x4e, 0x6d, 0x22, 0x6a, 0xef, 0xbe, 0x7c, 0xb1, 0x84, 0xa2, 0x3d, 0xd5, - 0x04, 0x81, 0x39, 0x75, 0xe2, 0x50, 0x67, 0xf3, 0x3b, 0xc9, 0x0e, 0x13, 0xec, 0xd4, - 0x85, 0x74, 0x73, 0xe0, 0xbb, 0x0f, 0xa3, 0x3b, 0x3f, 0x5f, 0x02, 0x55, 0xeb, 0x51, - 0xda, 0x21, 0x47, 0x17, 0x51, 0x13, 0x78, 0x92, 0x7c, 0x0d, 0x04, 0xd1, 0xbd, 0x41, - 0x43, 0xe8, 0x15, 0xd8, 0x32, 0xd6, 0x9a, 0xf2, 0xab, 0x20, 0x8a, 0x19, 0x24, 0x3a, - 0x03, 0x71, 0xc1, 0xc7, 0x0a, 0xd3, 0x82, 0x18, 0x63, 0xaa, 0x85, 0x1b, 0x54, 0x47, - 0xc5, 0x3c, 0x39, 0x14, 0x17, 0xdc, 0xf8, 0xe0, 0x50, 0x6a, 0xab, 0x61, 0x77, 0x92, - 0xf2, 0x4c, 0x80, 0xe4, 0x12, 0x2f, 0x99, 0xeb, 0xb2, 0x53, 0x41, 0x89, 0x8e, 0x30, - 0xd8, 0xdb, 0xda, 0x4d, 0xef, - ], - ss: [ - 0xe3, 0x24, 0xb3, 0xae, 0x97, 0x80, 0xcc, 0x6d, 0x0a, 0x54, 0xaa, 0x42, 0x62, 0xdb, - 0x9c, 0x9c, 0x59, 0x48, 0xeb, 0xd4, 0x5d, 0xf2, 0xf3, 0xd1, 0x0e, 0xb2, 0x2e, 0xe2, - 0x3b, 0xda, 0xdd, 0xea, - ], - }, - TestVector { - seed: [0x07; 32], - randomness: [0x6b; 128], - ek: &[ - 0x0e, 0x12, 0x76, 0x0b, 0x95, 0x26, 0x6a, 0x50, 0xa5, 0x2b, 0xc6, 0xba, 0x3d, 0xf6, - 0x97, 0xc1, 0x26, 0x1d, 0x3b, 0xa5, 0x10, 0x98, 0x7a, 0x29, 0x9a, 0x83, 0xcc, 0x0b, - 0x91, 0x34, 0xc2, 0xea, 0x4d, 0xdc, 0x47, 0x88, 0x9b, 0x72, 0xc6, 0xde, 0xa6, 0x5b, - 0x49, 0xe0, 0x66, 0xb1, 0xa2, 0x82, 0x2f, 0x26, 0x9e, 0x8e, 0xa9, 0x04, 0xa6, 0x67, - 0xcf, 0xe6, 0xf7, 0x03, 0x5a, 0xa8, 0x3c, 0xd9, 0xc0, 0x41, 0xef, 0xc3, 0x8d, 0x23, - 0x05, 0x3e, 0xa6, 0xd7, 0x54, 0xc5, 0x50, 0xcd, 0x5d, 0x19, 0x36, 0xd4, 0xe7, 0x4e, - 0xa0, 0x47, 0xc4, 0xdc, 0xf7, 0x57, 0xde, 0x95, 0x50, 0x97, 0x2c, 0x82, 0xab, 0xcb, - 0xad, 0x83, 0xc3, 0x28, 0x38, 0xc1, 0x84, 0x51, 0x24, 0x0c, 0x09, 0x07, 0xa5, 0x73, - 0x45, 0x1d, 0xc7, 0x46, 0xbc, 0x49, 0x1c, 0x14, 0x3d, 0x14, 0x83, 0x7a, 0xf8, 0x3c, - 0x4f, 0x4b, 0x1f, 0x5a, 0xaa, 0x59, 0xbd, 0x5a, 0x2b, 0x03, 0xc1, 0x44, 0xba, 0x6c, - 0xcb, 0x44, 0x5b, 0xce, 0x2d, 0x38, 0x4a, 0xb4, 0x08, 0x23, 0x27, 0x13, 0x42, 0x12, - 0x8a, 0x2b, 0x7e, 0xb6, 0x86, 0x24, 0xeb, 0xa5, 0x9b, 0x3b, 0x2b, 0x57, 0xd9, 0xa4, - 0xac, 0x7b, 0x63, 0x0d, 0x06, 0x34, 0x00, 0xa2, 0x75, 0xad, 0x71, 0xb6, 0xb0, 0x8a, - 0x8c, 0xfe, 0x93, 0xa6, 0x4d, 0x36, 0x8c, 0xef, 0x66, 0x6a, 0x4d, 0x20, 0x8b, 0x8f, - 0x39, 0xc4, 0x42, 0x40, 0x0c, 0x1a, 0x7c, 0x46, 0x77, 0x65, 0x85, 0x76, 0x41, 0x7b, - 0x5b, 0x02, 0x6d, 0x99, 0xcb, 0x80, 0xe0, 0x14, 0x28, 0xbe, 0x00, 0xc7, 0x20, 0xe2, - 0x20, 0xa2, 0x70, 0x59, 0x36, 0xa6, 0x2d, 0x6e, 0x73, 0x79, 0x00, 0xbd, 0x8c, 0x3d, - 0x0b, 0x46, 0x4e, 0xd7, 0x65, 0x0d, 0xd7, 0xc8, 0x4c, 0x25, 0x0d, 0xd7, 0x3c, 0x75, - 0x36, 0xab, 0xbb, 0x40, 0x13, 0x80, 0x99, 0x27, 0xcc, 0xff, 0xa5, 0x39, 0x1b, 0xb2, - 0x54, 0x29, 0x4c, 0x7b, 0xe0, 0x59, 0x6d, 0xd2, 0x9a, 0xa3, 0x74, 0x45, 0x95, 0x7b, - 0x2a, 0xa8, 0x8d, 0xfc, 0x54, 0x44, 0x78, 0x94, 0x77, 0x3a, 0x34, 0xe8, 0xe8, 0x7b, - 0x05, 0x52, 0x0c, 0x9c, 0x2a, 0xb4, 0xdf, 0xd6, 0x9c, 0xdd, 0x9a, 0x52, 0xc7, 0xe9, - 0x35, 0x2a, 0x3a, 0xb9, 0x4c, 0x07, 0xa2, 0x6d, 0x46, 0x8f, 0x10, 0xb2, 0x63, 0x2a, - 0x6a, 0x52, 0x4e, 0x06, 0x23, 0x4f, 0xbb, 0x20, 0x08, 0xf1, 0x7c, 0xee, 0x6a, 0x59, - 0xef, 0xc5, 0x1b, 0x4c, 0x48, 0x3f, 0xa5, 0x26, 0x4c, 0x9f, 0xb3, 0x25, 0xe9, 0xd7, - 0xb9, 0xb6, 0x6c, 0x6a, 0xae, 0x91, 0xba, 0x9f, 0x9a, 0x29, 0x74, 0x39, 0x68, 0xc5, - 0x53, 0x3a, 0x37, 0x50, 0xbb, 0x95, 0x54, 0x22, 0x3b, 0x60, 0xc8, 0xb9, 0x64, 0xcf, - 0xa7, 0x34, 0x69, 0x48, 0xca, 0xc1, 0x00, 0x0d, 0x84, 0x04, 0x88, 0xc3, 0xd2, 0x11, - 0xb4, 0xe7, 0xd4, 0x63, 0xdd, 0xb1, 0x55, 0x51, 0x86, 0x2f, 0x01, 0xd7, 0x7e, 0x87, - 0xb6, 0x08, 0x99, 0xe2, 0x51, 0x64, 0xcc, 0xcc, 0x81, 0x4c, 0xaa, 0x5c, 0x05, 0x55, - 0xf5, 0x41, 0x3f, 0xfb, 0xdc, 0xb5, 0x10, 0x14, 0x58, 0xa2, 0x60, 0x61, 0x56, 0x04, - 0x63, 0xab, 0x33, 0xcc, 0x21, 0x74, 0xc6, 0x1f, 0x58, 0x61, 0x98, 0x6b, 0x55, 0xd6, - 0x20, 0x66, 0x12, 0xf3, 0x86, 0xc9, 0x96, 0x56, 0x1b, 0x51, 0xb6, 0x3a, 0x11, 0xbe, - 0x96, 0x5a, 0x1f, 0xae, 0x45, 0xb2, 0x51, 0x47, 0x6e, 0x96, 0xc3, 0x86, 0x49, 0x25, - 0x64, 0x6b, 0x62, 0x46, 0x93, 0x5b, 0xbf, 0xa9, 0xf4, 0xbb, 0x39, 0x43, 0x71, 0x95, - 0xc6, 0xb9, 0x8c, 0xf8, 0x1a, 0x07, 0x1a, 0x70, 0xf2, 0x6b, 0x0e, 0xa6, 0x16, 0x28, - 0xfd, 0xbc, 0x91, 0xed, 0x29, 0x9b, 0x63, 0x26, 0xce, 0x7f, 0x22, 0x0a, 0xab, 0x69, - 0x65, 0xbe, 0x64, 0x5f, 0xf7, 0xc5, 0x12, 0x48, 0xe4, 0x56, 0xad, 0xb3, 0x43, 0xf1, - 0x09, 0x90, 0x24, 0x34, 0x01, 0xd8, 0xe0, 0x5e, 0xbc, 0x48, 0xb5, 0x8d, 0x2a, 0x77, - 0xb2, 0x13, 0x41, 0xef, 0x51, 0x3e, 0x66, 0x15, 0x7b, 0x83, 0x59, 0x6f, 0x1f, 0x44, - 0x76, 0x95, 0xe8, 0xc8, 0x22, 0x79, 0x92, 0x2e, 0x15, 0x98, 0x7a, 0xb1, 0x42, 0x59, - 0x15, 0x7e, 0xe6, 0xe0, 0x7b, 0x5e, 0xe2, 0x8d, 0xc4, 0x1c, 0x68, 0xdb, 0xc1, 0x4c, - 0x39, 0x13, 0x1f, 0xc7, 0xa4, 0xcc, 0xf6, 0x42, 0x0f, 0x65, 0x47, 0x97, 0x01, 0x41, - 0x3d, 0x0e, 0xab, 0x48, 0x4b, 0xd5, 0x5d, 0xc1, 0x66, 0x9e, 0x4e, 0x3a, 0x3e, 0xeb, - 0xcb, 0x11, 0x8c, 0x89, 0x9b, 0x2c, 0xca, 0x6c, 0xb2, 0xdb, 0xac, 0xf6, 0xf5, 0xa7, - 0x17, 0xab, 0x0b, 0xba, 0xf0, 0x21, 0x41, 0x29, 0x9d, 0x32, 0xc8, 0x84, 0x26, 0xaa, - 0x48, 0x66, 0x17, 0x3c, 0xc1, 0x23, 0x13, 0xf2, 0xc5, 0x26, 0x24, 0x00, 0x5e, 0x6f, - 0xe1, 0x76, 0xac, 0x02, 0xbf, 0x45, 0xa9, 0x96, 0x46, 0x59, 0x02, 0x0b, 0xd0, 0x3b, - 0x9d, 0xdb, 0x8a, 0x99, 0x32, 0x2b, 0x04, 0x52, 0xa2, 0xed, 0xdc, 0x6e, 0xa7, 0x52, - 0x47, 0x3f, 0x1c, 0x1c, 0x9a, 0xb0, 0x51, 0xdc, 0x19, 0x73, 0xe8, 0x1b, 0x1e, 0x8d, - 0x74, 0x64, 0x06, 0x14, 0x8a, 0x86, 0x21, 0x57, 0x5f, 0x7c, 0x71, 0xcd, 0x28, 0x79, - 0x35, 0x0a, 0x29, 0x70, 0x74, 0x01, 0x56, 0xc6, 0x9c, 0x9f, 0xf4, 0xcf, 0xe9, 0x7a, - 0x3f, 0xf0, 0xa9, 0x0f, 0x16, 0xe9, 0x03, 0x36, 0xf6, 0x82, 0x5b, 0xdb, 0x8b, 0xa0, - 0xa3, 0xcc, 0xb2, 0xf1, 0x81, 0xd2, 0x6c, 0xc8, 0x86, 0x05, 0x49, 0x3b, 0x44, 0x2a, - 0x9d, 0x5a, 0x9f, 0x78, 0x88, 0x95, 0xb7, 0x20, 0x51, 0x6c, 0x86, 0x5d, 0x57, 0x5c, - 0x75, 0x27, 0x6c, 0x93, 0x7e, 0x22, 0x52, 0xa4, 0x86, 0xc9, 0x0e, 0x64, 0xb1, 0xc1, - 0x15, 0x06, 0x0d, 0xac, 0xac, 0xcc, 0x33, 0x72, 0xd1, 0x47, 0x5c, 0x33, 0x81, 0x09, - 0x82, 0x75, 0xbd, 0xa2, 0x3a, 0x52, 0x08, 0x3c, 0x6e, 0x67, 0x18, 0x25, 0xe5, 0x7b, - 0x40, 0x60, 0x62, 0x26, 0x24, 0x74, 0x32, 0x21, 0x39, 0x88, 0xa7, 0x67, 0x2d, 0x80, - 0xca, 0x32, 0xa2, 0x35, 0x6e, 0x16, 0x1b, 0x5a, 0x3d, 0x5a, 0x21, 0x8c, 0xf0, 0xc6, - 0x78, 0x8c, 0x62, 0xb7, 0x86, 0x00, 0x31, 0x54, 0xc9, 0x03, 0x12, 0x00, 0x1e, 0x73, - 0xbc, 0xfd, 0xd3, 0x31, 0x25, 0x73, 0x50, 0x4a, 0x0c, 0x40, 0x26, 0x66, 0x62, 0x0b, - 0x31, 0x60, 0x68, 0x83, 0x58, 0x0e, 0xa0, 0x9f, 0x69, 0x0c, 0x0c, 0xdd, 0x94, 0x85, - 0x20, 0xb1, 0x9b, 0xab, 0x2b, 0x30, 0xfd, 0xa6, 0x0d, 0xd9, 0x03, 0xc8, 0xb4, 0xf0, - 0x1a, 0x83, 0x23, 0x8e, 0xbd, 0xa1, 0x63, 0x6c, 0x91, 0x18, 0x95, 0x48, 0x0a, 0x8e, - 0x54, 0x30, 0xda, 0x58, 0x46, 0x24, 0x55, 0x48, 0x8b, 0x71, 0xa7, 0x35, 0xca, 0x62, - 0xc1, 0x92, 0x87, 0x22, 0xd5, 0x7c, 0x3d, 0x86, 0xce, 0x66, 0x76, 0x04, 0x33, 0xc1, - 0x53, 0x57, 0xeb, 0xa5, 0x56, 0xdb, 0x67, 0xad, 0xb1, 0x6f, 0x8a, 0x02, 0xcd, 0x99, - 0x5c, 0x25, 0x25, 0xd2, 0x1b, 0x49, 0xa0, 0x60, 0x20, 0xda, 0xaa, 0xea, 0xea, 0x50, - 0xd3, 0x32, 0x95, 0x2f, 0x39, 0x9b, 0xdc, 0x85, 0x95, 0x74, 0xc9, 0xc9, 0xc6, 0x05, - 0x67, 0x65, 0xd1, 0xc2, 0x57, 0xe5, 0xa6, 0x55, 0xc9, 0xa6, 0xc6, 0x19, 0x16, 0x79, - 0x63, 0xaf, 0xc8, 0x50, 0x02, 0x7a, 0x00, 0x73, 0x0d, 0x60, 0xb3, 0x3e, 0x2b, 0x89, - 0x7e, 0x71, 0xb5, 0x64, 0x66, 0xbe, 0x0f, 0xc9, 0x8a, 0x1c, 0x31, 0x4b, 0x67, 0xb3, - 0xba, 0xe7, 0x80, 0xa6, 0x22, 0xc5, 0x8e, 0xb0, 0x55, 0x70, 0x02, 0x4c, 0x98, 0x9b, - 0x28, 0x67, 0x63, 0xba, 0x42, 0x0e, 0xf2, 0x34, 0x47, 0x7c, 0x2d, 0xd8, 0xbc, 0x86, - 0xb9, 0xc9, 0xad, 0xfe, 0xd5, 0xa8, 0xc7, 0xb9, 0x48, 0xb6, 0x73, 0x5b, 0xad, 0x75, - 0x8c, 0x04, 0xf0, 0x80, 0x25, 0xeb, 0x01, 0xd2, 0x17, 0xab, 0x94, 0x07, 0x88, 0x18, - 0x78, 0x46, 0x69, 0x04, 0xb2, 0xe4, 0x96, 0x5b, 0x22, 0x75, 0x15, 0x5f, 0xd1, 0xb8, - 0x00, 0x0c, 0x7b, 0x29, 0x83, 0xa9, 0xe8, 0xf8, 0x72, 0x43, 0x55, 0x1d, 0xc3, 0x1b, - 0x88, 0x48, 0x67, 0xb3, 0xe9, 0x41, 0x8c, 0x1d, 0x51, 0x96, 0xf8, 0x3b, 0x2e, 0x7e, - 0xdc, 0xa5, 0x5c, 0xb2, 0x1d, 0xce, 0xe4, 0x30, 0x96, 0x93, 0x66, 0xfd, 0x02, 0xa8, - 0x5d, 0xeb, 0xbd, 0x75, 0x97, 0x63, 0x01, 0x0c, 0xb9, 0x18, 0xb1, 0x34, 0x60, 0xc3, - 0x3b, 0xda, 0x4b, 0x43, 0xc2, 0xaa, 0xec, 0x2b, 0x4d, 0x19, 0x80, 0x0e, 0xb4, 0x5b, - 0x65, 0xc9, 0x15, 0xf8, 0xb9, 0x69, 0xef, 0xf9, 0xe9, 0xe3, 0x56, 0xfa, 0xea, 0x1c, - 0x9c, 0xf6, 0x96, 0x59, 0x59, 0x9b, 0x22, 0xf5, 0x04, 0x36, 0xea, 0x13, 0xcf, 0x2f, - 0x1f, 0x0e, 0xc8, 0x71, 0xc3, 0xa1, 0x0a, 0xc0, 0xb3, 0x6d, 0x87, 0x7f, 0x20, 0x0b, - 0xfb, 0x72, 0x8d, 0x9f, 0x3f, 0x8f, 0x5f, 0x01, 0x4f, 0x21, 0x19, 0x38, 0xc6, 0x15, - 0xf1, 0xf1, 0x0e, 0x50, 0x00, 0xeb, 0x9d, 0x22, 0x43, 0xdf, 0x6e, 0x9c, 0x8d, 0xa3, - 0xaa, 0x6f, 0x2f, 0x41, 0xbe, 0x8f, 0x46, 0x29, 0x4d, 0x2e, 0x49, 0xc4, 0xb7, 0x84, - 0x09, 0x10, 0x1c, - ], - dk: [0x07; 32], - dk_pq: [ - 0xd7, 0xb4, 0xcf, 0x68, 0xd3, 0xf1, 0xb7, 0x11, 0x92, 0x4c, 0xcd, 0xed, 0x71, 0xa2, - 0x41, 0xfa, 0xf8, 0x16, 0x2f, 0x7e, 0xf6, 0xce, 0x74, 0x83, 0x70, 0xa1, 0x0e, 0x86, - 0xb9, 0x4b, 0xef, 0xc1, 0x98, 0x68, 0x33, 0x77, 0x94, 0x6e, 0xb9, 0x66, 0x41, 0xee, - 0xbf, 0x10, 0x06, 0x2c, 0x6d, 0xde, 0x3a, 0x01, 0x0a, 0x09, 0xb2, 0xce, 0xb1, 0x14, - 0x52, 0x10, 0xa9, 0xc1, 0x7e, 0xef, 0xc5, 0xb7, - ], - dk_t: [ - 0x19, 0xd6, 0x26, 0x50, 0x37, 0x2c, 0xc1, 0x8f, 0xd0, 0x10, 0x9c, 0xd6, 0x39, 0x4d, - 0x63, 0x8e, 0xbe, 0xb5, 0xf4, 0xca, 0xe8, 0x36, 0xca, 0x4a, 0xa5, 0x68, 0x25, 0xe9, - 0x05, 0x6e, 0x3a, 0xd5, - ], - ct: &[ - 0x89, 0x2f, 0x7a, 0x79, 0x85, 0xca, 0xf0, 0xc2, 0x31, 0xb2, 0xb3, 0x5e, 0x3b, 0xc7, - 0xde, 0x3e, 0x5a, 0x47, 0x39, 0xb7, 0x2d, 0x3f, 0x9b, 0xe3, 0x42, 0xe3, 0x26, 0xc0, - 0x17, 0x3d, 0x55, 0xa5, 0x08, 0x9e, 0xbe, 0x98, 0x26, 0xc8, 0x34, 0x79, 0x2a, 0x32, - 0x36, 0x80, 0x0e, 0xec, 0xc2, 0x61, 0x2b, 0x4d, 0x92, 0xec, 0xfd, 0xbe, 0xd0, 0x13, - 0xa6, 0xbf, 0xcd, 0x4d, 0x1f, 0xfe, 0x5c, 0x41, 0x50, 0xe7, 0x25, 0x7a, 0x9e, 0x7c, - 0x0b, 0x2e, 0x0c, 0xbe, 0xe7, 0x57, 0xfc, 0x86, 0xb5, 0xde, 0xbe, 0x03, 0xaa, 0xf7, - 0x96, 0xc7, 0x6a, 0x58, 0x25, 0xcc, 0x78, 0x66, 0x71, 0x89, 0xe0, 0xe3, 0x7f, 0x4a, - 0x1c, 0x3d, 0xda, 0x77, 0x0e, 0xb8, 0xe6, 0xb9, 0x78, 0xc8, 0x91, 0x81, 0xf4, 0x87, - 0x1b, 0xe9, 0xa2, 0x95, 0x83, 0x23, 0x34, 0xdc, 0x3a, 0x7f, 0x2b, 0x95, 0x3f, 0x7d, - 0xf4, 0x3f, 0x32, 0x11, 0x37, 0xa9, 0xad, 0x5b, 0x27, 0xe3, 0x44, 0x67, 0x8a, 0x79, - 0xe3, 0x86, 0xe4, 0x02, 0x23, 0x61, 0x24, 0x75, 0x3e, 0x6d, 0xfc, 0xba, 0x0d, 0xd0, - 0xdd, 0x97, 0x01, 0x74, 0x61, 0xc2, 0xfe, 0x03, 0x9c, 0x72, 0xe9, 0xd0, 0x07, 0x36, - 0x76, 0xf0, 0x74, 0x9d, 0x8c, 0xc9, 0xbc, 0xd6, 0xae, 0x0f, 0xa6, 0xf1, 0x4d, 0xb0, - 0xb5, 0x25, 0x75, 0x84, 0x5c, 0x5b, 0x59, 0xb8, 0x2a, 0xea, 0xe9, 0x3c, 0x8f, 0xa1, - 0xbc, 0xec, 0x6e, 0xdd, 0x08, 0x15, 0x17, 0xd6, 0xf2, 0xd3, 0xed, 0x91, 0x57, 0x5b, - 0x2d, 0xd7, 0xb5, 0x89, 0x3f, 0x3d, 0xd7, 0x55, 0xd8, 0x42, 0xbc, 0xf3, 0xe8, 0xd1, - 0x4a, 0xfc, 0x5c, 0x23, 0x6e, 0xc6, 0x62, 0x36, 0xb3, 0x3b, 0xa8, 0x75, 0x95, 0x36, - 0x33, 0xea, 0xa2, 0x3a, 0xfe, 0x29, 0x74, 0xd0, 0x01, 0x79, 0xb7, 0x2d, 0x11, 0x7d, - 0x9b, 0x8d, 0xee, 0x51, 0x10, 0x03, 0x6f, 0x41, 0x8b, 0xaa, 0x0b, 0xe0, 0x52, 0xec, - 0x09, 0xd7, 0x0f, 0xa3, 0x6c, 0x94, 0x3b, 0xb6, 0x50, 0x50, 0x46, 0x8b, 0xdf, 0xd6, - 0x34, 0x35, 0xf2, 0xed, 0xd7, 0x96, 0x2c, 0xc9, 0x8a, 0x0f, 0xc6, 0xb1, 0xd2, 0xa2, - 0xc3, 0x1a, 0x35, 0x81, 0xc3, 0x17, 0x41, 0x79, 0x0e, 0x4f, 0x7a, 0xcb, 0x16, 0x2a, - 0x71, 0x46, 0xf3, 0x99, 0x60, 0x5a, 0x08, 0xcc, 0x99, 0xb4, 0x8a, 0x96, 0xca, 0xcc, - 0xc3, 0x11, 0x8a, 0xd9, 0xfb, 0xfb, 0xba, 0x58, 0xf2, 0x9a, 0x12, 0x1c, 0xcc, 0x60, - 0x4e, 0x9c, 0x09, 0x87, 0xf2, 0x25, 0x0b, 0xe2, 0x07, 0x21, 0x89, 0xd8, 0xb0, 0x1d, - 0x59, 0x4e, 0x94, 0x6f, 0x0e, 0x5b, 0xb1, 0xb4, 0xe0, 0x45, 0xac, 0x5e, 0x56, 0x08, - 0x73, 0x64, 0x72, 0x38, 0x65, 0x84, 0xf4, 0x55, 0xbe, 0x6e, 0x74, 0xb9, 0xcb, 0x31, - 0xd6, 0xff, 0xce, 0x00, 0x8c, 0xe2, 0x83, 0xb3, 0xf8, 0x34, 0xc5, 0x6f, 0x64, 0xef, - 0x82, 0x9d, 0xd4, 0x92, 0xeb, 0x70, 0xf6, 0x81, 0x5c, 0x45, 0x12, 0x8c, 0x66, 0xe7, - 0x73, 0x24, 0xbb, 0x03, 0xf7, 0x1b, 0xaf, 0x57, 0xbf, 0x0e, 0x20, 0x0b, 0x5a, 0x59, - 0xbf, 0xb1, 0x62, 0x8e, 0x2b, 0xf2, 0x09, 0xe8, 0xd3, 0xd3, 0x9a, 0x2f, 0xdc, 0xc9, - 0xc3, 0xcc, 0x76, 0x55, 0x22, 0x4e, 0xfa, 0x1e, 0xfa, 0x86, 0xf5, 0x50, 0xe7, 0x2c, - 0x11, 0xb5, 0xeb, 0xaa, 0x0b, 0x37, 0x5e, 0x11, 0xd7, 0x7d, 0x0a, 0x4c, 0xfe, 0x4f, - 0x1f, 0x5e, 0xb0, 0x48, 0xf0, 0xcf, 0xf1, 0xc2, 0x88, 0x2f, 0xbe, 0x01, 0xd1, 0x4f, - 0xcd, 0x97, 0xcb, 0x2e, 0xd5, 0xa4, 0x0a, 0xa9, 0x7c, 0x12, 0x5f, 0x81, 0xc8, 0xc9, - 0x11, 0x64, 0xcb, 0xe8, 0x47, 0x70, 0x58, 0xff, 0x9e, 0x38, 0x06, 0x04, 0xda, 0x9c, - 0x2a, 0xc1, 0xb0, 0x61, 0x85, 0x3c, 0x2e, 0x4e, 0x97, 0x98, 0x11, 0xbe, 0xbb, 0x99, - 0x94, 0x89, 0x11, 0xda, 0xb9, 0xcb, 0x03, 0xd7, 0xc4, 0x97, 0x54, 0x61, 0xd8, 0xe7, - 0x23, 0xbc, 0x41, 0x5a, 0x39, 0x12, 0xfe, 0x11, 0x08, 0xde, 0x37, 0xb3, 0x2b, 0x49, - 0x17, 0x4b, 0x72, 0x20, 0x22, 0xc8, 0x0d, 0xfa, 0xd2, 0x88, 0x1a, 0xd1, 0xdb, 0x9f, - 0x1d, 0x6d, 0x06, 0x09, 0x0c, 0xb1, 0x42, 0x1d, 0x37, 0x98, 0xfa, 0xb2, 0xdf, 0x0f, - 0x44, 0x08, 0xc1, 0x1d, 0x07, 0xbe, 0x12, 0x1b, 0xa6, 0x6b, 0x40, 0x6a, 0x6b, 0xcd, - 0x89, 0x2c, 0xd4, 0x99, 0xe3, 0x5e, 0x1c, 0x2c, 0x20, 0xc1, 0x5c, 0x87, 0xee, 0x0e, - 0x79, 0x61, 0x2c, 0xbd, 0xd0, 0x45, 0x76, 0x95, 0x5b, 0xf6, 0x11, 0x53, 0xee, 0xe2, - 0x79, 0x8c, 0x26, 0xe4, 0xd6, 0xd3, 0x05, 0x0f, 0x3d, 0xe5, 0xf6, 0x77, 0x1a, 0xdd, - 0x04, 0x95, 0x45, 0x9e, 0x53, 0x00, 0xbb, 0x4e, 0x13, 0x98, 0x39, 0xbf, 0x6a, 0x42, - 0x06, 0xd7, 0x86, 0x5c, 0x15, 0x9d, 0x1b, 0xa9, 0xbd, 0x56, 0x6e, 0x73, 0xd9, 0xa0, - 0x85, 0x00, 0x76, 0x81, 0xd3, 0x30, 0x70, 0x40, 0xc5, 0x86, 0x16, 0xf3, 0x69, 0xc6, - 0xf2, 0xba, 0xa5, 0x4f, 0xd5, 0x9b, 0x4e, 0x27, 0xb8, 0x06, 0x51, 0x3f, 0xf6, 0x78, - 0xc2, 0xc6, 0xbd, 0xcd, 0x42, 0x3e, 0x67, 0x04, 0x74, 0x60, 0xa3, 0xa3, 0x9c, 0xb0, - 0x4e, 0xad, 0x7b, 0x09, 0x53, 0x17, 0xf0, 0x99, 0x3f, 0x3e, 0xd7, 0x5b, 0x5f, 0xc8, - 0xb7, 0x4c, 0x45, 0x8a, 0x3b, 0xd6, 0x34, 0x7c, 0x6a, 0x82, 0x64, 0x0f, 0x40, 0x41, - 0xf0, 0x16, 0x86, 0x90, 0xf8, 0xf6, 0x8f, 0x2c, 0xfa, 0xa4, 0x20, 0x59, 0x69, 0xfb, - 0x4d, 0xc9, 0xad, 0x42, 0xd2, 0x6b, 0x3f, 0xc2, 0xba, 0x5b, 0xb0, 0x8b, 0x32, 0x2d, - 0x02, 0x03, 0x11, 0x86, 0x66, 0xb6, 0x65, 0xe2, 0x04, 0x1f, 0xbe, 0xf0, 0xee, 0x95, - 0x7f, 0x73, 0xf6, 0x0f, 0xec, 0x89, 0x2a, 0x65, 0x31, 0x6d, 0x3f, 0x73, 0x31, 0x12, - 0xef, 0x2a, 0x19, 0xc7, 0x9c, 0x25, 0x95, 0xad, 0x99, 0xa4, 0xd0, 0xc9, 0x8c, 0xd1, - 0x48, 0x32, 0x6e, 0xe8, 0xf2, 0xf7, 0xb7, 0x9a, 0x16, 0x13, 0x33, 0x30, 0x22, 0x68, - 0xc4, 0x27, 0x0a, 0x96, 0xd5, 0xd6, 0x7e, 0x35, 0x03, 0xb6, 0x88, 0xa3, 0x32, 0xf2, - 0x65, 0x43, 0xce, 0x54, 0xc3, 0xdc, 0x38, 0x17, 0xdd, 0xd6, 0x16, 0x62, 0x4e, 0xf7, - 0x15, 0xa4, 0x1f, 0x1a, 0x80, 0xf4, 0x51, 0x0f, 0xc7, 0x69, 0x89, 0x21, 0x96, 0xac, - 0x3f, 0x4c, 0x62, 0xdd, 0x03, 0x91, 0xd4, 0xc5, 0xf2, 0x15, 0xab, 0x44, 0x72, 0x99, - 0xc7, 0xbb, 0xd0, 0xea, 0x1a, 0xf7, 0xd6, 0x21, 0xad, 0x9d, 0x66, 0x2a, 0xbd, 0x35, - 0xef, 0x65, 0xf9, 0x00, 0xa4, 0x0b, 0x36, 0xf3, 0x2f, 0x03, 0x52, 0xc9, 0x7a, 0x90, - 0xe7, 0x62, 0x17, 0xc3, 0x17, 0xf1, 0x89, 0x0d, 0xe7, 0x70, 0x3d, 0x60, 0x09, 0xa2, - 0x18, 0xe7, 0x50, 0x37, 0xb6, 0x8c, 0x6d, 0x34, 0xf0, 0xf8, 0xca, 0x6b, 0xef, 0x01, - 0xaf, 0x78, 0x94, 0x88, 0x34, 0x93, 0xda, 0x5c, 0x47, 0xd0, 0xfa, 0x11, 0x6a, 0xf9, - 0x4f, 0x94, 0x87, 0x47, 0xc9, 0x69, 0xb9, 0x77, 0x9b, 0xae, 0xb8, 0xb2, 0x79, 0x91, - 0x6b, 0x6a, 0xd0, 0xee, 0xa9, 0xff, 0xc4, 0xaf, 0xc1, 0xbd, 0x90, 0x76, 0x73, 0x20, - 0x34, 0x13, 0xb6, 0x09, 0xb4, 0x7e, 0xe0, 0xfd, 0xce, 0x78, 0x0e, 0x82, 0xa6, 0x98, - 0x7d, 0x63, 0x88, 0x7c, 0x28, 0x5d, 0xa9, 0x76, 0x09, 0x73, 0x6c, 0xed, 0x5f, 0xad, - 0x8f, 0xae, 0xef, 0x14, 0x1d, 0x8d, 0x03, 0x44, 0xd7, 0x0a, 0xb0, 0x79, 0x5a, 0x66, - 0x68, 0xfa, 0xe5, 0x9a, 0xa6, 0x5d, 0x41, 0x11, 0x07, 0x63, 0x14, 0x15, 0x11, 0x22, - 0x88, 0xc7, 0xe3, 0x28, 0x4e, 0x26, 0xb5, 0xdc, 0xda, 0xbf, 0x69, 0x60, 0x82, 0x1b, - 0xb7, 0x4c, 0x79, 0xfb, 0xc6, 0xfa, 0x73, 0xda, 0x77, 0xa4, 0x22, 0x09, 0x43, 0xe8, - 0x6c, 0xda, 0xf4, 0xa7, 0x3e, 0x1c, 0x5b, 0xd9, 0x18, 0xea, 0xcd, 0x53, 0xf6, 0xe0, - 0x85, 0xa6, 0x94, 0xb9, 0x33, 0x73, 0x85, 0xb4, 0x09, 0xbb, 0x1f, 0x86, 0x04, 0xab, - 0x2b, 0x9b, 0xbd, 0x39, 0x0f, 0x69, 0xcd, 0xf5, 0x0e, 0xc2, 0x04, 0x9f, 0x2e, 0x27, - 0x9a, 0x3a, 0xec, 0x28, 0x26, 0x21, 0x15, 0xbb, 0x6d, 0xfa, 0x32, 0x36, 0xbd, 0x67, - 0xd6, 0x32, 0x4c, 0x60, 0xdf, 0x93, 0x97, 0x4d, 0x6e, 0x02, 0xc4, 0x63, 0x3c, 0xbf, - 0xb8, 0x21, 0x20, 0x0c, 0xe8, 0xb4, 0x39, 0x77, 0x99, 0x2a, 0x98, 0xe1, 0xc7, 0x12, - 0xfd, 0x81, 0x87, 0xea, 0xf9, 0x54, 0x2d, 0xb5, 0xf0, 0x52, 0x67, 0xf6, 0xfc, 0xc0, - 0x9d, 0xc5, 0x23, 0xc9, 0x60, - ], - ss: [ - 0x5f, 0x8d, 0xea, 0xb6, 0xc1, 0x1f, 0x05, 0xee, 0x20, 0x8b, 0xa9, 0x68, 0xd2, 0x89, - 0x17, 0xf8, 0x21, 0x9b, 0xa2, 0xc0, 0xc3, 0x0d, 0x41, 0x65, 0x1c, 0x33, 0x82, 0xf4, - 0xd5, 0x64, 0x83, 0xc6, - ], - }, - TestVector { - seed: [0x08; 32], - randomness: [0x6c; 128], - ek: &[ - 0x00, 0x31, 0x80, 0x28, 0x22, 0x64, 0xd1, 0x42, 0x06, 0x36, 0x7c, 0x68, 0x2c, 0x2a, - 0x28, 0x2a, 0x58, 0xc1, 0x14, 0x67, 0x55, 0x07, 0x95, 0x80, 0x1e, 0x36, 0x39, 0x3c, - 0xc1, 0x6e, 0x49, 0xf5, 0x65, 0xba, 0xc9, 0x95, 0xab, 0x50, 0x44, 0x48, 0xd4, 0x84, - 0x0b, 0x85, 0x52, 0x6e, 0x83, 0x6c, 0xa6, 0xd6, 0x41, 0xf1, 0x51, 0xbd, 0x50, 0x89, - 0x7e, 0x1f, 0x9a, 0x5f, 0x6c, 0x71, 0x8a, 0x61, 0xf9, 0x7f, 0x86, 0x6b, 0x36, 0x4a, - 0x21, 0x7c, 0x87, 0xe5, 0x2c, 0xd2, 0x87, 0x65, 0xab, 0x18, 0xbf, 0x3c, 0x93, 0x1a, - 0x35, 0x15, 0x0d, 0x1c, 0x0c, 0x32, 0xc6, 0xb8, 0x63, 0x87, 0x2a, 0x23, 0x37, 0x30, - 0x57, 0xbe, 0xc8, 0x2e, 0x67, 0x19, 0x86, 0xfa, 0xd2, 0xcb, 0x15, 0xa0, 0x6a, 0x96, - 0x87, 0xa0, 0xce, 0x92, 0x37, 0x54, 0x13, 0x8b, 0x4c, 0x54, 0xba, 0x93, 0xc0, 0x82, - 0xc1, 0x47, 0xcd, 0xf1, 0x86, 0xc0, 0xd5, 0x74, 0x6c, 0xb6, 0xd5, 0x45, 0x32, 0xa2, - 0xaf, 0xaa, 0xa7, 0x01, 0x22, 0x03, 0x42, 0xf6, 0x30, 0x3e, 0xa7, 0xb6, 0x6d, 0x99, - 0x42, 0x46, 0x07, 0x22, 0x29, 0x8e, 0x3b, 0xc2, 0xf0, 0xa6, 0x12, 0xa2, 0x2a, 0x98, - 0x69, 0x46, 0x73, 0x7d, 0x05, 0x7f, 0xbf, 0x3a, 0xce, 0x20, 0xcb, 0xa6, 0xf9, 0x75, - 0x03, 0xfe, 0x03, 0xca, 0xa5, 0xc3, 0x97, 0x4e, 0x8a, 0xaa, 0xa3, 0xc7, 0xba, 0x62, - 0xbc, 0x70, 0xd1, 0x54, 0x7e, 0xa9, 0x33, 0x6a, 0xd1, 0x53, 0x15, 0xcd, 0x8a, 0x29, - 0x19, 0xb7, 0x68, 0x3b, 0x56, 0x8a, 0xeb, 0xe5, 0x4b, 0x38, 0x56, 0x12, 0xf8, 0x82, - 0x93, 0x99, 0xd8, 0x3a, 0xa3, 0xc2, 0x30, 0x8c, 0x49, 0xa7, 0x33, 0x79, 0x48, 0x1a, - 0x69, 0x0a, 0xfb, 0xa6, 0x36, 0xe1, 0x4c, 0x7e, 0x6f, 0x31, 0x67, 0x8c, 0x02, 0x2b, - 0x55, 0x2b, 0x19, 0xa6, 0xb9, 0x0b, 0x25, 0x2a, 0x71, 0x22, 0x57, 0x5b, 0xa0, 0x41, - 0xc2, 0xda, 0xba, 0x8d, 0xb6, 0xab, 0x6c, 0xb9, 0xd1, 0x3b, 0x5b, 0xb3, 0x91, 0xef, - 0x0b, 0x48, 0xfd, 0x57, 0x8e, 0x67, 0xca, 0xb1, 0xd4, 0xd0, 0x1c, 0xf4, 0xb4, 0x92, - 0xf1, 0x36, 0xc9, 0xc4, 0x80, 0x7b, 0x4a, 0x24, 0x79, 0xf3, 0x5b, 0x25, 0x5f, 0x23, - 0x44, 0x36, 0xd7, 0x1a, 0x12, 0x3b, 0x47, 0x38, 0x4c, 0x1b, 0x69, 0x09, 0xb0, 0xd8, - 0xc5, 0x55, 0x75, 0x61, 0x5a, 0x31, 0x41, 0x78, 0x67, 0x5c, 0xbc, 0x94, 0xe7, 0x46, - 0xa4, 0x15, 0xbb, 0xdc, 0x91, 0x24, 0x74, 0x04, 0x2a, 0x93, 0xd7, 0x76, 0xa8, 0x99, - 0x13, 0xa2, 0x10, 0x2e, 0xfa, 0x93, 0x77, 0xb8, 0x5b, 0x01, 0x49, 0x07, 0x5e, 0xaa, - 0xe7, 0x2c, 0x6a, 0xac, 0x3d, 0x91, 0xc7, 0x4f, 0x71, 0xd3, 0x8c, 0x06, 0x39, 0x63, - 0xd3, 0xfa, 0x0c, 0x4d, 0xa1, 0x3f, 0x52, 0x02, 0x93, 0x1f, 0x06, 0xa4, 0x51, 0x5b, - 0x08, 0xe2, 0x22, 0x60, 0x30, 0x9b, 0x88, 0x22, 0x52, 0xc9, 0x72, 0xea, 0x2e, 0x06, - 0x16, 0x0e, 0x15, 0x37, 0xbb, 0x38, 0xeb, 0x97, 0xe1, 0x99, 0x09, 0xe5, 0x8a, 0x3f, - 0x3a, 0xa0, 0x07, 0xda, 0xba, 0x59, 0x7d, 0x08, 0xae, 0x46, 0x76, 0x7b, 0xeb, 0x51, - 0x7f, 0xab, 0x01, 0x24, 0xbb, 0x39, 0xba, 0x6e, 0xab, 0xaf, 0x13, 0x1b, 0x96, 0x11, - 0xa9, 0xbb, 0xb2, 0x6c, 0x1c, 0x52, 0x55, 0x60, 0x30, 0x59, 0x9b, 0xe5, 0x38, 0x2b, - 0x99, 0xc7, 0x9f, 0x8d, 0x43, 0x56, 0xf3, 0xdc, 0x35, 0xb0, 0x86, 0x78, 0xa2, 0xa1, - 0xb2, 0x4b, 0x3c, 0xbb, 0x6d, 0xa2, 0x9f, 0x03, 0xa1, 0xbc, 0xf1, 0xba, 0xcc, 0x87, - 0xa6, 0x42, 0xd6, 0x76, 0xab, 0xe5, 0x82, 0x6e, 0x38, 0x36, 0xae, 0xcc, 0x87, 0x8d, - 0x2d, 0x67, 0x58, 0x0e, 0x39, 0xb9, 0xc5, 0x5b, 0x7a, 0xc1, 0xe6, 0xb8, 0xa4, 0xca, - 0x6e, 0xc2, 0xe8, 0x93, 0x44, 0x12, 0x25, 0x8c, 0x0a, 0xb6, 0x70, 0x81, 0x35, 0xfd, - 0x03, 0x0c, 0xdb, 0x34, 0x42, 0x9e, 0xe0, 0xa1, 0x9c, 0x78, 0x26, 0x23, 0xf0, 0x81, - 0xc0, 0x56, 0x4b, 0x7d, 0xc0, 0xbd, 0x8c, 0x35, 0xb8, 0x31, 0x67, 0x2a, 0x84, 0x13, - 0x75, 0x41, 0x27, 0xa4, 0x5a, 0xc7, 0x57, 0x21, 0x85, 0x18, 0x5f, 0x44, 0x4f, 0x01, - 0x76, 0x40, 0xb8, 0xa4, 0xc0, 0x81, 0x99, 0x27, 0x86, 0x63, 0x32, 0xc4, 0x53, 0x74, - 0xc6, 0xb2, 0x5b, 0x88, 0x41, 0x6d, 0x40, 0x94, 0x08, 0x1e, 0x83, 0x2f, 0x26, 0xd4, - 0x4f, 0x8c, 0xdb, 0x04, 0xbd, 0xe7, 0x2f, 0x17, 0xe3, 0x89, 0x86, 0xa6, 0xa6, 0x93, - 0x60, 0x4c, 0x63, 0x7c, 0xb7, 0x58, 0x05, 0x09, 0x2c, 0xfa, 0x7b, 0x29, 0x21, 0x66, - 0x5e, 0x08, 0x03, 0xd1, 0x82, 0x60, 0x0e, 0x00, 0x1b, 0x6f, 0x02, 0x3c, 0xc3, 0x93, - 0x96, 0xc2, 0x00, 0x18, 0xcf, 0xdb, 0xc8, 0x5a, 0xc8, 0xbb, 0xe5, 0xcb, 0x6f, 0xc0, - 0x94, 0xbc, 0x55, 0xc8, 0x54, 0xe2, 0x8a, 0xa3, 0xce, 0xab, 0xc7, 0xf4, 0xe1, 0xba, - 0x13, 0x27, 0x76, 0x28, 0xa1, 0x30, 0x4d, 0x6c, 0x45, 0x27, 0x53, 0x3c, 0xf9, 0xd2, - 0xb6, 0xd4, 0x3a, 0x1f, 0x6c, 0x71, 0xc7, 0x15, 0x86, 0x12, 0x1c, 0x32, 0x54, 0x31, - 0x5a, 0x6c, 0xdc, 0x02, 0xb9, 0xaf, 0xa1, 0x21, 0x84, 0xe5, 0x1d, 0x3d, 0xb0, 0x71, - 0xcc, 0x67, 0x18, 0x64, 0xf2, 0xac, 0x51, 0xfc, 0x65, 0x3a, 0x1b, 0x62, 0x81, 0x73, - 0x06, 0x10, 0x68, 0x92, 0x4f, 0x89, 0x0b, 0x18, 0xac, 0xc7, 0x4c, 0x45, 0x24, 0x24, - 0x06, 0x96, 0xbe, 0xe4, 0xc0, 0x99, 0x55, 0x2e, 0xc0, 0x23, 0x54, 0xbf, 0x27, 0x2c, - 0x94, 0xb5, 0x41, 0xb5, 0xf4, 0x49, 0x5e, 0x73, 0xc1, 0x81, 0x82, 0x71, 0x20, 0x87, - 0x2c, 0xb4, 0xa3, 0x63, 0x88, 0x96, 0x6a, 0x08, 0x10, 0x10, 0xb8, 0x0a, 0x9c, 0xf3, - 0x7c, 0x47, 0x15, 0x55, 0x6f, 0x9d, 0x0c, 0x3a, 0x5f, 0x41, 0xc5, 0x87, 0xa7, 0xce, - 0xad, 0x9a, 0xb4, 0x0e, 0x36, 0x6b, 0x53, 0x61, 0x2c, 0x74, 0x56, 0x32, 0xb0, 0x14, - 0x63, 0x68, 0xe0, 0xa5, 0x2f, 0x0b, 0x07, 0x8e, 0xb2, 0x0a, 0x60, 0x06, 0xcb, 0xf5, - 0x59, 0x1e, 0x39, 0x3c, 0x19, 0xec, 0xfb, 0x8e, 0x54, 0x35, 0xa7, 0x3c, 0xc0, 0xc5, - 0xce, 0x3a, 0x00, 0x8f, 0x50, 0x53, 0xdf, 0x16, 0x47, 0x29, 0x32, 0x71, 0xe1, 0x36, - 0x68, 0x67, 0x23, 0x2c, 0xdb, 0xb8, 0xc5, 0x80, 0x66, 0xc1, 0x05, 0x70, 0x17, 0x35, - 0xf9, 0x11, 0xdb, 0x1c, 0xa2, 0xc1, 0xb0, 0x77, 0x37, 0x46, 0x78, 0x05, 0xe3, 0x04, - 0xd2, 0x43, 0xc7, 0x33, 0xa7, 0x7c, 0xe4, 0x48, 0xb6, 0x39, 0xc2, 0x95, 0x39, 0x2b, - 0x14, 0x58, 0xb4, 0xa1, 0xa8, 0x47, 0x4c, 0xa2, 0x96, 0x8e, 0x0c, 0x78, 0x91, 0x7a, - 0x2b, 0x25, 0x5f, 0xc2, 0x47, 0xfe, 0x49, 0x3b, 0xd0, 0xd9, 0xbe, 0xc2, 0x44, 0x35, - 0x18, 0x90, 0xa8, 0x95, 0xe4, 0x70, 0xd2, 0x98, 0x05, 0x27, 0x50, 0x16, 0x6b, 0x75, - 0xa9, 0x8a, 0x85, 0x55, 0x49, 0xc3, 0x86, 0xb1, 0x40, 0xbc, 0x24, 0x32, 0x6b, 0x04, - 0x4a, 0x46, 0x9d, 0xfa, 0x66, 0x0f, 0xe5, 0x1a, 0x92, 0x82, 0x71, 0xd0, 0x11, 0xcd, - 0x54, 0x68, 0x24, 0x33, 0xf5, 0x58, 0x3c, 0x52, 0x05, 0x89, 0x8c, 0x21, 0x6c, 0xf8, - 0x0c, 0xc5, 0x45, 0x6b, 0xce, 0x0a, 0xcc, 0xf8, 0x86, 0x28, 0x00, 0xcd, 0x36, 0x66, - 0x13, 0x32, 0x26, 0x12, 0x97, 0xee, 0x98, 0x54, 0xd2, 0x30, 0xb4, 0x32, 0xd3, 0x9c, - 0x5e, 0xa6, 0x67, 0x26, 0x34, 0xa2, 0x94, 0xc9, 0x29, 0xe0, 0x91, 0x32, 0x9a, 0x37, - 0xbb, 0x5f, 0x34, 0x8f, 0x30, 0xf4, 0x82, 0x69, 0x9a, 0x88, 0xde, 0xba, 0x93, 0xd5, - 0x87, 0x45, 0xf2, 0xb0, 0x13, 0xa9, 0x93, 0x81, 0x6e, 0x4c, 0x1b, 0x90, 0xd2, 0x81, - 0x18, 0xd9, 0xca, 0xfe, 0x2a, 0x48, 0xbd, 0x02, 0x4b, 0xe3, 0x28, 0x49, 0x0b, 0x70, - 0x31, 0x77, 0xb5, 0x0e, 0xd6, 0x19, 0xa9, 0xb2, 0x93, 0x94, 0x4f, 0x30, 0xbd, 0x62, - 0x11, 0x9e, 0xb1, 0x54, 0x86, 0xa6, 0xc3, 0x65, 0x9e, 0xb0, 0xaa, 0x97, 0xe1, 0x83, - 0x2d, 0x82, 0x72, 0x36, 0x27, 0x67, 0x0c, 0x30, 0xb5, 0x46, 0x33, 0x74, 0x28, 0xa7, - 0x36, 0x4e, 0xc4, 0x95, 0x39, 0x70, 0x9d, 0xad, 0x61, 0x94, 0x3a, 0x54, 0x50, 0x88, - 0xc7, 0x54, 0xe2, 0x7c, 0x85, 0x79, 0x10, 0x71, 0x33, 0x76, 0xb8, 0x59, 0xe3, 0x92, - 0xd0, 0x55, 0x4a, 0x09, 0xc0, 0x4d, 0x29, 0xaa, 0x8a, 0xdb, 0x87, 0x54, 0xa4, 0x91, - 0x05, 0x99, 0x03, 0x22, 0x1d, 0x68, 0x9f, 0xba, 0xee, 0x7d, 0x0a, 0x71, 0x44, 0x87, - 0x05, 0x3a, 0x81, 0x2b, 0xf2, 0x2b, 0xd2, 0x0b, 0xcc, 0x6b, 0x3a, 0xba, 0x85, 0x39, - 0x6d, 0xac, 0x33, 0x7a, 0xd4, 0x3e, 0x54, 0x94, 0x04, 0x74, 0x12, 0xcf, 0x9d, 0x1e, - 0x00, 0x99, 0xd8, 0x0d, 0xed, 0xf5, 0xf4, 0x35, 0x39, 0x07, 0x86, 0xc8, 0xa9, 0xc3, - 0x27, 0xe7, 0x63, 0x94, 0xd4, 0x20, 0x37, 0x80, 0x8c, 0x7f, 0x2c, 0x12, 0x25, 0x3e, - 0x45, 0xcb, 0xff, 0x4a, 0x9f, 0x54, 0x4b, 0x17, 0x5d, 0x24, 0xb7, 0x65, 0x5a, 0x9d, - 0x94, 0x6a, 0xb5, 0x33, 0xb0, 0xfa, 0x10, 0xf5, 0x10, 0x8b, 0x17, 0xc3, 0x07, 0x72, - 0xcf, 0x41, 0x72, - ], - dk: [0x08; 32], - dk_pq: [ - 0x08, 0xf6, 0x8b, 0x3e, 0x03, 0x56, 0x8d, 0x1e, 0x99, 0xc5, 0xc2, 0x16, 0x7c, 0xf4, - 0x1d, 0xba, 0x4a, 0x60, 0x77, 0x55, 0x74, 0xd2, 0x1a, 0x9c, 0x79, 0x41, 0x4b, 0xf1, - 0xfb, 0x67, 0xa5, 0x47, 0xe9, 0x1d, 0x5f, 0x36, 0x26, 0x7e, 0xf0, 0x61, 0xcf, 0x68, - 0x1c, 0xbe, 0x41, 0xb9, 0xcb, 0x15, 0xc1, 0x7e, 0xe5, 0x2a, 0x35, 0x79, 0xa5, 0x1c, - 0x20, 0x39, 0x7b, 0xa3, 0xbd, 0xa5, 0xea, 0x72, - ], - dk_t: [ - 0x76, 0xa5, 0x74, 0x36, 0x2e, 0x7f, 0x03, 0xf2, 0x7c, 0xc6, 0xf4, 0x28, 0x8e, 0x04, - 0x6d, 0x75, 0x3d, 0xf4, 0x76, 0x49, 0xc0, 0x07, 0x74, 0x14, 0x68, 0xfc, 0x4d, 0x25, - 0x27, 0x45, 0x15, 0x0b, - ], - ct: &[ - 0xfe, 0xfe, 0xbc, 0x6f, 0x6f, 0x4d, 0xab, 0x06, 0xbd, 0x9b, 0x8d, 0x0a, 0x3a, 0x68, - 0x8b, 0x06, 0xe4, 0xb3, 0xce, 0x99, 0x9c, 0xff, 0x7e, 0xb7, 0x63, 0xd8, 0x0f, 0x6d, - 0x28, 0x8d, 0x9d, 0x8c, 0x58, 0xd2, 0x40, 0xd8, 0xd2, 0x17, 0x06, 0x4c, 0x98, 0x48, - 0xa1, 0x50, 0x87, 0x26, 0x82, 0x9e, 0x17, 0x7a, 0x02, 0xb9, 0x9a, 0xc3, 0x3a, 0xc7, - 0x6e, 0x50, 0xa8, 0x2d, 0x31, 0xe9, 0xf9, 0x52, 0x09, 0x8c, 0x47, 0x31, 0xa0, 0xfc, - 0x35, 0xc9, 0xda, 0x8e, 0x9c, 0x87, 0xaf, 0x73, 0x06, 0xee, 0x71, 0x71, 0xe3, 0xae, - 0xe3, 0xa3, 0xd2, 0xd0, 0x46, 0xbc, 0xcc, 0x15, 0x94, 0xa9, 0x68, 0x6a, 0x77, 0x49, - 0xb9, 0x06, 0x34, 0x6a, 0x7c, 0x86, 0x3d, 0x8d, 0xd3, 0x4a, 0xcc, 0xed, 0x60, 0x1a, - 0x39, 0x53, 0xa0, 0x5e, 0x8c, 0xea, 0xbf, 0x34, 0x79, 0x7b, 0x46, 0x06, 0xef, 0xf6, - 0x3e, 0x66, 0xfb, 0xde, 0xcc, 0xaf, 0x98, 0x1c, 0x13, 0x66, 0x0a, 0x8b, 0x8d, 0xe6, - 0x61, 0xc5, 0xb7, 0x53, 0xf7, 0x3c, 0x7e, 0x2c, 0xbc, 0x73, 0x33, 0x79, 0xc4, 0xd9, - 0xc3, 0x6b, 0x93, 0xb7, 0x56, 0xf5, 0xbe, 0xcb, 0x1e, 0xd5, 0x69, 0xd6, 0xdb, 0x0b, - 0x2d, 0x2b, 0x11, 0x02, 0xe6, 0x06, 0x4c, 0xc4, 0x31, 0x1d, 0xa3, 0x03, 0x0c, 0x3f, - 0x1a, 0x11, 0x26, 0xdf, 0x69, 0xfc, 0xd2, 0xc5, 0xc3, 0x08, 0x4e, 0xe1, 0xcc, 0x75, - 0x76, 0x1e, 0x53, 0x58, 0xac, 0x39, 0xc4, 0xeb, 0xd4, 0x72, 0xca, 0xf4, 0xe5, 0x55, - 0xf8, 0xda, 0x38, 0xdb, 0xa8, 0xef, 0x86, 0x2c, 0x92, 0xea, 0xcd, 0xde, 0xc9, 0xc2, - 0x70, 0xb5, 0xc7, 0x12, 0x74, 0xc1, 0x5f, 0xc3, 0x86, 0x74, 0xbe, 0xba, 0xbd, 0xc7, - 0xca, 0xe2, 0x44, 0x4d, 0xec, 0x1e, 0x79, 0x77, 0x67, 0x95, 0x78, 0xf0, 0x51, 0xfe, - 0x3e, 0xe9, 0xd7, 0xa1, 0x88, 0x56, 0x5d, 0x5f, 0xce, 0x8f, 0xbc, 0xb8, 0x42, 0xb2, - 0x8a, 0x4d, 0x38, 0xd7, 0x7e, 0xb3, 0x7d, 0xac, 0x58, 0x09, 0x96, 0x64, 0xfd, 0x1b, - 0x80, 0x69, 0xce, 0xef, 0x1e, 0x06, 0xba, 0x95, 0xa3, 0x9b, 0xf4, 0x8f, 0x70, 0x98, - 0xa9, 0xbf, 0xf8, 0x4f, 0x6f, 0x2d, 0xf8, 0x66, 0x43, 0xdb, 0x53, 0x45, 0x5b, 0xe4, - 0xbf, 0xa4, 0x84, 0x8d, 0x93, 0xca, 0xa1, 0xfc, 0x13, 0x98, 0xac, 0x24, 0x0d, 0x18, - 0x6b, 0xb3, 0x33, 0x4b, 0xb5, 0x38, 0x1c, 0x9d, 0x08, 0x9a, 0xe3, 0xc8, 0x63, 0x7d, - 0xee, 0xde, 0xaa, 0x57, 0x6e, 0x6b, 0x92, 0xcc, 0x7b, 0x66, 0xbd, 0x3a, 0x31, 0xf3, - 0xc9, 0x56, 0xb4, 0xae, 0xb4, 0xeb, 0x68, 0x8b, 0x24, 0x9c, 0xf9, 0xb5, 0x7a, 0x56, - 0xd3, 0x65, 0x6b, 0x53, 0x74, 0xf8, 0x06, 0xb0, 0x28, 0x75, 0x56, 0x2e, 0xa1, 0x5f, - 0xcb, 0x61, 0x93, 0x95, 0xec, 0x91, 0x30, 0x26, 0xdb, 0xe5, 0xa6, 0xd4, 0x88, 0xcf, - 0x90, 0x77, 0x45, 0xcc, 0x65, 0xdb, 0xc9, 0x27, 0x4c, 0xcb, 0x5e, 0x24, 0x61, 0xb9, - 0xe9, 0x23, 0x86, 0x2a, 0x67, 0x74, 0x4c, 0x8b, 0x8f, 0xf1, 0x9d, 0xda, 0x10, 0x68, - 0xfe, 0x40, 0x88, 0x59, 0xf8, 0x9b, 0x5b, 0x85, 0x50, 0xed, 0x08, 0x95, 0x6c, 0xe2, - 0xb5, 0xc9, 0xa6, 0x17, 0xe7, 0xef, 0x60, 0x22, 0x77, 0x2a, 0x58, 0xb6, 0x3b, 0xbd, - 0xbf, 0x5e, 0xb0, 0x57, 0xc4, 0xbd, 0xf3, 0x00, 0x83, 0xbc, 0x5d, 0xe8, 0xa2, 0x26, - 0x28, 0xfd, 0x84, 0x5b, 0xc6, 0xeb, 0xcf, 0xe2, 0x72, 0x77, 0xd1, 0xd7, 0xf5, 0x7c, - 0xee, 0xb7, 0xbe, 0xb0, 0x7a, 0x20, 0xca, 0x44, 0x6f, 0xc6, 0x5a, 0x37, 0x29, 0x29, - 0x92, 0x07, 0x92, 0xd2, 0xc4, 0x6a, 0xfe, 0x34, 0xbe, 0x5a, 0x05, 0x2a, 0xb4, 0x3d, - 0xb9, 0xe0, 0xb3, 0xc2, 0xd0, 0x24, 0xcb, 0x72, 0x0e, 0x42, 0xbd, 0x20, 0xdb, 0x4a, - 0x53, 0xe5, 0xbb, 0x32, 0xa1, 0x35, 0x69, 0x89, 0xb1, 0xd5, 0x85, 0x06, 0x11, 0x91, - 0x85, 0x49, 0xe9, 0xf5, 0x70, 0x01, 0xc9, 0x48, 0x8b, 0x8e, 0xb1, 0x2a, 0x36, 0xe8, - 0x55, 0x95, 0xca, 0x45, 0x93, 0x4f, 0xea, 0x1d, 0x60, 0x1b, 0x42, 0xc6, 0x70, 0x78, - 0xa4, 0xfb, 0xe7, 0x01, 0x49, 0x6e, 0x44, 0x3b, 0x49, 0xfc, 0x88, 0x22, 0xfa, 0xd0, - 0xc8, 0xfc, 0x3a, 0x25, 0xb3, 0x91, 0x0a, 0x51, 0x58, 0xb3, 0x80, 0xaa, 0x67, 0x8c, - 0xda, 0x32, 0x9e, 0x2c, 0xed, 0xae, 0xc1, 0xc4, 0xa3, 0x2e, 0x51, 0xb4, 0xba, 0xf7, - 0x09, 0x1e, 0xfa, 0x5e, 0xdd, 0x6a, 0xe2, 0xae, 0xc4, 0x50, 0xe1, 0x5c, 0xfe, 0xc1, - 0xce, 0xd9, 0xa1, 0xd1, 0x58, 0xc9, 0xf8, 0xf1, 0x9e, 0x21, 0x15, 0x5e, 0x41, 0x63, - 0xea, 0xec, 0xf7, 0xf0, 0x1d, 0x16, 0xba, 0x49, 0x5f, 0xde, 0x48, 0xf3, 0x96, 0x45, - 0xa4, 0x4d, 0x37, 0x33, 0xea, 0x26, 0x5c, 0xff, 0x5d, 0x4f, 0x21, 0x29, 0xe3, 0xc8, - 0x3a, 0x6c, 0xa3, 0x3a, 0x62, 0x23, 0xf8, 0x55, 0xa9, 0x1a, 0xd4, 0x97, 0x76, 0xd6, - 0x4e, 0xcf, 0xae, 0x68, 0x78, 0x66, 0x8e, 0xfe, 0xea, 0xc9, 0x30, 0xab, 0x6f, 0xe9, - 0x18, 0x33, 0x70, 0xc6, 0x17, 0x27, 0xb4, 0x04, 0x9a, 0x1d, 0xff, 0x85, 0x79, 0x94, - 0x7b, 0xf1, 0x6a, 0xd1, 0xc0, 0xe2, 0x10, 0x52, 0x4c, 0x4f, 0x5a, 0xe7, 0x54, 0x8f, - 0x3d, 0x3e, 0x53, 0x2e, 0x69, 0x4a, 0xbe, 0xd9, 0x30, 0x3f, 0xf2, 0x60, 0x17, 0x85, - 0x05, 0x54, 0x21, 0x41, 0xca, 0x98, 0x0d, 0xe1, 0x20, 0x90, 0xee, 0xc0, 0x1d, 0xa3, - 0x39, 0x9e, 0x8e, 0x45, 0x49, 0x34, 0xbb, 0x15, 0x75, 0x9d, 0x34, 0x84, 0x04, 0xd6, - 0x47, 0xbb, 0x2a, 0x40, 0x9b, 0x9d, 0x8a, 0x95, 0x60, 0x21, 0xbd, 0xb8, 0x5d, 0xdb, - 0xa1, 0x97, 0x85, 0x93, 0xaa, 0x56, 0xd9, 0x61, 0xed, 0xe3, 0xa7, 0x07, 0xe7, 0xb0, - 0xbb, 0x6f, 0x32, 0x52, 0x29, 0xce, 0x75, 0x4c, 0x70, 0x2d, 0x9e, 0xbc, 0x35, 0xa2, - 0x66, 0x3c, 0x0c, 0xee, 0xc6, 0xb3, 0xd0, 0x4e, 0xbd, 0x91, 0xa6, 0x38, 0x54, 0x73, - 0x6e, 0xf4, 0xb6, 0x01, 0x49, 0x5c, 0x26, 0xaa, 0x49, 0x27, 0xb9, 0xcc, 0xba, 0xe3, - 0xad, 0xc8, 0x08, 0xb3, 0x25, 0x71, 0xff, 0x32, 0x28, 0x8d, 0x46, 0xc2, 0x96, 0x7a, - 0x96, 0xb5, 0x3e, 0x75, 0x60, 0x27, 0xd5, 0xea, 0xfe, 0xd7, 0xdc, 0x8d, 0x7d, 0x53, - 0x37, 0xf9, 0x83, 0x09, 0xff, 0xd1, 0xa3, 0x00, 0xeb, 0xa2, 0xc0, 0x22, 0x21, 0xa3, - 0xf1, 0x00, 0xb6, 0x8c, 0xb0, 0x66, 0x86, 0x1f, 0xbc, 0xb3, 0x92, 0x52, 0xac, 0x44, - 0x6c, 0x3e, 0xd3, 0xa9, 0x63, 0x97, 0x08, 0xfd, 0x86, 0x6e, 0x9f, 0xc0, 0xbf, 0xe4, - 0xa7, 0xae, 0xc1, 0x98, 0x69, 0x6a, 0xa1, 0x39, 0x79, 0x28, 0x7d, 0xcf, 0x1f, 0xdc, - 0xd1, 0x43, 0xa4, 0x4a, 0x78, 0xcc, 0x60, 0x06, 0xbe, 0xba, 0x2e, 0x1a, 0xe7, 0x0e, - 0x8e, 0x85, 0x77, 0x64, 0xd2, 0x33, 0xe5, 0x48, 0x30, 0x47, 0x3f, 0xbb, 0xd2, 0xb1, - 0x73, 0xa3, 0x4c, 0x16, 0xc2, 0x03, 0x2d, 0x00, 0x4f, 0xe1, 0x9d, 0x35, 0xd8, 0xa5, - 0x27, 0x78, 0x24, 0x26, 0x0f, 0x32, 0xae, 0x50, 0x1e, 0x24, 0x59, 0x29, 0x16, 0xea, - 0x46, 0xec, 0x14, 0xa9, 0xbc, 0x30, 0x1f, 0xd0, 0xc9, 0x00, 0xe3, 0x3a, 0x1b, 0x24, - 0xcd, 0x15, 0x3a, 0x25, 0xaf, 0xaa, 0x34, 0xee, 0x26, 0xcb, 0xc9, 0x21, 0x5f, 0xc6, - 0xfa, 0x18, 0x97, 0x27, 0x14, 0xaa, 0xb7, 0x9b, 0x72, 0x93, 0x9b, 0x9f, 0x4d, 0x31, - 0x90, 0xb9, 0xbd, 0x64, 0x28, 0x2c, 0x0e, 0x63, 0x0b, 0x6d, 0x8c, 0x67, 0x55, 0xd2, - 0x91, 0xe3, 0x3d, 0xc3, 0xcf, 0x6b, 0x6a, 0x74, 0x0b, 0x56, 0x5b, 0x1c, 0xc2, 0x92, - 0xf2, 0xce, 0xf3, 0xb8, 0xcc, 0x6a, 0x6f, 0x13, 0xa3, 0xc7, 0xb0, 0x65, 0x25, 0xe4, - 0xe7, 0x89, 0x7f, 0x63, 0xc8, 0x25, 0x02, 0xf7, 0xfd, 0x77, 0xba, 0xe5, 0xa8, 0x0a, - 0x63, 0xc7, 0x43, 0x6f, 0xdc, 0x83, 0x87, 0x78, 0x7e, 0xe3, 0x4a, 0x00, 0x0a, 0xc1, - 0x51, 0x2c, 0x5b, 0xb3, 0x82, 0x0d, 0xc6, 0xa9, 0xb4, 0x9e, 0x04, 0x8a, 0xe6, 0x22, - 0x96, 0x28, 0x18, 0x29, 0x4b, 0x82, 0x10, 0xf6, 0xb8, 0x8c, 0x29, 0x73, 0x9e, 0xf9, - 0xe9, 0x2b, 0x39, 0x53, 0xc7, 0xe0, 0x73, 0xae, 0x38, 0xdd, 0xe1, 0x78, 0xf6, 0x03, - 0x20, 0xfc, 0x97, 0x4a, 0x31, 0x1b, 0x78, 0xd6, 0x82, 0x05, 0x93, 0xce, 0x11, 0xcf, - 0xf1, 0xef, 0x14, 0x7d, 0xca, 0x0d, 0x29, 0x11, 0x86, 0xa4, 0x5d, 0x82, 0x3e, 0xe5, - 0x2d, 0x4f, 0xae, 0xb8, 0x61, - ], - ss: [ - 0xf9, 0xd4, 0xfe, 0x89, 0xbe, 0x29, 0xe5, 0x43, 0x8f, 0x8e, 0xd2, 0xee, 0x8d, 0x36, - 0x8c, 0x36, 0x5e, 0x55, 0x0b, 0x63, 0x36, 0xc5, 0x5a, 0x4d, 0x91, 0xf3, 0xd9, 0x6d, - 0xaf, 0xb3, 0x19, 0x1a, - ], - }, - TestVector { - seed: [0x09; 32], - randomness: [0x6d; 128], - ek: &[ - 0x46, 0x03, 0x93, 0xd6, 0x22, 0x24, 0x35, 0xd9, 0x2a, 0x68, 0xeb, 0x6b, 0x23, 0x84, - 0xae, 0x41, 0x4b, 0xa0, 0x41, 0x99, 0xac, 0x14, 0xe5, 0x61, 0xf6, 0x71, 0x1f, 0xac, - 0xf8, 0x71, 0x80, 0xa4, 0xaf, 0x61, 0x56, 0xa5, 0xcf, 0x58, 0x9c, 0x8e, 0xc7, 0x98, - 0x30, 0x54, 0x76, 0x42, 0x31, 0x64, 0x6f, 0x07, 0xc5, 0x7a, 0xe4, 0x24, 0x7d, 0xe3, - 0x7b, 0xb7, 0x37, 0x58, 0xa6, 0x0b, 0x4d, 0x33, 0x34, 0x98, 0x52, 0x38, 0x56, 0x30, - 0x05, 0xab, 0x33, 0x7c, 0x60, 0x75, 0xb8, 0x14, 0x16, 0xc2, 0x41, 0xfc, 0xe7, 0x64, - 0x50, 0x5a, 0xcd, 0x0f, 0xe7, 0xb0, 0xfb, 0xb8, 0x59, 0xe4, 0x17, 0x23, 0x90, 0xe6, - 0x70, 0x08, 0x94, 0x14, 0x10, 0x75, 0x49, 0xed, 0x29, 0x8b, 0xca, 0x65, 0x8a, 0x22, - 0x90, 0x79, 0x86, 0x6b, 0x8b, 0x96, 0x0a, 0x7c, 0x7f, 0xe4, 0x6c, 0xc4, 0x7a, 0x17, - 0x73, 0x01, 0x0f, 0x10, 0x6b, 0x6f, 0x5c, 0xc9, 0xc2, 0xf9, 0x06, 0x46, 0x58, 0x51, - 0xa7, 0x71, 0x66, 0x49, 0xb6, 0xa6, 0x7f, 0xf0, 0x73, 0x80, 0x7c, 0xfc, 0x7b, 0xe4, - 0xca, 0xc4, 0x4c, 0xd1, 0xaf, 0x6a, 0x37, 0x2c, 0xb0, 0x41, 0x61, 0xd4, 0xd3, 0x98, - 0x61, 0x78, 0x0c, 0x6f, 0x62, 0x05, 0x1d, 0xfc, 0xc3, 0x9c, 0x14, 0x3d, 0xcb, 0xe4, - 0x9b, 0xbf, 0x5b, 0x58, 0xa8, 0x76, 0x9b, 0x92, 0x71, 0x73, 0xe4, 0xc7, 0x09, 0x6c, - 0x91, 0x31, 0x0a, 0x91, 0x48, 0x4c, 0xc8, 0x0c, 0x55, 0x21, 0x7b, 0x76, 0x12, 0x4d, - 0x0d, 0xb0, 0x96, 0x5f, 0x84, 0xbe, 0xf0, 0x16, 0x04, 0x0c, 0xf1, 0x99, 0x47, 0xd6, - 0x1e, 0x05, 0xa1, 0x4f, 0x32, 0x2b, 0xbd, 0x91, 0x83, 0x92, 0xf5, 0x08, 0x3b, 0xe5, - 0x40, 0xa1, 0x22, 0xa3, 0xb1, 0xd7, 0xbc, 0x7c, 0x49, 0xa8, 0x68, 0xf6, 0x38, 0x4d, - 0xd5, 0x25, 0x98, 0x50, 0xd4, 0x27, 0x16, 0x67, 0x52, 0xbf, 0x28, 0x6a, 0x3a, 0xe7, - 0x29, 0xe3, 0xa5, 0xa5, 0xe7, 0x62, 0x09, 0xde, 0x5b, 0x9c, 0x07, 0x83, 0xa4, 0xc7, - 0x05, 0x04, 0xa3, 0x38, 0xaf, 0x3d, 0x17, 0x8e, 0xbd, 0x11, 0x4b, 0x7e, 0xf7, 0x00, - 0xcc, 0x17, 0x91, 0x9b, 0x25, 0x86, 0x82, 0xd2, 0x1a, 0x12, 0x44, 0xa0, 0x02, 0xfb, - 0xca, 0x20, 0x9a, 0x80, 0xcb, 0x2a, 0x94, 0xe4, 0x47, 0x6a, 0xae, 0xb7, 0xcd, 0x00, - 0x29, 0x29, 0xef, 0x99, 0x90, 0x95, 0xc8, 0x93, 0x62, 0x46, 0x67, 0xae, 0x2b, 0xc8, - 0x71, 0x2b, 0x20, 0xe3, 0x58, 0x15, 0x59, 0x91, 0x96, 0xde, 0x47, 0x8f, 0x67, 0x4b, - 0x50, 0xe2, 0x83, 0x13, 0xd7, 0x69, 0x5c, 0xe2, 0xba, 0x3d, 0xc0, 0x25, 0x94, 0x17, - 0x1a, 0x1b, 0xa7, 0xa0, 0x95, 0xa4, 0x35, 0x1a, 0x0f, 0x33, 0x06, 0xf5, 0x1b, 0x4c, - 0x09, 0xcc, 0xaf, 0xea, 0x58, 0x76, 0x93, 0xa9, 0x51, 0x9f, 0x4b, 0x49, 0x76, 0x26, - 0x04, 0x45, 0x42, 0x1a, 0x86, 0x5a, 0x40, 0x0a, 0x63, 0xb0, 0xa0, 0x3a, 0x8d, 0x9a, - 0x35, 0xce, 0x33, 0x35, 0xbe, 0xc1, 0x91, 0x24, 0x60, 0xe1, 0xa5, 0xb4, 0x68, 0x5f, - 0x8f, 0xb0, 0x39, 0xa5, 0xcb, 0x44, 0x4c, 0xa2, 0x1f, 0x87, 0xc5, 0x22, 0xc7, 0xe6, - 0x55, 0x4f, 0x29, 0x00, 0x7c, 0x05, 0x62, 0xe5, 0xf0, 0x2e, 0xee, 0x84, 0x9f, 0x29, - 0xd3, 0x9b, 0xc1, 0x5b, 0x58, 0xff, 0x58, 0xb2, 0x52, 0x58, 0x1a, 0xdb, 0xb1, 0x7a, - 0x42, 0xf2, 0x35, 0x7c, 0xe6, 0x27, 0x46, 0xb1, 0x34, 0x7a, 0x41, 0x23, 0xd0, 0x2a, - 0xa5, 0xc3, 0x97, 0x4e, 0xed, 0x86, 0x3e, 0xb4, 0xf3, 0x09, 0xc5, 0xb2, 0x65, 0xd0, - 0x38, 0xaa, 0x6f, 0x99, 0x4e, 0x8d, 0xe9, 0x4d, 0xa3, 0x84, 0x32, 0x1f, 0xc6, 0x5b, - 0xda, 0x70, 0x4a, 0x15, 0x21, 0x64, 0x51, 0x46, 0x5f, 0x9d, 0x44, 0xb7, 0xe8, 0xa9, - 0xb7, 0xe6, 0xd3, 0x56, 0xe8, 0xa3, 0x99, 0xe7, 0xeb, 0x39, 0xd0, 0xb4, 0x6d, 0x85, - 0xec, 0x0c, 0xc9, 0x3c, 0x56, 0xa6, 0xd5, 0x70, 0xc9, 0xa8, 0x86, 0x5a, 0xa6, 0xc7, - 0x4f, 0x35, 0x8f, 0xf1, 0xc0, 0x3b, 0x80, 0x04, 0x25, 0x67, 0x79, 0x6c, 0x41, 0xf4, - 0x18, 0x74, 0x71, 0x26, 0xbb, 0x4a, 0xc2, 0x9d, 0x73, 0x83, 0x72, 0xfc, 0xa1, 0xa9, - 0x64, 0x6a, 0xd6, 0xe7, 0x90, 0x15, 0x81, 0xc6, 0x84, 0x5c, 0x91, 0xc3, 0x98, 0x90, - 0x58, 0xa8, 0x2b, 0xd8, 0x01, 0x17, 0xe7, 0xc7, 0x3b, 0xd2, 0xda, 0x15, 0xcf, 0xf5, - 0x22, 0xfb, 0xf5, 0x99, 0xfa, 0x68, 0x40, 0x31, 0x76, 0x08, 0xe4, 0x10, 0xb5, 0x2b, - 0x4c, 0x47, 0x78, 0x27, 0x87, 0x7f, 0xf6, 0x12, 0xcf, 0x89, 0xcf, 0x6c, 0x87, 0xc8, - 0xa7, 0x2b, 0x17, 0x5b, 0x6c, 0x86, 0x27, 0xe0, 0xa1, 0x0b, 0x93, 0x7c, 0xc6, 0x72, - 0xc1, 0xaf, 0x54, 0xb6, 0x43, 0x28, 0xc7, 0x33, 0xc2, 0x25, 0x85, 0xb8, 0x8c, 0x54, - 0xd3, 0x0c, 0x1a, 0x22, 0xbf, 0xb6, 0xa2, 0x55, 0x9b, 0x17, 0x8d, 0xb7, 0xa0, 0xaa, - 0xb6, 0x00, 0x1d, 0xda, 0xc9, 0x25, 0x04, 0x16, 0xae, 0x5c, 0x11, 0xc0, 0xa5, 0xa2, - 0x6a, 0x09, 0xd3, 0x85, 0x18, 0xb2, 0x8f, 0x8e, 0x3a, 0x7f, 0x2e, 0xb5, 0x1e, 0x0d, - 0x67, 0x9f, 0x1d, 0x92, 0x8b, 0x77, 0xe1, 0x03, 0xf4, 0xfa, 0x62, 0x18, 0xf6, 0x8a, - 0x1d, 0xe0, 0xaf, 0x5e, 0xa0, 0xbd, 0x1a, 0x26, 0xbb, 0x62, 0x48, 0x79, 0xab, 0x47, - 0xa2, 0x8e, 0x9c, 0x40, 0x04, 0x2b, 0x29, 0xcb, 0xd6, 0x78, 0xf7, 0xab, 0x65, 0x35, - 0x38, 0x07, 0xd4, 0x19, 0x93, 0xbf, 0xe1, 0x16, 0x07, 0x31, 0x34, 0x30, 0xe5, 0xaa, - 0x8c, 0x27, 0xb9, 0xaf, 0x3a, 0x5f, 0x10, 0x53, 0x1a, 0xec, 0xb1, 0xa1, 0xc3, 0x71, - 0x0f, 0x2b, 0x99, 0x2c, 0x99, 0xb6, 0x04, 0xf7, 0xb2, 0xa3, 0x26, 0x9a, 0x49, 0x09, - 0x1a, 0x3a, 0x56, 0xdc, 0x8b, 0x78, 0x48, 0x7a, 0xd9, 0xac, 0x24, 0xe3, 0x6c, 0x97, - 0xd3, 0x51, 0x85, 0x5e, 0xe1, 0x71, 0x50, 0x83, 0xa3, 0xe9, 0xc3, 0x2f, 0x52, 0xf7, - 0x35, 0xa7, 0x6c, 0xb0, 0x08, 0x71, 0x4f, 0xa8, 0x3b, 0xc7, 0x0e, 0x4c, 0xaa, 0xb7, - 0x2c, 0x48, 0x5a, 0xc8, 0x43, 0x1c, 0xc9, 0x7c, 0xfb, 0xa7, 0x27, 0xfc, 0xc0, 0xaf, - 0x9c, 0x54, 0x2d, 0x7d, 0x91, 0x99, 0xbc, 0x4b, 0x50, 0xa9, 0xba, 0x83, 0xdb, 0x77, - 0xc7, 0xdc, 0x20, 0x6f, 0xda, 0x05, 0x47, 0xe2, 0x79, 0x5a, 0x8d, 0xc3, 0x6f, 0xd1, - 0xb3, 0x3d, 0x2d, 0xda, 0xb0, 0x89, 0xd9, 0x5e, 0xb1, 0x6b, 0x15, 0xda, 0x94, 0xa7, - 0x4e, 0xd8, 0xb7, 0xe8, 0xda, 0xad, 0xf8, 0x18, 0x07, 0x21, 0xe0, 0xa1, 0xe3, 0x10, - 0x02, 0x49, 0x7c, 0x83, 0xce, 0x17, 0x47, 0xfb, 0xe7, 0x8c, 0xac, 0x29, 0x1f, 0xfd, - 0x96, 0x7f, 0x23, 0xf4, 0x7a, 0x8a, 0x30, 0x48, 0x5a, 0xa3, 0x52, 0xcf, 0xd4, 0xc6, - 0x90, 0x7c, 0xb8, 0xb2, 0x01, 0xbc, 0x3b, 0x92, 0x81, 0xeb, 0x51, 0x98, 0x5e, 0x11, - 0xcb, 0xb4, 0xb5, 0x25, 0x0e, 0xf7, 0xca, 0x13, 0xc7, 0x06, 0x74, 0xf3, 0x95, 0xc5, - 0x2b, 0x17, 0x75, 0x41, 0xb5, 0x7b, 0x3a, 0xac, 0x77, 0xe3, 0x82, 0xd5, 0xbc, 0x6e, - 0x0c, 0x32, 0xaa, 0xde, 0x73, 0xc7, 0x4a, 0x16, 0x3c, 0x0f, 0x43, 0xa5, 0x9c, 0x61, - 0x6d, 0x76, 0x39, 0x3f, 0x39, 0x16, 0x6d, 0xe8, 0x31, 0x8f, 0xef, 0x1b, 0x2c, 0x47, - 0x07, 0x5c, 0x19, 0x88, 0x5e, 0xce, 0xa7, 0xb4, 0xac, 0xc6, 0x74, 0xd1, 0xc7, 0x2a, - 0x2e, 0x4c, 0xa7, 0x0d, 0x28, 0x32, 0x5f, 0x12, 0xcc, 0x33, 0xac, 0x19, 0xaa, 0x9c, - 0x5e, 0x5a, 0xb3, 0x1c, 0x7a, 0xc6, 0x93, 0x3c, 0x1a, 0x0a, 0x79, 0x06, 0x5f, 0xa1, - 0xe0, 0x23, 0x7c, 0xd9, 0x0a, 0x13, 0xc7, 0xb7, 0x59, 0x98, 0x02, 0x62, 0x37, 0x8d, - 0x4a, 0x17, 0xb8, 0x5c, 0x18, 0x4f, 0x84, 0x76, 0x1e, 0x07, 0x1a, 0x97, 0x37, 0x84, - 0xb1, 0xc3, 0x0a, 0x93, 0x58, 0xb7, 0x6a, 0x7a, 0xf1, 0x07, 0x27, 0xf3, 0x69, 0x60, - 0xf2, 0x1c, 0x6e, 0x07, 0x8d, 0x33, 0xfb, 0x52, 0x83, 0x73, 0xa4, 0x36, 0xfb, 0x23, - 0x7f, 0x87, 0x31, 0x7b, 0x81, 0xc0, 0x49, 0x26, 0x24, 0x59, 0x82, 0xae, 0xa0, 0xb3, - 0x9c, 0x24, 0xa6, 0x7e, 0xff, 0xe6, 0x5a, 0x91, 0xb2, 0x11, 0xad, 0x73, 0x34, 0xf8, - 0xe4, 0x85, 0x8a, 0x3b, 0x7d, 0x0e, 0xf2, 0x1b, 0x3e, 0x44, 0x3c, 0x0c, 0xb6, 0x4e, - 0x08, 0x94, 0x08, 0x00, 0x6b, 0x10, 0x3f, 0x38, 0x41, 0xca, 0xb7, 0x0b, 0x04, 0x6b, - 0x98, 0xe2, 0xc8, 0xae, 0xd9, 0x4a, 0xd6, 0x83, 0x20, 0x8e, 0x26, 0x54, 0x24, 0xb0, - 0x77, 0x38, 0x9c, 0x2a, 0xc6, 0x57, 0x1f, 0x21, 0x6f, 0xac, 0x52, 0xe3, 0x5c, 0xd2, - 0x80, 0xe5, 0x1a, 0xaf, 0x66, 0x32, 0x81, 0x62, 0x04, 0xc8, 0x2a, 0x04, 0xf0, 0x9e, - 0x4f, 0xda, 0x88, 0x5d, 0xb3, 0x4f, 0xcc, 0x3b, 0xe3, 0xff, 0x41, 0xf9, 0x57, 0x00, - 0xe4, 0x59, 0x3b, 0xf8, 0x25, 0xf9, 0x3a, 0xb3, 0x04, 0x69, 0x73, 0x3d, 0x37, 0x3e, - 0x45, 0x0b, 0x12, 0x5d, 0xb2, 0x22, 0xab, 0x72, 0xf2, 0xad, 0xe9, 0x6d, 0xb3, 0x1f, - 0xee, 0x09, 0x3f, 0xcf, 0x25, 0x45, 0x11, 0x54, 0x7a, 0xc1, 0xca, 0x7e, 0x92, 0x67, - 0x78, 0xf1, 0x33, - ], - dk: [0x09; 32], - dk_pq: [ - 0xe4, 0xc1, 0x90, 0xb4, 0x1d, 0x18, 0xfe, 0x33, 0xb5, 0x71, 0x08, 0x19, 0xeb, 0x4a, - 0x96, 0x2a, 0x2a, 0x6a, 0xf9, 0xcd, 0x26, 0x63, 0xd9, 0x76, 0x6a, 0x48, 0x96, 0x48, - 0x1d, 0xcf, 0xc8, 0xb8, 0x96, 0x87, 0x08, 0x9a, 0x97, 0x97, 0xcf, 0x2f, 0x69, 0xd0, - 0x58, 0xdf, 0x1f, 0x69, 0x04, 0x41, 0xdb, 0xcc, 0xf3, 0xfa, 0xa9, 0x1e, 0xad, 0x65, - 0xb8, 0xd4, 0xdf, 0xad, 0xd6, 0xaa, 0x49, 0x12, - ], - dk_t: [ - 0x00, 0xee, 0x28, 0xdf, 0x5d, 0x85, 0x44, 0xc9, 0xea, 0x9a, 0x79, 0xba, 0xdc, 0xf9, - 0x95, 0xf4, 0x3a, 0xf9, 0x0e, 0xf2, 0x55, 0xb6, 0x4b, 0x6c, 0xa0, 0xc8, 0xd1, 0x94, - 0x52, 0x8f, 0x71, 0x52, - ], - ct: &[ - 0xa8, 0x57, 0xa7, 0x42, 0x5c, 0x60, 0x77, 0xda, 0xfa, 0xef, 0x13, 0x3c, 0x62, 0x86, - 0x9e, 0x52, 0x3a, 0x4b, 0x41, 0x11, 0x0c, 0xed, 0xed, 0xea, 0x6e, 0xe6, 0x6b, 0x9a, - 0x6b, 0xba, 0x63, 0x4d, 0x92, 0xcb, 0x41, 0xd5, 0xfb, 0xef, 0x2c, 0xcd, 0x6f, 0x5f, - 0x05, 0x79, 0x51, 0xfe, 0x1b, 0x44, 0xe2, 0x24, 0xcd, 0x23, 0x14, 0xc9, 0xff, 0xcd, - 0xf4, 0xc3, 0x58, 0x97, 0x9d, 0x6d, 0x06, 0x5f, 0x1f, 0x12, 0xa5, 0x10, 0x33, 0x64, - 0x0c, 0x07, 0x96, 0x5e, 0x6d, 0x43, 0x42, 0xaf, 0xd7, 0xb5, 0x7d, 0x52, 0x87, 0x86, - 0xb3, 0x98, 0xe1, 0x3b, 0x6e, 0xca, 0x58, 0x1b, 0x96, 0xfe, 0x77, 0x77, 0x8d, 0x73, - 0xbf, 0xa2, 0x42, 0x2e, 0x43, 0x09, 0x3f, 0x7c, 0x96, 0x43, 0x41, 0x03, 0xb1, 0x8c, - 0xbd, 0xf0, 0xaa, 0x65, 0x49, 0xda, 0x8e, 0x16, 0x9b, 0x66, 0xf4, 0x29, 0x21, 0xb8, - 0x9a, 0xc8, 0x26, 0x7d, 0xe3, 0x54, 0x46, 0x00, 0x89, 0x48, 0xd6, 0x02, 0x6a, 0x0b, - 0xcb, 0xe6, 0x13, 0x57, 0xe9, 0x7c, 0x7f, 0xe7, 0xa9, 0x53, 0x37, 0xdf, 0xa3, 0x17, - 0x7c, 0xa6, 0x16, 0x7c, 0x3a, 0x2a, 0xf8, 0xdc, 0x38, 0xe3, 0xd7, 0x08, 0x66, 0x58, - 0x24, 0xac, 0xf9, 0x7d, 0x6d, 0x7b, 0x15, 0x2b, 0xff, 0x78, 0x14, 0x51, 0xc5, 0x87, - 0xa2, 0x82, 0xad, 0xce, 0x03, 0x1b, 0x3e, 0xfa, 0x26, 0xb6, 0xd8, 0xbf, 0x4b, 0x49, - 0x73, 0x3c, 0x03, 0xdc, 0xc4, 0x30, 0x00, 0x76, 0x04, 0x9e, 0x27, 0x8d, 0x3c, 0xd8, - 0x72, 0x17, 0x4b, 0xc3, 0x74, 0xd7, 0x70, 0x38, 0xc7, 0x52, 0x03, 0xba, 0x45, 0xd3, - 0x0b, 0xd4, 0x11, 0x0b, 0x62, 0x34, 0x6c, 0x3f, 0x0b, 0xb1, 0xd8, 0x56, 0x3d, 0x0e, - 0x2d, 0x58, 0xca, 0xc8, 0x39, 0xfa, 0x69, 0x3c, 0xa9, 0x6a, 0x56, 0xee, 0xab, 0x1a, - 0xa4, 0xd2, 0x6c, 0xc9, 0x5e, 0x01, 0x36, 0x74, 0xee, 0xc4, 0xf8, 0xf0, 0x80, 0x95, - 0x05, 0x9f, 0x08, 0x1a, 0x0d, 0x4d, 0xfc, 0x07, 0x35, 0x65, 0x3f, 0x30, 0x97, 0xf1, - 0xa3, 0x7d, 0xa3, 0x34, 0x00, 0x70, 0x82, 0xba, 0x66, 0x19, 0x84, 0x45, 0x47, 0xe0, - 0xd3, 0x29, 0x66, 0x69, 0xee, 0xce, 0xb0, 0x2e, 0xcb, 0xf0, 0xc5, 0xc5, 0xa8, 0x8d, - 0x5d, 0x1c, 0x43, 0x23, 0x98, 0x36, 0x15, 0x29, 0xe0, 0xd9, 0x1a, 0x62, 0x8e, 0x56, - 0x8c, 0xd9, 0xa1, 0x8c, 0xb3, 0xe8, 0xca, 0x41, 0x31, 0x5c, 0xcb, 0xd8, 0xff, 0x9c, - 0xbb, 0xc0, 0x67, 0x71, 0x50, 0xf2, 0xe0, 0x62, 0x74, 0xec, 0x9e, 0x27, 0x33, 0xf3, - 0x11, 0x1c, 0xd4, 0xf1, 0xb9, 0x00, 0xc7, 0xa3, 0xa8, 0x0b, 0x51, 0x7a, 0x7d, 0x69, - 0x17, 0xfd, 0x07, 0x53, 0xf5, 0x9e, 0x8b, 0xf0, 0x32, 0x67, 0xe3, 0xa4, 0x3d, 0x60, - 0xe1, 0x85, 0x7d, 0x49, 0x22, 0xcd, 0x0f, 0x14, 0xb6, 0xd2, 0x86, 0x02, 0x79, 0x2d, - 0xbf, 0xe2, 0xb4, 0x48, 0x8e, 0x80, 0x70, 0x23, 0xff, 0x4a, 0x8b, 0x65, 0xf7, 0x5f, - 0xe1, 0xa0, 0x82, 0x6d, 0x5f, 0xf4, 0x90, 0xba, 0xc7, 0xbe, 0x07, 0x1b, 0x95, 0x45, - 0xf6, 0xe7, 0xee, 0x75, 0x8c, 0xaf, 0x46, 0x0e, 0x7e, 0x92, 0xe5, 0x2e, 0xb8, 0x3d, - 0xca, 0xfb, 0x5b, 0xed, 0xee, 0xcf, 0x44, 0xa5, 0xf5, 0xef, 0x23, 0x69, 0x0b, 0xd8, - 0x3a, 0xa5, 0xed, 0x2c, 0xe0, 0x42, 0x0c, 0x69, 0x7d, 0xfe, 0x4e, 0xae, 0xff, 0x5d, - 0x64, 0xbe, 0x78, 0xfd, 0x3d, 0x9c, 0x96, 0xf6, 0x6f, 0xcf, 0xbe, 0x01, 0x5d, 0x8a, - 0x1e, 0x75, 0xe9, 0x3e, 0xed, 0x73, 0x4c, 0x26, 0x7f, 0xa5, 0x15, 0x22, 0x0e, 0x99, - 0x37, 0xfd, 0xf8, 0xdf, 0x27, 0x1f, 0x69, 0xc8, 0xe3, 0xd6, 0xde, 0xc7, 0x61, 0x52, - 0x40, 0x4d, 0x86, 0x24, 0x34, 0x21, 0x1b, 0xd1, 0xe4, 0xb5, 0x3c, 0xb9, 0x95, 0x1c, - 0x48, 0xb7, 0x96, 0xfb, 0xf4, 0x28, 0x7d, 0x33, 0x86, 0xc6, 0x52, 0x17, 0xb4, 0x1f, - 0x2c, 0x41, 0x4d, 0xaa, 0xda, 0x20, 0x23, 0xc4, 0x3c, 0x08, 0xf8, 0xb6, 0xed, 0xbe, - 0xcc, 0x7f, 0x75, 0x09, 0x68, 0xc4, 0xf1, 0x6c, 0x3c, 0x98, 0x3a, 0x95, 0xd7, 0x3c, - 0x25, 0xd3, 0xcd, 0x4a, 0xac, 0x5b, 0xd5, 0x94, 0x1f, 0xa3, 0x76, 0xe1, 0x93, 0x44, - 0x36, 0xac, 0xec, 0xf9, 0xbb, 0x9b, 0xd4, 0x40, 0x9d, 0x09, 0x44, 0xd3, 0x93, 0xd8, - 0x52, 0xaa, 0x15, 0xd6, 0x36, 0x3b, 0xbd, 0x83, 0xcc, 0x24, 0xb1, 0xea, 0x84, 0x1e, - 0x00, 0xb9, 0x9d, 0xbe, 0x9f, 0x7b, 0x9f, 0xc2, 0xa4, 0x15, 0x06, 0x38, 0x65, 0xb4, - 0x3e, 0xcc, 0x9d, 0xb0, 0xa9, 0x53, 0x36, 0x82, 0x0d, 0x40, 0xec, 0x4d, 0x73, 0x25, - 0xd5, 0x06, 0x6e, 0xeb, 0x2a, 0x14, 0x4e, 0xd3, 0xc2, 0x7f, 0x50, 0x72, 0xc9, 0xa2, - 0xe5, 0x96, 0xd3, 0x95, 0xbd, 0x06, 0x9f, 0xdb, 0x88, 0x71, 0x52, 0x1a, 0x08, 0xd0, - 0xe9, 0xc1, 0x81, 0x04, 0x67, 0xa2, 0x71, 0xb4, 0x06, 0x7a, 0x54, 0xd9, 0xd8, 0x1e, - 0xca, 0x8f, 0x26, 0xd1, 0x8a, 0xcb, 0x41, 0xa7, 0xde, 0x59, 0x9a, 0xab, 0x1f, 0x79, - 0xdd, 0xd0, 0x12, 0x8c, 0x07, 0xe4, 0x4c, 0xf2, 0xcc, 0xef, 0x72, 0x36, 0x8c, 0xb4, - 0x47, 0x4d, 0xb4, 0x7e, 0xf4, 0x39, 0x17, 0x94, 0x0a, 0x80, 0xd0, 0x5a, 0xea, 0x5e, - 0x8c, 0x93, 0x3a, 0x0e, 0xf8, 0xa8, 0x51, 0x6a, 0x6d, 0xc2, 0xa5, 0x0d, 0xf2, 0x73, - 0x28, 0x8d, 0x97, 0xa9, 0x78, 0x86, 0x29, 0xf0, 0x01, 0xe4, 0x87, 0x43, 0x4e, 0x6a, - 0x41, 0x92, 0x46, 0x6e, 0x63, 0xf0, 0xe1, 0x85, 0x81, 0x06, 0x65, 0x26, 0x7a, 0x02, - 0x18, 0x96, 0x96, 0x7d, 0x83, 0x3c, 0x1f, 0x10, 0x86, 0x45, 0xa5, 0xd1, 0x73, 0x34, - 0xd5, 0xdd, 0xe8, 0xfd, 0x61, 0x7c, 0x78, 0x66, 0x65, 0xd7, 0xdf, 0x97, 0x62, 0xb8, - 0xec, 0x06, 0x76, 0xaf, 0x69, 0x7d, 0xca, 0x63, 0xe6, 0x2b, 0x59, 0x7a, 0xa2, 0xcf, - 0x89, 0xc5, 0x58, 0xac, 0xcc, 0x87, 0x2c, 0xe9, 0xa1, 0x27, 0x7f, 0x88, 0xc5, 0xac, - 0x16, 0x0b, 0x2d, 0x13, 0xa2, 0x7d, 0xe6, 0xb4, 0x02, 0x73, 0x53, 0xad, 0xc3, 0xbf, - 0x59, 0x6d, 0x3d, 0x65, 0x27, 0x53, 0x2e, 0x66, 0x22, 0x5f, 0xa5, 0x3e, 0x25, 0x46, - 0xf6, 0xce, 0xb2, 0x40, 0x43, 0x5b, 0xb9, 0x3d, 0x10, 0xe4, 0x67, 0x72, 0x08, 0xe9, - 0x90, 0xf6, 0x22, 0x27, 0x6d, 0x04, 0xab, 0x8f, 0x2e, 0x4c, 0xe2, 0xe5, 0x18, 0x0a, - 0x43, 0x6d, 0x33, 0xad, 0xbf, 0x29, 0xc2, 0xce, 0xf8, 0x70, 0x4a, 0x41, 0x07, 0x4e, - 0xd1, 0x6c, 0x16, 0x4f, 0xfc, 0xd1, 0xc8, 0xf0, 0x9a, 0x2f, 0x75, 0x2c, 0x09, 0x8c, - 0xaa, 0xb0, 0x9d, 0xa3, 0xdb, 0x75, 0xd8, 0x4c, 0xa5, 0x10, 0x54, 0x2c, 0x3a, 0xde, - 0xa1, 0x75, 0x7a, 0x55, 0x3b, 0xf5, 0x36, 0x57, 0xf0, 0x3f, 0xee, 0xc8, 0x03, 0x95, - 0x07, 0x47, 0xc8, 0xdd, 0xce, 0xeb, 0x31, 0xbd, 0x65, 0x80, 0x72, 0xf0, 0x1b, 0x79, - 0x72, 0xdf, 0x73, 0x1a, 0xf5, 0xff, 0x53, 0xbf, 0x8a, 0x83, 0x61, 0xcc, 0x91, 0x8c, - 0x6a, 0x00, 0x69, 0x31, 0x34, 0xfe, 0x6e, 0x38, 0x5c, 0xc7, 0x04, 0x84, 0xd2, 0xe3, - 0xe6, 0xd3, 0x65, 0xc1, 0x4f, 0xbe, 0x6e, 0x23, 0x32, 0xea, 0xf8, 0x6b, 0x7a, 0xfb, - 0x8d, 0xa6, 0x19, 0xdd, 0x4c, 0x13, 0xe8, 0x6f, 0x62, 0xed, 0x63, 0xda, 0x3b, 0x99, - 0x89, 0x5d, 0x6e, 0xe4, 0x7b, 0x44, 0x0e, 0x16, 0xa3, 0x61, 0x5f, 0x34, 0x1d, 0x4b, - 0xe4, 0x12, 0x39, 0x33, 0x6b, 0x02, 0x01, 0x74, 0x81, 0x96, 0x81, 0x73, 0x25, 0x03, - 0xf2, 0x75, 0xbf, 0x8b, 0xc4, 0x94, 0xc2, 0x51, 0xe5, 0x44, 0x8f, 0xf3, 0x2b, 0xff, - 0xb3, 0xfe, 0x07, 0x87, 0x48, 0x2b, 0x79, 0x6c, 0x37, 0xfd, 0x8d, 0x25, 0xa2, 0x8e, - 0xa7, 0x86, 0x20, 0x04, 0x6b, 0x19, 0x2c, 0xe4, 0x6f, 0xa4, 0xc7, 0x98, 0xc0, 0xfe, - 0xed, 0x18, 0x19, 0x61, 0x44, 0x13, 0x32, 0x6e, 0xb3, 0x73, 0xe6, 0x22, 0x83, 0x4a, - 0xfe, 0xaf, 0xf8, 0x1a, 0xff, 0x30, 0x8c, 0xaa, 0xf8, 0x35, 0x04, 0xd3, 0x1b, 0x98, - 0x98, 0xe8, 0x48, 0xb3, 0x96, 0xbc, 0x86, 0xcc, 0x55, 0xc5, 0x19, 0xf1, 0xa0, 0x11, - 0x25, 0x99, 0x53, 0x11, 0xba, 0x37, 0xd9, 0x6a, 0xa5, 0x9f, 0xf4, 0x64, 0xba, 0xf8, - 0x88, 0x5f, 0x3b, 0xdd, 0x10, 0xb1, 0xc9, 0x2f, 0x0b, 0x28, 0x69, 0x90, 0x04, 0x8d, - 0x58, 0x10, 0x5a, 0x7a, 0xb5, 0xec, 0x17, 0x55, 0x76, 0x3e, 0xcb, 0x4d, 0x20, 0xfd, - 0x18, 0x17, 0xd6, 0xb2, 0xfd, - ], - ss: [ - 0xa0, 0x07, 0x1e, 0x94, 0xb4, 0xd0, 0x27, 0x5e, 0xd9, 0x1d, 0xfe, 0x4f, 0x3f, 0xe8, - 0x7d, 0xd4, 0xa5, 0x34, 0x26, 0x9c, 0x7a, 0x59, 0x91, 0xfd, 0xc2, 0x7a, 0xc3, 0x19, - 0x33, 0xfa, 0xd2, 0x4c, - ], - }, -]; diff --git a/age/src/native/x25519.rs b/age/src/native/x25519.rs index 3ed50397..4da1c503 100644 --- a/age/src/native/x25519.rs +++ b/age/src/native/x25519.rs @@ -4,14 +4,14 @@ use std::collections::HashSet; use std::fmt; use age_core::{ - format::{FileKey, Stanza, FILE_KEY_BYTES}, + format::{FILE_KEY_BYTES, FileKey, Stanza}, primitives::{ aead_decrypt, aead_encrypt, bech32_decode, bech32_encode, bech32_encode_to_fmt, hkdf, }, secrecy::{ExposeSecret, SecretString}, }; -use base64::{prelude::BASE64_STANDARD_NO_PAD, Engine}; -use rand::rngs::OsRng; +use base64::{Engine, prelude::BASE64_STANDARD_NO_PAD}; +use rand::{rand_core::UnwrapErr, rngs::SysRng}; use subtle::ConstantTimeEq; use x25519_dalek::{EphemeralSecret, PublicKey, StaticSecret}; use zeroize::Zeroize; @@ -67,8 +67,8 @@ impl std::str::FromStr for Identity { impl Identity { /// Generates a new secret key. pub fn generate() -> Self { - let rng = OsRng; - Identity(StaticSecret::random_from_rng(rng)) + let mut rng = UnwrapErr(SysRng); + Identity(StaticSecret::random_from_rng(&mut rng)) } /// Serializes this secret key as a string. @@ -190,7 +190,7 @@ impl fmt::Display for Recipient { impl fmt::Debug for Recipient { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}", self) + write!(f, "{self}") } } @@ -199,8 +199,8 @@ impl crate::Recipient for Recipient { &self, file_key: &FileKey, ) -> Result<(Vec, HashSet), EncryptError> { - let rng = OsRng; - let esk = EphemeralSecret::random_from_rng(rng); + let mut rng = UnwrapErr(SysRng); + let esk = EphemeralSecret::random_from_rng(&mut rng); let epk: PublicKey = (&esk).into(); let shared_secret = esk.diffie_hellman(&self.0); diff --git a/age/src/plugin.rs b/age/src/plugin.rs index d30e4199..83e04205 100644 --- a/age/src/plugin.rs +++ b/age/src/plugin.rs @@ -3,11 +3,11 @@ use age_core::{ format::{FileKey, Stanza}, io::{DebugReader, DebugWriter}, - plugin::{Connection, Reply, Response, UnidirSend, IDENTITY_V1, RECIPIENT_V1}, + plugin::{Connection, IDENTITY_V1, RECIPIENT_V1, Reply, Response, UnidirSend}, primitives::{bech32_decode, bech32_encode}, secrecy::ExposeSecret, }; -use base64::{prelude::BASE64_STANDARD_NO_PAD, Engine}; +use base64::{Engine, prelude::BASE64_STANDARD_NO_PAD}; use bech32::Hrp; use std::borrow::Borrow; @@ -22,8 +22,9 @@ use std::thread; use std::time::{Duration, SystemTime}; use crate::{ + Callbacks, error::{DecryptError, EncryptError, PluginError}, - fl, wfl, wlnfl, Callbacks, + fl, wfl, wlnfl, }; // Plugin HRPs are age1[name] and AGE-PLUGIN-[NAME]- @@ -51,9 +52,10 @@ fn valid_plugin_name(plugin_name: &str) -> bool { } fn binary_name(plugin_name: &str) -> String { - format!("age-plugin-{}", plugin_name) + format!("age-plugin-{plugin_name}") } +#[allow(dead_code)] struct SlowPluginGuard(mpsc::Sender<()>); impl SlowPluginGuard { @@ -202,7 +204,7 @@ impl Identity { pub fn default_for_plugin(plugin_name: &str) -> Result { if valid_plugin_name(plugin_name) { Ok(bech32_encode( - Hrp::parse_unchecked(&format!("{}{}-", PLUGIN_IDENTITY_PREFIX, plugin_name)), + Hrp::parse_unchecked(&format!("{PLUGIN_IDENTITY_PREFIX}{plugin_name}-")), &[], ) .to_uppercase() @@ -240,7 +242,7 @@ impl Plugin { // the Windows host are available to us, but `which` only trials PATHEXT // extensions automatically when compiled for Windows. if wsl::is_wsl() { - which::which(format!("{}.exe", binary_name)).map_err(|_| e) + which::which(format!("{binary_name}.exe")).map_err(|_| e) } else { Err(e) } @@ -333,10 +335,7 @@ fn handle_confirm( errors.push(PluginError::Other { kind: "internal".to_owned(), metadata: vec![], - message: format!( - "{} command must have at least one metadata argument", - CMD_CONFIRM - ), + message: format!("{CMD_CONFIRM} command must have at least one metadata argument"), }); return reply.fail(); } @@ -345,8 +344,7 @@ fn handle_confirm( kind: "internal".to_owned(), metadata: vec![], message: format!( - "The first two metadata arguments to the {} command must be Base64-encoded", - CMD_CONFIRM + "The first two metadata arguments to the {CMD_CONFIRM} command must be Base64-encoded" ), }); return reply.fail(); @@ -454,23 +452,21 @@ impl crate::Recipient for RecipientPluginV1 { } CMD_CONFIRM => handle_confirm(command, reply, &mut errors, &self.callbacks), CMD_REQUEST_PUBLIC => { - if let Some(value) = self + match self .callbacks .request_public_string(&String::from_utf8_lossy(&command.body)) { - reply.ok(Some(value.as_bytes())) - } else { - reply.fail() + Some(value) => reply.ok(Some(value.as_bytes())), + _ => reply.fail(), } } CMD_REQUEST_SECRET => { - if let Some(secret) = self + match self .callbacks .request_passphrase(&String::from_utf8_lossy(&command.body)) { - reply.ok(Some(secret.expose_secret().as_bytes())) - } else { - reply.fail() + Some(secret) => reply.ok(Some(secret.expose_secret().as_bytes())), + _ => reply.fail(), } } CMD_RECIPIENT_STANZA => { @@ -492,8 +488,7 @@ impl crate::Recipient for RecipientPluginV1 { kind: "internal".to_owned(), metadata: vec![], message: format!( - "{} command must have at least two metadata arguments", - CMD_RECIPIENT_STANZA + "{CMD_RECIPIENT_STANZA} command must have at least two metadata arguments" ), }); } @@ -510,8 +505,7 @@ impl crate::Recipient for RecipientPluginV1 { kind: "internal".to_owned(), metadata: vec![], message: format!( - "{} command must not contain duplicate labels", - CMD_LABELS + "{CMD_LABELS} command must not contain duplicate labels" ), }); } @@ -520,8 +514,7 @@ impl crate::Recipient for RecipientPluginV1 { kind: "internal".to_owned(), metadata: vec![], message: format!( - "{} command must not be sent more than once", - CMD_LABELS + "{CMD_LABELS} command must not be sent more than once" ), }); } @@ -670,23 +663,21 @@ impl IdentityPluginV1 { } CMD_CONFIRM => handle_confirm(command, reply, &mut errors, &self.callbacks), CMD_REQUEST_PUBLIC => { - if let Some(value) = self + match self .callbacks .request_public_string(&String::from_utf8_lossy(&command.body)) { - reply.ok(Some(value.as_bytes())) - } else { - reply.fail() + Some(value) => reply.ok(Some(value.as_bytes())), + _ => reply.fail(), } } CMD_REQUEST_SECRET => { - if let Some(secret) = self + match self .callbacks .request_passphrase(&String::from_utf8_lossy(&command.body)) { - reply.ok(Some(secret.expose_secret().as_bytes())) - } else { - reply.fail() + Some(secret) => reply.ok(Some(secret.expose_secret().as_bytes())), + _ => reply.fail(), } } CMD_FILE_KEY => { @@ -788,8 +779,8 @@ mod tests { use crate::NoCallbacks; use super::{ - Identity, IdentityPluginV1, Recipient, RecipientPluginV1, ResolveError, - PLUGIN_IDENTITY_PREFIX, PLUGIN_RECIPIENT_PREFIX, + Identity, IdentityPluginV1, PLUGIN_IDENTITY_PREFIX, PLUGIN_RECIPIENT_PREFIX, Recipient, + RecipientPluginV1, ResolveError, }; const INVALID_PLUGIN_NAME: &str = "foobar/../../../../../../../usr/bin/echo"; @@ -811,10 +802,7 @@ mod tests { #[test] fn recipient_rejects_invalid_chars() { let invalid_recipient = bech32_encode( - Hrp::parse_unchecked(&format!( - "{}{}", - PLUGIN_RECIPIENT_PREFIX, INVALID_PLUGIN_NAME - )), + Hrp::parse_unchecked(&format!("{PLUGIN_RECIPIENT_PREFIX}{INVALID_PLUGIN_NAME}")), &[], ); assert!(invalid_recipient.parse::().is_err()); @@ -823,7 +811,7 @@ mod tests { #[test] fn identity_rejects_empty_name() { let invalid_identity = bech32_encode( - Hrp::parse_unchecked(&format!("{}-", PLUGIN_IDENTITY_PREFIX)), + Hrp::parse_unchecked(&format!("{PLUGIN_IDENTITY_PREFIX}-")), &[], ) .to_uppercase(); @@ -833,10 +821,7 @@ mod tests { #[test] fn identity_rejects_invalid_chars() { let invalid_identity = bech32_encode( - Hrp::parse_unchecked(&format!( - "{}{}-", - PLUGIN_IDENTITY_PREFIX, INVALID_PLUGIN_NAME - )), + Hrp::parse_unchecked(&format!("{PLUGIN_IDENTITY_PREFIX}{INVALID_PLUGIN_NAME}-")), &[], ) .to_uppercase(); diff --git a/age/src/primitives.rs b/age/src/primitives.rs index bc95b8d6..c2842b36 100644 --- a/age/src/primitives.rs +++ b/age/src/primitives.rs @@ -2,10 +2,10 @@ use age_core::secrecy::{ExposeSecret, SecretBox}; use hmac::{ + Hmac, KeyInit, Mac, digest::{CtOutput, MacError}, - Hmac, Mac, }; -use scrypt::{errors::InvalidParams, scrypt as scrypt_inner, Params as ScryptParams}; +use scrypt::{Params as ScryptParams, errors::InvalidParams, scrypt as scrypt_inner}; use sha2::Sha256; use std::io::{self, Write}; @@ -62,7 +62,7 @@ impl Write for HmacWriter { /// /// [RFC 7914]: https://tools.ietf.org/html/rfc7914 pub(crate) fn scrypt(salt: &[u8], log_n: u8, password: &str) -> Result<[u8; 32], InvalidParams> { - let params = ScryptParams::new(log_n, 8, 1, 32)?; + let params = ScryptParams::new(log_n, 8, 1)?; let mut output = [0; 32]; scrypt_inner(password.as_bytes(), salt, ¶ms, &mut output) diff --git a/age/src/primitives/armor.rs b/age/src/primitives/armor.rs index 84c23ce3..99b76251 100644 --- a/age/src/primitives/armor.rs +++ b/age/src/primitives/armor.rs @@ -1,6 +1,6 @@ //! I/O helper structs for the age ASCII armor format. -use base64::{prelude::BASE64_STANDARD, Engine}; +use base64::{Engine, prelude::BASE64_STANDARD}; use pin_project::pin_project; use std::cmp; use std::error; @@ -466,9 +466,11 @@ impl ArmoredWriter { { if let Some(line) = encoded_line { loop { - line.offset += ready!(inner - .as_mut() - .poll_write(cx, &encoded_buf[line.offset..line.end]))?; + line.offset += ready!( + inner + .as_mut() + .poll_write(cx, &encoded_buf[line.offset..line.end]) + )?; if line.offset == line.end { break; } @@ -822,7 +824,7 @@ impl ArmoredReader { return Err(io::Error::new( io::ErrorKind::InvalidData, ArmoredReadError::InvalidBeginMarker, - )) + )); } } } else { @@ -929,7 +931,7 @@ impl BufRead for ArmoredReader { }) } else { Ok(&self.byte_buf[self.byte_start..self.byte_end]) - } + }; } Some(true) => { break if self.found_end { @@ -942,7 +944,7 @@ impl BufRead for ArmoredReader { } } else { Ok(&self.byte_buf[self.byte_start..self.byte_end]) - } + }; } } } @@ -1338,7 +1340,7 @@ impl Seek for ArmoredReader { mod tests { use std::io::{Cursor, Read, Seek, SeekFrom, Write}; - use super::{ArmoredReader, ArmoredWriter, Format, ARMORED_BYTES_PER_LINE}; + use super::{ARMORED_BYTES_PER_LINE, ArmoredReader, ArmoredWriter, Format}; #[cfg(feature = "async")] use futures::{ @@ -1397,13 +1399,13 @@ mod tests { match w.as_mut().poll_write(&mut cx, tmp) { Poll::Ready(Ok(0)) => break, Poll::Ready(Ok(written)) => tmp = &tmp[written..], - Poll::Ready(Err(e)) => panic!("Unexpected error: {}", e), + Poll::Ready(Err(e)) => panic!("Unexpected error: {e}"), Poll::Pending => panic!("Unexpected Pending"), } } match w.as_mut().poll_close(&mut cx) { Poll::Ready(Ok(())) => (), - Poll::Ready(Err(e)) => panic!("Unexpected error: {}", e), + Poll::Ready(Err(e)) => panic!("Unexpected error: {e}"), Poll::Pending => panic!("Unexpected Pending"), } } @@ -1420,7 +1422,7 @@ mod tests { match input.as_mut().poll_read(&mut cx, &mut tmp) { Poll::Ready(Ok(0)) => break, Poll::Ready(Ok(read)) => buf.extend_from_slice(&tmp[..read]), - Poll::Ready(Err(e)) => panic!("Unexpected error: {}", e), + Poll::Ready(Err(e)) => panic!("Unexpected error: {e}"), Poll::Pending => panic!("Unexpected Pending"), } } @@ -1549,13 +1551,13 @@ mod tests { match w.as_mut().poll_write(&mut cx, tmp) { Poll::Ready(Ok(0)) => break, Poll::Ready(Ok(written)) => tmp = &tmp[written..], - Poll::Ready(Err(e)) => panic!("Unexpected error: {}", e), + Poll::Ready(Err(e)) => panic!("Unexpected error: {e}"), Poll::Pending => panic!("Unexpected Pending"), } } match w.as_mut().poll_close(&mut cx) { Poll::Ready(Ok(())) => (), - Poll::Ready(Err(e)) => panic!("Unexpected error: {}", e), + Poll::Ready(Err(e)) => panic!("Unexpected error: {e}"), Poll::Pending => panic!("Unexpected Pending"), } } @@ -1580,7 +1582,7 @@ mod tests { match input.as_mut().poll_read(&mut cx, &mut tmp) { Poll::Ready(Ok(0)) => break, Poll::Ready(Ok(read)) => buf_async.extend_from_slice(&tmp[..read]), - Poll::Ready(Err(e)) => panic!("Unexpected error: {}", e), + Poll::Ready(Err(e)) => panic!("Unexpected error: {e}"), Poll::Pending => panic!("Unexpected Pending"), } } diff --git a/age/src/primitives/stream.rs b/age/src/primitives/stream.rs index 6fd75db1..d2b0413e 100644 --- a/age/src/primitives/stream.rs +++ b/age/src/primitives/stream.rs @@ -2,8 +2,8 @@ use age_core::secrecy::{ExposeSecret, SecretSlice}; use chacha20poly1305::{ - aead::{generic_array::GenericArray, Aead, KeyInit, KeySizeUser}, ChaCha20Poly1305, + aead::{Aead, KeyInit, KeySizeUser, array::Array}, }; use pin_project::pin_project; use std::cmp; @@ -23,9 +23,7 @@ const CHUNK_SIZE: usize = 64 * 1024; const TAG_SIZE: usize = 16; const ENCRYPTED_CHUNK_SIZE: usize = CHUNK_SIZE + TAG_SIZE; -pub(crate) struct PayloadKey( - pub(crate) GenericArray::KeySize>, -); +pub(crate) struct PayloadKey(pub(crate) Array::KeySize>); impl Drop for PayloadKey { fn drop(&mut self) { @@ -514,10 +512,10 @@ impl AsyncRead for StreamReader { if self.chunk.is_none() { while self.encrypted_pos < ENCRYPTED_CHUNK_SIZE { let this = self.as_mut().project(); - match ready!(this - .inner - .poll_read(cx, &mut this.encrypted_chunk[*this.encrypted_pos..])) - { + match ready!( + this.inner + .poll_read(cx, &mut this.encrypted_chunk[*this.encrypted_pos..]) + ) { Ok(0) => break, Ok(n) => self.encrypted_pos += n, Err(e) => match e.kind() { @@ -562,8 +560,7 @@ impl StreamReader { let ct_len = ct_end - ct_start; // Use ceiling division to determine the number of chunks. - let num_chunks = - (ct_len + (ENCRYPTED_CHUNK_SIZE as u64 - 1)) / ENCRYPTED_CHUNK_SIZE as u64; + let num_chunks = ct_len.div_ceil(ENCRYPTED_CHUNK_SIZE as u64); // If we have no ciphertext data then there is no last chunk, which is // invalid. @@ -688,7 +685,7 @@ mod tests { use age_core::secrecy::ExposeSecret; use std::io::{self, Cursor, Read, Seek, SeekFrom, Write}; - use super::{PayloadKey, Stream, CHUNK_SIZE, TAG_SIZE}; + use super::{CHUNK_SIZE, PayloadKey, Stream, TAG_SIZE}; #[cfg(feature = "async")] use futures::{ @@ -812,13 +809,13 @@ mod tests { match w.as_mut().poll_write(&mut cx, tmp) { Poll::Ready(Ok(0)) => break, Poll::Ready(Ok(written)) => tmp = &tmp[written..], - Poll::Ready(Err(e)) => panic!("Unexpected error: {}", e), + Poll::Ready(Err(e)) => panic!("Unexpected error: {e}"), Poll::Pending => panic!("Unexpected Pending"), } } match w.as_mut().poll_close(&mut cx) { Poll::Ready(Ok(())) => (), - Poll::Ready(Err(e)) => panic!("Unexpected error: {}", e), + Poll::Ready(Err(e)) => panic!("Unexpected error: {e}"), Poll::Pending => panic!("Unexpected Pending"), } }; @@ -835,7 +832,7 @@ mod tests { match r.as_mut().poll_read(&mut cx, &mut tmp) { Poll::Ready(Ok(0)) => break buf, Poll::Ready(Ok(read)) => buf.extend_from_slice(&tmp[..read]), - Poll::Ready(Err(e)) => panic!("Unexpected error: {}", e), + Poll::Ready(Err(e)) => panic!("Unexpected error: {e}"), Poll::Pending => panic!("Unexpected Pending"), } } @@ -883,7 +880,7 @@ mod tests { match result { Ok(written) => assert_eq!(written, data.len() as u64), - Err(e) => panic!("Unexpected error: {}", e), + Err(e) => panic!("Unexpected error: {e}"), } let decrypted = { @@ -895,7 +892,7 @@ mod tests { match result { Ok(written) => assert_eq!(written, data.len() as u64), - Err(e) => panic!("Unexpected error: {}", e), + Err(e) => panic!("Unexpected error: {e}"), } buf diff --git a/age/src/protocol.rs b/age/src/protocol.rs index c8692a88..359b2f08 100644 --- a/age/src/protocol.rs +++ b/age/src/protocol.rs @@ -1,17 +1,18 @@ //! Encryption and decryption routines for age. use age_core::{format::is_arbitrary_string, secrecy::SecretString}; -use rand::{rngs::OsRng, RngCore}; +use rand::{Rng, rand_core::UnwrapErr, rngs::SysRng}; use std::io::{self, BufRead, Read, Write}; use std::iter; use crate::{ + Identity, Recipient, error::{DecryptError, EncryptError}, format::{Header, HeaderV1}, keys::{mac_key, new_file_key, v1_payload_key}, primitives::stream::{PayloadKey, Stream, StreamReader, StreamWriter}, - scrypt, Identity, Recipient, + scrypt, }; #[cfg(feature = "async")] @@ -28,7 +29,7 @@ impl AsRef<[u8]> for Nonce { impl Nonce { fn random() -> Self { let mut nonce = [0; 16]; - OsRng.fill_bytes(&mut nonce); + UnwrapErr(SysRng).fill_bytes(&mut nonce); Nonce(nonce) } @@ -84,25 +85,30 @@ impl Encryptor { have_recipients = true; let (mut r_stanzas, r_labels) = recipient.wrap_file_key(&file_key)?; - if let Some(l_labels) = control.take() { - if l_labels != r_labels { - // Improve error message. - let err = if stanzas - .iter() - .chain(&r_stanzas) - .any(|stanza| stanza.tag == crate::scrypt::SCRYPT_RECIPIENT_TAG) - { - EncryptError::MixedRecipientAndPassphrase + match control.take() { + Some(l_labels) => { + if l_labels != r_labels { + // Improve error message. + let err = if stanzas + .iter() + .chain(&r_stanzas) + .any(|stanza| stanza.tag == crate::scrypt::SCRYPT_RECIPIENT_TAG) + { + EncryptError::MixedRecipientAndPassphrase + } else { + EncryptError::IncompatibleRecipients { l_labels, r_labels } + }; + return Err(err); + } + control = Some(l_labels); + } + _ => { + if r_labels.iter().all(is_arbitrary_string) { + control = Some(r_labels); } else { - EncryptError::IncompatibleRecipients { l_labels, r_labels } - }; - return Err(err); + return Err(EncryptError::InvalidRecipientLabels(r_labels)); + } } - control = Some(l_labels); - } else if r_labels.iter().all(is_arbitrary_string) { - control = Some(r_labels); - } else { - return Err(EncryptError::InvalidRecipientLabels(r_labels)); } stanzas.append(&mut r_stanzas); @@ -339,14 +345,14 @@ mod tests { use age_core::secrecy::SecretString; use super::{Decryptor, Encryptor}; - use crate::{identity::IdentityFile, scrypt, x25519, EncryptError, Identity, Recipient}; + use crate::{EncryptError, Identity, Recipient, identity::IdentityFile, scrypt, x25519}; #[cfg(feature = "async")] use futures::{ + Future, io::{AsyncRead, AsyncWrite}, pin_mut, task::Poll, - Future, }; #[cfg(feature = "async")] use futures_test::task::noop_context; @@ -390,7 +396,7 @@ mod tests { match f.as_mut().poll(&mut cx) { Poll::Ready(Ok(w)) => w, - Poll::Ready(Err(e)) => panic!("Unexpected error: {}", e), + Poll::Ready(Err(e)) => panic!("Unexpected error: {e}"), Poll::Pending => panic!("Unexpected Pending"), } }; @@ -401,13 +407,13 @@ mod tests { match w.as_mut().poll_write(&mut cx, tmp) { Poll::Ready(Ok(0)) => break, Poll::Ready(Ok(written)) => tmp = &tmp[written..], - Poll::Ready(Err(e)) => panic!("Unexpected error: {}", e), + Poll::Ready(Err(e)) => panic!("Unexpected error: {e}"), Poll::Pending => panic!("Unexpected Pending"), } } match w.as_mut().poll_close(&mut cx) { Poll::Ready(Ok(())) => (), - Poll::Ready(Err(e)) => panic!("Unexpected error: {}", e), + Poll::Ready(Err(e)) => panic!("Unexpected error: {e}"), Poll::Pending => panic!("Unexpected Pending"), } } @@ -418,7 +424,7 @@ mod tests { match f.as_mut().poll(&mut cx) { Poll::Ready(Ok(w)) => w, - Poll::Ready(Err(e)) => panic!("Unexpected error: {}", e), + Poll::Ready(Err(e)) => panic!("Unexpected error: {e}"), Poll::Pending => panic!("Unexpected Pending"), } }; @@ -433,7 +439,7 @@ mod tests { match r.as_mut().poll_read(&mut cx, &mut tmp) { Poll::Ready(Ok(0)) => break buf, Poll::Ready(Ok(read)) => buf.extend_from_slice(&tmp[..read]), - Poll::Ready(Err(e)) => panic!("Unexpected error: {}", e), + Poll::Ready(Err(e)) => panic!("Unexpected error: {e}"), Poll::Pending => panic!("Unexpected Pending"), } } diff --git a/age/src/simple.rs b/age/src/simple.rs index dbf3b1b6..95e4f7e4 100644 --- a/age/src/simple.rs +++ b/age/src/simple.rs @@ -2,8 +2,8 @@ use std::io::{Read, Write}; use std::iter; use crate::{ - error::{DecryptError, EncryptError}, Decryptor, Encryptor, Identity, Recipient, + error::{DecryptError, EncryptError}, }; #[cfg(feature = "armor")] diff --git a/age/src/ssh.rs b/age/src/ssh.rs index 052ebb05..2cf0aa71 100644 --- a/age/src/ssh.rs +++ b/age/src/ssh.rs @@ -11,7 +11,7 @@ use aes::{Aes128, Aes192, Aes256}; use aes_gcm::{AeadCore, Aes256Gcm}; use age_core::secrecy::{ExposeSecret, SecretString}; use bcrypt_pbkdf::bcrypt_pbkdf; -use cipher::Unsigned; +use cipher::typenum::Unsigned; use nom::Parser; use sha2::{Digest, Sha256}; @@ -27,7 +27,7 @@ pub(crate) const SSH_RSA_KEY_PREFIX: &str = "ssh-rsa"; pub(crate) const SSH_ED25519_KEY_PREFIX: &str = "ssh-ed25519"; pub(super) const SSH_RSA_RECIPIENT_TAG: &str = "ssh-rsa"; -const SSH_RSA_OAEP_LABEL: &str = "age-encryption.org/v1/ssh-rsa"; +const SSH_RSA_OAEP_LABEL: &[u8] = b"age-encryption.org/v1/ssh-rsa"; pub(super) const SSH_ED25519_RECIPIENT_TAG: &str = "ssh-ed25519"; const SSH_ED25519_RECIPIENT_KEY_LABEL: &[u8] = b"age-encryption.org/v1/ssh-ed25519"; @@ -140,31 +140,29 @@ impl EncryptedKey { } mod decrypt { - use aes::cipher::{block_padding::NoPadding, BlockDecryptMut, KeyIvInit, StreamCipher}; - use aes_gcm::aead::{AeadMut, KeyInit}; + use aes::cipher::{BlockModeDecrypt, KeyIvInit, StreamCipher, block_padding::NoPadding}; + use aes_gcm::aead::{Aead, KeyInit}; use age_core::secrecy::SecretString; - use cipher::generic_array::{ArrayLength, GenericArray}; + use cipher::array::{Array, ArraySize}; use super::OpenSshKdf; use crate::error::DecryptError; - fn derive_key_material, IvSize: ArrayLength>( + fn derive_key_material( kdf: &OpenSshKdf, passphrase: SecretString, - ) -> Option<(GenericArray, GenericArray)> { + ) -> Option<(Array, Array)> { kdf.derive(passphrase, KeySize::USIZE + IvSize::USIZE) .map(|kdf_output| { let (key, iv) = kdf_output.split_at(KeySize::USIZE); ( - GenericArray::from_exact_iter(key.iter().copied()) - .expect("key is correct length"), - GenericArray::from_exact_iter(iv.iter().copied()) - .expect("iv is correct length"), + Array::try_from(key).expect("key is correct length"), + Array::try_from(iv).expect("iv is correct length"), ) }) } - pub(super) fn aes_cbc( + pub(super) fn aes_cbc( kdf: &OpenSshKdf, passphrase: SecretString, ciphertext: &[u8], @@ -173,7 +171,7 @@ mod decrypt { .ok_or(DecryptError::KeyDecryptionFailed)?; let cipher = C::new(&key, &iv); cipher - .decrypt_padded_vec_mut::(ciphertext) + .decrypt_padded_vec::(ciphertext) .map_err(|_| DecryptError::KeyDecryptionFailed) } @@ -190,14 +188,14 @@ mod decrypt { Ok(plaintext) } - pub(super) fn aes_gcm( + pub(super) fn aes_gcm( kdf: &OpenSshKdf, passphrase: SecretString, ciphertext: &[u8], ) -> Result, DecryptError> { let (key, nonce) = derive_key_material::(kdf, passphrase) .ok_or(DecryptError::KeyDecryptionFailed)?; - let mut cipher = C::new(&key); + let cipher = C::new(&key); cipher .decrypt(&nonce, ciphertext) .map_err(|_| DecryptError::KeyDecryptionFailed) @@ -208,21 +206,20 @@ mod read_ssh { use age_core::secrecy::SecretBox; use curve25519_dalek::edwards::{CompressedEdwardsY, EdwardsPoint}; use nom::{ + IResult, Parser, branch::alt, bytes::complete::{tag, take}, combinator::{flat_map, map, map_opt, map_parser, map_res, recognize, rest, verify}, multi::{length_data, length_value}, number::complete::be_u32, sequence::{delimited, pair, preceded, terminated}, - IResult, Parser, }; - use num_traits::Zero; - use rsa::BigUint; + use rsa::BoxedUint; use super::{ - identity::{UnencryptedKey, UnsupportedKey}, EncryptedKey, Identity, OpenSshCipher, OpenSshKdf, SSH_ED25519_KEY_PREFIX, SSH_RSA_KEY_PREFIX, + identity::{UnencryptedKey, UnsupportedKey}, }; /// The SSH `string` [data type](https://tools.ietf.org/html/rfc4251#section-5). @@ -249,10 +246,10 @@ mod read_ssh { /// included. The value zero MUST be stored as a string with zero /// bytes of data. /// ``` - fn mpint(input: &[u8]) -> IResult<&[u8], BigUint> { + fn mpint(input: &[u8]) -> IResult<&[u8], BoxedUint> { map_opt(string, |bytes| { if bytes.is_empty() { - Some(BigUint::zero()) + Some(BoxedUint::zero()) } else { // Enforce canonicity let mut non_zero_bytes = bytes; @@ -268,7 +265,7 @@ mod read_ssh { return None; } - Some(BigUint::from_bytes_be(bytes)) + Some(BoxedUint::from_be_slice_vartime(bytes)) } }) .parse_complete(input) @@ -405,7 +402,8 @@ mod read_ssh { #[allow(clippy::needless_lifetimes)] pub(super) fn openssh_unencrypted_privkey<'a>( ssh_key: &[u8], - ) -> impl Parser<&'a [u8], Output = Identity, Error = nom::error::Error<&'a [u8]>> { + ) -> impl Parser<&'a [u8], Output = Identity, Error = nom::error::Error<&'a [u8]>> + use<'a> + { // We need to own, move, and clone these in order to keep them alive. let ssh_key_rsa = ssh_key.to_vec(); let ssh_key_ed25519 = ssh_key.to_vec(); @@ -414,11 +412,7 @@ mod read_ssh { // Repeated checkint, intended for verifying correct decryption. // Don't copy this idea into a new protocol; use an AEAD instead. map_opt(pair(take(4usize), take(4usize)), |(c1, c2)| { - if c1 == c2 { - Some(c1) - } else { - None - } + if c1 == c2 { Some(c1) } else { None } }), alt(( map(openssh_rsa_privkey, move |sk| { @@ -545,9 +539,8 @@ mod read_ssh { } mod write_ssh { - use cookie_factory::{bytes::be_u32, combinator::slice, sequence::tuple, SerializeFn}; - use num_traits::identities::Zero; - use rsa::{traits::PublicKeyParts, BigUint}; + use cookie_factory::{SerializeFn, bytes::be_u32, combinator::slice, sequence::tuple}; + use rsa::{BoxedUint, traits::PublicKeyParts}; use std::io::Write; use super::SSH_RSA_KEY_PREFIX; @@ -558,16 +551,16 @@ mod write_ssh { } /// Writes the SSH `mpint` data type. - fn mpint(value: &BigUint) -> impl SerializeFn { - let mut bytes = value.to_bytes_be(); + fn mpint(value: &BoxedUint) -> impl SerializeFn + use { + let mut bytes = value.to_be_bytes_trimmed_vartime().to_vec(); // From RFC 4251 section 5: // If the most significant bit would be set for a positive number, // the number MUST be preceded by a zero byte. Unnecessary leading // bytes with the value 0 or 255 MUST NOT be included. The value // zero MUST be stored as a string with zero bytes of data. - if value.is_zero() { - // BigUint represents zero as vec![0] + if value.is_zero().into() { + // BoxedUint represents zero as vec![0] bytes = vec![]; } else if bytes[0] >> 7 != 0 { bytes.insert(0, 0); @@ -584,7 +577,7 @@ mod write_ssh { /// mpint e /// mpint n /// ``` - pub(super) fn rsa_pubkey(pubkey: &rsa::RsaPublicKey) -> impl SerializeFn { + pub(super) fn rsa_pubkey(pubkey: &rsa::RsaPublicKey) -> impl SerializeFn + use { tuple(( string(SSH_RSA_KEY_PREFIX), mpint(pubkey.e()), diff --git a/age/src/ssh/identity.rs b/age/src/ssh/identity.rs index 0af6bfb7..ebda35c9 100644 --- a/age/src/ssh/identity.rs +++ b/age/src/ssh/identity.rs @@ -1,19 +1,19 @@ use age_core::{ - format::{FileKey, Stanza, FILE_KEY_BYTES}, + format::{FILE_KEY_BYTES, FileKey, Stanza}, primitives::{aead_decrypt, hkdf}, secrecy::{ExposeSecret, SecretBox}, }; use base64::prelude::BASE64_STANDARD; use nom::{ + IResult, Parser, branch::alt, bytes::streaming::{is_not, tag}, character::streaming::{line_ending, newline}, combinator::{map_opt, opt}, sequence::{pair, preceded, terminated}, - IResult, Parser, }; -use rand::rngs::OsRng; -use rsa::{pkcs1::DecodeRsaPrivateKey, Oaep}; +use rand::{rand_core::UnwrapErr, rngs::SysRng}; +use rsa::{Oaep, pkcs1::DecodeRsaPrivateKey}; use sha2::{Digest, Sha256, Sha512}; use std::fmt; use std::io; @@ -21,14 +21,15 @@ use x25519_dalek::{PublicKey as X25519PublicKey, StaticSecret}; use zeroize::Zeroize; use super::{ - read_ssh, ssh_tag, write_ssh, EncryptedKey, SSH_ED25519_RECIPIENT_KEY_LABEL, - SSH_ED25519_RECIPIENT_TAG, SSH_RSA_OAEP_LABEL, SSH_RSA_RECIPIENT_TAG, TAG_LEN_BYTES, + EncryptedKey, SSH_ED25519_RECIPIENT_KEY_LABEL, SSH_ED25519_RECIPIENT_TAG, SSH_RSA_OAEP_LABEL, + SSH_RSA_RECIPIENT_TAG, TAG_LEN_BYTES, read_ssh, ssh_tag, write_ssh, }; use crate::{ + Callbacks, error::DecryptError, fl, util::read::{base64_arg, wrapped_str_while_encoded}, - wfl, wlnfl, Callbacks, + wfl, wlnfl, }; /// An SSH private key for decrypting an age file. @@ -63,19 +64,19 @@ impl UnencryptedKey { pub(crate) fn unwrap_stanza(&self, stanza: &Stanza) -> Option> { match (self, stanza.tag.as_str()) { (UnencryptedKey::SshRsa(ssh_key, sk), SSH_RSA_RECIPIENT_TAG) => { - let tag = base64_arg::<_, TAG_LEN_BYTES, 6>(stanza.args.get(0)?)?; + let tag = base64_arg::<_, TAG_LEN_BYTES, 6>(stanza.args.first()?)?; if ssh_tag(ssh_key) != tag { return None; } - let mut rng = OsRng; + let mut rng = UnwrapErr(SysRng); // A failure to decrypt is fatal, because we assume that we won't // encounter 32-bit collisions on the key tag embedded in the header. Some( sk.decrypt_blinded( &mut rng, - Oaep::new_with_label::(SSH_RSA_OAEP_LABEL), + Oaep::::new_with_label(SSH_RSA_OAEP_LABEL), &stanza.body, ) .map_err(DecryptError::from) @@ -95,7 +96,7 @@ impl UnencryptedKey { ) } (UnencryptedKey::SshEd25519(ssh_key, privkey), SSH_ED25519_RECIPIENT_TAG) => { - let tag = base64_arg::<_, TAG_LEN_BYTES, 6>(stanza.args.get(0)?)?; + let tag = base64_arg::<_, TAG_LEN_BYTES, 6>(stanza.args.first()?)?; if ssh_tag(ssh_key) != tag { return None; } @@ -189,8 +190,7 @@ impl UnsupportedKey { )?, UnsupportedKey::EncryptedSsh(cipher) => { let new_issue = format!( - "https://github.com/str4d/rage/issues/new?title=Support%20OpenSSH%20key%20encryption%20cipher%20{}", - cipher, + "https://github.com/str4d/rage/issues/new?title=Support%20OpenSSH%20key%20encryption%20cipher%20{cipher}", ); wfl!( f, @@ -345,7 +345,7 @@ fn rsa_privkey(input: &str) -> IResult<&str, Identity> { .ok() .map(|privkey| { let mut ssh_key = vec![]; - cookie_factory::gen( + cookie_factory::r#gen( write_ssh::rsa_pubkey(&privkey.to_public_key()), &mut ssh_key, ) @@ -388,11 +388,11 @@ pub(crate) mod tests { use super::{Identity, UnsupportedKey}; use crate::{ + Callbacks, Identity as _, Recipient as _, ssh::recipient::{ - tests::{TEST_SSH_ED25519_PK, TEST_SSH_RSA_PK}, Recipient, + tests::{TEST_SSH_ED25519_PK, TEST_SSH_RSA_PK}, }, - Callbacks, Identity as _, Recipient as _, }; pub(crate) const TEST_SSH_RSA_SK: &str = "-----BEGIN RSA PRIVATE KEY----- @@ -548,14 +548,14 @@ AwQFBg== #[test] fn ssh_ed25519_round_trip() { for (kind, sk) in TEST_SSH_ED25519_SK_LIST { - eprintln!("Testing cipher '{}'", kind); + eprintln!("Testing cipher '{kind}'"); let buf = BufReader::new(sk.as_bytes()); let identity = Identity::from_buffer(buf, None).unwrap(); match (*kind, &identity) { ("none", Identity::Unencrypted(_)) => (), ("none", _) => panic!("key should be unencrypted"), (_, Identity::Encrypted(_)) => (), - (_, Identity::Unsupported(_)) => panic!("{} cipher is unsupported", kind), + (_, Identity::Unsupported(_)) => panic!("{kind} cipher is unsupported"), (_, _) => panic!("key should be encrypted"), }; let identity = identity.with_callbacks(TestPassphrase("passphrase")); diff --git a/age/src/ssh/recipient.rs b/age/src/ssh/recipient.rs index 1516f00f..39a3c24f 100644 --- a/age/src/ssh/recipient.rs +++ b/age/src/ssh/recipient.rs @@ -7,27 +7,28 @@ use age_core::{ secrecy::ExposeSecret, }; use base64::{ - prelude::{BASE64_STANDARD, BASE64_STANDARD_NO_PAD}, Engine, + prelude::{BASE64_STANDARD, BASE64_STANDARD_NO_PAD}, }; use curve25519_dalek::edwards::EdwardsPoint; use nom::{ + IResult, Parser, branch::alt, bytes::streaming::{is_not, tag}, combinator::map_opt, sequence::{pair, preceded, separated_pair}, - IResult, Parser, }; -use rand::rngs::OsRng; -use rsa::{traits::PublicKeyParts, Oaep}; +use rand::{rand_core::UnwrapErr, rngs::SysRng}; +use rsa::{Oaep, traits::PublicKeyParts}; use sha2::Sha256; use x25519_dalek::{EphemeralSecret, PublicKey as X25519PublicKey, StaticSecret}; use super::{ + EncryptedKey, SSH_ED25519_KEY_PREFIX, SSH_ED25519_RECIPIENT_KEY_LABEL, + SSH_ED25519_RECIPIENT_TAG, SSH_RSA_KEY_PREFIX, SSH_RSA_OAEP_LABEL, SSH_RSA_RECIPIENT_TAG, + UnsupportedKey, identity::{Identity, UnencryptedKey}, - read_ssh, ssh_tag, EncryptedKey, UnsupportedKey, SSH_ED25519_KEY_PREFIX, - SSH_ED25519_RECIPIENT_KEY_LABEL, SSH_ED25519_RECIPIENT_TAG, SSH_RSA_KEY_PREFIX, - SSH_RSA_OAEP_LABEL, SSH_RSA_RECIPIENT_TAG, + read_ssh, ssh_tag, }; use crate::{ error::EncryptError, @@ -120,22 +121,27 @@ impl TryFrom for Recipient { Identity::Unencrypted(UnencryptedKey::SshRsa(ssh_key, _)) | Identity::Unencrypted(UnencryptedKey::SshEd25519(ssh_key, _)) | Identity::Encrypted(EncryptedKey { ssh_key, .. }) => { - if let Ok((_, pk)) = read_ssh::rsa_pubkey(rsa::RsaPublicKey::MAX_SIZE)(&ssh_key) { - if let Some(pk) = pk { - Ok(Recipient::SshRsa(ssh_key, pk)) - } else { - Err(ParseRecipientKeyError::RsaModulusTooLarge) + match read_ssh::rsa_pubkey(rsa::RsaPublicKey::MAX_SIZE)(&ssh_key) { + Ok((_, pk)) => { + if let Some(pk) = pk { + Ok(Recipient::SshRsa(ssh_key, pk)) + } else { + Err(ParseRecipientKeyError::RsaModulusTooLarge) + } + } + _ => { + if let Ok((_, pk)) = read_ssh::ed25519_pubkey(&ssh_key) { + Ok(Recipient::SshEd25519(ssh_key, pk)) + } else if let Ok((_, key_type)) = read_ssh::string(&ssh_key) { + Err(ParseRecipientKeyError::Unsupported( + String::from_utf8_lossy(key_type).to_string(), + )) + } else { + Err(ParseRecipientKeyError::Invalid( + "Invalid SSH pubkey in SSH privkey", + )) + } } - } else if let Ok((_, pk)) = read_ssh::ed25519_pubkey(&ssh_key) { - Ok(Recipient::SshEd25519(ssh_key, pk)) - } else if let Ok((_, key_type)) = read_ssh::string(&ssh_key) { - Err(ParseRecipientKeyError::Unsupported( - String::from_utf8_lossy(key_type).to_string(), - )) - } else { - Err(ParseRecipientKeyError::Invalid( - "Invalid SSH pubkey in SSH privkey", - )) } } Identity::Unsupported( @@ -151,14 +157,14 @@ impl crate::Recipient for Recipient { &self, file_key: &FileKey, ) -> Result<(Vec, HashSet), EncryptError> { - let mut rng = OsRng; + let mut rng = UnwrapErr(SysRng); let stanzas = match self { Recipient::SshRsa(ssh_key, pk) => { let encrypted_file_key = pk .encrypt( &mut rng, - Oaep::new_with_label::(SSH_RSA_OAEP_LABEL), + Oaep::::new_with_label(SSH_RSA_OAEP_LABEL), file_key.expose_secret(), ) .expect("pubkey is valid and file key is not too long"); @@ -174,7 +180,7 @@ impl crate::Recipient for Recipient { Recipient::SshEd25519(ssh_key, ed25519_pk) => { let pk: X25519PublicKey = ed25519_pk.to_montgomery().to_bytes().into(); - let esk = EphemeralSecret::random_from_rng(rng); + let esk = EphemeralSecret::random_from_rng(&mut rng); let epk: X25519PublicKey = (&esk).into(); let tweak: StaticSecret = diff --git a/age/src/util.rs b/age/src/util.rs index 321ac040..7e0acdf2 100644 --- a/age/src/util.rs +++ b/age/src/util.rs @@ -129,15 +129,15 @@ mod tests { pub(crate) mod read { use std::str::FromStr; - use base64::{prelude::BASE64_STANDARD_NO_PAD, Engine}; - use nom::{character::complete::digit1, combinator::verify, ParseTo, Parser}; + use base64::{Engine, prelude::BASE64_STANDARD_NO_PAD}; + use nom::{ParseTo, Parser, character::complete::digit1, combinator::verify}; #[cfg(feature = "ssh")] use nom::{ + IResult, combinator::map_res, - error::{make_error, ErrorKind}, + error::{ErrorKind, make_error}, multi::separated_list1, - IResult, }; #[cfg(feature = "ssh")] @@ -149,7 +149,7 @@ pub(crate) mod read { use nom::bytes::streaming::take; // Unpadded encoded length - let encoded_count = ((4 * count) + 2) / 3; + let encoded_count = (4 * count).div_ceil(3); move |input: &str| { let (i, data) = take(encoded_count)(input)?; @@ -232,11 +232,11 @@ pub(crate) mod read { } pub(crate) mod write { - use base64::{prelude::BASE64_STANDARD_NO_PAD, Engine}; - use cookie_factory::{combinator::string, SerializeFn}; + use base64::{Engine, prelude::BASE64_STANDARD_NO_PAD}; + use cookie_factory::{SerializeFn, combinator::string}; use std::io::Write; - pub(crate) fn encoded_data(data: &[u8]) -> impl SerializeFn { + pub(crate) fn encoded_data(data: &[u8]) -> impl SerializeFn + use { let encoded = BASE64_STANDARD_NO_PAD.encode(data); string(encoded) } diff --git a/age/tests/test_vectors.rs b/age/tests/test_vectors.rs index 1924b10e..832f84b8 100644 --- a/age/tests/test_vectors.rs +++ b/age/tests/test_vectors.rs @@ -55,8 +55,8 @@ fn age_test_vectors() -> Result<(), Box> { let mut buf = vec![]; r.read_to_end(&mut buf)?; } - (Ok(_), true) => panic!("Test vector {} did not fail as expected", name), - (Err(e), false) => panic!("Test vector {} failed unexpectedly: {:?}", name, e), + (Ok(_), true) => panic!("Test vector {name} did not fail as expected"), + (Err(e), false) => panic!("Test vector {name} failed unexpectedly: {e:?}"), (Err(_), true) => (), } } diff --git a/age/tests/testkit.rs b/age/tests/testkit.rs index ca9956a8..0ebc7d98 100644 --- a/age/tests/testkit.rs +++ b/age/tests/testkit.rs @@ -8,10 +8,11 @@ use std::{ }; use age::{ + DecryptError, Decryptor, Identity, armor::{ArmoredReadError, ArmoredReader}, scrypt, secrecy::SecretString, - x25519, DecryptError, Decryptor, Identity, + x25519, }; use futures::AsyncReadExt; use sha2::{Digest, Sha256}; @@ -579,7 +580,7 @@ fn format_testkit_comment(testfile: &TestFile) -> String { testfile .comment .as_ref() - .map(|c| format!(" ({})", c)) + .map(|c| format!(" ({c})")) .unwrap_or_default() } @@ -603,9 +604,9 @@ fn get_testkit_identities(filename: &str, testfile: &TestFile) -> Vec SecretString { assert_eq!(testfile.identities.len(), 0); match testfile.passphrases.len() { - 0 => panic!("Test file is missing passphrase{}", comment), - 1 => testfile.passphrases.get(0).cloned().unwrap().into(), - n => panic!("Too many passphrases ({}){}", n, comment), + 0 => panic!("Test file is missing passphrase{comment}"), + 1 => testfile.passphrases.first().cloned().unwrap().into(), + n => panic!("Too many passphrases ({n}){comment}"), } } @@ -656,7 +657,7 @@ fn check_decrypt_success( if actual.is_ok() { format!("payload '{}'", String::from_utf8_lossy(payload)) } else { - format!("{:?}", actual) + format!("{actual:?}") }, comment, ), @@ -732,7 +733,7 @@ struct TestFile { impl TestFile { fn parse(filename: &str) -> Self { - let file = File::open(format!("./tests/testdata/testkit/{}", filename)).unwrap(); + let file = File::open(format!("./tests/testdata/testkit/{filename}")).unwrap(); let mut r = BufReader::new(file); let mut line = String::new(); @@ -763,7 +764,7 @@ impl TestFile { } "HMAC failure" => Expect::HmacFailure, "no match" => Expect::NoMatch, - e => panic!("Unknown testkit failure '{}'", e), + e => panic!("Unknown testkit failure '{e}'"), } }; @@ -790,7 +791,7 @@ impl TestFile { "passphrase" => passphrases.push(data.to_owned()), "armored" => armored = data == "yes", "comment" => comment = Some(data.to_owned()), - _ => panic!("Unknown testkit metadata '{}'", prefix), + _ => panic!("Unknown testkit metadata '{prefix}'"), } } diff --git a/fuzz-afl/Cargo.lock b/fuzz-afl/Cargo.lock index 027b040d..31aa25f8 100644 --- a/fuzz-afl/Cargo.lock +++ b/fuzz-afl/Cargo.lock @@ -1,47 +1,22 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "aead" -version = "0.5.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +checksum = "1973cfbc1a2daf9cf550e74e1f088c28e7f7d8c1e1418fb6c9dc5184b7e84c99" dependencies = [ "crypto-common", - "generic-array", -] - -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "aes-gcm" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", - "subtle", + "inout", ] [[package]] name = "afl" -version = "0.15.19" +version = "0.15.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2e868a49dcc54f7edcec970721ba68c4b5cc5f1e478393ae2dd2d475efd752e" +checksum = "927cd71710d1a232519e2393470e8f74a178ae59367efe58fa122884bba35ca4" dependencies = [ "home", "libc", @@ -73,7 +48,7 @@ dependencies = [ "rust-embed", "scrypt", "sha2", - "sha3", + "sha3 0.12.0", "subtle", "x25519-dalek", "zeroize", @@ -113,11 +88,17 @@ dependencies = [ "rustversion", ] +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + [[package]] name = "base16ct" -version = "0.2.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" [[package]] name = "base64" @@ -125,6 +106,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" + [[package]] name = "basic-toml" version = "0.1.10" @@ -148,11 +135,12 @@ checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "block-buffer" -version = "0.10.4" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ - "generic-array", + "hybrid-array", + "zeroize", ] [[package]] @@ -163,44 +151,50 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chacha20" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", "cipher", "cpufeatures", + "rand_core", ] [[package]] name = "chacha20poly1305" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +checksum = "9b89e1c441e926b9c82a8d023f6e1b7ae0adcfaa7d621814e4d60789bac751cb" dependencies = [ "aead", "chacha20", "cipher", "poly1305", - "zeroize", ] [[package]] name = "cipher" -version = "0.4.4" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" dependencies = [ + "block-buffer", "crypto-common", "inout", - "zeroize", ] +[[package]] +name = "cmov" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" + [[package]] name = "const-oid" -version = "0.9.6" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "cookie-factory" @@ -211,22 +205,31 @@ dependencies = [ "futures", ] +[[package]] +name = "cpubits" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" + [[package]] name = "cpufeatures" -version = "0.2.17" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" dependencies = [ "libc", ] [[package]] name = "crypto-bigint" -version = "0.5.5" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "1a52aa3fcda4e6302a9f48734f234d35d4721b96f8fe07d073f07ce9df4f0271" dependencies = [ - "generic-array", + "cpubits", + "ctutils", + "hybrid-array", + "num-traits", "rand_core", "subtle", "zeroize", @@ -234,29 +237,29 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.7" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ - "generic-array", + "hybrid-array", "rand_core", - "typenum", ] [[package]] -name = "ctr" -version = "0.9.2" +name = "ctutils" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" dependencies = [ - "cipher", + "cmov", + "subtle", ] [[package]] name = "curve25519-dalek" -version = "4.1.3" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23" dependencies = [ "cfg-if", "cpufeatures", @@ -280,9 +283,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.10" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +checksum = "a69dedd701da44b0536442edf09c81a64b0ab97a7a4a5e3d1971f00027cbc63d" dependencies = [ "const-oid", "zeroize", @@ -290,13 +293,15 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.7" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ "block-buffer", + "const-oid", "crypto-common", - "subtle", + "ctutils", + "zeroize", ] [[package]] @@ -312,17 +317,18 @@ dependencies = [ [[package]] name = "elliptic-curve" -version = "0.13.8" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "9d65aa39b3a5c1c9c1b745c9a019234bb7a21b77abcb4f4d266d706e2d577d65" dependencies = [ "base16ct", "crypto-bigint", + "crypto-common", "digest", "ff", - "generic-array", "group", "hkdf", + "hybrid-array", "rand_core", "sec1", "subtle", @@ -331,9 +337,9 @@ dependencies = [ [[package]] name = "ff" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f" dependencies = [ "rand_core", "subtle", @@ -341,9 +347,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.9" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" [[package]] name = "find-crate" @@ -487,43 +493,23 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - [[package]] name = "getrandom" -version = "0.2.17" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", - "wasi", -] - -[[package]] -name = "ghash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" -dependencies = [ - "opaque-debug", - "polyval", + "r-efi", + "rand_core", ] [[package]] name = "group" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4" dependencies = [ "ff", "rand_core", @@ -532,58 +518,65 @@ dependencies = [ [[package]] name = "hkdf" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" dependencies = [ "hmac", ] [[package]] name = "hmac" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ "digest", ] [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "hpke" -version = "0.12.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4917627a14198c3603282c5158b815ad5534795451d3c074b53cf3cee0960b11" +checksum = "dd5130e119706b4d8c2180da6126f7e60b6c38c2d340d539219f57051f0a7af7" dependencies = [ "aead", - "aes-gcm", "chacha20poly1305", - "digest", - "generic-array", "hkdf", - "hmac", + "hybrid-array", + "ml-kem", "p256", + "p384", + "p521", "rand_core", "sha2", + "sha3 0.12.0", + "shake", "subtle", + "turboshake", + "x-wing", "zeroize", ] [[package]] name = "hybrid-array" -version = "0.2.0-rc.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d306b679262030ad8813a82d4915fc04efff97776e4db7f8eb5137039d56400" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" dependencies = [ + "ctutils", + "subtle", "typenum", + "zeroize", ] [[package]] @@ -654,11 +647,11 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.4" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" dependencies = [ - "generic-array", + "hybrid-array", ] [[package]] @@ -688,21 +681,22 @@ checksum = "4b3f7cef34251886990511df1c61443aa928499d598a9473929ab5a90a527304" [[package]] name = "keccak" -version = "0.1.6" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" +checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" dependencies = [ + "cfg-if", "cpufeatures", ] [[package]] name = "kem" -version = "0.3.0-pre.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b8645470337db67b01a7f966decf7d0bafedbae74147d33e641c67a91df239f" +checksum = "01737161ba802849cfd486b5bd209d38ba4943494c249a8126005170c7621edd" dependencies = [ + "crypto-common", "rand_core", - "zeroize", ] [[package]] @@ -738,16 +732,47 @@ version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "ml-kem" -version = "0.2.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de49b3df74c35498c0232031bb7e85f9389f913e2796169c8ab47a53993a18f" +checksum = "5e15f3e5b957493873e396a66914e83e616b6afe335cdef7efe5c6e1216aba66" dependencies = [ "hybrid-array", "kem", + "module-lattice", + "pkcs8", "rand_core", - "sha3", + "sha3 0.11.0", + "zeroize", +] + +[[package]] +name = "module-lattice" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c61b87c9683ab7cb1c6871d261ad5479b6b10ceb52c4352aaca3b5d35a8febe" +dependencies = [ + "ctutils", + "hybrid-array", + "num-traits", + "zeroize", ] [[package]] @@ -760,18 +785,46 @@ dependencies = [ ] [[package]] -name = "opaque-debug" -version = "0.3.1" +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] [[package]] name = "p256" -version = "0.13.2" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c9239b2dbc807adbbe147e8cf72ea7450c3a0aabe62cb8e75ff4ec22e1f72a" +dependencies = [ + "elliptic-curve", + "primefield", + "primeorder", +] + +[[package]] +name = "p384" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d17b851e6b3e378ab4ecb07fa2ed23f4d15f075735f8fec9fa1e7bdce5f8301f" +dependencies = [ + "elliptic-curve", + "fiat-crypto", + "primefield", + "primeorder", +] + +[[package]] +name = "p521" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +checksum = "4ad64cc32c2dc466317c12ee5853e61f159f9eab1fe7efade0395dc2e7b43449" dependencies = [ + "base16ct", "elliptic-curve", + "primefield", "primeorder", ] @@ -800,9 +853,9 @@ dependencies = [ [[package]] name = "pbkdf2" -version = "0.12.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +checksum = "112d82ceb8c5bf524d9af484d4e4970c9fd5a0cc15ba14ad93dccd28873b0629" dependencies = [ "digest", "hmac", @@ -835,44 +888,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] -name = "poly1305" -version = "0.8.0" +name = "pkcs8" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" dependencies = [ - "cpufeatures", - "opaque-debug", - "universal-hash", + "der", + "spki", ] [[package]] -name = "polyval" -version = "0.6.2" +name = "poly1305" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +checksum = "6e2d0073b297041425c7c3df6eb4792d598a15323fe63346852b092eca02904c" dependencies = [ - "cfg-if", "cpufeatures", - "opaque-debug", "universal-hash", ] [[package]] -name = "ppv-lite86" -version = "0.2.21" +name = "primefield" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4" dependencies = [ - "zerocopy", + "crypto-bigint", + "crypto-common", + "ff", + "rand_core", + "subtle", + "zeroize", ] [[package]] name = "primeorder" -version = "0.13.6" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06" dependencies = [ "elliptic-curve", + "primefield", + "wnaf", ] [[package]] @@ -916,34 +973,27 @@ dependencies = [ ] [[package]] -name = "rand" -version = "0.8.7" +name = "r-efi" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "rand" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ - "ppv-lite86", + "chacha20", + "getrandom", "rand_core", ] [[package]] name = "rand_core" -version = "0.6.4" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" [[package]] name = "redox_syscall" @@ -956,9 +1006,9 @@ dependencies = [ [[package]] name = "rust-embed" -version = "8.9.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "947d7f3fad52b283d261c4c99a084937e2fe492248cb9a68a8435a861b8798ca" +checksum = "e9e7760e252aaba7b09f4be00e36476cf585bdb68a53552ac954cdf504ab4bc9" dependencies = [ "rust-embed-impl", "rust-embed-utils", @@ -967,10 +1017,11 @@ dependencies = [ [[package]] name = "rust-embed-impl" -version = "8.9.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fa2c8c9e8711e10f9c4fd2d64317ef13feaab820a4c51541f1a8c8e2e851ab2" +checksum = "3bcfc4d6f53af43755f7a723e4b6b8794fcce052a178dd8c6c1dadc5f5343097" dependencies = [ + "mime_guess", "proc-macro2", "quote", "rust-embed-utils", @@ -980,9 +1031,9 @@ dependencies = [ [[package]] name = "rust-embed-utils" -version = "8.9.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b161f275cb337fe0a44d924a5f4df0ed69c2c39519858f931ce61c779d3475" +checksum = "42ffa149f6aa81b58a5b3011d01a857c4ed12c7a732d2c51947a4c7c692185f0" dependencies = [ "sha2", "walkdir", @@ -990,9 +1041,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -1011,10 +1062,11 @@ checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "salsa20" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +checksum = "2f874456e72520ff1375a06c588eaf074b0f01f9e9e1aada45bd9b7954a6e42c" dependencies = [ + "cfg-if", "cipher", ] @@ -1035,10 +1087,11 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scrypt" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" +checksum = "d87af57419b594aa23fa95f09f0e06d80d84ba01c26148c43844cad6ff4485f0" dependencies = [ + "cfg-if", "pbkdf2", "salsa20", "sha2", @@ -1046,13 +1099,14 @@ dependencies = [ [[package]] name = "sec1" -version = "0.7.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" dependencies = [ "base16ct", + "ctutils", "der", - "generic-array", + "hybrid-array", "subtle", "zeroize", ] @@ -1110,9 +1164,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.9" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", "cpufeatures", @@ -1121,14 +1175,36 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.9" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874" +checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1" dependencies = [ "digest", "keccak", ] +[[package]] +name = "sha3" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9bad02c26382724b2d2692c6f179285e4b54eeecd7968f52a50059c3c11759" +dependencies = [ + "digest", + "keccak", + "sponge-cursor", +] + +[[package]] +name = "shake" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09057cb2149ad4cbd2da1e26b351f9a4c354219421229c69c3063e6f61947c4a" +dependencies = [ + "digest", + "keccak", + "sponge-cursor", +] + [[package]] name = "slab" version = "0.4.12" @@ -1141,6 +1217,25 @@ version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" +[[package]] +name = "spki" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sponge-cursor" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a0219bd7d979d58245a4f41f695e1ac9f8befdffadd7f61f1bae9e39abc6620" +dependencies = [ + "zeroize", +] + [[package]] name = "strsim" version = "0.11.1" @@ -1206,11 +1301,13 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", + "serde_core", + "zerovec", ] [[package]] @@ -1222,6 +1319,17 @@ dependencies = [ "serde", ] +[[package]] +name = "turboshake" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f892c6904b0bd5a9241eac848347abcbbbd2b9f3892bad23ac3e6efab8d6f06a" +dependencies = [ + "digest", + "keccak", + "sponge-cursor", +] + [[package]] name = "type-map" version = "0.5.1" @@ -1239,23 +1347,29 @@ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unic-langid" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dd9d1e72a73b25e07123a80776aae3e7b0ec461ef94f9151eed6ec88005a44" +checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" dependencies = [ "unic-langid-impl", ] [[package]] name = "unic-langid-impl" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5422c1f65949306c99240b81de9f3f15929f5a8bfe05bb44b034cc8bf593e5" +checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" dependencies = [ "serde", "tinystr", ] +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + [[package]] name = "unicode-ident" version = "1.0.24" @@ -1264,20 +1378,14 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "universal-hash" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96" dependencies = [ "crypto-common", - "subtle", + "ctutils", ] -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - [[package]] name = "walkdir" version = "2.5.0" @@ -1288,12 +1396,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - [[package]] name = "winapi-util" version = "0.1.11" @@ -1311,9 +1413,9 @@ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-sys" -version = "0.52.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ "windows-targets", ] @@ -1391,15 +1493,38 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "wnaf" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab12e7090f27e2ffd9322651492942d50c2926094af30601e1964337db39daf1" +dependencies = [ + "ff", + "group", + "hybrid-array", +] + +[[package]] +name = "x-wing" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b51507b887016c3925c84591108dadb8c099f776eb04fec6a60ae3519fee856f" +dependencies = [ + "kem", + "ml-kem", + "sha3 0.12.0", + "shake", + "x25519-dalek", +] + [[package]] name = "x25519-dalek" -version = "2.0.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +checksum = "e7e8131a03190127fb2263afc72b322ecadae46b6ff8c6f399ff5d02f5559af6" dependencies = [ "curve25519-dalek", "rand_core", - "serde", "zeroize", ] @@ -1410,41 +1535,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" [[package]] -name = "zerocopy" -version = "0.8.54" +name = "zerofrom" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" +checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", "syn", ] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "serde", + "zerofrom", +] diff --git a/fuzz-afl/Cargo.toml b/fuzz-afl/Cargo.toml index edda503f..f031dc3a 100644 --- a/fuzz-afl/Cargo.toml +++ b/fuzz-afl/Cargo.toml @@ -3,7 +3,7 @@ name = "age-fuzz-afl" version = "0.0.0" authors = ["Jack Grigg "] publish = false -edition = "2018" +edition = "2024" [dependencies] afl = "0.15" diff --git a/fuzz/Cargo.lock b/fuzz/Cargo.lock index bcbb3883..d30c74ef 100644 --- a/fuzz/Cargo.lock +++ b/fuzz/Cargo.lock @@ -1,40 +1,15 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "aead" -version = "0.5.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +checksum = "1973cfbc1a2daf9cf550e74e1f088c28e7f7d8c1e1418fb6c9dc5184b7e84c99" dependencies = [ "crypto-common", - "generic-array", -] - -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "aes-gcm" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", - "subtle", + "inout", ] [[package]] @@ -61,7 +36,7 @@ dependencies = [ "rust-embed", "scrypt", "sha2", - "sha3", + "sha3 0.12.0", "subtle", "x25519-dalek", "zeroize", @@ -109,11 +84,17 @@ dependencies = [ "rustversion", ] +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + [[package]] name = "base16ct" -version = "0.2.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" [[package]] name = "base64" @@ -121,6 +102,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" + [[package]] name = "basic-toml" version = "0.1.10" @@ -144,11 +131,12 @@ checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "block-buffer" -version = "0.10.4" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ - "generic-array", + "hybrid-array", + "zeroize", ] [[package]] @@ -169,44 +157,50 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chacha20" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", "cipher", "cpufeatures", + "rand_core", ] [[package]] name = "chacha20poly1305" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +checksum = "9b89e1c441e926b9c82a8d023f6e1b7ae0adcfaa7d621814e4d60789bac751cb" dependencies = [ "aead", "chacha20", "cipher", "poly1305", - "zeroize", ] [[package]] name = "cipher" -version = "0.4.4" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" dependencies = [ + "block-buffer", "crypto-common", "inout", - "zeroize", ] +[[package]] +name = "cmov" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" + [[package]] name = "const-oid" -version = "0.9.6" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "cookie-factory" @@ -217,22 +211,31 @@ dependencies = [ "futures", ] +[[package]] +name = "cpubits" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" + [[package]] name = "cpufeatures" -version = "0.2.17" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" dependencies = [ "libc", ] [[package]] name = "crypto-bigint" -version = "0.5.5" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "1a52aa3fcda4e6302a9f48734f234d35d4721b96f8fe07d073f07ce9df4f0271" dependencies = [ - "generic-array", + "cpubits", + "ctutils", + "hybrid-array", + "num-traits", "rand_core", "subtle", "zeroize", @@ -240,29 +243,29 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.7" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ - "generic-array", + "hybrid-array", "rand_core", - "typenum", ] [[package]] -name = "ctr" -version = "0.9.2" +name = "ctutils" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" dependencies = [ - "cipher", + "cmov", + "subtle", ] [[package]] name = "curve25519-dalek" -version = "4.1.3" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23" dependencies = [ "cfg-if", "cpufeatures", @@ -286,9 +289,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.10" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +checksum = "a69dedd701da44b0536442edf09c81a64b0ab97a7a4a5e3d1971f00027cbc63d" dependencies = [ "const-oid", "zeroize", @@ -296,13 +299,15 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.7" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ "block-buffer", + "const-oid", "crypto-common", - "subtle", + "ctutils", + "zeroize", ] [[package]] @@ -318,17 +323,18 @@ dependencies = [ [[package]] name = "elliptic-curve" -version = "0.13.8" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "9d65aa39b3a5c1c9c1b745c9a019234bb7a21b77abcb4f4d266d706e2d577d65" dependencies = [ "base16ct", "crypto-bigint", + "crypto-common", "digest", "ff", - "generic-array", "group", "hkdf", + "hybrid-array", "rand_core", "sec1", "subtle", @@ -337,9 +343,9 @@ dependencies = [ [[package]] name = "ff" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f" dependencies = [ "rand_core", "subtle", @@ -347,9 +353,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.9" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" [[package]] name = "find-crate" @@ -499,43 +505,23 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - [[package]] name = "getrandom" -version = "0.2.17" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", - "wasi", -] - -[[package]] -name = "ghash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" -dependencies = [ - "opaque-debug", - "polyval", + "r-efi", + "rand_core", ] [[package]] name = "group" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4" dependencies = [ "ff", "rand_core", @@ -544,49 +530,56 @@ dependencies = [ [[package]] name = "hkdf" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" dependencies = [ "hmac", ] [[package]] name = "hmac" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ "digest", ] [[package]] name = "hpke" -version = "0.12.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4917627a14198c3603282c5158b815ad5534795451d3c074b53cf3cee0960b11" +checksum = "dd5130e119706b4d8c2180da6126f7e60b6c38c2d340d539219f57051f0a7af7" dependencies = [ "aead", - "aes-gcm", "chacha20poly1305", - "digest", - "generic-array", "hkdf", - "hmac", + "hybrid-array", + "ml-kem", "p256", + "p384", + "p521", "rand_core", "sha2", + "sha3 0.12.0", + "shake", "subtle", + "turboshake", + "x-wing", "zeroize", ] [[package]] name = "hybrid-array" -version = "0.2.0-rc.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d306b679262030ad8813a82d4915fc04efff97776e4db7f8eb5137039d56400" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" dependencies = [ + "ctutils", + "subtle", "typenum", + "zeroize", ] [[package]] @@ -657,11 +650,11 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.4" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" dependencies = [ - "generic-array", + "hybrid-array", ] [[package]] @@ -691,21 +684,22 @@ checksum = "4b3f7cef34251886990511df1c61443aa928499d598a9473929ab5a90a527304" [[package]] name = "keccak" -version = "0.1.6" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" +checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" dependencies = [ + "cfg-if", "cpufeatures", ] [[package]] name = "kem" -version = "0.3.0-pre.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b8645470337db67b01a7f966decf7d0bafedbae74147d33e641c67a91df239f" +checksum = "01737161ba802849cfd486b5bd209d38ba4943494c249a8126005170c7621edd" dependencies = [ + "crypto-common", "rand_core", - "zeroize", ] [[package]] @@ -750,16 +744,47 @@ version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "ml-kem" -version = "0.2.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de49b3df74c35498c0232031bb7e85f9389f913e2796169c8ab47a53993a18f" +checksum = "5e15f3e5b957493873e396a66914e83e616b6afe335cdef7efe5c6e1216aba66" dependencies = [ "hybrid-array", "kem", + "module-lattice", + "pkcs8", "rand_core", - "sha3", + "sha3 0.11.0", + "zeroize", +] + +[[package]] +name = "module-lattice" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c61b87c9683ab7cb1c6871d261ad5479b6b10ceb52c4352aaca3b5d35a8febe" +dependencies = [ + "ctutils", + "hybrid-array", + "num-traits", + "zeroize", ] [[package]] @@ -772,18 +797,46 @@ dependencies = [ ] [[package]] -name = "opaque-debug" -version = "0.3.1" +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] [[package]] name = "p256" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +checksum = "d2c9239b2dbc807adbbe147e8cf72ea7450c3a0aabe62cb8e75ff4ec22e1f72a" dependencies = [ "elliptic-curve", + "primefield", + "primeorder", +] + +[[package]] +name = "p384" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d17b851e6b3e378ab4ecb07fa2ed23f4d15f075735f8fec9fa1e7bdce5f8301f" +dependencies = [ + "elliptic-curve", + "fiat-crypto", + "primefield", + "primeorder", +] + +[[package]] +name = "p521" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ad64cc32c2dc466317c12ee5853e61f159f9eab1fe7efade0395dc2e7b43449" +dependencies = [ + "base16ct", + "elliptic-curve", + "primefield", "primeorder", ] @@ -812,9 +865,9 @@ dependencies = [ [[package]] name = "pbkdf2" -version = "0.12.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +checksum = "112d82ceb8c5bf524d9af484d4e4970c9fd5a0cc15ba14ad93dccd28873b0629" dependencies = [ "digest", "hmac", @@ -847,44 +900,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] -name = "poly1305" -version = "0.8.0" +name = "pkcs8" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" dependencies = [ - "cpufeatures", - "opaque-debug", - "universal-hash", + "der", + "spki", ] [[package]] -name = "polyval" -version = "0.6.2" +name = "poly1305" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +checksum = "6e2d0073b297041425c7c3df6eb4792d598a15323fe63346852b092eca02904c" dependencies = [ - "cfg-if", "cpufeatures", - "opaque-debug", "universal-hash", ] [[package]] -name = "ppv-lite86" -version = "0.2.21" +name = "primefield" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4" dependencies = [ - "zerocopy", + "crypto-bigint", + "crypto-common", + "ff", + "rand_core", + "subtle", + "zeroize", ] [[package]] name = "primeorder" -version = "0.13.6" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06" dependencies = [ "elliptic-curve", + "primefield", + "wnaf", ] [[package]] @@ -928,34 +985,27 @@ dependencies = [ ] [[package]] -name = "rand" -version = "0.8.7" +name = "r-efi" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "rand" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ - "ppv-lite86", + "chacha20", + "getrandom", "rand_core", ] [[package]] name = "rand_core" -version = "0.6.4" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" [[package]] name = "redox_syscall" @@ -968,9 +1018,9 @@ dependencies = [ [[package]] name = "rust-embed" -version = "8.9.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "947d7f3fad52b283d261c4c99a084937e2fe492248cb9a68a8435a861b8798ca" +checksum = "e9e7760e252aaba7b09f4be00e36476cf585bdb68a53552ac954cdf504ab4bc9" dependencies = [ "rust-embed-impl", "rust-embed-utils", @@ -979,10 +1029,11 @@ dependencies = [ [[package]] name = "rust-embed-impl" -version = "8.9.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fa2c8c9e8711e10f9c4fd2d64317ef13feaab820a4c51541f1a8c8e2e851ab2" +checksum = "3bcfc4d6f53af43755f7a723e4b6b8794fcce052a178dd8c6c1dadc5f5343097" dependencies = [ + "mime_guess", "proc-macro2", "quote", "rust-embed-utils", @@ -992,9 +1043,9 @@ dependencies = [ [[package]] name = "rust-embed-utils" -version = "8.9.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b161f275cb337fe0a44d924a5f4df0ed69c2c39519858f931ce61c779d3475" +checksum = "42ffa149f6aa81b58a5b3011d01a857c4ed12c7a732d2c51947a4c7c692185f0" dependencies = [ "sha2", "walkdir", @@ -1002,9 +1053,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -1023,10 +1074,11 @@ checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "salsa20" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +checksum = "2f874456e72520ff1375a06c588eaf074b0f01f9e9e1aada45bd9b7954a6e42c" dependencies = [ + "cfg-if", "cipher", ] @@ -1047,10 +1099,11 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scrypt" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" +checksum = "d87af57419b594aa23fa95f09f0e06d80d84ba01c26148c43844cad6ff4485f0" dependencies = [ + "cfg-if", "pbkdf2", "salsa20", "sha2", @@ -1058,13 +1111,14 @@ dependencies = [ [[package]] name = "sec1" -version = "0.7.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" dependencies = [ "base16ct", + "ctutils", "der", - "generic-array", + "hybrid-array", "subtle", "zeroize", ] @@ -1122,9 +1176,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.9" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", "cpufeatures", @@ -1133,14 +1187,36 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.9" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874" +checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1" dependencies = [ "digest", "keccak", ] +[[package]] +name = "sha3" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9bad02c26382724b2d2692c6f179285e4b54eeecd7968f52a50059c3c11759" +dependencies = [ + "digest", + "keccak", + "sponge-cursor", +] + +[[package]] +name = "shake" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09057cb2149ad4cbd2da1e26b351f9a4c354219421229c69c3063e6f61947c4a" +dependencies = [ + "digest", + "keccak", + "sponge-cursor", +] + [[package]] name = "shlex" version = "2.0.1" @@ -1159,6 +1235,25 @@ version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" +[[package]] +name = "spki" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sponge-cursor" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a0219bd7d979d58245a4f41f695e1ac9f8befdffadd7f61f1bae9e39abc6620" +dependencies = [ + "zeroize", +] + [[package]] name = "strsim" version = "0.11.1" @@ -1224,11 +1319,13 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", + "serde_core", + "zerovec", ] [[package]] @@ -1240,6 +1337,17 @@ dependencies = [ "serde", ] +[[package]] +name = "turboshake" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f892c6904b0bd5a9241eac848347abcbbbd2b9f3892bad23ac3e6efab8d6f06a" +dependencies = [ + "digest", + "keccak", + "sponge-cursor", +] + [[package]] name = "type-map" version = "0.5.1" @@ -1257,23 +1365,29 @@ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unic-langid" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dd9d1e72a73b25e07123a80776aae3e7b0ec461ef94f9151eed6ec88005a44" +checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" dependencies = [ "unic-langid-impl", ] [[package]] name = "unic-langid-impl" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5422c1f65949306c99240b81de9f3f15929f5a8bfe05bb44b034cc8bf593e5" +checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" dependencies = [ "serde", "tinystr", ] +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + [[package]] name = "unicode-ident" version = "1.0.24" @@ -1282,20 +1396,14 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "universal-hash" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96" dependencies = [ "crypto-common", - "subtle", + "ctutils", ] -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - [[package]] name = "walkdir" version = "2.5.0" @@ -1306,12 +1414,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - [[package]] name = "winapi-util" version = "0.1.11" @@ -1337,53 +1439,72 @@ dependencies = [ ] [[package]] -name = "x25519-dalek" -version = "2.0.1" +name = "wnaf" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +checksum = "ab12e7090f27e2ffd9322651492942d50c2926094af30601e1964337db39daf1" dependencies = [ - "curve25519-dalek", - "rand_core", - "serde", - "zeroize", + "ff", + "group", + "hybrid-array", ] [[package]] -name = "zerocopy" -version = "0.8.54" +name = "x-wing" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" +checksum = "b51507b887016c3925c84591108dadb8c099f776eb04fec6a60ae3519fee856f" dependencies = [ - "zerocopy-derive", + "kem", + "ml-kem", + "sha3 0.12.0", + "shake", + "x25519-dalek", ] [[package]] -name = "zerocopy-derive" -version = "0.8.54" +name = "x25519-dalek" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" +checksum = "e7e8131a03190127fb2263afc72b322ecadae46b6ff8c6f399ff5d02f5559af6" dependencies = [ - "proc-macro2", - "quote", - "syn", + "curve25519-dalek", + "rand_core", + "zeroize", ] +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" + [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" +checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", "syn", ] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "serde", + "zerofrom", +] diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index c1709665..7982686d 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -4,7 +4,7 @@ name = "age-fuzz" version = "0.0.0" authors = ["Automatically generated"] publish = false -edition = "2018" +edition = "2024" [package.metadata] cargo-fuzz = true diff --git a/fuzz/fuzz_targets/age_stanza.rs b/fuzz/fuzz_targets/age_stanza.rs index 58579292..8d2a87b7 100644 --- a/fuzz/fuzz_targets/age_stanza.rs +++ b/fuzz/fuzz_targets/age_stanza.rs @@ -1,12 +1,12 @@ #![no_main] use age_core::format::{read, write}; -use cookie_factory::gen; +use cookie_factory::r#gen; use libfuzzer_sys::fuzz_target; fuzz_target!(|data: &[u8]| { if let Ok((leftover, stanza)) = read::age_stanza(data) { let mut buf = Vec::with_capacity(data.len()); - gen( + r#gen( write::age_stanza(stanza.tag, &stanza.args, &stanza.body()), &mut buf, ) diff --git a/rage/CHANGELOG.md b/rage/CHANGELOG.md index 89bdabf8..33b9945a 100644 --- a/rage/CHANGELOG.md +++ b/rage/CHANGELOG.md @@ -12,6 +12,10 @@ to 1.0.0 are beta releases. ## [Unreleased] +### Changed +- MSRV is now 1.85.0. +- MSRV for `rage-mount` (behind the `mount` feature flag) is now 1.88.0. + ## [0.12.0] - 2026-07-13 ### Added - Support for the new native age recipient types: diff --git a/rage/Cargo.toml b/rage/Cargo.toml index f15f9df2..c83cf441 100644 --- a/rage/Cargo.toml +++ b/rage/Cargo.toml @@ -118,13 +118,14 @@ pinentry.workspace = true rust-embed.workspace = true # rage-mount dependencies +# Currently MSRV 1.88 ctrlc = { version = "3.2", optional = true } -fuse_mt = { version = ">=0.6.0, <0.6.2", optional = true } # fuse_mt 0.6.2 requires fuser 0.16 -fuser = { version = "0.13", optional = true } # fuser 0.16 has MSRV 1.85 +fuse_mt = { version = ">=0.6.0, <0.6.4", optional = true } # fuse_mt 0.6.4 has MSRV 1.91 +fuser = { version = "0.16", optional = true } libc = { version = "0.2", optional = true } tar = { version = "0.4", optional = true } -time = { version = ">=0.3.7, <0.3.42", optional = true } # time 0.3.42 has MSRV 1.81 -zip = { version = "1", optional = true, default-features = false, features = [ +time = { version = "0.3", optional = true } +zip = { version = "8", optional = true, default-features = false, features = [ "aes-crypto", "deflate", "bzip2", diff --git a/rage/build.rs b/rage/build.rs index 494d9e3f..9594a963 100644 --- a/rage/build.rs +++ b/rage/build.rs @@ -5,12 +5,12 @@ use std::path::Path; use std::path::PathBuf; use clap::{Command, CommandFactory, ValueEnum}; -use clap_complete::{generate_to, Shell}; +use clap_complete::{Shell, generate_to}; use clap_mangen::{ - roff::{Inline, Roff}, Man, + roff::{Inline, Roff}, }; -use flate2::{write::GzEncoder, Compression}; +use flate2::{Compression, write::GzEncoder}; use i18n_embed::unic_langid::LanguageIdentifier; mod i18n { @@ -203,7 +203,7 @@ impl Cli { cmd: Command, custom: impl FnOnce(&Man, &mut GzEncoder) -> io::Result<()>, ) -> io::Result<()> { - let file = fs::File::create(out_dir.join(format!("{}.1.gz", name)))?; + let file = fs::File::create(out_dir.join(format!("{name}.1.gz")))?; let mut w = GzEncoder::new(file, Compression::best()); let man = Man::new(cmd); diff --git a/rage/src/bin/rage-keygen/cli.rs b/rage/src/bin/rage-keygen/cli.rs index f54eb317..5771d7c3 100644 --- a/rage/src/bin/rage-keygen/cli.rs +++ b/rage/src/bin/rage-keygen/cli.rs @@ -1,6 +1,6 @@ use clap::{ - builder::{Styles, ValueHint}, ArgAction, Parser, + builder::{Styles, ValueHint}, }; use crate::fl; diff --git a/rage/src/bin/rage-mount/cli.rs b/rage/src/bin/rage-mount/cli.rs index 66e4099a..b4913e8e 100644 --- a/rage/src/bin/rage-mount/cli.rs +++ b/rage/src/bin/rage-mount/cli.rs @@ -1,6 +1,6 @@ use clap::{ - builder::{Styles, ValueHint}, ArgAction, Parser, + builder::{Styles, ValueHint}, }; use crate::fl; diff --git a/rage/src/bin/rage-mount/main.rs b/rage/src/bin/rage-mount/main.rs index 4f581134..91f57458 100644 --- a/rage/src/bin/rage-mount/main.rs +++ b/rage/src/bin/rage-mount/main.rs @@ -2,7 +2,7 @@ use age::{ armor::ArmoredReader, - cli_common::{read_identities, read_secret, StdinGuard}, + cli_common::{StdinGuard, read_identities, read_secret}, scrypt, stream::StreamReader, }; @@ -92,13 +92,13 @@ impl fmt::Debug for Error { match self { Error::Age(e) => match e { age::DecryptError::ExcessiveWork { required, .. } => { - writeln!(f, "{}", e)?; + writeln!(f, "{e}")?; wfl!(f, "rec-dec-excessive-work", wf = required) } - _ => write!(f, "{}", e), + _ => write!(f, "{e}"), }, - Error::IdentityRead(e) => write!(f, "{}", e), - Error::Io(e) => write!(f, "{}", e), + Error::IdentityRead(e) => write!(f, "{e}"), + Error::Io(e) => write!(f, "{e}"), Error::MissingFilename => wfl!(f, "err-mnt-missing-filename"), Error::MissingIdentities => { wlnfl!(f, "err-dec-missing-identities")?; diff --git a/rage/src/bin/rage-mount/tar.rs b/rage/src/bin/rage-mount/tar.rs index 93c2e223..4337cafd 100644 --- a/rage/src/bin/rage-mount/tar.rs +++ b/rage/src/bin/rage-mount/tar.rs @@ -4,7 +4,7 @@ use std::collections::HashMap; use std::fs::File; use std::io::{self, BufReader, Read, Seek, SeekFrom}; use std::path::{Path, PathBuf}; -use std::sync::{mpsc, Mutex}; +use std::sync::{Mutex, mpsc}; use std::time::{Duration, SystemTime}; use tar::{Archive, Entry, EntryType}; @@ -25,8 +25,7 @@ fn tar_to_filetype(entry: &Entry) -> Option { } fn tar_to_fuse(entry: &Entry) -> io::Result { - let kind = tar_to_filetype(entry) - .ok_or_else(|| io::Error::new(io::ErrorKind::Other, "Unsupported filetype"))?; + let kind = tar_to_filetype(entry).ok_or_else(|| io::Error::other("Unsupported filetype"))?; let perm = (entry.header().mode()? & 0o7777) as u16; let mtime = SystemTime::UNIX_EPOCH + Duration::new(entry.header().mtime()?, 0); @@ -226,7 +225,7 @@ impl FilesystemMT for AgeTarFs { files: self.file_map.len() as u64, ffree: 0, bsize: 64 * 1024, - namelen: u32::max_value(), + namelen: u32::MAX, frsize: 64 * 1024, }) } diff --git a/rage/src/bin/rage-mount/zip.rs b/rage/src/bin/rage-mount/zip.rs index 2a294f7c..57db6805 100644 --- a/rage/src/bin/rage-mount/zip.rs +++ b/rage/src/bin/rage-mount/zip.rs @@ -4,15 +4,15 @@ use std::collections::HashMap; use std::fs::File; use std::io::{self, BufReader, Read}; use std::path::{Path, PathBuf}; -use std::sync::{mpsc, Mutex}; +use std::sync::{Mutex, mpsc}; use std::time::{Duration, SystemTime}; -use zip::{read::ZipFile, ZipArchive}; +use zip::{ExtraField, ZipArchive, read::ZipFile}; fn zip_path(path: &Path) -> &Path { path.strip_prefix("/").unwrap() } -fn zipfile_to_filetype(zf: &ZipFile) -> FileType { +fn zipfile_to_filetype(zf: &ZipFile) -> FileType { if zf.is_dir() { FileType::Directory } else { @@ -20,18 +20,43 @@ fn zipfile_to_filetype(zf: &ZipFile) -> FileType { } } -fn zipfile_to_fuse(zf: &ZipFile) -> FileAttr { +fn zipfile_to_fuse(zf: &ZipFile) -> FileAttr { let kind = zipfile_to_filetype(zf); let perm = (zf.unix_mode().unwrap_or(0) & 0o7777) as u16; - let mtime: SystemTime = zf.last_modified().to_time().unwrap().into(); + + let (atime, mtime, ctime, crtime) = if let Some(t) = + zf.extra_data_fields().find_map(|f| match f { + ExtraField::ExtendedTimestamp(t) => Some(t), + _ => None, + }) { + let to_st = |t: Option| { + SystemTime::UNIX_EPOCH + + t.map(|atime| Duration::from_secs(atime.into())) + .unwrap_or_default() + }; + + let atime = to_st(t.ac_time()); + let mtime = to_st(t.mod_time()); + let crtime = to_st(t.cr_time()); + + (atime, mtime, mtime, crtime) + } else { + let mtime = zf + .last_modified() + .and_then(|mtime| time::PrimitiveDateTime::try_from(mtime).ok()) + .map(|mtime| mtime.assume_utc().into()) + .unwrap_or(SystemTime::UNIX_EPOCH); + + (mtime, mtime, mtime, SystemTime::UNIX_EPOCH) + }; FileAttr { size: zf.size(), blocks: 1, - atime: mtime, + atime, mtime, - ctime: mtime, - crtime: SystemTime::UNIX_EPOCH, + ctime, + crtime, kind, perm, nlink: 1, @@ -96,16 +121,13 @@ impl AgeZipFs { stream: StreamReader>>, destroy_tx: mpsc::SyncSender<()>, ) -> io::Result { - let mut archive = - ZipArchive::new(stream).map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; + let mut archive = ZipArchive::new(stream).map_err(io::Error::other)?; // Build a directory listing for the archive let mut dir_map: HashMap> = HashMap::new(); dir_map.insert(PathBuf::new(), vec![]); // the root for i in 0..archive.len() { - let zf = archive - .by_index(i) - .map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; + let zf = archive.by_index(i).map_err(io::Error::other)?; if let Some(path) = zf.enclosed_name() { add_dir_to_map(&mut dir_map, &path, zipfile_to_filetype(&zf)); } @@ -192,7 +214,7 @@ impl FilesystemMT for AgeZipFs { files: inner.len() as u64, ffree: 0, bsize: 64 * 1024, - namelen: u32::max_value(), + namelen: u32::MAX, frsize: 64 * 1024, }) } diff --git a/rage/src/bin/rage/cli.rs b/rage/src/bin/rage/cli.rs index 1084ce5a..e1e54ece 100644 --- a/rage/src/bin/rage/cli.rs +++ b/rage/src/bin/rage/cli.rs @@ -1,8 +1,8 @@ use std::path::Path; use clap::{ - builder::{Styles, ValueHint}, ArgAction, Parser, + builder::{Styles, ValueHint}, }; use crate::fl; @@ -19,7 +19,7 @@ fn binary_name(suffix: Option<&str>) -> String { .extension() .map(|extension| format!(".{}", extension.to_string_lossy())) .unwrap_or_default(); - format!("{}{}{}", stem, suffix, extension) + format!("{stem}{suffix}{extension}") } else { path.file_name() .expect("is not directory") @@ -58,16 +58,11 @@ pub(crate) fn after_help_content(keygen_name: &str) -> String { fn after_help() -> String { let keygen_name = binary_name(Some("-keygen")); let binary_name = binary_name(None); - let example_a = format!("$ {} -o key.txt", keygen_name); + let example_a = format!("$ {keygen_name} -o key.txt"); let example_a_output = "age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p"; - let example_b = format!( - "$ tar cvz ~/data | {} -r {} > data.tar.gz.age", - binary_name, example_a_output, - ); - let example_c = format!( - "$ {} -d -i key.txt -o data.tar.gz data.tar.gz.age", - binary_name, - ); + let example_b = + format!("$ tar cvz ~/data | {binary_name} -r {example_a_output} > data.tar.gz.age",); + let example_c = format!("$ {binary_name} -d -i key.txt -o data.tar.gz data.tar.gz.age",); format!( "{}\n\n{}", diff --git a/rage/src/bin/rage/error.rs b/rage/src/bin/rage/error.rs index 29cd9275..ba27fc53 100644 --- a/rage/src/bin/rage/error.rs +++ b/rage/src/bin/rage/error.rs @@ -63,10 +63,10 @@ impl fmt::Display for EncryptError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { EncryptError::Age(e @ age::EncryptError::MissingRecipients) => { - writeln!(f, "{}", e)?; + writeln!(f, "{e}")?; wfl!(f, "rec-enc-missing-recipients") } - EncryptError::Age(e) => write!(f, "{}", e), + EncryptError::Age(e) => write!(f, "{e}"), EncryptError::BrokenPipe { is_stdout, source } => { if *is_stdout { wlnfl!(f, "err-enc-broken-stdout", err = source.to_string())?; @@ -75,8 +75,8 @@ impl fmt::Display for EncryptError { wfl!(f, "err-enc-broken-file", err = source.to_string()) } } - EncryptError::IdentityRead(e) => write!(f, "{}", e), - EncryptError::Io(e) => write!(f, "{}", e), + EncryptError::IdentityRead(e) => write!(f, "{e}"), + EncryptError::Io(e) => write!(f, "{e}"), EncryptError::MixedIdentityAndPassphrase => { wfl!(f, "err-enc-mixed-identity-passphrase") } @@ -157,17 +157,17 @@ impl fmt::Display for DecryptError { match self { DecryptError::Age(e) => match e { age::DecryptError::ExcessiveWork { required, .. } => { - writeln!(f, "{}", e)?; + writeln!(f, "{e}")?; wfl!(f, "rec-dec-excessive-work", wf = required) } - _ => write!(f, "{}", e), + _ => write!(f, "{e}"), }, DecryptError::ArmorFlag => { wlnfl!(f, "err-dec-armor-flag")?; wfl!(f, "rec-dec-armor-flag") } - DecryptError::IdentityRead(e) => write!(f, "{}", e), - DecryptError::Io(e) => write!(f, "{}", e), + DecryptError::IdentityRead(e) => write!(f, "{e}"), + DecryptError::Io(e) => write!(f, "{e}"), DecryptError::MissingIdentities { stdin_identity } => { wlnfl!(f, "err-dec-missing-identities")?; if *stdin_identity { @@ -228,8 +228,8 @@ impl From for Error { impl fmt::Debug for Error { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { - Error::Decryption(e) => writeln!(f, "{}", e)?, - Error::Encryption(e) => writeln!(f, "{}", e)?, + Error::Decryption(e) => writeln!(f, "{e}")?, + Error::Encryption(e) => writeln!(f, "{e}")?, Error::IdentityFlagAmbiguous => wlnfl!(f, "err-identity-ambiguous")?, Error::MixedEncryptAndDecrypt => wlnfl!(f, "err-mixed-encrypt-decrypt")?, Error::SameInputAndOutput(filename) => { diff --git a/rage/src/bin/rage/i18n.rs b/rage/src/bin/rage/i18n.rs index acd305a1..4c715603 100644 --- a/rage/src/bin/rage/i18n.rs +++ b/rage/src/bin/rage/i18n.rs @@ -1,5 +1,5 @@ use i18n_embed::{ - fluent::{fluent_language_loader, FluentLanguageLoader}, + fluent::{FluentLanguageLoader, fluent_language_loader}, unic_langid::LanguageIdentifier, }; use lazy_static::lazy_static; diff --git a/rage/src/bin/rage/main.rs b/rage/src/bin/rage/main.rs index b2cf6159..7ae90df1 100644 --- a/rage/src/bin/rage/main.rs +++ b/rage/src/bin/rage/main.rs @@ -1,14 +1,14 @@ #![forbid(unsafe_code)] use age::{ + Identity, armor::{ArmoredReader, ArmoredWriter, Format}, cli_common::{ - file_io, read_identities, read_or_generate_passphrase, read_recipients, read_secret, - Passphrase, StdinGuard, UiCallbacks, + Passphrase, StdinGuard, UiCallbacks, file_io, read_identities, read_or_generate_passphrase, + read_recipients, read_secret, }, plugin, scrypt, secrecy::ExposeSecret, - Identity, }; use clap::{CommandFactory, Parser}; use i18n_embed::DesktopLanguageRequester; @@ -162,10 +162,7 @@ fn encrypt(opts: AgeOptions) -> Result<(), error::EncryptError> { } Err(pinentry::Error::Gpg(e)) => { // Pretend it is an I/O error - return Err(error::EncryptError::Io(io::Error::new( - io::ErrorKind::Other, - format!("{}", e), - ))); + return Err(error::EncryptError::Io(io::Error::other(format!("{e}")))); } Err(pinentry::Error::Io(e)) => return Err(error::EncryptError::Io(e)), } @@ -338,10 +335,7 @@ fn decrypt(opts: AgeOptions) -> Result<(), error::DecryptError> { } Err(pinentry::Error::Gpg(e)) => { // Pretend it is an I/O error - Err(error::DecryptError::Io(io::Error::new( - io::ErrorKind::Other, - format!("{}", e), - ))) + Err(error::DecryptError::Io(io::Error::other(format!("{e}")))) } Err(pinentry::Error::Io(e)) => Err(error::DecryptError::Io(e)), } diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 7737e53e..e22c3445 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "1.74.0" +channel = "1.85.0" components = ["clippy", "rustfmt"] diff --git a/supply-chain/config.toml b/supply-chain/config.toml index f91c7c35..2a915428 100644 --- a/supply-chain/config.toml +++ b/supply-chain/config.toml @@ -41,22 +41,22 @@ audit-as-crates-io = false [policy.rage] audit-as-crates-io = false -[[exemptions.addr2line]] -version = "0.24.2" -criteria = "safe-to-run" - [[exemptions.aead]] -version = "0.5.1" +version = "0.6.1" criteria = "safe-to-deploy" [[exemptions.aes]] -version = "0.8.2" +version = "0.9.1" criteria = "safe-to-deploy" [[exemptions.aes-gcm]] -version = "0.10.3" +version = "0.11.0" criteria = "safe-to-deploy" +[[exemptions.ahash]] +version = "0.8.12" +criteria = "safe-to-run" + [[exemptions.aho-corasick]] version = "1.1.1" criteria = "safe-to-deploy" @@ -106,19 +106,19 @@ version = "1.0.17" criteria = "safe-to-run" [[exemptions.backtrace]] -version = "0.3.74" +version = "0.3.76" criteria = "safe-to-run" [[exemptions.base16ct]] -version = "0.2.0" +version = "1.0.0" criteria = "safe-to-deploy" [[exemptions.base64ct]] -version = "1.6.0" +version = "1.8.3" criteria = "safe-to-deploy" [[exemptions.bcrypt-pbkdf]] -version = "0.10.0" +version = "0.11.0" criteria = "safe-to-deploy" [[exemptions.bech32]] @@ -129,12 +129,16 @@ criteria = "safe-to-deploy" version = "2.13.0" criteria = "safe-to-deploy" +[[exemptions.block-buffer]] +version = "0.12.1" +criteria = "safe-to-deploy" + [[exemptions.block-padding]] -version = "0.3.3" +version = "0.4.2" criteria = "safe-to-deploy" [[exemptions.blowfish]] -version = "0.9.1" +version = "0.10.0" criteria = "safe-to-deploy" [[exemptions.bytemuck]] @@ -142,15 +146,11 @@ version = "1.25.1" criteria = "safe-to-run" [[exemptions.bzip2]] -version = "0.4.4" -criteria = "safe-to-deploy" - -[[exemptions.bzip2-sys]] -version = "0.1.13+1.0.8" +version = "0.6.1" criteria = "safe-to-deploy" [[exemptions.cbc]] -version = "0.1.2" +version = "0.2.1" criteria = "safe-to-deploy" [[exemptions.cc]] @@ -158,39 +158,47 @@ version = "1.2.67" criteria = "safe-to-deploy" [[exemptions.chacha20]] -version = "0.9.1" +version = "0.10.1" criteria = "safe-to-deploy" [[exemptions.chacha20poly1305]] -version = "0.10.1" +version = "0.11.0" criteria = "safe-to-deploy" [[exemptions.chrono]] version = "0.4.45" criteria = "safe-to-deploy" +[[exemptions.cipher]] +version = "0.5.2" +criteria = "safe-to-deploy" + [[exemptions.clap]] -version = "4.5.61" +version = "4.6.1" criteria = "safe-to-deploy" [[exemptions.clap_builder]] -version = "4.5.61" +version = "4.6.0" criteria = "safe-to-deploy" [[exemptions.clap_complete]] -version = "4.5.67" +version = "4.6.7" criteria = "safe-to-deploy" [[exemptions.clap_derive]] -version = "4.5.61" +version = "4.6.1" criteria = "safe-to-deploy" [[exemptions.clap_lex]] -version = "1.0.1" +version = "1.1.0" criteria = "safe-to-deploy" [[exemptions.clap_mangen]] -version = "0.2.32" +version = "0.2.33" +criteria = "safe-to-deploy" + +[[exemptions.cmov]] +version = "0.5.4" criteria = "safe-to-deploy" [[exemptions.colorchoice]] @@ -202,7 +210,11 @@ version = "0.16.4" criteria = "safe-to-deploy" [[exemptions.const-oid]] -version = "0.9.6" +version = "0.10.2" +criteria = "safe-to-deploy" + +[[exemptions.constant_time_eq]] +version = "0.4.2" criteria = "safe-to-deploy" [[exemptions.content_inspector]] @@ -217,6 +229,10 @@ criteria = "safe-to-deploy" version = "0.4.5" criteria = "safe-to-run" +[[exemptions.cpubits]] +version = "0.1.1" +criteria = "safe-to-deploy" + [[exemptions.cpufeatures]] version = "0.2.2" criteria = "safe-to-deploy" @@ -243,34 +259,50 @@ criteria = "safe-to-run" [[exemptions.crossbeam-utils]] version = "0.8.22" -criteria = "safe-to-deploy" +criteria = "safe-to-run" [[exemptions.crypto-bigint]] -version = "0.5.5" +version = "0.7.5" criteria = "safe-to-deploy" [[exemptions.crypto-common]] -version = "0.1.7" +version = "0.2.2" +criteria = "safe-to-deploy" + +[[exemptions.crypto-primes]] +version = "0.7.2" criteria = "safe-to-deploy" [[exemptions.ctr]] -version = "0.9.2" +version = "0.10.1" criteria = "safe-to-deploy" [[exemptions.ctrlc]] -version = "3.4.7" +version = "3.5.2" +criteria = "safe-to-deploy" + +[[exemptions.ctutils]] +version = "0.4.2" criteria = "safe-to-deploy" [[exemptions.curve25519-dalek]] -version = "4.1.0" +version = "5.0.0" criteria = "safe-to-deploy" [[exemptions.curve25519-dalek-derive]] version = "0.1.0" criteria = "safe-to-deploy" +[[exemptions.der]] +version = "0.8.1" +criteria = "safe-to-deploy" + [[exemptions.digest]] -version = "0.9.0" +version = "0.11.3" +criteria = "safe-to-deploy" + +[[exemptions.dispatch2]] +version = "0.3.1" criteria = "safe-to-deploy" [[exemptions.displaydoc]] @@ -278,7 +310,7 @@ version = "0.2.6" criteria = "safe-to-deploy" [[exemptions.elliptic-curve]] -version = "0.13.8" +version = "0.14.1" criteria = "safe-to-deploy" [[exemptions.encode_unicode]] @@ -294,11 +326,11 @@ version = "2.4.1" criteria = "safe-to-deploy" [[exemptions.ff]] -version = "0.13.1" +version = "0.14.0" criteria = "safe-to-deploy" [[exemptions.filetime]] -version = "0.2.27" +version = "0.2.29" criteria = "safe-to-deploy" [[exemptions.find-crate]] @@ -318,11 +350,11 @@ version = "1.1.9" criteria = "safe-to-deploy" [[exemptions.fuse_mt]] -version = "0.6.1" +version = "0.6.3" criteria = "safe-to-deploy" [[exemptions.fuser]] -version = "0.13.0" +version = "0.16.0" criteria = "safe-to-deploy" [[exemptions.futures]] @@ -365,26 +397,22 @@ criteria = "safe-to-run" version = "0.3.32" criteria = "safe-to-deploy" -[[exemptions.generic-array]] -version = "0.14.6" -criteria = "safe-to-deploy" - -[[exemptions.getrandom]] -version = "0.2.10" -criteria = "safe-to-deploy" - [[exemptions.getrandom]] -version = "0.2.17" +version = "0.4.3" criteria = "safe-to-deploy" [[exemptions.ghash]] -version = "0.5.1" +version = "0.6.0" criteria = "safe-to-deploy" [[exemptions.group]] -version = "0.12.0" +version = "0.14.0" criteria = "safe-to-deploy" +[[exemptions.half]] +version = "2.7.1" +criteria = "safe-to-run" + [[exemptions.hashbrown]] version = "0.16.1" criteria = "safe-to-deploy" @@ -394,11 +422,15 @@ version = "0.5.2" criteria = "safe-to-deploy" [[exemptions.hkdf]] -version = "0.12.4" +version = "0.13.0" +criteria = "safe-to-deploy" + +[[exemptions.hmac]] +version = "0.13.0" criteria = "safe-to-deploy" [[exemptions.hpke]] -version = "0.12.0" +version = "0.14.0" criteria = "safe-to-deploy" [[exemptions.humantime]] @@ -410,7 +442,7 @@ version = "1.1.1" criteria = "safe-to-run" [[exemptions.hybrid-array]] -version = "0.2.0-rc.9" +version = "0.4.13" criteria = "safe-to-deploy" [[exemptions.i18n-config]] @@ -433,6 +465,10 @@ criteria = "safe-to-deploy" version = "0.1.65" criteria = "safe-to-deploy" +[[exemptions.indexmap]] +version = "2.14.0" +criteria = "safe-to-deploy" + [[exemptions.inferno]] version = "0.11.17" criteria = "safe-to-run" @@ -454,27 +490,27 @@ version = "1.0.18" criteria = "safe-to-run" [[exemptions.jobserver]] -version = "0.1.34" +version = "0.1.35" criteria = "safe-to-deploy" [[exemptions.js-sys]] -version = "0.3.94" +version = "0.3.103" criteria = "safe-to-deploy" -[[exemptions.kem]] -version = "0.3.0-pre.0" +[[exemptions.keccak]] +version = "0.2.0" criteria = "safe-to-deploy" -[[exemptions.libc]] -version = "0.2.186" +[[exemptions.kem]] +version = "0.3.0" criteria = "safe-to-deploy" -[[exemptions.libm]] -version = "0.2.16" +[[exemptions.libbz2-rs-sys]] +version = "0.2.5" criteria = "safe-to-deploy" -[[exemptions.libredox]] -version = "0.1.18" +[[exemptions.libc]] +version = "0.2.186" criteria = "safe-to-deploy" [[exemptions.linux-raw-sys]] @@ -493,44 +529,48 @@ criteria = "safe-to-deploy" version = "2.8.3" criteria = "safe-to-deploy" +[[exemptions.mime]] +version = "0.3.16" +criteria = "safe-to-deploy" + +[[exemptions.mime_guess]] +version = "2.0.4" +criteria = "safe-to-deploy" + [[exemptions.ml-kem]] +version = "0.3.2" +criteria = "safe-to-deploy" + +[[exemptions.module-lattice]] version = "0.2.3" criteria = "safe-to-deploy" [[exemptions.nix]] -version = "0.26.1" +version = "0.15.0" criteria = "safe-to-deploy" -[[exemptions.nom]] -version = "8.0.0" +[[exemptions.nix]] +version = "0.31.3" criteria = "safe-to-deploy" -[[exemptions.num-bigint-dig]] -version = "0.8.6" +[[exemptions.nom]] +version = "8.0.0" criteria = "safe-to-deploy" [[exemptions.num-format]] version = "0.4.4" criteria = "safe-to-run" -[[exemptions.num-iter]] -version = "0.1.46" -criteria = "safe-to-deploy" - [[exemptions.num_cpus]] version = "1.16.0" criteria = "safe-to-deploy" -[[exemptions.num_enum]] -version = "0.7.6" -criteria = "safe-to-deploy" - -[[exemptions.num_enum_derive]] -version = "0.7.6" +[[exemptions.objc2]] +version = "0.6.4" criteria = "safe-to-deploy" [[exemptions.object]] -version = "0.36.7" +version = "0.36.0" criteria = "safe-to-run" [[exemptions.once_cell]] @@ -546,11 +586,19 @@ version = "1.2.2" criteria = "safe-to-run" [[exemptions.p256]] -version = "0.13.2" +version = "0.14.0" +criteria = "safe-to-deploy" + +[[exemptions.p384]] +version = "0.14.0" +criteria = "safe-to-deploy" + +[[exemptions.p521]] +version = "0.14.0" criteria = "safe-to-deploy" [[exemptions.page_size]] -version = "0.5.0" +version = "0.6.0" criteria = "safe-to-deploy" [[exemptions.parking_lot]] @@ -562,7 +610,11 @@ version = "0.9.12" criteria = "safe-to-deploy" [[exemptions.pbkdf2]] -version = "0.12.2" +version = "0.13.0" +criteria = "safe-to-deploy" + +[[exemptions.pem-rfc7468]] +version = "1.0.0" criteria = "safe-to-deploy" [[exemptions.pin-project]] @@ -578,21 +630,17 @@ version = "0.2.17" criteria = "safe-to-deploy" [[exemptions.pkcs1]] -version = "0.7.5" +version = "0.8.0-rc.4" criteria = "safe-to-deploy" [[exemptions.pkcs8]] -version = "0.10.2" +version = "0.11.0" criteria = "safe-to-deploy" [[exemptions.pkg-config]] version = "0.3.33" criteria = "safe-to-deploy" -[[exemptions.plain]] -version = "0.2.3" -criteria = "safe-to-deploy" - [[exemptions.plotters]] version = "0.3.7" criteria = "safe-to-run" @@ -606,31 +654,27 @@ version = "0.3.7" criteria = "safe-to-run" [[exemptions.poly1305]] -version = "0.8.0" +version = "0.9.1" criteria = "safe-to-deploy" [[exemptions.polyval]] -version = "0.6.2" +version = "0.7.2" criteria = "safe-to-deploy" [[exemptions.pprof]] version = "0.13.0" criteria = "safe-to-run" -[[exemptions.ppv-lite86]] -version = "0.2.21" +[[exemptions.primefield]] +version = "0.14.0" criteria = "safe-to-deploy" [[exemptions.primeorder]] -version = "0.13.6" -criteria = "safe-to-deploy" - -[[exemptions.proc-macro-crate]] -version = "3.3.0" +version = "0.14.0" criteria = "safe-to-deploy" [[exemptions.proptest]] -version = "1.6.0" +version = "1.11.0" criteria = "safe-to-run" [[exemptions.quick-xml]] @@ -643,18 +687,30 @@ criteria = "safe-to-deploy" [[exemptions.r-efi]] version = "5.3.0" +criteria = "safe-to-run" + +[[exemptions.r-efi]] +version = "6.0.0" criteria = "safe-to-deploy" [[exemptions.rand]] -version = "0.8.7" +version = "0.9.5" +criteria = "safe-to-run" + +[[exemptions.rand]] +version = "0.10.2" criteria = "safe-to-deploy" -[[exemptions.redox_syscall]] -version = "0.5.18" +[[exemptions.rand_core]] +version = "0.10.1" criteria = "safe-to-deploy" +[[exemptions.rayon]] +version = "1.12.0" +criteria = "safe-to-run" + [[exemptions.redox_syscall]] -version = "0.9.0" +version = "0.5.18" criteria = "safe-to-deploy" [[exemptions.regex]] @@ -674,15 +730,15 @@ version = "0.8.53" criteria = "safe-to-run" [[exemptions.roff]] -version = "1.0.0" +version = "1.1.1" criteria = "safe-to-deploy" [[exemptions.rpassword]] -version = "7.4.0" +version = "7.5.4" criteria = "safe-to-deploy" [[exemptions.rsa]] -version = "0.9.10" +version = "0.10.0-rc.18" criteria = "safe-to-deploy" [[exemptions.rtoolbox]] @@ -690,21 +746,25 @@ version = "0.0.5" criteria = "safe-to-deploy" [[exemptions.rust-embed]] -version = "8.9.0" +version = "8.12.0" criteria = "safe-to-deploy" [[exemptions.rust-embed-impl]] -version = "8.9.0" +version = "8.12.0" criteria = "safe-to-deploy" [[exemptions.rust-embed-utils]] -version = "8.9.0" +version = "8.12.0" criteria = "safe-to-deploy" [[exemptions.rustc-demangle]] version = "0.1.28" criteria = "safe-to-run" +[[exemptions.rustc-hash]] +version = "2.1.3" +criteria = "safe-to-deploy" + [[exemptions.rustix]] version = "1.1.4" criteria = "safe-to-deploy" @@ -718,7 +778,7 @@ version = "0.3.1" criteria = "safe-to-run" [[exemptions.salsa20]] -version = "0.10.2" +version = "0.11.0" criteria = "safe-to-deploy" [[exemptions.same-file]] @@ -730,11 +790,11 @@ version = "1.2.0" criteria = "safe-to-deploy" [[exemptions.scrypt]] -version = "0.11.0" +version = "0.12.0" criteria = "safe-to-deploy" [[exemptions.sec1]] -version = "0.7.3" +version = "0.8.1" criteria = "safe-to-deploy" [[exemptions.secrecy]] @@ -757,18 +817,38 @@ criteria = "safe-to-run" version = "0.6.8" criteria = "safe-to-run" +[[exemptions.serdect]] +version = "0.4.3" +criteria = "safe-to-deploy" + [[exemptions.sha1]] -version = "0.10.7" +version = "0.11.0" +criteria = "safe-to-deploy" + +[[exemptions.sha2]] +version = "0.11.0" +criteria = "safe-to-deploy" + +[[exemptions.sha3]] +version = "0.11.0" criteria = "safe-to-deploy" [[exemptions.sha3]] -version = "0.10.9" +version = "0.12.0" +criteria = "safe-to-deploy" + +[[exemptions.shake]] +version = "0.1.0" criteria = "safe-to-deploy" [[exemptions.shlex]] version = "2.0.1" criteria = "safe-to-deploy" +[[exemptions.signature]] +version = "3.0.0" +criteria = "safe-to-deploy" + [[exemptions.simd-adler32]] version = "0.3.9" criteria = "safe-to-deploy" @@ -785,12 +865,12 @@ criteria = "safe-to-run" version = "0.4.0" criteria = "safe-to-run" -[[exemptions.spin]] -version = "0.9.8" +[[exemptions.spki]] +version = "0.8.0" criteria = "safe-to-deploy" -[[exemptions.spki]] -version = "0.7.3" +[[exemptions.sponge-cursor]] +version = "0.1.0" criteria = "safe-to-deploy" [[exemptions.stable_deref_trait]] @@ -802,11 +882,11 @@ version = "0.1.1" criteria = "safe-to-run" [[exemptions.symbolic-common]] -version = "12.15.5" +version = "12.18.3" criteria = "safe-to-run" [[exemptions.symbolic-demangle]] -version = "12.15.5" +version = "12.18.3" criteria = "safe-to-run" [[exemptions.syn]] @@ -854,7 +934,11 @@ version = "1.8.1" criteria = "safe-to-deploy" [[exemptions.time]] -version = "0.1.44" +version = "0.3.53" +criteria = "safe-to-deploy" + +[[exemptions.tinystr]] +version = "0.8.3" criteria = "safe-to-deploy" [[exemptions.tokio]] @@ -873,22 +957,10 @@ criteria = "safe-to-deploy" version = "0.6.11" criteria = "safe-to-run" -[[exemptions.toml_datetime]] -version = "0.7.1" -criteria = "safe-to-deploy" - [[exemptions.toml_edit]] version = "0.22.27" criteria = "safe-to-run" -[[exemptions.toml_edit]] -version = "0.23.5" -criteria = "safe-to-deploy" - -[[exemptions.toml_parser]] -version = "1.0.2" -criteria = "safe-to-deploy" - [[exemptions.toml_write]] version = "0.1.2" criteria = "safe-to-run" @@ -897,25 +969,41 @@ criteria = "safe-to-run" version = "0.15.9" criteria = "safe-to-run" +[[exemptions.turboshake]] +version = "0.7.1" +criteria = "safe-to-deploy" + [[exemptions.type-map]] version = "0.4.0" criteria = "safe-to-deploy" +[[exemptions.typed-path]] +version = "0.12.3" +criteria = "safe-to-deploy" + [[exemptions.typenum]] version = "1.20.1" criteria = "safe-to-deploy" +[[exemptions.unicase]] +version = "2.9.0" +criteria = "safe-to-deploy" + [[exemptions.unicode-ident]] version = "1.0.24" criteria = "safe-to-deploy" +[[exemptions.universal-hash]] +version = "0.6.1" +criteria = "safe-to-deploy" + [[exemptions.uuid]] -version = "1.20.0" +version = "1.23.5" criteria = "safe-to-run" [[exemptions.version_check]] version = "0.9.5" -criteria = "safe-to-deploy" +criteria = "safe-to-run" [[exemptions.wait-timeout]] version = "0.2.0" @@ -925,32 +1013,24 @@ criteria = "safe-to-deploy" version = "2.5.0" criteria = "safe-to-deploy" -[[exemptions.wasi]] -version = "0.11.1+wasi-snapshot-preview1" -criteria = "safe-to-deploy" - -[[exemptions.wasi]] -version = "0.14.2+wasi-0.2.4" -criteria = "safe-to-deploy" - [[exemptions.wasm-bindgen]] -version = "0.2.117" +version = "0.2.126" criteria = "safe-to-deploy" [[exemptions.wasm-bindgen-macro]] -version = "0.2.117" +version = "0.2.126" criteria = "safe-to-deploy" [[exemptions.wasm-bindgen-macro-support]] -version = "0.2.117" +version = "0.2.126" criteria = "safe-to-deploy" [[exemptions.wasm-bindgen-shared]] -version = "0.2.117" +version = "0.2.126" criteria = "safe-to-deploy" [[exemptions.web-sys]] -version = "0.3.94" +version = "0.3.103" criteria = "safe-to-deploy" [[exemptions.which]] @@ -983,52 +1063,64 @@ criteria = "safe-to-deploy" [[exemptions.winnow]] version = "0.7.15" +criteria = "safe-to-run" + +[[exemptions.wnaf]] +version = "0.14.0" criteria = "safe-to-deploy" [[exemptions.wsl]] version = "0.1.0" criteria = "safe-to-deploy" -[[exemptions.x25519-dalek]] -version = "2.0.1" +[[exemptions.x-wing]] +version = "0.1.0" criteria = "safe-to-deploy" -[[exemptions.zerocopy]] -version = "0.6.6" +[[exemptions.x25519-dalek]] +version = "3.0.0" criteria = "safe-to-deploy" -[[exemptions.zerocopy]] -version = "0.7.35" -criteria = "safe-to-run" - [[exemptions.zerocopy]] version = "0.8.54" criteria = "safe-to-deploy" [[exemptions.zerocopy-derive]] -version = "0.6.6" +version = "0.8.54" criteria = "safe-to-deploy" -[[exemptions.zerocopy-derive]] -version = "0.7.35" -criteria = "safe-to-run" +[[exemptions.zerofrom]] +version = "0.1.8" +criteria = "safe-to-deploy" -[[exemptions.zerocopy-derive]] -version = "0.8.54" +[[exemptions.zeroize]] +version = "1.9.0" criteria = "safe-to-deploy" [[exemptions.zeroize_derive]] -version = "1.4.3" +version = "1.5.0" +criteria = "safe-to-deploy" + +[[exemptions.zerovec]] +version = "0.11.6" criteria = "safe-to-deploy" [[exemptions.zip]] -version = "1.1.4" +version = "8.6.0" +criteria = "safe-to-deploy" + +[[exemptions.zlib-rs]] +version = "0.6.6" criteria = "safe-to-deploy" [[exemptions.zmij]] version = "1.0.22" criteria = "safe-to-run" +[[exemptions.zopfli]] +version = "0.8.3" +criteria = "safe-to-deploy" + [[exemptions.zstd]] version = "0.13.3" criteria = "safe-to-deploy" diff --git a/supply-chain/imports.lock b/supply-chain/imports.lock index d113f589..579b645c 100644 --- a/supply-chain/imports.lock +++ b/supply-chain/imports.lock @@ -1,13 +1,6 @@ # cargo-vet imports lock -[[publisher.arbitrary]] -version = "1.4.2" -when = "2025-08-14" -user-id = 696 -user-login = "fitzgen" -user-name = "Nick Fitzgerald" - [[publisher.bumpalo]] version = "3.20.3" when = "2026-05-22" @@ -15,13 +8,6 @@ user-id = 696 user-login = "fitzgen" user-name = "Nick Fitzgerald" -[[publisher.derive_arbitrary]] -version = "1.4.2" -when = "2025-08-14" -user-id = 696 -user-login = "fitzgen" -user-name = "Nick Fitzgerald" - [[publisher.pinentry]] version = "0.8.0" when = "2026-01-03" @@ -29,6 +15,13 @@ user-id = 6289 user-login = "str4d" user-name = "Jack Grigg" +[[publisher.wasip2]] +version = "1.0.1+wasi-0.2.4" +when = "2025-09-15" +user-id = 1 +user-login = "alexcrichton" +user-name = "Alex Crichton" + [[publisher.windows-core]] version = "0.62.2" when = "2025-10-06" @@ -204,19 +197,10 @@ user-id = 64539 user-login = "kennykerr" user-name = "Kenny Kerr" -[[publisher.wit-bindgen-rt]] -version = "0.39.0" -when = "2025-02-05" -user-id = 73222 -user-login = "wasmtime-publish" - -[[audits.bytecode-alliance.wildcard-audits.arbitrary]] -who = "Nick Fitzgerald " -criteria = "safe-to-deploy" -user-id = 696 # Nick Fitzgerald (fitzgen) -start = "2020-01-14" -end = "2026-08-21" -notes = "I am an author of this crate." +[[publisher.wit-bindgen]] +version = "0.46.0" +when = "2025-09-10" +trusted-publisher = "github:bytecodealliance/wit-bindgen" [[audits.bytecode-alliance.wildcard-audits.bumpalo]] who = "Nick Fitzgerald " @@ -225,25 +209,58 @@ user-id = 696 # Nick Fitzgerald (fitzgen) start = "2019-03-16" end = "2026-08-21" -[[audits.bytecode-alliance.wildcard-audits.derive_arbitrary]] -who = "Nick Fitzgerald " +[[audits.bytecode-alliance.wildcard-audits.wasip2]] +who = "Alex Crichton " criteria = "safe-to-deploy" -user-id = 696 # Nick Fitzgerald (fitzgen) -start = "2020-01-14" +user-id = 1 # Alex Crichton (alexcrichton) +start = "2025-08-10" end = "2026-08-21" -notes = "I am an author of this crate" +notes = """ +This is a Bytecode Alliance authored crate. +""" -[[audits.bytecode-alliance.wildcard-audits.wit-bindgen-rt]] +[[audits.bytecode-alliance.wildcard-audits.wit-bindgen]] who = "Alex Crichton " criteria = "safe-to-deploy" -user-id = 73222 # wasmtime-publish -start = "2023-01-01" -end = "2026-06-03" -notes = """ -The Bytecode Alliance uses the `wasmtime-publish` crates.io account to automate -publication of this crate from CI. This repository requires all PRs are reviewed -by a Bytecode Alliance maintainer and it owned by the Bytecode Alliance itself. -""" +trusted-publisher = "github:bytecodealliance/wit-bindgen" +start = "2025-08-13" +end = "2027-01-08" +notes = "The Bytecode Alliance is the author of this crate" + +[[audits.bytecode-alliance.audits.addr2line]] +who = "Alex Crichton " +criteria = "safe-to-deploy" +delta = "0.19.0 -> 0.20.0" +notes = "This version brings support for split-dwarf which while it uses the filesystem is always done at the behest of the caller, so everything is as expected for this update." + +[[audits.bytecode-alliance.audits.addr2line]] +who = "Alex Crichton " +criteria = "safe-to-deploy" +delta = "0.20.0 -> 0.21.0" +notes = "This version bump updated some dependencies and optimized some internals. All looks good." + +[[audits.bytecode-alliance.audits.addr2line]] +who = "Alex Crichton " +criteria = "safe-to-deploy" +delta = "0.21.0 -> 0.22.0" + +[[audits.bytecode-alliance.audits.addr2line]] +who = "Alex Crichton " +criteria = "safe-to-deploy" +delta = "0.22.0 -> 0.24.1" +notes = "Lots of internal code refactorings and code movement. Nothing out of place however." + +[[audits.bytecode-alliance.audits.addr2line]] +who = "Alex Crichton " +criteria = "safe-to-deploy" +delta = "0.24.1 -> 0.25.0" +notes = "All minor changes, even a net reduction of `unsafe`." + +[[audits.bytecode-alliance.audits.addr2line]] +who = "Alex Crichton " +criteria = "safe-to-deploy" +delta = "0.25.0 -> 0.25.1" +notes = "Minor updates, looks like a minor bug fix, nothing awry." [[audits.bytecode-alliance.audits.adler2]] who = "Alex Crichton " @@ -257,29 +274,12 @@ criteria = "safe-to-deploy" version = "0.1.6" notes = "Contains no unsafe code, no IO, no build.rs." -[[audits.bytecode-alliance.audits.block-buffer]] -who = "Benjamin Bouvier " -criteria = "safe-to-deploy" -delta = "0.9.0 -> 0.10.2" - [[audits.bytecode-alliance.audits.cfg-if]] who = "Alex Crichton " criteria = "safe-to-deploy" version = "1.0.0" notes = "I am the author of this crate." -[[audits.bytecode-alliance.audits.cipher]] -who = "Andrew Brown " -criteria = "safe-to-deploy" -version = "0.4.4" -notes = "Most unsafe is hidden by `inout` dependency; only remaining unsafe is raw-splitting a slice and an unreachable hint. Older versions of this regularly reach ~150k daily downloads." - -[[audits.bytecode-alliance.audits.constant_time_eq]] -who = "Nick Fitzgerald " -criteria = "safe-to-deploy" -version = "0.2.4" -notes = "A few tiny blocks of `unsafe` but each of them is very obviously correct." - [[audits.bytecode-alliance.audits.cpufeatures]] who = "Alex Crichton " criteria = "safe-to-deploy" @@ -322,17 +322,6 @@ criteria = "safe-to-deploy" delta = "0.9.18 -> 0.9.20" notes = "Minor updates, nothing out of place." -[[audits.bytecode-alliance.audits.der]] -who = "Chris Fallin " -criteria = "safe-to-deploy" -version = "0.7.10" -notes = "No unsafe code aside from transmutes for transparent newtypes." - -[[audits.bytecode-alliance.audits.digest]] -who = "Benjamin Bouvier " -criteria = "safe-to-deploy" -delta = "0.9.0 -> 0.10.3" - [[audits.bytecode-alliance.audits.encode_unicode]] who = "Alex Crichton " criteria = "safe-to-deploy" @@ -382,6 +371,18 @@ criteria = "safe-to-deploy" delta = "0.31.0 -> 0.31.1" notes = "No fundmanetally new `unsafe` code, some small refactoring of existing code. Lots of changes in tests, not as many changes in the rest of the crate. More dwarf!" +[[audits.bytecode-alliance.audits.gimli]] +who = "Alex Crichton " +criteria = "safe-to-deploy" +delta = "0.31.1 -> 0.32.0" +notes = "Ever more DWARF to parse, but also no new `unsafe` and everything looks like gimli." + +[[audits.bytecode-alliance.audits.gimli]] +who = "Alex Crichton " +criteria = "safe-to-deploy" +delta = "0.32.0 -> 0.32.3" +notes = "Ever more dwarf, it never ends! (nothing out of the ordinary)" + [[audits.bytecode-alliance.audits.heck]] who = "Alex Crichton " criteria = "safe-to-deploy" @@ -435,12 +436,36 @@ criteria = "safe-to-deploy" delta = "0.8.5 -> 0.8.9" notes = "No new unsafe code, just refactorings." +[[audits.bytecode-alliance.audits.num-conv]] +who = "Alex Crichton " +criteria = "safe-to-deploy" +delta = "0.2.0 -> 0.2.1" +notes = "Minor update, nothing major" + [[audits.bytecode-alliance.audits.num-traits]] who = "Andrew Brown " criteria = "safe-to-deploy" version = "0.2.19" notes = "As advertised: a numeric library. The only `unsafe` is from some float-to-int conversions, which seems expected." +[[audits.bytecode-alliance.audits.object]] +who = "Alex Crichton " +criteria = "safe-to-deploy" +delta = "0.36.0 -> 0.36.5" +notes = "No new unsafe code, lots of new relocations/objects support, everything looks nominal" + +[[audits.bytecode-alliance.audits.object]] +who = "Alex Crichton " +criteria = "safe-to-deploy" +delta = "0.36.5 -> 0.37.1" +notes = "New object file formats, new formatting, new other minor changes, no new `unsafe`." + +[[audits.bytecode-alliance.audits.object]] +who = "Alex Crichton " +criteria = "safe-to-deploy" +delta = "0.37.1 -> 0.37.3" +notes = "Lots of new support for new object features, no new unsafe or anything suspicious." + [[audits.bytecode-alliance.audits.percent-encoding]] who = "Alex Crichton " criteria = "safe-to-deploy" @@ -451,6 +476,12 @@ a few `unsafe` blocks related to utf-8 validation which are locally verifiable as correct and otherwise this crate is good to go. """ +[[audits.bytecode-alliance.audits.rand_xorshift]] +who = "Alex Crichton " +criteria = "safe-to-deploy" +delta = "0.3.0 -> 0.4.0" +notes = "Minor updates for a new `rand` crate version, nothing awry." + [[audits.bytecode-alliance.audits.shlex]] who = "Alex Crichton " criteria = "safe-to-deploy" @@ -507,11 +538,6 @@ criteria = "safe-to-deploy" delta = "1.3.1 -> 1.6.1" notes = "Refactorings and minor updates, nothing out of place." -[[audits.bytecode-alliance.audits.zeroize]] -who = "Pat Hickey " -criteria = "safe-to-deploy" -delta = "1.8.1 -> 1.8.2" - [[audits.embark-studios.audits.cfg_aliases]] who = "Johan Andersson " criteria = "safe-to-deploy" @@ -544,33 +570,10 @@ notes = "Single unsafe usage that looks sound, no ambient capabilities" [audits.fermyon.audits] -[[audits.google.audits.aes]] -who = "David Koloski " -criteria = "safe-to-deploy" -delta = "0.8.2 -> 0.8.4" -notes = "Audited at https://fxrev.dev/987054" -aggregated-from = "https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/third_party/rust_crates/supply-chain/audits.toml?format=TEXT" - -[[audits.google.audits.ahash]] -who = "Nicholas Bishop " -criteria = "safe-to-run" -version = "0.8.3" -notes = """ -Note on does-not-implement-crypto: the aHash documentation explicitly -states it is not a cryptographically secure hash. -""" -aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT" - -[[audits.google.audits.ahash]] -who = "Nicholas Bishop " -criteria = "safe-to-run" -delta = "0.8.3 -> 0.8.5" -aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT" - -[[audits.google.audits.ahash]] -who = "Nicholas Bishop " +[[audits.google.audits.addr2line]] +who = "George Burgess IV " criteria = "safe-to-run" -delta = "0.8.5 -> 0.8.11" +version = "0.19.0" aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT" [[audits.google.audits.base64]] @@ -698,6 +701,31 @@ delta = "1.0.1 -> 1.0.2" notes = "No changes to any .rs files or Rust code." aggregated-from = "https://chromium.googlesource.com/chromium/src/+/main/third_party/rust/chromium_crates_io/supply-chain/audits.toml?format=TEXT" +[[audits.google.audits.getrandom]] +who = "Android Legacy" +criteria = "safe-to-run" +version = "0.2.2" +aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT" + +[[audits.google.audits.getrandom]] +who = "David Koloski " +criteria = "safe-to-deploy" +delta = "0.2.2 -> 0.2.12" +notes = "Audited at https://fxrev.dev/932979" +aggregated-from = "https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/third_party/rust_crates/supply-chain/audits.toml?format=TEXT" + +[[audits.google.audits.getrandom]] +who = "Adrian Taylor " +criteria = "safe-to-run" +delta = "0.2.12 -> 0.2.14" +aggregated-from = "https://chromium.googlesource.com/chromium/src/+/main/third_party/rust/chromium_crates_io/supply-chain/audits.toml?format=TEXT" + +[[audits.google.audits.getrandom]] +who = "danakj " +criteria = "safe-to-run" +delta = "0.2.14 -> 0.2.15" +aggregated-from = "https://chromium.googlesource.com/chromium/src/+/main/third_party/rust/chromium_crates_io/supply-chain/audits.toml?format=TEXT" + [[audits.google.audits.gimli]] who = "George Burgess IV " criteria = "safe-to-run" @@ -717,12 +745,6 @@ delta = "0.3.1 -> 0.3.2" notes = "Still no unsafe" aggregated-from = "https://chromium.googlesource.com/chromium/src/+/main/third_party/rust/chromium_crates_io/supply-chain/audits.toml?format=TEXT" -[[audits.google.audits.half]] -who = "Daniel Verkamp " -criteria = "safe-to-run" -version = "2.4.1" -aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT" - [[audits.google.audits.heck]] who = "Lukasz Anforowicz " criteria = "safe-to-deploy" @@ -736,31 +758,6 @@ https://source.chromium.org/chromium/chromium/src/+/28841c33c77833cc30b286f9ae24 """ aggregated-from = "https://chromium.googlesource.com/chromium/src/+/main/third_party/rust/chromium_crates_io/supply-chain/audits.toml?format=TEXT" -[[audits.google.audits.indexmap]] -who = "Lukasz Anforowicz " -criteria = "safe-to-deploy" -version = "2.7.1" -notes = ''' -Grepped for `-i cipher`, `-i crypto`, `'\bfs\b'`, `'\bnet\b'` -and there were no hits. - -There is a little bit of `unsafe` Rust code - the audit can be found at -https://chromium-review.googlesource.com/c/chromium/src/+/6187726/2 -''' -aggregated-from = "https://chromium.googlesource.com/chromium/src/+/main/third_party/rust/chromium_crates_io/supply-chain/audits.toml?format=TEXT" - -[[audits.google.audits.indexmap]] -who = "Lukasz Anforowicz " -criteria = "safe-to-deploy" -delta = "2.7.1 -> 2.8.0" -notes = """ -No `unsafe` introduced or affected in: -* `indexmap_with_default!` and `indexset_with_default!` macros -* New `PartialEq` implementations -* `fn slice_eq` in `util.rs` -""" -aggregated-from = "https://chromium.googlesource.com/chromium/src/+/main/third_party/rust/chromium_crates_io/supply-chain/audits.toml?format=TEXT" - [[audits.google.audits.itertools]] who = "ChromeOS" criteria = "safe-to-run" @@ -820,6 +817,36 @@ criteria = "safe-to-run" version = "0.3.0" aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT" +[[audits.google.audits.ppv-lite86]] +who = "danakj@chromium.org" +criteria = "safe-to-run" +version = "0.2.17" +notes = """ +Reviewed in https://crrev.com/c/5171063 + +Previously reviewed during security review and the audit is grandparented in. +""" +aggregated-from = "https://chromium.googlesource.com/chromium/src/+/main/third_party/rust/chromium_crates_io/supply-chain/audits.toml?format=TEXT" + +[[audits.google.audits.ppv-lite86]] +who = "danakj " +criteria = "safe-to-run" +delta = "0.2.17 -> 0.2.20" +notes = "Using zerocopy to reduce unsafe usage." +aggregated-from = "https://chromium.googlesource.com/chromium/src/+/main/third_party/rust/chromium_crates_io/supply-chain/audits.toml?format=TEXT" + +[[audits.google.audits.ppv-lite86]] +who = "Lukasz Anforowicz " +criteria = "safe-to-run" +delta = "0.2.20 -> 0.2.21" +notes = """ +The delta mostly corresponds to @joshlf's +https://github.com/cryptocorrosion/cryptocorrosion/pull/85 which started +using an undocumented API that `zerocopy` has provided specifically for +`ppv-lite86` in https://github.com/google/zerocopy/pull/2418. +""" +aggregated-from = "https://chromium.googlesource.com/chromium/src/+/main/third_party/rust/chromium_crates_io/supply-chain/audits.toml?format=TEXT" + [[audits.google.audits.proc-macro2]] who = "Lukasz Anforowicz " criteria = "safe-to-deploy" @@ -939,6 +966,18 @@ criteria = "safe-to-run" version = "1.2.3" aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT" +[[audits.google.audits.rand_chacha]] +who = "Android Legacy" +criteria = "safe-to-run" +version = "0.3.1" +aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT" + +[[audits.google.audits.rand_core]] +who = "Android Legacy" +criteria = "safe-to-run" +version = "0.6.4" +aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT" + [[audits.google.audits.serde]] who = "Lukasz Anforowicz " criteria = "safe-to-deploy" @@ -1197,11 +1236,6 @@ criteria = "safe-to-run" version = "1.2.1" aggregated-from = "https://chromium.googlesource.com/chromiumos/third_party/rust_crates/+/refs/heads/main/cargo-vet/audits.toml?format=TEXT" -[[audits.isrg.audits.block-buffer]] -who = "David Cook " -criteria = "safe-to-deploy" -version = "0.9.0" - [[audits.isrg.audits.cfg-if]] who = "David Cook " criteria = "safe-to-deploy" @@ -1232,16 +1266,16 @@ who = "David Cook " criteria = "safe-to-deploy" delta = "0.2.16 -> 0.2.17" +[[audits.isrg.audits.cpufeatures]] +who = "David Cook " +criteria = "safe-to-deploy" +delta = "0.2.17 -> 0.3.0" + [[audits.isrg.audits.criterion]] who = "Brandon Pitman " criteria = "safe-to-run" delta = "0.4.0 -> 0.5.1" -[[audits.isrg.audits.digest]] -who = "David Cook " -criteria = "safe-to-deploy" -delta = "0.10.6 -> 0.10.7" - [[audits.isrg.audits.fiat-crypto]] who = "David Cook " criteria = "safe-to-deploy" @@ -1322,50 +1356,21 @@ criteria = "safe-to-deploy" delta = "0.2.8 -> 0.2.9" notes = "No changes to Rust code between 0.2.8 and 0.2.9" -[[audits.isrg.audits.getrandom]] -who = "Brandon Pitman " -criteria = "safe-to-deploy" -delta = "0.2.10 -> 0.2.11" - -[[audits.isrg.audits.getrandom]] -who = "David Cook " -criteria = "safe-to-deploy" -delta = "0.2.11 -> 0.2.12" - -[[audits.isrg.audits.getrandom]] -who = "David Cook " +[[audits.isrg.audits.fiat-crypto]] +who = "Tim Geoghegan " criteria = "safe-to-deploy" -delta = "0.2.12 -> 0.2.14" +delta = "0.2.9 -> 0.3.0" +notes = "The diff is huge, but that's because it introduces a wrapper around indexing into arrays which is used in many many places. There is no new unsafe code and no change to build scripts I can detect." [[audits.isrg.audits.getrandom]] who = "David Cook " criteria = "safe-to-deploy" -delta = "0.2.14 -> 0.2.15" - -[[audits.isrg.audits.hmac]] -who = "David Cook " -criteria = "safe-to-deploy" -version = "0.12.1" - -[[audits.isrg.audits.keccak]] -who = "David Cook " -criteria = "safe-to-deploy" -version = "0.1.2" - -[[audits.isrg.audits.keccak]] -who = "Brandon Pitman " -criteria = "safe-to-deploy" -delta = "0.1.2 -> 0.1.3" - -[[audits.isrg.audits.keccak]] -who = "Brandon Pitman " -criteria = "safe-to-deploy" -delta = "0.1.3 -> 0.1.4" +delta = "0.3.3 -> 0.3.4" -[[audits.isrg.audits.num-integer]] +[[audits.isrg.audits.inout]] who = "David Cook " criteria = "safe-to-deploy" -delta = "0.1.45 -> 0.1.46" +delta = "0.1.4 -> 0.2.2" [[audits.isrg.audits.once_cell]] who = "David Cook " @@ -1409,50 +1414,30 @@ criteria = "safe-to-deploy" delta = "1.21.3 -> 1.21.4" notes = "The addition is a safe while loop around prior behavior. I don't see any way for that to become malicious." -[[audits.isrg.audits.opaque-debug]] -who = "David Cook " -criteria = "safe-to-deploy" -version = "0.3.0" - [[audits.isrg.audits.rand_chacha]] who = "David Cook " criteria = "safe-to-deploy" -version = "0.3.1" +delta = "0.3.1 -> 0.9.0" [[audits.isrg.audits.rand_core]] who = "David Cook " criteria = "safe-to-deploy" -version = "0.6.3" +delta = "0.6.4 -> 0.9.3" -[[audits.isrg.audits.rayon]] -who = "Brandon Pitman " -criteria = "safe-to-deploy" -delta = "1.6.1 -> 1.7.0" - -[[audits.isrg.audits.rayon]] -who = "David Cook " +[[audits.isrg.audits.rand_core]] +who = "J.C. Jones " criteria = "safe-to-deploy" -delta = "1.7.0 -> 1.8.0" +delta = "0.9.3 -> 0.9.5" -[[audits.isrg.audits.rayon]] +[[audits.isrg.audits.rayon-core]] who = "Ameer Ghani " criteria = "safe-to-deploy" -delta = "1.8.0 -> 1.8.1" - -[[audits.isrg.audits.rayon]] -who = "Brandon Pitman " -criteria = "safe-to-deploy" -delta = "1.8.1 -> 1.9.0" - -[[audits.isrg.audits.rayon]] -who = "Brandon Pitman " -criteria = "safe-to-deploy" -delta = "1.9.0 -> 1.10.0" +version = "1.12.1" [[audits.isrg.audits.rayon-core]] -who = "Ameer Ghani " +who = "David Cook " criteria = "safe-to-deploy" -version = "1.12.1" +delta = "1.12.1 -> 1.13.0" [[audits.isrg.audits.serde]] who = "J.C. Jones " @@ -1499,16 +1484,6 @@ who = "Tim Geoghegan " criteria = "safe-to-deploy" delta = "1.0.225 -> 1.0.226" -[[audits.isrg.audits.sha2]] -who = "David Cook " -criteria = "safe-to-deploy" -version = "0.10.2" - -[[audits.isrg.audits.sha2]] -who = "David Cook " -criteria = "safe-to-deploy" -delta = "0.10.8 -> 0.10.9" - [[audits.isrg.audits.subtle]] who = "David Cook " criteria = "safe-to-deploy" @@ -1534,16 +1509,6 @@ who = "J.C. Jones " criteria = "safe-to-deploy" delta = "2.0.17 -> 2.0.18" -[[audits.isrg.audits.universal-hash]] -who = "David Cook " -criteria = "safe-to-deploy" -version = "0.4.1" - -[[audits.isrg.audits.universal-hash]] -who = "David Cook " -criteria = "safe-to-deploy" -delta = "0.5.0 -> 0.5.1" - [[audits.mozilla.audits.android_system_properties]] who = "Nicolas Silva " criteria = "safe-to-deploy" @@ -1600,10 +1565,11 @@ criteria = "safe-to-deploy" delta = "0.7.0 -> 0.8.0" aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" -[[audits.mozilla.audits.block-buffer]] -who = "Mike Hommey " +[[audits.mozilla.audits.block2]] +who = "Andy Leiserson " criteria = "safe-to-deploy" -delta = "0.10.2 -> 0.10.3" +version = "0.6.2" +notes = "Contains unsafe code to interoperate with the ObjC runtime." aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" [[audits.mozilla.audits.cfg_aliases]] @@ -1650,10 +1616,11 @@ criteria = "safe-to-deploy" delta = "0.3.11 -> 0.4.0" aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml" -[[audits.mozilla.audits.digest]] -who = "Mike Hommey " +[[audits.mozilla.audits.deranged]] +who = "Lars Eggert " criteria = "safe-to-deploy" -delta = "0.10.3 -> 0.10.6" +delta = "0.4.0 -> 0.5.8" +notes = "New unsafe code is properly guarded" aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" [[audits.mozilla.audits.either]] @@ -1745,16 +1712,22 @@ reasonable. """ aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" -[[audits.mozilla.audits.hex]] -who = "Simon Friedberger " +[[audits.mozilla.audits.hashbrown]] +who = "Erich Gubler " criteria = "safe-to-deploy" -version = "0.4.3" +delta = "0.16.1 -> 0.17.0" aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" -[[audits.mozilla.audits.indexmap]] +[[audits.mozilla.audits.hashbrown]] who = "Erich Gubler " criteria = "safe-to-deploy" -delta = "2.8.0 -> 2.11.4" +delta = "0.17.0 -> 0.17.1" +aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" + +[[audits.mozilla.audits.hex]] +who = "Simon Friedberger " +criteria = "safe-to-deploy" +version = "0.4.3" aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" [[audits.mozilla.audits.intl-memoizer]] @@ -1781,12 +1754,6 @@ criteria = "safe-to-deploy" delta = "7.0.1 -> 7.0.2" aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" -[[audits.mozilla.audits.keccak]] -who = "Erich Gubler " -criteria = "safe-to-deploy" -delta = "0.1.4 -> 0.1.6" -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - [[audits.mozilla.audits.memmap2]] who = "Mike Hommey " criteria = "safe-to-deploy" @@ -1799,6 +1766,37 @@ criteria = "safe-to-deploy" delta = "0.9.3 -> 0.9.11" aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" +[[audits.mozilla.audits.mime]] +who = "Jan-Erik Rediger " +criteria = "safe-to-deploy" +delta = "0.3.16 -> 0.3.17" +aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml" + +[[audits.mozilla.audits.mime_guess]] +who = "Jan-Erik Rediger " +criteria = "safe-to-deploy" +delta = "2.0.4 -> 2.0.5" +aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml" + +[[audits.mozilla.audits.nix]] +who = "Gabriele Svelto " +criteria = "safe-to-deploy" +delta = "0.15.0 -> 0.25.0" +notes = "Plenty of new bindings but also several important bug fixes (including buffer overflows). New unsafe sections are restricted to wrappers and are no more dangerous than calling the C functions." +aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" + +[[audits.mozilla.audits.nix]] +who = "Mike Hommey " +criteria = "safe-to-deploy" +delta = "0.25.0 -> 0.25.1" +aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" + +[[audits.mozilla.audits.nix]] +who = "Mike Hommey " +criteria = "safe-to-deploy" +delta = "0.25.1 -> 0.26.2" +aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" + [[audits.mozilla.audits.nix]] who = "Gabriele Svelto " criteria = "safe-to-deploy" @@ -1821,13 +1819,6 @@ criteria = "safe-to-deploy" delta = "0.28.0 -> 0.29.0" aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" -[[audits.mozilla.audits.nix]] -who = "Gabriele Svelto " -criteria = "safe-to-deploy" -delta = "0.29.0 -> 0.30.1" -notes = "Some new wrappers, support for minor platforms and lots of work around type safety that reduces the unsafe surafce." -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - [[audits.mozilla.audits.num-conv]] who = "Alex Franchuk " criteria = "safe-to-deploy" @@ -1838,11 +1829,18 @@ side-effectful std functions, etc. """ aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" -[[audits.mozilla.audits.num-integer]] -who = "Josh Stone " +[[audits.mozilla.audits.num-conv]] +who = "Lars Eggert " +criteria = "safe-to-deploy" +delta = "0.1.0 -> 0.2.0" +notes = "Revision only removes code" +aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" + +[[audits.mozilla.audits.objc2-encode]] +who = "Andy Leiserson " criteria = "safe-to-deploy" -version = "0.1.45" -notes = "All code written or reviewed by Josh Stone." +version = "4.1.0" +notes = "Support library for objc2 with no unsafe code" aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" [[audits.mozilla.audits.once_cell]] @@ -1925,39 +1923,6 @@ criteria = "safe-to-deploy" delta = "1.0.94 -> 1.0.106" aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml" -[[audits.mozilla.audits.rand_core]] -who = "Mike Hommey " -criteria = "safe-to-deploy" -delta = "0.6.3 -> 0.6.4" -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - -[[audits.mozilla.audits.rayon]] -who = "Josh Stone " -criteria = "safe-to-deploy" -version = "1.5.3" -notes = "All code written or reviewed by Josh Stone or Niko Matsakis." -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - -[[audits.mozilla.audits.rayon]] -who = "Mike Hommey " -criteria = "safe-to-deploy" -delta = "1.5.3 -> 1.6.1" -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - -[[audits.mozilla.audits.rustc-hash]] -who = "Bobby Holley " -criteria = "safe-to-deploy" -version = "1.1.0" -notes = "Straightforward crate with no unsafe code, does what it says on the tin." -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - -[[audits.mozilla.audits.rustc-hash]] -who = "Ben Dean-Kawamura " -criteria = "safe-to-deploy" -delta = "1.1.0 -> 2.1.1" -notes = "Simple hashing crate, no unsafe code." -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - [[audits.mozilla.audits.serde]] who = "Erich Gubler " criteria = "safe-to-deploy" @@ -1976,23 +1941,6 @@ criteria = "safe-to-deploy" delta = "1.0.226 -> 1.0.227" aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" -[[audits.mozilla.audits.sha2]] -who = "Mike Hommey " -criteria = "safe-to-deploy" -delta = "0.10.2 -> 0.10.6" -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - -[[audits.mozilla.audits.sha2]] -who = "Jeff Muizelaar " -criteria = "safe-to-deploy" -delta = "0.10.6 -> 0.10.8" -notes = """ -The bulk of this is https://github.com/RustCrypto/hashes/pull/490 which adds aarch64 support along with another PR adding longson. -I didn't check the implementation thoroughly but there wasn't anything obviously nefarious. 0.10.8 has been out for more than a year -which suggests no one else has found anything either. -""" -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - [[audits.mozilla.audits.shlex]] who = "Max Inden " criteria = "safe-to-deploy" @@ -2073,41 +2021,6 @@ criteria = "safe-to-deploy" delta = "1.0.43 -> 1.0.69" aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml" -[[audits.mozilla.audits.time]] -who = "Mike Hommey " -criteria = "safe-to-deploy" -delta = "0.1.44 -> 0.1.45" -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - -[[audits.mozilla.audits.time]] -who = "Kershaw Chang " -criteria = "safe-to-deploy" -delta = "0.1.45 -> 0.3.17" -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - -[[audits.mozilla.audits.time]] -who = "Kershaw Chang " -criteria = "safe-to-deploy" -delta = "0.3.17 -> 0.3.23" -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - -[[audits.mozilla.audits.time]] -who = "Alex Franchuk " -criteria = "safe-to-deploy" -delta = "0.3.23 -> 0.3.36" -notes = """ -There's a bit of new unsafe code that is self-imposed because they now assert -that ordinals are non-zero. All unsafe code was checked to ensure that the -invariants claimed were true. -""" -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - -[[audits.mozilla.audits.time]] -who = "Lars Eggert " -criteria = "safe-to-deploy" -delta = "0.3.36 -> 0.3.41" -aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml" - [[audits.mozilla.audits.time-core]] who = "Kershaw Chang " criteria = "safe-to-deploy" @@ -2132,29 +2045,11 @@ criteria = "safe-to-deploy" delta = "0.1.2 -> 0.1.4" aggregated-from = "https://raw.githubusercontent.com/mozilla/glean/main/supply-chain/audits.toml" -[[audits.mozilla.audits.tinystr]] -who = "Makoto Kato " -criteria = "safe-to-deploy" -version = "0.7.0" -notes = "One of original auther was Zibi Braniecki who worked at Mozilla and maintained by ICU4X developers (Google and Mozilla). I've vetted the one instance of unsafe code." -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - -[[audits.mozilla.audits.tinystr]] -who = "Mike Hommey " -criteria = "safe-to-deploy" -delta = "0.7.0 -> 0.7.1" -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - -[[audits.mozilla.audits.tinystr]] -who = "Makoto Kato " -criteria = "safe-to-deploy" -delta = "0.7.1 -> 0.7.4" -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - -[[audits.mozilla.audits.tinystr]] -who = "Makoto Kato " +[[audits.mozilla.audits.time-core]] +who = "Lars Eggert " criteria = "safe-to-deploy" -delta = "0.7.4 -> 0.7.6" +delta = "0.1.4 -> 0.1.8" +notes = "No unsafe code" aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" [[audits.mozilla.audits.toml]] @@ -2193,6 +2088,12 @@ criteria = "safe-to-deploy" delta = "0.9.1 -> 0.9.5" aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" +[[audits.mozilla.audits.unic-langid]] +who = "Makoto Kato " +criteria = "safe-to-deploy" +delta = "0.9.5 -> 0.9.6" +aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" + [[audits.mozilla.audits.unic-langid-impl]] who = "Zibi Braniecki " criteria = "safe-to-deploy" @@ -2211,34 +2112,24 @@ criteria = "safe-to-deploy" delta = "0.9.1 -> 0.9.5" aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" +[[audits.mozilla.audits.unic-langid-impl]] +who = "Makoto Kato " +criteria = "safe-to-deploy" +delta = "0.9.5 -> 0.9.6" +aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" + [[audits.mozilla.audits.utf8parse]] who = "Nika Layzell " criteria = "safe-to-deploy" delta = "0.2.1 -> 0.2.2" aggregated-from = "https://raw.githubusercontent.com/mozilla/cargo-vet/main/supply-chain/audits.toml" -[[audits.mozilla.audits.zeroize]] -who = "Benjamin Beurdouche " -criteria = "safe-to-deploy" -version = "1.8.1" -notes = """ -This code DOES contain unsafe code required to internally call volatiles -for deleting data. This is expected and documented behavior. -""" -aggregated-from = "https://hg.mozilla.org/mozilla-central/raw-file/tip/supply-chain/audits.toml" - [[audits.zcash.audits.adler2]] who = "Jack Grigg " criteria = "safe-to-deploy" delta = "2.0.0 -> 2.0.1" aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" -[[audits.zcash.audits.aead]] -who = "Jack Grigg " -criteria = "safe-to-deploy" -delta = "0.5.1 -> 0.5.2" -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - [[audits.zcash.audits.aho-corasick]] who = "Jack Grigg " criteria = "safe-to-deploy" @@ -2263,39 +2154,6 @@ criteria = "safe-to-deploy" delta = "0.1.9 -> 0.1.10" aggregated-from = "https://raw.githubusercontent.com/zcash/wallet/main/supply-chain/audits.toml" -[[audits.zcash.audits.block-buffer]] -who = "Jack Grigg " -criteria = "safe-to-deploy" -delta = "0.10.3 -> 0.10.4" -notes = "Adds panics to prevent a block size of zero from causing unsoundness." -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - -[[audits.zcash.audits.constant_time_eq]] -who = "Jack Grigg " -criteria = "safe-to-deploy" -delta = "0.2.4 -> 0.2.5" -notes = "No code changes." -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - -[[audits.zcash.audits.constant_time_eq]] -who = "Jack Grigg " -criteria = "safe-to-deploy" -delta = "0.2.5 -> 0.2.6" -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - -[[audits.zcash.audits.constant_time_eq]] -who = "Jack Grigg " -criteria = "safe-to-deploy" -delta = "0.2.6 -> 0.3.0" -notes = "Replaces some `unsafe` code by bumping MSRV to 1.66 (to access `core::hint::black_box`)." -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - -[[audits.zcash.audits.constant_time_eq]] -who = "Jack Grigg " -criteria = "safe-to-deploy" -delta = "0.3.0 -> 0.3.1" -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - [[audits.zcash.audits.crunchy]] who = "Jack Grigg " criteria = "safe-to-deploy" @@ -2306,30 +2164,6 @@ was being selected by the target OS instead of the host OS. """ aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" -[[audits.zcash.audits.curve25519-dalek]] -who = "Jack Grigg " -criteria = "safe-to-deploy" -delta = "4.1.0 -> 4.1.1" -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - -[[audits.zcash.audits.curve25519-dalek]] -who = "Daira-Emma Hopwood " -criteria = "safe-to-deploy" -delta = "4.1.1 -> 4.1.2" -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - -[[audits.zcash.audits.curve25519-dalek]] -who = "Jack Grigg " -criteria = "safe-to-deploy" -delta = "4.1.2 -> 4.1.3" -notes = """ -- New unsafe is adding `core::ptr::read_volatile` calls for black box - optimization barriers. -- `build.rs` changes are to use `CARGO_CFG_TARGET_POINTER_WIDTH` instead of - `TARGET` and the `platforms` crate for deciding on the target pointer width. -""" -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - [[audits.zcash.audits.curve25519-dalek-derive]] who = "Jack Grigg " criteria = "safe-to-deploy" @@ -2383,30 +2217,12 @@ criteria = "safe-to-deploy" delta = "0.13.0 -> 0.13.1" aggregated-from = "https://raw.githubusercontent.com/zcash/wallet/main/supply-chain/audits.toml" -[[audits.zcash.audits.generic-array]] -who = "Sean Bowe " -criteria = "safe-to-deploy" -delta = "0.14.6 -> 0.14.7" -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - [[audits.zcash.audits.glob]] who = "Jack Grigg " criteria = "safe-to-deploy" delta = "0.3.2 -> 0.3.3" aggregated-from = "https://raw.githubusercontent.com/zcash/librustzcash/main/supply-chain/audits.toml" -[[audits.zcash.audits.group]] -who = "Kris Nuttycombe " -criteria = "safe-to-deploy" -delta = "0.12.0 -> 0.12.1" -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - -[[audits.zcash.audits.group]] -who = "Sean Bowe " -criteria = "safe-to-deploy" -delta = "0.12.1 -> 0.13.0" -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - [[audits.zcash.audits.inferno]] who = "Daira-Emma Hopwood " criteria = "safe-to-run" @@ -2438,13 +2254,6 @@ criteria = "safe-to-deploy" delta = "1.70.1 -> 1.70.2" aggregated-from = "https://raw.githubusercontent.com/zcash/wallet/main/supply-chain/audits.toml" -[[audits.zcash.audits.nix]] -who = "Jack Grigg " -criteria = "safe-to-deploy" -delta = "0.26.1 -> 0.26.2" -notes = "Fixes `SockaddrIn6` endianness bug." -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - [[audits.zcash.audits.nix]] who = "Jack Grigg " criteria = "safe-to-deploy" @@ -2459,18 +2268,19 @@ A new unsafe trait method `SockaddrLike::set_length` is added; it's impls look f """ aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" +[[audits.zcash.audits.num-conv]] +who = "Kris Nuttycombe " +criteria = "safe-to-deploy" +delta = "0.2.1 -> 0.2.2" +notes = "No changes to unsafe code, straightforward refactoring and cleanup." +aggregated-from = "https://raw.githubusercontent.com/zcash/librustzcash/main/supply-chain/audits.toml" + [[audits.zcash.audits.num_cpus]] who = "Jack Grigg " criteria = "safe-to-deploy" delta = "1.16.0 -> 1.17.0" aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" -[[audits.zcash.audits.opaque-debug]] -who = "Daira-Emma Hopwood " -criteria = "safe-to-deploy" -delta = "0.3.0 -> 0.3.1" -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - [[audits.zcash.audits.os_pipe]] who = "Jack Grigg " criteria = "safe-to-run" @@ -2482,12 +2292,6 @@ Apple targets that gate functions containing `unsafe` blocks, with a """ aggregated-from = "https://raw.githubusercontent.com/zcash/wallet/main/supply-chain/audits.toml" -[[audits.zcash.audits.proc-macro-crate]] -who = "Jack Grigg " -criteria = "safe-to-deploy" -delta = "3.3.0 -> 3.4.0" -aggregated-from = "https://raw.githubusercontent.com/zcash/wallet/main/supply-chain/audits.toml" - [[audits.zcash.audits.rand_xorshift]] who = "Sean Bowe " criteria = "safe-to-deploy" @@ -2542,28 +2346,12 @@ criteria = "safe-to-deploy" delta = "0.6.8 -> 0.6.9" aggregated-from = "https://raw.githubusercontent.com/zcash/wallet/main/supply-chain/audits.toml" -[[audits.zcash.audits.signature]] -who = "Daira Emma Hopwood " -criteria = "safe-to-deploy" -version = "2.1.0" -notes = """ -This crate uses `#![forbid(unsafe_code)]`, has no build script, and only provides traits with some trivial default implementations. -I did not review whether implementing these APIs would present any undocumented cryptographic hazards. -""" -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - -[[audits.zcash.audits.signature]] -who = "Jack Grigg " -criteria = "safe-to-deploy" -delta = "2.1.0 -> 2.2.0" -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" - -[[audits.zcash.audits.universal-hash]] -who = "Daira Hopwood " +[[audits.zcash.audits.time-core]] +who = "Kris Nuttycombe " criteria = "safe-to-deploy" -delta = "0.4.1 -> 0.5.0" -notes = "I checked correctness of to_blocks which uses unsafe code in a safe function." -aggregated-from = "https://raw.githubusercontent.com/zcash/zcash/master/qa/supply-chain/audits.toml" +delta = "0.1.8 -> 0.1.9" +notes = "No unsafe code; macro additions are straightforward refactoring changes." +aggregated-from = "https://raw.githubusercontent.com/zcash/librustzcash/main/supply-chain/audits.toml" [[audits.zcash.audits.wait-timeout]] who = "Jack Grigg "