Skip to content

Commit

Permalink
Merge pull request #207 from dajiaji/bump-to_0_22_1
Browse files Browse the repository at this point in the history
Bump version up to 0.22.1.
  • Loading branch information
dajiaji authored Jul 27, 2023
2 parents 4379816 + 6ce2162 commit 0e2396c
Show file tree
Hide file tree
Showing 5 changed files with 269 additions and 14 deletions.
6 changes: 6 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
22 changes: 11 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -125,7 +125,7 @@ Using esm.sh:
```html
<!-- use a specific version -->
<script type="module">
import * as hpke from "https://esm.sh/[email protected].0";
import * as hpke from "https://esm.sh/[email protected].1";
// ...
</script>

Expand All @@ -141,7 +141,7 @@ Using unpkg:
```html
<!-- use a specific version -->
<script type="module">
import * as hpke from "https://unpkg.com/[email protected].0/esm/mod.js";
import * as hpke from "https://unpkg.com/[email protected].1/esm/mod.js";
// ...
</script>
```
Expand All @@ -166,7 +166,7 @@ Using deno.land:

```js
// use a specific version
import * as hpke from "https://deno.land/x/[email protected].0/mod.ts";
import * as hpke from "https://deno.land/x/[email protected].1/mod.ts";

// use the latest stable version
import * as hpke from "https://deno.land/x/hpke/mod.ts";
Expand All @@ -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/[email protected].0/es2022/hpke-js.js
curl -sS -o $YOUR_SRC_PATH/hpke.js https://esm.sh/v86/[email protected].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/[email protected].0/es2022/hpke.min.js
curl -sS -o $YOUR_SRC_PATH/hpke.min.js https://esm.sh/v86/[email protected].1/es2022/hpke.min.js
```

Emits a single js file by using `deno bundle`:

```sh
deno bundle https://deno.land/x/[email protected].0/mod.ts > $YOUR_SRC_PATH/hpke.js
deno bundle https://deno.land/x/[email protected].1/mod.ts > $YOUR_SRC_PATH/hpke.js
```

## Usage
Expand All @@ -201,8 +201,8 @@ Browsers:
<head></head>
<body>
<script type="module">
// import * as hpke from "https://esm.sh/[email protected].0";
import { KemId, KdfId, AeadId, CipherSuite } from "https://esm.sh/[email protected].0";
// import * as hpke from "https://esm.sh/[email protected].1";
import { KemId, KdfId, AeadId, CipherSuite } from "https://esm.sh/[email protected].1";
globalThis.doHpke = async () => {
Expand Down Expand Up @@ -318,7 +318,7 @@ doHpke();
Deno:

```js
import { KemId, KdfId, AeadId, CipherSuite } from "https://deno.land/x/[email protected].0/mod.ts";
import { KemId, KdfId, AeadId, CipherSuite } from "https://deno.land/x/[email protected].1/mod.ts";

async function doHpke() {
// setup
Expand Down
4 changes: 2 additions & 2 deletions dnt.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { build, emptyDir } from "dnt";

await emptyDir("./npm");
await emptyDir("./x/dhkemSecp256k1HkdfSha256/npm");
await emptyDir("./x/dhkem-secp256k1/npm");

await build({
entryPoints: ["./mod.ts"],
Expand All @@ -21,7 +21,7 @@ await build({
name: "hpke-js",
version: Deno.args[0],
description:
"A Hybrid Public Key Encryption (HPKE) module for web browsers, Node.js and Deno",
"A Hybrid Public Key Encryption (HPKE) module for various JavaScript runtimes",
repository: {
type: "git",
url: "git+https://github.com/dajiaji/hpke-js.git",
Expand Down
249 changes: 249 additions & 0 deletions x/dhkem-secp256k1/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,249 @@
<h1 align="center">@hpke/dhkem-secp256k1</h1>

<div align="center">
A TypeScript <a href="https://datatracker.ietf.org/doc/html/rfc9180">Hybrid Public Key Encryption (HPKE)</a> module extension for DH-KEM with secp256k1 curve, which is implemented by using [@noble/curves/secp256k1](https://github.com/paulmillr/noble-curves). Note that the extension is EXPERIMENTAL and NOT STANDARDIZED.</div>
<p></p>

<div align="center">

[Documentation](https://doc.deno.land/https://deno.land/x/hpke/x/dhkem-secp256k1/mod.ts)

</div>

## Index

- [Supported Environments](#supported-environments)
- [Installation](#installation)
- [Web Browser](#web-browser)
- [Node.js](#nodejs)
- [Deno](#deno)
- [Cloudflare Workers](#cloudflare-workers)
- [Usage](#usage)
- [Contributing](#contributing)

## Supported Environments

- **Web Browser**: [Web Cryptography API](https://www.w3.org/TR/WebCryptoAPI/)
supported browsers
- Confirmed: Chrome, Firefox, Edge, Safari, Opera, Vivaldi, Brave
- **Node.js**: 16.x, 17.x, 18.x, 19.x, 20.x
- **Deno**: 1.x (1.15-)
- **Cloudflare Workers**
- **bun**: 0.x (0.3.0-)

## Installation

### Web Browser

Followings are how to use with typical CDNs. Other CDNs can be used as well.

Using esm.sh:

```html
<!-- use a specific version -->
<script type="module">
import * as hpke from "https://esm.sh/[email protected]";
import * as secp256k1 from "https://esm.sh/@hpke/[email protected]";
// ...
</script>

<!-- use the latest stable version -->
<script type="module">
import * as hpke from "https://esm.sh/hpke-js";
import * as secp256k1 from "https://esm.sh/@hpke/dhkem-secp256k1";
// ...
</script>
```

Using unpkg:

```html
<!-- use a specific version -->
<script type="module">
import * as hpke from "https://unpkg.com/[email protected]/esm/mod.js";
import * as secp256k1 from "https://unpkg.com/@hpke/[email protected]/esm/mod.js";
// ...
</script>
```

### 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/[email protected]/mod.ts";
import * as secp256k1 from "https://deno.land/x/[email protected]/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/[email protected]/es2022/hpke.min.js
curl -sS -o $YOUR_SRC_PATH/hpke-dhkem-secp256k1.min.js https://esm.sh/v86/@hpke/[email protected]/es2022/hpke-dhkem-secp256k1.min.js
```

## Usage

This section shows some typical usage examples.

### Base mode

Browsers:

```html
<html>
<head></head>
<body>
<script type="module">
// import * as hpke from "https://esm.sh/[email protected]";
import { KemId, KdfId, AeadId, CipherSuite } from "https://esm.sh/[email protected]";
import { DhkemSecp256k1HkdfSha256 } from "https://esm.sh/@hpke/[email protected]";
globalThis.doHpke = async () => {
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, // rkp (CryptoKeyPair) is also acceptable.
enc: sender.enc,
});
// encrypt
const ct = await sender.seal(new TextEncoder().encode("hello world!"));
// decrypt
try {
const pt = await recipient.open(ct);
// hello world!
alert(new TextDecoder().decode(pt));
} catch (err) {
alert("failed to decrypt.");
}
}
</script>
<button type="button" onclick="doHpke()">do HPKE</button>
</body>
</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/[email protected]/mod.ts";
import { DhkemSecp256k1HkdfSha256 } from "https://deno.land/x/[email protected]/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.
2 changes: 1 addition & 1 deletion x/dhkem-secp256k1/dnt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down

0 comments on commit 0e2396c

Please sign in to comment.