Ed25519 链接数据多键配对库 (@ 数字证书/ ed25519- multikey)
Javascript库用于生成并和Ed25519多键键对合作.
注:这是叉子 @digitalbazaar/ed25519-multikey 添加对本地反应的支持。 唯一的根本变化是加上这个 反应本地覆盖 用于 @noble/ed25519 (英语) 用于在本地反应中加密.
目录
背景情况
用于:
@digitalcredentials/eddsa-2022-cryptosuite^1.0.0密码套件( 有jsonld-signatures^11.0.0(中文(简体) )@digitalcredentials/data-integrity^1.0.0
另见(相关规格):
警卫
同大多数与安全和密码学有关的工具一样 您的系统将在很大程度上取决于您的设计决定 .
安装
- 需要节点.js 16+.
在当地安装(用于开发):
git clone https://github.com/digitalbazaar/ed25519-multikey.git
cd ed25519-multikey
npm install
使用量
生成新的公密密钥配对
要生成一个新的公密密钥配对 :
{string} [id]生成的密钥的可选代号 .{string} [controller]可选控制器 URI 或 Did 初始化 生成了密钥。 (此会输入密钥 ID. ){string} [seed]可选的确定种子值,用于生成 键.
import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey';
const edKeyPair = await Ed25519Multikey.generate();
从存储导入一对密钥
从下列来源导入的数据创建公用/保密密钥对实例:
存储,使用 .from()数字 :
const serializedKeyPair = { ... };
const keyPair = await Ed25519Multikey.from(serializedKeyPair);
只导出公钥
要导出一对的公钥 :
await keyPair.export({publicKey: true});
// ->
{
type: 'Multikey',
id: 'did:example:1234#z6Mkon3Necd6NkkyfoGoHxid2znGc59LU3K7mubaRcFbLfLX',
controller: 'did:example:1234',
publicKeyMultibase: 'z6Mkon3Necd6NkkyfoGoHxid2znGc59LU3K7mubaRcFbLfLX'
}
导出完整的公密密钥配对
要导出完整的密钥配对, 包括密钥( 警告 : 这应该是 仔细考虑的操作,最好留给专用密钥管理系统:
await keyPair.export({publicKey: true, secretKey: true});
// ->
{
type: 'Multikey',
id: 'did:example:1234#z6Mkon3Necd6NkkyfoGoHxid2znGc59LU3K7mubaRcFbLfLX',
controller: 'did:example:1234',
publicKeyMultibase: 'z6Mkon3Necd6NkkyfoGoHxid2znGc59LU3K7mubaRcFbLfLX',
secretKeyMultibase: 'zruzf4Y29hDp7vLoV3NWzuymGMTtJcQfttAWzESod4wV2fbPvEp4XtzGp2VWwQSQAXMxDyqrnVurYg2sBiqiu1FHDDM'
}
创建签名函数
为了执行加密签名,您需要创建 sign
函数,然后引用它.
const keyPair = Ed25519Multikey.generate();
const {sign} = keyPair.signer();
// data is a Uint8Array of bytes
const data = (new TextEncoder()).encode('test data goes here');
// Signing also outputs a Uint8Array, which you can serialize to text etc.
const signatureValueBytes = await sign({data});
创建验证函数
为了验证密码签名,您需要创建 verify
函数,然后引用它(通过数据验证,和签名).
const keyPair = Ed25519Multikey.generate();
const {verify} = keyPair.verifier();
const valid = await verify({data, signature});
// true
从以前的 Ed25519 验证Key2020 密钥类型转换
如果您已经序列化并存储了上一个密钥
Ed25519VerificationKey2020 密钥类型(例如,使用
页:1 ed25519-verification-key-2020(中文(简体) )
图书馆,需要记住的事情:
- 这些关键类型的实例仍然包含同样的关键材料,即:
从2020年套房改为多键的东西是属性名
更改用于存储密钥并替换类型
Multikey。 。 。 . 2020年套房密钥类型使用该类型序列化Ed25519VerificationKey2020并存储在privateKeyMultibase,以及Ed25519号 Multikey( 此重播) 使用相应的类型序列化Multikeya 一个 将密钥材料存储在secretKeyMultibase属性. - 您可以使用提供的 2020 密钥类型转换为 Multikey
Ed25519Multikey.from()方法(见下文). - 他们
generate()相同的关键材料,考虑到相同的seed参数. - 2020和Multikey键都产生并验证了同一种签名.
转换示例:
import * as Ed25519Multikey from '@digitalcredentials/ed25519-multikey';
import {Ed25519VerificationKey2020}
from '@digitalbazaar/ed25519-verification-key-2020';
const keyPair2020 = await Ed25519VerificationKey2020.generate({
controller: 'did:example:1234'
});
const ed25519Multikey = await Ed25519Multikey.from(keyPair2020);
// The resulting ed25519Multikey will have the same `id` and `controller` properties
// as its 2020 source. They will also produce and verify the same signatures.
// data is a Uint8Array of bytes
const data = (new TextEncoder()).encode('test data goes here');
const signatureBytes2020 = await keyPair2020.signer().sign({data});
// this is the same signature as that produced by the 2020 key. And will verify
// the same.
await ed25519Multikey.verifier().verify({data, signature: signatureBytes2020})
// true
从先前的 Ed25519 验证Key2018 密钥类型转换
如果您已经序列化并存储了上一个密钥
Ed25519VerificationKey2018 密钥类型(例如,使用
页:1 ed25519-verification-key-2018(中文(简体) )
图书馆,需要记住的事情:
- 这些关键类型的实例仍然包含同样的关键材料,即:
从2018套房到Multikey的改变 就是公众的方式
和秘密关键材料在出口时进行序列化。 2018套房密钥
类型
publicKeyBase58财务报告和审定财务报表secretKeyBase58属性, 和 Ed25519 多键( 此重播) 序列化publicKeyMultibase财务报告和审定财务报表secretKeyMultibase属性. - 您可以使用所提供的键类型从2018转换为多键
Ed25519Multikey.from()方法(见下文). - 他们
generate()相同的关键材料,考虑到相同的seed参数. - 2018和Multikey键都产生并验证了同一种签名.
转换示例:
import * as Ed25519Multikey from '@digitalcredentials/ed25519-multikey';
import {Ed25519VerificationKey2018}
from '@digitalbazaar/ed25519-verification-key-2018';
const keyPair2018 = await Ed25519VerificationKey2018.generate({
controller: 'did:example:1234'
});
const ed25519Multikey = await Ed25519Multikey.from(keyPair2018);
// The resulting ed25519Multikey will have the same `id` and `controller` properties
// as its 2018 source. They will also produce and verify the same signatures.
// data is a Uint8Array of bytes
const data = (new TextEncoder()).encode('test data goes here');
const signatureBytes2018 = await keyPair2018.signer().sign({data});
// this is the same signature as that produced by the 2020 key. And will verify
// the same.
await ed25519Multikey.verifier().verify({data, signature: signatureBytes2018})
// true
贡献
见 贡献文件来啊!
公关接受.
请遵照 标准读取 规格.
许可证
MIT 许可证 2025年数字证书联合会.