Project import generated by Copybara. GitOrigin-RevId: 0c53f1d725822b1f8949cc807bc623fb08f95067 Change-Id: I2dbf880260b27600821ec6ddc69106a7bb11e7e3
diff --git a/nearby/Cargo.lock b/nearby/Cargo.lock index 4730df4..637c67d 100644 --- a/nearby/Cargo.lock +++ b/nearby/Cargo.lock
@@ -122,6 +122,12 @@ checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" [[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -133,16 +139,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", + "digest", ] [[package]] @@ -454,17 +451,16 @@ name = "crypto_provider" version = "0.1.0" dependencies = [ - "bytes", "criterion", "crypto_provider_openssl", "crypto_provider_rustcrypto", "hex", "hex-literal", - "rand 0.8.5", + "rand", "rand_ext", "rstest", "rstest_reuse", - "sha2 0.10.6", + "sha2", "test_helper", "wycheproof", ] @@ -498,11 +494,11 @@ "hkdf", "hmac", "p256", - "rand 0.8.5", - "rand_chacha 0.3.1", + "rand", + "rand_chacha", "rand_core 0.6.4", "sec1", - "sha2 0.10.6", + "sha2", "subtle", "x25519-dalek", ] @@ -518,13 +514,15 @@ [[package]] name = "curve25519-dalek" -version = "3.2.0" +version = "4.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +checksum = "03d928d978dbec61a1167414f5ec534f24bea0d7a0d24dd9b6233d3d8223e585" dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", + "cfg-if", + "digest", + "fiat-crypto", + "packed_simd_2", + "platforms", "subtle", "zeroize", ] @@ -539,6 +537,16 @@ ] [[package]] +name = "der" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b10af9f9f9f2134a42d3f8aa74658660f2e0234b0eb81bd171df8aa32779ed" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] name = "derive-getters" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -557,45 +565,36 @@ [[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.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer 0.10.4", + "block-buffer", "crypto-common", "subtle", ] [[package]] name = "ed25519" -version = "1.5.3" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +checksum = "5fb04eee5d9d907f29e80ee6b0e78f7e2c82342c63e3580d8c4f69d9d5aad963" dependencies = [ + "pkcs8", "signature", ] [[package]] name = "ed25519-dalek" -version = "1.0.1" +version = "2.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +checksum = "798f704d128510932661a3489b08e3f4c934a01d61c5def59ae7b8e48f19665a" dependencies = [ "curve25519-dalek", "ed25519", - "rand 0.7.3", - "rand_core 0.5.1", + "rand_core 0.6.4", "serde", - "sha2 0.9.9", + "sha2", "zeroize", ] @@ -613,8 +612,8 @@ dependencies = [ "base16ct", "crypto-bigint", - "der", - "digest 0.10.6", + "der 0.6.1", + "digest", "ff", "generic-array", "group", @@ -666,6 +665,12 @@ ] [[package]] +name = "fiat-crypto" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" + +[[package]] name = "flate2" version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -797,24 +802,13 @@ [[package]] name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", ] [[package]] @@ -911,7 +905,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.6", + "digest", ] [[package]] @@ -1037,11 +1031,11 @@ "hdrhistogram", "hex", "ldt_tbc", - "rand 0.8.5", + "rand", "rand_ext", "rand_pcg", "serde_json", - "sha2 0.10.6", + "sha2", "subtle", "test_helper", "xts_aes", @@ -1062,7 +1056,7 @@ "ldt", "ldt_tbc", "np_hkdf", - "rand 0.8.5", + "rand", "rand_ext", "rand_pcg", "serde_json", @@ -1074,7 +1068,7 @@ name = "ldt_tbc" version = "0.1.0" dependencies = [ - "rand 0.8.5", + "crypto_provider", ] [[package]] @@ -1084,6 +1078,12 @@ checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] +name = "libm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" + +[[package]] name = "linux-raw-sys" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1158,7 +1158,7 @@ "crypto_provider_rustcrypto", "hex", "ldt", - "rand 0.8.5", + "rand", "rand_ext", "serde_json", "test_helper", @@ -1303,6 +1303,16 @@ ] [[package]] +name = "packed_simd_2" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" +dependencies = [ + "cfg-if", + "libm", +] + +[[package]] name = "pin-project-lite" version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1315,12 +1325,28 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der 0.7.3", + "spki", +] + +[[package]] name = "pkg-config" version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" [[package]] +name = "platforms" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" + +[[package]] name = "plotters" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1470,40 +1496,17 @@ [[package]] name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", -] - -[[package]] -name = "rand" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha 0.3.1", + "rand_chacha", "rand_core 0.6.4", ] [[package]] name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" @@ -1517,9 +1520,6 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] [[package]] name = "rand_core" @@ -1527,14 +1527,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.8", + "getrandom", ] [[package]] name = "rand_core_05_adapter" version = "0.1.0" dependencies = [ - "rand 0.8.5", + "rand", "rand_core 0.5.1", ] @@ -1542,21 +1542,13 @@ name = "rand_ext" version = "0.1.0" dependencies = [ + "crypto_provider", "log", - "rand 0.8.5", + "rand", "rand_pcg", ] [[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] name = "rand_pcg" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1646,7 +1638,7 @@ checksum = "45f80dcc84beab3a327bbe161f77db25f336a1452428176787c8c79ac79d7073" dependencies = [ "quote", - "rand 0.8.5", + "rand", "rustc_version", "syn 1.0.109", ] @@ -1702,7 +1694,7 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct", - "der", + "der 0.6.1", "generic-array", "subtle", "zeroize", @@ -1747,33 +1739,20 @@ [[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.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.6", + "digest", ] [[package]] name = "signature" -version = "1.6.4" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" [[package]] name = "slab" @@ -1800,6 +1779,16 @@ ] [[package]] +name = "spki" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37a5be806ab6f127c3da44b7378837ebf01dadca8510a0e572460216b228bd0e" +dependencies = [ + "base64ct", + "der 0.7.3", +] + +[[package]] name = "strsim" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1914,8 +1903,8 @@ "crypto_provider_rustcrypto", "lazy_static", "log", - "rand 0.8.5", - "rand_chacha 0.3.1", + "rand", + "rand_chacha", "spin 0.9.8", "ukey2_connections", "ukey2_rs", @@ -1930,7 +1919,7 @@ "crypto_provider_openssl", "crypto_provider_rustcrypto", "nom", - "rand 0.8.5", + "rand", "rstest", "ukey2_proto", "ukey2_rs", @@ -1946,8 +1935,8 @@ "jni", "lazy_static", "log", - "rand 0.8.5", - "rand_chacha 0.3.1", + "rand", + "rand_chacha", "spin 0.9.8", "ukey2_connections", "ukey2_rs", @@ -1972,9 +1961,9 @@ "derive-getters", "log", "num-bigint", - "rand 0.8.5", + "rand", "rstest", - "sha2 0.10.6", + "sha2", "ukey2_proto", ] @@ -2028,12 +2017,6 @@ [[package]] name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" @@ -2239,13 +2222,12 @@ [[package]] name = "x25519-dalek" -version = "2.0.0-pre.1" +version = "2.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df" +checksum = "fabd6e16dd08033932fc3265ad4510cc2eab24656058a6dcb107ffe274abcc95" dependencies = [ "curve25519-dalek", "rand_core 0.6.4", - "zeroize", ] [[package]] @@ -2270,7 +2252,7 @@ "crypto_provider_rustcrypto", "hex", "ldt_tbc", - "rand 0.8.5", + "rand", "rand_ext", "rand_pcg", "regex", @@ -2283,17 +2265,3 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25588073e5216b50bca71d61cb8595cdb9745e87032a58c199730def2862c934" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.10", -]
diff --git a/nearby/Cargo.toml b/nearby/Cargo.toml index a5570a8..a2b9f93 100644 --- a/nearby/Cargo.toml +++ b/nearby/Cargo.toml
@@ -50,13 +50,13 @@ ctr = "0.9.1" hkdf = "0.12.3" hmac = "0.12.1" -ed25519-dalek = { version = "1.0.1", default-features = false } +ed25519-dalek = { version = "2.0.0-rc.2", default-features = false } ed25519 = "1.5.3" aes-gcm = "0.10.1" hex = "0.4.3" serde_json = { version = "1.0.91", features = ["alloc"], default-features = false } base64 = "0.21.0" -x25519-dalek = { version = "2.0.0-pre.1", features = ["u64_backend"], default-features = false } +x25519-dalek = { version = "2.0.0-rc.2", default-features = false } subtle = { version = "2.4.1", default-features = false } rand_chacha = { version = "0.3.1", default-features = false } p256 = { version = "0.12.0", default-features = false }
diff --git a/nearby/connections/ukey2/ukey2_connections/fuzz/Cargo.lock b/nearby/connections/ukey2/ukey2_connections/fuzz/Cargo.lock index 8f42dbe..8320405 100644 --- a/nearby/connections/ukey2/ukey2_connections/fuzz/Cargo.lock +++ b/nearby/connections/ukey2/ukey2_connections/fuzz/Cargo.lock
@@ -71,9 +71,9 @@ [[package]] name = "base16ct" -version = "0.2.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" [[package]] name = "bitflags" @@ -156,9 +156,9 @@ [[package]] name = "crypto-bigint" -version = "0.5.1" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ "generic-array", "rand_core", @@ -180,9 +180,6 @@ [[package]] name = "crypto_provider" version = "0.1.0" -dependencies = [ - "bytes", -] [[package]] name = "crypto_provider_rustcrypto" @@ -233,12 +230,11 @@ [[package]] name = "der" -version = "0.7.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ "const-oid", - "zeroize", ] [[package]] @@ -303,12 +299,13 @@ [[package]] name = "elliptic-curve" -version = "0.13.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ "base16ct", "crypto-bigint", + "der", "digest", "ff", "generic-array", @@ -352,9 +349,9 @@ [[package]] name = "ff" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ "rand_core", "subtle", @@ -374,7 +371,6 @@ dependencies = [ "typenum", "version_check", - "zeroize", ] [[package]] @@ -390,9 +386,9 @@ [[package]] name = "group" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff", "rand_core", @@ -582,9 +578,9 @@ [[package]] name = "p256" -version = "0.13.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47" +checksum = "49c124b3cbce43bcbac68c58ec181d98ed6cc7e6d0aa7c3ba97b2563410b0e55" dependencies = [ "elliptic-curve", "primeorder", @@ -626,9 +622,9 @@ [[package]] name = "primeorder" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0" +checksum = "0b54f7131b3dba65a2f414cf5bd25b66d4682e4608610668eae785750ba4c5b2" dependencies = [ "elliptic-curve", ] @@ -774,9 +770,9 @@ [[package]] name = "sec1" -version = "0.7.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct", "der",
diff --git a/nearby/crypto/crypto_provider/Cargo.toml b/nearby/crypto/crypto_provider/Cargo.toml index 9923bfc..69f7572 100644 --- a/nearby/crypto/crypto_provider/Cargo.toml +++ b/nearby/crypto/crypto_provider/Cargo.toml
@@ -12,7 +12,6 @@ wycheproof = { version = "0.4.0", optional = true } hex = { workspace = true, optional = true } test_helper = { workspace = true, optional = true } -bytes = { version = "1.4.0", default-features = false } [dev-dependencies] crypto_provider_openssl.workspace = true
diff --git a/nearby/crypto/crypto_provider/benches/hmac_bench.rs b/nearby/crypto/crypto_provider/benches/hmac_bench.rs index 63b09e6..c7ccf1a 100644 --- a/nearby/crypto/crypto_provider/benches/hmac_bench.rs +++ b/nearby/crypto/crypto_provider/benches/hmac_bench.rs
@@ -15,17 +15,16 @@ use criterion::{criterion_group, criterion_main, Criterion}; use crypto_provider::hmac::Hmac; -use crypto_provider::CryptoProvider; +use crypto_provider::{CryptoProvider, CryptoRng}; use crypto_provider_openssl::Openssl; use crypto_provider_rustcrypto::RustCrypto; - -use rand::{Rng, SeedableRng}; +use rand_ext::random_bytes; // simple benchmark, which creates a new hmac, updates once, then finalizes fn hmac_sha256_operations<C: CryptoProvider>(c: &mut Criterion) { - let mut rng = rand::rngs::StdRng::from_entropy(); - let key: [u8; 32] = rand_ext::random_bytes(&mut rng); - let update_data: [u8; 16] = rand_ext::random_bytes(&mut rng); + let mut rng = C::CryptoRng::new(); + let key: [u8; 32] = rand_ext::random_bytes::<32, C>(&mut rng); + let update_data: [u8; 16] = rand_ext::random_bytes::<16, C>(&mut rng); c.bench_function("bench for hmac sha256 single update", |b| { b.iter(|| { @@ -37,9 +36,9 @@ } fn hmac_sha512_operations<C: CryptoProvider>(c: &mut Criterion) { - let mut rng = rand::rngs::StdRng::from_entropy(); - let key: [u8; 64] = rand_ext::random_bytes(&mut rng); - let update_data: [u8; 16] = rng.gen(); + let mut rng = C::CryptoRng::new(); + let key: [u8; 64] = rand_ext::random_bytes::<64, C>(&mut rng); + let update_data: [u8; 16] = random_bytes::<16, C>(&mut rng); c.bench_function("bench for hmac sha512 single update", |b| { b.iter(|| {
diff --git a/nearby/crypto/crypto_provider/src/aes/gcm_siv.rs b/nearby/crypto/crypto_provider/src/aes/gcm_siv.rs index 4352ee8..2d683b2 100644 --- a/nearby/crypto/crypto_provider/src/aes/gcm_siv.rs +++ b/nearby/crypto/crypto_provider/src/aes/gcm_siv.rs
@@ -13,10 +13,10 @@ // limitations under the License. //! Traits for AES-GCM-SIV. -pub use bytes; -use bytes::BytesMut; use super::AesKey; +extern crate alloc; +use alloc::vec::Vec; /// An enum for indicating issues with the GCM-SIV encryption/decryption operations. pub enum GcmSivError { @@ -40,11 +40,11 @@ /// Encrypt the data in place with a nonce to make sure each ciphertext is unique. /// This will need 16 bytes reserved in the data array for the tag. /// Optionally, additional associated data can be passed in for computation of the cryptographic tag. - fn encrypt(&self, data: &mut BytesMut, aad: &[u8], nonce: &[u8]) -> Result<(), GcmSivError>; + fn encrypt(&self, data: &mut Vec<u8>, aad: &[u8], nonce: &[u8]) -> Result<(), GcmSivError>; /// Decrypt the ciphertext concatenated with its tag in place with the nonce used for encryption. /// If associated data was passed in when creating the ciphertext, it should be passed in here as well /// in order to properly decrypt the message. - fn decrypt(&self, data: &mut BytesMut, aad: &[u8], nonce: &[u8]) -> Result<(), GcmSivError>; + fn decrypt(&self, data: &mut Vec<u8>, aad: &[u8], nonce: &[u8]) -> Result<(), GcmSivError>; } /// Module for testing implementations of this crate. @@ -52,9 +52,9 @@ pub mod testing { extern crate alloc; + use alloc::vec::Vec; use core::marker; - use bytes::BytesMut; use hex_literal::hex; use rstest_reuse::template; @@ -71,7 +71,7 @@ let nonce = hex!("030000000000000000000000"); let aes = A::new(&test_key.into()); let msg = hex!(""); - let mut buf = BytesMut::from(msg.as_slice()); + let mut buf = Vec::from(msg.as_slice()); let tag = hex!("dc20e2d83f25705bb49e439eca56de25"); assert!(aes.encrypt(&mut buf, b"", &nonce).is_ok()); assert_eq!(&buf[..], &tag); @@ -79,7 +79,7 @@ let msg = hex!("0100000000000000"); let ct = hex!("b5d839330ac7b786"); let tag = hex!("578782fff6013b815b287c22493a364c"); - let mut buf = BytesMut::from(msg.as_slice()); + let mut buf = Vec::from(msg.as_slice()); assert!(aes.encrypt(&mut buf, b"", &nonce).is_ok()); assert_eq!(&buf[..8], &ct); assert_eq!(&buf[8..], &tag); @@ -95,7 +95,7 @@ let nonce = hex!("030000000000000000000000"); let aes = A::new(&test_key.into()); let msg = hex!("0100000000000000"); - let mut buf = BytesMut::new(); + let mut buf = Vec::new(); buf.extend_from_slice(&msg); let ct = hex!("c2ef328e5c71c83b"); let tag = hex!("843122130f7364b761e0b97427e3df28"); @@ -108,7 +108,7 @@ let msg = hex!("010000000000000000000000"); let ct = hex!("9aab2aeb3faa0a34aea8e2b1"); let tag = hex!("8ca50da9ae6559e48fd10f6e5c9ca17e"); - let mut buf = BytesMut::from(msg.as_slice()); + let mut buf = Vec::from(msg.as_slice()); assert!(aes.encrypt(&mut buf, b"", &nonce).is_ok()); assert_eq!(&buf[..12], &ct); assert_eq!(&buf[12..], &tag);
diff --git a/nearby/crypto/crypto_provider/src/lib.rs b/nearby/crypto/crypto_provider/src/lib.rs index a61370c..bc6d4d2 100644 --- a/nearby/crypto/crypto_provider/src/lib.rs +++ b/nearby/crypto/crypto_provider/src/lib.rs
@@ -87,8 +87,18 @@ /// Returns an instance of the rng fn new() -> Self; - ///Return the next random u64 + /// Return the next random u64 fn next_u64(&mut self) -> u64; + + /// Fill dest with random data + fn fill(&mut self, dest: &mut [u8]); + + /// Generate a random byte + fn gen<U8>(&mut self) -> u8 { + let mut arr = [0u8; 1]; + self.fill(&mut arr); + arr[0] + } } /// If impls want to opt out of passing a Rng they can simply use `()` for the Rng associated type @@ -98,6 +108,10 @@ fn next_u64(&mut self) -> u64 { unimplemented!() } + + fn fill(&mut self, _dest: &mut [u8]) { + unimplemented!() + } } use crate::aes::{Aes128Key, Aes256Key};
diff --git a/nearby/crypto/crypto_provider_boringssl/Cargo.lock b/nearby/crypto/crypto_provider_boringssl/Cargo.lock index c668bbf..4a8327d 100644 --- a/nearby/crypto/crypto_provider_boringssl/Cargo.lock +++ b/nearby/crypto/crypto_provider_boringssl/Cargo.lock
@@ -26,12 +26,6 @@ version = "0.1.0" [[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" - -[[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -41,7 +35,6 @@ name = "crypto_provider" version = "0.1.0" dependencies = [ - "bytes", "hex", "hex-literal", "rand",
diff --git a/nearby/crypto/crypto_provider_boringssl/src/lib.rs b/nearby/crypto/crypto_provider_boringssl/src/lib.rs index a7e78d0..c8c466d 100644 --- a/nearby/crypto/crypto_provider_boringssl/src/lib.rs +++ b/nearby/crypto/crypto_provider_boringssl/src/lib.rs
@@ -24,6 +24,7 @@ //! Crate which provides impls for CryptoProvider backed by BoringSSL. use bssl_crypto::digest::{Sha256, Sha512}; +use bssl_crypto::rand::rand_bytes; use crypto_provider::{CryptoProvider, CryptoRng}; use crypto_provider_stubs::*; @@ -72,7 +73,11 @@ fn next_u64(&mut self) -> u64 { let mut buf = [0; 8]; - bssl_crypto::rand::rand_bytes(&mut buf); + rand_bytes(&mut buf); u64::from_be_bytes(buf) } + + fn fill(&mut self, dest: &mut [u8]) { + rand_bytes(dest) + } }
diff --git a/nearby/crypto/crypto_provider_openssl/src/lib.rs b/nearby/crypto/crypto_provider_openssl/src/lib.rs index 8da3cb6..8930199 100644 --- a/nearby/crypto/crypto_provider_openssl/src/lib.rs +++ b/nearby/crypto/crypto_provider_openssl/src/lib.rs
@@ -99,6 +99,10 @@ rand_bytes(&mut buf).unwrap(); u64::from_be_bytes(buf) } + + fn fill(&mut self, dest: &mut [u8]) { + rand_bytes(dest).expect("Error in generating random bytes") + } } #[cfg(test)]
diff --git a/nearby/crypto/crypto_provider_rustcrypto/src/aes/gcm_siv.rs b/nearby/crypto/crypto_provider_rustcrypto/src/aes/gcm_siv.rs index d5c655b..98eca08 100644 --- a/nearby/crypto/crypto_provider_rustcrypto/src/aes/gcm_siv.rs +++ b/nearby/crypto/crypto_provider_rustcrypto/src/aes/gcm_siv.rs
@@ -13,8 +13,10 @@ // limitations under the License. use aes_gcm_siv::{AeadInPlace, Aes128GcmSiv, Aes256GcmSiv, KeyInit, Nonce}; +extern crate alloc; +use alloc::vec::Vec; -use crypto_provider::aes::gcm_siv::{bytes, GcmSivError}; +use crypto_provider::aes::gcm_siv::GcmSivError; use crypto_provider::aes::{Aes128Key, Aes256Key, AesKey}; pub struct AesGcmSiv128(Aes128GcmSiv); @@ -26,23 +28,13 @@ Self(Aes128GcmSiv::new(key.as_slice().into())) } - fn encrypt( - &self, - data: &mut bytes::BytesMut, - aad: &[u8], - nonce: &[u8], - ) -> Result<(), GcmSivError> { + fn encrypt(&self, data: &mut Vec<u8>, aad: &[u8], nonce: &[u8]) -> Result<(), GcmSivError> { self.0 .encrypt_in_place(Nonce::from_slice(nonce), aad, data) .map_err(|_| GcmSivError::EncryptOutBufferTooSmall) } - fn decrypt( - &self, - data: &mut bytes::BytesMut, - aad: &[u8], - nonce: &[u8], - ) -> Result<(), GcmSivError> { + fn decrypt(&self, data: &mut Vec<u8>, aad: &[u8], nonce: &[u8]) -> Result<(), GcmSivError> { self.0 .decrypt_in_place(Nonce::from_slice(nonce), aad, data) .map_err(|_| GcmSivError::DecryptTagDoesNotMatch) @@ -58,23 +50,13 @@ Self(Aes256GcmSiv::new(key.as_slice().into())) } - fn encrypt( - &self, - data: &mut bytes::BytesMut, - aad: &[u8], - nonce: &[u8], - ) -> Result<(), GcmSivError> { + fn encrypt(&self, data: &mut Vec<u8>, aad: &[u8], nonce: &[u8]) -> Result<(), GcmSivError> { self.0 .encrypt_in_place(Nonce::from_slice(nonce), aad, data) .map_err(|_| GcmSivError::EncryptOutBufferTooSmall) } - fn decrypt( - &self, - data: &mut bytes::BytesMut, - aad: &[u8], - nonce: &[u8], - ) -> Result<(), GcmSivError> { + fn decrypt(&self, data: &mut Vec<u8>, aad: &[u8], nonce: &[u8]) -> Result<(), GcmSivError> { self.0 .decrypt_in_place(Nonce::from_slice(nonce), aad, data) .map_err(|_| GcmSivError::DecryptTagDoesNotMatch)
diff --git a/nearby/crypto/crypto_provider_rustcrypto/src/lib.rs b/nearby/crypto/crypto_provider_rustcrypto/src/lib.rs index 9145233..72ca033 100644 --- a/nearby/crypto/crypto_provider_rustcrypto/src/lib.rs +++ b/nearby/crypto/crypto_provider_rustcrypto/src/lib.rs
@@ -43,7 +43,7 @@ use cfg_if::cfg_if; use core::{fmt::Debug, marker::PhantomData}; -use rand::{RngCore, SeedableRng}; +use rand::{Rng, RngCore, SeedableRng}; use rand_core::CryptoRng; use subtle::ConstantTimeEq; @@ -109,6 +109,10 @@ fn next_u64(&mut self) -> u64 { self.0.next_u64() } + + fn fill(&mut self, dest: &mut [u8]) { + self.0.fill(dest) + } } #[cfg(test)]
diff --git a/nearby/presence/ldt/Cargo.toml b/nearby/presence/ldt/Cargo.toml index 56a6dac..8f2461e 100644 --- a/nearby/presence/ldt/Cargo.toml +++ b/nearby/presence/ldt/Cargo.toml
@@ -5,7 +5,7 @@ publish.workspace = true [dependencies] -rand.workspace = true +crypto_provider.workspace = true ldt_tbc.workspace = true [dev-dependencies] @@ -15,6 +15,7 @@ test_helper.workspace = true xts_aes.workspace = true +rand.workspace = true rand_pcg.workspace = true base64.workspace = true clap.workspace = true
diff --git a/nearby/presence/ldt/benches/ldt_scan.rs b/nearby/presence/ldt/benches/ldt_scan.rs index 31f669f..f6c5a50 100644 --- a/nearby/presence/ldt/benches/ldt_scan.rs +++ b/nearby/presence/ldt/benches/ldt_scan.rs
@@ -13,13 +13,13 @@ // limitations under the License. use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use crypto_provider::{CryptoProvider, CryptoRng}; use crypto_provider_rustcrypto::RustCrypto; use ctr::cipher::{KeyIvInit as _, StreamCipher as _, StreamCipherSeek as _}; use ldt::{ DefaultPadder, LdtDecryptCipher, LdtEncryptCipher, LdtKey, Mix, Padder, Swap, XorPadder, }; use ldt_tbc::TweakableBlockCipher; -use rand::SeedableRng as _; use sha2::Digest as _; use std::marker; use subtle::ConstantTimeEq as _; @@ -126,15 +126,15 @@ keys: usize, plaintext_len: usize, ) -> LdtBenchState<F::Cipher, D> { - let mut rng = rand::rngs::StdRng::from_entropy(); + let mut rng = <RustCrypto as CryptoProvider>::CryptoRng::new(); let scenarios = (0..keys) - .map(|_| random_ldt_scenario::<_, _, D>(&factory, &mut rng, plaintext_len)) + .map(|_| random_ldt_scenario::<RustCrypto, _, D>(&factory, &mut rng, plaintext_len)) .collect::<Vec<_>>(); LdtBenchState { scenarios, - unfindable_ciphertext: random_vec(&mut rng, plaintext_len), + unfindable_ciphertext: random_vec::<RustCrypto>(&mut rng, plaintext_len), decrypt_buf: Vec::with_capacity(plaintext_len), } } @@ -144,13 +144,13 @@ plaintext_prefix_hash: D::Output, } -fn random_ldt_scenario<R: rand::Rng + rand::CryptoRng, F: ScanCipherFactory, D: ScanDigest>( +fn random_ldt_scenario<C: CryptoProvider, F: ScanCipherFactory, D: ScanDigest>( factory: &F, - rng: &mut R, + rng: &mut C::CryptoRng, plaintext_len: usize, ) -> ScanScenario<F::Cipher, D> { - let cipher = factory.build_cipher(rng); - let plaintext = random_vec(rng, plaintext_len); + let cipher = factory.build_cipher::<C>(rng); + let plaintext = random_vec::<C>(rng, plaintext_len); let mut hasher = D::new(); let mut plaintext_prefix_hash = D::new_output(); hasher.update(&plaintext[..MATCH_LEN]); @@ -162,7 +162,7 @@ } } -fn random_vec<R: rand::Rng>(rng: &mut R, len: usize) -> Vec<u8> { +fn random_vec<C: CryptoProvider>(rng: &mut C::CryptoRng, len: usize) -> Vec<u8> { let mut bytes = Vec::<u8>::new(); bytes.extend((0..len).map(|_| rng.gen::<u8>())); bytes @@ -176,7 +176,7 @@ trait ScanCipherFactory { type Cipher: ScanCipher; - fn build_cipher<R: rand::Rng + rand::CryptoRng>(&self, key_rng: &mut R) -> Self::Cipher; + fn build_cipher<C: CryptoProvider>(&self, key_rng: &mut C::CryptoRng) -> Self::Cipher; } /// A wrapper that lets us avoid percolating the need to specify a bogus and type-confused padder @@ -231,29 +231,29 @@ { type Cipher = LdtScanCipher<B, T, M, P>; - fn build_cipher<R: rand::Rng + rand::CryptoRng>(&self, key_rng: &mut R) -> Self::Cipher { - let key: LdtKey<T::Key> = LdtKey::from_random(key_rng); + fn build_cipher<C: CryptoProvider>(&self, key_rng: &mut C::CryptoRng) -> Self::Cipher { + let key: LdtKey<T::Key> = LdtKey::from_random::<C>(key_rng); LdtScanCipher { ldt_enc: LdtEncryptCipher::new(&key), ldt_dec: LdtDecryptCipher::new(&key), - padder: P::generate(key_rng), + padder: P::generate::<C>(key_rng), } } } /// A helper trait for making padders from an RNG trait RandomPadder { - fn generate<R: rand::Rng>(rng: &mut R) -> Self; + fn generate<C: CryptoProvider>(rng: &mut C::CryptoRng) -> Self; } impl RandomPadder for DefaultPadder { - fn generate<R: rand::Rng>(_rng: &mut R) -> Self { + fn generate<C: CryptoProvider>(_rng: &mut C::CryptoRng) -> Self { Self::default() } } impl<const T: usize> RandomPadder for XorPadder<T> { - fn generate<R: rand::Rng>(rng: &mut R) -> Self { + fn generate<C: CryptoProvider>(rng: &mut C::CryptoRng) -> Self { let mut salt = [0_u8; T]; rng.fill(&mut salt[..]); salt.into() @@ -279,7 +279,7 @@ impl ScanCipherFactory for AesCtrFactory { type Cipher = Aes128Ctr64LE; - fn build_cipher<R: rand::Rng>(&self, key_rng: &mut R) -> Self::Cipher { + fn build_cipher<C: CryptoProvider>(&self, key_rng: &mut C::CryptoRng) -> Self::Cipher { let mut key = [0_u8; 16]; key_rng.fill(&mut key);
diff --git a/nearby/presence/ldt/examples/gen_ldt_xor_pad_test_vectors.rs b/nearby/presence/ldt/examples/gen_ldt_xor_pad_test_vectors.rs index 1b6af2d..a36d8d8 100644 --- a/nearby/presence/ldt/examples/gen_ldt_xor_pad_test_vectors.rs +++ b/nearby/presence/ldt/examples/gen_ldt_xor_pad_test_vectors.rs
@@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -use crypto_provider::aes; use crypto_provider::aes::BLOCK_SIZE; +use crypto_provider::{aes, CryptoProvider, CryptoRng}; use crypto_provider_rustcrypto::RustCrypto; use ldt::{LdtEncryptCipher, LdtKey, Swap, XorPadder}; use rand::{Rng as _, SeedableRng as _}; @@ -23,13 +23,14 @@ fn main() { let mut rng = rand::rngs::StdRng::from_entropy(); + let mut cp_rng = <RustCrypto as CryptoProvider>::CryptoRng::new(); let mut array = Vec::<serde_json::Value>::new(); for _ in 0..1_000 { let len = rng.gen_range(BLOCK_SIZE..BLOCK_SIZE * 2); - let plaintext = random_vec(&mut rng, len); - let key = LdtKey::from_random(&mut rng); - let pad_xor: [u8; aes::BLOCK_SIZE] = random_bytes(&mut rng); + let plaintext = random_vec_rc(&mut rng, len); + let key = LdtKey::from_random::<RustCrypto>(&mut cp_rng); + let pad_xor: [u8; aes::BLOCK_SIZE] = random_bytes_rc(&mut rng); let ldt_enc = LdtEncryptCipher::<BLOCK_SIZE, XtsAes128<RustCrypto>, Swap>::new(&key);
diff --git a/nearby/presence/ldt/examples/ldt_benchmark.rs b/nearby/presence/ldt/examples/ldt_benchmark.rs index f6793e1..ba04ed7 100644 --- a/nearby/presence/ldt/examples/ldt_benchmark.rs +++ b/nearby/presence/ldt/examples/ldt_benchmark.rs
@@ -18,6 +18,7 @@ use crypto_provider_rustcrypto::RustCrypto; use ldt::{LdtDecryptCipher, LdtEncryptCipher, LdtKey, Mix, Swap, XorPadder}; +use crypto_provider::{CryptoProvider, CryptoRng}; use ldt_tbc::TweakableBlockCipher; use rand::{distributions, seq::SliceRandom, Rng as _, SeedableRng as _}; use sha2::digest::{generic_array, Digest as _}; @@ -29,11 +30,13 @@ fn main() { let args = Args::parse(); - let mut rng = rand::rngs::StdRng::from_entropy(); + let mut rng = <RustCrypto as CryptoProvider>::CryptoRng::new(); // generate a suitable number of random keys let scenarios = (0..args.keys) - .map(|_| random_ldt_scenario::<16, XtsAes128<RustCrypto>, Swap, _>(&mut rng, args.len)) + .map(|_| { + random_ldt_scenario::<16, XtsAes128<RustCrypto>, Swap, RustCrypto>(&mut rng, args.len) + }) .collect::<Vec<_>>(); let padder = XorPadder::from([0x42; crypto_provider::aes::BLOCK_SIZE]); @@ -48,7 +51,7 @@ .collect::<Vec<_>>(); let not_found_distrib = distributions::Uniform::from(0_f64..=100_f64); - let unfindable_ciphertext = random_vec(&mut rng, args.len); + let unfindable_ciphertext = random_vec::<RustCrypto>(&mut rng, args.len); let mut histogram = hdrhistogram::Histogram::<u64>::new(3).unwrap(); let mut buf = Vec::new(); @@ -56,12 +59,13 @@ let mut hasher = sha2::Sha256::new(); let mut hash_output = generic_array::GenericArray::default(); + let mut rc_rng = rand::rngs::StdRng::from_entropy(); let found = (0..args.trials) .map(|_| { - let ciphertext = if rng.sample(not_found_distrib) <= args.not_found_pct as f64 { + let ciphertext = if rc_rng.sample(not_found_distrib) <= args.not_found_pct as f64 { &unfindable_ciphertext } else { - ciphertexts.choose(&mut rng).unwrap() + ciphertexts.choose(&mut rc_rng).unwrap() }; let start = time::Instant::now(); @@ -133,19 +137,14 @@ plaintext_prefix_hash: [u8; 32], } -fn random_ldt_scenario< - const B: usize, - T: TweakableBlockCipher<B>, - M: Mix, - R: rand::Rng + rand::CryptoRng, ->( - rng: &mut R, +fn random_ldt_scenario<const B: usize, T: TweakableBlockCipher<B>, M: Mix, C: CryptoProvider>( + rng: &mut C::CryptoRng, plaintext_len: usize, ) -> LdtScenario<B, T, M> { - let ldt_key: LdtKey<T::Key> = LdtKey::from_random(rng); + let ldt_key: LdtKey<T::Key> = LdtKey::from_random::<C>(rng); let ldt_enc = LdtEncryptCipher::new(&ldt_key); let ldt_dec = LdtDecryptCipher::new(&ldt_key); - let plaintext = random_vec(rng, plaintext_len); + let plaintext = random_vec::<C>(rng, plaintext_len); let mut hasher = sha2::Sha256::new(); let mut plaintext_prefix_hash = generic_array::GenericArray::default();
diff --git a/nearby/presence/ldt/examples/ldt_prp.rs b/nearby/presence/ldt/examples/ldt_prp.rs index 0e7bcf6..31276b7 100644 --- a/nearby/presence/ldt/examples/ldt_prp.rs +++ b/nearby/presence/ldt/examples/ldt_prp.rs
@@ -22,10 +22,11 @@ //! histogram of how many bits were flipped in the entire plaintext. use clap::{self, Parser as _}; use crypto_provider::aes::BLOCK_SIZE; +use crypto_provider::{CryptoProvider, CryptoRng}; use crypto_provider_rustcrypto::RustCrypto; use ldt::*; use ldt_tbc::TweakableBlockCipher; -use rand::{distributions, Rng as _, SeedableRng as _}; +use rand::{distributions, Rng as _}; use rand_ext::*; use xts_aes::{XtsAes128, XtsAes256}; @@ -37,35 +38,37 @@ } fn run_trials(args: Args) { - let mut rng = rand::rngs::StdRng::from_entropy(); + let mut rng = seeded_rng(); let mut histo = (0..=100).map(|_| 0_u64).collect::<Vec<_>>(); let mut undetected_changes = 0_u64; + let mut cp_rng = <RustCrypto as CryptoProvider>::CryptoRng::new(); for _ in 0..args.trials { - let (percent, ok) = if rng.gen() { - do_trial( - LdtEncryptCipher::<16, XtsAes128<RustCrypto>, Swap>::new(&LdtKey::from_random( + let (percent, ok) = + if rng.gen() { + do_trial( + LdtEncryptCipher::<16, XtsAes128<RustCrypto>, Swap>::new( + &LdtKey::from_random::<RustCrypto>(&mut cp_rng), + ), + LdtDecryptCipher::<16, XtsAes128<RustCrypto>, Swap>::new( + &LdtKey::from_random::<RustCrypto>(&mut cp_rng), + ), &mut rng, - )), - LdtDecryptCipher::<16, XtsAes128<RustCrypto>, Swap>::new(&LdtKey::from_random( + DefaultPadder::default(), + &args, + ) + } else { + do_trial( + LdtEncryptCipher::<16, XtsAes256<RustCrypto>, Swap>::new( + &LdtKey::from_random::<RustCrypto>(&mut cp_rng), + ), + LdtDecryptCipher::<16, XtsAes256<RustCrypto>, Swap>::new( + &LdtKey::from_random::<RustCrypto>(&mut cp_rng), + ), &mut rng, - )), - &mut rng, - DefaultPadder::default(), - &args, - ) - } else { - do_trial( - LdtEncryptCipher::<16, XtsAes256<RustCrypto>, Swap>::new(&LdtKey::from_random( - &mut rng, - )), - LdtDecryptCipher::<16, XtsAes256<RustCrypto>, Swap>::new(&LdtKey::from_random( - &mut rng, - )), - &mut rng, - DefaultPadder::default(), - &args, - ) - }; + DefaultPadder::default(), + &args, + ) + }; histo[percent] += 1; if !ok { @@ -105,7 +108,7 @@ ) -> (usize, bool) { let plaintext_len_range = distributions::Uniform::new_inclusive(BLOCK_SIZE, BLOCK_SIZE * 2 - 1); let len = rng.sample(plaintext_len_range); - let plaintext = random_vec(rng, len); + let plaintext = random_vec_rc(rng, len); let mut ciphertext = plaintext.clone(); ldt_enc.encrypt(&mut ciphertext, &padder).unwrap();
diff --git a/nearby/presence/ldt/fuzz/Cargo.lock b/nearby/presence/ldt/fuzz/Cargo.lock index d0a7fc3..a007fe8 100644 --- a/nearby/presence/ldt/fuzz/Cargo.lock +++ b/nearby/presence/ldt/fuzz/Cargo.lock
@@ -54,9 +54,9 @@ [[package]] name = "base16ct" -version = "0.2.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" [[package]] name = "block-buffer" @@ -133,9 +133,9 @@ [[package]] name = "crypto-bigint" -version = "0.5.1" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ "generic-array", "rand_core", @@ -157,9 +157,6 @@ [[package]] name = "crypto_provider" version = "0.1.0" -dependencies = [ - "bytes", -] [[package]] name = "crypto_provider_rustcrypto" @@ -210,12 +207,11 @@ [[package]] name = "der" -version = "0.7.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ "const-oid", - "zeroize", ] [[package]] @@ -263,12 +259,13 @@ [[package]] name = "elliptic-curve" -version = "0.13.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ "base16ct", "crypto-bigint", + "der", "digest", "ff", "generic-array", @@ -282,9 +279,9 @@ [[package]] name = "ff" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ "rand_core", "subtle", @@ -304,7 +301,6 @@ dependencies = [ "typenum", "version_check", - "zeroize", ] [[package]] @@ -320,9 +316,9 @@ [[package]] name = "group" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff", "rand_core", @@ -370,8 +366,8 @@ name = "ldt" version = "0.1.0" dependencies = [ + "crypto_provider", "ldt_tbc", - "rand", ] [[package]] @@ -389,7 +385,7 @@ name = "ldt_tbc" version = "0.1.0" dependencies = [ - "rand", + "crypto_provider", ] [[package]] @@ -429,9 +425,9 @@ [[package]] name = "p256" -version = "0.13.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47" +checksum = "49c124b3cbce43bcbac68c58ec181d98ed6cc7e6d0aa7c3ba97b2563410b0e55" dependencies = [ "elliptic-curve", "primeorder", @@ -473,9 +469,9 @@ [[package]] name = "primeorder" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0" +checksum = "0b54f7131b3dba65a2f414cf5bd25b66d4682e4608610668eae785750ba4c5b2" dependencies = [ "elliptic-curve", ] @@ -528,9 +524,9 @@ [[package]] name = "sec1" -version = "0.7.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct", "der",
diff --git a/nearby/presence/ldt/src/lib.rs b/nearby/presence/ldt/src/lib.rs index 8dc4068..d888164 100644 --- a/nearby/presence/ldt/src/lib.rs +++ b/nearby/presence/ldt/src/lib.rs
@@ -24,6 +24,7 @@ )] use core::{fmt, marker::PhantomData}; +use crypto_provider::CryptoProvider; use ldt_tbc::{ConcatenatedKeyArray, TweakableBlockCipher, TweakableBlockCipherKey}; use ldt_tbc::{TweakableBlockCipherDecrypter, TweakableBlockCipherEncrypter}; @@ -210,8 +211,8 @@ } /// Build a random key from a secure RNG. - pub fn from_random<R: rand::Rng + rand::CryptoRng>(rng: &mut R) -> Self { - Self::from_concatenated(&ConcatenatedKeyArray::from_random(rng)) + pub fn from_random<C: CryptoProvider>(rng: &mut C::CryptoRng) -> Self { + Self::from_concatenated(&ConcatenatedKeyArray::from_random::<C>(rng)) } /// Returns the key material as a concatenated array with the contents of the two tweakable
diff --git a/nearby/presence/ldt/tests/ldt_roundtrip.rs b/nearby/presence/ldt/tests/ldt_roundtrip.rs index b225399..6f5cada 100644 --- a/nearby/presence/ldt/tests/ldt_roundtrip.rs +++ b/nearby/presence/ldt/tests/ldt_roundtrip.rs
@@ -13,22 +13,25 @@ // limitations under the License. use crypto_provider::aes::BLOCK_SIZE; +use crypto_provider::{CryptoProvider, CryptoRng}; use crypto_provider_rustcrypto::RustCrypto; use ldt::*; use ldt_tbc::TweakableBlockCipher; +use rand::rngs::StdRng; use rand::{self, distributions, Rng as _, SeedableRng as _}; use rand_ext::{random_bytes, random_vec}; use xts_aes::{XtsAes128, XtsAes256}; #[test] fn roundtrip_normal_padder() { - let mut rng = rand::rngs::StdRng::from_entropy(); + let mut rng = <RustCrypto as CryptoProvider>::CryptoRng::new(); + let mut rc_rng = rand::rngs::StdRng::from_entropy(); let plaintext_len_range = distributions::Uniform::new_inclusive(BLOCK_SIZE, BLOCK_SIZE * 2 - 1); for _ in 0..100_000 { - if rng.gen() { - let ldt_key = LdtKey::from_random(&mut rng); - do_roundtrip( + if rc_rng.gen() { + let ldt_key = LdtKey::from_random::<RustCrypto>(&mut rng); + do_roundtrip::<16, _, _, _, RustCrypto>( LdtEncryptCipher::<16, XtsAes128<RustCrypto>, Swap>::new(&ldt_key), LdtDecryptCipher::<16, XtsAes128<RustCrypto>, Swap>::new(&ldt_key), &DefaultPadder::default(), @@ -36,8 +39,8 @@ &plaintext_len_range, ) } else { - let ldt_key = LdtKey::from_random(&mut rng); - do_roundtrip( + let ldt_key = LdtKey::from_random::<RustCrypto>(&mut rng); + do_roundtrip::<16, _, _, _, RustCrypto>( LdtEncryptCipher::<16, XtsAes256<RustCrypto>, Swap>::new(&ldt_key), LdtDecryptCipher::<16, XtsAes256<RustCrypto>, Swap>::new(&ldt_key), &DefaultPadder::default(), @@ -50,17 +53,18 @@ #[test] fn roundtrip_xor_padder() { - let mut rng = rand::rngs::StdRng::from_entropy(); + let mut rng = <RustCrypto as CryptoProvider>::CryptoRng::new(); + let mut rc_rng = rand::rngs::StdRng::from_entropy(); // 2 bytes smaller because we're using a 2 byte salt let plaintext_len_range = distributions::Uniform::new_inclusive(BLOCK_SIZE, BLOCK_SIZE * 2 - 1 - 2); for _ in 0..100_000 { - let padder: XorPadder<BLOCK_SIZE> = random_bytes(&mut rng).into(); + let padder: XorPadder<BLOCK_SIZE> = random_bytes::<BLOCK_SIZE, RustCrypto>(&mut rng).into(); - if rng.gen() { - let ldt_key = LdtKey::from_random(&mut rng); - do_roundtrip( + if rc_rng.gen() { + let ldt_key = LdtKey::from_random::<RustCrypto>(&mut rng); + do_roundtrip::<16, _, _, _, RustCrypto>( LdtEncryptCipher::<16, XtsAes128<RustCrypto>, Swap>::new(&ldt_key), LdtDecryptCipher::<16, XtsAes128<RustCrypto>, Swap>::new(&ldt_key), &padder, @@ -68,8 +72,8 @@ &plaintext_len_range, ) } else { - let ldt_key = LdtKey::from_random(&mut rng); - do_roundtrip( + let ldt_key = LdtKey::from_random::<RustCrypto>(&mut rng); + do_roundtrip::<16, _, _, _, RustCrypto>( LdtEncryptCipher::<16, XtsAes256<RustCrypto>, Swap>::new(&ldt_key), LdtDecryptCipher::<16, XtsAes256<RustCrypto>, Swap>::new(&ldt_key), &padder, @@ -85,16 +89,17 @@ T: TweakableBlockCipher<B>, P: Padder<B, T>, M: Mix, - R: rand::Rng, + C: CryptoProvider, >( ldt_enc: LdtEncryptCipher<B, T, M>, ldt_dec: LdtDecryptCipher<B, T, M>, padder: &P, - rng: &mut R, + rng: &mut C::CryptoRng, plaintext_len_range: &distributions::Uniform<usize>, ) { - let len = rng.sample(plaintext_len_range); - let plaintext = random_vec(rng, len); + let mut rng_rc = StdRng::from_entropy(); + let len = rng_rc.sample(plaintext_len_range); + let plaintext = random_vec::<C>(rng, len); let mut ciphertext = plaintext.clone(); ldt_enc.encrypt(&mut ciphertext, padder).unwrap();
diff --git a/nearby/presence/ldt_np_adv/fuzz/Cargo.lock b/nearby/presence/ldt_np_adv/fuzz/Cargo.lock index e02e7cc..3bfc3fd 100644 --- a/nearby/presence/ldt_np_adv/fuzz/Cargo.lock +++ b/nearby/presence/ldt_np_adv/fuzz/Cargo.lock
@@ -58,9 +58,9 @@ [[package]] name = "base16ct" -version = "0.2.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" [[package]] name = "block-buffer" @@ -137,9 +137,9 @@ [[package]] name = "crypto-bigint" -version = "0.5.1" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ "generic-array", "rand_core", @@ -161,9 +161,6 @@ [[package]] name = "crypto_provider" version = "0.1.0" -dependencies = [ - "bytes", -] [[package]] name = "crypto_provider_rustcrypto" @@ -214,12 +211,11 @@ [[package]] name = "der" -version = "0.7.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ "const-oid", - "zeroize", ] [[package]] @@ -267,12 +263,13 @@ [[package]] name = "elliptic-curve" -version = "0.13.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ "base16ct", "crypto-bigint", + "der", "digest", "ff", "generic-array", @@ -286,9 +283,9 @@ [[package]] name = "ff" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ "rand_core", "subtle", @@ -308,7 +305,6 @@ dependencies = [ "typenum", "version_check", - "zeroize", ] [[package]] @@ -324,9 +320,9 @@ [[package]] name = "group" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff", "rand_core", @@ -374,8 +370,8 @@ name = "ldt" version = "0.1.0" dependencies = [ + "crypto_provider", "ldt_tbc", - "rand", ] [[package]] @@ -407,7 +403,7 @@ name = "ldt_tbc" version = "0.1.0" dependencies = [ - "rand", + "crypto_provider", ] [[package]] @@ -456,9 +452,9 @@ [[package]] name = "p256" -version = "0.13.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47" +checksum = "49c124b3cbce43bcbac68c58ec181d98ed6cc7e6d0aa7c3ba97b2563410b0e55" dependencies = [ "elliptic-curve", "primeorder", @@ -500,9 +496,9 @@ [[package]] name = "primeorder" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0" +checksum = "0b54f7131b3dba65a2f414cf5bd25b66d4682e4608610668eae785750ba4c5b2" dependencies = [ "elliptic-curve", ] @@ -555,9 +551,9 @@ [[package]] name = "sec1" -version = "0.7.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct", "der",
diff --git a/nearby/presence/ldt_np_adv/src/np_adv_test_vectors.rs b/nearby/presence/ldt_np_adv/src/np_adv_test_vectors.rs index 46c9968..6460e34 100644 --- a/nearby/presence/ldt_np_adv/src/np_adv_test_vectors.rs +++ b/nearby/presence/ldt_np_adv/src/np_adv_test_vectors.rs
@@ -19,15 +19,14 @@ )] extern crate std; - use crate::{ build_np_adv_decrypter_from_key_seed, salt_padder, LdtEncrypterXtsAes128, LegacySalt, NP_LEGACY_METADATA_KEY_LEN, }; use anyhow::anyhow; use crypto_provider_rustcrypto::RustCrypto; -use rand::Rng as _; -use rand_ext::{random_vec, seeded_rng}; +use rand::Rng; +use rand_ext::{random_vec_rc, seeded_rng}; use serde_json::json; use std::vec::Vec; use std::{fs, io::Read as _, println, string::String}; @@ -94,7 +93,7 @@ for _ in 0..1_000 { let len = rng.gen_range(crypto_provider::aes::BLOCK_SIZE..crypto_provider::aes::BLOCK_SIZE * 2); - let plaintext = random_vec(&mut rng, len); + let plaintext = random_vec_rc(&mut rng, len); let key_seed: [u8; 32] = rng.gen(); let hkdf = np_hkdf::NpKeySeedHkdf::<RustCrypto>::new(&key_seed);
diff --git a/nearby/presence/ldt_np_adv/src/tests.rs b/nearby/presence/ldt_np_adv/src/tests.rs index 5f09e33..653e145 100644 --- a/nearby/presence/ldt_np_adv/src/tests.rs +++ b/nearby/presence/ldt_np_adv/src/tests.rs
@@ -26,17 +26,18 @@ NP_LEGACY_METADATA_KEY_LEN, }; use alloc::vec::Vec; -use crypto_provider::CryptoProvider; +use crypto_provider::{CryptoProvider, CryptoRng}; use crypto_provider_rustcrypto::RustCrypto; use ldt::{DefaultPadder, LdtError, LdtKey, XorPadder}; use np_hkdf::NpKeySeedHkdf; -use rand_ext::{random_vec, seeded_rng}; +use rand::Rng; +use rand_ext::{random_bytes, random_vec, seeded_rng}; #[test] fn decrypt_matches_correct_ciphertext() { - let mut rng = seeded_rng(); + let mut rng = CryptoRng::new(); for _ in 0..1_000 { - let test_state = make_test_components::<_, RustCrypto>(&mut rng); + let test_state = make_test_components::<RustCrypto>(&mut rng); let cipher = build_np_adv_decrypter_from_key_seed(&test_state.hkdf, test_state.hmac); let decrypted = cipher @@ -49,9 +50,9 @@ #[test] fn decrypt_doesnt_match_when_ciphertext_mangled() { - let mut rng = seeded_rng(); + let mut rng = CryptoRng::new(); for _ in 0..1_000 { - let mut test_state = make_test_components::<_, RustCrypto>(&mut rng); + let mut test_state = make_test_components::<RustCrypto>(&mut rng); // mangle the ciphertext test_state.ciphertext[0] ^= 0xAA; @@ -66,9 +67,9 @@ #[test] fn decrypt_doesnt_match_when_plaintext_doesnt_match_mac() { - let mut rng = seeded_rng(); + let mut rng = CryptoRng::new(); for _ in 0..1_000 { - let mut test_state = make_test_components::<_, RustCrypto>(&mut rng); + let mut test_state = make_test_components::<RustCrypto>(&mut rng); // mangle the mac test_state.hmac[0] ^= 0xAA; @@ -84,9 +85,9 @@ #[test] #[allow(deprecated)] fn encrypt_works() { - let mut rng = seeded_rng(); + let mut rng = CryptoRng::new(); for _ in 0..1_000 { - let test_state = make_test_components::<_, RustCrypto>(&mut rng); + let test_state = make_test_components::<RustCrypto>(&mut rng); let cipher = test_state.ldt_enc; @@ -158,18 +159,21 @@ } /// Returns (plaintext, ciphertext, padder, hmac key, MAC, ldt) -fn make_test_components<R: rand::Rng, C: crypto_provider::CryptoProvider>( - rng: &mut R, +fn make_test_components<C: crypto_provider::CryptoProvider>( + rng: &mut C::CryptoRng, ) -> LdtAdvTestComponents<C> { // [1, 2) blocks of XTS-AES - let payload_len = rng + let mut rc_rng = seeded_rng(); + let payload_len = rc_rng .gen_range(crypto_provider::aes::BLOCK_SIZE..=(crypto_provider::aes::BLOCK_SIZE * 2 - 1)); - let plaintext = random_vec(rng, payload_len); + let plaintext = random_vec::<C>(rng, payload_len); - let salt = LegacySalt { bytes: rng.gen() }; + let salt = LegacySalt { + bytes: random_bytes::<2, C>(rng), + }; let padder = salt_padder::<16, C>(salt); - let key_seed: [u8; 32] = rng.gen(); + let key_seed: [u8; 32] = random_bytes::<32, C>(rng); let hkdf = np_hkdf::NpKeySeedHkdf::new(&key_seed); let ldt_key = hkdf.legacy_ldt_key(); let hmac_key = hkdf.legacy_metadata_key_hmac_key();
diff --git a/nearby/presence/ldt_np_adv_ffi/Cargo.lock b/nearby/presence/ldt_np_adv_ffi/Cargo.lock index 5deadcc..3a16c56 100644 --- a/nearby/presence/ldt_np_adv_ffi/Cargo.lock +++ b/nearby/presence/ldt_np_adv_ffi/Cargo.lock
@@ -67,9 +67,9 @@ [[package]] name = "base16ct" -version = "0.2.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" [[package]] name = "base64ct" @@ -166,9 +166,9 @@ [[package]] name = "crypto-bigint" -version = "0.5.1" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ "generic-array", "rand_core", @@ -190,9 +190,6 @@ [[package]] name = "crypto_provider" version = "0.1.0" -dependencies = [ - "bytes", -] [[package]] name = "crypto_provider_boringssl" @@ -270,6 +267,15 @@ [[package]] name = "der" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +dependencies = [ + "const-oid", +] + +[[package]] +name = "der" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0" @@ -315,12 +321,13 @@ [[package]] name = "elliptic-curve" -version = "0.13.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ "base16ct", "crypto-bigint", + "der 0.6.1", "digest", "ff", "generic-array", @@ -334,9 +341,9 @@ [[package]] name = "ff" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ "rand_core", "subtle", @@ -371,7 +378,6 @@ dependencies = [ "typenum", "version_check", - "zeroize", ] [[package]] @@ -387,9 +393,9 @@ [[package]] name = "group" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff", "rand_core", @@ -437,8 +443,8 @@ name = "ldt" version = "0.1.0" dependencies = [ + "crypto_provider", "ldt_tbc", - "rand", ] [[package]] @@ -476,7 +482,7 @@ name = "ldt_tbc" version = "0.1.0" dependencies = [ - "rand", + "crypto_provider", ] [[package]] @@ -591,9 +597,9 @@ [[package]] name = "p256" -version = "0.13.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47" +checksum = "49c124b3cbce43bcbac68c58ec181d98ed6cc7e6d0aa7c3ba97b2563410b0e55" dependencies = [ "elliptic-curve", "primeorder", @@ -621,7 +627,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d2820d87d2b008616e5c27212dd9e0e694fb4c6b522de06094106813328cb49" dependencies = [ - "der", + "der 0.7.1", "spki", ] @@ -657,9 +663,9 @@ [[package]] name = "primeorder" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0" +checksum = "0b54f7131b3dba65a2f414cf5bd25b66d4682e4608610668eae785750ba4c5b2" dependencies = [ "elliptic-curve", ] @@ -744,12 +750,12 @@ [[package]] name = "sec1" -version = "0.7.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct", - "der", + "der 0.6.1", "generic-array", "subtle", "zeroize", @@ -800,7 +806,7 @@ checksum = "c0445c905640145c7ea8c1993555957f65e7c46d0535b91ba501bc9bfc85522f" dependencies = [ "base64ct", - "der", + "der 0.7.1", ] [[package]]
diff --git a/nearby/presence/ldt_tbc/Cargo.toml b/nearby/presence/ldt_tbc/Cargo.toml index 0120c60..3c80114 100644 --- a/nearby/presence/ldt_tbc/Cargo.toml +++ b/nearby/presence/ldt_tbc/Cargo.toml
@@ -5,4 +5,4 @@ publish.workspace = true [dependencies] -rand.workspace = true \ No newline at end of file +crypto_provider.workspace = true \ No newline at end of file
diff --git a/nearby/presence/ldt_tbc/src/lib.rs b/nearby/presence/ldt_tbc/src/lib.rs index 97dc5a5..e9ef476 100644 --- a/nearby/presence/ldt_tbc/src/lib.rs +++ b/nearby/presence/ldt_tbc/src/lib.rs
@@ -23,6 +23,8 @@ //! Defining traits for an LDT specific Tweakable Block Cipher +use crypto_provider::{CryptoProvider, CryptoRng}; + /// The higher level trait defining the single block at a time Tweakable Block Cipher types. /// Holds associates types for both the [TweakableBlockCipherEncrypter] and corresponding /// [TweakableBlockCipherDecrypter] @@ -81,11 +83,11 @@ /// The array form of two concatenated tweakable block cipher keys. pub trait ConcatenatedKeyArray: Sized { /// Build a concatenated key from a secure RNG. - fn from_random<R: rand::Rng + rand::CryptoRng>(rng: &mut R) -> Self; + fn from_random<C: CryptoProvider>(rng: &mut C::CryptoRng) -> Self; } impl ConcatenatedKeyArray for [u8; 64] { - fn from_random<R: rand::Rng + rand::CryptoRng>(rng: &mut R) -> Self { + fn from_random<C: CryptoProvider>(rng: &mut C::CryptoRng) -> Self { let mut arr = [0; 64]; rng.fill(&mut arr); arr @@ -93,7 +95,7 @@ } impl ConcatenatedKeyArray for [u8; 128] { - fn from_random<R: rand::Rng + rand::CryptoRng>(rng: &mut R) -> Self { + fn from_random<C: CryptoProvider>(rng: &mut C::CryptoRng) -> Self { let mut arr = [0; 128]; rng.fill(&mut arr); arr
diff --git a/nearby/presence/np_hkdf/benches/np_hkdf.rs b/nearby/presence/np_hkdf/benches/np_hkdf.rs index 8e5cae9..54e682d 100644 --- a/nearby/presence/np_hkdf/benches/np_hkdf.rs +++ b/nearby/presence/np_hkdf/benches/np_hkdf.rs
@@ -13,15 +13,16 @@ // limitations under the License. use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use crypto_provider::{CryptoProvider, CryptoRng}; use crypto_provider_rustcrypto::RustCrypto; -use rand::Rng as _; +use rand_ext::random_bytes; pub fn build_np_hkdf(c: &mut Criterion) { - let mut rng = rand_ext::seeded_rng(); + let mut rng = <RustCrypto as CryptoProvider>::CryptoRng::new(); for &num_keys in &[1_usize, 10, 100] { c.bench_function(&format!("build {num_keys} np_hkdf from key_seed"), |b| { let keys = (0..num_keys) - .map(|_| rng.gen::<[u8; 32]>()) + .map(|_| random_bytes::<32, RustCrypto>(&mut rng)) .collect::<Vec<_>>(); b.iter(|| { for key_seed in keys.iter() { @@ -31,7 +32,11 @@ }); c.bench_function(&format!("hkdf generate {num_keys} hmac keys"), |b| { let keys = (0..num_keys) - .map(|_| np_hkdf::NpKeySeedHkdf::<RustCrypto>::new(&rng.gen::<[u8; 32]>())) + .map(|_| { + np_hkdf::NpKeySeedHkdf::<RustCrypto>::new(&random_bytes::<32, RustCrypto>( + &mut rng, + )) + }) .collect::<Vec<_>>(); b.iter(|| { for hkdf in keys.iter() { @@ -41,7 +46,11 @@ }); c.bench_function(&format!("hkdf generate {num_keys} AES keys"), |b| { let keys = (0..num_keys) - .map(|_| np_hkdf::NpKeySeedHkdf::<RustCrypto>::new(&rng.gen::<[u8; 32]>())) + .map(|_| { + np_hkdf::NpKeySeedHkdf::<RustCrypto>::new(&random_bytes::<32, RustCrypto>( + &mut rng, + )) + }) .collect::<Vec<_>>(); b.iter(|| { for hkdf in keys.iter() { @@ -51,7 +60,11 @@ }); c.bench_function(&format!("hkdf generate {num_keys} LDT keys"), |b| { let keys = (0..num_keys) - .map(|_| np_hkdf::NpKeySeedHkdf::<RustCrypto>::new(&rng.gen::<[u8; 32]>())) + .map(|_| { + np_hkdf::NpKeySeedHkdf::<RustCrypto>::new(&random_bytes::<32, RustCrypto>( + &mut rng, + )) + }) .collect::<Vec<_>>(); b.iter(|| { for hkdf in keys.iter() {
diff --git a/nearby/presence/rand_ext/Cargo.toml b/nearby/presence/rand_ext/Cargo.toml index b1414ae..bbdb5af 100644 --- a/nearby/presence/rand_ext/Cargo.toml +++ b/nearby/presence/rand_ext/Cargo.toml
@@ -5,6 +5,7 @@ publish.workspace = true [dependencies] +crypto_provider.workspace = true log.workspace = true rand = { workspace = true, features = ["std", "std_rng"] } rand_pcg.workspace = true
diff --git a/nearby/presence/rand_ext/src/lib.rs b/nearby/presence/rand_ext/src/lib.rs index 56aa197..9819c6b 100644 --- a/nearby/presence/rand_ext/src/lib.rs +++ b/nearby/presence/rand_ext/src/lib.rs
@@ -20,19 +20,34 @@ extern crate alloc; use alloc::vec::Vec; +use crypto_provider::{CryptoProvider, CryptoRng}; use log::info; pub use rand; -use rand::{Rng as _, SeedableRng as _}; +use rand::{Rng as _, SeedableRng}; -/// Returns a random vec with the provided length. -pub fn random_vec<R: rand::Rng>(rng: &mut R, len: usize) -> Vec<u8> { +/// Returns a random Vec with the provided length. +pub fn random_vec<C: CryptoProvider>(rng: &mut C::CryptoRng, len: usize) -> Vec<u8> { let mut bytes = Vec::<u8>::new(); bytes.extend((0..len).map(|_| rng.gen::<u8>())); bytes } /// Returns a random array with the provided length. -pub fn random_bytes<const B: usize, R: rand::Rng>(rng: &mut R) -> [u8; B] { +pub fn random_bytes<const B: usize, C: CryptoProvider>(rng: &mut C::CryptoRng) -> [u8; B] { + let mut bytes = [0; B]; + rng.fill(bytes.as_mut_slice()); + bytes +} + +/// Uses a RustCrypto Rng to return a random Vec with the provided length +pub fn random_vec_rc<R: rand::Rng>(rng: &mut R, len: usize) -> Vec<u8> { + let mut bytes = Vec::<u8>::new(); + bytes.extend((0..len).map(|_| rng.gen::<u8>())); + bytes +} + +/// Uses a RustCrypto Rng to return random bytes with the provided length +pub fn random_bytes_rc<const B: usize, R: rand::Rng>(rng: &mut R) -> [u8; B] { let mut bytes = [0; B]; rng.fill(bytes.as_mut_slice()); bytes
diff --git a/nearby/presence/xts_aes/fuzz/Cargo.lock b/nearby/presence/xts_aes/fuzz/Cargo.lock index a03bfe0..5408688 100644 --- a/nearby/presence/xts_aes/fuzz/Cargo.lock +++ b/nearby/presence/xts_aes/fuzz/Cargo.lock
@@ -54,9 +54,9 @@ [[package]] name = "base16ct" -version = "0.2.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" [[package]] name = "block-buffer" @@ -133,9 +133,9 @@ [[package]] name = "crypto-bigint" -version = "0.5.1" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ "generic-array", "rand_core", @@ -157,9 +157,6 @@ [[package]] name = "crypto_provider" version = "0.1.0" -dependencies = [ - "bytes", -] [[package]] name = "crypto_provider_rustcrypto" @@ -210,12 +207,11 @@ [[package]] name = "der" -version = "0.7.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ "const-oid", - "zeroize", ] [[package]] @@ -263,12 +259,13 @@ [[package]] name = "elliptic-curve" -version = "0.13.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ "base16ct", "crypto-bigint", + "der", "digest", "ff", "generic-array", @@ -282,9 +279,9 @@ [[package]] name = "ff" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ "rand_core", "subtle", @@ -304,7 +301,6 @@ dependencies = [ "typenum", "version_check", - "zeroize", ] [[package]] @@ -320,9 +316,9 @@ [[package]] name = "group" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff", "rand_core", @@ -370,7 +366,7 @@ name = "ldt_tbc" version = "0.1.0" dependencies = [ - "rand", + "crypto_provider", ] [[package]] @@ -410,9 +406,9 @@ [[package]] name = "p256" -version = "0.13.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47" +checksum = "49c124b3cbce43bcbac68c58ec181d98ed6cc7e6d0aa7c3ba97b2563410b0e55" dependencies = [ "elliptic-curve", "primeorder", @@ -454,9 +450,9 @@ [[package]] name = "primeorder" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0" +checksum = "0b54f7131b3dba65a2f414cf5bd25b66d4682e4608610668eae785750ba4c5b2" dependencies = [ "elliptic-curve", ] @@ -509,9 +505,9 @@ [[package]] name = "sec1" -version = "0.7.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct", "der",
diff --git a/nearby/scripts/build-script.sh b/nearby/scripts/build-script.sh index 7311df2..f559167 100755 --- a/nearby/scripts/build-script.sh +++ b/nearby/scripts/build-script.sh
@@ -182,7 +182,8 @@ git clone https://boringssl.googlesource.com/boringssl fi cd boringssl && mkdir -p build && cd build - cmake -G Ninja .. -DRUST_BINDINGS="$(gcc -dumpmachine)" && ninja + target=$(rustc -vV | awk '/host/ { print $2 }') + cmake -G Ninja .. -DRUST_BINDINGS="$target" && ninja # A valid Rust crate is built under `boringssl-build/boringssl/build/rust/bssl-sys` cd $projectroot/boringssl-build