1 /* Copyright (c) 2012 Robert Sesek <http://robert.sesek.com>
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
4 * of this software and associated documentation files (the "Software"), to
5 * deal in the Software without restriction, including without limitation the
6 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7 * sell copies of the Software, and to permit persons to whom the Software is
8 * furnished to do so, subject to the following conditions:
10 * The above copyright notice and this permission notice shall be included in
11 * all copies or substantial portions of the Software.
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
19 * DEALINGS IN THE SOFTWARE.
23 * SkeletonKey is view controller for generating secure passwords.
25 * @param {HTMLDocument} doc The document on which to operate.
27 var SkeletonKey
= SkeletonKey
|| function(doc
) {
28 this._master
= doc
.getElementById('master');
29 this._sitekey
= doc
.getElementById('sitekey');
30 this._username
= doc
.getElementById('username');
31 this._password
= doc
.getElementById('password');
32 this._generateButton
= doc
.getElementById('generate');
37 * The number of iterations to perform in PBKDF2.
40 SkeletonKey
.prototype.ITERATIONS
= 1000;
42 * The size of the key, in bytes.
45 SkeletonKey
.prototype.KEYSIZE
= 256/32;
48 * Initializes event handlers for the page.
51 SkeletonKey
.prototype._init
= function() {
52 this._generateButton
.onclick
= this._onGenerate
.bind(this);
56 * Event handler for generating a new password.
60 SkeletonKey
.prototype._onGenerate
= function(e
) {
61 var salt
= this._username
.value
+ '@' + this._sitekey
.value
;
62 // |key| is a WordArray of 32-bit words.
63 var key
= CryptoJS
.PBKDF2(this._master
.value
, salt
,
64 {keySize
: this.KEYSIZE
, iterations
: this.ITERATIONS
});