1 个不稳定版本

0.1.0 2018年12月28日

#19 in #trait-object

MPL-2.0 许可证

13KB
278

简单的基于动态特征对象的哈希库

此库允许您定义一个薄的、非泛型的接口,通过该接口可以传递各种哈希和哈希函数。这是通过特征对象实现的。

尽管每个crate都可以定义和实现自定义的Hash / HashType结构体,但此库内置了对

  • sha3
  • sha2

crate的支持。

可以通过分别启用“sha2”或“sha3”功能来启用这些功能。

示例

假设您正在编写一个Web服务器库,该库接受来自客户端的哈希。哈希和哈希类型分别作为字节数组和字符串传递。Web服务器不应了解允许的哈希类型,这些可以在运行时传递

use dynhash::{Hash, HashType};

fn new_hash(
    available_types: &[&'static HashType],
    digest: &[u8],
    hash_type: &str,
) -> Option<Box<Hash>> {
    for h in available_types.iter() {
        if h.as_string() == hash_type {
            return h.new_with_content(digest).ok();
        }
    }

    return None;
}

这允许Web服务器库支持所有类型的哈希,高级crate选择支持。

依赖关系

~21–350KB