UNPKG

@hypernetlabs/common-crypto-utils

Version:
97 lines 4.83 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CryptoUtils = void 0; const crypto_1 = __importDefault(require("crypto")); const common_objects_1 = require("@hypernetlabs/common-objects"); const objects_1 = require("@hypernetlabs/objects"); const argon2_1 = __importDefault(require("argon2")); const ethers_1 = require("ethers"); const inversify_1 = require("inversify"); const neverthrow_1 = require("neverthrow"); let CryptoUtils = class CryptoUtils { constructor() { this.cipherAlgorithm = "aes-256-cbc"; } getNonce(nonceSize = 64) { return (0, neverthrow_1.okAsync)(crypto_1.default.randomBytes(nonceSize) .toString("base64") .slice(0, nonceSize)); } createAESKey() { return (0, neverthrow_1.okAsync)((0, common_objects_1.AESKey)(crypto_1.default.randomBytes(32).toString("base64"))); } createEthereumPrivateKey() { return (0, neverthrow_1.okAsync)((0, common_objects_1.EthereumPrivateKey)(crypto_1.default.randomBytes(32).toString("hex"))); } getEthereumAccountAddressFromPrivateKey(privateKey) { const wallet = new ethers_1.ethers.Wallet(privateKey); return (0, objects_1.EthereumAccountAddress)(wallet.address); } verifySignature(message, signature) { const address = (0, objects_1.EthereumAccountAddress)(ethers_1.ethers.utils.verifyMessage(message, signature)); return (0, neverthrow_1.okAsync)(address); } verifyTypedData(domain, types, value, signature) { return (0, neverthrow_1.okAsync)((0, objects_1.EthereumAccountAddress)(ethers_1.ethers.utils.verifyTypedData(domain, types, value, signature))); } encryptString(secret, encryptionKey) { return this.getNonce(16).map((nonce) => { const iv = (0, common_objects_1.InitializationVector)(nonce); const cipher = crypto_1.default.createCipheriv(this.cipherAlgorithm, Buffer.from(encryptionKey, "base64"), iv); // Encrypt the message let encryptedData = cipher.update(secret, "utf-8", "base64"); encryptedData += cipher.final("base64"); return new common_objects_1.AESEncryptedString((0, common_objects_1.EncryptedString)(encryptedData), iv); }); } decryptAESEncryptedString(encrypted, encryptionKey) { // The decipher function const decipher = crypto_1.default.createDecipheriv(this.cipherAlgorithm, Buffer.from(encryptionKey, "base64"), encrypted.initializationVector); // decrypt the message let decryptedData = decipher.update(encrypted.data, "base64", "utf-8"); decryptedData += decipher.final("utf8"); return (0, neverthrow_1.okAsync)(decryptedData); } // public generateKeyPair(): ResultAsync<void, never> { // const { publicKey, privateKey } = Crypto.generateKeyPairSync("rsa", { // // The standard secure default length for RSA keys is 2048 bits // modulusLength: 2048, // }); // console.log(publicKey); // return okAsync(undefined); // } signMessage(message, privateKey) { const wallet = new ethers_1.ethers.Wallet(privateKey); return neverthrow_1.ResultAsync.fromSafePromise(wallet.signMessage(message)).map((signature) => { return (0, objects_1.Signature)(signature); }); } hashStringSHA256(message) { const hash = crypto_1.default.createHash("sha256") .update(message) .digest("base64"); return (0, neverthrow_1.okAsync)((0, common_objects_1.SHA256Hash)(hash)); } hashStringArgon2(message) { return neverthrow_1.ResultAsync.fromSafePromise(argon2_1.default.hash(message)).map((hash) => { return (0, common_objects_1.Argon2Hash)(hash); }); } verifyHashArgon2(hash, message) { return neverthrow_1.ResultAsync.fromSafePromise(argon2_1.default.verify(hash, message)); } }; CryptoUtils = __decorate([ (0, inversify_1.injectable)() ], CryptoUtils); exports.CryptoUtils = CryptoUtils; //# sourceMappingURL=CryptoUtils.js.map