the-wireguard-effect
Version:
Cross platform wireguard api client for nodejs built on wireguard-go with effect-ts
74 lines (72 loc) • 2.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.generatePreshareKey = exports.generateKeyPair = exports.WireguardKey = void 0;
var Function = _interopRequireWildcard(require("effect/Function"));
var Schema = _interopRequireWildcard(require("effect/Schema"));
var crypto = _interopRequireWildcard(require("node:crypto"));
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
/**
* Wireguard key schemas and helpers
*
* @since 1.0.0
*/
/**
* A wireguard key, which is a 44 character base64 string.
*
* @since 1.0.0
* @category Schemas
* @see {@link generateKeyPair}
*
* @see https://lists.zx2c4.com/pipermail/wireguard/2020-December/006222.html
*/
const WireguardKey = exports.WireguardKey = /*#__PURE__*/Function.pipe(Schema.String, /*#__PURE__*/Schema.pattern(/^[\d+/A-Za-z]{42}[048AEIMQUYcgkosw]=$/), /*#__PURE__*/Schema.annotations({
identifier: "WireguardKey",
description: "A wireguard key"
}), /*#__PURE__*/Schema.brand("WireguardKey"));
/**
* Generates a wireguard public private key pair.
*
* @since 1.0.0
* @category Crypto
* @example
* import { generateKeyPair } from "the-wireguard-effect/WireguardKey";
* const { privateKey, publicKey } = generateKeyPair();
*/
const generateKeyPair = () => {
const keys = crypto.generateKeyPairSync("x25519", {
publicKeyEncoding: {
format: "der",
type: "spki"
},
privateKeyEncoding: {
format: "der",
type: "pkcs8"
}
});
const publicKey = Schema.decodeSync(WireguardKey)(keys.publicKey.subarray(12).toString("base64"));
const privateKey = Schema.decodeSync(WireguardKey)(keys.privateKey.subarray(16).toString("base64"));
return {
publicKey,
privateKey
};
};
/**
* Generates a wireguard preshare key.
*
* @since 1.0.0
* @category Crypto
* @example
* import { generatePreshareKey } from "the-wireguard-effect/WireguardKey";
* const preshareKey = generatePreshareKey();
*/
exports.generateKeyPair = generateKeyPair;
const generatePreshareKey = () => {
const key = crypto.generateKeySync("hmac", {
length: 256
});
return Schema.decodeSync(WireguardKey)(key.export().toString("base64"));
};
exports.generatePreshareKey = generatePreshareKey;
//# sourceMappingURL=WireguardKey.js.map