#verify #publish #entry #decode #bamboo #hash #messages

无std bamboo-rs-core

发布和验证竹子消息的签名哈希链

1 个不稳定版本

0.1.0 2021 年 8 月 10 日

#52 in #entry

AGPL-3.0

47KB
930 代码行,不含注释

bamboo-rs-core

验证、发布和解析 bamboo 条目。

关于

来自 规范

这是一个基于密码学的、分布式的、单写入者追加日志,支持可传递的局部数据复制和本地数据删除。

由科学驱动,这种日志格式可以作为一个更有效的替代方案,用于安全-scuttlebutt 的链表或 hypercore 的 Merkle 森林。

bamboo-rs-core 提供了低级函数和类型,可以使用 no_std 构建。

示例

发布验证解析 第一个 [条目] 的竹子日志

NB: 发布和验证第一个条目是最简单的案例。后续条目需要传递上一个 seq_num、上一个条目和 lipmaa_link。

use bamboo_rs_core::{publish, verify, decode, yamf_hash::new_blake2b, Entry, Signature, YamfHash, Keypair, entry::MAX_ENTRY_SIZE};
use rand::rngs::OsRng;

let mut csprng: OsRng = OsRng {};
let key_pair: Keypair = Keypair::generate(&mut csprng);
let log_id = 0;

let payload = "hello bamboo!";
let mut out = [0u8; MAX_ENTRY_SIZE];

let size = publish(
    &mut out,
    &key_pair,
    log_id,
    payload.as_bytes(),
    false,
    None,
    None,
    None,
)
.unwrap();

let entry = decode(&out[..size]).unwrap();

let is_verified = verify(&out[..size], Some(payload.as_bytes()), None, None).is_ok();
let payload_hash = new_blake2b(payload.as_bytes());

assert!(is_verified);
assert_eq!(entry.log_id, log_id);
assert_eq!(entry.payload_hash, payload_hash);
assert_eq!(entry.author, key_pair.public);
assert_eq!(entry.lipmaa_link, None);
assert_eq!(entry.backlink, None);
assert_eq!(entry.is_end_of_feed, false);

依赖

~5MB
~100K 代码行数