Skip to content

Commit

Permalink
review comments
Browse files Browse the repository at this point in the history
  • Loading branch information
SWvheerden committed Jun 20, 2024
1 parent 3930c4a commit 53b733a
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 60 deletions.
58 changes: 31 additions & 27 deletions base_layer/common_types/src/tari_address/dual_address.rs
Original file line number Diff line number Diff line change
Expand Up @@ -157,19 +157,23 @@ impl DualAddress {

/// Construct Tari Address from Base58
pub fn from_base58(hex_str: &str) -> Result<Self, TariAddressError> {
if hex_str.len() < 3 {
if hex_str.len() != 91 {
return Err(TariAddressError::InvalidSize);
}
let (first, rest) = hex_str.split_at(2);
let (network, features) = first.split_at(1);
let mut network = bs58::decode(network).into_vec().map_err(|_| TariAddressError::CannotRecoverNetwork)?;
let mut features = bs58::decode(features).into_vec().map_err(|_| TariAddressError::CannotRecoverFeature)?;
if rest.is_empty(){
return Err(TariAddressError::CannotRecoverPublicKey);
}
let mut rest = bs58::decode(rest).into_vec().map_err(|_| TariAddressError::CannotRecoverPublicKey)?;
network.append(&mut features);network.append(&mut rest);
Self::from_bytes(network.as_slice())
let mut result = bs58::decode(network)
.into_vec()
.map_err(|_| TariAddressError::CannotRecoverNetwork)?;
let mut features = bs58::decode(features)
.into_vec()
.map_err(|_| TariAddressError::CannotRecoverFeature)?;
let mut rest = bs58::decode(rest)
.into_vec()
.map_err(|_| TariAddressError::CannotRecoverPublicKey)?;
result.append(&mut features);
result.append(&mut rest);
Self::from_bytes(result.as_slice())
}

/// Convert Tari Address to Base58 string
Expand Down Expand Up @@ -290,19 +294,19 @@ mod test {
let address = DualAddress::new_with_default_features(view_key.clone(), spend_key.clone(), Network::Esmeralda);

let buff = address.to_bytes();
let hex = address.to_base58();
let base58 = address.to_base58();

let address_buff = DualAddress::from_bytes(&buff).unwrap();
assert_eq!(address_buff.public_spend_key(), address.public_spend_key());
assert_eq!(address_buff.public_view_key(), address.public_view_key());
assert_eq!(address_buff.network(), address.network());
assert_eq!(address_buff.features(), address.features());

let address_hex = DualAddress::from_base58(&hex).unwrap();
assert_eq!(address_hex.public_spend_key(), address.public_spend_key());
assert_eq!(address_hex.public_view_key(), address.public_view_key());
assert_eq!(address_hex.network(), address.network());
assert_eq!(address_hex.features(), address.features());
let address_base58 = DualAddress::from_base58(&base58).unwrap();
assert_eq!(address_base58.public_spend_key(), address.public_spend_key());
assert_eq!(address_base58.public_view_key(), address.public_view_key());
assert_eq!(address_base58.network(), address.network());
assert_eq!(address_base58.features(), address.features());

let view_key = PublicKey::from_secret_key(&PrivateKey::random(&mut rng));
let spend_key = PublicKey::from_secret_key(&PrivateKey::random(&mut rng));
Expand All @@ -316,19 +320,19 @@ mod test {
);

let buff = address.to_bytes();
let hex = address.to_base58();
let base58 = address.to_base58();

let address_buff = DualAddress::from_bytes(&buff).unwrap();
assert_eq!(address_buff.public_spend_key(), address.public_spend_key());
assert_eq!(address_buff.public_view_key(), address.public_view_key());
assert_eq!(address_buff.network(), address.network());
assert_eq!(address_buff.features(), address.features());

let address_hex = DualAddress::from_base58(&hex).unwrap();
assert_eq!(address_hex.public_spend_key(), address.public_spend_key());
assert_eq!(address_hex.public_view_key(), address.public_view_key());
assert_eq!(address_hex.network(), address.network());
assert_eq!(address_hex.features(), address.features());
let address_base58 = DualAddress::from_base58(&base58).unwrap();
assert_eq!(address_base58.public_spend_key(), address.public_spend_key());
assert_eq!(address_base58.public_view_key(), address.public_view_key());
assert_eq!(address_base58.network(), address.network());
assert_eq!(address_base58.features(), address.features());

let view_key = PublicKey::from_secret_key(&PrivateKey::random(&mut rng));
let spend_key = PublicKey::from_secret_key(&PrivateKey::random(&mut rng));
Expand All @@ -342,19 +346,19 @@ mod test {
);

let buff = address.to_bytes();
let hex = address.to_base58();
let base58 = address.to_base58();

let address_buff = DualAddress::from_bytes(&buff).unwrap();
assert_eq!(address_buff.public_spend_key(), address.public_spend_key());
assert_eq!(address_buff.public_view_key(), address.public_view_key());
assert_eq!(address_buff.network(), address.network());
assert_eq!(address_buff.features(), address.features());

let address_hex = DualAddress::from_base58(&hex).unwrap();
assert_eq!(address_hex.public_spend_key(), address.public_spend_key());
assert_eq!(address_hex.public_view_key(), address.public_view_key());
assert_eq!(address_hex.network(), address.network());
assert_eq!(address_hex.features(), address.features());
let address_base58 = DualAddress::from_base58(&base58).unwrap();
assert_eq!(address_base58.public_spend_key(), address.public_spend_key());
assert_eq!(address_base58.public_view_key(), address.public_view_key());
assert_eq!(address_base58.network(), address.network());
assert_eq!(address_base58.features(), address.features());
}

#[test]
Expand Down
22 changes: 13 additions & 9 deletions base_layer/common_types/src/tari_address/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -218,19 +218,23 @@ impl TariAddress {

/// Construct Tari Address from hex
pub fn from_base58(hex_str: &str) -> Result<TariAddress, TariAddressError> {
if hex_str.len() < 3 {
if hex_str.len() < 47 {
return Err(TariAddressError::InvalidSize);
}
let (first, rest) = hex_str.split_at(2);
let (network, features) = first.split_at(1);
let mut network = bs58::decode(network).into_vec().map_err(|_| TariAddressError::CannotRecoverNetwork)?;
let mut features = bs58::decode(features).into_vec().map_err(|_| TariAddressError::CannotRecoverFeature)?;
if rest.is_empty(){
return Err(TariAddressError::CannotRecoverPublicKey);
}
let mut rest = bs58::decode(rest).into_vec().map_err(|_| TariAddressError::CannotRecoverPublicKey)?;
network.append(&mut features);network.append(&mut rest);
Self::from_bytes(network.as_slice())
let mut result = bs58::decode(network)
.into_vec()
.map_err(|_| TariAddressError::CannotRecoverNetwork)?;
let mut features = bs58::decode(features)
.into_vec()
.map_err(|_| TariAddressError::CannotRecoverFeature)?;
let mut rest = bs58::decode(rest)
.into_vec()
.map_err(|_| TariAddressError::CannotRecoverPublicKey)?;
result.append(&mut features);
result.append(&mut rest);
Self::from_bytes(result.as_slice())
}

/// Convert Tari Address to bytes
Expand Down
52 changes: 28 additions & 24 deletions base_layer/common_types/src/tari_address/single_address.rs
Original file line number Diff line number Diff line change
Expand Up @@ -140,19 +140,23 @@ impl SingleAddress {

/// Construct Tari Address from Base58
pub fn from_base58(hex_str: &str) -> Result<Self, TariAddressError> {
if hex_str.len() < 3 {
if hex_str.len() != 47 {
return Err(TariAddressError::InvalidSize);
}
let (first, rest) = hex_str.split_at(2);
let (network, features) = first.split_at(1);
let mut network = bs58::decode(network).into_vec().map_err(|_| TariAddressError::CannotRecoverNetwork)?;
let mut features = bs58::decode(features).into_vec().map_err(|_| TariAddressError::CannotRecoverFeature)?;
if rest.is_empty(){
return Err(TariAddressError::CannotRecoverPublicKey);
}
let mut rest = bs58::decode(rest).into_vec().map_err(|_| TariAddressError::CannotRecoverPublicKey)?;
network.append(&mut features);network.append(&mut rest);
Self::from_bytes(network.as_slice())
let mut result = bs58::decode(network)
.into_vec()
.map_err(|_| TariAddressError::CannotRecoverNetwork)?;
let mut features = bs58::decode(features)
.into_vec()
.map_err(|_| TariAddressError::CannotRecoverFeature)?;
let mut rest = bs58::decode(rest)
.into_vec()
.map_err(|_| TariAddressError::CannotRecoverPublicKey)?;
result.append(&mut features);
result.append(&mut rest);
Self::from_bytes(result.as_slice())
}

/// Convert Tari Address to Base58
Expand Down Expand Up @@ -259,17 +263,17 @@ mod test {
let address = SingleAddress::new_with_interactive_only(public_key.clone(), Network::Esmeralda);

let buff = address.to_bytes();
let hex = address.to_base58();
let base58 = address.to_base58();

let address_buff = SingleAddress::from_bytes(&buff).unwrap();
assert_eq!(address_buff.public_spend_key(), address.public_spend_key());
assert_eq!(address_buff.network(), address.network());
assert_eq!(address_buff.features(), address.features());

let address_hex = SingleAddress::from_base58(&hex).unwrap();
assert_eq!(address_hex.public_spend_key(), address.public_spend_key());
assert_eq!(address_hex.network(), address.network());
assert_eq!(address_hex.features(), address.features());
let address_base58 = SingleAddress::from_base58(&base58).unwrap();
assert_eq!(address_base58.public_spend_key(), address.public_spend_key());
assert_eq!(address_base58.network(), address.network());
assert_eq!(address_base58.features(), address.features());

// Generate random public key
let public_key = PublicKey::from_secret_key(&PrivateKey::random(&mut rng));
Expand All @@ -282,17 +286,17 @@ mod test {
);

let buff = address.to_bytes();
let hex = address.to_base58();
let base58 = address.to_base58();

let address_buff = SingleAddress::from_bytes(&buff).unwrap();
assert_eq!(address_buff.public_spend_key(), address.public_spend_key());
assert_eq!(address_buff.network(), address.network());
assert_eq!(address_buff.features(), address.features());

let address_hex = SingleAddress::from_base58(&hex).unwrap();
assert_eq!(address_hex.public_spend_key(), address.public_spend_key());
assert_eq!(address_hex.network(), address.network());
assert_eq!(address_hex.features(), address.features());
let address_base58 = SingleAddress::from_base58(&base58).unwrap();
assert_eq!(address_base58.public_spend_key(), address.public_spend_key());
assert_eq!(address_base58.network(), address.network());
assert_eq!(address_base58.features(), address.features());

// Generate random public key
let public_key = PublicKey::from_secret_key(&PrivateKey::random(&mut rng));
Expand All @@ -305,17 +309,17 @@ mod test {
);

let buff = address.to_bytes();
let hex = address.to_base58();
let base58 = address.to_base58();

let address_buff = SingleAddress::from_bytes(&buff).unwrap();
assert_eq!(address_buff.public_spend_key(), address.public_spend_key());
assert_eq!(address_buff.network(), address.network());
assert_eq!(address_buff.features(), address.features());

let address_hex = SingleAddress::from_base58(&hex).unwrap();
assert_eq!(address_hex.public_spend_key(), address.public_spend_key());
assert_eq!(address_hex.network(), address.network());
assert_eq!(address_hex.features(), address.features());
let address_base58 = SingleAddress::from_base58(&base58).unwrap();
assert_eq!(address_base58.public_spend_key(), address.public_spend_key());
assert_eq!(address_base58.network(), address.network());
assert_eq!(address_base58.features(), address.features());
}

#[test]
Expand Down

0 comments on commit 53b733a

Please sign in to comment.