Skip to content
Snippets Groups Projects
Commit e02bc567 authored by qh11's avatar qh11
Browse files

Update address.rs

parent fbb9875c
No related branches found
No related tags found
No related merge requests found
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"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment