UNPKG

@tiny-utils/crypto

Version:

Tiny utils for crypto: asymmetric/symmetric encryption, ed25519, sha256, etc.

69 lines 2.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.unpackSymmetricalyEncryptedData = exports.symmetricDecrypt = exports.packSymmetricalyEncryptedData = exports.symmetricEncrypt = void 0; var tweetnacl_1 = require("tweetnacl"); var bytes_1 = require("@tiny-utils/bytes"); /** * @category Crypto * @description Method to symmetrically encrypt the data using *xsalsa20-poly1305* algorithm. * * @param data Data to encrypt * @param key Symmetric key to encrypt the data * @returns Encrypted data */ var symmetricEncrypt = function (data, key) { var nonce = (0, tweetnacl_1.randomBytes)(24); var encData = tweetnacl_1.box.after(data, nonce, key); return (0, exports.packSymmetricalyEncryptedData)(encData, nonce); }; exports.symmetricEncrypt = symmetricEncrypt; /** * Method to pack data and nonce into one readable bytes array * * @param encData Encrypted data raw bytes * @param nonce Nonce raw bytes * @returns Container buffer */ var packSymmetricalyEncryptedData = function (encData, nonce) { var buf = bytes_1.SmartBuffer.ofSize(1 + 1 + nonce.length + 4 + encData.length); buf.writeUint8(1); buf.writeBytes8Length(nonce); buf.writeBytes32Length(encData); return buf.bytes; }; exports.packSymmetricalyEncryptedData = packSymmetricalyEncryptedData; /** * @category Crypto * @description Method to symmetrically decrypt the data using *xsalsa20-poly1305* algorithm. * * @param data Data to decrypt * @param key Symmetric key to decrypt the data * @returns Decrypted data */ var symmetricDecrypt = function (data, key) { var _a = (0, exports.unpackSymmetricalyEncryptedData)(data), nonce = _a.nonce, encData = _a.encData; var decData = tweetnacl_1.box.open.after(encData, nonce, key); if (!decData) { throw new Error("symmetricDecrypt: Invalid box or key"); } return decData; }; exports.symmetricDecrypt = symmetricDecrypt; /** * Method to unpack data and nonce from one readable bytes array * * @param data Bytes with encrypted data and nonce * @returns Data and nonce */ var unpackSymmetricalyEncryptedData = function (data) { var buf = new bytes_1.SmartBuffer(data); var version = buf.readUint8(); var nonce = buf.readBytes8Length(); var encData = buf.readBytes32Length(); return { nonce: nonce, encData: encData, }; }; exports.unpackSymmetricalyEncryptedData = unpackSymmetricalyEncryptedData; //# sourceMappingURL=symmetric.js.map