48 lines
1.5 KiB
Rust
48 lines
1.5 KiB
Rust
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"
|
|
);
|
|
}
|