summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEmīls Piņķis <emils@mullvad.net>2019-08-16 20:29:17 +0100
committerEmīls Piņķis <emils@mullvad.net>2019-08-19 16:42:01 +0100
commit2d20a6f5b65172bf17f7c122af1beb45d5d31c13 (patch)
treefac729e130001ff27917d797c8964b15a1097ec4
parente061817f71f94348d32613b32a28d6b279f06328 (diff)
downloadmullvadvpn-2d20a6f5b65172bf17f7c122af1beb45d5d31c13.tar.xz
mullvadvpn-2d20a6f5b65172bf17f7c122af1beb45d5d31c13.zip
Add method for validating wireguard key
-rw-r--r--mullvad-jni/src/daemon_interface.rs7
-rw-r--r--mullvad-jni/src/lib.rs27
2 files changed, 33 insertions, 1 deletions
diff --git a/mullvad-jni/src/daemon_interface.rs b/mullvad-jni/src/daemon_interface.rs
index 80c3abec26..f80c645bb6 100644
--- a/mullvad-jni/src/daemon_interface.rs
+++ b/mullvad-jni/src/daemon_interface.rs
@@ -148,6 +148,13 @@ impl DaemonInterface {
rx.wait().map_err(|_| Error::NoResponse)
}
+ pub fn verify_wireguard_key(&self) -> Result<bool> {
+ let (tx, rx) = oneshot::channel();
+
+ self.send_command(ManagementCommand::VerifyWireguardKey(tx))?;
+ rx.wait().map_err(|_| Error::NoResponse)
+ }
+
pub fn set_account(&self, account_token: Option<String>) -> Result<()> {
let (tx, rx) = oneshot::channel();
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs
index 28c68e422f..c8d267bb8b 100644
--- a/mullvad-jni/src/lib.rs
+++ b/mullvad-jni/src/lib.rs
@@ -12,7 +12,7 @@ use crate::{
jni_event_listener::JniEventListener, vpn_service_tun_provider::VpnServiceTunProvider,
};
use jni::{
- objects::{GlobalRef, JObject, JString},
+ objects::{GlobalRef, JObject, JString, JValue},
sys::{jboolean, JNI_FALSE, JNI_TRUE},
JNIEnv,
};
@@ -30,6 +30,7 @@ use talpid_types::ErrorExt;
const LOG_FILENAME: &str = "daemon.log";
const CLASSES_TO_LOAD: &[&str] = &[
+ "java/lang/Boolean",
"java/net/InetAddress",
"java/net/InetSocketAddress",
"java/util/ArrayList",
@@ -275,6 +276,30 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_MullvadDaemon_generateWiregua
#[no_mangle]
#[allow(non_snake_case)]
+pub extern "system" fn Java_net_mullvad_mullvadvpn_MullvadDaemon_verifyWireguardKey<'env, 'this>(
+ env: JNIEnv<'env>,
+ _: JObject<'this>,
+) -> JObject<'env> {
+ match DAEMON_INTERFACE.verify_wireguard_key() {
+ Ok(key_is_valid) => env
+ .new_object(
+ &get_class("java/lang/Boolean"),
+ "(Z)V",
+ &[JValue::Bool(key_is_valid as jboolean)],
+ )
+ .expect("Failed to create Boolean Java object"),
+ Err(error) => {
+ log::error!(
+ "{}",
+ error.display_chain_with_msg("Failed to verify wireguard key")
+ );
+ JObject::null()
+ }
+ }
+}
+
+#[no_mangle]
+#[allow(non_snake_case)]
pub extern "system" fn Java_net_mullvad_mullvadvpn_MullvadDaemon_getAccountData<'env, 'this>(
env: JNIEnv<'env>,
_: JObject<'this>,