@tiny-utils/crypto
Version:
Tiny utils for crypto: asymmetric/symmetric encryption, ed25519, sha256, etc.
69 lines • 2.49 kB
JavaScript
;
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