Skip to content

Latest commit

 

History

History
77 lines (55 loc) · 3.13 KB

README.md

File metadata and controls

77 lines (55 loc) · 3.13 KB

crystals-kyber-rustykey

🚧 WORK IN PROGRESS...do not install 🚧

The "Cryptographic Suite for Algebraic Lattices" (CRYSTALS) encompasses two cryptographic primitives: Kyber, an IND-CCA2-secure key-encapsulation mechanism (KEM); and Dilithium, a strongly EUF-CMA-secure digital signature algorithm. Both algorithms are based on hard problems over module lattices, are designed to withstand attacks by large quantum computers, and were selected among the winners of the NIST post-quantum cryptography project

based on work by Antony Tutoveanu and by Ajitomi Daisuke

NPM
package registry description
crystals-kyber-rustykey npm 🚧 WORK IN PROGRESS 🚧

For Node.js, you can install crystals-kyber-rustykey via pnpm, npm or yarn:

pnpm install crystals-kyber-rustykey
Use:
import { MlKem768 } from "crystals-kyber-rustykey";

async function doMlKem() {
  // A recipient generates a key pair.
  const recipient = new MlKem768(); // MlKem512 and MlKem1024 are also available.
  const [pkR, skR] = await recipient.generateKeyPair();
  //// Deterministic key generation is also supported
  // const seed = new Uint8Array(64);
  // globalThis.crypto.getRandomValues(seed); // node >= 19
  // const [pkR, skR] = await recipient.deriveKeyPair(seed);

  // A sender generates a ciphertext and a shared secret with pkR.
  const sender = new MlKem768();
  const [ct, ssS] = await sender.encap(pkR);

  // The recipient decapsulates the ciphertext and generates the same shared secret with skR.
  const ssR = await recipient.decap(ct, skR);

  // ssS === ssR
  return;
}

try {
  doMlKem();
} catch (err: unknown) {
  console.log("failed:", (err as Error).message);
}

Index

Installation

Node.js

pnpm install crystals-kyber-rustykey
npm install crystals-kyber-rustykey
yarn add crystals-kyber-rustykey