Bug 593820 - Move generatePassphrase and friends from UI code to util.js [r=mconnor]

This commit is contained in:
Philipp von Weitershausen 2010-09-17 17:48:06 +02:00
Родитель 9454591570
Коммит cef1e48b12
2 изменённых файлов: 56 добавлений и 0 удалений

Просмотреть файл

@ -830,6 +830,37 @@ let Utils = {
}
},
/**
* Generate 20 random characters a-z
*/
generatePassphrase: function() {
let rng = Cc["@mozilla.org/security/random-generator;1"]
.createInstance(Ci.nsIRandomGenerator);
let bytes = rng.generateRandomBytes(20);
return [String.fromCharCode(97 + Math.floor(byte * 26 / 256))
for each (byte in bytes)].join("");
},
/**
* Hyphenate a 20 character passphrase in 4 groups of 5.
*/
hyphenatePassphrase: function(passphrase) {
return passphrase.slice(0, 5) + '-'
+ passphrase.slice(5, 10) + '-'
+ passphrase.slice(10, 15) + '-'
+ passphrase.slice(15, 20);
},
/**
* Remove hyphens as inserted by hyphenatePassphrase().
*/
normalizePassphrase: function(pp) {
if (pp.length == 23 && pp[5] == '-' && pp[11] == '-' && pp[17] == '-')
return pp.slice(0, 5) + pp.slice(6, 11)
+ pp.slice(12, 17) + pp.slice(18, 23);
return pp;
},
/**
* Create an array like the first but without elements of the second
*/

Просмотреть файл

@ -0,0 +1,25 @@
Cu.import("resource://services-sync/util.js");
function run_test() {
_("Generated passphrase has length 20.");
let pp = Utils.generatePassphrase();
do_check_eq(pp.length, 20);
_("Passphrase only contains a-z.");
let bytes = [chr.charCodeAt() for each (chr in pp)];
do_check_true(Math.min.apply(null, bytes) >= 97);
do_check_true(Math.max.apply(null, bytes) <= 122);
_("Hyphenated passphrase has 3 hyphens.");
let hyphenated = Utils.hyphenatePassphrase(pp);
do_check_eq(hyphenated.length, 23);
do_check_eq(hyphenated[5], '-');
do_check_eq(hyphenated[11], '-');
do_check_eq(hyphenated[17], '-');
do_check_eq(hyphenated.slice(0, 5) + hyphenated.slice(6, 11)
+ hyphenated.slice(12, 17) + hyphenated.slice(18, 23), pp);
_("Normalize passphrase recognizes hyphens.");
do_check_eq(Utils.normalizePassphrase(hyphenated), pp);
do_check_eq(pp, pp);
}