UNPKG

@waku/rln

Version:

RLN (Rate Limiting Nullifier) implementation for Waku

104 lines (102 loc) 5.41 kB
import { commonjsGlobal } from '../../../../_virtual/_commonjsHelpers.js'; import { __exports as functional } from '../../../../_virtual/functional.js'; import require$$0 from '../../../../_virtual/index2.js'; import './kdf.js'; import './checksum.js'; import './cipher.js'; import './password.js'; import { u as utilsExports } from '../node_modules/ethereum-cryptography/utils.js'; import { __exports as kdf } from '../../../../_virtual/kdf.js'; import { __exports as checksum } from '../../../../_virtual/checksum.js'; import { __exports as cipher } from '../../../../_virtual/cipher.js'; import { __exports as password } from '../../../../_virtual/password.js'; (function (exports) { var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.decrypt = exports.verifyPassword = exports.create = exports.defaultAes128CtrModule = exports.defaultSha256Module = exports.defaultScryptModule = exports.defaultPbkdfModule = void 0; const uuid_1 = require$$0; const kdf_1 = kdf; Object.defineProperty(exports, "defaultPbkdfModule", { enumerable: true, get: function () { return kdf_1.defaultPbkdfModule; } }); Object.defineProperty(exports, "defaultScryptModule", { enumerable: true, get: function () { return kdf_1.defaultScryptModule; } }); const checksum_1 = checksum; Object.defineProperty(exports, "defaultSha256Module", { enumerable: true, get: function () { return checksum_1.defaultSha256Module; } }); const cipher_1 = cipher; Object.defineProperty(exports, "defaultAes128CtrModule", { enumerable: true, get: function () { return cipher_1.defaultAes128CtrModule; } }); const password_1 = password; const utils_1 = utilsExports; /** * Create a new keystore object * * @param password password used to encrypt the keystore * @param secret secret key material to be encrypted * @param pubkey public key, not checked for validity * @param path HD path used to generate the secret * @param kdfMod key derivation function (kdf) configuration module * @param checksumMod checksum configuration module * @param cipherMod cipher configuration module */ function create(password, secret, pubkey, path, description = null, kdfMod = kdf_1.defaultPbkdfModule(), checksumMod = checksum_1.defaultSha256Module(), cipherMod = cipher_1.defaultAes128CtrModule()) { return __awaiter(this, void 0, void 0, function* () { const encryptionKey = yield kdf_1.kdf(kdfMod, password_1.normalizePassword(password)); const ciphertext = yield cipher_1.cipherEncrypt(cipherMod, encryptionKey.slice(0, 16), secret); return { version: 4, uuid: uuid_1.v4(), description: description || undefined, path: path, pubkey: utils_1.bytesToHex(pubkey), crypto: { kdf: { function: kdfMod.function, params: Object.assign({}, kdfMod.params), message: "", }, checksum: { function: checksumMod.function, params: {}, message: utils_1.bytesToHex(yield checksum_1.checksum(checksumMod, encryptionKey, ciphertext)), }, cipher: { function: cipherMod.function, params: Object.assign({}, cipherMod.params), message: utils_1.bytesToHex(ciphertext), }, }, }; }); } exports.create = create; /** * Verify the password of a keystore object */ function verifyPassword(keystore, password) { return __awaiter(this, void 0, void 0, function* () { const decryptionKey = yield kdf_1.kdf(keystore.crypto.kdf, password_1.normalizePassword(password)); const ciphertext = utils_1.hexToBytes(keystore.crypto.cipher.message); return checksum_1.verifyChecksum(keystore.crypto.checksum, decryptionKey, ciphertext); }); } exports.verifyPassword = verifyPassword; /** * Decrypt a keystore, returns the secret key or throws on invalid password */ function decrypt(keystore, password) { return __awaiter(this, void 0, void 0, function* () { const decryptionKey = yield kdf_1.kdf(keystore.crypto.kdf, password_1.normalizePassword(password)); const ciphertext = utils_1.hexToBytes(keystore.crypto.cipher.message); if (!(yield checksum_1.verifyChecksum(keystore.crypto.checksum, decryptionKey, ciphertext))) { throw new Error("Invalid password"); } return cipher_1.cipherDecrypt(keystore.crypto.cipher, decryptionKey.slice(0, 16)); }); } exports.decrypt = decrypt; } (functional));