~nicohman/signal-rs

5084c926fb753fdc6dda5f3cc2c8af2df5f1190b — nicohman 2 months ago ad7bba6 master
Make SignalUI a singleton and add application icon
M Cargo.lock => Cargo.lock +313 -178
@@ 42,6 42,15 @@ dependencies = [
]

[[package]]
name = "aead"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "922b33332f54fc0ad13fa3e514601e8d30fb54e1f3eadc36643f6526db645621"
dependencies = [
 "generic-array 0.14.4",
]

[[package]]
name = "aes"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 60,7 69,20 @@ checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561"
dependencies = [
 "aes-soft 0.6.4",
 "aesni 0.10.0",
 "cipher",
 "cipher 0.2.5",
]

[[package]]
name = "aes"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32380222440685202b62f23002e668519a6bf2d8df5e7655ed96223b6482b4be"
dependencies = [
 "cfg-if 1.0.0",
 "cipher 0.3.0",
 "cpufeatures",
 "ctr 0.7.0",
 "opaque-debug 0.3.0",
]

[[package]]


@@ 71,8 93,8 @@ checksum = "7729c3cde54d67063be556aeac75a81330d802f0259500ca40cb52967f975763"
dependencies = [
 "aes-soft 0.6.4",
 "aesni 0.10.0",
 "cipher",
 "ctr",
 "cipher 0.2.5",
 "ctr 0.6.0",
]

[[package]]


@@ 83,9 105,23 @@ checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da"
dependencies = [
 "aead 0.3.2",
 "aes 0.6.0",
 "cipher",
 "ctr",
 "ghash",
 "cipher 0.2.5",
 "ctr 0.6.0",
 "ghash 0.3.1",
 "subtle 2.4.0",
]

[[package]]
name = "aes-gcm"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ee2263805ba4537ccbb19db28525a7b1ebc7284c228eb5634c3124ca63eb03f"
dependencies = [
 "aead 0.4.1",
 "aes 0.7.1",
 "cipher 0.3.0",
 "ctr 0.7.0",
 "ghash 0.4.1",
 "subtle 2.4.0",
]



@@ 120,7 156,7 @@ version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072"
dependencies = [
 "cipher",
 "cipher 0.2.5",
 "opaque-debug 0.3.0",
]



@@ 140,7 176,7 @@ version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce"
dependencies = [
 "cipher",
 "cipher 0.2.5",
 "opaque-debug 0.3.0",
]



@@ 169,15 205,6 @@ dependencies = [
]

[[package]]
name = "ansi_term"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
dependencies = [
 "winapi 0.3.9",
]

[[package]]
name = "anyhow"
version = "1.0.38"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 240,17 267,6 @@ dependencies = [
]

[[package]]
name = "atty"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
 "hermit-abi",
 "libc",
 "winapi 0.3.9",
]

[[package]]
name = "autocfg"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 367,7 383,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0"
dependencies = [
 "block-padding 0.2.1",
 "cipher",
 "cipher 0.2.5",
]

[[package]]
name = "block-modes"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e"
dependencies = [
 "block-padding 0.2.1",
 "cipher 0.3.0",
]

[[package]]


@@ 481,18 507,12 @@ dependencies = [
]

[[package]]
name = "clap"
version = "2.33.3"
name = "cipher"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
dependencies = [
 "ansi_term",
 "atty",
 "bitflags 1.2.1",
 "strsim",
 "textwrap",
 "unicode-width",
 "vec_map",
 "generic-array 0.14.4",
]

[[package]]


@@ 547,7 567,7 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2913470204e9e8498a0f31f17f90a0de801ae92c8c5ac18c49af4819e6786697"
dependencies = [
 "directories 2.0.2",
 "directories",
 "serde",
 "toml",
]


@@ 679,6 699,15 @@ dependencies = [
]

[[package]]
name = "cpufeatures"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dec1028182c380cc45a2e2c5ec841134f2dfd0f8f5f0a5bcd68004f81b5efdf4"
dependencies = [
 "libc",
]

