diff --git a/.github/scripts/cargo.sh b/.github/scripts/cargo.sh index bb0f88de..de60c090 100644 --- a/.github/scripts/cargo.sh +++ b/.github/scripts/cargo.sh @@ -2,17 +2,17 @@ set -ex -cargo fmt --check +cargo fmt --check || exit 1 -cargo clippy --no-deps --all-targets -- -D warnings +cargo install --locked cargo-deny && cargo deny check || exit 1 -cargo install --locked cargo-deny && cargo deny check +cargo clippy --no-deps --all-targets -- -D warnings || exit 1 +cargo clippy --no-deps --all-targets --no-default-features --features curve25519,mlkem-768 -- -D warnings || exit 1 +cargo clippy --no-deps --all-targets --no-default-features --features p-256,mlkem-512 -- -D warnings || exit 1 +cargo clippy --no-deps --all-targets --no-default-features --features p-256,mlkem-768 -- -D warnings || exit 1 -cargo clippy --no-deps --all-targets --no-default-features --features curve25519,mlkem-768 -- -D warnings -cargo clippy --no-deps --all-targets --no-default-features --features p-256,mlkem-512 -- -D warnings -cargo clippy --no-deps --all-targets --no-default-features --features p-256,mlkem-768 -- -D warnings - -cargo test -cargo test --no-default-features --features curve25519,mlkem-768 -cargo test --no-default-features --features p-256,mlkem-512 -cargo test --no-default-features --features p-256,mlkem-768 +cargo test --all-targets --features test-utils || exit 1 +cargo test --all-targets --no-default-features --all-features || exit 1 +cargo test --all-targets --no-default-features --features test-utils,curve25519,mlkem-768 || exit 1 +cargo test --all-targets --no-default-features --features test-utils,p-256,mlkem-512 || exit 1 +cargo test --all-targets --no-default-features --features test-utils,p-256,mlkem-768 || exit 1 diff --git a/Cargo.lock b/Cargo.lock index 68575071..58822c67 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -40,9 +40,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -55,15 +55,15 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstyle" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "base64ct" @@ -73,9 +73,9 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block-buffer" @@ -88,9 +88,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.19.1" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "cast" @@ -100,9 +100,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.56" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" +checksum = "f360145194ee8e21db5ee7f3fcd4fe52210864c75c985dae33218202c8bbe040" dependencies = [ "find-msvc-tools", "shlex", @@ -110,9 +110,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "ciborium" @@ -153,18 +153,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.58" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63be97961acde393029492ce0be7a1af7e323e6bae9511ebfac33751be5e6806" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.58" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f13174bda5dfd69d7e947827e5af4b0f2f94a4a3ee92912fba07a66150f21e2" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstyle", "clap_lex", @@ -172,9 +172,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.0.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "const-oid" @@ -329,7 +329,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -378,9 +378,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "equivalent" @@ -396,9 +396,9 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" [[package]] name = "foreign-types" @@ -415,6 +415,30 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -461,9 +485,9 @@ dependencies = [ [[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 = "hybrid-array" @@ -476,9 +500,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.13.0" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", "hashbrown", @@ -504,25 +528,26 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.85" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" dependencies = [ - "once_cell", + "cfg-if", + "futures-util", "wasm-bindgen", ] [[package]] name = "keccak" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" dependencies = [ "cpufeatures", ] @@ -539,27 +564,27 @@ dependencies = [ [[package]] name = "leb128" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" +checksum = "c83bff1d572d6b9aeef67ddfc8448e4a3737909cb28e81f97c791b9018703e52" [[package]] name = "libc" -version = "0.2.182" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "ml-kem" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcaee19a45f916d98f24a551cc9a2cdae705a040e66f3cbc4f3a282ea6a2e982" +checksum = "8de49b3df74c35498c0232031bb7e85f9389f913e2796169c8ab47a53993a18f" dependencies = [ "hybrid-array", "kem", @@ -579,9 +604,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "oorandom" @@ -597,15 +622,14 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.75" +version = "0.10.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" +checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45" dependencies = [ "bitflags", "cfg-if", "foreign-types", "libc", - "once_cell", "openssl-macros", "openssl-sys", ] @@ -618,14 +642,14 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "openssl-sys" -version = "0.9.111" +version = "0.9.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" +checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695" dependencies = [ "cc", "libc", @@ -633,6 +657,12 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + [[package]] name = "pkcs8" version = "0.10.2" @@ -645,9 +675,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "polyval" @@ -672,18 +702,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.44" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -709,9 +739,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -721,9 +751,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -732,9 +762,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.9" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "rustc_version" @@ -747,9 +777,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "same-file" @@ -762,15 +792,15 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -778,29 +808,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.6", ] [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "indexmap", "itoa", @@ -823,9 +853,9 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874" dependencies = [ "digest", "keccak", @@ -833,9 +863,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signature" @@ -846,6 +876,12 @@ dependencies = [ "rand_core", ] +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + [[package]] name = "spki" version = "0.7.3" @@ -864,9 +900,20 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.115" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e614ed320ac28113fa64972c4262d5dbc89deacdfd00c34a3e4cea073243c12" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -894,15 +941,15 @@ dependencies = [ [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "537dd038a89878be9b64dd4bd1b260315c1bb94f4d784956b81e27a088d9a09e" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "universal-hash" @@ -944,9 +991,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasm-bindgen" -version = "0.2.108" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" +checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" dependencies = [ "cfg-if", "once_cell", @@ -957,9 +1004,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.108" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" +checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -967,22 +1014,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.108" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" +checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.108" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" +checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" dependencies = [ "unicode-ident", ] @@ -1013,46 +1060,46 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.39" +version = "0.8.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" +checksum = "6df92bf3d9227be3d53173901ddbffac2babc27ae50f397776ffd6dc33f800cb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.39" +version = "0.8.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" +checksum = "ac4f328cf2f05d084e496c3e9c3f33ed0a183656a16e1fcec4d464d8373aec82" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[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", + "syn 2.0.119", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/Cargo.toml b/Cargo.toml index f26a9011..072414a7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,13 +41,14 @@ required-features = ["test-utils"] default = ["mlkem-512", "curve25519"] mlkem-512 = [] mlkem-768 = [] -p-256 = [] -curve25519 = [] +p-256 = ["cosmian_openssl_provider"] +curve25519 = ["cosmian_rust_curve25519_provider"] test-utils = [] +generic-kem = ["p-256", "curve25519", "mlkem-512", "mlkem-768"] [dependencies] -cosmian_openssl_provider = { version = "1.0.0" } -cosmian_rust_curve25519_provider = { version = "1.0.0" } +cosmian_openssl_provider = { version = "1.0.0", optional = true } +cosmian_rust_curve25519_provider = { version = "1.0.0" , optional = true } cosmian_crypto_core = { version = "11.0", default-features = false, features = [ "aes", "ser", diff --git a/benches/benches.rs b/benches/benches.rs index 1b949bb0..d20c674b 100644 --- a/benches/benches.rs +++ b/benches/benches.rs @@ -1,6 +1,19 @@ -use cosmian_cover_crypt::{api::Covercrypt, cc_keygen, traits::KemAc, AccessPolicy}; +use cosmian_cover_crypt::{ + api::Covercrypt, traits::KemAc, AccessPolicy, Error, MasterPublicKey, MasterSecretKey, + QualifiedAttribute, +}; use criterion::{criterion_group, criterion_main, BatchSize, Criterion}; +fn cc_keygen(cc: &Covercrypt, complete: bool) -> Result<(MasterSecretKey, MasterPublicKey), Error> { + let (mut msk, _) = cosmian_cover_crypt::test_utils::cc_keygen(cc, complete)?; + // Remove the `SEC::MED` attribute to keep using the same access policy as + // before. + msk.access_structure + .del_attribute(&QualifiedAttribute::new("SEC", "MED"))?; + let mpk = cc.update_msk(&mut msk)?; + Ok((msk, mpk)) +} + const C_ENC_APS: [(&str, usize); 5] = [ ("SEC::LOW && (DPT::MKG) ", 1), ("SEC::LOW && (DPT::MKG || DPT::FIN) ", 2), diff --git a/examples/decrypt.rs b/examples/decrypt.rs index ee3056f4..012e6404 100644 --- a/examples/decrypt.rs +++ b/examples/decrypt.rs @@ -31,7 +31,12 @@ fn main() { }; for _ in 0..1_000_000 { - PkeAc::<{ Aes256Gcm::KEY_LENGTH }, Aes256Gcm>::decrypt(&cc, &usk, &ctx) - .expect("cannot decrypt hybrid header"); + PkeAc::< + { Aes256Gcm::KEY_LENGTH }, + { Aes256Gcm::NONCE_LENGTH }, + { Aes256Gcm::MAC_LENGTH }, + Aes256Gcm, + >::decrypt(&cc, &usk, &ctx) + .expect("cannot decrypt hybrid header"); } } diff --git a/examples/encrypt.rs b/examples/encrypt.rs index 3e43112a..68e1b21c 100644 --- a/examples/encrypt.rs +++ b/examples/encrypt.rs @@ -4,8 +4,8 @@ use std::{ }; use cosmian_cover_crypt::{ - api::Covercrypt, cc_keygen, traits::PkeAc, AccessPolicy, MasterPublicKey, MasterSecretKey, - UserSecretKey, XEnc, + api::Covercrypt, test_utils::cc_keygen, traits::PkeAc, AccessPolicy, MasterPublicKey, + MasterSecretKey, UserSecretKey, XEnc, }; use cosmian_crypto_core::{ bytes_ser_de::{Deserializer, Serializable, Serializer}, @@ -18,11 +18,22 @@ fn generate_new(cc: &Covercrypt, msk: &mut MasterSecretKey, mpk: &MasterPublicKe let ap = AccessPolicy::parse("DPT::FIN && SEC::TOP").unwrap(); let usk = cc.generate_user_secret_key(msk, &ap).unwrap(); - let ctx = PkeAc::<{ Aes256Gcm::KEY_LENGTH }, Aes256Gcm>::encrypt(cc, mpk, &ap, b"gotcha") - .expect("cannot encrypt!"); + let ctx = PkeAc::< + { Aes256Gcm::KEY_LENGTH }, + { Aes256Gcm::NONCE_LENGTH }, + { Aes256Gcm::MAC_LENGTH }, + Aes256Gcm, + >::encrypt(cc, mpk, &ap, b"gotcha") + .expect("cannot encrypt!"); // Ensure decryption is OK - PkeAc::<{ Aes256Gcm::KEY_LENGTH }, Aes256Gcm>::decrypt(cc, &usk, &ctx).unwrap(); + PkeAc::< + { Aes256Gcm::KEY_LENGTH }, + { Aes256Gcm::NONCE_LENGTH }, + { Aes256Gcm::MAC_LENGTH }, + Aes256Gcm, + >::decrypt(cc, &usk, &ctx) + .unwrap(); { File::create("./usk.txt") @@ -41,7 +52,13 @@ fn generate_new(cc: &Covercrypt, msk: &mut MasterSecretKey, mpk: &MasterPublicKe .unwrap(); // Ensure decryption is OK - PkeAc::<{ Aes256Gcm::KEY_LENGTH }, Aes256Gcm>::decrypt(cc, &usk, &ctx).unwrap(); + PkeAc::< + { Aes256Gcm::KEY_LENGTH }, + { Aes256Gcm::NONCE_LENGTH }, + { Aes256Gcm::MAC_LENGTH }, + Aes256Gcm, + >::decrypt(cc, &usk, &ctx) + .unwrap(); File::create("./ctx.txt") .unwrap() @@ -64,7 +81,13 @@ fn generate_new(cc: &Covercrypt, msk: &mut MasterSecretKey, mpk: &MasterPublicKe }; // Ensure decryption is OK - PkeAc::<{ Aes256Gcm::KEY_LENGTH }, Aes256Gcm>::decrypt(cc, &usk, &ctx).unwrap(); + PkeAc::< + { Aes256Gcm::KEY_LENGTH }, + { Aes256Gcm::NONCE_LENGTH }, + { Aes256Gcm::MAC_LENGTH }, + Aes256Gcm, + >::decrypt(cc, &usk, &ctx) + .unwrap(); } } @@ -80,7 +103,12 @@ fn main() { let ptx = "testing encryption/decryption".as_bytes(); for _ in 0..100 { - PkeAc::<{ Aes256Gcm::KEY_LENGTH }, Aes256Gcm>::encrypt(&cc, &mpk, &ap, ptx) - .expect("cannot encrypt!"); + PkeAc::< + { Aes256Gcm::KEY_LENGTH }, + { Aes256Gcm::NONCE_LENGTH }, + { Aes256Gcm::MAC_LENGTH }, + Aes256Gcm, + >::encrypt(&cc, &mpk, &ap, ptx) + .expect("cannot encrypt!"); } } diff --git a/examples/runme.rs b/examples/runme.rs index f4e699af..8e9a2dd0 100644 --- a/examples/runme.rs +++ b/examples/runme.rs @@ -1,6 +1,8 @@ //! This is the demo given in `README.md` and `lib.rs` -use cosmian_cover_crypt::{api::Covercrypt, test_utils::cc_keygen, AccessPolicy, EncryptedHeader}; +use cosmian_cover_crypt::{ + api::Covercrypt, encrypted_header::EncryptedHeader, test_utils::cc_keygen, AccessPolicy, +}; fn main() { let cc = Covercrypt::default(); diff --git a/src/lib.rs b/src/lib.rs index f8e3cb81..8acd746c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,22 +1,28 @@ -//! This instantiation of Covercrypt is based on Curve25519 and Kyber512, and as such delivers 128 -//! bits of both pre- and post-quantum CCA security. +//! This instantiation of Covercrypt is based on Curve25519 and Kyber512, and as +//! such delivers 128 bits of both pre- and post-quantum CCA security. //! -//! The KEMAC defined in [1] is extended by a PKE interface using AES256-GCM as DEM in the KEM/DEM -//! framework described in [2]. +//! The KEMAC defined in [1] is extended by a PKE interface using AES256-GCM as +//! DEM in the KEM/DEM framework described in [2]. //! -//! [1] "Covercrypt: an Efficient Early-Abort KEM for Hidden Access Policies with Traceability from -//! the DDH and LWE", T. Brézot, P. de Perthuis and D. Pointcheval 2023. -//! [2] "A Proposal for an ISO Standard for Public Key Encryption (version 2.1)", Shoup 2001. +//! [1] "Covercrypt: an Efficient Early-Abort KEM for Hidden Access Policies +//! with Traceability from the DDH and LWE", T. Brézot, P. de Perthuis and +//! D. Pointcheval 2023. +//! +//! [2] "A Proposal for an ISO Standard for Public Key Encryption (version +//! 2.1)", Shoup 2001. mod abe; mod data_struct; mod error; -mod kem; mod providers; #[cfg(any(test, feature = "test-utils"))] -mod test_utils; +pub mod test_utils; pub use abe::*; pub use error::Error; + +#[cfg(feature = "generic-kem")] +mod kem; +#[cfg(feature = "generic-kem")] pub use kem::*; diff --git a/src/providers/kem.rs b/src/providers/kem.rs index 47e9576e..6e850af8 100644 --- a/src/providers/kem.rs +++ b/src/providers/kem.rs @@ -1,9 +1,9 @@ -#[cfg(all(feature = "mlkem-512", feature = "mlkem-768"))] -compile_error!("only one MLKEM version can be chosen at a time"); +#[cfg(not(any(feature = "mlkem-512", feature = "mlkem-768")))] +compile_error!("at leat one MLKEM version must be chosen"); pub mod mlkem; -#[cfg(feature = "mlkem-512")] +#[cfg(all(feature = "mlkem-512", not(feature = "mlkem-768")))] pub(crate) use mlkem::MlKem512 as MlKem; #[cfg(feature = "mlkem-768")] diff --git a/src/providers/kem/mlkem.rs b/src/providers/kem/mlkem.rs index da7932c4..bacd9ea4 100644 --- a/src/providers/kem/mlkem.rs +++ b/src/providers/kem/mlkem.rs @@ -156,6 +156,7 @@ macro_rules! make_mlkem { }; } +#[cfg(feature = "mlkem-512")] make_mlkem!( MlKem512, EncapsulationKey512, @@ -166,6 +167,7 @@ make_mlkem!( 768 ); +#[cfg(feature = "mlkem-768")] make_mlkem!( MlKem768, EncapsulationKey768, @@ -200,6 +202,8 @@ mod tests { }; } + #[cfg(feature = "mlkem-512")] test_mlkem!(MlKem512, test_mlkem512); + #[cfg(feature = "mlkem-768")] test_mlkem!(MlKem768, test_mlkem768); } diff --git a/src/providers/nike.rs b/src/providers/nike.rs index 6f496341..77e6c810 100644 --- a/src/providers/nike.rs +++ b/src/providers/nike.rs @@ -1,7 +1,7 @@ -#[cfg(all(feature = "curve25519", feature = "p-256"))] -compile_error!("only one elliptic curve can be chosen at a time"); +#[cfg(not(any(feature = "curve25519", feature = "p-256")))] +compile_error!("at least one elliptic curve must be chosen"); -#[cfg(feature = "curve25519")] +#[cfg(all(feature = "curve25519", not(feature = "p-256")))] pub use cosmian_rust_curve25519_provider::R25519 as ElGamal; #[cfg(feature = "p-256")]