Przeglądaj źródła

Add LessPass master password for fingerprint calculation

pull/352/head
Guillaume Vincent 6 lat temu
rodzic
commit
3e86832c3f
12 zmienionych plików z 5332 dodań i 0 usunięć
  1. +17
    -0
      master-password/.editorconfig
  2. +2
    -0
      master-password/.gitignore
  3. +18
    -0
      master-password/.travis.yml
  4. +43
    -0
      master-password/README.md
  5. +104
    -0
      master-password/dist/lesspass-master-password.js
  6. +1
    -0
      master-password/dist/lesspass-master-password.min.js
  7. +4944
    -0
      master-password/package-lock.json
  8. +48
    -0
      master-password/package.json
  9. +100
    -0
      master-password/src/index.js
  10. +33
    -0
      master-password/test/api.tests.js
  11. +19
    -0
      master-password/test/karma.conf.js
  12. +3
    -0
      todo.md

+ 17
- 0
master-password/.editorconfig Wyświetl plik

@@ -0,0 +1,17 @@
# editorconfig.org

root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false

[*.py]
indent_size = 4

+ 2
- 0
master-password/.gitignore Wyświetl plik

@@ -0,0 +1,2 @@
node_modules/
npm-debug.log

+ 18
- 0
master-password/.travis.yml Wyświetl plik

@@ -0,0 +1,18 @@
dist: trusty
sudo: required
language: node_js
node_js:
- 6
- 8
addons:
firefox: "latest"
apt:
sources:
- google-chrome
packages:
- google-chrome-stable
before_script:
- export CHROME_BIN=/usr/bin/google-chrome
- "export DISPLAY=:99.0"
- "sh -e /etc/init.d/xvfb start"
- sleep 3

+ 43
- 0
master-password/README.md Wyświetl plik

@@ -0,0 +1,43 @@
# LessPass render password

LessPass node module used to render password based on options

## Requirements

- node LTS

## Install

npm install lesspass-master-password

## Usage

var LessPassMasterPassword = require("lesspass-master-password");
console.log(LessPassMasterPassword.getFingerprint("e56a207acd1e6714735487c199c6f095844b7cc8e5971d86c003a7b6f36ef51e"))
// [
{
color: "#FFB5DA",
icon: "fa-flask"
},
{
color: "#009191",
icon: "fa-archiv,e"
},
{
color: "#B5DAFE",
icon: "fa-beer"
}
]

## Tests

npm test

## License

This project is licensed under the terms of the GNU GPLv3.


## Issues

report issues on [LessPass project](https://github.com/lesspass/lesspass/issues)

+ 104
- 0
master-password/dist/lesspass-master-password.js Wyświetl plik

@@ -0,0 +1,104 @@
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.getLessPassFingerprint = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
function getColor(color) {
var colors = [
"#000000",
"#074750",
"#009191",
"#FF6CB6",
"#FFB5DA",
"#490092",
"#006CDB",
"#B66DFF",
"#6DB5FE",
"#B5DAFE",
"#920000",
"#924900",
"#DB6D00",
"#24FE23"
];
var index = parseInt(color, 16) % colors.length;
return colors[index];
}

function getIcon(hash) {
var icons = [
"fa-hashtag",
"fa-heart",
"fa-hotel",
"fa-university",
"fa-plug",
"fa-ambulance",
"fa-bus",
"fa-car",
"fa-plane",
"fa-rocket",
"fa-ship",
"fa-subway",
"fa-truck",
"fa-jpy",
"fa-eur",
"fa-btc",
"fa-usd",
"fa-gbp",
"fa-archive",
"fa-area-chart",
"fa-bed",
"fa-beer",
"fa-bell",
"fa-binoculars",
"fa-birthday-cake",
"fa-bomb",
"fa-briefcase",
"fa-bug",
"fa-camera",
"fa-cart-plus",
"fa-certificate",
"fa-coffee",
"fa-cloud",
"fa-coffee",
"fa-comment",
"fa-cube",
"fa-cutlery",
"fa-database",
"fa-diamond",
"fa-exclamation-circle",
"fa-eye",
"fa-flag",
"fa-flask",
"fa-futbol-o",
"fa-gamepad",
"fa-graduation-cap"
];
var index = parseInt(hash, 16) % icons.length;
return icons[index];
}

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

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

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

return fingerprint;
}

