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