Skip to content

Commit 94697fd

Browse files
committed
verify/decryptMessage: rename verified to verificationStatus
To avoid confusing it with a boolean value (leading to e.g. `if (verified)`)
1 parent 45417e2 commit 94697fd

12 files changed

+111
-110
lines changed

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ To decrypt and verify (non-streamed input):
5555
const senderPublicKey = await readKey(...);
5656
const recipientPrivateKey = await decryptKey(...);
5757

58-
const { data: decryptedData, verified } = await decryptMessage({
58+
const { data: decryptedData, verificationStatus } = await decryptMessage({
5959
message: await readMessage({ armoredMessage }), // or `binaryMessage`
6060
encryptedSignature: await readMessage({ armoredMessage: armoredEncryptedSignature })
6161
decryptionKeys: recipientPrivateKey // and/or 'passwords'
@@ -71,14 +71,14 @@ if (!globalThis.TransformStream) {
7171
await import('web-streams-polyfill/es6');
7272
}
7373

74-
const { data: dataStream, verified: verifiedPromise } = await decryptMessage({
74+
const { data: dataStream, verificationStatus: verifiedPromise } = await decryptMessage({
7575
message: await readMessage({ armoredMessage: streamedArmoredMessage }),
7676
... // other options
7777
});
7878

7979
// you need to read `dataStream` before resolving `verifiedPromise`, even if you do not need the decrypted data
8080
const decryptedData = await readToEnd(dataStream);
81-
const verificationStatus = await verified;
81+
const verificationStatus = await verificationStatus;
8282
```
8383
</details>
8484

lib/message/decrypt.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,20 @@ export default async function decryptMessage({
3838
const decryptionResult = await decrypt(sanitizedOptions);
3939
const verificationResult = handleVerificationResult(decryptionResult, signatureContext, options.expectSigned);
4040

41-
let verified = verificationResult.then((result) => result.verified);
41+
let verificationStatus = verificationResult.then((result) => result.verificationStatus);
4242
let verifiedSignatures = verificationResult.then((result) => result.signatures);
4343
let verificationErrors = verificationResult.then((result) => result.errors);
4444

4545
if (!isStream(decryptionResult.data)) {
46-
verified = await verified;
46+
verificationStatus = await verificationStatus;
4747
verifiedSignatures = await verifiedSignatures;
4848
verificationErrors = await verificationErrors;
4949
}
5050

5151
return {
5252
data: decryptionResult.data,
5353
filename: decryptionResult.filename,
54-
verified,
54+
verificationStatus,
5555
signatures: verifiedSignatures,
5656
verificationErrors
5757
};

lib/message/processMIME.ts

+16-16
Original file line numberDiff line numberDiff line change
@@ -31,23 +31,23 @@ const verifySignature = async (
3131
const [contentType] = headers['content-type'] || [''];
3232
const [baseContentType] = contentType.split(';');
3333
if (baseContentType.toLowerCase() !== 'multipart/signed') {
34-
return { subdata: data, verified: 0, signatures: [] };
34+
return { subdata: data, verificationStatus: VERIFICATION_STATUS.NOT_SIGNED, signatures: [] };
3535
}
3636
const [, rawboundary] = /boundary\s*=\s*([^;]*)\s*(;|$)/gi.exec(contentType) || [];
3737
if (!rawboundary) {
38-
return { subdata: data, verified: 0, signatures: [] };
38+
return { subdata: data, verificationStatus: VERIFICATION_STATUS.NOT_SIGNED, signatures: [] };
3939
}
4040
const boundary = rawboundary[0] === '"' ? JSON.parse(rawboundary) || rawboundary : rawboundary;
4141
const [mainPart] = data.split(`\n--${boundary}--\n`);
4242
const parts = mainPart.split(`\n--${boundary}\n`);
4343
if (parts.length < 3) {
44-
return { subdata: data, verified: 0, signatures: [] };
44+
return { subdata: data, verificationStatus: VERIFICATION_STATUS.NOT_SIGNED, signatures: [] };
4545
}
4646
const { attachments: [sigAttachment] = [] } = await parseMail(parts[2].trim());
4747

4848
const { contentType: sigAttachmentContentType = '', content: sigAttachmentContent = new Uint8Array() } = sigAttachment || {};
4949
if (sigAttachmentContentType.toLowerCase() !== 'application/pgp-signature') {
50-
return { subdata: data, verified: 0, signatures: [] };
50+
return { subdata: data, verificationStatus: VERIFICATION_STATUS.NOT_SIGNED, signatures: [] };
5151
}
5252
const sigData = utf8ArrayToString(sigAttachmentContent);
5353

@@ -57,14 +57,14 @@ const verifySignature = async (
5757
} catch {
5858
// sigData will be returned as attachment by `parse`
5959
console.error('Failed to read signature over MIME message');
60-
return { subdata: data, verified: 0, signatures: [] };
60+
return { subdata: data, verificationStatus: VERIFICATION_STATUS.NOT_SIGNED, signatures: [] };
6161
}
6262

6363
const body = parts[1];
6464

6565
const {
6666
data: subdata,
67-
verified,
67+
verificationStatus,
6868
signatures
6969
} = await verifyMessage({
7070
// The body is to be treated as CleartextMessage, see https://github.com/openpgpjs/openpgpjs/pull/1265#issue-830304843
@@ -74,25 +74,25 @@ const verifySignature = async (
7474
signature
7575
});
7676

77-
return { subdata, verified, signatures };
77+
return { subdata, verificationStatus, signatures };
7878
};
7979

8080
/**
8181
* This function parses MIME format into attachments, content, encryptedSubject. The attachment automatically
82-
* inherit the verified status from the message verified status, as they are included in the body. For more
82+
* inherit the verification status from the message verification status, as they are included in the body. For more
8383
* information see: https://tools.ietf.org/html/rfc2045, https://tools.ietf.org/html/rfc2046 and
8484
* https://tools.ietf.org/html/rfc2387.
8585
* @param options
8686
* @param options.headerFilename - The file name a memoryhole header should have
8787
* @param options.sender - the address of the sender of this message
8888
* @param content - mail content to parse
89-
* @param verified
89+
* @param verificationStatus
9090
* @param signatures
9191
*/
9292
const parse = async (
9393
{ headerFilename = 'Encrypted Headers.txt', sender = '' },
9494
mailContent = '',
95-
verified = VERIFICATION_STATUS.NOT_SIGNED,
95+
verificationStatus = VERIFICATION_STATUS.NOT_SIGNED,
9696
signatures: OpenPGPSignature[] = []
9797
): Promise<ProcessMIMEResult> => {
9898
// cf. https://github.com/autocrypt/memoryhole subject can be in the MIME headers
@@ -148,7 +148,7 @@ const parse = async (
148148
return {
149149
body: html,
150150
attachments,
151-
verified,
151+
verificationStatus,
152152
encryptedSubject,
153153
mimeType: 'text/html',
154154
signatures
@@ -158,7 +158,7 @@ const parse = async (
158158
return {
159159
body: text,
160160
attachments,
161-
verified,
161+
verificationStatus,
162162
encryptedSubject,
163163
mimeType: 'text/plain',
164164
signatures
@@ -168,7 +168,7 @@ const parse = async (
168168
return {
169169
body: '',
170170
attachments,
171-
verified,
171+
verificationStatus,
172172
encryptedSubject,
173173
mimeType: undefined,
174174
signatures
@@ -188,7 +188,7 @@ export interface ProcessMIMEOptions {
188188
export interface ProcessMIMEResult {
189189
body: string,
190190
attachments: MIMEAttachment[],
191-
verified: VERIFICATION_STATUS,
191+
verificationStatus: VERIFICATION_STATUS,
192192
encryptedSubject: string,
193193
mimeType?: 'text/html' | 'text/plain',
194194
signatures: OpenPGPSignature[]
@@ -203,7 +203,7 @@ export interface ProcessMIMEResult {
203203
* @param options.sender - the address of the sender of this message
204204
*/
205205
export default async function processMIME({ data, ...options }: ProcessMIMEOptions): Promise<ProcessMIMEResult> {
206-
const { subdata, verified, signatures } = await verifySignature(options, data);
206+
const { subdata, verificationStatus, signatures } = await verifySignature(options, data);
207207

208-
return parse(options, subdata, verified, signatures);
208+
return parse(options, subdata, verificationStatus, signatures);
209209
}

lib/message/verify.d.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import type {
88
} from '../openpgp';
99
import type { VERIFICATION_STATUS } from '../constants';
1010
import type { ContextVerificationOptions } from './context';
11+
import type { MaybeWebStream } from '../pmcrypto';
1112

1213
// Streaming not supported when verifying detached signatures
1314
export interface VerifyOptionsPmcrypto<T extends Data> extends Omit<VerifyOptions, 'message'> {
@@ -19,7 +20,7 @@ export interface VerifyOptionsPmcrypto<T extends Data> extends Omit<VerifyOption
1920

2021
export interface VerifyMessageResult<DataType extends openpgp_VerifyMessageResult['data'] = Data> {
2122
data: DataType;
22-
verified: VERIFICATION_STATUS;
23+
verificationStatus: VERIFICATION_STATUS;
2324
signatures: OpenPGPSignature[];
2425
signatureTimestamp: Date | null;
2526
errors?: Error[];
@@ -33,7 +34,7 @@ export function verifyMessage<DataType extends Data, FormatType extends VerifyOp
3334
VerifyMessageResult<Uint8Array> :
3435
never
3536
>;
36-
export function handleVerificationResult<DataType extends Data>(
37+
export function handleVerificationResult<DataType extends MaybeWebStream<Data>>(
3738
verificationResult: openpgp_VerifyMessageResult<DataType>,
3839
signatureContext?: ContextVerificationOptions,
3940
expectSigned?: boolean

lib/message/verify.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const { NOT_SIGNED, SIGNED_AND_VALID, SIGNED_AND_INVALID } = VERIFICATION_STATUS
2121
* @param {Boolean} expectSigned - whether a valid signature is expected; it causes the function to throw otherwise
2222
* @returns {{
2323
* data: Uint8Array|string|ReadableStream|NodeStream - message data,
24-
* verified: constants.VERIFICATION_STATUS - message verification status,
24+
* verificationStatus: constants.VERIFICATION_STATUS - message verification status,
2525
* signatures: openpgp.signature.Signature[] - message signatures,
2626
* signatureTimestamp: Date|null - creation date of the first valid message signature, or null if all signatures are missing or invalid,
2727
* errors: Error[]|undefined - verification errors if all signatures are invalid
@@ -71,7 +71,7 @@ export async function handleVerificationResult(verificationResult, signatureCont
7171

7272
return {
7373
data,
74-
verified: verificationStatus,
74+
verificationStatus,
7575
signatures,
7676
signatureTimestamp,
7777
errors: verificationStatus === SIGNED_AND_INVALID ? errors : undefined
@@ -87,7 +87,7 @@ export async function handleVerificationResult(verificationResult, signatureCont
8787
*
8888
* @returns {Promise<Object>} Verification result in the form: {
8989
* data: Uint8Array|string|ReadableStream - message data,
90-
* verified: constants.VERIFICATION_STATUS - message verification status,
90+
* verificationStatus: VERIFICATION_STATUS - message verification status,
9191
* signatures: openpgp.Signature[] - message signatures,
9292
* signatureTimestamp: Date|null - creation date of the first valid message signature, or null if all signatures are missing or invalid,
9393
* errors: Error[]|undefined - verification errors if all signatures are invalid
@@ -124,7 +124,7 @@ export async function verifyMessage({
124124
*
125125
* @returns {Promise<Object>} Verification result in the form: {
126126
* data: Uint8Array|string|ReadableStream - message data,
127-
* verified: constants.VERIFICATION_STATUS - message verification status,
127+
* verificationStatus: VERIFICATION_STATUS - message verification status,
128128
* signatures: openpgp.Signature[] - message signatures,
129129
* signatureTimestamp: Date|null - creation date of the first valid message signature, or null if all signatures are missing or invalid,
130130
* errors: Error[]|undefined - verification errors if all signatures are invalid

lib/pmcrypto.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export interface DecryptResultPmcrypto<DataType extends openpgp_DecryptMessageRe
7777
data: DataType;
7878
signatures: DataType extends WebStream<Data> ? Promise<OpenPGPSignature[]> : OpenPGPSignature[];
7979
filename: string;
80-
verified: DataType extends WebStream<Data> ? Promise<VERIFICATION_STATUS> : VERIFICATION_STATUS;
80+
verificationStatus: DataType extends WebStream<Data> ? Promise<VERIFICATION_STATUS> : VERIFICATION_STATUS;
8181
verificationErrors?: DataType extends WebStream<Data> ? Promise<Error[]> : Error[];
8282
}
8383

test/config.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,11 @@ EoSmib14fiYL0eQTz4I1XJ9OCVVZcaoFZzKnlQc=
9494
const key = await readKey({ armoredKey: oldReformattedKey });
9595

9696
// since the key is valid at the current time, the message should be verifiable if the `config` allows it
97-
const { verified } = await verifyMessage({
97+
const { verificationStatus } = await verifyMessage({
9898
textData: 'plaintext',
9999
signature: await readSignature({ armoredSignature }),
100100
verificationKeys: key
101101
});
102-
expect(verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
102+
expect(verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
103103
});
104104
});

test/message/context.spec.ts

+19-19
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ describe('context', () => {
4949
verificationKeys: [publicKey]
5050
});
5151

52-
expect(verificationValidContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
53-
expect(verificationWrongContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
54-
expect(verificationMissingContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
52+
expect(verificationValidContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
53+
expect(verificationWrongContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
54+
expect(verificationMissingContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
5555
// check errors
5656
expect(verificationValidContext.errors).to.be.undefined;
5757
expect(verificationWrongContext.errors).to.have.length(1);
@@ -101,10 +101,10 @@ describe('context', () => {
101101
verificationKeys: [publicKey]
102102
});
103103

104-
expect(verificationValidContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
105-
expect(verificationWrongContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
106-
expect(verificationWrongContextNotRequired.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
107-
expect(verificationMissingContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
104+
expect(verificationValidContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
105+
expect(verificationWrongContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
106+
expect(verificationWrongContextNotRequired.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
107+
expect(verificationMissingContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
108108
// check errors
109109
expect(verificationValidContext.errors).to.be.undefined;
110110
expect(verificationWrongContext.errors).to.have.length(1);
@@ -147,9 +147,9 @@ describe('context', () => {
147147
verificationKeys: publicKey
148148
});
149149

150-
expect(decryptionValidContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
151-
expect(decryptionWrongContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
152-
expect(decryptionMissingContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
150+
expect(decryptionValidContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
151+
expect(decryptionWrongContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
152+
expect(decryptionMissingContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
153153
// check errors
154154
expect(decryptionValidContext.verificationErrors).to.be.undefined;
155155
expect(decryptionWrongContext.verificationErrors).to.have.length(1);
@@ -195,9 +195,9 @@ describe('context', () => {
195195
verificationKeys: publicKey
196196
});
197197

198-
expect(decryptionValidContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
199-
expect(decryptionWrongContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
200-
expect(decryptionMissingContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
198+
expect(decryptionValidContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
199+
expect(decryptionWrongContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
200+
expect(decryptionMissingContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
201201
// check errors
202202
expect(decryptionValidContext.verificationErrors).to.be.undefined;
203203
expect(decryptionWrongContext.verificationErrors).to.have.length(1);
@@ -256,8 +256,8 @@ sJFJxllC0j4wHCOS9uiSYsZ/pWCqxX/3sFh4VBFOpr0HAA==
256256
signatureContext: { value: 'test-context', required: false }
257257
});
258258

259-
expect(verificationExpectedContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
260-
expect(verificationNoExpectedContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
259+
expect(verificationExpectedContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
260+
expect(verificationNoExpectedContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
261261

262262
expect(verificationNoExpectedContext.errors).to.be.undefined;
263263
expect(verificationExpectedContext.errors).to.have.length(1);
@@ -295,8 +295,8 @@ sJFJxllC0j4wHCOS9uiSYsZ/pWCqxX/3sFh4VBFOpr0HAA==
295295
signatureContext: { value: 'test-context', requiredAfter: nextHour }
296296
});
297297

298-
expect(verificationExpectedContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
299-
expect(verificationNoExpectedContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
298+
expect(verificationExpectedContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
299+
expect(verificationNoExpectedContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
300300

301301
expect(verificationNoExpectedContext.errors).to.be.undefined;
302302
expect(verificationExpectedContext.errors).to.have.length(1);
@@ -343,7 +343,7 @@ sj39B18qvvnS11F+AAB7igEAqwmlDXMzeNNLc3skdyQWZoP0fPyI/ol7pMa+
343343
verificationKeys: publicKey
344344
});
345345

346-
expect(verificationWithContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
347-
expect(verificationWithoutContext.verified).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
346+
expect(verificationWithContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_INVALID);
347+
expect(verificationWithoutContext.verificationStatus).to.equal(VERIFICATION_STATUS.SIGNED_AND_VALID);
348348
});
349349
});

0 commit comments

Comments
 (0)