Browse Source

Fix test packages CI issue

pull/605/head
Guillaume Vincent 3 years ago
parent
commit
de0aca766f
21 changed files with 2101 additions and 4517 deletions
  1. +51
    -3
      .github/workflows/test.yml
  2. +4
    -4
      packages/lesspass-crypto/index.js
  3. +1
    -1
      packages/lesspass-crypto/test.js
  4. +5
    -5
      packages/lesspass-entropy/package.json
  5. +5
    -5
      packages/lesspass-entropy/src/index.js
  6. +7
    -7
      packages/lesspass-entropy/src/pbkdf2.browser.js
  7. +1
    -1
      packages/lesspass-entropy/src/stringEncoding.js
  8. +23
    -23
      packages/lesspass-entropy/test/index.test.js
  9. +4
    -7
      packages/lesspass-entropy/test/karma.conf.js
  10. +111
    -164
      packages/lesspass-entropy/test/pbkdf2.test.js
  11. +1
    -1
      packages/lesspass-entropy/test/stringEncoding.test.js
  12. +937
    -2144
      packages/lesspass-entropy/yarn.lock
  13. +5
    -5
      packages/lesspass-fingerprint/package.json
  14. +6
    -6
      packages/lesspass-fingerprint/src/fingerprint.js
  15. +8
    -4
      packages/lesspass-fingerprint/src/hmac.browser.js
  16. +2
    -2
      packages/lesspass-fingerprint/src/hmac.js
  17. +1
    -1
      packages/lesspass-fingerprint/src/index.js
  18. +6
    -6
      packages/lesspass-fingerprint/test/api.test.js
  19. +6
    -9
      packages/lesspass-fingerprint/test/karma.conf.js
  20. +916
    -2118
      packages/lesspass-fingerprint/yarn.lock
  21. +1
    -1
      packages/lesspass-site/yarn.lock

+ 51
- 3
.github/workflows/test.yml View File

@@ -3,18 +3,66 @@ name: test
on: [push, pull_request] on: [push, pull_request]


jobs: jobs:
test-packages:
test-lesspass-crypto:
runs-on: ubuntu-18.04 runs-on: ubuntu-18.04
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: actions/setup-node@v1 - uses: actions/setup-node@v1
with: with:
node-version: "12" node-version: "12"
- name: test packages
run: |
- run: |
cd packages/lesspass-crypto
yarn install
yarn test

test-lesspass-entropy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: "12"
- run: |
cd packages/lesspass-entropy
yarn install
yarn test

test-lesspass-fingerprint:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: "12"
- run: |
cd packages/lesspass-fingerprint
yarn install
yarn test

test-lesspass-render-password:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: "12"
- run: |
cd packages/lesspass-render-password
yarn install yarn install
yarn test yarn test


test-lesspass-site:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: "12"
- run: |
cd packages/lesspass-site
yarn install
yarn build

test-mobile: test-mobile:
runs-on: ubuntu-18.04 runs-on: ubuntu-18.04
steps: steps:


+ 4
- 4
packages/lesspass-crypto/index.js View File

@@ -17,20 +17,20 @@ function arrayBufferToHex(arrayBuffer) {
return str; return str;
} }


function getAlgorithm(algorithm){
function getAlgorithm(algorithm) {
const algorithms = { const algorithms = {
sha1: "SHA-1", sha1: "SHA-1",
"sha-1": "SHA-1", "sha-1": "SHA-1",
sha256: "SHA-256", sha256: "SHA-256",
"sha-256": "SHA-256", "sha-256": "SHA-256",
sha512: "SHA-512", sha512: "SHA-512",
"sha-512": "SHA-512"
"sha-512": "SHA-512",
}; };
return algorithms[algorithm.toLowerCase()]
return algorithms[algorithm.toLowerCase()];
} }


module.exports = { module.exports = {
stringToArrayBuffer, stringToArrayBuffer,
arrayBufferToHex, arrayBufferToHex,
getAlgorithm
getAlgorithm,
}; };

+ 1
- 1
packages/lesspass-crypto/test.js View File

@@ -1,7 +1,7 @@
const { const {
stringToArrayBuffer, stringToArrayBuffer,
arrayBufferToHex, arrayBufferToHex,
getAlgorithm
getAlgorithm,
} = require("./index"); } = require("./index");


