diff --git a/lib/message/decryptLegacy.js b/lib/message/decryptLegacy.js deleted file mode 100644 index 3269151d..00000000 --- a/lib/message/decryptLegacy.js +++ /dev/null @@ -1,96 +0,0 @@ -import { VERIFICATION_STATUS } from '../constants'; -import { arrayToBinaryString, binaryStringToArray, decodeUtf8Base64 } from '../utils'; -import decryptMessage from './decrypt'; -import { readMessage } from '../openpgp'; - -// Deprecated, backwards compatibility -const protonmailCryptoHeaderMessage = '---BEGIN ENCRYPTED MESSAGE---'; -const protonmailCryptoTailMessage = '---END ENCRYPTED MESSAGE---'; -const protonmailCryptoHeaderRandomKey = '---BEGIN ENCRYPTED RANDOM KEY---'; -const protonmailCryptoTailRandomKey = '---END ENCRYPTED RANDOM KEY---'; - -/** - * Extract armored encrypted message from email - * @param {String|Object} EmailPM - * @returns {String} armored message, or empty string if not found - */ -function getEncMessageFromEmailPM(EmailPM) { - if (EmailPM !== undefined && typeof EmailPM.search === 'function') { - const begin = EmailPM.search(protonmailCryptoHeaderMessage) + protonmailCryptoHeaderMessage.length; - const end = EmailPM.search(protonmailCryptoTailMessage); - if (begin === -1 || end === -1) return ''; - return EmailPM.substring(begin, end); - } - return ''; -} - -/** - * Extract (legacy, custom) armored encrypted random key from email - * @param {String|Object} EmailPM - * @returns {String} armored random key, or empty string if not found - */ -function getEncRandomKeyFromEmailPM(EmailPM) { - if (EmailPM !== undefined && typeof EmailPM.search === 'function') { - const begin = EmailPM.search(protonmailCryptoHeaderRandomKey) + protonmailCryptoHeaderRandomKey.length; - const end = EmailPM.search(protonmailCryptoTailRandomKey); - if (begin === -1 || end === -1) return ''; - return EmailPM.substring(begin, end); - } - return ''; -} - -// Backwards-compatible decrypt message function -// Input message must be a string, to properly handle legacy messages (and avoid misusing this function) -export default async function decryptMessageLegacy({ messageDate, armoredMessage, decryptionKeys, ...options }) { - if (messageDate === undefined || !(messageDate instanceof Date)) { - throw new Error('Missing message time'); - } - - let oldEncMessage = getEncMessageFromEmailPM(armoredMessage); - const oldEncRandomKey = getEncRandomKeyFromEmailPM(armoredMessage); - - // Standard OpenPGP message - if (oldEncMessage === '' || oldEncRandomKey === '') { - // Convert message string to object - return decryptMessage({ - message: await readMessage({ armoredMessage }), - decryptionKeys, - ...options - }); - } - - // Legacy message encryption format - const legacyOptions = { - decryptionKeys, - message: await readMessage({ armoredMessage: oldEncRandomKey }), - config: options.config - }; - - const { data, verificationErrors } = await decryptMessage(legacyOptions); - const randomKey = binaryStringToArray(decodeUtf8Base64(data)); - - if (randomKey.length === 0) { - throw new Error('Random key is empty'); - } - - oldEncMessage = binaryStringToArray(decodeUtf8Base64(oldEncMessage)); - - const params = { verified: VERIFICATION_STATUS.NOT_SIGNED, signatures: [], verificationErrors }; - const { AES256: AES_CFB } = await import('../crypto/cfb'); - - // OpenPGP CFB mode with resync (https://tools.ietf.org/html/rfc4880#section-13.9) - const result = await AES_CFB.decrypt( - oldEncMessage.subarray(AES_CFB.blockSize + 2), - randomKey, - oldEncMessage.subarray(2, AES_CFB.blockSize + 2) - ); - - // cutoff time for enabling multilanguage support - if (+messageDate > 1399086120000) { - params.data = decodeUtf8Base64(arrayToBinaryString(result)); - } else { - params.data = arrayToBinaryString(result); - } - - return params; -} diff --git a/lib/pmcrypto.d.ts b/lib/pmcrypto.d.ts index 92d67c7f..c2fdb496 100644 --- a/lib/pmcrypto.d.ts +++ b/lib/pmcrypto.d.ts @@ -53,16 +53,6 @@ export { export { generateForwardingMaterial, doesKeySupportForwarding, isForwardingKey } from './key/forwarding'; -export interface DecryptLegacyOptions extends Omit { - armoredMessage: string; // no streaming support for legacy messages - messageDate: Date; -} - -export interface DecryptMimeOptions extends DecryptLegacyOptions { - headerFilename?: string; - sender?: string; -} - export interface EncryptSessionKeyOptionsPmcrypto extends EncryptSessionKeyOptions {} export function encryptSessionKey( options: EncryptSessionKeyOptionsPmcrypto & { format?: FormatType } @@ -105,25 +95,6 @@ export function decryptMessage, FormatType ex never >; -export function decryptMessageLegacy( - options: DecryptLegacyOptions & { format?: F } -): Promise< - // output type cannot be statically determined: - // string for legacy messages, but either string or Uint8Array output for non-legacy ones (depending on options.format) - F extends 'utf8' ? DecryptResultPmcrypto : - F extends 'binary' ? DecryptResultPmcrypto : - never ->; - -export function decryptMIMEMessage(options: DecryptMimeOptions): Promise<{ - getBody: () => Promise<{ body: string; mimetype: string } | undefined>; - getAttachments: () => Promise; - getEncryptedSubject: () => Promise; - verify: () => Promise; - errors: () => Promise; - signatures: OpenPGPSignature[]; -}>; - export type MaybeStream = T | WebStream; export type Data = string | Uint8Array; export { WebStream }; diff --git a/lib/pmcrypto.js b/lib/pmcrypto.js index 882d7f66..de7b72e6 100644 --- a/lib/pmcrypto.js +++ b/lib/pmcrypto.js @@ -40,7 +40,6 @@ export { generateForwardingMaterial, doesKeySupportForwarding, isForwardingKey } export { decryptSessionKey } from './key/decrypt'; export { encryptKey, encryptSessionKey } from './key/encrypt'; export { default as decryptMessage } from './message/decrypt'; -export { default as decryptMessageLegacy } from './message/decryptLegacy'; export { default as encryptMessage } from './message/encrypt'; export { default as signMessage } from './message/sign'; export { verifyMessage, verifyCleartextMessage } from './message/verify'; diff --git a/test/message/decryptMessageLegacy.data.ts b/test/message/decryptMessageLegacy.data.ts deleted file mode 100644 index b6c2be4f..00000000 --- a/test/message/decryptMessageLegacy.data.ts +++ /dev/null @@ -1,148 +0,0 @@ -export const testPrivateKeyLegacy = `-----BEGIN PGP PRIVATE KEY BLOCK----- -Version: OpenPGP.js v0.9.0 -Comment: http://openpgpjs.org - -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 -PPekG4ttm6z3/BqqVplanIRSXlsqyp6J8A== -=Pyb1 ------END PGP PRIVATE KEY BLOCK----- -`; - -export const testMessageEncryptedLegacy = `---BEGIN ENCRYPTED MESSAGE---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---END ENCRYPTED MESSAGE---||---BEGIN ENCRYPTED RANDOM KEY--------BEGIN PGP MESSAGE----- -Version: OpenPGP.js v0.9.0 -Comment: http://openpgpjs.org - -wcBMA2tjJVxNCRhtAQf/YzkQoUqaqa3NJ/c1apIF/dsl7yJ4GdVrC3/w7lxE -2CO5ioQD4s6QMWP2Y9dOdVl2INwz8eXOds9NS+1nMs4SoMbrpJnAjx8Cthti -1Z/8eWMU023LYahds8BYM0T435K/2tTB5GTA4uTl2y8Xzz2PbptQ4PrUDaII -+egeQQyPA0yuoRDwpaeTiaBYOSa06YYuK5Agr0buQAxRIMCxI2o+fucjoabv -FsQHKGu20U5GlJroSIyIVVkaH3evhNti/AnYX1HuokcGEQNsF5vo4SjWcH23 -2P86EIV+w5lUWC1FN9vZCyvbvyuqLHQMtqKVn4GBOkIc3bYQ0jru3a0FG4Cx -bNJ0ASps2+p3Vxe0d+so2iFV92ByQ+0skyCUwCNUlwOV5V5f2fy1ImXk4mXI -cO/bcbqRxx3pG9gkPIh43FoQktTT+tsJ5vS53qfaLGdhCYfkrWjsKu+2P9Xg -+Cr8clh6NTblhfkoAS1gzjA3XgsgEFrtP+OGqwg= -=c5WU ------END PGP MESSAGE----- ----END ENCRYPTED RANDOM KEY--- -`; - -export const testMessageEncryptedStandard = `-----BEGIN PGP MESSAGE----- -Version: OpenPGP.js v4.10.10 -Comment: https://openpgpjs.org - -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 -oHI= -=Y+OF ------END PGP MESSAGE-----`; - -export const testMessageResult = - '
flkasjfkjasdklfjasd
fasd
jfasjdfjasd
fj
asdfj
sadjf
sadjf
asjdf
jasd
fj
asdjf
asdjfsad
fasdlkfjasdjfkljsadfljsdfjsdljflkdsjfkljsdlkfjsdlk
jasfd
jsd
jf
sdjfjsdf

