@signalapp/mock-server
Version:
Mock Signal Server for writing tests
88 lines (87 loc) • 2.61 kB
JavaScript
;
// 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;