init: cryptographic append-only ledger

This commit is contained in:
Vault Sovereign
2025-12-26 23:21:39 +00:00
commit 833c408a30
23 changed files with 3477 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
use ed25519_dalek::{Signer, SigningKey};
use ledger_core::EntryUnsigned;
fn hex(bytes: &[u8]) -> String {
bytes.iter().map(|b| format!("{:02x}", b)).collect()
}
#[test]
fn golden_vectors_v0_signing_message_and_hashes() {
let seed = [0u8; 32];
let signing_key = SigningKey::from_bytes(&seed);
let author_pubkey = signing_key.verifying_key().to_bytes();
let unsigned = EntryUnsigned {
prev_hash: [0u8; 32],
ts_ms: 1,
namespace: "law".to_string(),
payload_cbor: vec![0x65, b'h', b'e', b'l', b'l', b'o'],
author_pubkey,
};
let msg = unsigned.signing_message();
let sig = signing_key.sign(&msg).to_bytes();
let entry = unsigned.to_entry(sig);
assert_eq!(
hex(&author_pubkey),
"3b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29"
);
assert_eq!(
hex(&entry.payload_hash()),
"90eeb71f0d4b768a5d449e30035beb7ffccd75d228e5b38e8e9cbfaa01ddfae9"
);
assert_eq!(
hex(&msg),
"434c763000000000000000000000000000000000000000000000000000000000000000000100000000000000030000006c617790eeb71f0d4b768a5d449e30035beb7ffccd75d228e5b38e8e9cbfaa01ddfae93b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29"
);
assert_eq!(
hex(&entry.sig),
"03c91ecb5ab44a4329c12c1e789d22d685b81a0d16483d869d88fa24dd2c20a8b786066d12c8a238c88cea0b969f1c707df305b1edc56238d5d6166ecf986e05"
);
assert_eq!(
hex(&entry.hash()),
"ce13e5272d6705d9cbf2e261d2b9862abb187f737bea6fe3542e8680d689cc8e"
);
}