diff --git a/src/dell.spec.ts b/src/dell.spec.ts index 4d9beea..dded110 100644 --- a/src/dell.spec.ts +++ b/src/dell.spec.ts @@ -5,7 +5,9 @@ // // // HDD SN WXH109A14712 ? -import { calculateSuffix, DellTag, hddOldSolver, keygenDell, SuffixType } from "./dell"; +import { + calculateSuffix, dellHddSolver, dellSolver, DellTag, hddOldSolver, keygenDell, SuffixType +} from "./dell"; // shortcut for simpler testing function checkSuffix(serial: string, tag: DellTag, type: SuffixType): number[] { @@ -171,4 +173,16 @@ describe("Test Dell BIOS", () => { it("Dell for 12345678901 is yyyyyhnn", () => { expect(hddOldSolver("12345678901")).toEqual(["yyyyyhnn"]); }); + it("Dell for 1234567-595B", () => { + expect(dellSolver("1234567-595B")).toEqual(["46rg65ky"]); + }); + it("Dell for: 1234567-1F66", () => { + expect(dellSolver("1234567-1f66")).toEqual(["kIpTBzx0m3s10JDR"]); + }); + it("Dell HDD for: 1234567890A-595B", () => { + expect(dellHddSolver("1234567890A-595b")).toEqual(["nyoap4lq"]); + }); + it("Check bad dell tag", () => { + expect(dellSolver("1234567-BAD1")).toEqual([]); + }); }); diff --git a/src/dell/index.ts b/src/dell/index.ts index a356960..d9cf9f3 100644 --- a/src/dell/index.ts +++ b/src/dell/index.ts @@ -187,9 +187,51 @@ export function keygenDell(serial: string, tag: DellTag, type: SuffixType): stri return resultToString(decodedBytes, tag); } +function checkDellTag(tag: string): boolean { + tag = tag.toUpperCase(); + for (let tagItem in DellTag) { + if (tag === DellTag[tagItem]) { + return true; + } + } + return false; +} + export let hddOldSolver = makeSolver({ name: "Dell HDD Serial Number (old)", examples: ["12345678901"], inputValidator: (s) => s.length === 11, fun: (s) => [keygenHddOld(s)] }); + +export let dellSolver = makeSolver({ + name: "Dell from serial number", + examples: ["1234567-595B", "1234567-1D3B"], + inputValidator: (password: string) => { + if (password.length !== 11) { + return false; + } else { + return checkDellTag(password.slice(7, 11)); + } + }, + fun: (password: string) => { + let suffix = password.slice(7, 11).toUpperCase(); + return [keygenDell(password.slice(0, 7), suffix as DellTag, SuffixType.ServiceTag)]; + } +}); + +export let dellHddSolver = makeSolver({ + name: "Dell from hdd serial number", + examples: ["1234567890A-595B"], + inputValidator: (password: string) => { + if (password.length !== 15) { + return false; + } else { + return checkDellTag(password.slice(11, 15)); + } + }, + fun: (password: string) => { + let suffix = password.slice(11, 15).toUpperCase(); + return [keygenDell(password.slice(0, 11), suffix as DellTag, SuffixType.HDD)]; + } +});