init: cryptographic append-only ledger
This commit is contained in:
47
crates/ledger-core/tests/golden_vectors.rs
Normal file
47
crates/ledger-core/tests/golden_vectors.rs
Normal 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"
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user