diff --git a/CHANGES.md b/CHANGES.md index 93981ebd0..007200a37 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,11 @@ # Changes +## Version 0.22.1 + +Released 2023-07-28 + +- [(#206) Change scoped package name.](https://github.com/dajiaji/hpke-js/pull/206) + ## Version 0.22.0 Released 2023-07-27 diff --git a/README.md b/README.md index 5820d9fb4..dccb91ceb 100644 --- a/README.md +++ b/README.md @@ -72,8 +72,8 @@ This module works on web browsers, Node.js, Deno and Cloudflare Workers. - \*2: [@noble/curves/ed448](https://github.com/paulmillr/noble-curves) is used until [Secure Curves](https://wicg.github.io/webcrypto-secure-curves/) is implemented. -- \*3: NOT STANDARDIZED EXPERIMENTAL IMPLEMENTATION using - [@noble/curves/secp256k1](https://github.com/paulmillr/noble-curves). +- \*3: NOT STANDARDIZED EXPERIMENTAL IMPLEMENTATION. See + [/x/dhkem-secp256k1/README](https://github.com/dajiaji/hpke-js/blob/main/x/dhkem-secp256k1/README.md) ### Key Derivation Functions (KDFs) @@ -125,7 +125,7 @@ Using esm.sh: ```html @@ -141,7 +141,7 @@ Using unpkg: ```html ``` @@ -166,7 +166,7 @@ Using deno.land: ```js // use a specific version -import * as hpke from "https://deno.land/x/hpke@0.22.0/mod.ts"; +import * as hpke from "https://deno.land/x/hpke@0.22.1/mod.ts"; // use the latest stable version import * as hpke from "https://deno.land/x/hpke/mod.ts"; @@ -177,15 +177,15 @@ import * as hpke from "https://deno.land/x/hpke/mod.ts"; Downloads a single js file from esm.sh: ```sh -curl -sS -o $YOUR_SRC_PATH/hpke.js https://esm.sh/v86/hpke-js@0.22.0/es2022/hpke-js.js +curl -sS -o $YOUR_SRC_PATH/hpke.js https://esm.sh/v86/hpke-js@0.22.1/es2022/hpke-js.js # if you want to use a minified version: -curl -sS -o $YOUR_SRC_PATH/hpke.min.js https://esm.sh/v86/hpke-js@0.22.0/es2022/hpke.min.js +curl -sS -o $YOUR_SRC_PATH/hpke.min.js https://esm.sh/v86/hpke-js@0.22.1/es2022/hpke.min.js ``` Emits a single js file by using `deno bundle`: ```sh -deno bundle https://deno.land/x/hpke@0.22.0/mod.ts > $YOUR_SRC_PATH/hpke.js +deno bundle https://deno.land/x/hpke@0.22.1/mod.ts > $YOUR_SRC_PATH/hpke.js ``` ## Usage @@ -201,8 +201,8 @@ Browsers: + + + +``` + +Using unpkg: + +```html + + +``` + +### Node.js + +Using npm: + +```sh +npm install @hpke/dhkem-secp256k1 +``` + +Using yarn: + +```sh +yarn add @hpke/dhkem-secp256k1 +``` + +### Deno + +Using deno.land: + +```js +// use a specific version +import * as hpke from "https://deno.land/x/hpke@0.22.1/mod.ts"; +import * as secp256k1 from "https://deno.land/x/hpke@0.22.1/x/dhkem-secp256k1/mod.ts"; + +// use the latest stable version +import * as hpke from "https://deno.land/x/hpke/mod.ts"; +import * as secp256k1 from "https://deno.land/x/hpke/x/dhkem-secp256k1/mod.ts"; +``` + +### Cloudflare Workers + +Downloads a single js file from esm.sh: + +```sh +curl -sS -o $YOUR_SRC_PATH/hpke.min.js https://esm.sh/v86/hpke-js@0.22.1/es2022/hpke.min.js +curl -sS -o $YOUR_SRC_PATH/hpke-dhkem-secp256k1.min.js https://esm.sh/v86/@hpke/dhkem-secp256k1@0.22.1/es2022/hpke-dhkem-secp256k1.min.js +``` + +## Usage + +This section shows some typical usage examples. + +### Base mode + +Browsers: + +```html + + + + + + + +``` + +Node.js: + +```js +const { KemId, KdfId, AeadId, CipherSuite } = require("hpke-js"); +const { DhkemSecp256k1HkdfSha256 } = require("@hpke/dhkem-secp256k1"); + +async function doHpke() { + // setup + const suite = new CipherSuite({ + kem: new DhkemSecp256k1HkdfSha256(), + kdf: KdfId.HkdfSha256, + aead: AeadId.Aes128Gcm, + }); + + const rkp = await suite.generateKeyPair(); + + const sender = await suite.createSenderContext({ + recipientPublicKey: rkp.publicKey, + }); + + const recipient = await suite.createRecipientContext({ + recipientKey: rkp.privateKey, + enc: sender.enc, + }); + + // encrypt + const ct = await sender.seal(new TextEncoder().encode("my-secret-message")); + + // decrypt + try { + const pt = await recipient.open(ct); + + console.log("decrypted: ", new TextDecoder().decode(pt)); + // decrypted: my-secret-message + } catch (err) { + console.log("failed to decrypt."); + } +} + +doHpke(); +``` + +Deno: + +```js +import { KemId, KdfId, AeadId, CipherSuite } from "https://deno.land/x/hpke@0.22.1/mod.ts"; +import { DhkemSecp256k1HkdfSha256 } from "https://deno.land/x/hpke@0.22.1/x/dhkem-secp256k1/mod.ts"; + +async function doHpke() { + // setup + const suite = new CipherSuite({ + kem: new DhkemSecp256k1HkdfSha256(), + kdf: KdfId.HkdfSha256, + aead: AeadId.Aes128Gcm, + }); + + const rkp = await suite.generateKeyPair(); + + const sender = await suite.createSenderContext({ + recipientPublicKey: rkp.publicKey, + }); + + const recipient = await suite.createRecipientContext({ + recipientKey: rkp.privateKey, + enc: sender.enc, + }); + + // encrypt + const ct = await sender.seal(new TextEncoder().encode("my-secret-message")); + + try { + // decrypt + const pt = await recipient.open(ct); + + console.log("decrypted: ", new TextDecoder().decode(pt)); + // decrypted: my-secret-message + } catch (_err: unknown) { + console.log("failed to decrypt."); + } +} + +doHpke(); +``` + +## Contributing + +We welcome all kind of contributions, filing issues, suggesting new features or +sending PRs. diff --git a/x/dhkem-secp256k1/dnt.ts b/x/dhkem-secp256k1/dnt.ts index be493d3e9..e60d34a0d 100644 --- a/x/dhkem-secp256k1/dnt.ts +++ b/x/dhkem-secp256k1/dnt.ts @@ -20,7 +20,7 @@ await build({ name: "@hpke/dhkem-secp256k1", version: Deno.args[0], description: - "A Hybrid Public Key Encryption (HPKE) module extension for secp256k1 curve", + "A Hybrid Public Key Encryption (HPKE) module extension for secp256k1 curve (EXPERIMENTAL)", repository: { type: "git", url: "git+https://github.com/dajiaji/hpke-js.git",