9个版本

0.1.1 2023年6月22日
0.1.0 2022年5月5日
0.0.8 2020年9月4日
0.0.7 2020年6月30日
0.0.5 2020年3月31日

#121 in 身份验证

每月42次下载
7 crate 中使用

自定义许可

95KB
527

瓦德

crates.io Documentation Apache-2 licensed

关于

Vade 是一个用于以一致的方式在不同提供者和平台上处理VC和DID的框架。即使它们背后的实际实现和逻辑可能发生变化,Vade 仍然提供了一个一致的接口来处理它们。它考虑到 wasm支持,不仅可以运行在服务器上,还可以运行在不同客户端上,例如资源有限的物联网设备。

"瓦德"这个名字是"VC和DID引擎"的缩写,专注于处理VC和DID。它旨在提供一个一致的接口以进行操作,同时支持将实际工作移入插件。

该库目前处于开发阶段。行为以及提供的导出可能随时间而变化。

关于 Vade 的功能和它们的意义的文档可以在 此处 找到。

插件

Vade 依赖于插件来运行特定提供者的交互逻辑。以下是可以看到当前插件集

DID插件

方法 信息
did:evan crates.io
did:example vade-example-plugin
(通用解析器方法列表) 开发中

更多即将推出。要编写自己的插件,请参阅 编写自己的插件

VC插件

方法 信息
did:evan crates.io

更多即将推出。要编写自己的插件,请参阅 编写自己的插件

示例用法

use vade::Vade;
use some_crate:ExamplePlugin;
use vade::VadePlugin;
struct ExamplePlugin { }
impl ExamplePlugin { pub fn new() -> Self { ExamplePlugin {} } }
impl VadePlugin for ExamplePlugin {}

async fn example_vade_usage() {
    let ep: ExamplePlugin = ExamplePlugin::new();
    let mut vade = Vade::new();
    vade.register_plugin(Box::from(ep));

    match vade.did_create("did:example", "", "").await {
        Ok(results) => {
            let result = results[0].as_ref().unwrap().to_string();
            println!("created did: {}", result);
        },
        Err(e) => panic!(format!("could not create did; {}", e)),
    };
}

如您所见,一个 ExamplePlugin 的实例被创建并传递给一个 Vade 实例,并使用 register_plugin 进行注册。为了成为有效的参数,ExamplePlugin 需要实现 VadePlugin

Vade 将与 VadePlugin 中函数同名的一切函数调用委托给所有已注册的插件,因此这种调用结果是一个可选的 String 值的 VecVec<Option<String>>)。

基本插件流程

插件相关函数的调用遵循以下规则集

  • 一个 Vade 实例将所有插件相关函数的调用委托给所有已注册的插件
  • 这些 VadePlugin 实例可能会处理或不会处理请求
  • 请求可能因为未实现或由于插件内部逻辑(例如,如果插件不支持 did 方法,则通常忽略该方法的请求)而被忽略
  • 被忽略的插件请求不会出现在结果 Vec 中,因此一个 Vade 可能已注册多个插件,但如果只有一个插件支持某种 did 方法,则与该方法相关的调用将只产生单个结果

vade_plugin_flow

Vade 功能

当前的功能集可以分为 3 组

  • 管理函数
  • DID 交互
  • 零知识证明 VC 交互

管理函数

register_plugin

注册一个新的插件。有关它们如何工作的详细信息,请参阅 VadePlugin

DID 交互

did_create

创建一个新的 DID。根据插件实现,可能还会持久化其 DID 文档。


did_resolve

获取有关 DID 的数据。这通常返回一个 DID 文档。


did_update

更新与 DID 相关的数据。根据插件实现,可能还会持久化其 DID 文档。

零知识证明 VC 交互

vc_zkp_create_credential_schema

创建一个新的零知识证明凭证模式。该模式指定凭证包含的属性,包括可选的和必须的。


vc_zkp_create_credential_definition

创建一个新的零知识证明凭证定义。凭证定义包含加密密钥材料,并由发行者用于颁发凭证,因此需要在颁发之前创建。凭证定义始终绑定到一个凭证模式。


vc_zkp_create_credential_proposal

创建一个新的零知识证明凭证提案。这是凭证颁发流程中的第一消息。


vc_zkp_create_credential_offer

创建一个新的零知识证明凭证出价。这是对凭证提案的响应。


vc_zkp_request_credential

请求一个凭证。这是对凭证出价的响应。


vc_zkp_create_revocation_registry_definition

创建一个新的撤销注册表定义。定义包括公共和私有两部分。公共部分包含创建非撤销证明所需的加密材料。私有部分需要由注册表所有者保存,并用于撤销凭证。


vc_zkp_update_revocation_registry

更新零知识证明的撤销注册表。在撤销一个或多个凭证后,这一步是必要的。


vc_zkp_issue_credential

发行新的凭证。这需要已发行的架构、凭证定义、活动撤销注册表和凭证请求消息。


vc_zkp_revoke_credential

撤销凭证。撤销后,发布的撤销注册表需要更新为该函数返回的信息。


vc_zkp_request_proof

请求一个或多个特定架构下发行的凭证的零知识证明。


vc_zkp_present_proof

展示零知识证明凭证的证明。证明展示是对证明请求的响应。


vc_zkp_verify_proof

验证证明展示中发送的一个或多个证明。

自定义函数

run_custom_function

调用自定义函数。插件可以订阅此类自定义调用,这些调用不属于默认的 Vade 功能集,这允许在使用 `Vade` 时添加自定义插件逻辑。例如,这可能包括连接处理和密钥生成。


除了管理函数外,所有函数都将委托给插件。插件处理遵循以下规则

  • 一个 Vade 实例将所有插件相关函数的调用委托给所有已注册的插件
  • 这些 VadePlugin 实例可能会处理或不会处理请求
  • 请求可能因为未实现或由于插件内部逻辑(例如,如果插件不支持 did 方法,则通常忽略该方法的请求)而被忽略
  • 被忽略的插件请求不会出现在结果 Vec 中,因此一个 Vade 可能已注册多个插件,但如果只有一个插件支持某种 did 方法,则与该方法相关的调用将只产生单个结果

编写自己的插件

编写自己的插件相当简单,示例及其编写细节可以在 VadePlugin 文档中找到。

Wasm 支持

Vade 支持 Wasm!^^

有关如何在 Wasm 中使用 Vade 的示例和指南,请查看我们的 vade-wasm-example 项目。

依赖关系

~3–13MB
~137K SLoC