Преглед изворни кода

crypto/keypair: impl Display for PublicKey

ghassmo пре 4 година
родитељ
комит
aa00491572
3 измењених фајлова са 32 додато и 60 уклоњено
  1. 32 0
      src/crypto/keypair.rs
  2. 0 58
      src/util/address.rs
  3. 0 2
      src/util/mod.rs

+ 32 - 0
src/crypto/keypair.rs

@@ -7,6 +7,7 @@ use pasta_curves::{
     pallas,
     pallas,
 };
 };
 use rand::RngCore;
 use rand::RngCore;
+use sha2::Digest;
 
 
 use crate::{
 use crate::{
     crypto::{constants::OrchardFixedBases, util::mod_r_p},
     crypto::{constants::OrchardFixedBases, util::mod_r_p},
@@ -65,6 +66,37 @@ impl PublicKey {
     }
     }
 }
 }
 
 
+impl std::fmt::Display for PublicKey {
+    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
+        // sha256
+        let mut hasher = sha2::Sha256::new();
+        hasher.update(self.to_bytes());
+        let hash = hasher.finalize();
+
+        // ripemd160
+        let mut hasher = ripemd160::Ripemd160::new();
+        hasher.update(hash);
+        let mut hash = hasher.finalize().to_vec();
+
+        // add version
+        let mut payload = vec![0x00_u8];
+
+        // add public key hash
+        payload.append(&mut hash);
+
+        // hash the payload + version
+        let mut hasher = sha2::Sha256::new();
+        hasher.update(payload.clone());
+        let payload_hash = hasher.finalize().to_vec();
+
+        payload.append(&mut payload_hash[0..4].to_vec());
+
+        // base58 encoding
+        let address: String = bs58::encode(payload).into_string();
+        write!(f, "{}", address)
+    }
+}
+
 impl Encodable for pallas::Base {
 impl Encodable for pallas::Base {
     fn encode<S: io::Write>(&self, mut s: S) -> Result<usize> {
     fn encode<S: io::Write>(&self, mut s: S) -> Result<usize> {
         s.write_slice(&self.to_bytes()[..])?;
         s.write_slice(&self.to_bytes()[..])?;

+ 0 - 58
src/util/address.rs

@@ -1,58 +0,0 @@
-use sha2::Digest;
-
-use crate::crypto::keypair::PublicKey;
-
-#[derive(Clone, Debug)]
-pub struct Address {
-    pub raw: PublicKey,
-    pub pkh: String,
-}
-
-impl Address {
-    pub fn new(raw: PublicKey) -> Self {
-        let pkh = Self::pkh_address(&raw);
-
-        Address { raw, pkh }
-    }
-
-    fn get_hash(raw: &PublicKey) -> Vec<u8> {
-        // sha256
-        let mut hasher = sha2::Sha256::new();
-        hasher.update(raw.to_bytes());
-        let hash = hasher.finalize();
-
-        // ripemd160
-        let mut hasher = ripemd160::Ripemd160::new();
-        hasher.update(hash);
-        let hash = hasher.finalize();
-        hash.to_vec()
-    }
-
-    pub fn pkh_address(raw: &PublicKey) -> String {
-        let mut hash = Self::get_hash(raw);
-
-        // add version
-        let mut payload = vec![0x00_u8];
-
-        // add public key hash
-        payload.append(&mut hash);
-
-        // hash the payload + version
-        let mut hasher = sha2::Sha256::new();
-        hasher.update(payload.clone());
-        let payload_hash = hasher.finalize().to_vec();
-
-        payload.append(&mut payload_hash[0..4].to_vec());
-
-        // base58 encoding
-        let address: String = bs58::encode(payload).into_string();
-
-        address
-    }
-}
-
-impl std::fmt::Display for Address {
-    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
-        write!(f, "{}", self.pkh)
-    }
-}

+ 0 - 2
src/util/mod.rs

@@ -1,11 +1,9 @@
-pub mod address;
 pub mod loader;
 pub mod loader;
 pub mod net_name;
 pub mod net_name;
 pub mod parse;
 pub mod parse;
 pub mod path;
 pub mod path;
 pub mod token_list;
 pub mod token_list;
 
 
-pub use address::Address;
 pub use loader::ContractLoader;
 pub use loader::ContractLoader;
 pub use net_name::NetworkName;
 pub use net_name::NetworkName;
 pub use parse::{assign_id, decode_base10, encode_base10, generate_id, generate_id2};
 pub use parse::{assign_id, decode_base10, encode_base10, generate_id, generate_id2};