nitlix-crypto
Version:
😍 Another starting collection of hashing, salting and other encryption tools 🚀 for the back-end side of the web.
39 lines (38 loc) • 2.02 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;
function default_1(string_1) {
return __awaiter(this, arguments, void 0, function* (string, rounds = 10) {
// Generate a random salt (16 bytes = 32 hex characters)
const saltArray = new Uint8Array(16);
crypto.getRandomValues(saltArray);
const salt = Array.from(saltArray, (byte) => byte.toString(16).padStart(2, "0")).join("");
// Convert string to ArrayBuffer
const encoder = new TextEncoder();
const stringBuffer = encoder.encode(string);
const saltBuffer = encoder.encode(salt);
// Import the key for PBKDF2
const key = yield crypto.subtle.importKey("raw", stringBuffer, { name: "PBKDF2" }, false, ["deriveBits"]);
// Derive bits using PBKDF2
const derivedBits = yield crypto.subtle.deriveBits({
name: "PBKDF2",
salt: saltBuffer,
iterations: rounds,
hash: "SHA-512",
}, key, 512 // 64 bytes = 512 bits
);
// Convert derived bits to hex string
const derivedArray = new Uint8Array(derivedBits);
const derivedHex = Array.from(derivedArray, (byte) => byte.toString(16).padStart(2, "0")).join("");
return salt + ":" + derivedHex;
});
}