From e02bc567b5d78796e53f0b7b8a4a8c6fef2d645c Mon Sep 17 00:00:00 2001 From: qh11 <qh11@illinois.edu> Date: Sun, 13 Feb 2022 15:36:31 -0600 Subject: [PATCH] Update address.rs --- src/types/address.rs | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/types/address.rs b/src/types/address.rs index df3a94e..c0dd032 100644 --- a/src/types/address.rs +++ b/src/types/address.rs @@ -1,11 +1,5 @@ -extern crate data_encoding; -extern crate ring; use serde::{Serialize, Deserialize}; - -use ring::digest::{Context, SHA256}; - -use data_encoding::HEXLOWER; - +use ring::digest; // 20-byte address #[derive(Eq, PartialEq, Serialize, Deserialize, Clone, Hash, Default, Copy)] @@ -55,13 +49,17 @@ impl std::fmt::Debug for Address { impl Address { pub fn from_public_key_bytes(bytes: &[u8]) -> Address { - let mut context = Context::new(&SHA256); - context.update(&bytes[..]); - let result = context.finish(); - let mut a:[u8; 20] = [0u8;20]; - a.copy_from_slice(&(result.as_ref()[12..32])); - Address(a) - //unimplemented!() + let digest_result = digest::digest(&digest::SHA256, bytes); + let public_key_hash = digest_result.as_ref(); + // let result = &public_key_hash[public_key_hash.len()-20..]; + let mut result = [0u8;20]; + let mut i = 0; + let prefix = public_key_hash.len() - 20; + while i<20{ + result[i] = public_key_hash[prefix + i]; + i+=1; + } + Address::from(result) } } // DO NOT CHANGE THIS COMMENT, IT IS FOR AUTOGRADER. BEFORE TEST @@ -75,8 +73,6 @@ mod test { let test_key = hex!("0a0b0c0d0e0f0e0d0a0b0c0d0e0f0e0d0a0b0c0d0e0f0e0d0a0b0c0d0e0f0e0d"); let addr = Address::from_public_key_bytes(&test_key); let correct_addr: Address = hex!("1851a0eae0060a132cf0f64a0ffaea248de6cba0").into(); - println!("addr:{}",addr); - println!("correct_addr:{}",correct_addr); assert_eq!(addr, correct_addr); // "b69566be6e1720872f73651d1851a0eae0060a132cf0f64a0ffaea248de6cba0" is the hash of // "0a0b0c0d0e0f0e0d0a0b0c0d0e0f0e0d0a0b0c0d0e0f0e0d0a0b0c0d0e0f0e0d" -- GitLab