Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
@hpke/dhkem-x25519
Advanced tools
A Hybrid Public Key Encryption (HPKE) module extension for X25519
Documentation: jsr.io | pages (only for the latest ver.)
@hpke/dhkem-x25519
need to be used with
@hpke/core,
which can be installed in the same manner as desribed below.
You can install the package with npm, yarn or pnpm.
# Using npm:
npm install @hpke/dhkem-x25519
yarn add @hpke/dhkem-x25519
pnpm install @hpke/dhkem-x25519
# Using jsr:
npx jsr add @hpke/dhkem-x25519
yarn dlx jsr add @hpke/dhkem-x25519
pnpm dlx jsr add @hpke/dhkem-x25519
The above manner can be used with other JavaScript runtimes that support npm, such as Cloudflare Workers and Bun.
Then, you can use the module from code like this:
import { Aes128Gcm, CipherSuite, HkdfSha256 } from "@hpke/core";
import { DhkemX25519HkdfSha256 } from "@hpke/dhkem-x25519";
For Deno, it is recommended to use the jsr.io registry.
deno add jsr:@hpke/dhkem-x25519
Followings are how to use this module with typical CDNs. Other CDNs can be used as well.
Using esm.sh:
<!-- use a specific version -->
<script type="module">
import {
Aes128Gcm,
CipherSuite,
HkdfSha256,
} from "https://esm.sh/@hpke/core@<SEMVER>";
import {
DhkemX25519HkdfSha256,
} from "https://esm.sh/@hpke/dhkem-x25519@<SEMVER>";
// ...
</script>
<!-- use the latest stable version -->
<script type="module">
import {
Aes128Gcm,
CipherSuite,
HkdfSha256,
} from "https://esm.sh/@hpke/core";
import { DhkemX25519HkdfSha256 } from "https://esm.sh/@hpke/dhkem-x25519";
// ...
</script>
Using unpkg:
<!-- use a specific version -->
<script type="module">
import {
Aes128Gcm,
CipherSuite,
HkdfSha256,
} from "https://unpkg.com/@hpke/core@<SEMVER>/esm/mod.js";
import {
DhkemX25519HkdfSha256,
} from "https://unpkg.com/@hpke/dhkem-x25519@<SEMVER>/esm/mod.js";
// ...
</script>
This section shows some typical usage examples.
import { Aes128Gcm, CipherSuite, HkdfSha256 } from "@hpke/core";
import { DhkemX25519HkdfSha256 } from "@hpke/dhkem-x25519";
// const { DhkemX25519HkdfSha256 } = require("@hpke/dhkem-x25519");
async function doHpke() {
// setup
const suite = new CipherSuite({
kem: new DhkemX25519HkdfSha256(),
kdf: new HkdfSha256(),
aead: new Aes128Gcm(),
});
const rkp = await suite.kem.generateKeyPair();
const sender = await suite.createSenderContext({
recipientPublicKey: rkp.publicKey,
});
// encrypt
const ct = await sender.seal(new TextEncoder().encode("Hello world!"));
const recipient = await suite.createRecipientContext({
recipientKey: rkp.privateKey,
enc: sender.enc,
});
// decrypt
const pt = await recipient.open(ct);
// Hello world!
console.log(new TextDecoder().decode(pt));
}
try {
doHpke();
} catch (err) {
console.log("failed:", err.message);
}
import { Aes128Gcm, CipherSuite, HkdfSha256 } from "@hpke/core";
import { DhkemX25519HkdfSha256 } from "@hpke/dhkem-x25519";
async function doHpke() {
// setup
const suite = new CipherSuite({
kem: new DhkemX25519HkdfSha256(),
kdf: new HkdfSha256(),
aead: new Aes128Gcm(),
});
const rkp = await suite.kem.generateKeyPair();
const sender = await suite.createSenderContext({
recipientPublicKey: rkp.publicKey,
});
// encrypt
const ct = await sender.seal(new TextEncoder().encode("Hello world!"));
const recipient = await suite.createRecipientContext({
recipientKey: rkp.privateKey,
enc: sender.enc,
});
// decrypt
const pt = await recipient.open(ct);
// Hello world!
console.log(new TextDecoder().decode(pt));
}
try {
doHpke();
} catch (_err: unknown) {
console.log("failed.");
}
<html>
<head></head>
<body>
<script type="module">
import {
Aes128Gcm,
CipherSuite,
HkdfSha256,
} from "https://esm.sh/@hpke/core";
import { DhkemX25519HkdfSha256 } from "https://esm.sh/@hpke/dhkem-x25519";
globalThis.doHpke = async () => {
try {
const suite = new CipherSuite({
kem: new DhkemX25519HkdfSha256(),
kdf: new HkdfSha256(),
aead: new Aes128Gcm(),
});
const rkp = await suite.kem.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
const pt = await recipient.open(ct);
// Hello world!
alert(new TextDecoder().decode(pt));
} catch (err) {
alert("failed:", err.message);
}
};
</script>
<button type="button" onclick="doHpke()">do HPKE</button>
</body>
</html>
We welcome all kind of contributions, filing issues, suggesting new features or sending PRs.
FAQs
A Hybrid Public Key Encryption (HPKE) module extension for X25519
The npm package @hpke/dhkem-x25519 receives a total of 24,464 weekly downloads. As such, @hpke/dhkem-x25519 popularity was classified as popular.
We found that @hpke/dhkem-x25519 demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.