19个版本
0.2.1 | 2022年11月27日 |
---|---|
0.1.1 | 2022年1月26日 |
0.0.15 | 2021年10月7日 |
0.0.12 | 2021年5月11日 |
0.0.3 | 2020年12月29日 |
#362 在 密码学
1,589 每月下载量
用于 7 个crate(3个直接使用)
82KB
1.5K SLoC
Rust语言实现的did:key
方法
该crate旨在提供对did:key
方法的基本支持。它没有外部依赖,并且可以为任何目标编译。最初是为与DIDComm Extension for gRPC一起使用而设计的,但我们认识到如果它是一个独立的库,也可能很有用。
历史和治理
最初由捐赠给DIF的Trinsic。通过标识符和发现工作组进行持续的管理和治理。
支持的关键类型
- Ed25519
- X25519
- P256
- SECP256K1
- BLS12381G1/G2
使用方法
did-key = "*"
解析did格式URI
use did_key::*;
let key = resolve("did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL").unwrap();
let did_doc = key.get_did_document(Config::default());
生成新密钥
let key = generate::<Ed25519KeyPair>(None);
println!("{}", key.fingerprint());
签名和验证
let key = generate::<P256KeyPair>(None);
let message = b"message to be signed";
let signature = key.sign(Payload::Buffer(message.to_vec()));
let valid = key.verify(Payload::Buffer(message.to_vec()), &signature);
assert!(valid);
创建DID文档
let key = generate::<Ed25519KeyPair>(None);
let did_doc = key.get_did_document(Config::default());
let doc_json = serde_json::to_string_pretty(&did_doc).unwrap();
密钥数据的默认JSON格式为JSON-LD。要使用JOSE密钥格式(使用JWK)序列化文档,请配置输入参数或使用以下静态配置之一,例如CONFIG_JOSE_PUBLIC
。
let did_doc = key.get_did_document(Config {
use_jose_format: true, // toggle to switch between LD and JOSE key format
serialize_secrets: false // toggle to serialize private keys
});
// or use predefined configs
let did_doc = key.get_did_document(CONFIG_JOSE_PUBLIC);
示例JSON-LD输出
{
"@context": "https://www.w3.org/ns/did/v1",
"id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL",
"assertionMethod": [
"did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL"
],
"authentication": [
"did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL"
],
"capabilityDelegation": [
"did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL"
],
"capabilityInvocation": [
"did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL"
],
"keyAgreement": [
"did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6LSrdqo4M24WRDJj1h2hXxgtDTyzjjKCiyapYVgrhwZAySn"
],
"verificationMethod": [
{
"id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL",
"type": "Ed25519VerificationKey2018",
"controller": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL",
"publicKeyBase58": "6fioC1zcDPyPEL19pXRS2E4iJ46zH7xP6uSgAaPdwDrx"
},
{
"id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6LSrdqo4M24WRDJj1h2hXxgtDTyzjjKCiyapYVgrhwZAySn",
"type": "X25519KeyAgreementKey2019",
"controller": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL",
"publicKeyBase58": "FxfdY3DCQxVZddKGAtSjZdFW9bCCW7oRwZn1NFJ2Tbg2"
}
]
}
示例JSON输出
{
"@context": "https://www.w3.org/ns/did/v1",
"id": "did:key:z6LSfaBhhoYmAMX11m9xYCaeaU99KPtYnzHpsWD6iNWbJDr2",
"keyAgreement": [
"did:key:z6LSfaBhhoYmAMX11m9xYCaeaU99KPtYnzHpsWD6iNWbJDr2#z6LSfaBhhoYmAMX11m9xYCaeaU99KPtYnzHpsWD6iNWbJDr2"
],
"verificationMethod": [
{
"id": "did:key:z6LSfaBhhoYmAMX11m9xYCaeaU99KPtYnzHpsWD6iNWbJDr2#z6LSfaBhhoYmAMX11m9xYCaeaU99KPtYnzHpsWD6iNWbJDr2",
"controller": "did:key:z6LSfaBhhoYmAMX11m9xYCaeaU99KPtYnzHpsWD6iNWbJDr2",
"type": "JsonWebKey2020",
"publicKeyJwk": {
"kty": "OKP",
"crv": "X25519",
"x": "OeXe54Y0Dnk0WNWsQ6PqKUBB2x6bos0DZ_WkdFNdt3M"
}
}
]
}
基准测试
该crate包含一些基本的密钥生成和交换比较基准,使用criterion
。要运行基准测试
cargo bench
许可证
贡献
...非常欢迎!🙌
依赖项
~8MB
~161K SLoC