fixed wasm build and trait impl
This commit is contained in:
@@ -103,13 +103,14 @@ impl GatewaysDetailsStore for InMemGatewaysDetails {
|
||||
) -> Result<(), Self::StorageError> {
|
||||
let mut guard = self.inner.write().await;
|
||||
|
||||
#[allow(clippy::unwrap_used)]
|
||||
if let Some(target) = guard.gateways.get_mut(&gateway_id.to_string()) {
|
||||
let GatewayDetails::Remote(details) = &mut target.details else {
|
||||
return Ok(());
|
||||
};
|
||||
assert_eq!(Arc::strong_count(&details.shared_key), 1);
|
||||
|
||||
// eh. that's nasty, but it's only ever for ephemeral clients so should be fine for now...
|
||||
// eh. that's nasty, but it's only ever used for ephemeral clients so should be fine for now...
|
||||
details.shared_key = Arc::new(SharedGatewayKey::Current(
|
||||
SharedSymmetricKey::try_from_bytes(updated_key.as_bytes()).unwrap(),
|
||||
))
|
||||
|
||||
@@ -25,6 +25,7 @@ pub struct Initialisation {
|
||||
}
|
||||
|
||||
impl Initialisation {
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub fn is_legacy(&self) -> bool {
|
||||
self.initiator_salt.is_none()
|
||||
}
|
||||
@@ -78,7 +79,7 @@ impl HandshakeMessage for Initialisation {
|
||||
.chain(self.ephemeral_dh.to_bytes());
|
||||
|
||||
if let Some(salt) = self.initiator_salt {
|
||||
bytes.chain(salt.into_iter()).collect()
|
||||
bytes.chain(salt).collect()
|
||||
} else {
|
||||
bytes.collect()
|
||||
}
|
||||
|
||||
@@ -15,6 +15,8 @@ use nym_client_core::client::key_manager::persistence::KeyStore;
|
||||
use nym_client_core::client::key_manager::ClientKeys;
|
||||
use nym_client_core::client::replies::reply_storage::browser_backend;
|
||||
use nym_credential_storage::ephemeral_storage::EphemeralStorage as EphemeralCredentialStorage;
|
||||
use nym_crypto::asymmetric::ed25519::PublicKey;
|
||||
use nym_gateway_client::SharedSymmetricKey;
|
||||
use wasm_utils::console_log;
|
||||
|
||||
// temporary until other variants are properly implemented (probably it should get changed into `ClientStorage`
|
||||
@@ -43,8 +45,18 @@ impl MixnetClientStorage for FullWasmClientStorage {
|
||||
|
||||
type GatewaysDetailsStore = ClientStorage;
|
||||
|
||||
fn into_runtime_stores(self) -> (Self::ReplyStore, Self::CredentialStore) {
|
||||
(self.reply_storage, self.credential_storage)
|
||||
fn into_runtime_stores(
|
||||
self,
|
||||
) -> (
|
||||
Self::ReplyStore,
|
||||
Self::CredentialStore,
|
||||
Self::GatewaysDetailsStore,
|
||||
) {
|
||||
(
|
||||
self.reply_storage,
|
||||
self.credential_storage,
|
||||
self.keys_and_gateway_store,
|
||||
)
|
||||
}
|
||||
|
||||
fn key_store(&self) -> &Self::KeyStore {
|
||||
@@ -142,6 +154,19 @@ impl GatewaysDetailsStore for ClientStorage {
|
||||
self.store_registered_gateway(&raw_registration).await
|
||||
}
|
||||
|
||||
async fn upgrade_stored_remote_gateway_key(
|
||||
&self,
|
||||
gateway_id: PublicKey,
|
||||
updated_key: &SharedSymmetricKey,
|
||||
) -> Result<(), Self::StorageError> {
|
||||
self.update_remote_gateway_key(
|
||||
&gateway_id.to_base58_string(),
|
||||
None,
|
||||
Some(updated_key.as_bytes()),
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
||||
async fn remove_gateway_details(&self, gateway_id: &str) -> Result<(), Self::StorageError> {
|
||||
self.remove_registered_gateway(gateway_id).await
|
||||
}
|
||||
|
||||
@@ -8,12 +8,14 @@ use nym_gateway_client::SharedGatewayKey;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::ops::Deref;
|
||||
use time::OffsetDateTime;
|
||||
use zeroize::Zeroize;
|
||||
|
||||
// a more nested struct since we only have a single gateway type in wasm (no 'custom')
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, Zeroize)]
|
||||
pub struct WasmRawRegisteredGateway {
|
||||
pub gateway_id_bs58: String,
|
||||
|
||||
#[zeroize(skip)]
|
||||
pub registration_timestamp: OffsetDateTime,
|
||||
|
||||
pub derived_aes128_ctr_blake3_hmac_keys_bs58: Option<String>,
|
||||
|
||||
@@ -10,6 +10,7 @@ use std::error::Error;
|
||||
use thiserror::Error;
|
||||
use wasm_bindgen::JsValue;
|
||||
use wasm_storage::traits::BaseWasmStorage;
|
||||
use zeroize::Zeroize;
|
||||
|
||||
// v1 tables
|
||||
pub(crate) mod v1 {
|
||||
@@ -228,6 +229,23 @@ pub trait WasmClientStorage: BaseWasmStorage {
|
||||
.map_err(Into::into)
|
||||
}
|
||||
|
||||
async fn update_remote_gateway_key(
|
||||
&self,
|
||||
gateway_id_bs58: &str,
|
||||
derived_aes128_ctr_blake3_hmac_keys_bs58: Option<&str>,
|
||||
derived_aes256_gcm_siv_key: Option<&[u8]>,
|
||||
) -> Result<(), <Self as WasmClientStorage>::StorageError> {
|
||||
if let Some(mut current) = self.maybe_get_registered_gateway(gateway_id_bs58).await? {
|
||||
current.derived_aes128_ctr_blake3_hmac_keys_bs58 =
|
||||
derived_aes128_ctr_blake3_hmac_keys_bs58.map(|k| k.to_string());
|
||||
current.derived_aes256_gcm_siv_key = derived_aes256_gcm_siv_key.map(|k| k.to_vec());
|
||||
self.store_registered_gateway(¤t).await?;
|
||||
current.zeroize();
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn remove_registered_gateway(
|
||||
&self,
|
||||
gateway_id: &str,
|
||||
|
||||
Generated
+26
-4
@@ -1930,14 +1930,14 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "getset"
|
||||
version = "0.1.2"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9"
|
||||
checksum = "f636605b743120a8d32ed92fc27b6cde1a769f8f936c065151eb66f88ded513c"
|
||||
dependencies = [
|
||||
"proc-macro-error",
|
||||
"proc-macro-error2",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 1.0.109",
|
||||
"syn 2.0.55",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -4130,6 +4130,28 @@ dependencies = [
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error-attr2"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error2"
|
||||
version = "2.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802"
|
||||
dependencies = [
|
||||
"proc-macro-error-attr2",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.55",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-hack"
|
||||
version = "0.5.20+deprecated"
|
||||
|
||||
@@ -22,8 +22,18 @@ impl MixnetClientStorage for MobileClientStorage {
|
||||
type CredentialStore = EphemeralCredentialStorage;
|
||||
type GatewaysDetailsStore = InMemGatewaysDetails;
|
||||
|
||||
fn into_runtime_stores(self) -> (Self::ReplyStore, Self::CredentialStore) {
|
||||
(self.reply_store, self.credential_store)
|
||||
fn into_runtime_stores(
|
||||
self,
|
||||
) -> (
|
||||
Self::ReplyStore,
|
||||
Self::CredentialStore,
|
||||
Self::GatewaysDetailsStore,
|
||||
) {
|
||||
(
|
||||
self.reply_store,
|
||||
self.credential_store,
|
||||
self.gateway_details_store,
|
||||
)
|
||||
}
|
||||
|
||||
fn key_store(&self) -> &Self::KeyStore {
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
use nym_crypto::asymmetric::ed25519::PublicKey;
|
||||
use nym_gateway_requests::SharedSymmetricKey;
|
||||
use nym_sdk::mixnet::{
|
||||
self, ActiveGateway, BadGateway, ClientKeys, EmptyReplyStorage, EphemeralCredentialStorage,
|
||||
GatewayRegistration, GatewaysDetailsStore, KeyStore, MixnetClientStorage, MixnetMessageSender,
|
||||
@@ -63,8 +65,18 @@ impl MixnetClientStorage for MockClientStorage {
|
||||
type CredentialStore = EphemeralCredentialStorage;
|
||||
type GatewaysDetailsStore = MockGatewayDetailsStore;
|
||||
|
||||
fn into_runtime_stores(self) -> (Self::ReplyStore, Self::CredentialStore) {
|
||||
(self.reply_store, self.credential_store)
|
||||
fn into_runtime_stores(
|
||||
self,
|
||||
) -> (
|
||||
Self::ReplyStore,
|
||||
Self::CredentialStore,
|
||||
Self::GatewaysDetailsStore,
|
||||
) {
|
||||
(
|
||||
self.reply_store,
|
||||
self.credential_store,
|
||||
self.gateway_details_store,
|
||||
)
|
||||
}
|
||||
|
||||
fn key_store(&self) -> &Self::KeyStore {
|
||||
@@ -151,6 +163,16 @@ impl GatewaysDetailsStore for MockGatewayDetailsStore {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn upgrade_stored_remote_gateway_key(
|
||||
&self,
|
||||
gateway_id: PublicKey,
|
||||
_updated_key: &SharedSymmetricKey,
|
||||
) -> Result<(), Self::StorageError> {
|
||||
println!("upgrading gateway key for {gateway_id}");
|
||||
|
||||
Err(MyError)
|
||||
}
|
||||
|
||||
async fn remove_gateway_details(&self, _gateway_id: &str) -> Result<(), Self::StorageError> {
|
||||
println!("removing gateway details");
|
||||
|
||||
|
||||
@@ -221,7 +221,7 @@ impl NymNodeTesterBuilder {
|
||||
.await?;
|
||||
}
|
||||
gateway_client.claim_initial_bandwidth().await?;
|
||||
gateway_client.start_listening_for_mixnet_messages().await?;
|
||||
gateway_client.start_listening_for_mixnet_messages()?;
|
||||
|
||||
// TODO: make those values configurable later
|
||||
let tester = NodeTester::new(
|
||||
|
||||
Reference in New Issue
Block a user