[[package]]
name = "cpuid-bool"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 859,6 888,16 @@ dependencies = [

[[package]]
name = "crypto-mac"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58bcd97a54c7ca5ce2f6eb16f6bede5b0ab5f0055fedc17d2f0b4466e21671ca"
dependencies = [
 "generic-array 0.14.4",
 "subtle 2.4.0",
]

[[package]]
name = "crypto-mac"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4857fd85a0c34b3c3297875b747c1e02e06b6a0ea32dd892d8192b9ce0813ea6"


@@ 902,7 941,16 @@ version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f"
dependencies = [
 "cipher",
 "cipher 0.2.5",
]

[[package]]
name = "ctr"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a232f92a03f37dd7d7dd2adc67166c77e9cd88de5b019b9a9eecfaeaf7bfd481"
dependencies = [
 "cipher 0.3.0",
]

[[package]]


@@ 919,6 967,32 @@ dependencies = [
]

[[package]]
name = "curve25519-dalek"
version = "3.0.0"
source = "git+https://github.com/signalapp/curve25519-dalek.git?branch=3.0.0-lizard2#2694ad3b789635f90f941648ae952f58d59ffc73"
dependencies = [
 "byteorder",
 "digest 0.9.0",
 "rand_core 0.5.1",
 "serde",
 "subtle 2.4.0",
 "zeroize",
]

[[package]]
name = "curve25519-dalek"
version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "639891fde0dbea823fc3d798a0fdf9d2f9440a42d64a78ab3488b0ca025117b3"
dependencies = [
 "byteorder",
 "digest 0.9.0",
 "rand_core 0.5.1",
 "subtle 2.4.0",
 "zeroize",
]

[[package]]
name = "dbus"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 939,6 1013,17 @@ dependencies = [
]

[[package]]
name = "derivative"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
dependencies = [
 "proc-macro2",
 "quote 1.0.8",
 "syn 1.0.58",
]

[[package]]
name = "digest"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 967,15 1052,6 @@ dependencies = [
]

[[package]]
name = "directories"
version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8fed639d60b58d0f53498ab13d26f621fd77569cc6edb031f4cc36a2ad9da0f"
dependencies = [
 "dirs-sys",
]

[[package]]
name = "dirs"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1019,19 1095,6 @@ dependencies = [
]

[[package]]
name = "env_logger"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
dependencies = [
 "atty",
 "humantime",
 "log",
 "regex",
 "termcolor",
]

[[package]]
name = "error-chain"
version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1352,6 1415,16 @@ dependencies = [
]

[[package]]
name = "ghash"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f6fb2a26dd2ebd268a68bc8e9acc9e67e487952f33384055a1cbe697514c64e"
dependencies = [
 "opaque-debug 0.3.0",
 "polyval 0.5.0",
]

[[package]]
name = "gimli"
version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1447,6 1520,16 @@ dependencies = [

[[package]]
name = "hmac"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deae6d9dbb35ec2c502d62b8f7b1c000a0822c3b0794ba36b3149c0a1c840dff"
dependencies = [
 "crypto-mac 0.9.1",
 "digest 0.9.0",
]

[[package]]
name = "hmac"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15"


@@ 1515,15 1598,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"

[[package]]
name = "humantime"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
dependencies = [
 "quick-error",
]

[[package]]
name = "hyper"
version = "0.13.9"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1809,6 1883,31 @@ dependencies = [

[[package]]
name = "libsignal-protocol"
version = "0.1.0"
source = "git+https://github.com/signalapp/libsignal-client#108a571e2ee8ce585b56fa9b2037cc325bb93f39"
dependencies = [
 "aes 0.6.0",
 "arrayref",
 "async-trait",
 "block-modes 0.7.0",
 "ctr 0.6.0",
 "curve25519-dalek 3.0.0",
 "hex",
 "hmac 0.9.0",
 "log",
 "num_enum",
 "prost",
 "prost-build",
 "rand 0.7.3",
 "sha2 0.9.3",
 "signal-crypto",
 "subtle 2.4.0",
 "uuid",
 "x25519-dalek",
]

[[package]]
name = "libsignal-protocol"
version = "0.1.1-alpha.0"
source = "git+https://github.com/Michael-F-Bryan/libsignal-protocol-rs.git#0fdf7c30ff0e1f207ac219252e7e961b5e14b937"
dependencies = [


@@ 1816,7 1915,7 @@ dependencies = [
 "aes-ctr",
 "backtrace",
 "base64 0.13.0",
 "block-modes",
 "block-modes 0.7.0",
 "hmac 0.10.1",
 "libc",
 "libsignal-protocol-sys",


@@ 1842,18 1941,18 @@ source = "git+https://github.com/Michael-F-Bryan/libsignal-service-rs#8ddb9c860a
dependencies = [
 "aes 0.6.0",
 "aes-ctr",
 "aes-gcm",
 "aes-gcm 0.8.0",
 "async-trait",
 "base64 0.13.0",
 "bincode",
 "block-modes",
 "block-modes 0.7.0",
 "bytes 1.0.1",
 "chrono",
 "futures",
 "hex",
 "hmac 0.10.1",
 "http",
 "libsignal-protocol",
 "libsignal-protocol 0.1.1-alpha.0",
 "log",
 "phonenumber",
 "pin-project 1.0.4",


@@ 1865,13 1964,45 @@ dependencies = [
 "thiserror",
 "url",
 "uuid",
 "zkgroup",
 "zkgroup 0.7.2 (git+https://github.com/signalapp/zkgroup)",
]

[[package]]
name = "libsignal-service"
version = "0.1.0"
source = "git+https://github.com/whisperfish/libsignal-service-rs#d4d3b7def98cf4f5d7a37f0429486c4987a1714e"
dependencies = [
 "aes 0.7.1",
 "aes-gcm 0.9.1",
 "async-trait",
 "base64 0.13.0",
 "bincode",
 "block-modes 0.8.1",
 "bytes 1.0.1",
 "chrono",
 "futures",
 "hex",
 "hmac 0.10.1",
 "http",
 "libsignal-protocol 0.1.0",
 "log",
 "phonenumber",
 "pin-project 1.0.4",
 "prost",
 "prost-build",
 "rand 0.7.3",
 "serde",
 "sha2 0.9.3",
 "thiserror",
 "url",
 "uuid",
 "zkgroup 0.7.2 (git+https://github.com/signalapp/zkgroup?tag=v0.7.2)",
]

[[package]]
name = "libsignal-service-hyper"
version = "0.1.0"
source = "git+https://github.com/Michael-F-Bryan/libsignal-service-rs#8ddb9c860afafa3ef4475ce1330420678bb41f43"
source = "git+https://github.com/whisperfish/libsignal-service-rs#d4d3b7def98cf4f5d7a37f0429486c4987a1714e"
dependencies = [
 "async-trait",
 "async-tungstenite",


@@ 1882,8 2013,7 @@ dependencies = [
 "hyper 0.14.5",
 "hyper-rustls",
 "hyper-timeout",
 "libsignal-protocol",
 "libsignal-service",
 "libsignal-service 0.1.0 (git+https://github.com/whisperfish/libsignal-service-rs)",
 "log",
 "mpart-async",
 "serde",


@@ 2303,6 2433,28 @@ dependencies = [
]

[[package]]
name = "num_enum"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "226b45a5c2ac4dd696ed30fa6b94b057ad909c7b7fc2e0d0808192bced894066"
dependencies = [
 "derivative",
 "num_enum_derive",
]

[[package]]
name = "num_enum_derive"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c0fd9eba1d5db0994a239e09c1be402d35622277e35468ba891aa5e3188ce7e"
dependencies = [
 "proc-macro-crate",
 "proc-macro2",
 "quote 1.0.8",
 "syn 1.0.58",
]

[[package]]
name = "objc"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2633,7 2785,7 @@ name = "poksho"
version = "0.7.0"
source = "git+https://github.com/signalapp/poksho.git?tag=v0.7.0#8bb8c61c18e7bbe93c094ed91be52b9f96c1c5cd"
dependencies = [
 "curve25519-dalek",
 "curve25519-dalek 2.0.0",
 "hmac 0.7.1",
 "sha2 0.8.2",
]


@@ 2660,6 2812,17 @@ dependencies = [
]

[[package]]
name = "polyval"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "864231b0b86ce05168a8e6da0fea2e67275dacf25f75b00a62cfd341aab904a9"
dependencies = [
 "cpufeatures",
 "opaque-debug 0.3.0",
 "universal-hash 0.4.0",
]

[[package]]
name = "ppv-lite86"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2669,52 2832,30 @@ checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
name = "presage"
version = "0.1.0"
dependencies = [
 "anyhow",
 "async-trait",
 "base64 0.12.3",
 "directories 3.0.1",
 "env_logger",
 "futures",
 "hex",
 "hyper 0.14.5",
 "image",
 "libsignal-protocol",
 "libsignal-service",
 "libsignal-service 0.1.0 (git+https://github.com/whisperfish/libsignal-service-rs)",
 "libsignal-service-hyper",
 "log",
 "opener",
 "prost",
 "qrcode",
 "rand 0.7.3",
 "serde",
 "serde_json",
 "sled",
 "structopt",
 "thiserror",
 "tokio 1.5.0",
]

[[package]]
name = "proc-macro-error"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
dependencies = [
 "proc-macro-error-attr",
 "proc-macro2",
 "quote 1.0.8",
 "syn 1.0.58",
 "version_check",
]

[[package]]
name = "proc-macro-error-attr"
version = "1.0.4"
name = "proc-macro-crate"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
dependencies = [
 "proc-macro2",
 "quote 1.0.8",
 "version_check",
 "toml",
]

[[package]]


@@ 2842,12 2983,6 @@ dependencies = [
]

[[package]]
name = "quick-error"
version = "1.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"

[[package]]
name = "quick-xml"
version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3387,6 3522,24 @@ dependencies = [
]

[[package]]
name = "signal-crypto"
version = "0.1.0"
source = "git+https://github.com/signalapp/libsignal-client#108a571e2ee8ce585b56fa9b2037cc325bb93f39"
dependencies = [
 "aes-soft 0.6.4",
 "aesni 0.10.0",
 "cipher 0.2.5",
 "generic-array 0.14.4",
 "hmac 0.9.0",
 "libc",
 "polyval 0.4.5",
 "rand 0.7.3",
 "sha-1",
 "sha2 0.9.3",
 "subtle 2.4.0",
]

[[package]]
name = "signal-hook-registry"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3414,7 3567,7 @@ dependencies = [
 "gettext-rs",
 "home",
 "lazy_static",
 "libsignal-service",
 "libsignal-service 0.1.0 (git+https://github.com/Michael-F-Bryan/libsignal-service-rs)",
 "mio 0.7.7",
 "notify-rust",
 "once_cell 0.2.4",


@@ 3431,7 3584,7 @@ dependencies = [
 "tempfile",
 "tokio 1.5.0",
 "url",
 "zkgroup",
 "zkgroup 0.7.2 (git+https://github.com/signalapp/zkgroup)",
]

[[package]]


@@ 3517,36 3670,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"

[[package]]
name = "strsim"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"

[[package]]
name = "structopt"
version = "0.3.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5277acd7ee46e63e5168a80734c9f6ee81b1367a7d8772a2d765df2a3705d28c"
dependencies = [
 "clap",
 "lazy_static",
 "structopt-derive",
]

[[package]]
name = "structopt-derive"
version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ba9cdfda491b814720b6b06e0cac513d922fc407582032e8706e9f137976f90"
dependencies = [
 "heck",
 "proc-macro-error",
 "proc-macro2",
 "quote 1.0.8",
 "syn 1.0.58",
]

[[package]]
name = "strum"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3758,24 3881,6 @@ dependencies = [
]

[[package]]
name = "termcolor"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
dependencies = [
 "winapi-util",
]

[[package]]
name = "textwrap"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
dependencies = [
 "unicode-width",
]

[[package]]
name = "thiserror"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4073,12 4178,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796"

[[package]]
name = "unicode-width"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"

[[package]]
name = "unicode-xid"
version = "0.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4167,12 4266,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb"

[[package]]
name = "vec_map"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"

[[package]]
name = "version_check"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4409,6 4502,17 @@ dependencies = [
]

[[package]]
name = "x25519-dalek"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f"
dependencies = [
 "curve25519-dalek 3.1.0",
 "rand_core 0.5.1",
 "zeroize",
]

[[package]]
name = "xml-rs"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 4422,6 4526,37 @@ name = "zeroize"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd"
dependencies = [
 "zeroize_derive",
]

[[package]]
name = "zeroize_derive"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2c1e130bebaeab2f23886bf9acbaca14b092408c452543c857f66399cd6dab1"
dependencies = [
 "proc-macro2",
 "quote 1.0.8",
 "syn 1.0.58",
 "synstructure",
]

[[package]]
name = "zkgroup"
version = "0.7.2"
source = "git+https://github.com/signalapp/zkgroup?tag=v0.7.2#d3cb5dbd3098f1e8f82864974eda20c25f5d7d24"
dependencies = [
 "aead 0.2.0",
 "aes-gcm-siv",
 "bincode",
 "curve25519-dalek 2.0.0",
 "hex",
 "jni",
 "poksho",
 "serde",
 "sha2 0.8.2",
]

[[package]]
name = "zkgroup"


@@ 4431,7 4566,7 @@ dependencies = [
 "aead 0.2.0",
 "aes-gcm-siv",
 "bincode",
 "curve25519-dalek",
 "curve25519-dalek 2.0.0",
 "hex",
 "jni",
 "poksho",

M qml/About.qml => qml/About.qml +2 -0
@@ 4,6 4,8 @@ import SignalUI 0.1
import QtQuick.Layouts 1.15
import QtQuick.Controls.Material 2.12
import org.kde.kirigami 2.13 as Kirigami
import SignalUI 0.1

Kirigami.AboutPage {
	id: aboutPage
	aboutData: {

M qml/Avatar.qml => qml/Avatar.qml +5 -3
@@ 2,6 2,8 @@ import QtQuick 2.12
import QtQuick.Controls 2.5
import QtGraphicalEffects 1.15
import QtQuick.Dialogs 1.3
import SignalUI 0.1

Item {
	id: avatarItem
	property string tel:""


@@ 16,7 18,7 @@ Item {
		onAccepted: {
			var regex = new RegExp("file://");
			var path = fd.fileUrl.toString().replace("file://", "");
			var newAvatar = signal.set_avatar(avatarItem.tel, path);
			var newAvatar = SignalUI.set_avatar(avatarItem.tel, path);
			//avatarImg.cache = false;
			avatarImg.source = "";
			avatarImg.source = `file://${newAvatar}`;	


@@ 29,12 31,12 @@ Item {
		anchors.fill: parent
		id: avatarImg
		Component.onCompleted: {
	        var avatar = signal.avatar(parent.tel);
	        var avatar = SignalUI.avatar(parent.tel);
	        if (avatar !== "") {
	        	avatarImg.source = `file://${avatar}`;
	        } else {
	        	avatarRect.visible = true;
	        	avatarRectLabel.text = new String(signal.resolve_name(parent.tel))[0].toUpperCase();
	        	avatarRectLabel.text = new String(SignalUI.resolve_name(parent.tel))[0].toUpperCase();
	        }
		}
		layer.enabled: parent.rounded

M qml/Settings.qml => qml/Settings.qml +5 -4
@@ 2,13 2,14 @@ import QtQuick 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.15
import org.kde.kirigami 2.13 as Kirigami
import SignalUI 0.1

Kirigami.Page {
    title: "Settings"
    Component.onCompleted: {
            console.log(signal.get_cfg("notifications"));
            console.log(SignalUI.get_cfg("notifications"));

        if (signal.get_cfg("notifications").toString().trim() === "\"enabled\"") {
        if (SignalUI.get_cfg("notifications").toString().trim() === "\"enabled\"") {
            notifCheckBox.checked = true;
        }
    }


@@ 33,9 34,9 @@ Kirigami.Page {

                onClicked: {
                    if (notifCheckBox.checked) {
                        signal.set_cfg("notifications", "enabled");
                        SignalUI.set_cfg("notifications", "enabled");
                    } else {
                        signal.set_cfg("notifications", "disabled");
                        SignalUI.set_cfg("notifications", "disabled");
                    }
                }
            }

M qml/SignalState.qml => qml/SignalState.qml +10 -9
@@ 1,5 1,6 @@
import QtQuick 2.0
import QtQuick.Controls 2.5
import SignalUI 0.1

Item {
    id: signalState


@@ 16,7 17,7 @@ Item {
    property bool desktopView: false
    function openView(viewName) {
        signalState.currentView = viewName;
        signal.show_view(viewName);
        SignalUI.show_view(viewName);
        switch (viewName) {
            case "about":
                window.pageStack.layers.push(Qt.resolvedUrl("About.qml"));


@@ 58,7 59,7 @@ Item {
        console.log(group.members);
        group.members.forEach((i) => {
            console.log(i);
            let name = signal.resolve_name(i);
            let name = SignalUI.resolve_name(i);
            console.log(name);
            signalState.editGroupMembersModel.append({
                c_name: name.toString(),


@@ 67,21 68,21 @@ Item {
        });
    }
    function contact(tel) {
        return JSON.parse(signal.contact(tel));
        return JSON.parse(SignalUI.contact(tel));
    }
    function group(group_id) {
        return JSON.parse(signal.group(group_id));
        return JSON.parse(SignalUI.group(group_id));
    }
    function message(sent_at, chat_id) {
        return signal.message(chat_id, sent_at);
        return SignalUI.message(chat_id, sent_at);
    }
    function setCurrent(cur) {
        signalState.current = cur;
        for (var i=0; i < signal.chats.rowCount(); i++) {
            var idx = signal.chats.index(i, 0);
            var str = signal.chats.data(idx, 2+256).toString();
        for (var i=0; i < SignalUI.chats.rowCount(); i++) {
            var idx = SignalUI.chats.index(i, 0);
            var str = SignalUI.chats.data(idx, 2+256).toString();
            if (str == cur.toString()) {
                signalState.currentName = signal.chats.data(idx, 1+256).toString();
                signalState.currentName = SignalUI.chats.data(idx, 1+256).toString();
                break;
            }
        }

M qml/chats/ChatList.qml => qml/chats/ChatList.qml +4 -3
@@ 3,6 3,7 @@ import QtQuick.Controls 2.5
import QtQuick.Controls.Material 2.12
import QtQuick.Layouts 1.15
import org.kde.kirigami 2.13 as Kirigami
import SignalUI 0.1

Kirigami.ScrollablePage {
    title: qsTr("Chats")


@@ 33,7 34,7 @@ Kirigami.ScrollablePage {
                    signalState.currentIsGroup = false;
                }
                signalState.setCurrent(tel);
                signal.show_chat(tel);
                SignalUI.show_chat(tel);
                signalState.openView("chatHistory");
            }
            Row {


@@ 47,7 48,7 @@ Kirigami.ScrollablePage {
                }
                Column {
                    Label {
                        text: signal.resolve_name(model.tel)
                        text: SignalUI.resolve_name(model.tel)
                        color: theme.text
                    }
                    Label {


@@ 57,7 58,7 @@ Kirigami.ScrollablePage {
                }
            }
        }
        model: signal.chats
        model: SignalUI.chats
    }

}

M qml/chats/CreateChat.qml => qml/chats/CreateChat.qml +3 -2
@@ 2,12 2,13 @@ import QtQuick 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.15
import org.kde.kirigami 2.13 as Kirigami
import SignalUI 0.1

Kirigami.ScrollablePage {
	title: "Create Chat"
	ListView {
		anchors.fill: parent
		model: signal.contacts
		model: SignalUI.contacts
		delegate: ItemDelegate {
			//width: parent.width
			width: crLa.width //+ crAv.width


@@ 21,7 22,7 @@ Kirigami.ScrollablePage {
                console.log(model.tel);
                signalState.currentName = model.name;
                signalState.setCurrent(model.tel);
                signal.show_chat(model.tel);
                SignalUI.show_chat(model.tel);
                signalState.openView("chatHistory");
                window.pageStack.layers.pop();
			}

M qml/chats/EditGroup.qml => qml/chats/EditGroup.qml +1 -0
@@ 2,6 2,7 @@ import QtQuick 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.15
import org.kde.kirigami 2.13 as Kirigami
import SignalUI 0.1

Kirigami.Page {
	id: editGroup

M qml/contacts/CreateContact.qml => qml/contacts/CreateContact.qml +2 -1
@@ 2,6 2,7 @@ import QtQuick 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.15
import org.kde.kirigami 2.13 as Kirigami
import SignalUI 0.1

Kirigami.Page {
    title: "Create a New Contact"


@@ 46,7 47,7 @@ Kirigami.Page {
        	id: addContactButton
        	text: "Add Contact"
        	onClicked: {
        		signal.add_contact(contactNameInput.text, contactPhoneInput.text);
        		SignalUI.add_contact(contactNameInput.text, contactPhoneInput.text);
        		window.pageStack.layers.pop();
        	}
        }

M qml/contacts/EditContact.qml => qml/contacts/EditContact.qml +2 -1
@@ 2,6 2,7 @@ import QtQuick 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.15
import org.kde.kirigami 2.13 as Kirigami
import SignalUI 0.1

Kirigami.Page {
	id: editContact


@@ 62,7 63,7 @@ Kirigami.Page {
				text: "Save changes"
				onClicked: {
					console.log("Sending edit contact");
					signal.edit_contact(editContactName.text, editContactTel.text, editContact.uuid)
					SignalUI.edit_contact(editContactName.text, editContactTel.text, editContact.uuid)
					window.pageStack.layers.pop();
				}
			}

M qml/loading.qml => qml/loading.qml +1 -0
@@ 1,6 1,7 @@
import QtQuick 2.12
import QtQuick.Controls 2.5
import org.kde.kirigami 2.13 as Kirigami
import SignalUI 0.1

Kirigami.Page {
    anchors.fill: stackView

M qml/main.qml => qml/main.qml +10 -1
@@ 4,6 4,8 @@ import SignalUI 0.1
import QtQuick.Layouts 1.15
import QtQuick.Controls.Material 2.12
import org.kde.kirigami 2.13 as Kirigami
import SignalUI 0.1

Kirigami.ApplicationWindow {
    id: window
    width: 640


@@ 25,7 27,7 @@ Kirigami.ApplicationWindow {
    SignalState {
        id: signalState
    }
    SignalUI {
    /*SignalUI {
        id: signal
        objectName: "signal"
        Component.onCompleted: {


@@ 37,6 39,13 @@ Kirigami.ApplicationWindow {
            signalState.currentView = "chats";
            window.pageStack.replace(chatViewStack);
        }
    }*/
    Connections {
        target: SignalUI
        function onReady() {
 signalState.currentView = "chats";
            window.pageStack.replace(chatViewStack);
        }
    }
    pageStack.initialPage: Kirigami.Page {
    objectName: "loadingpage"

M qml/messages/ChatHistory.qml => qml/messages/ChatHistory.qml +7 -6
@@ 3,6 3,7 @@ import QtQuick.Controls 2.5
import QtQuick.Layouts 1.15
import QtQuick.Dialogs 1.3
import org.kde.kirigami 2.13 as Kirigami
import SignalUI 0.1

Kirigami.ScrollablePage {
    //anchors.fill: stackView


@@ 26,14 27,14 @@ Kirigami.ScrollablePage {
    function sendMessage() {
        console.log("Sending "+ msgTextInput.text +" to "+signalState.current);
        if (signalState.currentIsGroup) {
            signal.send_group_message(signalState.current, msgTextInput.text, "");
            SignalUI.send_group_message(signalState.current, msgTextInput.text, "");
        } else {
            signal.send_message(signalState.current, msgTextInput.text, "");
            SignalUI.send_message(signalState.current, msgTextInput.text, "");
        }
        msgTextInput.text = "";
    }
    Connections {
        target: signal
        target: SignalUI
        function onChats_changed () {
            signalState.setCurrent(signalState.current);
        }


@@ 47,12 48,12 @@ Kirigami.ScrollablePage {
        onAccepted: {
            var path = fd.fileUrl.toString().replace("file://", "");
            if (signalState.currentIsGroup) {
            signal.send_group_message(signalState.current, msgTextInput.text, path);
            SignalUI.send_group_message(signalState.current, msgTextInput.text, path);

                } else {


            signal.send_message(signalState.current, msgTextInput.text, path);
            SignalUI.send_message(signalState.current, msgTextInput.text, path);
        }
        }
    }


@@ 78,7 79,7 @@ Kirigami.ScrollablePage {
                    outgoing: outgoing
                    message: model
                }
            model: signal.messages
            model: SignalUI.messages
        }

    footer:         Row {

M qml/messages/MessageImage.qml => qml/messages/MessageImage.qml +1 -0
@@ 2,6 2,7 @@ import QtQuick 2.15;
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.15
import org.kde.kirigami 2.13 as Kirigami
import SignalUI 0.1

Image { 
	id: messageImage

M qml/messages/MessageInfo.qml => qml/messages/MessageInfo.qml +2 -0
@@ 2,6 2,8 @@ import QtQuick 2.15
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.15
import org.kde.kirigami 2.13 as Kirigami
import SignalUI 0.1

Kirigami.OverlaySheet {
	id: messageInfo
	property var message: ""

M qml/messages/MessageUI.qml => qml/messages/MessageUI.qml +4 -2
@@ 2,6 2,8 @@ import QtQuick 2.15
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.15
import org.kde.kirigami 2.13 as Kirigami
import SignalUI 0.1

ItemDelegate {
    id: message
    x: 5


@@ 59,7 61,7 @@ ItemDelegate {
                    id: msgRightClick
                    MenuItem {
                        onClicked: {
                            signal.del_message(signalState.current, message.message.sent_at);
                            SignalUI.del_message(signalState.current, message.message.sent_at);
                        }
                        text: "Delete"
                    }


@@ 146,7 148,7 @@ ItemDelegate {
                	id: dynName
                	leftPadding: 5
                	Label {
                		text: signal.resolve_name(message.message.source)
                		text: SignalUI.resolve_name(message.message.source)
                		visible: signalState.currentIsGroup
                	}
                }

M qml/messages/PictureOverlay.qml => qml/messages/PictureOverlay.qml +1 -0
@@ 2,6 2,7 @@ import QtQuick 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.15
import org.kde.kirigami 2.13 as Kirigami
import SignalUI 0.1

Kirigami.OverlaySheet {
	topPadding: 0

M src/main.rs => src/main.rs +20 -11
@@ 15,11 15,11 @@
 */
#![feature(async_closure)]
use cpp::cpp;
use presage::config::*;
use presage::prelude::*;
use presage::*;
use qmetaobject::QAbstractListModel;
use qmetaobject::*;
use std::any::Any;
use std::ffi::CStr;
use std::io::Read;
use tokio::sync::mpsc::*;


@@ 266,8 266,9 @@ impl SignalUI {
    }

    fn init_state(&mut self) {
        let config: Config = confy::load("signal-rs").expect("Couldn't handle config file");
        let qptr = QPointer::from(&*self);

        let config: Config = confy::load("signal-rs").expect("Couldn't handle config file");
        self.config.replace(config.clone());
        let process_res = queued_callback(move |res: SignalResponse| {
            qptr.as_pinned().map(move |self_| {


@@ 382,8 383,7 @@ impl SignalUI {
        // Run the presage thread
        qmetaobject::future::execute_async(async move {
            Presage::run(
                presage::config::SledConfigStore::new(cstore_path.join(PathBuf::from("cstore")))
                    .unwrap(),
                presage::SledConfigStore::new(cstore_path.join(PathBuf::from("cstore"))).unwrap(),
                res_sender,
                req_receiver,
                config,


@@ 511,6 511,12 @@ impl SignalUI {
        self.send_res(SignalResponse::ModelContactList(contacts));
    }
}
impl QSingletonInit for SignalUI {
    fn init(&mut self) {
        println!("Initing");
        self.init_state();
    }
}
/// An enum that represents a view that can be displayed.
#[derive(Clone, Debug)]
pub enum View {


@@ 533,12 539,11 @@ async fn main() -> Result<(), std::boxed::Box<dyn std::error::Error>> {
    let data_dir = conf
        .data_dir
        .replace("~", home::home_dir().unwrap().to_str().unwrap());
    let config_store = presage::config::SledConfigStore::new(
        PathBuf::from(data_dir).join(PathBuf::from("cstore")),
    )
    .unwrap();
    let config_store =
        presage::SledConfigStore::new(PathBuf::from(data_dir).join(PathBuf::from("cstore")))
            .unwrap();
    // Check if the user is registered or not
    let registered = match config_store.state(&ProtocolContext::default())? {
    let registered = match config_store.state()? {
        State::Registered { .. } => true,
        _ => false,
    };


@@ 548,24 553,28 @@ async fn main() -> Result<(), std::boxed::Box<dyn std::error::Error>> {
        cpp! { {
            #include <QtCore/QCoreApplication>
            #include <QtCore/QString>
            #include <QtWidgets/QWidget>
            #include <QtWidgets/QApplication>
            #include <QtGui/QIcon>
        }}
        cpp! ([] {
            QCoreApplication::setApplicationName(QStringLiteral("signal-rs.nicohman"));
            QCoreApplication::setOrganizationDomain(QStringLiteral("nicohman.com"));
            QCoreApplication::setOrganizationName(QStringLiteral("signal-rs.nicohman"));
            QApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("signal-desktop")));
        });
    }
    qrc::load();
    if registered {
        qml_register_type::<SignalUI>(
        qml_register_singleton_type::<SignalUI>(
            CStr::from_bytes_with_nul(b"SignalUI\0").unwrap(),
            0,
            1,
            CStr::from_bytes_with_nul(b"SignalUI\0").unwrap(),
        );
        let mut engine = QmlEngine::new();

        engine.load_file("qrc:/qml/main.qml".into());

        engine.exec();
    } else {
        // Init webengine for the captcha page

M src/presage_manager.rs => src/presage_manager.rs +20 -24
@@ 28,8 28,7 @@ impl Presage {
        let data_dir = config
            .data_dir
            .replace("~", home::home_dir().unwrap().to_str().unwrap());
        let mut manager = Manager::with_config_store(config_store, ProtocolContext::default())
            .expect("Couldn't create Manager");
        let mut manager = Manager::with_store(config_store).expect("Couldn't create Manager");
        let whoami = manager
            .whoami()
            .await


@@ 47,6 46,13 @@ impl Presage {
                .map(|x| x.format().mode(phonenumber::Mode::E164).to_string())
                .unwrap_or_default(),
        );
        print!(
            "{:?}",
            manager
                .get_contacts()
                .unwrap()
                .collect::<Vec<presage::libsignal_service::models::Contact>>()
        );
        res_sender
            .send(SignalResponse::Profile(Profile {
                uuid: whoami.clone(),


@@ 56,7 62,7 @@ impl Presage {
            }))
            .expect("Couldn't send own profile");
        let incoming_messages = manager
            .receive_messages_stream()
            .receive_messages()
            .await
            .expect("Couldn't create incoming messages stream");
        let mut pinned_fut = Box::pin(incoming_messages);


@@ 124,14 130,9 @@ impl Presage {
                                    for attachment in dm.attachments.iter() {
                                        let path = Path::new(&data_dir).join("attachments").join(attachment.file_name());
                                        if !path.exists() {
                                            let mut key : [u8; 64] = [0; 64];
                                            let mut down = manager.fetch_attachment(attachment).await.unwrap();
                                            key.copy_from_slice(attachment.key.as_ref().unwrap().as_slice());
                                            let mut ciphertext : Vec<u8> = vec![];
                                            down.read_to_end(&mut ciphertext).await.unwrap();
                                            libsignal_service::attachment_cipher::decrypt_in_place(key, &mut ciphertext).unwrap();
                                            let down = manager.get_attachment(attachment).await.unwrap();
                                            let mut f = fs::OpenOptions::new().write(true).create(true).open(&path).unwrap();
                                            f.write_all(&ciphertext).expect("Couldn't write to attachment file");
                                            f.write_all(&down).expect("Couldn't write to attachment file");
                                            attachments.push(Attachment {
                                                file: path.into_os_string().into_string().unwrap(),
                                                file_name: attachment.file_name().to_string(),


@@ 201,14 202,9 @@ impl Presage {
                                            for attachment in dm.attachments.iter() {
                                                let path = Path::new(&data_dir).join("attachments").join(attachment.file_name());
                                                if !path.exists() {
                                                    let mut key : [u8; 64] = [0; 64];
                                                    let mut down = manager.fetch_attachment(attachment).await.unwrap();
                                                    key.copy_from_slice(attachment.key.as_ref().unwrap().as_slice());
                                                    let mut ciphertext : Vec<u8> = vec![];
                                                    down.read_to_end(&mut ciphertext).await.unwrap();
                                                    libsignal_service::attachment_cipher::decrypt_in_place(key, &mut ciphertext).unwrap();
                                                    let down = manager.get_attachment(attachment).await.unwrap();
                                                    let mut f = fs::OpenOptions::new().write(true).create(true).open(&path).unwrap();
                                                    f.write_all(&ciphertext).expect("Couldn't write to attachment file");
                                                    f.write_all(&down).expect("Couldn't write to attachment file");
                                                    attachments.push(Attachment {
                                                        file: path.into_os_string().into_string().unwrap(),
                                                        file_name: attachment.file_name().to_string(),


@@ 274,7 270,7 @@ impl Presage {
                            res_sender.send(sm).expect("Couldn't send IDLessMessage");
                        },
                        SignalRequest::SendMessage { to, message, attachment: _ } => {
                            let tos = ServiceAddress::parse(None, Some(to.as_str())).unwrap_or_else(|_| {ServiceAddress::parse(Some(to.as_str()), None).unwrap()});
                            let tos = ServiceAddress::parse(None, Some(&to.as_str().to_lowercase())).unwrap_or_else(|_| {ServiceAddress::parse(Some(to.as_str()), None).unwrap()});
                            let now = chrono::Utc::now().timestamp_millis() as u64;
                            let msg = DataMessage {
                                body: Some(message.clone()),


@@ 494,12 490,12 @@ impl Presage {
                        }
                    }
                } else {
                    let name = meta
                        .sender
                        .e164()
                        .map(|x| x.to_string())
                        .unwrap_or(meta.sender.uuid.unwrap().to_string().to_uppercase())
                        .to_uppercase();
                    /*let name = meta
                    .sender
                    .e164()
                    .map(|x| x.to_string())
                    .unwrap_or(meta.sender.uuid.unwrap().to_string().to_uppercase())
                    .to_uppercase();*/
                    let contact = Contact {
                        state: "fake".into(),
                        name: "".to_string(),

M src/registration.rs => src/registration.rs +4 -4
@@ 37,12 37,11 @@ impl RegistrationController {
            let data_dir = conf
                .data_dir
                .replace("~", home::home_dir().unwrap().to_str().unwrap());
            let config_store = presage::config::SledConfigStore::new(
            let config_store = presage::SledConfigStore::new(
                PathBuf::from(data_dir).join(PathBuf::from("cstore")),
            )
            .unwrap();
            let mut manager =
                Manager::with_config_store(config_store, ProtocolContext::default()).unwrap();
            let mut manager = Manager::with_store(config_store).unwrap();
            loop {
                let next = req_receiver.next().await;
                match next.unwrap() {


@@ 57,7 56,8 @@ impl RegistrationController {
                                    libsignal_service::configuration::SignalServers::Production,
                                    phone,
                                    voice,
                                    captcha.as_ref().map(|x| x.as_str()),
                                    captcha.as_ref().map(|x| x.to_string()),
                                    false,
                                )
                                .await;
                            if res.is_ok() {

M src/util.rs => src/util.rs +1 -1
@@ 1,4 1,4 @@
use libsignal_service::prelude::*;
use presage::prelude::*;
// When given a group master key, derive secret params and return the identifier
pub fn get_gid_v2(master_key: Vec<u8>) -> String {
    let secret_params = GroupSecretParams::derive_from_master_key(make_gkey(master_key));