UNPKG

@hpke/dhkem-x25519

Version:

A Hybrid Public Key Encryption (HPKE) module extension for X25519

99 lines (98 loc) 3.42 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "@hpke/common", "./primitives/x25519.js", "./hkdfSha256.js"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DhkemX25519HkdfSha256 = exports.X25519 = void 0; const common_1 = require("@hpke/common"); const x25519_js_1 = require("./primitives/x25519.js"); const hkdfSha256_js_1 = require("./hkdfSha256.js"); class X25519 extends common_1.XCurveDhkemPrimitives { constructor(hkdf) { super("X25519", 32, x25519_js_1.x25519, hkdf); } derive(sk, pk) { try { return Promise.resolve(this._curve.getSharedSecret(sk, pk)); } catch (e) { return Promise.reject(new common_1.SerializeError(e)); } } } exports.X25519 = X25519; /** * The DHKEM(X25519, HKDF-SHA256) for HPKE KEM implementing {@link KemInterface}. * * This class is implemented using * {@link https://github.com/paulmillr/noble-curves | @noble/curves}. * * The instance of this class can be specified to the * {@link https://jsr.io/@hpke/core/doc/~/CipherSuiteParams | CipherSuiteParams} as follows: * * @example Use with `@hpke/core`: * * ```ts * import { * Aes128Gcm, * CipherSuite, * HkdfSha256, * } from "@hpke/core"; * import { DhkemX25519HkdfSha256 } from "@hpke/dhkem-x25519"; * * const suite = new CipherSuite({ * kem: new DhkemX25519HkdfSha256(), * kdf: new HkdfSha256(), * aead: new Aes128Gcm(), * }); * ``` */ class DhkemX25519HkdfSha256 extends common_1.Dhkem { constructor() { const kdf = new hkdfSha256_js_1.HkdfSha256(); super(common_1.KemId.DhkemX25519HkdfSha256, new X25519(kdf), kdf); /** KemId.DhkemX25519HkdfSha256 (0x0020) */ Object.defineProperty(this, "id", { enumerable: true, configurable: true, writable: true, value: common_1.KemId.DhkemX25519HkdfSha256 }); /** 32 */ Object.defineProperty(this, "secretSize", { enumerable: true, configurable: true, writable: true, value: 32 }); /** 32 */ Object.defineProperty(this, "encSize", { enumerable: true, configurable: true, writable: true, value: 32 }); /** 32 */ Object.defineProperty(this, "publicKeySize", { enumerable: true, configurable: true, writable: true, value: 32 }); /** 32 */ Object.defineProperty(this, "privateKeySize", { enumerable: true, configurable: true, writable: true, value: 32 }); } } exports.DhkemX25519HkdfSha256 = DhkemX25519HkdfSha256; });