Browse Source

sequoia: Save any filename stored in the literal data packet

neal/tpk-cache
Neal Walfield 3 years ago
parent
commit
ce658ba366
5 changed files with 263 additions and 2 deletions
  1. +36
    -2
      src/pgp_sequoia.c
  2. +19
    -0
      test/include/LiteralFilenameTests.h
  3. +44
    -0
      test/src/engine_tests/LiteralFilenameTests.cc
  4. +25
    -0
      test/test_files/literal-packet-with-filename.pgp
  5. +139
    -0
      test/test_keys/priv/pep-test-lisa-0xBA0997C1514E70EB_priv.asc

+ 36
- 2
src/pgp_sequoia.c View File

@ -917,7 +917,13 @@ struct decrypt_cookie {
int good_but_revoked;
int missing_keys;
int bad_checksums;
// Whether we decrypted anything.
int decrypted;
// The filename stored in the literal data packet. Note: this is
// *not* protected by the signature and should not be trusted!!!
char *filename;
};
static pgp_status_t
@ -1339,6 +1345,29 @@ check_signatures_cb(void *cookie_opaque, pgp_message_structure_t structure)
return PGP_STATUS_SUCCESS;
}
static pgp_status_t inspect_cb(
void *cookie_opaque, pgp_packet_parser_t pp)
{
struct decrypt_cookie *cookie = cookie_opaque;
pgp_packet_t packet = pgp_packet_parser_packet(pp);
assert(packet);
pgp_tag_t tag = pgp_packet_tag(packet);
T("%s", pgp_tag_to_string(tag));
if (tag == PGP_TAG_LITERAL) {
pgp_literal_t literal = pgp_packet_ref_literal(packet);
cookie->filename = pgp_literal_filename(literal);
pgp_literal_free(literal);
}
pgp_packet_free(packet);
return 0;
}
PEP_STATUS pgp_decrypt_and_verify(
PEP_SESSION session, const char *ctext, size_t csize,
const char *dsigtext, size_t dsigsize,
@ -1346,7 +1375,7 @@ PEP_STATUS pgp_decrypt_and_verify(
char** filename_ptr)
{
PEP_STATUS status = PEP_STATUS_OK;
struct decrypt_cookie cookie = { session, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, };
struct decrypt_cookie cookie = { session, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, NULL };
pgp_reader_t reader = NULL;
pgp_writer_t writer = NULL;
pgp_reader_t decryptor = NULL;
@ -1376,7 +1405,8 @@ PEP_STATUS pgp_decrypt_and_verify(
pgp_error_t err = NULL;
decryptor = pgp_decryptor_new(&err, reader,
get_public_keys_cb, decrypt_cb,
check_signatures_cb, &cookie, 0);
check_signatures_cb, inspect_cb,
&cookie, 0);
if (! decryptor)
ERROR_OUT(err, PEP_DECRYPT_NO_KEY, "pgp_decryptor_new");
@ -1405,6 +1435,9 @@ PEP_STATUS pgp_decrypt_and_verify(
*keylist = cookie.signer_keylist;
stringlist_append(*keylist, cookie.recipient_keylist);
if (filename_ptr)
*filename_ptr = cookie.filename;
out:
if (status == PEP_STATUS_OK) {
// **********************************
@ -1432,6 +1465,7 @@ PEP_STATUS pgp_decrypt_and_verify(
} else {
free_stringlist(cookie.recipient_keylist);
free_stringlist(cookie.signer_keylist);
free(cookie.filename);
free(*ptext);
}


+ 19
- 0
test/include/LiteralFilenameTests.h View File

@ -0,0 +1,19 @@
// This file is under GNU General Public License 3.0
// see LICENSE.txt
#ifndef LITERAL_FILENAME_H
#define LITERAL_FILENAME_H
#include <string>
#include "EngineTestIndividualSuite.h"
using namespace std;
class LiteralFilenameTests : public EngineTestIndividualSuite {
public:
LiteralFilenameTests(string test_suite, string test_home_dir);
private:
void check();
};
#endif

+ 44
- 0
test/src/engine_tests/LiteralFilenameTests.cc View File

@ -0,0 +1,44 @@
// This file is under GNU General Public License 3.0
// see LICENSE.txt
#include <stdlib.h>
#include <string>
#include <cstring>
#include <cpptest.h>
#include <fstream>
#include "pEpEngine.h"
#include "test_util.h"
#include "EngineTestIndividualSuite.h"
#include "LiteralFilenameTests.h"
using namespace std;
LiteralFilenameTests::LiteralFilenameTests(string suitename, string test_home_dir) :
EngineTestIndividualSuite::EngineTestIndividualSuite(suitename, test_home_dir) {
add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("LiteralFilenameTests::check"),
static_cast<Func>(&LiteralFilenameTests::check)));
}
void LiteralFilenameTests::check() {
slurp_and_import_key(session, "test_keys/priv/pep-test-lisa-0xBA0997C1514E70EB_priv.asc");
string ciphertext = slurp("test_files/literal-packet-with-filename.pgp");
// Decrypt and verify it.
char *plaintext = NULL;
size_t plaintext_size = 0;
stringlist_t *keylist = NULL;
char *filename = NULL;
PEP_STATUS status = decrypt_and_verify(session,
ciphertext.c_str(),
ciphertext.size(),
NULL, 0,
&plaintext, &plaintext_size,
&keylist, &filename);
TEST_ASSERT_MSG(status == PEP_DECRYPTED_AND_VERIFIED, tl_status_string(status));
TEST_ASSERT_MSG(filename, "filename");
TEST_ASSERT_MSG((strcmp(filename, "filename.txt") == 0), "strcmp(filename, \"filename.txt\") == 0");
}

+ 25
- 0
test/test_files/literal-packet-with-filename.pgp View File

@ -0,0 +1,25 @@
-----BEGIN PGP MESSAGE-----
wcDMA9wGqgE3hB2PAQv/Z9pFeIVERgTJJqSY0pWiGdbknsSjkTrkhJVPkMZ0LEJ7
A+sj0tXxRtFpEk2U4TLpoN3zlYsD0+ATTqVMGP7WKRm/EyuP40j6jWoGtxU4E3Vh
BL2+fLkqx5i+MV3JDNwILPb+ZQU1qRWn2Ocvu3akTiC7AwApX5GW2x1WmUbhkHjI
Ynwp+VDkdteL/kMP5UFiN3V+WicXBOhST/X0tz7mzq/UHpPN2e4T8Sb48ImKTlop
wBO3lqC23YHTVl87bGm4yeM5XrzK/0yO+pAUQ53G2aFkjNHfcqtkAGcazmOqXhXF
EhT1Qo6Pfu7ZXBPsBLHj8eRjBqf0HXVxv35//BSjAhUOmzMa81OQHHfD2wpuiwLB
yKgjvjphUQydgzTjHAI9/dkcDMM4MQkp6rbJU10dwhGqcx1rD1tmznMMdHup7lfA
Np6UAhvxJPAxjGtGiWfj7xi9D63TgFOoh4fboBgSd1s9X5rH6u9+9dNOPLEOPHMP
hgRTxqJxie3PDALN6kdL1MFyAQkBBoNRgvuptD0v1VFYsy6+w+tG3LFw/NoKC8pv
dcSBormmdWLNF3SLDm0ECp27x8U9tYxqjqX4J7XCv7ipcqa3cifPIafMpxCCicMP
hHcl5zgyMrVtlqUbgrrmlQF4+lVL64+mqo0jDJqU3C9TWUZmNJJ3B/f12ZrpbV+3
h8UBRUQyq85shpoCEdBCYLULvH2K7BA28RDj2kCr6RM+jOJO3UYthwJv7ebqXL/Q
oqmgdiZxFEl8WjQPxFL7S1fSoqkFRklSr5zaD8JNdzw8NYlgroulRVQgLKFHRjZb
mGvMywHSQfylbBVhx3k5JiGkPUE8jRMvibty5we/4ENAxNY4ihDlZ4LUtU/aPkND
QMul8MUjIWVF+ZpTF3Z6zz6cbXB8FJWiDw3+Ak0Z+sHR8TfVIhtJWQkaKO3WUJ/1
zaHUpfssL+n55as7H59YURYyMQFAgWcuOtqqt+pulWuv64GXWBjpYeOwds4rBb5i
erJ6GUZW0Or+yA+XPC15uRcJh23oef7zQoRaIyJVv9Dr4NinsMUfi3Rp8x2w53Gr
9K/HCZh7OPs4Ym+sKXi+lBOUhkmtc5ZRqh6SbAm/2MC5bvSPh+tswN/8mP/ejhuH
OVf/lXdPzmQl1vt9kuDVsj1iy20MjL9F2TXNkdkPOAOCBblUCo2GqrfImzVdL+wO
CrqnO063T9LexQ3Un7w8XnUnd+zvr1qck50KQ/8tDtIaNnK7u05oxw7Z9aG5fqlD
pCoGqA==
=P6SJ
-----END PGP MESSAGE-----

+ 139
- 0
test/test_keys/priv/pep-test-lisa-0xBA0997C1514E70EB_priv.asc View File

@ -0,0 +1,139 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----
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
b4PD8Q==
=1d3v
-----END PGP PRIVATE KEY BLOCK-----

Loading…
Cancel
Save