UNPKG

petcrypt-js-lite

Version:

Universal sdk for PET functionalities

42 lines 1.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Cipher = void 0; const crypto = require('crypto'); const EC = require('elliptic').ec; const ec = new EC('curve25519'); class Cipher { constructor() { this.keypair = ec.genKeyPair(); this.aesKey = Buffer.alloc(0); } isAesKeySet() { return this.aesKey == Buffer.alloc(0); } getPublicKey() { return Buffer.from(this.keypair.getPublic().encode('array', false)).reverse(); } deriveShareSecret(publicKey) { const pubKey = ec.keyFromPublic(publicKey.reverse()); let sharedSecret = this.keypair.derive(pubKey.getPublic()); if (typeof globalThis !== 'undefined' && typeof globalThis.window !== 'undefined') { sharedSecret = sharedSecret.toArray().reverse(); } else { sharedSecret = Buffer.from(sharedSecret.toArray()).reverse(); } this.aesKey = crypto.createHash('sha256').update(sharedSecret).digest(); } async aesEncrypt(data, type) { const iv = crypto.randomBytes(16); const cipher = crypto.createCipheriv('aes-256-cbc', this.aesKey, iv); let encryptedData = cipher.update(data); encryptedData = Buffer.concat([encryptedData, cipher.final()]); return Buffer.from(JSON.stringify({ iv: Array.from(iv), data: Array.from(encryptedData), data_type: Array.from([type]) })); } } exports.Cipher = Cipher; //# sourceMappingURL=cipher.js.map