petcrypt-js-lite
Version:
Universal sdk for PET functionalities
42 lines • 1.55 kB
JavaScript
;
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