Javascript library for generating and working with MldsaMultikey key pairs.
For use with:
@digitalbazaar/mldsa44-rdfc-2024-cryptosuite^1.0.0crypto suite (withjsonld-signatures^11.0.0)@digitalbazaar/data-integrity^1.0.0
See also (related specs):
As with most security- and cryptography-related tools, the overall security of your system will largely depend on your design decisions.
- Node.js 22+ is required.
To install locally (for development):
git clone https://github.com/digitalbazaar/mldsa-multikey.git
cd mldsa-multikey
npm install
To generate a new public/secret key pair:
{number} [nistSecurityLevel][Required] Desired NIST security level used to generate the key: [2].{string} [id][Optional] ID for the generated key.{string} [controller][Optional] Controller URI or DID to initialize the generated key. (This will be used to generateidif it is not explicitly defined.)
import * as MldsaMultikey from '@digitalbazaar/mldsa-multikey';
const keyPair = await MldsaMultikey.generate({nistSecurityLevel: 2});To create an instance of a public/secret key pair from data imported from
storage, use .from():
const serializedKeyPair = { ... };
const keyPair = await MldsaMultikey.from(serializedKeyPair);To export just the public key of a pair:
await keyPair.export({publicKey: true});
// ->
{
type: 'Multikey',
id: 'did:example:1234#TBD',
controller: 'did:example:1234',
publicKeyMultibase: 'TBD'
}To export the full key pair, including secret key (warning: this should be a carefully considered operation, best left to dedicated Key Management Systems):
await keyPair.export({publicKey: true, secretKey: true});
// ->
{
type: 'Multikey',
id: 'did:example:1234#TBD',
controller: 'did:example:1234',
publicKeyMultibase: 'TBD',
secretKeyMultibase: 'TBD'
}In order to perform a cryptographic signature, you need to create a sign
function, and then invoke it.
const keyPair = MldsaMultikey.generate({nistSecurityLevel: 2});
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 signature = await sign({data});In order to verify a cryptographic signature, you need to create a verify
function, and then invoke it (passing it the data to verify, and the signature).
const keyPair = MldsaMultikey.generate({nistSecurityLevel: 2});
const {verify} = keyPair.verifier();
const valid = await verify({data, signature});
// trueSee the contribute file!
PRs accepted.
If editing the Readme, please conform to the standard-readme specification.
Commercial support for this library is available upon request from Digital Bazaar: support@digitalbazaar.com
New BSD License (3-clause) © 2026 Digital Bazaar