mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Also PGP sign with private keys that have no passphrase #429
This commit is contained in:
parent
7a85a75ca9
commit
977868c1fa
1 changed files with 20 additions and 26 deletions
|
|
@ -18,9 +18,22 @@ const
|
|||
key.emails.includes(query) || query == key.id || query == key.fingerprint
|
||||
),
|
||||
|
||||
askPassphrase = async (privateKey, btnTxt = 'LABEL_SIGN') =>
|
||||
askPassphrase = async (privateKey, btnTxt) =>
|
||||
await AskPopupView.password('OpenPGP.js key<br>' + privateKey.id + ' ' + privateKey.emails[0], 'OPENPGP/'+btnTxt),
|
||||
|
||||
decryptKey = async (privateKey, btnTxt = 'LABEL_SIGN') => {
|
||||
if (privateKey.key.isDecrypted()) {
|
||||
return privateKey.key;
|
||||
}
|
||||
const passphrase = await askPassphrase(privateKey, btnTxt);
|
||||
if (null !== passphrase) {
|
||||
return await openpgp.decryptKey({
|
||||
privateKey: privateKey.key,
|
||||
passphrase
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* OpenPGP.js v5 removed the localStorage (keyring)
|
||||
* This should be compatible with the old OpenPGP.js v2
|
||||
|
|
@ -178,18 +191,7 @@ export const OpenPGPUserStore = new class {
|
|||
}
|
||||
}
|
||||
if (privateKey) try {
|
||||
let decryptedKey;
|
||||
if (privateKey.key.isDecrypted()) {
|
||||
decryptedKey = privateKey;
|
||||
} else {
|
||||
const passphrase = await askPassphrase(privateKey, 'BUTTON_DECRYPT');
|
||||
if (null !== passphrase) {
|
||||
decryptedKey = await openpgp.decryptKey({
|
||||
privateKey: privateKey.key,
|
||||
passphrase
|
||||
});
|
||||
}
|
||||
}
|
||||
const decryptedKey = await decryptKey(privateKey, 'BUTTON_DECRYPT');
|
||||
if (decryptedKey) {
|
||||
const publicKey = findOpenPGPKey(this.publicKeys, sender/*, sign*/);
|
||||
return await openpgp.decrypt({
|
||||
|
|
@ -250,18 +252,14 @@ export const OpenPGPUserStore = new class {
|
|||
* https://docs.openpgpjs.org/global.html#sign
|
||||
*/
|
||||
async sign(text, privateKey, detached) {
|
||||
const passphrase = await askPassphrase(privateKey);
|
||||
if (null !== passphrase) {
|
||||
privateKey = await openpgp.decryptKey({
|
||||
privateKey: privateKey.key,
|
||||
passphrase
|
||||
});
|
||||
const signingKey = await decryptKey(privateKey);
|
||||
if (signingKey) {
|
||||
const message = detached
|
||||
? await openpgp.createMessage({ text: text })
|
||||
: await openpgp.createCleartextMessage({ text: text });
|
||||
return await openpgp.sign({
|
||||
message: message,
|
||||
signingKeys: privateKey,
|
||||
signingKeys: signingKey,
|
||||
detached: !!detached
|
||||
});
|
||||
}
|
||||
|
|
@ -276,14 +274,10 @@ export const OpenPGPUserStore = new class {
|
|||
recipients = recipients.map(email => this.publicKeys().find(key => key.emails.includes(email))).filter(key => key);
|
||||
if (count === recipients.length) {
|
||||
if (signPrivateKey) {
|
||||
const passphrase = await askPassphrase(signPrivateKey);
|
||||
if (null === passphrase) {
|
||||
signPrivateKey = await decryptKey(signPrivateKey);
|
||||
if (!signPrivateKey) {
|
||||
return;
|
||||
}
|
||||
signPrivateKey = await openpgp.decryptKey({
|
||||
privateKey: signPrivateKey.key,
|
||||
passphrase
|
||||
});
|
||||
}
|
||||
return await openpgp.encrypt({
|
||||
message: await openpgp.createMessage({ text: text }),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue