#wasm-module #jwt #ed25519 #security #ed25519-key #wasm-file

wascap

Wascap - wasmCloud Capabilities. 库用于提取、嵌入和验证声明

31 个版本 (14 个重大更改)

0.15.0 2024年6月11日
0.13.0 2024年3月17日
0.12.0 2023年11月9日
0.11.0 2023年5月31日
0.0.1 2019年6月20日

WebAssembly 中排名 212

Download history 1536/week @ 2024-05-03 1367/week @ 2024-05-10 1002/week @ 2024-05-17 1600/week @ 2024-05-24 1423/week @ 2024-05-31 2844/week @ 2024-06-07 1396/week @ 2024-06-14 2190/week @ 2024-06-21 1342/week @ 2024-06-28 1461/week @ 2024-07-05 2645/week @ 2024-07-12 3336/week @ 2024-07-19 4500/week @ 2024-07-26 3780/week @ 2024-08-02 3024/week @ 2024-08-09 4541/week @ 2024-08-16

每月下载量 16,622
52 个 crate 中使用(13 个直接使用)

Apache-2.0

1MB
1.5K SLoC

crates.io  Rust  license

ℹ️ 兼容性信息

使用 v0.10.1 及更高版本计算的 wascap 哈希与先前版本签名的哈希不兼容。因此,使用较旧版本的 wascap 签名的模块将 不会 验证其模块哈希(它们将被忽略)。一旦模块使用 0.10.1 或更高版本签名,它将恢复其模块哈希的验证。

wasmCloud Capabilities

wasmCloud 主机运行时,每个组件都会安全地声明它所需的集合。此库用于嵌入、提取和验证包含这些能力声明的 JSON Web Tokens(JWT),以及 wasm 文件的哈希和用于验证模块来源的可证明发行者。

如果您想使用允许您签名和检查模块声明的 CLI,则可以安装 wash CLI 并使用 wash claims 命令集。 请注意,早期版本的 wascap 附带 CLI。这已不再可用,并由 wash CLI 取代。

虽然库中已经定义了一些标准、众所周知的声明(例如 wasmcloud:messagingwasmcloud:keyvalue),但您可以在自己的命名空间中添加自定义声明。

以下示例说明了将一组新声明嵌入 WebAssembly 模块,然后提取、验证和检查这些声明的过程。

use wascap::prelude::*;

let unsigned = read_unsigned_wasm(); // Read a Wasm file into a byte vector
let issuer = KeyPair::new_account(); // Create an Ed25519 key pair to sign the module
let module = KeyPair::new_module(); // Create a key pair for the module itself

// Grant the module some basic capabilities, with no date limits
let claims = ClaimsBuilder::new()
    .with_capability(caps::MESSAGING)
    .with_capability(caps::KEY_VALUE)
    .issuer(&issuer.public_key())
    .subject(&module.public_key())
    .build();

// Sign the JWT and embed it into the WebAssembly module, returning the signed bytes
let embedded = wasm::embed_claims(&unsigned, &claims, &issuer)?;

// Extract a signed JWT from a WebAssembly module's bytes (performs a check on
// the signed module hash)
let extracted = wasm::extract_claims(&embedded)?.unwrap();

// Validate dates, signature, JWT structure, etc.
let v = validate_token(&extracted.jwt)?;

assert_eq!(v.expired, false);
assert_eq!(v.cannot_use_yet, false);
assert_eq!(v.expires_human, "never");
assert_eq!(v.not_before_human, "immediately");
assert_eq!(extracted.claims.issuer, issuer.public_key());

Ed25519 密钥功能由 nkeys crate 提供。

wash CLI 允许您从终端提示符检查和签名 WebAssembly 文件。

 $ wash claims inspect echo_s.wasm

                               Echo - Module
  Account       ACM7TOENKEIO6Q6J66FX53AKXRHH6TH2WZ6K6SZQULNSWLDUIQHSRRSS
  Module        MC2N2ERC4J7GGMVEMH2TYY73YXYZT2BJK2VGFNYWV26K3KOSVALIFUIB
  Expires                                                          never
  Can Be Used                                                immediately
  Version                                                       None (0)
  Call Alias                                                   (Not set)
                               Capabilities
  HTTP Server
                                   Tags
  None

依赖项

~12–21MB
~400K SLoC