(key, message)
| 392 | * @return {Promise<Object,Error>} |
| 393 | */ |
| 394 | export async function decryptSyncMessage(key, message) { |
| 395 | const msg = await pgpDecrypt({message, decryptionKeys: key, verificationKeys: key}); |
| 396 | // check signature |
| 397 | const [sig] = msg.signatures; |
| 398 | try { |
| 399 | await sig.verified; |
| 400 | await key.getSigningKey(sig.keyID); |
| 401 | } catch (e) { |
| 402 | throw new Error('Signature of synced keyring is invalid'); |
| 403 | } |
| 404 | const syncData = JSON.parse(msg.data); |
| 405 | const publicKeys = []; |
| 406 | const changeLog = {}; |
| 407 | let fingerprint; |
| 408 | for (fingerprint in syncData.insertedKeys) { |
| 409 | publicKeys.push({ |
| 410 | type: 'public', |
| 411 | armored: syncData.insertedKeys[fingerprint].armored |
| 412 | }); |
| 413 | changeLog[fingerprint] = { |
| 414 | type: keyringSync.INSERT, |
| 415 | time: syncData.insertedKeys[fingerprint].time |
| 416 | }; |
| 417 | } |
| 418 | for (fingerprint in syncData.deletedKeys) { |
| 419 | changeLog[fingerprint] = { |
| 420 | type: keyringSync.DELETE, |
| 421 | time: syncData.deletedKeys[fingerprint].time |
| 422 | }; |
| 423 | } |
| 424 | return { |
| 425 | changeLog, |
| 426 | keys: publicKeys |
| 427 | }; |
| 428 | } |
| 429 | |
| 430 | /** |
| 431 | * @param {Key} key - used to sign and encrypt the package |
no test coverage detected