From 453403b25bd5fb41b8fb1c3ae0db1d7ab1fa2a59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Tue, 15 Oct 2013 19:29:34 +0200 Subject: [PATCH] Use pkdbf2(hmac-256, 1000) for mkey derivation instead of simple sha256 --- firefox_addon/lib/hmac.js | 42 +++++++++++++++++++++++++ firefox_addon/lib/main.js | 11 +++---- firefox_addon/lib/pkdbf2.js | 63 +++++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+), 6 deletions(-) create mode 100644 firefox_addon/lib/hmac.js create mode 100644 firefox_addon/lib/pkdbf2.js diff --git a/firefox_addon/lib/hmac.js b/firefox_addon/lib/hmac.js new file mode 100644 index 0000000..ac467ee --- /dev/null +++ b/firefox_addon/lib/hmac.js @@ -0,0 +1,42 @@ +/* + Copyright (C) 2013 Grégory Soutadé + + This file is part of gPass. + + gPass is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + gPass is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with gPass. If not, see . +*/ + +var sha256 = require("jssha256").sha256; + +exports.hmac = { + hmac : function(key, message) { + var ipad = ""; + var opad = ""; + + for(i=0; i. +*/ + +var hmac256 = require("hmac").hmac; + +// http://stackoverflow.com/questions/3745666/how-to-convert-from-hex-to-ascii-in-javascript +function hex2a(hex) { + var str = ''; + for (var i = 0; i < hex.length; i += 2) + str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); + return str; +} + +exports.pkdbf2 = { + pkdbf2 : function(password, salt, iterations, outlen) { + var result = ""; + var temp = ""; + var temp2 = ""; + var temp_res = ""; + var temp_res2 = ""; + + for (i=1; result.length < outlen; i++) + { + temp = hex2a(hmac256.hmac(salt + + String.fromCharCode((i & 0xff000000) >> 24) + + String.fromCharCode((i & 0x00ff0000) >> 16) + + String.fromCharCode((i & 0x0000ff00) >> 8) + + String.fromCharCode((i & 0x000000ff) >> 0), + password)); + temp_res = temp; + + for(a=1; a