djfskjsladf
asd
fja
sdjfajsf
jas
fas
fj
afj
ajf
af
asdfasdfasd
Sent from ProtonMail, encrypted email based in Switzerland.
dshfljsadfasdf
as
df
asd
fasd
f
asd
fasdflasdklfjsadlkjf
asd
fasdlkfjasdlkfjklasdjflkasjdflaslkfasdfjlasjflkasflksdjflkjasdf
asdflkasdjflajsfljaslkflasf
asdfkas
dfjas
djf
asjf
asj
faj
f
afj
sdjaf
jas
sdfj
ajf
aj
ajsdafafdaaf
a
f
lasl;ga
sags
ad
gags
g
ga
a
gg
a
ag
ag
agga.g.ga,ag.ag./ga

dsga
sg

gasga\\g\\g\\g\\g\\g\\n\\y\\t\\r\\\\r\\r\\\\n\\n\\n\\


sd
asdf
asdf
dsa
fasd
f
'; diff --git a/test/message/decryptMessageLegacy.spec.ts b/test/message/decryptMessageLegacy.spec.ts deleted file mode 100644 index 68a6dbad..00000000 --- a/test/message/decryptMessageLegacy.spec.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { expect } from 'chai'; -import { decryptMessageLegacy, decryptKey, readPrivateKey } from '../../lib'; -import { testMessageEncryptedLegacy, testPrivateKeyLegacy, testMessageResult, testMessageEncryptedStandard } from './decryptMessageLegacy.data'; - -describe('decryptMessageLegacy', () => { - it('it can decrypt a legacy message', async () => { - const privateKey = await readPrivateKey({ armoredKey: testPrivateKeyLegacy }); - const decryptedPrivateKey = await decryptKey({ privateKey, passphrase: '123' }); - const { data } = await decryptMessageLegacy({ - armoredMessage: testMessageEncryptedLegacy, - decryptionKeys: [decryptedPrivateKey], - messageDate: new Date('2015-01-01') - }); - expect(data).to.equal(testMessageResult); - }); - - it('it can decrypt a non-legacy armored message', async () => { - const privateKey = await readPrivateKey({ armoredKey: testPrivateKeyLegacy }); - const decryptedPrivateKey = await decryptKey({ privateKey, passphrase: '123' }); - const { data } = await decryptMessageLegacy({ - armoredMessage: testMessageEncryptedStandard, - decryptionKeys: [decryptedPrivateKey], - messageDate: new Date('2015-01-01') - }); - - expect(data).to.equal(testMessageResult); - }); -}); diff --git a/test/message/encryptMessage.data.ts b/test/message/encryptMessage.data.ts new file mode 100644 index 00000000..64ddb92d --- /dev/null +++ b/test/message/encryptMessage.data.ts @@ -0,0 +1,64 @@ +export const testPrivateKeyLegacy = `-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: OpenPGP.js v0.9.0 +Comment: http://openpgpjs.org + +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 +PPekG4ttm6z3/BqqVplanIRSXlsqyp6J8A== +=Pyb1 +-----END PGP PRIVATE KEY BLOCK----- +`; diff --git a/test/message/encryptMessage.spec.ts b/test/message/encryptMessage.spec.ts index 9a6a1dd0..9dd5ece0 100644 --- a/test/message/encryptMessage.spec.ts +++ b/test/message/encryptMessage.spec.ts @@ -6,7 +6,7 @@ import { config as globalConfig, CompressedDataPacket, enums, SymEncryptedSessio import { decryptKey, readPrivateKey, verifyMessage, encryptMessage, decryptMessage, generateSessionKey, readSignature, readMessage, encryptSessionKey, decryptSessionKey } from '../../lib'; import { hexStringToArray, arrayToBinaryString, stringToUtf8Array } from '../../lib/utils'; -import { testPrivateKeyLegacy } from './decryptMessageLegacy.data'; +import { testPrivateKeyLegacy } from './encryptMessage.data'; import { VERIFICATION_STATUS } from '../../lib/constants'; const generateStreamOfData = (): { stream: WebStream, data: string } => ({