corrade-nucleus-nucleons – Blame information for rev 4

Subversion Repositories:
Rev:
Rev Author Line No. Line
2 office 1 /*
2 CryptoJS v3.1.2
3 code.google.com/p/crypto-js
4 (c) 2009-2013 by Jeff Mott. All rights reserved.
5 code.google.com/p/crypto-js/wiki/License
6 */
7 (function () {
8 // Shortcuts
9 var C = CryptoJS;
10 var C_lib = C.lib;
11 var Base = C_lib.Base;
12 var WordArray = C_lib.WordArray;
13 var C_algo = C.algo;
14 var SHA1 = C_algo.SHA1;
15 var HMAC = C_algo.HMAC;
16  
17 /**
18 * Password-Based Key Derivation Function 2 algorithm.
19 */
20 var PBKDF2 = C_algo.PBKDF2 = Base.extend({
21 /**
22 * Configuration options.
23 *
24 * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)
25 * @property {Hasher} hasher The hasher to use. Default: SHA1
26 * @property {number} iterations The number of iterations to perform. Default: 1
27 */
28 cfg: Base.extend({
29 keySize: 128/32,
30 hasher: SHA1,
31 iterations: 1
32 }),
33  
34 /**
35 * Initializes a newly created key derivation function.
36 *
37 * @param {Object} cfg (Optional) The configuration options to use for the derivation.
38 *
39 * @example
40 *
41 * var kdf = CryptoJS.algo.PBKDF2.create();
42 * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });
43 * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });
44 */
45 init: function (cfg) {
46 this.cfg = this.cfg.extend(cfg);
47 },
48  
49 /**
50 * Computes the Password-Based Key Derivation Function 2.
51 *
52 * @param {WordArray|string} password The password.
53 * @param {WordArray|string} salt A salt.
54 *
55 * @return {WordArray} The derived key.
56 *
57 * @example
58 *
59 * var key = kdf.compute(password, salt);
60 */
61 compute: function (password, salt) {
62 // Shortcut
63 var cfg = this.cfg;
64  
65 // Init HMAC
66 var hmac = HMAC.create(cfg.hasher, password);
67  
68 // Initial values
69 var derivedKey = WordArray.create();
70 var blockIndex = WordArray.create([0x00000001]);
71  
72 // Shortcuts
73 var derivedKeyWords = derivedKey.words;
74 var blockIndexWords = blockIndex.words;
75 var keySize = cfg.keySize;
76 var iterations = cfg.iterations;
77  
78 // Generate key
79 while (derivedKeyWords.length < keySize) {
80 < keySize) { var block = hmac.update(salt).finalize(blockIndex);
81 < keySize) { hmac.reset();
82  
83 < keySize) { // Shortcuts
84 < keySize) { var blockWords = block.words;
85 < keySize) { var blockWordsLength = blockWords.length;
86  
87 < keySize) { // Iterations
88 < keySize) { var intermediate = block;
89 < keySize) { for (var i = 1; i < iterations; i++) {
90 < keySize) {< iterations; i++) { intermediate = hmac.finalize(intermediate);
91 < keySize) {< iterations; i++) { hmac.reset();
92  
93 < keySize) {< iterations; i++) { // Shortcut
94 < keySize) {< iterations; i++) { var intermediateWords = intermediate.words;
95  
96 < keySize) {< iterations; i++) { // XOR intermediate with block
97 < keySize) {< iterations; i++) { for (var j = 0; j < blockWordsLength; j++) {
98 < keySize) {< iterations; i++) {< blockWordsLength; j++) { blockWords[j] ^= intermediateWords[j];
99 < keySize) {< iterations; i++) {< blockWordsLength; j++) { }
100 < keySize) {< iterations; i++) {< blockWordsLength; j++) { }
101  
102 < keySize) {< iterations; i++) {< blockWordsLength; j++) { derivedKey.concat(block);
103 < keySize) {< iterations; i++) {< blockWordsLength; j++) { blockIndexWords[0]++;
104 < keySize) {< iterations; i++) {< blockWordsLength; j++) { }
105 < keySize) {< iterations; i++) {< blockWordsLength; j++) { derivedKey.sigBytes = keySize * 4;
106  
107 < keySize) {< iterations; i++) {< blockWordsLength; j++) { return derivedKey;
108 < keySize) {< iterations; i++) {< blockWordsLength; j++) { }
109 < keySize) {< iterations; i++) {< blockWordsLength; j++) { });
110  
111 < keySize) {< iterations; i++) {< blockWordsLength; j++) { /**
112 < keySize) {< iterations; i++) {< blockWordsLength; j++) { * Computes the Password-Based Key Derivation Function 2.
113 < keySize) {< iterations; i++) {< blockWordsLength; j++) { *
114 < keySize) {< iterations; i++) {< blockWordsLength; j++) { * @param {WordArray|string} password The password.
115 < keySize) {< iterations; i++) {< blockWordsLength; j++) { * @param {WordArray|string} salt A salt.
116 < keySize) {< iterations; i++) {< blockWordsLength; j++) { * @param {Object} cfg (Optional) The configuration options to use for this computation.
117 < keySize) {< iterations; i++) {< blockWordsLength; j++) { *
118 < keySize) {< iterations; i++) {< blockWordsLength; j++) { * @return {WordArray} The derived key.
119 < keySize) {< iterations; i++) {< blockWordsLength; j++) { *
120 < keySize) {< iterations; i++) {< blockWordsLength; j++) { * @static
121 < keySize) {< iterations; i++) {< blockWordsLength; j++) { *
122 < keySize) {< iterations; i++) {< blockWordsLength; j++) { * @example
123 < keySize) {< iterations; i++) {< blockWordsLength; j++) { *
124 < keySize) {< iterations; i++) {< blockWordsLength; j++) { * var key = CryptoJS.PBKDF2(password, salt);
125 < keySize) {< iterations; i++) {< blockWordsLength; j++) { * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });
126 < keySize) {< iterations; i++) {< blockWordsLength; j++) { * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });
127 < keySize) {< iterations; i++) {< blockWordsLength; j++) { */
128 < keySize) {< iterations; i++) {< blockWordsLength; j++) { C.PBKDF2 = function (password, salt, cfg) {
129 < keySize) {< iterations; i++) {< blockWordsLength; j++) { return PBKDF2.create(cfg).compute(password, salt);
130 < keySize) {< iterations; i++) {< blockWordsLength; j++) { };
131 < keySize) {< iterations; i++) {< blockWordsLength; j++) {}());