From 691bc1d4e65af39b9ae550e32ae33d4e53779422 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 4 Apr 2025 14:12:46 -0400 Subject: [PATCH 01/10] change serialization in node core lib rs --- node_core/src/lib.rs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/node_core/src/lib.rs b/node_core/src/lib.rs index 33a0fd5..024dbba 100644 --- a/node_core/src/lib.rs +++ b/node_core/src/lib.rs @@ -4,7 +4,6 @@ use std::sync::{ }; use common::ExecutionFailureKind; -use k256::elliptic_curve::group::GroupEncoding; use ::storage::transaction::{Transaction, TransactionPayload, TxKind}; use accounts::account_core::{Account, AccountAddress}; @@ -181,7 +180,7 @@ impl NodeCore { let ephm_key_holder = &accout.produce_ephemeral_key_holder(); ephm_key_holder.log(); - let eph_pub_key = ephm_key_holder.generate_ephemeral_public_key().to_bytes(); + let eph_pub_key = serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); let encoded_data = Account::encrypt_data( &ephm_key_holder, @@ -232,7 +231,7 @@ impl NodeCore { let ephm_key_holder = &accout.produce_ephemeral_key_holder(); ephm_key_holder.log(); - let eph_pub_key = ephm_key_holder.generate_ephemeral_public_key().to_bytes(); + let eph_pub_key = serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); let encoded_data = utxos .iter() @@ -308,7 +307,7 @@ impl NodeCore { let ephm_key_holder = &accout.produce_ephemeral_key_holder(); ephm_key_holder.log(); - let eph_pub_key = ephm_key_holder.generate_ephemeral_public_key().to_bytes(); + let eph_pub_key = serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); let encoded_data: Vec<(Vec, Vec, u8)> = utxos .iter() @@ -392,7 +391,7 @@ impl NodeCore { let ephm_key_holder = &accout.produce_ephemeral_key_holder(); ephm_key_holder.log(); - let eph_pub_key = ephm_key_holder.generate_ephemeral_public_key().to_bytes(); + let eph_pub_key = serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); let mut encoded_data: Vec<(Vec, Vec, u8)> = resulting_utxos_receiver .iter() @@ -498,7 +497,7 @@ impl NodeCore { let ephm_key_holder = &account.produce_ephemeral_key_holder(); ephm_key_holder.log(); - let eph_pub_key = ephm_key_holder.generate_ephemeral_public_key().to_bytes(); + let eph_pub_key = serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); let encoded_data: Vec<(Vec, Vec, u8)> = utxos .iter() @@ -1124,7 +1123,7 @@ impl NodeCore { let ephm_key_holder = &accout.produce_ephemeral_key_holder(); ephm_key_holder.log(); - let eph_pub_key = ephm_key_holder.generate_ephemeral_public_key().to_bytes(); + let eph_pub_key = serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); let encoded_data: Vec<(Vec, Vec, u8)> = utxos .iter() From ef3125b48eeb96ff8fb1ae4bacda58834d4deeac Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 4 Apr 2025 14:13:51 -0400 Subject: [PATCH 02/10] fix eph_key_compressed AffinePoint serialization --- node_core/src/storage/mod.rs | 48 +++++++++++++++--------------------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/node_core/src/storage/mod.rs b/node_core/src/storage/mod.rs index ca2f8d8..d8d8842 100644 --- a/node_core/src/storage/mod.rs +++ b/node_core/src/storage/mod.rs @@ -106,39 +106,31 @@ impl NodeChainStore { .collect(), )?; - let slice_try: Result<[u8; 33], _> = tx.ephemeral_pub_key.clone().try_into(); - let eph_key_compressed = - slice_try.and_then(|inner| Ok(::Repr::from(inner))); + let eph_key_compressed = serde_json::to_vec(&tx.ephemeral_pub_key); if let Ok(eph_key_compressed) = eph_key_compressed { - let ephemeral_public_key_sender = AffinePoint::from_bytes(&eph_key_compressed); - if ephemeral_public_key_sender.is_some().into() { - let ephemeral_public_key_sender = ephemeral_public_key_sender.unwrap(); + let ephemeral_public_key_sender = serde_json::from_slice::(&eph_key_compressed)?; - for (ciphertext, nonce, tag) in tx.encoded_data.clone() { - let slice = nonce.as_slice(); - let nonce = - accounts::key_management::constants_types::Nonce::clone_from_slice( - slice, + for (ciphertext, nonce, tag) in tx.encoded_data.clone() { + let slice = nonce.as_slice(); + let nonce = + accounts::key_management::constants_types::Nonce::clone_from_slice( + slice, + ); + for (acc_id, acc) in self.acc_map.iter_mut() { + if acc_id[0] == tag { + let decoded_data_curr_acc = acc.decrypt_data( + ephemeral_public_key_sender, + ciphertext.clone(), + nonce, ); - - for (acc_id, acc) in self.acc_map.iter_mut() { - if acc_id[0] == tag { - let decoded_data_curr_acc = acc.decrypt_data( - ephemeral_public_key_sender, - ciphertext.clone(), - nonce, - ); - - if let Ok(decoded_data_curr_acc) = decoded_data_curr_acc { - let decoded_utxo_try = - serde_json::from_slice::(&decoded_data_curr_acc); - - if let Ok(utxo) = decoded_utxo_try { - if &utxo.owner == acc_id { - acc.utxo_tree.insert_item(utxo)?; - } + if let Ok(decoded_data_curr_acc) = decoded_data_curr_acc { + let decoded_utxo_try = + serde_json::from_slice::(&decoded_data_curr_acc); + if let Ok(utxo) = decoded_utxo_try { + if &utxo.owner == acc_id { + acc.utxo_tree.insert_item(utxo)?; } } } From 4b0666c617a7f12d9579c0dc23e5a975b4d19b27 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 4 Apr 2025 14:14:04 -0400 Subject: [PATCH 03/10] fmt --- node_core/src/lib.rs | 18 ++++++++++++------ node_core/src/storage/mod.rs | 8 +++----- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/node_core/src/lib.rs b/node_core/src/lib.rs index 024dbba..33bc228 100644 --- a/node_core/src/lib.rs +++ b/node_core/src/lib.rs @@ -180,7 +180,8 @@ impl NodeCore { let ephm_key_holder = &accout.produce_ephemeral_key_holder(); ephm_key_holder.log(); - let eph_pub_key = serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); + let eph_pub_key = + serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); let encoded_data = Account::encrypt_data( &ephm_key_holder, @@ -231,7 +232,8 @@ impl NodeCore { let ephm_key_holder = &accout.produce_ephemeral_key_holder(); ephm_key_holder.log(); - let eph_pub_key = serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); + let eph_pub_key = + serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); let encoded_data = utxos .iter() @@ -307,7 +309,8 @@ impl NodeCore { let ephm_key_holder = &accout.produce_ephemeral_key_holder(); ephm_key_holder.log(); - let eph_pub_key = serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); + let eph_pub_key = + serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); let encoded_data: Vec<(Vec, Vec, u8)> = utxos .iter() @@ -391,7 +394,8 @@ impl NodeCore { let ephm_key_holder = &accout.produce_ephemeral_key_holder(); ephm_key_holder.log(); - let eph_pub_key = serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); + let eph_pub_key = + serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); let mut encoded_data: Vec<(Vec, Vec, u8)> = resulting_utxos_receiver .iter() @@ -497,7 +501,8 @@ impl NodeCore { let ephm_key_holder = &account.produce_ephemeral_key_holder(); ephm_key_holder.log(); - let eph_pub_key = serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); + let eph_pub_key = + serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); let encoded_data: Vec<(Vec, Vec, u8)> = utxos .iter() @@ -1123,7 +1128,8 @@ impl NodeCore { let ephm_key_holder = &accout.produce_ephemeral_key_holder(); ephm_key_holder.log(); - let eph_pub_key = serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); + let eph_pub_key = + serde_json::to_vec(&ephm_key_holder.generate_ephemeral_public_key()).unwrap(); let encoded_data: Vec<(Vec, Vec, u8)> = utxos .iter() diff --git a/node_core/src/storage/mod.rs b/node_core/src/storage/mod.rs index d8d8842..d987d0c 100644 --- a/node_core/src/storage/mod.rs +++ b/node_core/src/storage/mod.rs @@ -109,15 +109,13 @@ impl NodeChainStore { let eph_key_compressed = serde_json::to_vec(&tx.ephemeral_pub_key); if let Ok(eph_key_compressed) = eph_key_compressed { - - let ephemeral_public_key_sender = serde_json::from_slice::(&eph_key_compressed)?; + let ephemeral_public_key_sender = + serde_json::from_slice::(&eph_key_compressed)?; for (ciphertext, nonce, tag) in tx.encoded_data.clone() { let slice = nonce.as_slice(); let nonce = - accounts::key_management::constants_types::Nonce::clone_from_slice( - slice, - ); + accounts::key_management::constants_types::Nonce::clone_from_slice(slice); for (acc_id, acc) in self.acc_map.iter_mut() { if acc_id[0] == tag { let decoded_data_curr_acc = acc.decrypt_data( From a1ba0894d9c0058194942be02f5a3cc70ec13dd9 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 4 Apr 2025 14:39:27 -0400 Subject: [PATCH 04/10] build fix --- node_core/src/storage/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/node_core/src/storage/mod.rs b/node_core/src/storage/mod.rs index d987d0c..51d00f2 100644 --- a/node_core/src/storage/mod.rs +++ b/node_core/src/storage/mod.rs @@ -6,7 +6,6 @@ use std::{ use accounts::account_core::{Account, AccountAddress}; use anyhow::Result; use block_store::NodeBlockStore; -use elliptic_curve::group::GroupEncoding; use k256::AffinePoint; use public_context::PublicSCContext; use storage::{ From bd35f5e0254dd3140f019bbec37138dad5016fdb Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 4 Apr 2025 14:39:37 -0400 Subject: [PATCH 05/10] fix log --- accounts/src/key_management/ephemeral_key_holder.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accounts/src/key_management/ephemeral_key_holder.rs b/accounts/src/key_management/ephemeral_key_holder.rs index 0d8d64c..ef5b16a 100644 --- a/accounts/src/key_management/ephemeral_key_holder.rs +++ b/accounts/src/key_management/ephemeral_key_holder.rs @@ -56,7 +56,7 @@ impl EphemeralKeyHolder { pub fn log(&self) { info!( "Ephemeral private key is {:?}", - hex::encode(self.ephemeral_secret_key.to_bytes()) + hex::encode(serde_json::to_vec(&self.ephemeral_secret_key).unwrap()) ); } } From 2f3a6ab921370944b707b0d6b9816d9a624e11f5 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 4 Apr 2025 14:55:50 -0400 Subject: [PATCH 06/10] replace serilization in key_management --- accounts/src/key_management/mod.rs | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/accounts/src/key_management/mod.rs b/accounts/src/key_management/mod.rs index ed3660f..b8fa28d 100644 --- a/accounts/src/key_management/mod.rs +++ b/accounts/src/key_management/mod.rs @@ -1,6 +1,5 @@ use aes_gcm::{aead::Aead, Aes256Gcm, Key, KeyInit}; use constants_types::{CipherText, Nonce}; -use elliptic_curve::group::GroupEncoding; use ephemeral_key_holder::EphemeralKeyHolder; use k256::AffinePoint; use log::info; @@ -65,7 +64,7 @@ impl AddressKeyHolder { nonce: Nonce, ) -> Result, aes_gcm::Error> { let key_point = self.calculate_shared_secret_receiver(ephemeral_public_key_sender); - let binding = key_point.to_bytes(); + let binding = serde_json::to_vec(&key_point).unwrap(); let key_raw = &binding.as_slice()[..32]; let key_raw_adjust: [u8; 32] = key_raw.try_into().unwrap(); @@ -79,23 +78,23 @@ impl AddressKeyHolder { pub fn log(&self) { info!( "Secret spending key is {:?}", - hex::encode(self.top_secret_key_holder.secret_spending_key.to_bytes()), + hex::encode(serde_json::to_vec(&self.top_secret_key_holder.secret_spending_key).unwrap()), ); info!( "Nulifier secret key is {:?}", - hex::encode(self.utxo_secret_key_holder.nullifier_secret_key.to_bytes()), + hex::encode(serde_json::to_vec(&self.utxo_secret_key_holder.nullifier_secret_key).unwrap()), ); info!( "Viewing secret key is {:?}", - hex::encode(self.utxo_secret_key_holder.viewing_secret_key.to_bytes()), + hex::encode(serde_json::to_vec(&self.utxo_secret_key_holder.viewing_secret_key).unwrap()), ); info!( "Nullifier public key is {:?}", - hex::encode(self.nullifer_public_key.to_bytes()), + hex::encode(serde_json::to_vec(&self.nullifer_public_key).unwrap()), ); info!( "Viewing public key is {:?}", - hex::encode(self.viewing_public_key.to_bytes()), + hex::encode(serde_json::to_vec(&self.viewing_public_key).unwrap()), ); } } @@ -158,7 +157,7 @@ mod tests { address_key_holder.calculate_shared_secret_receiver(ephemeral_public_key_sender); // Prepare the encryption key from shared secret - let key_raw = shared_secret.to_bytes(); + let key_raw = serde_json::to_vec(&shared_secret).unwrap(); let key_raw_adjust_pre = &key_raw.as_slice()[..32]; let key_raw_adjust: [u8; 32] = key_raw_adjust_pre.try_into().unwrap(); let key: Key = key_raw_adjust.into(); @@ -226,7 +225,7 @@ mod tests { address_key_holder.calculate_shared_secret_receiver(ephemeral_public_key_sender); // Prepare the encryption key from shared secret - let key_raw = shared_secret.to_bytes(); + let key_raw = serde_json::to_vec(&shared_secret).unwrap(); let key_raw_adjust_pre = &key_raw.as_slice()[..32]; let key_raw_adjust: [u8; 32] = key_raw_adjust_pre.try_into().unwrap(); let key: Key = key_raw_adjust.into(); @@ -266,7 +265,7 @@ mod tests { address_key_holder.calculate_shared_secret_receiver(ephemeral_public_key_sender); // Prepare the encryption key from shared secret - let key_raw = shared_secret.to_bytes(); + let key_raw = serde_json::to_vec(&shared_secret).unwrap(); let key_raw_adjust_pre = &key_raw.as_slice()[..32]; let key_raw_adjust: [u8; 32] = key_raw_adjust_pre.try_into().unwrap(); let key: Key = key_raw_adjust.into(); @@ -312,7 +311,7 @@ mod tests { let shared_secret = address_key_holder.calculate_shared_secret_receiver(ephemeral_public_key_sender); // Prepare the encryption key from shared secret - let key_raw = shared_secret.to_bytes(); + let key_raw = serde_json::to_vec(&shared_secret).unwrap(); let key_raw_adjust_pre = &key_raw.as_slice()[..32]; let key_raw_adjust: [u8; 32] = key_raw_adjust_pre.try_into().unwrap(); let key: Key = key_raw_adjust.into(); @@ -351,7 +350,7 @@ mod tests { println!( "Group generator {:?}", - hex::encode(AffinePoint::GENERATOR.to_bytes()) + hex::encode(serde_json::to_vec(&AffinePoint::GENERATOR).unwrap()) ); println!( "Nullifier constant {:?}", @@ -373,11 +372,11 @@ mod tests { println!("Address{:?}", hex::encode(address)); println!( "Nulifier public key {:?}", - hex::encode(nullifer_public_key.to_bytes()) + hex::encode(serde_json::to_vec(&nullifer_public_key).unwrap()) ); println!( "Viewing public key {:?}", - hex::encode(viewing_public_key.to_bytes()) + hex::encode(serde_json::to_vec(&viewing_public_key).unwrap()) ); } } From 59e6ee82401c6e1a46ab0894464c086b3f122029 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 4 Apr 2025 14:56:30 -0400 Subject: [PATCH 07/10] replace serilization in key_management ephm key holder --- accounts/src/key_management/ephemeral_key_holder.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/accounts/src/key_management/ephemeral_key_holder.rs b/accounts/src/key_management/ephemeral_key_holder.rs index ef5b16a..9e3a9b1 100644 --- a/accounts/src/key_management/ephemeral_key_holder.rs +++ b/accounts/src/key_management/ephemeral_key_holder.rs @@ -1,5 +1,4 @@ use aes_gcm::{aead::Aead, AeadCore, Aes256Gcm, Key, KeyInit}; -use elliptic_curve::group::GroupEncoding; use elliptic_curve::PrimeField; use k256::{AffinePoint, FieldBytes, Scalar}; use log::info; @@ -41,7 +40,7 @@ impl EphemeralKeyHolder { data: &[u8], ) -> (CipherText, Nonce) { let key_point = self.calculate_shared_secret_sender(viewing_public_key_receiver); - let binding = key_point.to_bytes(); + let binding = serde_json::to_vec(&key_point).unwrap(); let key_raw = &binding.as_slice()[..32]; let key_raw_adjust: [u8; 32] = key_raw.try_into().unwrap(); From 6066554a7a69b00d0f88b444d71117b9f3d46700 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 4 Apr 2025 15:02:03 -0400 Subject: [PATCH 08/10] replace serilization in key_management secret holder --- accounts/src/key_management/secret_holders.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/accounts/src/key_management/secret_holders.rs b/accounts/src/key_management/secret_holders.rs index c1b48b5..bd4a9e5 100644 --- a/accounts/src/key_management/secret_holders.rs +++ b/accounts/src/key_management/secret_holders.rs @@ -1,4 +1,3 @@ -use elliptic_curve::group::GroupEncoding; use elliptic_curve::PrimeField; use k256::{AffinePoint, FieldBytes, Scalar}; use rand::{rngs::OsRng, RngCore}; @@ -105,8 +104,8 @@ impl UTXOSecretKeyHolder { let mut hasher = sha2::Sha256::new(); - hasher.update(npk.to_bytes()); - hasher.update(vpk.to_bytes()); + hasher.update(serde_json::to_vec(&npk).unwrap()); + hasher.update(serde_json::to_vec(&vpk).unwrap()); ::from(hasher.finalize_fixed()) } From a9bd1a1a5ccba2fb03a4ce4d3b58aa3b9bcc6309 Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 4 Apr 2025 15:02:12 -0400 Subject: [PATCH 09/10] replace serilization in sequencer --- sequencer_core/src/sequecer_store/accounts_store.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/sequencer_core/src/sequecer_store/accounts_store.rs b/sequencer_core/src/sequecer_store/accounts_store.rs index c7d4f21..8bd2308 100644 --- a/sequencer_core/src/sequecer_store/accounts_store.rs +++ b/sequencer_core/src/sequecer_store/accounts_store.rs @@ -1,5 +1,5 @@ use accounts::account_core::{AccountAddress, PublicKey}; -use elliptic_curve::group::GroupEncoding; +use k256::AffinePoint; use std::collections::HashMap; #[derive(Debug, Clone)] @@ -16,10 +16,8 @@ impl AccountPublicData { viewing_public_key: Vec, ) -> Self { Self { - nullifier_public_key: PublicKey::from_bytes(nullifier_public_key.as_slice().into()) - .unwrap(), - viewing_public_key: PublicKey::from_bytes(viewing_public_key.as_slice().into()) - .unwrap(), + nullifier_public_key: serde_json::from_slice::(&nullifier_public_key).unwrap(), + viewing_public_key: serde_json::from_slice::(&viewing_public_key).unwrap(), address, } } From 33934f1e0559565a8dd4c0f42bed0a0bdc03c40f Mon Sep 17 00:00:00 2001 From: Rostyslav Tyshko Date: Fri, 4 Apr 2025 15:23:19 -0400 Subject: [PATCH 10/10] fmt --- accounts/src/key_management/mod.rs | 12 +++++++++--- sequencer_core/src/sequecer_store/accounts_store.rs | 3 ++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/accounts/src/key_management/mod.rs b/accounts/src/key_management/mod.rs index b8fa28d..5de3db2 100644 --- a/accounts/src/key_management/mod.rs +++ b/accounts/src/key_management/mod.rs @@ -78,15 +78,21 @@ impl AddressKeyHolder { pub fn log(&self) { info!( "Secret spending key is {:?}", - hex::encode(serde_json::to_vec(&self.top_secret_key_holder.secret_spending_key).unwrap()), + hex::encode( + serde_json::to_vec(&self.top_secret_key_holder.secret_spending_key).unwrap() + ), ); info!( "Nulifier secret key is {:?}", - hex::encode(serde_json::to_vec(&self.utxo_secret_key_holder.nullifier_secret_key).unwrap()), + hex::encode( + serde_json::to_vec(&self.utxo_secret_key_holder.nullifier_secret_key).unwrap() + ), ); info!( "Viewing secret key is {:?}", - hex::encode(serde_json::to_vec(&self.utxo_secret_key_holder.viewing_secret_key).unwrap()), + hex::encode( + serde_json::to_vec(&self.utxo_secret_key_holder.viewing_secret_key).unwrap() + ), ); info!( "Nullifier public key is {:?}", diff --git a/sequencer_core/src/sequecer_store/accounts_store.rs b/sequencer_core/src/sequecer_store/accounts_store.rs index 8bd2308..fe1286f 100644 --- a/sequencer_core/src/sequecer_store/accounts_store.rs +++ b/sequencer_core/src/sequecer_store/accounts_store.rs @@ -16,7 +16,8 @@ impl AccountPublicData { viewing_public_key: Vec, ) -> Self { Self { - nullifier_public_key: serde_json::from_slice::(&nullifier_public_key).unwrap(), + nullifier_public_key: serde_json::from_slice::(&nullifier_public_key) + .unwrap(), viewing_public_key: serde_json::from_slice::(&viewing_public_key).unwrap(), address, }