21 个稳定版本 (4 个主要版本)

4.3.5 2024年5月24日
4.2.0 2024年1月19日
3.1.0 2023年1月1日
3.0.3 2022年12月6日
0.1.0 2021年9月23日

#402密码学

Download history 741/week @ 2024-05-17 185/week @ 2024-05-24 3/week @ 2024-05-31 3/week @ 2024-06-07

1,547 每月下载量
6 crates 中使用

MIT 许可证

79KB
1.5K SLoC

信德

信德是一个密码原语库。

作者

特性

  • 数字签名算法
  • 哈希
  • 公钥交换
  • 数据结构,如 Bloom 过滤器和 Radix 树

数字签名算法

ed25519

secret_key->secret_key

public_key:secret_key->public_key

sign:message,secret_key->signature

verify:message,public_key,signature-> bool

公钥交换

x25519

secret_key->secret_key

public_key:secret_key->public_key

shared_key:public_key,secret_key->shared_secret

数据结构

Bloom 过滤器

Radix 树

结构体

RadixTree<K, V>: 代表基数树,通配符 K 为键和 V 为值。

  • nodes: HashMap 存储树节点,每个节点由一个32字节数组标识。
  • parents: HashMap 跟踪每个节点的父节点。
  • root: 代表根节点的32字节数组。

RadixNode<K, V>: 代表 RadixTree 内的单个节点。

  • children: BTreeMap 将键映射到子节点散列。
  • key: Vec<K> 代表节点的键。
  • value: 可选的 V 持有与键关联的值。

方法

new() -> Self: 创建一个 RadixTree 的新实例。

insert<I>(&mut self, key: I, value: V): 在树中插入键值对。

rehash(&mut self, child_hash: &[u8; 32]): 更新子节点的哈希。

remove<I>(&mut self, key: I) -> Result<(), Box<dyn Error>>: 移除键值对。

search<I>(&self, key: I) -> Option<&V>: 通过键搜索值。

split_node(&mut self, node_hash: [u8; 32], split_position: usize) -> Result<([u8; 32], [u8; 32]), Box<dyn Error>>: 在指定位置分割节点。

特质

IntoBytes: 提供将RadixTree和RadixNode序列化为字节数据的功能。

  • 对于RadixNode<K, V>

into_bytes(&self) -> Vec<u8>: 将RadixNode序列化为字节数组。这包括序列化子节点、键和值字段。

  • 对于RadixTree<K, V>

into_bytes(&self) -> Vec<u8>:将整个RadixTree序列化为字节数组。这个过程涉及将根节点和节点中的每个节点(使用RadixNode的into_bytes方法)进行序列化。

默克尔树

结构体

MerkleTree<T>:表示默克尔树,T为每个节点中存储的数据的泛型。

  • nodes:存储树节点的HashMap<[u8; 32], MerkleNode<T>>,每个节点由一个32字节数组标识。
  • root:表示根节点的[u8; 32]
  • parents:跟踪每个节点的父节点的HashMap<[u8; 32], [u8; 32]>

方法

new():创建MerkleTree的新实例。

hash(&self):返回默克尔树的根。

append(mut self, data: T):将数据附加到默克尔树。

replace(mut self, index: usize, data: T):替换默克尔树中指定索引的数据。

特质

IntoBytes:提供将MerkleTree和MerkleNode序列化为字节的功能。

  • 对于MerkleTree:into_bytes(&self) -> Vec<u8>
  • 对于MerkleNode:into_bytes(&self) -> Vec<u8>

TryFromBytes:提供从字节中反序列化MerkleTree和MerkleNode的功能。

  • 对于Merkle树:try_from_bytes(value: &[u8]) -> Result<Self, Box<dyn Error>>
  • 对于Merkle节点:try_from_bytes(value: &[u8]) -> Result<Self, Box<dyn Error>>

未来

  • 🎲 随机数生成器
  • 🔒 加密
  • 🏗 累积
  • 📜 承诺方案
  • 😎 零知识证明方案
  • ⏲ 可验证延迟函数
  • 🔢 全同态加密

许可证

MIT许可证

版权属于Stelar Labs

特此授予任何获得本软件及其相关文档副本(以下简称“软件”)的人免费使用权,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许将软件提供给他人,以便他们可以这样做,前提是遵守以下条件:

上述版权声明和本许可声明应包含在软件的任何副本或主要部分中。

免责声明

软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的还是与适用性、特定用途和侵权相关的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论这些责任是因合同行为、侵权或其他行为引起的,无论是与软件、软件的使用或其他方式相关还是由此产生的。

依赖项

~7MB
~125K SLoC