X25519KeyAgreementKey2020 (@digitalcredentials/x25519-key-agreement-key-2020)
An X25519 (Curve25519) DH (Diffie-Hellman) key implementation to work with the X25519 2020 Crypto suite.
Table of Contents
Security
TBD
Background
(Forked from digitalbazaar/x25519-key-agreement-key-2020
v2.0.0
to provide TypeScript compatibility.)
For use with crypto-ld
>= 5.0
.
To actually perform encryption with those keys, we recommend you use
the minimal-cipher
library.
This is a low-level level library to generate and serialize X25519 (Curve25519)
key pairs (uses nacl.box
under the hood).
See also (related specs):
Install
Requires Node.js 12+
To install locally (for development):
git clone https://github.com/digitalcredentials/x25519-key-agreement-key-2020.git
cd x25519-key-agreement-key-2020
npm install
Usage
Importing:
const {X25519KeyAgreementKey2020} = require('@digitalcredentials/x25519-key-agreement-key-2020');
// Or, if you're testing code in the interactive Node CLI, right in this repo:
const {X25519KeyAgreementKey2020} = require('./');
Generating:
const keyPair = await X25519KeyAgreementKey2020.generate({
controller: 'did:example:1234'
});
// ->
{
"id": "did:example:1234#z6LSeRSE5Em5oJpwdk3NBaLVERBS332ULC7EQq5EtMsmXhsM",
"controller": "did:example:1234",
"type": "X25519KeyAgreementKey2020",
"publicKeyMultibase": "z6LSeRSE5Em5oJpwdk3NBaLVERBS332ULC7EQq5EtMsmXhsM",
"privateKeyMultibase": "z3weeMD56C1T347EmB6kYNS7trpQwjvtQCpCYRpqGz6mcemT"
}
Serializing just the public key:
keyPair.export({publicKey: true});
// ->
{
"id": "did:example:1234#z6LSeRSE5Em5oJpwdk3NBaLVERBS332ULC7EQq5EtMsmXhsM",
"controller": "did:example:1234",
"type": "X25519KeyAgreementKey2020",
"publicKeyMultibase": "z6LSeRSE5Em5oJpwdk3NBaLVERBS332ULC7EQq5EtMsmXhsM"
}
Serializing both the private and public key:
// a different key pair than the previous example
await keyPair.export({publicKey: true, privateKey: true})
// ->
{
"id": "did:example:1234#z6LSeRSE5Em5oJpwdk3NBaLVERBS332ULC7EQq5EtMsmXhsM",
"controller": "did:example:1234",
"type": "X25519KeyAgreementKey2020",
"publicKeyMultibase": "z6LSeRSE5Em5oJpwdk3NBaLVERBS332ULC7EQq5EtMsmXhsM",
"privateKeyMultibase": "z3weeMD56C1T347EmB6kYNS7trpQwjvtQCpCYRpqGz6mcemT"
}
Deserializing:
// Loading public key only
const keyPair = await X25519KeyAgreementKey2020.from({
"id": "did:example:1234#z6LSeRSE5Em5oJpwdk3NBaLVERBS332ULC7EQq5EtMsmXhsM",
"controller": "did:example:1234",
"type": "X25519KeyAgreementKey2020",
"publicKeyMultibase": "z6LSeRSE5Em5oJpwdk3NBaLVERBS332ULC7EQq5EtMsmXhsM"
});
Contribute
See the contribute file!
PRs accepted.
If editing the Readme, please conform to the standard-readme specification.
License
- MIT License - DCC - TypeScript compatibility.
- New BSD License (3-clause) © 2020-2021 Digital Bazaar - Initial implementation.