| 224 | // by importing a password. setUpBaseKeys returns a promise that yields the |
| 225 | // necessary base keys. |
| 226 | function setUpBaseKeys(passwords) { |
| 227 | var promises = []; |
| 228 | |
| 229 | var baseKeys = {}; |
| 230 | var noBits = {}; |
| 231 | var noKey = {}; |
| 232 | var wrongKey = null; |
| 233 | |
| 234 | Object.keys(passwords).forEach(function(passwordSize) { |
| 235 | var promise = subtle.importKey("raw", passwords[passwordSize], {name: "PBKDF2"}, false, ["deriveKey", "deriveBits"]) |
| 236 | .then(function(baseKey) { |
| 237 | baseKeys[passwordSize] = baseKey; |
| 238 | }, function(err) { |
| 239 | baseKeys[passwordSize] = null; |
| 240 | }); |
| 241 | promises.push(promise); |
| 242 | |
| 243 | promise = subtle.importKey("raw", passwords[passwordSize], {name: "PBKDF2"}, false, ["deriveBits"]) |
| 244 | .then(function(baseKey) { |
| 245 | noKey[passwordSize] = baseKey; |
| 246 | }, function(err) { |
| 247 | noKey[passwordSize] = null; |
| 248 | }); |
| 249 | promises.push(promise); |
| 250 | |
| 251 | promise = subtle.importKey("raw", passwords[passwordSize], {name: "PBKDF2"}, false, ["deriveKey"]) |
| 252 | .then(function(baseKey) { |
| 253 | noBits[passwordSize] = baseKey; |
| 254 | }, function(err) { |
| 255 | noBits[passwordSize] = null; |
| 256 | }); |
| 257 | promises.push(promise); |
| 258 | }); |
| 259 | |
| 260 | var promise = subtle.generateKey({name: "ECDH", namedCurve: "P-256"}, false, ["deriveKey", "deriveBits"]) |
| 261 | .then(function(baseKey) { |
| 262 | wrongKey = baseKey.privateKey; |
| 263 | }, function(err) { |
| 264 | wrongKey = null; |
| 265 | }); |
| 266 | promises.push(promise); |
| 267 | |
| 268 | |
| 269 | return Promise.all(promises).then(function() { |
| 270 | return {baseKeys: baseKeys, noBits: noBits, noKey: noKey, wrongKey: wrongKey}; |
| 271 | }); |
| 272 | } |
| 273 | |
| 274 | } |