8 个版本

0.4.1 2024 年 8 月 9 日
0.4.0 2024 年 1 月 19 日
0.3.0 2023 年 7 月 4 日
0.2.1 2022 年 12 月 14 日
0.1.2 2021 年 8 月 23 日

#1874 in 编码

Download history 24/week @ 2024-04-27 19/week @ 2024-05-04 17/week @ 2024-05-11 31/week @ 2024-05-18 42/week @ 2024-05-25 31/week @ 2024-06-01 21/week @ 2024-06-08 33/week @ 2024-06-15 23/week @ 2024-06-22 117/week @ 2024-06-29 29/week @ 2024-07-06 117/week @ 2024-07-13 23/week @ 2024-07-20 135/week @ 2024-07-27 144/week @ 2024-08-03 70/week @ 2024-08-10

433 个月下载量
14 个 crate(11 个直接) 中使用

EUPL-1.2

29KB
627 代码行

自寻址标识符

这是 IETF 草案 SAID 规范的 Rust 实现。

自寻址标识符 (SAID) 提供了数据摘要的紧凑文本表示。它支持多种哈希算法(见下文)。

许可证

EUPL 1.2

我们已经提炼出最关键的许可证细节,以确保您能够顺利采用: 有关详细信息,请参阅此处

示例

let data = "hello there";
let code: HashFunction = HashFunctionCode::Blake3_256.into();
let sai = code.derive(data.as_bytes());

assert_eq!(format!("{}", sai), "ENmwqnqVxonf_bNZ0hMipOJJY25dxlC8eSY5BbyMCfLJ");
assert!(sai.verify_binding(data.as_bytes()));
assert!(!sai.verify_binding("wrong data".as_bytes()));

请参阅 https://github.com/THCLab/cesrox/blob/master/said/tests/ 以获取完整示例。

支持的哈希函数

派生代码 摘要类型 代码长度 标识符长度
E Blake3-256 摘要 1 44
F Blake2b-256 摘要 1 44
G Blake2s-256 摘要 1 44
H SHA3-256 摘要 1 44
I SHA2-256 摘要 1 44
0D Blake3-512 摘要 2 88
0E Blake2b-512 摘要 2 88
0F SHA3-512 摘要 2 88
0G SHA2-512 摘要 2 88

自寻址数据

模块 sad 提供了 trait SAD,它具有以下函数

  • compute_digest - 计算数据结构的自寻址标识符,并将其放置在所选字段中,
  • derivation_data - 返回用于 SAID 计算的数据。

SAD trait 可以通过提供的 derive 宏来实现,它允许用户选择哪些字段将被计算的 Self Addressing Identifier 替换。要使用宏,需要启用 feature macros。它仅适用于实现 Serialize 的结构,使用 #[derive)] 属性,而不是自定义实现。

属性

宏使用以下属性

  • version - 在计算派生数据时添加版本字段。版本字符串包含字段映射的紧凑表示、序列化格式和序列化消息体的尺寸。属性允许用户指定协议代码及其主版本和次版本。当使用此属性时,结构会自动实现 Encode 特性,该特性提供了 encode 函数,用于根据选择的序列化格式序列化元素。
  • said - 此属性允许用户选择用于计算自寻址标识符的哈希函数和序列化格式。可以使用上表中的派生代码指定哈希函数。可用的序列化格式有JSON、CBOR和MGPK。默认情况下,使用JSON和Blake3-256。

字段属性

  • said - 标记在 compute_digest 期间应被计算出的摘要替换的字段。

示例

#[derive(SAD, Serialize)]
#[version(protocol = "KERI", major = 1, minor = 0)]
struct Something {
	pub text: String,
	#[said]
	pub d: Option<SelfAddressingIdentifier>,
}

发布新版本

cargo-release 是必需的

要发布新版本,运行 cargo release

由于 发布配置,它将增加版本,创建新的Git标签并将其推送到远程。

依赖关系

~9MB
~166K SLoC