From 14d188bd4e634478dc19fe91388fca557821100f Mon Sep 17 00:00:00 2001 From: Monica Moniot Date: Wed, 28 Feb 2024 13:26:28 -0500 Subject: [PATCH] corrected constants --- src/p384/address.rs | 3 ++- src/p384/identifier.rs | 23 ++++++++++------------- src/p384/identity.rs | 8 ++++++-- src/p384/identity_secret.rs | 2 +- src/p384/mod.rs | 3 ++- src/p384/short_address.rs | 5 +++-- 6 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/p384/address.rs b/src/p384/address.rs index 3011e35..061a0a8 100644 --- a/src/p384/address.rs +++ b/src/p384/address.rs @@ -30,7 +30,8 @@ impl Address { pub const SIZE: usize = 48; /// Length of a full address in string format. - pub const STRING_SIZE: usize = 76; + pub const STRING_SIZE: usize = 81; + pub const STRING_SIZE_NO_PREFIX: usize = 76; /// Get this address as a raw byte array. #[inline(always)] diff --git a/src/p384/identifier.rs b/src/p384/identifier.rs index 8162066..fb25088 100644 --- a/src/p384/identifier.rs +++ b/src/p384/identifier.rs @@ -195,7 +195,7 @@ impl<'a> ToString for PeerIdentifierRef<'a> { match self { Self::Identity(id) => id.to_string(), Self::Address(addr) => addr.to_string(), - Self::Short(addr) => addr.to_string(), + Self::Short(addr) => addr.to_string(), } } } @@ -204,7 +204,7 @@ impl ToString for PeerIdentifier { match self { Self::Identity(id) => id.to_string(), Self::Address(addr) => addr.to_string(), - Self::Short(addr) => addr.to_string(), + Self::Short(addr) => addr.to_string(), } } } @@ -212,7 +212,7 @@ impl ToString for AnyAddress { fn to_string(&self) -> String { match self { Self::Address(addr) => addr.to_string(), - Self::Short(addr) => addr.to_string(), + Self::Short(addr) => addr.to_string(), } } } @@ -248,7 +248,7 @@ impl<'a> serde::Serialize for PeerIdentifierRef<'a> { match self { Self::Identity(id) => id.serialize(s), Self::Address(addr) => addr.serialize(s), - Self::Short(addr) => addr.serialize(s), + Self::Short(addr) => addr.serialize(s), } } } @@ -257,7 +257,7 @@ impl serde::Serialize for PeerIdentifier { match self { Self::Identity(id) => id.serialize(s), Self::Address(addr) => addr.serialize(s), - Self::Short(addr) => addr.serialize(s), + Self::Short(addr) => addr.serialize(s), } } } @@ -265,7 +265,7 @@ impl serde::Serialize for AnyAddress { fn serialize(&self, s: S) -> Result { match self { Self::Address(addr) => addr.serialize(s), - Self::Short(addr) => addr.serialize(s), + Self::Short(addr) => addr.serialize(s), } } } @@ -288,13 +288,12 @@ impl<'de> Deserialize<'de> for PeerIdentifier { formatter.write_str("a zerotier identifier") } - fn visit_bytes(self, v: &[u8]) -> Result - { + fn visit_bytes(self, v: &[u8]) -> Result { match v.len() { Identity::SIZE => Identity::from_bytes(v).map(Self::Value::Identity), Address::SIZE => Address::from_bytes(v).map(Self::Value::Address), ShortAddress::SIZE => ShortAddress::from_bytes(v).map(Self::Value::Short), - _ => return Err(serde::de::Error::custom(ADDRESS_ERR.0)) + _ => return Err(serde::de::Error::custom(ADDRESS_ERR.0)), } .map_err(|_| serde::de::Error::custom(ADDRESS_ERR.0)) } @@ -321,12 +320,11 @@ impl<'de> Deserialize<'de> for AnyAddress { formatter.write_str("a zerotier identifier") } - fn visit_bytes(self, v: &[u8]) -> Result - { + fn visit_bytes(self, v: &[u8]) -> Result { match v.len() { Address::SIZE => Address::from_bytes(v).map(Self::Value::Address), ShortAddress::SIZE => ShortAddress::from_bytes(v).map(Self::Value::Short), - _ => return Err(serde::de::Error::custom(ADDRESS_ERR.0)) + _ => return Err(serde::de::Error::custom(ADDRESS_ERR.0)), } .map_err(|_| serde::de::Error::custom(ADDRESS_ERR.0)) } @@ -336,7 +334,6 @@ impl<'de> Deserialize<'de> for AnyAddress { } } - /* Start of Conversions */ impl<'a> From<&'a PeerIdentifier> for PeerIdentifierRef<'a> { diff --git a/src/p384/identity.rs b/src/p384/identity.rs index 0c7d800..111f38e 100644 --- a/src/p384/identity.rs +++ b/src/p384/identity.rs @@ -30,8 +30,12 @@ pub struct Identity { impl Identity { pub const SIZE: usize = P384_IDENTITY_SIZE; - pub const STRING_SIZE: usize = 547; - pub const STRING_SIZE_NO_PREFIX: usize = 542; + pub const STRING_SIZE: usize = 548; + pub const STRING_SIZE_NO_PREFIX: usize = 543; + + pub fn prefix(&self) -> &ShortAddress { + self.address.prefix() + } pub(crate) fn locally_validate(&self) -> bool { let to_sign: &[&[u8]] = &[ diff --git a/src/p384/identity_secret.rs b/src/p384/identity_secret.rs index 870d542..993f6db 100644 --- a/src/p384/identity_secret.rs +++ b/src/p384/identity_secret.rs @@ -122,7 +122,7 @@ impl<'de> Deserialize<'de> for IdentitySecret { } } } - return Err(serde::de::Error::custom(IDENTITY_ERR.0)); + Err(serde::de::Error::custom(IDENTITY_ERR.0)) } } diff --git a/src/p384/mod.rs b/src/p384/mod.rs index fe8ff28..1b07fdc 100644 --- a/src/p384/mod.rs +++ b/src/p384/mod.rs @@ -64,7 +64,8 @@ mod tests { let start = ms_monotonic(); for _ in 0..3 { let secret = p384::IdentitySecret::generate(1); - println!("P: {}", secret.public.to_string()); + let s = secret.public.to_string(); + println!("P: {} ({})", s, s.len()); } let end = ms_monotonic(); println!("p384 generation time: {} ms/identity", ((end - start) as f64) / 3.0); diff --git a/src/p384/short_address.rs b/src/p384/short_address.rs index a891062..0e1dea8 100644 --- a/src/p384/short_address.rs +++ b/src/p384/short_address.rs @@ -18,7 +18,8 @@ pub struct ShortAddress(pub(crate) [u64; 2]); // treated as [u8; 16] impl ShortAddress { pub const SIZE: usize = 16; - pub const STRING_SIZE: usize = 31; + pub const STRING_SIZE: usize = 36; + pub const STRING_SIZE_NO_PREFIX: usize = 31; #[inline(always)] pub fn as_bytes(&self) -> &[u8; Self::SIZE] { @@ -120,7 +121,7 @@ impl FromStr for ShortAddress { } } } - return Err(ADDRESS_ERR); + Err(ADDRESS_ERR) } }