UNPKG

@signalapp/mock-server

Version:
88 lines (87 loc) 2.61 kB
"use strict"; // Copyright 2026 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only Object.defineProperty(exports, "__esModule", { value: true }); exports.CallingKeyPair = exports.CallingPublicKey = exports.CallingPrivateKey = void 0; const node_crypto_1 = require("node:crypto"); const node_util_1 = require("node:util"); /** * These classses are a reimplementation of libsignal's PublicKey/PrivateKey * because they expect a tag at the start of their bytes. */ const generateKeyPairAsync = (0, node_util_1.promisify)(node_crypto_1.generateKeyPair); class CallingPrivateKey { #privateKey; constructor(privateKey) { this.#privateKey = privateKey; } static getPrivateKeyObject(privateKey) { return privateKey.#privateKey; } static fromBytes(bytes) { return new CallingPrivateKey((0, node_crypto_1.createPrivateKey)({ key: bytes, format: 'raw-private', asymmetricKeyType: 'x25519', })); } toBytes() { return this.#privateKey.export({ format: 'raw-private', }); } agree(publicKey) { return (0, node_crypto_1.diffieHellman)({ privateKey: this.#privateKey, publicKey: CallingPublicKey.getPublicKeyObject(publicKey), }); } } exports.CallingPrivateKey = CallingPrivateKey; class CallingPublicKey { #publicKey; constructor(publicKey) { this.#publicKey = publicKey; } static getPublicKeyObject(publicKey) { return publicKey.#publicKey; } static fromBytes(bytes) { return new CallingPublicKey((0, node_crypto_1.createPublicKey)({ key: bytes, format: 'raw-public', asymmetricKeyType: 'x25519', })); } getKeyObject() { return this.#publicKey; } toBytes() { return this.#publicKey.export({ format: 'raw-public', }); } } exports.CallingPublicKey = CallingPublicKey; class CallingKeyPair { #privateKey; #publicKey; constructor(params) { this.#privateKey = params.privateKey; this.#publicKey = params.publicKey; } get privateKey() { return this.#privateKey; } get publicKey() { return this.#publicKey; } static async generate() { const keys = await generateKeyPairAsync('x25519'); return new CallingKeyPair({ privateKey: new CallingPrivateKey(keys.privateKey), publicKey: new CallingPublicKey(keys.publicKey), }); } } exports.CallingKeyPair = CallingKeyPair;