module.exports = {
getLessPassFingerprint: getFingerprint
};

},{}]},{},[1])(1)
});

+ 1
- 0
master-password/dist/lesspass-master-password.min.js Wyświetl plik

@@ -0,0 +1 @@
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).getLessPassFingerprint=e()}}(function(){return function t(o,i,u){function c(a,e){if(!i[a]){if(!o[a]){var f="function"==typeof require&&require;if(!e&&f)return f(a,!0);if(s)return s(a,!0);var r=new Error("Cannot find module '"+a+"'");throw r.code="MODULE_NOT_FOUND",r}var n=i[a]={exports:{}};o[a][0].call(n.exports,function(e){return c(o[a][1][e]||e)},n,n.exports,t,o,i,u)}return i[a].exports}for(var s="function"==typeof require&&require,e=0;e<u.length;e++)c(u[e]);return c}({1:[function(e,a,f){function t(e){var a=["#000000","#074750","#009191","#FF6CB6","#FFB5DA","#490092","#006CDB","#B66DFF","#6DB5FE","#B5DAFE","#920000","#924900","#DB6D00","#24FE23"];return a[parseInt(e,16)%a.length]}function o(e){var a=["fa-hashtag","fa-heart","fa-hotel","fa-university","fa-plug","fa-ambulance","fa-bus","fa-car","fa-plane","fa-rocket","fa-ship","fa-subway","fa-truck","fa-jpy","fa-eur","fa-btc","fa-usd","fa-gbp","fa-archive","fa-area-chart","fa-bed","fa-beer","fa-bell","fa-binoculars","fa-birthday-cake","fa-bomb","fa-briefcase","fa-bug","fa-camera","fa-cart-plus","fa-certificate","fa-coffee","fa-cloud","fa-coffee","fa-comment","fa-cube","fa-cutlery","fa-database","fa-diamond","fa-exclamation-circle","fa-eye","fa-flag","fa-flask","fa-futbol-o","fa-gamepad","fa-graduation-cap"];return a[parseInt(e,16)%a.length]}a.exports={getLessPassFingerprint:function(e){var a=[],f=e.substring(0,6);a.push({color:t(f),icon:o(f)});var r=e.substring(6,12);a.push({color:t(r),icon:o(r)});var n=e.substring(12,18);return a.push({color:t(n),icon:o(n)}),a}}},{}]},{},[1])(1)});

+ 4944
- 0
master-password/package-lock.json
Plik diff jest za duży
Wyświetl plik


+ 48
- 0
master-password/package.json Wyświetl plik

@@ -0,0 +1,48 @@
{
"name": "lesspass-master-password",
"version": "0.1.0",
"description": "LessPass node module used to get fingerprint for 256 bytes string",
"keywords": [
"crypto",
"lesspass",
"password"
],
"license": "GPL-3.0",
"author": "Guillaume Vincent <guillaume@oslab.fr>",
"files": [
"dist",
"src"
],
"main": "src/index.js",
"module": "src/index.js",
"jsnext:main": "src/index.js",
"scripts": {
"precommit": "npm test && lint-staged",
"clean": "rm -rf dist && mkdir dist && npm prune",
"build": "npm run clean && browserify --standalone getLessPassFingerprint src/index.js > dist/lesspass-master-password.js && npm run minify",
"minify": "uglifyjs --output dist/lesspass-master-password.min.js --compress --mangle -- dist/lesspass-master-password.js",
"test": "npm run test:unit && npm run test:browser",
"test:unit": "mocha test",
"test:browser": "npm run build && karma start test/karma.conf.js"
},
"dependencies": {},
"devDependencies": {
"browserify": "^16.2.2",
"husky": "^0.14.3",
"karma": "^3.0.0",
"karma-browserify": "^5.3.0",
"karma-chrome-launcher": "^2.0.0",
"karma-firefox-launcher": "^1.1.0",
"karma-mocha": "^1.3.0",
"lint-staged": "^7.3.0",
"mocha": "^5.2.0",
"prettier": "^1.14.3",
"uglify-js": "^3.4.9"
},
"lint-staged": {
"{src,test}/**/*.js": [
"prettier --write",
"git add"
]
}
}

