Skip to content

port encryptFile to use PGPainless #1059

Description

@tomholub

Part of #1051

Relevant test here https://github.com/FlowCrypt/flowcrypt-mobile-core/blob/master/source/test.ts#L53

Only port encryptFile for now (which results in binary - unarmored - output). Don't port decryptFile because there are many error scenarios that we want to behave the same as before.

for (const keypairName of allKeypairNames.filter(name => name != 'expired')) {
  ava.default(`encryptFile -> decryptFile ${keypairName}`, async t => {
    const { pubKeys, keys } = getKeypairs(keypairName);
    const name = 'myfile.txt';
    const content = Buffer.from([10, 20, 40, 80, 160, 0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250]);
    const { data: encryptedFile, json: encryptJson } = await request('encryptFile', { pubKeys, name }, content);
    expectEmptyJson(encryptJson);
    expectData(encryptedFile);
    const { data: decryptedContent, json: decryptJson } = await request('decryptFile', { keys }, encryptedFile);
    expect(decryptJson).to.deep.equal({ success: true, name });
    expectData(decryptedContent, 'binary', content);
    t.pass();
  });
}

Current implementation here https://github.com/FlowCrypt/flowcrypt-mobile-core/blob/master/source/mobile-interface/endpoints.ts

  public encryptFile = async (uncheckedReq: any, data: Buffers): Promise<Buffers> => {
    const req = ValidateInput.encryptFile(uncheckedReq);
    const encrypted = await PgpMsg.encrypt({ pubkeys: req.pubKeys, data: Buf.concat(data), filename: req.name, armor: false }) as OpenPGP.EncryptBinaryResult;
    return fmtRes({}, encrypted.message.packets.write());
  }

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions