Page MenuHomePhabricator

D4754.id15470.diff
No OneTemporary

D4754.id15470.diff

diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@
lib/node_modules
native/cpp/CommonCpp/CryptoTools/opaque-ke-cxx/target
+native/cpp/CommonCpp/CryptoTools/rust-utils/target
web/node_modules
web/dist
diff --git a/native/cpp/CommonCpp/CryptoTools/rust-utils/Cargo.lock b/native/cpp/CommonCpp/CryptoTools/rust-utils/Cargo.lock
new file mode 100644
--- /dev/null
+++ b/native/cpp/CommonCpp/CryptoTools/rust-utils/Cargo.lock
@@ -0,0 +1,108 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.127"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "505e71a4706fa491e9b1b55f51b95d4037d0821ee40131190475f692b35b009b"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
+[[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",
+]
+
+[[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",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "regex"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+
+[[package]]
+name = "rust-utils"
+version = "0.1.0"
+dependencies = [
+ "rand",
+ "regex",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
diff --git a/native/cpp/CommonCpp/CryptoTools/rust-utils/Cargo.toml b/native/cpp/CommonCpp/CryptoTools/rust-utils/Cargo.toml
new file mode 100644
--- /dev/null
+++ b/native/cpp/CommonCpp/CryptoTools/rust-utils/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "rust-utils"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+rand = "0.8"
+regex = "1.6"
diff --git a/native/cpp/CommonCpp/CryptoTools/rust-utils/src/lib.rs b/native/cpp/CommonCpp/CryptoTools/rust-utils/src/lib.rs
new file mode 100644
--- /dev/null
+++ b/native/cpp/CommonCpp/CryptoTools/rust-utils/src/lib.rs
@@ -0,0 +1,70 @@
+use rand::distributions::{Alphanumeric, DistString};
+#[cfg(test)]
+use regex::Regex;
+
+enum DeviceIDType {
+ KEYSERVER,
+ WEB,
+ MOBILE,
+}
+
+fn generate_device_id(device_type: DeviceIDType) -> String {
+ let prefix = match device_type {
+ DeviceIDType::KEYSERVER => "ks",
+ DeviceIDType::WEB => "web",
+ DeviceIDType::MOBILE => "mobile",
+ };
+ let mut rng = rand::thread_rng();
+ let suffix: String = Alphanumeric.sample_string(&mut rng, 64);
+
+ format!("{}:{}", &prefix, &suffix)
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ const REGEX: &str = "^(ks|mobile|web):[a-zA-Z0-9]{64}$";
+
+ fn check_regex(str: &String) -> bool {
+ Regex::new(&REGEX).unwrap().is_match(&str)
+ }
+
+ #[test]
+ fn generate_device_id_ks() {
+ for _x in 1..100 {
+ let result = generate_device_id(DeviceIDType::KEYSERVER);
+ assert!(
+ check_regex(&result),
+ "result: {} does not match regex {}",
+ &result,
+ &REGEX
+ );
+ }
+ }
+
+ #[test]
+ fn generate_device_id_web() {
+ for _x in 1..100 {
+ let result = generate_device_id(DeviceIDType::WEB);
+ assert!(
+ check_regex(&result),
+ "result: {} does not match regex {}",
+ &result,
+ &REGEX
+ );
+ }
+ }
+
+ #[test]
+ fn generate_device_id_mobile() {
+ for _x in 1..100 {
+ let result = generate_device_id(DeviceIDType::MOBILE);
+ assert!(
+ check_regex(&result),
+ "result: {} does not match regex {}",
+ &result,
+ &REGEX
+ );
+ }
+ }
+}

File Metadata

Mime Type
text/plain
Expires
Wed, Nov 27, 11:14 PM (20 h, 23 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2592035
Default Alt Text
D4754.id15470.diff (5 KB)

Event Timeline