diff --git a/keyserver/addons/rust-node-addon/Cargo.lock b/keyserver/addons/rust-node-addon/Cargo.lock --- a/keyserver/addons/rust-node-addon/Cargo.lock +++ b/keyserver/addons/rust-node-addon/Cargo.lock @@ -174,8 +174,13 @@ "argon2", "curve25519-dalek", "digest 0.9.0", + "instrument", + "log", + "once_cell", "opaque-ke", + "rand 0.8.5", "sha2", + "tonic", ] [[package]] @@ -303,6 +308,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + [[package]] name = "futures" version = "0.3.26" @@ -579,6 +590,17 @@ "cfg-if", ] +[[package]] +name = "instrument" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35488cca6fb8c15756ccbd410ba65cf4c68dc07f6ea1dac0e63c0902ed69eed1" +dependencies = [ + "pitch_calc", + "rand 0.3.23", + "time_calc", +] + [[package]] name = "itertools" version = "0.10.5" @@ -715,6 +737,84 @@ "libloading", ] +[[package]] +name = "num" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1" +dependencies = [ + "num-integer", + "num-traits", + "rand 0.4.6", + "rustc-serialize", +] + +[[package]] +name = "num-complex" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656" +dependencies = [ + "num-traits", + "rustc-serialize", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", + "rustc-serialize", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.15.0" @@ -750,7 +850,7 @@ "generic-array", "hkdf", "hmac", - "rand", + "rand 0.8.5", "subtle", "zeroize", ] @@ -814,6 +914,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pitch_calc" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62a4fe4bc5e28312afef25e60cb10dc006dd376db75174d3f260a9cc343224bf" +dependencies = [ + "num", + "rand 0.3.23", +] + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -903,6 +1013,29 @@ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" +dependencies = [ + "libc", + "rand 0.4.6", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + [[package]] name = "rand" version = "0.8.5" @@ -924,6 +1057,21 @@ "rand_core 0.6.4", ] +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + [[package]] name = "rand_core" version = "0.5.1" @@ -942,6 +1090,15 @@ "getrandom 0.2.8", ] +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + [[package]] name = "redox_syscall" version = "0.2.16" @@ -986,7 +1143,7 @@ "napi-derive", "opaque-ke", "prost", - "rand", + "rand 0.8.5", "serde", "serde_json", "tokio", @@ -997,6 +1154,12 @@ "tunnelbroker-client", ] +[[package]] +name = "rustc-serialize" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" + [[package]] name = "rustversion" version = "1.0.11" @@ -1131,6 +1294,16 @@ "once_cell", ] +[[package]] +name = "time_calc" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55c5902a8f9ede9e4761dee6ce621e71e624d8ef0c07a6a292e34ffafefe046d" +dependencies = [ + "num", + "rand 0.3.23", +] + [[package]] name = "tokio" version = "1.25.0" @@ -1251,7 +1424,7 @@ "indexmap", "pin-project", "pin-project-lite", - "rand", + "rand 0.8.5", "slab", "tokio", "tokio-util", diff --git a/native/native_rust_library/Cargo.lock b/native/native_rust_library/Cargo.lock --- a/native/native_rust_library/Cargo.lock +++ b/native/native_rust_library/Cargo.lock @@ -197,8 +197,13 @@ "argon2", "curve25519-dalek", "digest 0.9.0", + "instrument", + "log", + "once_cell", "opaque-ke", + "rand 0.8.5", "sha2", + "tonic", ] [[package]] @@ -351,6 +356,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + [[package]] name = "futures-channel" version = "0.3.24" @@ -577,6 +588,17 @@ "cfg-if", ] +[[package]] +name = "instrument" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35488cca6fb8c15756ccbd410ba65cf4c68dc07f6ea1dac0e63c0902ed69eed1" +dependencies = [ + "pitch_calc", + "rand 0.3.23", + "time_calc", +] + [[package]] name = "itertools" version = "0.10.4" @@ -668,7 +690,7 @@ "lazy_static", "opaque-ke", "prost", - "rand", + "rand 0.8.5", "regex", "tokio", "tokio-stream", @@ -677,6 +699,84 @@ "tracing", ] +[[package]] +name = "num" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1" +dependencies = [ + "num-integer", + "num-traits", + "rand 0.4.6", + "rustc-serialize", +] + +[[package]] +name = "num-complex" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656" +dependencies = [ + "num-traits", + "rustc-serialize", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", + "rustc-serialize", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.13.1" @@ -689,9 +789,9 @@ [[package]] name = "once_cell" -version = "1.14.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "opaque-debug" @@ -712,7 +812,7 @@ "generic-array", "hkdf", "hmac", - "rand", + "rand 0.8.5", "subtle", "zeroize", ] @@ -776,6 +876,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pitch_calc" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62a4fe4bc5e28312afef25e60cb10dc006dd376db75174d3f260a9cc343224bf" +dependencies = [ + "num", + "rand 0.3.23", +] + [[package]] name = "ppv-lite86" version = "0.2.16" @@ -863,6 +973,29 @@ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" +dependencies = [ + "libc", + "rand 0.4.6", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + [[package]] name = "rand" version = "0.8.5" @@ -884,6 +1017,21 @@ "rand_core 0.6.4", ] +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + [[package]] name = "rand_core" version = "0.5.1" @@ -902,6 +1050,15 @@ "getrandom 0.2.7", ] +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + [[package]] name = "redox_syscall" version = "0.2.16" @@ -937,6 +1094,12 @@ "winapi", ] +[[package]] +name = "rustc-serialize" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" + [[package]] name = "scratch" version = "1.0.2" @@ -1039,6 +1202,16 @@ "winapi-util", ] +[[package]] +name = "time_calc" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55c5902a8f9ede9e4761dee6ce621e71e624d8ef0c07a6a292e34ffafefe046d" +dependencies = [ + "num", + "rand 0.3.23", +] + [[package]] name = "tokio" version = "1.24.2" @@ -1159,7 +1332,7 @@ "indexmap", "pin-project", "pin-project-lite", - "rand", + "rand 0.8.5", "slab", "tokio", "tokio-util", diff --git a/services/identity/Cargo.lock b/services/identity/Cargo.lock --- a/services/identity/Cargo.lock +++ b/services/identity/Cargo.lock @@ -576,8 +576,13 @@ "argon2", "curve25519-dalek", "digest 0.9.0", + "instrument", + "log", + "once_cell", "opaque-ke", + "rand 0.8.5", "sha2", + "tonic", ] [[package]] @@ -844,6 +849,12 @@ "percent-encoding", ] +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + [[package]] name = "futures-channel" version = "0.3.26" @@ -1152,7 +1163,7 @@ "once_cell", "opaque-ke", "prost", - "rand", + "rand 0.8.5", "siwe", "tokio", "tokio-stream", @@ -1181,6 +1192,17 @@ "cfg-if", ] +[[package]] +name = "instrument" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35488cca6fb8c15756ccbd410ba65cf4c68dc07f6ea1dac0e63c0902ed69eed1" +dependencies = [ + "pitch_calc", + "rand 0.3.23", + "time_calc", +] + [[package]] name = "iri-string" version = "0.4.1" @@ -1327,6 +1349,42 @@ "winapi", ] +[[package]] +name = "num" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1" +dependencies = [ + "num-integer", + "num-traits", + "rand 0.4.6", + "rustc-serialize", +] + +[[package]] +name = "num-complex" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656" +dependencies = [ + "num-traits", + "rustc-serialize", +] + [[package]] name = "num-integer" version = "0.1.45" @@ -1337,6 +1395,29 @@ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", + "rustc-serialize", +] + [[package]] name = "num-traits" version = "0.2.15" @@ -1382,7 +1463,7 @@ "getrandom 0.2.8", "hkdf", "hmac", - "rand", + "rand 0.8.5", "subtle", "zeroize", ] @@ -1464,6 +1545,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pitch_calc" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62a4fe4bc5e28312afef25e60cb10dc006dd376db75174d3f260a9cc343224bf" +dependencies = [ + "num", + "rand 0.3.23", +] + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1577,6 +1668,29 @@ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" +dependencies = [ + "libc", + "rand 0.4.6", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + [[package]] name = "rand" version = "0.8.5" @@ -1598,6 +1712,21 @@ "rand_core 0.6.4", ] +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + [[package]] name = "rand_core" version = "0.5.1" @@ -1616,6 +1745,15 @@ "getrandom 0.2.8", ] +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + [[package]] name = "redox_syscall" version = "0.2.16" @@ -1666,6 +1804,12 @@ "winapi", ] +[[package]] +name = "rustc-serialize" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" + [[package]] name = "rustc_version" version = "0.4.0" @@ -1827,7 +1971,7 @@ "http", "iri-string", "k256", - "rand", + "rand 0.8.5", "sha3", "thiserror", ] @@ -2000,6 +2144,16 @@ "time-core", ] +[[package]] +name = "time_calc" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55c5902a8f9ede9e4761dee6ce621e71e624d8ef0c07a6a292e34ffafefe046d" +dependencies = [ + "num", + "rand 0.3.23", +] + [[package]] name = "tokio" version = "1.25.0" @@ -2131,7 +2285,7 @@ "indexmap", "pin-project", "pin-project-lite", - "rand", + "rand 0.8.5", "slab", "tokio", "tokio-util", diff --git a/shared/comm-opaque/Cargo.lock b/shared/comm-opaque/Cargo.lock --- a/shared/comm-opaque/Cargo.lock +++ b/shared/comm-opaque/Cargo.lock @@ -13,17 +13,51 @@ "password-hash", ] +[[package]] +name = "async-stream" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + [[package]] name = "base64ct" -version = "1.5.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "blake2" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b12e5fd123190ce1c2e559308a94c9bacad77907d4c6005d9e58fe1a0689e55e" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ "digest 0.10.6", ] @@ -39,9 +73,9 @@ [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] @@ -52,6 +86,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +[[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" @@ -65,8 +105,13 @@ "argon2", "curve25519-dalek", "digest 0.9.0", + "instrument", + "log", + "once_cell", "opaque-ke", + "rand 0.8.5", "sha2", + "tonic", ] [[package]] @@ -106,9 +151,9 @@ [[package]] name = "curve25519-dalek" -version = "3.2.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" dependencies = [ "byteorder", "digest 0.9.0", @@ -132,7 +177,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer 0.10.3", + "block-buffer 0.10.4", "crypto-common", "subtle", ] @@ -148,6 +193,48 @@ "syn", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "futures-core" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" + +[[package]] +name = "futures-sink" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" + +[[package]] +name = "futures-task" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" + +[[package]] +name = "futures-util" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] + [[package]] name = "generic-array" version = "0.14.6" @@ -166,7 +253,18 @@ dependencies = [ "cfg-if", "libc", - "wasi", + "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", ] [[package]] @@ -189,11 +287,143 @@ "digest 0.9.0", ] +[[package]] +name = "http" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "instrument" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35488cca6fb8c15756ccbd410ba65cf4c68dc07f6ea1dac0e63c0902ed69eed1" +dependencies = [ + "pitch_calc", + "rand 0.3.23", + "time_calc", +] + +[[package]] +name = "itoa" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" + [[package]] name = "libc" -version = "0.2.138" +version = "0.2.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "num" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1" +dependencies = [ + "num-integer", + "num-traits", + "rand 0.4.6", + "rustc-serialize", +] + +[[package]] +name = "num-complex" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656" +dependencies = [ + "num-traits", + "rustc-serialize", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", + "rustc-serialize", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "opaque-debug" @@ -214,7 +444,7 @@ "generic-array", "hkdf", "hmac", - "rand", + "rand 0.8.5", "subtle", "zeroize", ] @@ -230,40 +460,144 @@ "subtle", ] +[[package]] +name = "percent-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + +[[package]] +name = "pin-project" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pitch_calc" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62a4fe4bc5e28312afef25e60cb10dc006dd376db75174d3f260a9cc343224bf" +dependencies = [ + "num", + "rand 0.3.23", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + [[package]] name = "proc-macro2" -version = "1.0.47" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" +dependencies = [ + "libc", + "rand 0.4.6", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + [[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.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + [[package]] name = "rand_core" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom", + "getrandom 0.1.16", ] [[package]] @@ -271,6 +605,24 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.8", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rustc-serialize" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" [[package]] name = "sha2" @@ -293,9 +645,9 @@ [[package]] name = "syn" -version = "1.0.105" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -314,6 +666,118 @@ "unicode-xid", ] +[[package]] +name = "time_calc" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55c5902a8f9ede9e4761dee6ce621e71e624d8ef0c07a6a292e34ffafefe046d" +dependencies = [ + "num", + "rand 0.3.23", +] + +[[package]] +name = "tokio" +version = "1.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" +dependencies = [ + "autocfg", + "pin-project-lite", + "windows-sys", +] + +[[package]] +name = "tokio-stream" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "tonic" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb" +dependencies = [ + "async-stream", + "base64", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "percent-encoding", + "pin-project", + "tokio-stream", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", +] + [[package]] name = "typenum" version = "1.16.0" @@ -322,9 +786,9 @@ [[package]] name = "unicode-ident" -version = "1.0.5" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-xid" @@ -344,11 +808,105 @@ 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" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" + [[package]] name = "zeroize" -version = "1.3.0" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" dependencies = [ "zeroize_derive", ] diff --git a/shared/comm-opaque/Cargo.toml b/shared/comm-opaque/Cargo.toml --- a/shared/comm-opaque/Cargo.toml +++ b/shared/comm-opaque/Cargo.toml @@ -11,3 +11,8 @@ digest = "0.9" curve25519-dalek = "3.2" sha2 = "0.9" +rand = "0.8" +once_cell = "1.17" +tonic = { version = "0.8", default-features = false } +instrument = "0.2" +log = "0.4" diff --git a/shared/comm-opaque/src/client/login.rs b/shared/comm-opaque/src/client/login.rs new file mode 100644 --- /dev/null +++ b/shared/comm-opaque/src/client/login.rs @@ -0,0 +1,57 @@ +use opaque_ke::{ + errors::ProtocolError, ClientLogin, ClientLoginFinishParameters, + ClientLoginStartParameters, CredentialResponse, +}; +use rand::rngs::OsRng; + +use crate::Cipher; + +#[allow(dead_code)] +pub struct Login { + state: Option>, + rng: OsRng, + export_key: Option>, + pub session_key: Option>, +} + +impl Login { + #[allow(dead_code)] + pub fn new() -> Login { + Login { + state: None, + rng: OsRng, + session_key: None, + export_key: None, + } + } + + #[allow(dead_code)] + pub fn start(&mut self, password: &str) -> Result, ProtocolError> { + let client_start_result = ClientLogin::::start( + &mut self.rng, + password.as_bytes(), + ClientLoginStartParameters::default(), + )?; + self.state = Some(client_start_result.state); + client_start_result.message.serialize() + } + + #[allow(dead_code)] + pub fn finish( + &mut self, + response_payload: &[u8], + ) -> Result, ProtocolError> { + let response = CredentialResponse::deserialize(response_payload)?; + let state = self + .state + .take() + .ok_or_else(|| ProtocolError::ClientError)?; + let result = + state.finish(response, ClientLoginFinishParameters::default())?; + + self.session_key = Some(result.session_key.to_vec()); + self.export_key = Some(result.export_key.to_vec()); + + Ok(result.message.serialize()?.to_vec()) + } +} diff --git a/shared/comm-opaque/src/client/mod.rs b/shared/comm-opaque/src/client/mod.rs new file mode 100644 --- /dev/null +++ b/shared/comm-opaque/src/client/mod.rs @@ -0,0 +1,5 @@ +pub mod login; +pub mod register; + +pub use login::Login; +pub use register::Registration; diff --git a/shared/comm-opaque/src/client/register.rs b/shared/comm-opaque/src/client/register.rs new file mode 100644 --- /dev/null +++ b/shared/comm-opaque/src/client/register.rs @@ -0,0 +1,54 @@ +use opaque_ke::{ + errors::ProtocolError, ClientRegistration, + ClientRegistrationFinishParameters, RegistrationResponse, +}; +use rand::rngs::OsRng; + +use crate::Cipher; + +#[allow(dead_code)] +pub struct Registration { + state: Option>, + rng: OsRng, + export_key: Option>, +} + +impl Registration { + #[allow(dead_code)] + pub fn new() -> Registration { + Registration { + state: None, + rng: OsRng, + export_key: None, + } + } + + #[allow(dead_code)] + pub fn start(&mut self, password: &str) -> Result, ProtocolError> { + let result = + ClientRegistration::::start(&mut self.rng, password.as_bytes())?; + self.state = Some(result.state); + Ok(result.message.serialize()) + } + + #[allow(dead_code)] + pub fn finish( + &mut self, + response_payload: &[u8], + ) -> Result, ProtocolError> { + let response = RegistrationResponse::deserialize(response_payload)?; + let state = self + .state + .take() + .ok_or_else(|| ProtocolError::ClientError)?; + let result = state.finish( + &mut OsRng, + response, + ClientRegistrationFinishParameters::default(), + )?; + + self.export_key = Some(result.export_key.to_vec()); + + Ok(result.message.serialize().to_vec()) + } +} diff --git a/shared/comm-opaque/src/config.rs b/shared/comm-opaque/src/config.rs new file mode 100644 --- /dev/null +++ b/shared/comm-opaque/src/config.rs @@ -0,0 +1,53 @@ +use curve25519_dalek::ristretto::RistrettoPoint; +use once_cell::sync::Lazy; +use opaque_ke::{ + ciphersuite::CipherSuite, errors::InternalPakeError, keypair::KeyPair, +}; +use rand::rngs::OsRng; +use std::{env, fs, path::Path}; + +use crate::{ + constants::{SECRETS_DIRECTORY, SECRETS_FILE_EXTENSION, SECRETS_FILE_NAME}, + Cipher, +}; + +pub static CONFIG: Lazy = + Lazy::new(|| Config::load().expect("failed to load config")); + +#[allow(dead_code)] +pub(super) fn load_config() { + Lazy::force(&CONFIG); +} + +#[derive(Clone)] +pub struct Config { + pub server_keypair: KeyPair, +} + +impl Config { + fn load() -> Result { + let mut path = env::current_dir().expect("Failed to determine CWD"); + path.push(SECRETS_DIRECTORY); + path.push(SECRETS_FILE_NAME); + path.set_extension(SECRETS_FILE_EXTENSION); + let keypair = get_keypair_from_file(path)?; + Ok(Self { + server_keypair: keypair, + }) + } +} + +#[cfg(test)] +fn get_keypair_from_file>( + _: P, +) -> Result, InternalPakeError> { + Ok(Cipher::generate_random_keypair(&mut OsRng)) +} + +#[cfg(not(test))] +fn get_keypair_from_file>( + path: P, +) -> Result, InternalPakeError> { + let bytes = fs::read(path).expect("Unable to open secrets file"); + KeyPair::from_private_key_slice(&bytes) +} diff --git a/shared/comm-opaque/src/constants.rs b/shared/comm-opaque/src/constants.rs new file mode 100644 --- /dev/null +++ b/shared/comm-opaque/src/constants.rs @@ -0,0 +1,5 @@ +// Secrets + +pub const SECRETS_DIRECTORY: &str = "secrets"; +pub const SECRETS_FILE_NAME: &str = "secret_key"; +pub const SECRETS_FILE_EXTENSION: &str = "txt"; diff --git a/shared/comm-opaque/src/grpc.rs b/shared/comm-opaque/src/grpc.rs new file mode 100644 --- /dev/null +++ b/shared/comm-opaque/src/grpc.rs @@ -0,0 +1,29 @@ +use log::info; +use opaque_ke::errors::ProtocolError; +use tonic::Status; + +#[allow(dead_code)] +fn protocol_error_to_grpc_status(error: ProtocolError) -> tonic::Status { + match error { + ProtocolError::VerificationError(_) => { + info!("Failed to validate password"); + Status::aborted("server error") + } + ProtocolError::ServerError => { + info!("Invalid server response"); + Status::aborted("server error") + } + ProtocolError::ServerInvalidEnvelopeCredentialsFormatError => { + info!("Invalid server credential format"); + Status::invalid_argument("bad response") + } + ProtocolError::ClientError => { + info!("Client response cannot be handled"); + Status::invalid_argument("bad client response") + } + ProtocolError::ReflectedValueError => { + info!("OPRF value was reflected"); + Status::invalid_argument("invalid server response") + } + } +} diff --git a/shared/comm-opaque/src/lib.rs b/shared/comm-opaque/src/lib.rs --- a/shared/comm-opaque/src/lib.rs +++ b/shared/comm-opaque/src/lib.rs @@ -1,2 +1,41 @@ +mod client; +mod config; +mod constants; +mod grpc; mod opaque; +mod server; + pub use crate::opaque::Cipher; + +#[test] +pub fn test_register_and_login() { + let pass = "test"; + + // Register user + let mut client_register = client::Registration::new(); + let client_message = client_register.start(pass).unwrap(); + + let mut server_register = server::Registration::new(); + let server_response = server_register.start(&client_message).unwrap(); + + let client_upload = client_register.finish(&server_response).unwrap(); + + // These bytes are the used to validate future login sessions, normally it + // would saved to a database or other data store + let password_file_bytes = server_register.finish(&client_upload).unwrap(); + + // Login user + let mut login_client = client::Login::new(); + let client_request = login_client.start(pass).unwrap(); + + let mut server_login = server::Login::new(); + let server_response = server_login + .start(&password_file_bytes, &client_request) + .unwrap(); + + let client_upload = login_client.finish(&server_response).unwrap(); + + server_login.finish(&client_upload).unwrap(); + + assert_eq!(login_client.session_key, server_login.session_key); +} diff --git a/shared/comm-opaque/src/server/login.rs b/shared/comm-opaque/src/server/login.rs new file mode 100644 --- /dev/null +++ b/shared/comm-opaque/src/server/login.rs @@ -0,0 +1,65 @@ +use opaque_ke::{errors::ProtocolError, ServerRegistration}; +use opaque_ke::{ + CredentialFinalization, CredentialRequest, ServerLogin, + ServerLoginStartParameters, +}; +use rand::rngs::OsRng; + +use crate::config::CONFIG; +use crate::Cipher; + +#[allow(dead_code)] +pub struct Login { + state: Option>, + rng: OsRng, + pub session_key: Option>, +} + +impl Login { + #[allow(dead_code)] + pub fn new() -> Login { + Login { + state: None, + rng: OsRng, + session_key: None, + } + } + + #[allow(dead_code)] + pub fn start( + &mut self, + password_file_bytes: &[u8], + credential_request: &[u8], + ) -> Result, ProtocolError> { + let password_file = ServerRegistration::deserialize(password_file_bytes)?; + let credential_request = + CredentialRequest::deserialize(credential_request)?; + let result = ServerLogin::start( + &mut OsRng, + password_file, + CONFIG.server_keypair.private(), + credential_request, + ServerLoginStartParameters::default(), + )?; + self.state = Some(result.state); + + result.message.serialize() + } + + #[allow(dead_code)] + pub fn finish( + &mut self, + response_payload: &[u8], + ) -> Result<(), ProtocolError> { + let finalization_payload = + CredentialFinalization::deserialize(&response_payload[..])?; + + let state = self + .state + .take() + .ok_or_else(|| ProtocolError::ServerError)?; + let result = state.finish(finalization_payload)?; + self.session_key = Some(result.session_key); + Ok(()) + } +} diff --git a/shared/comm-opaque/src/server/mod.rs b/shared/comm-opaque/src/server/mod.rs new file mode 100644 --- /dev/null +++ b/shared/comm-opaque/src/server/mod.rs @@ -0,0 +1,5 @@ +pub mod login; +pub mod register; + +pub use login::Login; +pub use register::Registration; diff --git a/shared/comm-opaque/src/server/register.rs b/shared/comm-opaque/src/server/register.rs new file mode 100644 --- /dev/null +++ b/shared/comm-opaque/src/server/register.rs @@ -0,0 +1,56 @@ +use opaque_ke::{errors::ProtocolError, ServerRegistration}; +use opaque_ke::{RegistrationRequest, RegistrationUpload}; +use rand::rngs::OsRng; + +use crate::config::CONFIG; +use crate::Cipher; + +#[allow(dead_code)] +pub struct Registration { + state: Option>, + rng: OsRng, +} + +impl Registration { + #[allow(dead_code)] + pub fn new() -> Registration { + Registration { + state: None, + rng: OsRng, + } + } + + #[allow(dead_code)] + pub fn from_bytes(bytes: &[u8]) -> Result { + Ok(Registration { + state: Some(ServerRegistration::deserialize(bytes)?), + rng: OsRng, + }) + } + + #[allow(dead_code)] + pub fn start(&mut self, payload: &[u8]) -> Result, ProtocolError> { + let upload = RegistrationRequest::deserialize(payload)?; + let result = ServerRegistration::::start( + &mut self.rng, + upload, + CONFIG.server_keypair.public(), + )?; + self.state = Some(result.state); + Ok(result.message.serialize()) + } + + #[allow(dead_code)] + pub fn finish( + &mut self, + response_payload: &[u8], + ) -> Result, ProtocolError> { + let upload_payload = RegistrationUpload::deserialize(response_payload)?; + let state = self + .state + .take() + .ok_or_else(|| ProtocolError::ServerError)?; + let result = state.finish(upload_payload)?; + Ok(result.serialize()) + } +}