diff --git a/Cargo.lock b/Cargo.lock index 3f130ad24..9a539e835 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,31 +23,6 @@ dependencies = [ "heapless", ] -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher 0.4.4", - "cpufeatures", -] - -[[package]] -name = "aes-gcm" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" -dependencies = [ - "aead 0.5.2", - "aes", - "cipher 0.4.4", - "ctr", - "ghash", - "subtle", -] - [[package]] name = "arrayvec" version = "0.7.6" @@ -79,15 +54,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - [[package]] name = "bitflags" version = "2.8.0" @@ -112,15 +78,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "847495c209977a90e8aad588b959d0ca9f5dc228096d29a6bd3defd53f35eaec" -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - [[package]] name = "block-buffer" version = "0.10.4" @@ -170,47 +127,12 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" -[[package]] -name = "cc" -version = "1.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7777341816418c02e033934a09f20dc0ccaf65a5201ef8a450ae0105a573fda" -dependencies = [ - "jobserver", - "libc", - "shlex", -] - [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chacha20" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" -dependencies = [ - "cfg-if", - "cipher 0.4.4", - "cpufeatures", -] - -[[package]] -name = "chacha20poly1305" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" -dependencies = [ - "aead 0.5.2", - "chacha20", - "cipher 0.4.4", - "poly1305", - "zeroize", -] - [[package]] name = "cipher" version = "0.4.4" @@ -219,7 +141,6 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common 0.1.6", "inout 0.1.3", - "zeroize", ] [[package]] @@ -232,12 +153,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "const-oid" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6f2aa4d0537bcc1c74df8755072bd31c1ef1a3a1b85a68e8404a8c353b7b8b" - [[package]] name = "const-oid" version = "0.9.6" @@ -273,18 +188,6 @@ dependencies = [ "universal-hash 0.5.1", ] -[[package]] -name = "crypto-bigint" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8658c15c5d921ddf980f7fe25b1e82f4b7a4083b2c4985fea4922edb8e43e07d" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - [[package]] name = "crypto-bigint" version = "0.5.5" @@ -299,9 +202,9 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4919aa33c410cb537c1b2a8458a896f9e47ed4349a2002e5b240f358f7bf6ffc" +checksum = "96272c2ff28b807e09250b180ad1fb7889a3258f7455759b5c3c58b719467130" dependencies = [ "hybrid-array", "num-traits", @@ -326,60 +229,7 @@ name = "crypto-common" version = "0.2.0-rc.1" dependencies = [ "hybrid-array", - "rand_core 0.9.0", -] - -[[package]] -name = "crypto-mac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e" -dependencies = [ - "generic-array", - "subtle", -] - -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher 0.4.4", -] - -[[package]] -name = "curve25519-dalek" -version = "4.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" -dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "fiat-crypto", - "rustc_version", - "subtle", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "der" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b71cca7d95d7681a4b3b9cdf63c8dbc3730d0584c2c74e31416d64a90493f4" -dependencies = [ - "const-oid 0.6.2", + "rand_core 0.9.1", ] [[package]] @@ -399,19 +249,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82db698b33305f0134faf590b9d1259dc171b5481ac41d5c8146c3b3ee7d4319" dependencies = [ "const-oid 0.10.0-rc.3", - "pem-rfc7468 1.0.0-rc.2", + "pem-rfc7468", "zeroize", ] -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - [[package]] name = "digest" version = "0.10.7" @@ -435,40 +276,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "dunce" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" - -[[package]] -name = "ecdsa" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43ee23aa5b4f68c7a092b5c3beb25f50c406adc75e2363634f242f28ab255372" -dependencies = [ - "der 0.4.5", - "elliptic-curve 0.10.4", - "hmac 0.11.0", - "signature 1.3.2", -] - -[[package]] -name = "elliptic-curve" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e5c176479da93a0983f0a6fdc3c1b8e7d5be0d7fe3fe05a99f15b96582b9a8" -dependencies = [ - "crypto-bigint 0.2.5", - "ff 0.10.1", - "generic-array", - "group 0.10.0", - "pkcs8 0.7.6", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - [[package]] name = "elliptic-curve" version = "0.13.8" @@ -477,11 +284,9 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint 0.5.5", - "digest 0.10.7", - "ff 0.13.0", + "ff", "generic-array", - "group 0.13.0", - "hkdf 0.12.4", + "group", "pkcs8 0.10.2", "rand_core 0.6.4", "sec1 0.7.3", @@ -495,36 +300,26 @@ version = "0.14.0-rc.1" dependencies = [ "base16ct", "base64ct", - "crypto-bigint 0.6.0", + "crypto-bigint 0.6.1", "digest 0.11.0-pre.9", - "ff 0.13.0", - "group 0.13.0", + "ff", + "group", "hex-literal", - "hkdf 0.13.0-pre.4", + "hkdf", "hybrid-array", - "pem-rfc7468 1.0.0-rc.2", - "pkcs8 0.11.0-rc.1", + "pem-rfc7468", + "pkcs8 0.11.0-rc.2", "rand_core 0.6.4", "sec1 0.8.0-rc.3", "serde_json", "serdect", - "sha2 0.11.0-pre.4", + "sha2", "sha3", "subtle", "tap", "zeroize", ] -[[package]] -name = "ff" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f40b2dcd8bc322217a5f6559ae5f9e9d1de202a2ecee2e9eafcbece7562a4f" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "ff" version = "0.13.0" @@ -536,12 +331,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "fiat-crypto" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" - [[package]] name = "funty" version = "2.0.0" @@ -582,40 +371,13 @@ dependencies = [ "windows-targets", ] -[[package]] -name = "ghash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" -dependencies = [ - "opaque-debug", - "polyval", -] - -[[package]] -name = "glob" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" - -[[package]] -name = "group" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c363a5301b8f153d80747126a04b3c82073b9fe3130571a9d170cacdeaf7912" -dependencies = [ - "ff 0.10.1", - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "group" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ - "ff 0.13.0", + "ff", "rand_core 0.6.4", "subtle", ] @@ -645,51 +407,13 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" -[[package]] -name = "hkdf" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b" -dependencies = [ - "digest 0.9.0", - "hmac 0.11.0", -] - -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac 0.12.1", -] - [[package]] name = "hkdf" version = "0.13.0-pre.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00176ff81091018d42ff82e8324f8e5adb0b7e0468d1358f653972562dbff031" dependencies = [ - "hmac 0.13.0-pre.4", -] - -[[package]] -name = "hmac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac", - "digest 0.9.0", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.7", + "hmac", ] [[package]] @@ -701,27 +425,6 @@ dependencies = [ "digest 0.11.0-pre.9", ] -[[package]] -name = "hpke" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4917627a14198c3603282c5158b815ad5534795451d3c074b53cf3cee0960b11" -dependencies = [ - "aead 0.5.2", - "aes-gcm", - "chacha20poly1305", - "digest 0.10.7", - "generic-array", - "hkdf 0.12.4", - "hmac 0.12.1", - "p256 0.13.2", - "rand_core 0.6.4", - "sha2 0.10.8", - "subtle", - "x25519-dalek", - "zeroize", -] - [[package]] name = "hybrid-array" version = "0.2.3" @@ -758,15 +461,6 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" -[[package]] -name = "jobserver" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" -dependencies = [ - "libc", -] - [[package]] name = "keccak" version = "0.2.0-pre.0" @@ -780,13 +474,7 @@ dependencies = [ name = "kem" version = "0.3.0-pre.0" dependencies = [ - "hpke", - "p256 0.9.0", - "pqcrypto", - "pqcrypto-traits", - "rand", - "rand_core 0.6.4", - "x3dh-ke", + "rand_core 0.9.1", "zeroize", ] @@ -811,33 +499,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - -[[package]] -name = "p256" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d053368e1bae4c8a672953397bd1bd7183dde1c72b0b7612a15719173148d186" -dependencies = [ - "ecdsa", - "elliptic-curve 0.10.4", - "sha2 0.9.9", -] - -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "elliptic-curve 0.13.8", - "primeorder", -] - [[package]] name = "password-hash" version = "0.5.0" @@ -854,19 +515,10 @@ name = "password-hash" version = "0.6.0-rc.0" dependencies = [ "base64ct", - "rand_core 0.9.0", + "rand_core 0.9.1", "subtle", ] -[[package]] -name = "pem-rfc7468" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f22eb0e3c593294a99e9ff4b24cf6b752d43f193aa4415fe5077c159996d497" -dependencies = [ - "base64ct", -] - [[package]] name = "pem-rfc7468" version = "1.0.0-rc.2" @@ -876,18 +528,6 @@ dependencies = [ "base64ct", ] -[[package]] -name = "pkcs8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee3ef9b64d26bad0536099c816c6734379e45bbd5f14798def6809e5cc350447" -dependencies = [ - "der 0.4.5", - "pem-rfc7468 0.2.3", - "spki 0.4.1", - "zeroize", -] - [[package]] name = "pkcs8" version = "0.10.2" @@ -900,96 +540,14 @@ dependencies = [ [[package]] name = "pkcs8" -version = "0.11.0-rc.1" +version = "0.11.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eacd2c7141f32aef1cfd1ad0defb5287a3d94592d7ab57c1ae20e3f9f1f0db1f" +checksum = "f22636de7c995e997ed3d8d2949b7414d4faba3efa7312a6c0e75d875a14bdd4" dependencies = [ "der 0.8.0-rc.1", "spki 0.8.0-rc.1", ] -[[package]] -name = "poly1305" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" -dependencies = [ - "cpufeatures", - "opaque-debug", - "universal-hash 0.5.1", -] - -[[package]] -name = "polyval" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug", - "universal-hash 0.5.1", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" -dependencies = [ - "zerocopy 0.7.35", -] - -[[package]] -name = "pqcrypto" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10caefecccc56b78d30a6b46effa2360048104d668fb7cea944c0761f9c1f11" -dependencies = [ - "pqcrypto-saber", - "pqcrypto-traits", -] - -[[package]] -name = "pqcrypto-internals" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cc3518d9ec325ec95d89749d4f5c111776b97c5bbd26e3ffe523aa300f1e27e" -dependencies = [ - "cc", - "dunce", - "getrandom 0.2.15", - "libc", -] - -[[package]] -name = "pqcrypto-saber" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7453b631d7bd268fffadf70514cdf05c9e9fd9574e26eafb85b5b86402e34c5b" -dependencies = [ - "cc", - "glob", - "libc", - "pqcrypto-internals", - "pqcrypto-traits", -] - -[[package]] -name = "pqcrypto-traits" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94e851c7654eed9e68d7d27164c454961a616cf8c203d500607ef22c737b51bb" - -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve 0.13.8", -] - [[package]] name = "proc-macro2" version = "1.0.93" @@ -1014,27 +572,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - [[package]] name = "rand_core" version = "0.6.4" @@ -1046,21 +583,12 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b08f3c9802962f7e1b25113931d94f43ed9725bebc59db9d0c3e9a23b67e15ff" +checksum = "a88e0da7a2c97baa202165137c158d0a2e824ac465d13d81046727b34cb247d3" dependencies = [ "getrandom 0.3.1", - "zerocopy 0.8.17", -] - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", + "zerocopy", ] [[package]] @@ -1092,41 +620,26 @@ dependencies = [ "base16ct", "der 0.8.0-rc.1", "hybrid-array", - "pkcs8 0.11.0-rc.1", + "pkcs8 0.11.0-rc.2", "serdect", "subtle", "zeroize", ] -[[package]] -name = "semver" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" - [[package]] name = "serde" -version = "1.0.217" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" dependencies = [ "serde_derive", ] -[[package]] -name = "serde_bytes" -version = "0.11.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" -dependencies = [ - "serde", -] - [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" dependencies = [ "proc-macro2", "quote", @@ -1135,9 +648,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.138" +version = "1.0.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6" dependencies = [ "itoa", "memchr", @@ -1155,30 +668,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - [[package]] name = "sha2" version = "0.11.0-pre.4" @@ -1200,22 +689,6 @@ dependencies = [ "keccak", ] -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signature" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2807892cfa58e081aa1f1111391c7a0649d4fa127a4ffbe34bcbfb35a1171a4" -dependencies = [ - "digest 0.9.0", - "rand_core 0.6.4", -] - [[package]] name = "signature" version = "2.2.0" @@ -1231,8 +704,8 @@ version = "2.3.0-pre.5" dependencies = [ "digest 0.11.0-pre.9", "hex-literal", - "rand_core 0.9.0", - "sha2 0.11.0-pre.4", + "rand_core 0.9.1", + "sha2", "signature_derive", ] @@ -1245,15 +718,6 @@ dependencies = [ "syn", ] -[[package]] -name = "spki" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c01a0c15da1b0b0e1494112e7af814a678fec9bd157881b49beac661e9b6f32" -dependencies = [ - "der 0.4.5", -] - [[package]] name = "spki" version = "0.7.3" @@ -1305,15 +769,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-ident" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" +checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" [[package]] name = "universal-hash" @@ -1436,69 +900,20 @@ dependencies = [ "tap", ] -[[package]] -name = "x25519-dalek" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" -dependencies = [ - "curve25519-dalek", - "rand_core 0.6.4", -] - -[[package]] -name = "x3dh-ke" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee8f59e7095cfd040618f328897c4b07925933de33b517949a64bc97b9fcde3" -dependencies = [ - "base64ct", - "bincode", - "const-oid 0.6.2", - "getrandom 0.2.15", - "hkdf 0.11.0", - "p256 0.9.0", - "rand_core 0.6.4", - "serde", - "serde_bytes", - "sha2 0.9.9", -] - -[[package]] -name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "byteorder", - "zerocopy-derive 0.7.35", -] - [[package]] name = "zerocopy" -version = "0.8.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa91407dacce3a68c56de03abe2760159582b846c6a4acd2f456618087f12713" -dependencies = [ - "zerocopy-derive 0.8.17", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "dde3bb8c68a8f3f1ed4ac9221aad6b10cece3e60a8e2ea54a6a2dec806d0084c" dependencies = [ - "proc-macro2", - "quote", - "syn", + "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.17" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06718a168365cad3d5ff0bb133aad346959a2074bd4a85c121255a11304a8626" +checksum = "eea57037071898bf96a6da35fd626f4f27e9cee3ead2a6c703cf09d472b2e700" dependencies = [ "proc-macro2", "quote", @@ -1510,17 +925,3 @@ name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] diff --git a/kem/Cargo.toml b/kem/Cargo.toml index e4e1c7fb9..b07b3c16d 100644 --- a/kem/Cargo.toml +++ b/kem/Cargo.toml @@ -14,19 +14,9 @@ categories = ["cryptography", "no-std"] rust-version = "1.66" [dependencies] -rand_core = "0.6" +rand_core = "0.9" zeroize = { version = "1.7", default-features = false } -[dev-dependencies] -hpke = "0.12" -p256 = { version = "0.9", features = ["ecdsa"] } -pqcrypto = { version = "0.15", default-features = false, features = [ - "pqcrypto-saber", -] } -pqcrypto-traits = "0.3" -rand = { version = "0.8" } -x3dh-ke = "0.1" - [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] diff --git a/kem/src/lib.rs b/kem/src/lib.rs index dc009d077..06365882a 100644 --- a/kem/src/lib.rs +++ b/kem/src/lib.rs @@ -10,7 +10,7 @@ #![warn(missing_docs, unused_qualifications, missing_debug_implementations)] use core::fmt::Debug; -use rand_core::CryptoRngCore; +use rand_core::CryptoRng; /// A value that can be encapsulated to. Often, this will just be a public key. However, it can /// also be a bundle of public keys, or it can include a sender's private key for authenticated @@ -20,7 +20,7 @@ pub trait Encapsulate { type Error: Debug; /// Encapsulates a fresh shared secret - fn encapsulate(&self, rng: &mut impl CryptoRngCore) -> Result<(EK, SS), Self::Error>; + fn encapsulate(&self, rng: &mut impl CryptoRng) -> Result<(EK, SS), Self::Error>; } /// A value that can be used to decapsulate an encapsulated key. diff --git a/kem/tests/hpke.rs b/kem/tests/hpke.rs deleted file mode 100644 index 43ad61c9d..000000000 --- a/kem/tests/hpke.rs +++ /dev/null @@ -1,53 +0,0 @@ -use kem::{Decapsulate, Encapsulate}; - -use hpke::{ - kem::{Kem as KemTrait, X25519HkdfSha256}, - HpkeError, -}; -use rand_core::{CryptoRng, CryptoRngCore, RngCore}; - -type SharedSecret = hpke::kem::SharedSecret; -type EncappedKey = ::EncappedKey; - -// We have to define a newtype for the public and private keys because we're gonna impl -// the Encapsulate and Decapsulate traits for them -struct PublicKey(::PublicKey); -struct PrivateKey(::PrivateKey); - -impl Encapsulate for PublicKey { - type Error = HpkeError; - - fn encapsulate( - &self, - mut csprng: &mut impl CryptoRngCore, - ) -> Result<(EncappedKey, SharedSecret), HpkeError> { - ::encap(&self.0, None, &mut csprng).map(|(ek, ss)| (ss, ek)) - } -} - -impl Decapsulate for PrivateKey { - type Error = HpkeError; - - fn decapsulate(&self, encapped_key: &EncappedKey) -> Result { - ::decap(&self.0, None, encapped_key) - } -} - -// A simple wrapper around the keypair generation function -fn gen_keypair(csprng: &mut R) -> (PrivateKey, PublicKey) { - let (sk, pk) = X25519HkdfSha256::gen_keypair(csprng); - (PrivateKey(sk), PublicKey(pk)) -} - -#[test] -fn test_hpke() { - let mut rng = rand::thread_rng(); - - // Make a recipient's keypair - let (sk_recip, pk_recip) = gen_keypair(&mut rng); - - // Encapsulate to the recipient. Check that the derived shared secrets are equal - let (ek, ss1) = pk_recip.encapsulate(&mut rng).unwrap(); - let ss2 = sk_recip.decapsulate(&ek).unwrap(); - assert_eq!(ss1.0, ss2.0); -} diff --git a/kem/tests/saber.rs b/kem/tests/saber.rs deleted file mode 100644 index 13e85ef6b..000000000 --- a/kem/tests/saber.rs +++ /dev/null @@ -1,53 +0,0 @@ -use kem::{Decapsulate, Encapsulate}; - -use pqcrypto::kem::firesaber::{ - decapsulate, encapsulate, keypair, Ciphertext as SaberEncappedKey, PublicKey, SecretKey, - SharedSecret as SaberSharedSecret, -}; -use rand_core::CryptoRngCore; - -// We have to define a newtype for the public and private keys because we're gonna impl -// the Encapsulate and Decapsulate traits for them -struct SaberPublicKey(PublicKey); -struct SaberPrivateKey(SecretKey); - -impl Encapsulate for SaberPublicKey { - // TODO: Encapsulation is infallible. Make this the never type once it's available - type Error = (); - - fn encapsulate( - &self, - _: &mut impl CryptoRngCore, - ) -> Result<(SaberEncappedKey, SaberSharedSecret), ()> { - let (ss, ek) = encapsulate(&self.0); - Ok((ek, ss)) - } -} - -impl Decapsulate for SaberPrivateKey { - // TODO: Decapsulation is infallible. Make this the never type once it's available - type Error = (); - - fn decapsulate(&self, ek: &SaberEncappedKey) -> Result { - Ok(decapsulate(ek, &self.0)) - } -} - -fn gen_keypair() -> (SaberPublicKey, SaberPrivateKey) { - let (pk, sk) = keypair(); - (SaberPublicKey(pk), SaberPrivateKey(sk)) -} - -#[test] -fn test_saber() { - use pqcrypto_traits::kem::SharedSecret as _; - let mut rng = rand::thread_rng(); - - // Make a recipient keypair - let (pk_recip, sk_recip) = gen_keypair(); - - // Encapsulate and decapsulate. Assert that the shared secrets are equal - let (ek, ss1) = pk_recip.encapsulate(&mut rng).unwrap(); - let ss2 = sk_recip.decapsulate(&ek).unwrap(); - assert_eq!(ss1.as_bytes(), ss2.as_bytes()); -} diff --git a/kem/tests/x3dh.rs b/kem/tests/x3dh.rs deleted file mode 100644 index b39a5adf8..000000000 --- a/kem/tests/x3dh.rs +++ /dev/null @@ -1,113 +0,0 @@ -use kem::{Decapsulate, Encapsulate}; - -use p256::ecdsa::Signature; -use rand_core::CryptoRngCore; -use x3dh_ke::{x3dh_a, x3dh_b, EphemeralKey, IdentityKey, Key, OneTimePreKey, SignedPreKey}; - -/// The shared secret type defined by x3dh_ke -type SharedSecret = [u8; 32]; - -// Define the recipient privkey type. This is a bundle of 3 privkeys of different lifespans -struct X3DhPrivkeyBundle { - ik: IdentityKey, - spk: SignedPreKey, - sig: Signature, - opk: OneTimePreKey, -} - -impl X3DhPrivkeyBundle { - fn gen() -> X3DhPrivkeyBundle { - // The default() method does actual key generation here - let ik = IdentityKey::default(); - let spk = SignedPreKey::default(); - let sig = ik.sign(&spk.pk_to_bytes()); - let opk = OneTimePreKey::default(); - X3DhPrivkeyBundle { ik, spk, sig, opk } - } - fn as_pubkeys(&self) -> X3DhPubkeyBundle { - X3DhPubkeyBundle { - ik: self.ik.strip(), - spk: self.spk.strip(), - opk: self.opk.strip(), - sig: self.sig, - } - } -} - -// The pubkeys keys associated with a privkey bundle. In x3dh-ke, all the keys serve as both -// pubkeys and privkeys. This seems dangerous but hey this isn't prod. -type X3DhPubkeyBundle = X3DhPrivkeyBundle; - -/// To encap, we need the recipient's public keys and the sender's private key -struct EncapContext(X3DhPubkeyBundle, IdentityKey); - -/// To decap, we need the recipient's private keys and the sender's public key -struct DecapContext(X3DhPrivkeyBundle, IdentityKey); - -// Define an authenticated encapsulator. To authenticate, we need a full sender keypair. -impl Encapsulate for EncapContext { - type Error = &'static str; - - fn encapsulate( - &self, - _: &mut impl CryptoRngCore, - ) -> Result<(EphemeralKey, SharedSecret), Self::Error> { - // Make a new ephemeral key. This will be the encapped key - let ek = EphemeralKey::default(); - // Deconstruct the recipient's pubkey bundle - let X3DhPubkeyBundle { - ref ik, - ref spk, - ref sig, - ref opk, - } = self.0; - let my_ik = &self.1; - - // Do the X3DH operation to get the shared secret - let shared_secret = x3dh_a(sig, my_ik, spk, &ek, ik, opk)?; - - Ok((ek, shared_secret)) - } -} - -// Define an decapsulator. Since authenticated and unauthenticated encapped keys are represented by -// the same type (which, outside of testing, should not be the case), this can do both auth'd and -// unauth'd decapsulation. -impl Decapsulate for DecapContext { - // TODO: Decapsulation is infallible. Make the Error type `!` when it's stable. - type Error = (); - - fn decapsulate(&self, ek: &EphemeralKey) -> Result { - // Deconstruct our private keys bundle - let X3DhPrivkeyBundle { - ref ik, - ref spk, - ref opk, - .. - } = self.0; - let sender_pubkey = &self.1; - - // Now decapsulate - Ok(x3dh_b(sender_pubkey, spk, ek, ik, opk)) - } -} - -#[test] -fn test_x3dh() { - let mut rng = rand::thread_rng(); - - // We use _a and _b suffixes to denote whether a key belongs to Alice or Bob. Alice is the - // sender in this case. - let sk_ident_a = IdentityKey::default(); - let pk_ident_a = sk_ident_a.strip(); - let sk_bundle_b = X3DhPrivkeyBundle::gen(); - let pk_bundle_b = sk_bundle_b.as_pubkeys(); - - let encap_context = EncapContext(pk_bundle_b, sk_ident_a); - let decap_context = DecapContext(sk_bundle_b, pk_ident_a); - - // Now do an authenticated encap - let (encapped_key, ss1) = encap_context.encapsulate(&mut rng).unwrap(); - let ss2 = decap_context.decapsulate(&encapped_key).unwrap(); - assert_eq!(ss1, ss2); -}