Skip to content

Commit

Permalink
feat(su): hash chain working correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
VinceJuliano committed Dec 15, 2023
1 parent dedeebd commit 09c6e59
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 22 deletions.
17 changes: 9 additions & 8 deletions servers/su/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion servers/su/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@ tokio = "1.34.0"
env_logger = "0.10.1"
log = "0.4.20"
rsa = "0.6.1"
dashmap = "5.5.3"
dashmap = "5.5.3"
base64 = "0.21.5"
48 changes: 38 additions & 10 deletions servers/su/src/domain/scheduler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ use dashmap::DashMap;
use tokio::sync::Mutex;
use base64_url;

use base64;

use crate::domain::clients::store::{StoreClient};
use crate::domain::core::dal::{ScheduleProvider, Log};
use crate::config::Config;
Expand Down Expand Up @@ -86,22 +88,48 @@ impl ProcessScheduler {
}
}

fn gen_hash_chain(previous_or_seed: &str, message_id: Option<&str>) -> Result<String, String> {
pub trait DecodeHash: Sized {
fn from(base64_url_string: &str) -> Result<Self, String>;
fn empty() -> Self;
}

impl DecodeHash for [u8; 32] {
fn from(base64_url_string: &str) -> Result<Self, String> {
base64_url::decode(base64_url_string)
.map_err(|e| e.to_string())
.and_then(|bytes| {
bytes
.try_into()
.map_err(|_| format!("Length mismatch 32 - {base64_url_string}"))
})
}

fn empty() -> Self {
[0u8; 32]
}
}

fn gen_hash_chain(previous_or_seed: &str, previous_message_id: Option<&str>) -> Result<String, String> {
let mut hasher = Sha256::new();
let mut all = previous_or_seed.to_string();
match message_id {

let prev_bytes: [u8; 32] = match DecodeHash::from(previous_or_seed) {
Ok(pb) => pb,
Err(e) => return Err(e),
};

match previous_message_id {
Some(id) => {
all = id.to_string() + previous_or_seed;
let id_bytes: [u8; 32] = match DecodeHash::from(id) {
Ok(idb) => idb,
Err(e) => return Err(e),
};
hasher.update(id_bytes);
},
None => ()
}

let bytes = match base64_url::decode(&all) {
Ok(p) => p,
Err(e) => return Err(e.to_string())
};
hasher.update(prev_bytes);

hasher.update(bytes);
let result = hasher.finalize();

Ok(base64_url::encode(&result))
Expand Down Expand Up @@ -160,4 +188,4 @@ impl ScheduleProvider for ScheduleInfo {
fn hash_chain(&self) -> String {
self.hash_chain.to_string()
}
}
}
12 changes: 9 additions & 3 deletions servers/testscripts/src/local/hashes.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
import Arweave from 'arweave';

(async function () {
const pid = Arweave.utils.b64UrlToBuffer('kRIwKM5cLvEDWmgbZ8OSDT1SFdJaWQJgtpCJayDd7_4')
const pid = Arweave.utils.b64UrlToBuffer('2sWgl7kzGl1MlBvENlMri2PIWTuwzZ0sx2PpS18fFK4')
const hash = await Arweave.crypto.hash(pid)
const h = Arweave.utils.bufferTob64Url(hash)
console.log(h)

const mid = Arweave.utils.b64UrlToBuffer('6V-WTZpUEtzyeFur03Hgfl3GkikG5kVS44nJ366GKQg' + 'NCd1EuUNlH0O2O8eaJgFxrGNja0QhHpOWCwLDzFnFcA')
const mhash = await Arweave.crypto.hash(mid)
const mid = Arweave.utils.b64UrlToBuffer('GgJe1wbcyGgvOv0rOnw2kAikoK-p5WGHdCxH_isbrZg')
const lastHash = Arweave.utils.b64UrlToBuffer('iRTGf7FBuKuJWoTOLZbARe9i7Q1N9b0R0iEljPdCH10')
const all = Buffer.concat([mid, lastHash])
const byteArray = Array.from(all)

// Print the array of bytes
console.log(byteArray)
const mhash = await Arweave.crypto.hash(all)
const h2 = Arweave.utils.bufferTob64Url(mhash)
console.log(h2)
})()

0 comments on commit 09c6e59

Please sign in to comment.