test("stringToArrayBuffer", () => { test("stringToArrayBuffer", () => {


+ 5
- 5
packages/lesspass-entropy/package.json View File

@@ -20,11 +20,11 @@
"lesspass-crypto": "9.1.9" "lesspass-crypto": "9.1.9"
}, },
"devDependencies": { "devDependencies": {
"karma": "^4.4.1",
"browserify": "^17.0.0",
"karma": "^6.1.2",
"karma-browserify": "^8.0.0",
"karma-chrome-launcher": "^3.1.0", "karma-chrome-launcher": "^3.1.0",
"karma-mocha": "^1.3.0",
"karma-webpack": "^4.0.2",
"mocha": "^8.2.1",
"webpack": "^4.44.2"
"karma-mocha": "^2.0.1",
"mocha": "^8.3.1"
} }
} }

+ 5
- 5
packages/lesspass-entropy/src/index.js View File

@@ -22,17 +22,17 @@ function isSupported() {
digits: true, digits: true,
symbols: true, symbols: true,
length: 16, length: 16,
counter: 1
counter: 1,
}, },
crypto: { crypto: {
method: "pbkdf2", method: "pbkdf2",
iterations: 1, iterations: 1,
keylen: 32, keylen: 32,
digest: "sha256"
}
digest: "sha256",
},
}, },
"tHis is a g00d! password" "tHis is a g00d! password"
).then(entropy => {
).then((entropy) => {
if ( if (
entropy === entropy ===
"e99e20abab609cc4564ef137acb540de20d9b92dcc5cda58f78ba431444ef2da" "e99e20abab609cc4564ef137acb540de20d9b92dcc5cda58f78ba431444ef2da"
@@ -48,5 +48,5 @@ function isSupported() {


module.exports = { module.exports = {
isSupported, isSupported,
calcEntropy
calcEntropy,
}; };

+ 7
- 7
packages/lesspass-entropy/src/pbkdf2.browser.js View File

@@ -1,35 +1,35 @@
const { const {
stringToArrayBuffer, stringToArrayBuffer,
arrayBufferToHex, arrayBufferToHex,
getAlgorithm
getAlgorithm,
} = require("lesspass-crypto"); } = require("lesspass-crypto");


module.exports = function pbkdf2(password, salt, iterations, keylen, digest) { module.exports = function pbkdf2(password, salt, iterations, keylen, digest) {
return window.crypto.subtle return window.crypto.subtle
.importKey("raw", stringToArrayBuffer(password), "PBKDF2", false, [ .importKey("raw", stringToArrayBuffer(password), "PBKDF2", false, [
"deriveKey"
"deriveKey",
]) ])
.then(key => {
.then((key) => {
const algo = { const algo = {
name: "PBKDF2", name: "PBKDF2",
salt: stringToArrayBuffer(salt), salt: stringToArrayBuffer(salt),
iterations, iterations,
hash: getAlgorithm(digest)
hash: getAlgorithm(digest),
}; };
return window.crypto.subtle.deriveKey( return window.crypto.subtle.deriveKey(
algo, algo,
key, key,
{ {
name: "AES-CTR", name: "AES-CTR",
length: keylen * 8
length: keylen * 8,
}, },
true, true,
["encrypt", "decrypt"] ["encrypt", "decrypt"]
); );
}) })
.then(derivedKey =>
.then((derivedKey) =>
window.crypto.subtle window.crypto.subtle
.exportKey("raw", derivedKey) .exportKey("raw", derivedKey)
.then(keyArray => arrayBufferToHex(keyArray))
.then((keyArray) => arrayBufferToHex(keyArray))
); );
}; };

+ 1
- 1
packages/lesspass-entropy/src/stringEncoding.js View File

@@ -19,5 +19,5 @@ function arrayBufferToHex(arrayBuffer) {


module.exports = { module.exports = {
stringToArrayBuffer, stringToArrayBuffer,
arrayBufferToHex
arrayBufferToHex,
}; };

+ 23
- 23
packages/lesspass-entropy/test/index.test.js View File

@@ -5,10 +5,10 @@ describe("entropy", () => {
it("calc entropy without crypto use default options and crypto", () => { it("calc entropy without crypto use default options and crypto", () => {
const profile = { const profile = {
site: "example.org", site: "example.org",
login: "contact@example.org"
login: "contact@example.org",
}; };
const masterPassword = "password"; const masterPassword = "password";
return calcEntropy(profile, masterPassword).then(entropy => {
return calcEntropy(profile, masterPassword).then((entropy) => {
assert.equal( assert.equal(
"dc33d431bce2b01182c613382483ccdb0e2f66482cbba5e9d07dab34acc7eb1e", "dc33d431bce2b01182c613382483ccdb0e2f66482cbba5e9d07dab34acc7eb1e",
entropy entropy
@@ -20,17 +20,17 @@ describe("entropy", () => {
site: "example.org", site: "example.org",
login: "contact@example.org", login: "contact@example.org",
options: { options: {
counter: 1
counter: 1,
}, },
crypto: { crypto: {
method: "pbkdf2", method: "pbkdf2",
iterations: 100000, iterations: 100000,
keylen: 32, keylen: 32,
digest: "sha256"
}
digest: "sha256",
},
}; };
const masterPassword = "password"; const masterPassword = "password";
return calcEntropy(profile, masterPassword).then(entropy => {
return calcEntropy(profile, masterPassword).then((entropy) => {
assert.equal( assert.equal(
"dc33d431bce2b01182c613382483ccdb0e2f66482cbba5e9d07dab34acc7eb1e", "dc33d431bce2b01182c613382483ccdb0e2f66482cbba5e9d07dab34acc7eb1e",
entropy entropy
@@ -42,17 +42,17 @@ describe("entropy", () => {
site: "example.org", site: "example.org",
login: "❤", login: "❤",
options: { options: {
counter: 1
counter: 1,
}, },
crypto: { crypto: {
method: "pbkdf2", method: "pbkdf2",
iterations: 100000, iterations: 100000,
keylen: 32, keylen: 32,
digest: "sha256"
}
digest: "sha256",
},
}; };
const masterPassword = "I ❤ LessPass"; const masterPassword = "I ❤ LessPass";
return calcEntropy(profile, masterPassword).then(entropy => {
return calcEntropy(profile, masterPassword).then((entropy) => {
assert.equal( assert.equal(
"4e66cab40690c01af55efd595f5963cc953d7e10273c01827881ebf8990c627f", "4e66cab40690c01af55efd595f5963cc953d7e10273c01827881ebf8990c627f",
entropy entropy
@@ -64,17 +64,17 @@ describe("entropy", () => {
site: "example.org", site: "example.org",
login: "contact@example.org", login: "contact@example.org",
options: { options: {
counter: 1
counter: 1,
}, },
crypto: { crypto: {
method: "pbkdf2", method: "pbkdf2",
iterations: 8192, iterations: 8192,
keylen: 16, keylen: 16,
digest: "sha512"
}
digest: "sha512",
},
}; };
const masterPassword = "password"; const masterPassword = "password";
return calcEntropy(profile, masterPassword).then(entropy => {
return calcEntropy(profile, masterPassword).then((entropy) => {
assert.equal("fff211c16a4e776b3574c6a5c91fd252", entropy); assert.equal("fff211c16a4e776b3574c6a5c91fd252", entropy);
}); });
}); });
@@ -83,33 +83,33 @@ describe("entropy", () => {
site: "example.org", site: "example.org",
login: "contact@example.org", login: "contact@example.org",
options: { options: {
counter: 1
counter: 1,
}, },
crypto: { crypto: {
method: "pbkdf2", method: "pbkdf2",
iterations: 100000, iterations: 100000,
keylen: 32, keylen: 32,
digest: "sha256"
}
digest: "sha256",
},
}; };
const profile2 = { const profile2 = {
site: "example.org", site: "example.org",
login: "contact@example.org", login: "contact@example.org",
options: { options: {
counter: 2
counter: 2,
}, },
crypto: { crypto: {
method: "pbkdf2", method: "pbkdf2",
iterations: 100000, iterations: 100000,
keylen: 32, keylen: 32,
digest: "sha256"
}
digest: "sha256",
},
}; };
const promises = [ const promises = [
calcEntropy(profile, "password"), calcEntropy(profile, "password"),
calcEntropy(profile2, "password")
calcEntropy(profile2, "password"),
]; ];
Promise.all(promises).then(values => {
Promise.all(promises).then((values) => {
assert.notEqual(values[0], values[1]); assert.notEqual(values[0], values[1]);
}); });
}); });
@@ -117,7 +117,7 @@ describe("entropy", () => {


describe("isSupported", () => { describe("isSupported", () => {
it("isSupported", () => it("isSupported", () =>
isSupported().then(supported => {
isSupported().then((supported) => {
assert(supported); assert(supported);
})); }));
}); });

+ 4
- 7
packages/lesspass-entropy/test/karma.conf.js View File

@@ -1,15 +1,12 @@
module.exports = (config) => { module.exports = (config) => {
config.set({ config.set({
basePath: "..", basePath: "..",
frameworks: ["mocha"],
frameworks: ["mocha", "browserify"],
plugins: ["karma-mocha", "karma-browserify", "karma-chrome-launcher"],
files: ["src/index.js", "test/**/*.js"], files: ["src/index.js", "test/**/*.js"],
preprocessors: { preprocessors: {
"src/index.js": ["webpack"],
"test/**/*.js": ["webpack"],
},
webpack: {},
webpackMiddleware: {
stats: "errors-only",
"src/index.js": ["browserify"],
"test/**/*.js": ["browserify"],
}, },
browsers: ["ChromeHeadless"], browsers: ["ChromeHeadless"],
singleRun: true, singleRun: true,


+ 111
- 164
packages/lesspass-entropy/test/pbkdf2.test.js View File

@@ -2,192 +2,139 @@ const assert = require("assert");
const pbkdf2 = require("../src/pbkdf2"); const pbkdf2 = require("../src/pbkdf2");


describe("pbkdf2", () => { describe("pbkdf2", () => {
it("secret, salt, 2 iterations, 32 keylen, sha256 hash", () => pbkdf2("secret", "salt", 2, 32, "sha256").then((key) => {
it("secret, salt, 2 iterations, 32 keylen, sha256 hash", () =>
pbkdf2("secret", "salt", 2, 32, "sha256").then((key) => {
assert.equal( assert.equal(
"f92f45f9df4c2aeabae1ed3c16f7b64660c1f8e377fa9b4699b23c2c3a29f569", "f92f45f9df4c2aeabae1ed3c16f7b64660c1f8e377fa9b4699b23c2c3a29f569",
key key
); );
})); }));
it("use pbkdf2 with 8192 iterations and sha256", () => pbkdf2(
"password",
"test@example.org",
8192,
32,
"sha256"
).then((key) => {
it("use pbkdf2 with 8192 iterations and sha256", () =>
pbkdf2("password", "test@example.org", 8192, 32, "sha256").then((key) => {
assert.equal( assert.equal(
"d8af5f918db6b65b1db3d3984e5a400e39e1dbb19462220e4431de283809f472", "d8af5f918db6b65b1db3d3984e5a400e39e1dbb19462220e4431de283809f472",
key key
); );
})); }));
it("customize number of iterations", () => pbkdf2(
"password",
"test@example.org",
4096,
32,
"sha256"
).then((key) => {
it("customize number of iterations", () =>
pbkdf2("password", "test@example.org", 4096, 32, "sha256").then((key) => {
assert.equal( assert.equal(
"0a91208545e3aa4935d3a22984ca097a7669259a04d261ac16361bdc1a2e960f", "0a91208545e3aa4935d3a22984ca097a7669259a04d261ac16361bdc1a2e960f",
key key
); );
})); }));
it("customize key length", () => pbkdf2(
"password",
"test@example.org",
8192,
16,
"sha256"
).then((key) => {
it("customize key length", () =>
pbkdf2("password", "test@example.org", 8192, 16, "sha256").then((key) => {
assert.equal("d8af5f918db6b65b1db3d3984e5a400e", key); assert.equal("d8af5f918db6b65b1db3d3984e5a400e", key);
})); }));
it("customize iterations and key length", () => pbkdf2(
"password",
"test@example.org",
4096,
16,
"sha256"
).then((key) => {
it("customize iterations and key length", () =>
pbkdf2("password", "test@example.org", 4096, 16, "sha256").then((key) => {
assert.equal("0a91208545e3aa4935d3a22984ca097a", key); assert.equal("0a91208545e3aa4935d3a22984ca097a", key);
})); }));
it("utf8 parameter", () => pbkdf2(
"♥ LessPass ♥",
"test@example.org",
8192,
32,
"sha256"
).then((key) => {
assert.equal(
"997fe81d3d0db236e039c75efdb487f17a902fdf94f9dacaa9884329c85d9651",
key
);
}));
it("auto generated test 0", () => pbkdf2(
"password",
"contact@lesspass.com",
8192,
32,
"sha256"
).then((key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}));
it("auto generated test 1", () => pbkdf2(
"password",
"contact@lesspass.com",
8192,
32,
"sha256"
).then((key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}));
it("auto generated test 2", () => pbkdf2(
"password",
"contact@lesspass.com",
8192,
32,
"sha256"
).then((key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}));
it("auto generated test 3", () => pbkdf2(
"password",
"contact@lesspass.com",
8192,
32,
"sha256"
).then((key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}));
it("auto generated test 4", () => pbkdf2(
"password",
"contact@lesspass.com",
8192,
32,
"sha256"
).then((key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}));
it("auto generated test 5", () => pbkdf2(
"password",
"contact@lesspass.com",
8192,
32,
"sha256"
).then((key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}));
it("auto generated test 6", () => pbkdf2(
"password",
"contact@lesspass.com",
8192,
32,
"sha256"
).then((key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}));
it("auto generated test 7", () => pbkdf2(
"password",
"contact@lesspass.com",
8192,
32,
"sha256"
).then((key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}));
it("auto generated test 8", () => pbkdf2(
"password",
"contact@lesspass.com",
8192,
32,
"sha256"
).then((key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}));
it("auto generated test 9", () => pbkdf2("password", "lesspass", 8192, 32, "sha256").then((
key
) => {
it("utf8 parameter", () =>
pbkdf2("♥ LessPass ♥", "test@example.org", 8192, 32, "sha256").then(
(key) => {
assert.equal(
"997fe81d3d0db236e039c75efdb487f17a902fdf94f9dacaa9884329c85d9651",
key
);
}
));
it("auto generated test 0", () =>
pbkdf2("password", "contact@lesspass.com", 8192, 32, "sha256").then(
(key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}
));
it("auto generated test 1", () =>
pbkdf2("password", "contact@lesspass.com", 8192, 32, "sha256").then(
(key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}
));
it("auto generated test 2", () =>
pbkdf2("password", "contact@lesspass.com", 8192, 32, "sha256").then(
(key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}
));
it("auto generated test 3", () =>
pbkdf2("password", "contact@lesspass.com", 8192, 32, "sha256").then(
(key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}
));
it("auto generated test 4", () =>
pbkdf2("password", "contact@lesspass.com", 8192, 32, "sha256").then(
(key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}
));
it("auto generated test 5", () =>
pbkdf2("password", "contact@lesspass.com", 8192, 32, "sha256").then(
(key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}
));
it("auto generated test 6", () =>
pbkdf2("password", "contact@lesspass.com", 8192, 32, "sha256").then(
(key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}
));
it("auto generated test 7", () =>
pbkdf2("password", "contact@lesspass.com", 8192, 32, "sha256").then(
(key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}
));
it("auto generated test 8", () =>
pbkdf2("password", "contact@lesspass.com", 8192, 32, "sha256").then(
(key) => {
assert.equal(
"63d850713d0b2f7f2c4396fe93f4ac0c6bc7485f9e7473c4b8c4a33ec12199c0",
key
);
}
));
it("auto generated test 9", () =>
pbkdf2("password", "lesspass", 8192, 32, "sha256").then((key) => {
assert.equal( assert.equal(
"7d05ee25597dcc3ac16d082aa910e7707f75be620ed8db5bef7245e2a8579116", "7d05ee25597dcc3ac16d082aa910e7707f75be620ed8db5bef7245e2a8579116",
key key
); );
})); }));
it("auto generated test 10", () => pbkdf2(
"password2",
"contact@lesspass.com",
8192,
32,
"sha256"
).then((key) => {
assert.equal(
"ce853092fc54fe88c281e38df97bd5826d64e6bee315dc94939cbba8930df0e4",
key
);
}));
it("auto generated test 10", () =>
pbkdf2("password2", "contact@lesspass.com", 8192, 32, "sha256").then(
(key) => {
assert.equal(
"ce853092fc54fe88c281e38df97bd5826d64e6bee315dc94939cbba8930df0e4",
key
);
}
));
}); });

+ 1
- 1
packages/lesspass-entropy/test/stringEncoding.test.js View File

@@ -1,7 +1,7 @@
const assert = require("assert"); const assert = require("assert");
const { const {
stringToArrayBuffer, stringToArrayBuffer,
arrayBufferToHex
arrayBufferToHex,
} = require("../src/stringEncoding"); } = require("../src/stringEncoding");


describe("stringEncoding", () => { describe("stringEncoding", () => {


+ 937
- 2144
packages/lesspass-entropy/yarn.lock
File diff suppressed because it is too large
View File


+ 5
- 5
packages/lesspass-fingerprint/package.json View File

@@ -20,11 +20,11 @@
"lesspass-crypto": "9.1.9" "lesspass-crypto": "9.1.9"
}, },
"devDependencies": { "devDependencies": {
"karma": "^4.4.1",
"browserify": "^17.0.0",
"karma": "^6.1.2",
"karma-browserify": "^8.0.0",
"karma-chrome-launcher": "^3.1.0", "karma-chrome-launcher": "^3.1.0",
"karma-mocha": "^1.3.0",
"karma-webpack": "^4.0.2",
"mocha": "^8.2.1",
"webpack": "^4.44.2"
"karma-mocha": "^2.0.1",
"mocha": "^8.3.1"
} }
} }

+ 6
- 6
packages/lesspass-fingerprint/src/fingerprint.js View File

@@ -13,7 +13,7 @@ function getColor(color) {
"#920000", "#920000",
"#924900", "#924900",
"#DB6D00", "#DB6D00",
"#24FE23"
"#24FE23",
]; ];
const index = parseInt(color, 16) % colors.length; const index = parseInt(color, 16) % colors.length;
return colors[index]; return colors[index];
@@ -66,30 +66,30 @@ function getIcon(hash) {
"fa-flask", "fa-flask",
"fa-futbol-o", "fa-futbol-o",
"fa-gamepad", "fa-gamepad",
"fa-graduation-cap"
"fa-graduation-cap",
]; ];
const index = parseInt(hash, 16) % icons.length; const index = parseInt(hash, 16) % icons.length;
return icons[index]; return icons[index];
} }


module.exports = function(hmacSHA256) {
module.exports = function (hmacSHA256) {
const fingerprint = []; const fingerprint = [];
const hash1 = hmacSHA256.substring(0, 6); const hash1 = hmacSHA256.substring(0, 6);
fingerprint.push({ fingerprint.push({
color: getColor(hash1), color: getColor(hash1),
icon: getIcon(hash1)
icon: getIcon(hash1),
}); });


const hash2 = hmacSHA256.substring(6, 12); const hash2 = hmacSHA256.substring(6, 12);
fingerprint.push({ fingerprint.push({
color: getColor(hash2), color: getColor(hash2),
icon: getIcon(hash2)
icon: getIcon(hash2),
}); });


const hash3 = hmacSHA256.substring(12, 18); const hash3 = hmacSHA256.substring(12, 18);
fingerprint.push({ fingerprint.push({
color: getColor(hash3), color: getColor(hash3),
icon: getIcon(hash3)
icon: getIcon(hash3),
}); });


return fingerprint; return fingerprint;


+ 8
- 4
packages/lesspass-fingerprint/src/hmac.browser.js View File

@@ -1,4 +1,8 @@
const { stringToArrayBuffer, arrayBufferToHex, getAlgorithm } = require("lesspass-crypto");
const {
stringToArrayBuffer,
arrayBufferToHex,
getAlgorithm,
} = require("lesspass-crypto");


module.exports = function hmac(digest, string, salt) { module.exports = function hmac(digest, string, salt) {
return window.crypto.subtle return window.crypto.subtle
@@ -7,14 +11,14 @@ module.exports = function hmac(digest, string, salt) {
stringToArrayBuffer(string), stringToArrayBuffer(string),
{ {
name: "HMAC", name: "HMAC",
hash: { name: getAlgorithm(digest) }
hash: { name: getAlgorithm(digest) },
}, },
true, true,
["sign", "verify"] ["sign", "verify"]
) )
.then(key =>
.then((key) =>
window.crypto.subtle window.crypto.subtle
.sign({ name: "HMAC" }, key, stringToArrayBuffer(salt || "")) .sign({ name: "HMAC" }, key, stringToArrayBuffer(salt || ""))
.then(signature => arrayBufferToHex(signature))
.then((signature) => arrayBufferToHex(signature))
); );
}; };

+ 2
- 2
packages/lesspass-fingerprint/src/hmac.js View File

@@ -1,7 +1,7 @@
const crypto = require("crypto"); const crypto = require("crypto");


module.exports = function(digest, string, salt) {
return new Promise(resolve => {
module.exports = function (digest, string, salt) {
return new Promise((resolve) => {
resolve( resolve(
crypto crypto
.createHmac(digest, string) .createHmac(digest, string)


+ 1
- 1
packages/lesspass-fingerprint/src/index.js View File

@@ -3,5 +3,5 @@ const createHmac = require("./hmac");


module.exports = { module.exports = {
createFingerprint, createFingerprint,
createHmac
createHmac,
}; };

+ 6
- 6
packages/lesspass-fingerprint/test/api.test.js View File

@@ -3,14 +3,14 @@ const { createFingerprint, createHmac } = require("../src");


describe("api", () => { describe("api", () => {
it("createHmac", () => it("createHmac", () =>
createHmac("sha256", "password").then(fingerprint => {
createHmac("sha256", "password").then((fingerprint) => {
assert.equal( assert.equal(
"e56a207acd1e6714735487c199c6f095844b7cc8e5971d86c003a7b6f36ef51e", "e56a207acd1e6714735487c199c6f095844b7cc8e5971d86c003a7b6f36ef51e",
fingerprint fingerprint
); );
})); }));
it("createHmac and update", () => it("createHmac and update", () =>
createHmac("sha256", "password", "salt").then(fingerprint => {
createHmac("sha256", "password", "salt").then((fingerprint) => {
assert.equal( assert.equal(
"fc328232993ff34ca56631e4a101d60393cad12171997ee0b562bf7852b2fed0", "fc328232993ff34ca56631e4a101d60393cad12171997ee0b562bf7852b2fed0",
fingerprint fingerprint
@@ -28,16 +28,16 @@ describe("api", () => {
const expectedFingerprint = [ const expectedFingerprint = [
{ {
color: "#FFB5DA", color: "#FFB5DA",
icon: "fa-flask"
icon: "fa-flask",
}, },
{ {
color: "#009191", color: "#009191",
icon: "fa-archive"
icon: "fa-archive",
}, },
{ {
color: "#B5DAFE", color: "#B5DAFE",
icon: "fa-beer"
}
icon: "fa-beer",
},
]; ];
assert.deepEqual( assert.deepEqual(
createFingerprint( createFingerprint(


+ 6
- 9
packages/lesspass-fingerprint/test/karma.conf.js View File

@@ -1,17 +1,14 @@
module.exports = config => {
module.exports = (config) => {
config.set({ config.set({
basePath: "..", basePath: "..",
frameworks: ["mocha"],
frameworks: ["mocha", "browserify"],
plugins: ["karma-mocha", "karma-browserify", "karma-chrome-launcher"],
files: ["src/index.js", "test/**/*.js"], files: ["src/index.js", "test/**/*.js"],
preprocessors: { preprocessors: {
"src/index.js": ["webpack"],
"test/**/*.js": ["webpack"]
},
webpack: {},
webpackMiddleware: {
stats: "errors-only"
"src/index.js": ["browserify"],
"test/**/*.js": ["browserify"],
}, },
browsers: ["ChromeHeadless"], browsers: ["ChromeHeadless"],
singleRun: true
singleRun: true,
}); });
}; };

+ 916
- 2118
packages/lesspass-fingerprint/yarn.lock
File diff suppressed because it is too large
View File


+ 1
- 1
packages/lesspass-site/yarn.lock View File

@@ -2339,7 +2339,7 @@ lesspass-fingerprint@9.1.9:
dependencies: dependencies:
lesspass-crypto "9.1.9" lesspass-crypto "9.1.9"


lesspass-pure@9.2.0:
lesspass-pure@latest:
version "9.2.0" version "9.2.0"
resolved "https://registry.yarnpkg.com/lesspass-pure/-/lesspass-pure-9.2.0.tgz#80b4fdf401b3218b9c1f1b252c66c5e3d96941ec" resolved "https://registry.yarnpkg.com/lesspass-pure/-/lesspass-pure-9.2.0.tgz#80b4fdf401b3218b9c1f1b252c66c5e3d96941ec"
integrity sha512-4PsmTSOxG5F2z9tP6u5CxHAps/9yHCkkZ2MAEjE0qaEYUePrD+YJtjrzPspks92pSpahjLGAmBtffDCzV11iVQ== integrity sha512-4PsmTSOxG5F2z9tP6u5CxHAps/9yHCkkZ2MAEjE0qaEYUePrD+YJtjrzPspks92pSpahjLGAmBtffDCzV11iVQ==


Loading…
Cancel
Save