nitlix-crypto
Version:
😍 Another starting collection of hashing, salting and other encryption tools 🚀 for the back-end side of the web.
37 lines (36 loc) • 1.94 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, saltedString_1) {
return __awaiter(this, arguments, void 0, function* (string, saltedString, roundsUsed = 10) {
const [salt, hash] = saltedString.split(":");
// 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 with the same parameters
const derivedBits = yield crypto.subtle.deriveBits({
name: "PBKDF2",
salt: saltBuffer,
iterations: roundsUsed,
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("");
// Compare the derived hash with the stored hash
return hash === derivedHex;
});
}