+ 100
- 0
master-password/src/index.js Wyświetl plik

@@ -0,0 +1,100 @@
function getColor(color) {
var colors = [
"#000000",
"#074750",
"#009191",
"#FF6CB6",
"#FFB5DA",
"#490092",
"#006CDB",
"#B66DFF",
"#6DB5FE",
"#B5DAFE",
"#920000",
"#924900",
"#DB6D00",
"#24FE23"
];
var index = parseInt(color, 16) % colors.length;
return colors[index];
}

function getIcon(hash) {
var icons = [
"fa-hashtag",
"fa-heart",
"fa-hotel",
"fa-university",
"fa-plug",
"fa-ambulance",
"fa-bus",
"fa-car",
"fa-plane",
"fa-rocket",
"fa-ship",
"fa-subway",
"fa-truck",
"fa-jpy",
"fa-eur",
"fa-btc",
"fa-usd",
"fa-gbp",
"fa-archive",
"fa-area-chart",
"fa-bed",
"fa-beer",
"fa-bell",
"fa-binoculars",
"fa-birthday-cake",
"fa-bomb",
"fa-briefcase",
"fa-bug",
"fa-camera",
"fa-cart-plus",
"fa-certificate",
"fa-coffee",
"fa-cloud",
"fa-coffee",
"fa-comment",
"fa-cube",
"fa-cutlery",
"fa-database",
"fa-diamond",
"fa-exclamation-circle",
"fa-eye",
"fa-flag",
"fa-flask",
"fa-futbol-o",
"fa-gamepad",
"fa-graduation-cap"
];
var index = parseInt(hash, 16) % icons.length;
return icons[index];
}

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

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

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

return fingerprint;
}

module.exports = {
getLessPassFingerprint: getFingerprint
};

+ 33
- 0
master-password/test/api.tests.js Wyświetl plik

@@ -0,0 +1,33 @@
var assert = require("assert");
var masterPassword = require("../src/index");

describe("api", function() {
it("should return array of 3 elements", function() {
assert.equal(
3,
masterPassword.getLessPassFingerprint(
"e56a207acd1e6714735487c199c6f095844b7cc8e5971d86c003a7b6f36ef51e"
).length
);
});
it("should always return the same array based on the string passed as parameter", function() {
var expected_fingerprint = [
{
color: "#FFB5DA",
icon: "fa-flask"
},
{
color: "#009191",
icon: "fa-archive"
},
{
color: "#B5DAFE",
icon: "fa-beer"
}
];
var fingerprint = masterPassword.getLessPassFingerprint(
"e56a207acd1e6714735487c199c6f095844b7cc8e5971d86c003a7b6f36ef51e"
);
assert.deepEqual(expected_fingerprint, fingerprint);
});
});

+ 19
- 0
master-password/test/karma.conf.js Wyświetl plik

@@ -0,0 +1,19 @@
module.exports = function(config) {
config.set({
basePath: "..",
frameworks: ["browserify", "mocha"],
files: ["dist/lesspass-master-password.min.js", "test/**/*.js"],
exclude: [],
preprocessors: {
"test/**/*.js": ["browserify"]
},
reporters: ["progress"],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: false,
browsers: ["Firefox", "Chrome"],
singleRun: true,
concurrency: Infinity
});
};

+ 3
- 0
todo.md Wyświetl plik

@@ -0,0 +1,3 @@
* remove all report issues in all sub README.md
* remove "repository": "lesspass/..." in all package.json
* update all node modules `npx npm-check -u`

Ładowanie…
Anuluj
Zapisz