Pseudo-grafted updated test code from ENGINE-434, since it seems it may be a while til those discussions take place.
authorKrista Bennett <krista@pep-project.org>
Wed, 30 May 2018 18:31:23 +0200
changeset 2703e1ff8dbe65f1
parent 2700 cd9a4efecb62
child 2704 1d58d97aded9
Pseudo-grafted updated test code from ENGINE-434, since it seems it may be a while til those discussions take place.
src/pEp_internal.h
src/pgp_gpg.c
src/platform_unix.c
src/platform_unix.h
test/Makefile
test/convenience_scripts/README
test/convenience_scripts/keygen_for_test.py
test/genscripts.py
test/include/EncryptMissingPrivateKeyTests.h
test/include/EngineTestSuite.h
test/include/IntegrityTests.h
test/include/RevokeRegenAttachTests.h
test/include/test_util.h
test/src/EngineTestIndividualSuite.cc
test/src/EngineTestSessionSuite.cc
test/src/EngineTestSuite.cc
test/src/TestDriver.cc
test/src/engine_tests/AppleMailTests.cc
test/src/engine_tests/CaseAndDotAddressTests.cc
test/src/engine_tests/CrashdumpTests.cc
test/src/engine_tests/EncryptMissingPrivateKeyTests.cc
test/src/engine_tests/IntegrityTests.do.not.run.before.ENGINE-434
test/src/engine_tests/MimeTests.cc
test/src/engine_tests/PepSubjectReceivedTests.cc
test/src/engine_tests/RevokeRegenAttachTests.cc
test/src/engine_tests/SequenceTests.cc
test/src/engine_tests/StringlistTests.cc
test/src/engine_tests/StringpairListTests.cc
test/src/engine_tests/TrustManipulationTests.cc
test/src/engine_tests/TrustwordsTests.cc
test/src/engine_tests/UserIDAliasTests.cc
test/src/util/test_util.cc
test/test_keys/priv/integrity_test_recip_0-0xF390A40D_priv.asc
test/test_keys/priv/integrity_test_signer_0-0xFF26631A_priv.asc
test/test_keys/priv/integrity_test_trash_signer_0-0x6A8F15E9_priv.asc
test/test_keys/pub/integrity_test_recip_0-0xF390A40D_pub.asc
test/test_keys/pub/integrity_test_signer_0-0xFF26631A_pub.asc
test/test_keys/pub/integrity_test_trash_signer_0-0x6A8F15E9_pub.asc
test/test_mails/Signed PGP_MIME by unknown signer attach.eml
test/test_mails/Signed PGP_MIME by unknown signer no attach.eml
test/test_mails/Signed attached key PGP_MIME.eml
test/test_mails/Signed attached key PGP_MIME_corrupted.eml
test/test_mails/Signed no attach PGP_MIME.eml
test/test_mails/Unsigned from PGP_MIME_attach.eml
test/test_mails/Unsigned from PGP_MIME_attach_corrupted.eml
test/test_mails/Unsigned from PGP_MIME_noattach.eml
test/test_mails/Unsigned from PGP_MIME_noattach_corrupted.eml
test/test_mails/fake_2.0_good.eml
test/test_mails/fake_2.0_signed_no_key_attached.eml
test/test_mails/fake_2.0_unsigned.eml
     1.1 --- a/src/pEp_internal.h	Wed May 30 11:21:06 2018 +0200
     1.2 +++ b/src/pEp_internal.h	Wed May 30 18:31:23 2018 +0200
     1.3 @@ -61,7 +61,11 @@
     1.4  #else // UNIX
     1.5  #define _POSIX_C_SOURCE 200809L
     1.6  #include <dlfcn.h>
     1.7 +#ifdef NDEBUG
     1.8  #define LOCAL_DB unix_local_db()
     1.9 +#else
    1.10 +#define LOCAL_DB unix_local_db(false)
    1.11 +#endif
    1.12  #ifndef SYSTEM_DB
    1.13  #define SYSTEM_DB "/usr/share/pEp/system.db"
    1.14  #endif
     2.1 --- a/src/pgp_gpg.c	Wed May 30 11:21:06 2018 +0200
     2.2 +++ b/src/pgp_gpg.c	Wed May 30 18:31:23 2018 +0200
     2.3 @@ -262,8 +262,11 @@
     2.4          stringlist_add(conf_keys, "allow-freeform-uid");
     2.5          stringlist_add(conf_values, "");
     2.6  
     2.7 +#if defined(WIN32) || defined(NDEBUG)
     2.8          bResult = ensure_config_values(conf_keys, conf_values, gpg_conf());
     2.9 -
    2.10 +#else
    2.11 +        bResult = ensure_config_values(conf_keys, conf_values, gpg_conf(false));
    2.12 +#endif
    2.13          free_stringlist(conf_keys);
    2.14          free_stringlist(conf_values);
    2.15  
    2.16 @@ -279,8 +282,11 @@
    2.17          stringlist_add(conf_keys, "max-cache-ttl");
    2.18          stringlist_add(conf_values, "1200");
    2.19  
    2.20 +#if defined(WIN32) || defined(NDEBUG)
    2.21          bResult = ensure_config_values(conf_keys, conf_values, gpg_agent_conf());
    2.22 -
    2.23 +#else        
    2.24 +        bResult = ensure_config_values(conf_keys, conf_values, gpg_agent_conf(false));
    2.25 +#endif
    2.26          free_stringlist(conf_keys);
    2.27          free_stringlist(conf_values);
    2.28  
    2.29 @@ -803,7 +809,8 @@
    2.30                          }
    2.31                          case GPG_ERR_CERT_REVOKED:
    2.32                          case GPG_ERR_BAD_SIGNATURE:
    2.33 -                            result = PEP_DECRYPT_SIGNATURE_DOES_NOT_MATCH;
    2.34 +			    result = PEP_DECRYPT_SIGNATURE_DOES_NOT_MATCH;
    2.35 +                            //result = PEP_DECRYPT_BAD_SIGNATURE;
    2.36                              break;
    2.37                          case GPG_ERR_SIG_EXPIRED:
    2.38                          case GPG_ERR_KEY_EXPIRED:
     3.1 --- a/src/platform_unix.c	Wed May 30 11:21:06 2018 +0200
     3.2 +++ b/src/platform_unix.c	Wed May 30 18:31:23 2018 +0200
     3.3 @@ -208,12 +208,21 @@
     3.4  
     3.5  #endif
     3.6  
     3.7 +#ifdef NDEBUG
     3.8  const char *unix_local_db(void)
     3.9 +#else
    3.10 +const char *unix_local_db(int reset)
    3.11 +#endif
    3.12  {
    3.13      static char buffer[MAX_PATH];
    3.14      static bool done = false;
    3.15  
    3.16 -    if (!done) {
    3.17 +    #ifdef NDEBUG
    3.18 +    if (!done)
    3.19 +    #else
    3.20 +    if ((!done) || reset)
    3.21 +    #endif
    3.22 +    {
    3.23          char *home_env;
    3.24          if((home_env = getenv("HOME"))){
    3.25              char *p = stpncpy(buffer, home_env, MAX_PATH);
    3.26 @@ -240,12 +249,20 @@
    3.27  static const char *gpg_agent_conf_name = "gpg-agent.conf";
    3.28  static const char *gpg_conf_empty = "# Created by pEpEngine\n";
    3.29  
    3.30 +#ifdef NDEBUG
    3.31  static bool ensure_gpg_home(const char **conf, const char **home){
    3.32 +#else
    3.33 +static bool ensure_gpg_home(const char **conf, const char **home, int reset){
    3.34 +#endif    
    3.35      static char path[MAX_PATH];
    3.36      static char dirname[MAX_PATH];
    3.37      static bool done = false;
    3.38  
    3.39 +#ifdef NDEBUG
    3.40      if (!done) {
    3.41 +#else
    3.42 +    if (reset || !done) {
    3.43 +#endif        
    3.44          char *p;
    3.45          ssize_t len;
    3.46          char *gpg_home_env = getenv("GNUPGHOME");
    3.47 @@ -317,15 +334,27 @@
    3.48      return true;
    3.49  }
    3.50  
    3.51 +#ifdef NDEBUG
    3.52  static bool ensure_gpg_agent_conf(const char **agent_conf){
    3.53 +#else
    3.54 +static bool ensure_gpg_agent_conf(const char **agent_conf, int reset){    
    3.55 +#endif    
    3.56      static char agent_path[MAX_PATH];
    3.57      static bool done = false;
    3.58  
    3.59 +#ifdef NDEBUG
    3.60      if (!done) {
    3.61          const char *dirname;
    3.62  
    3.63          if (!ensure_gpg_home(NULL, &dirname)) /* Then dirname won't be set. */
    3.64              return false;
    3.65 +#else
    3.66 +    if (reset || !done) {
    3.67 +        const char *dirname;
    3.68 +
    3.69 +        if (!ensure_gpg_home(NULL, &dirname, reset)) /* Then dirname won't be set. */
    3.70 +            return false;
    3.71 +#endif
    3.72  
    3.73          char *p = stpncpy(agent_path, dirname, MAX_PATH);
    3.74          
    3.75 @@ -367,6 +396,7 @@
    3.76      return true;
    3.77  }
    3.78  
    3.79 +#ifdef NDEBUG
    3.80  const char *gpg_conf(void)
    3.81  {
    3.82      const char *conf;
    3.83 @@ -374,7 +404,17 @@
    3.84          return conf;
    3.85      return NULL;
    3.86  }
    3.87 +#else
    3.88 +const char *gpg_conf(int reset)
    3.89 +{
    3.90 +    const char *conf;
    3.91 +    if(ensure_gpg_home(&conf, NULL, reset))
    3.92 +        return conf;
    3.93 +    return NULL;
    3.94 +}
    3.95 +#endif
    3.96  
    3.97 +#ifdef NDEBUG
    3.98  const char *gpg_home(void)
    3.99  {
   3.100      const char *home;
   3.101 @@ -382,7 +422,17 @@
   3.102          return home;
   3.103      return NULL;
   3.104  }
   3.105 +#else
   3.106 +const char *gpg_home(int reset)
   3.107 +{
   3.108 +    const char *home;
   3.109 +    if(ensure_gpg_home(NULL, &home, reset))
   3.110 +        return home;
   3.111 +    return NULL;
   3.112 +}
   3.113 +#endif
   3.114  
   3.115 +#ifdef NDEBUG
   3.116  const char *gpg_agent_conf(void)
   3.117  {
   3.118      const char *agent_conf;
   3.119 @@ -390,3 +440,12 @@
   3.120          return agent_conf;
   3.121      return NULL;
   3.122  }
   3.123 +#else
   3.124 +const char *gpg_agent_conf(int reset)
   3.125 +{
   3.126 +    const char *agent_conf;
   3.127 +    if(ensure_gpg_agent_conf(&agent_conf, reset))
   3.128 +        return agent_conf;
   3.129 +    return NULL;
   3.130 +}
   3.131 +#endif
   3.132 \ No newline at end of file
     4.1 --- a/src/platform_unix.h	Wed May 30 11:21:06 2018 +0200
     4.2 +++ b/src/platform_unix.h	Wed May 30 18:31:23 2018 +0200
     4.3 @@ -20,11 +20,18 @@
     4.4  extern "C" {
     4.5  #endif
     4.6  
     4.7 +#ifdef NDEBUG
     4.8  const char *unix_local_db(void);
     4.9 -
    4.10  const char *gpg_conf(void);
    4.11  const char *gpg_agent_conf(void);
    4.12  const char *gpg_home(void);
    4.13 +#else
    4.14 +const char *unix_local_db(int reset);
    4.15 +const char *gpg_conf(int reset);
    4.16 +const char *gpg_agent_conf(int reset);
    4.17 +const char *gpg_home(int reset);
    4.18 +#endif
    4.19 +
    4.20  
    4.21  #ifdef ANDROID
    4.22  
     5.1 --- a/test/Makefile	Wed May 30 11:21:06 2018 +0200
     5.2 +++ b/test/Makefile	Wed May 30 18:31:23 2018 +0200
     5.3 @@ -83,7 +83,7 @@
     5.4  
     5.5  CPPFLAGS += $(INC_FLAGS) -MMD -MP
     5.6  
     5.7 -all: suitemaker $(TARGET) test_home_
     5.8 +all: suitemaker $(TARGET) test_home_ scripts
     5.9  	
    5.10  $(TARGET): $(OBJS)
    5.11  	$(CXX) $(CPPFLAGS) $(LDFLAGS) $(OBJS) $(LDFLAGS) $(LDLIBS) -o $@
    5.12 @@ -98,7 +98,13 @@
    5.13  		
    5.14  .PHONY: test_home_
    5.15  test_home_: 
    5.16 -	mkdir -p $(TEST_HOME)
    5.17 +	
    5.18 +
    5.19 +.PHONY: test_home_
    5.20 +scripts: 
    5.21 +ifdef PY_ENV
    5.22 +	$(PY_ENV) genscripts.py
    5.23 +endif
    5.24  
    5.25  .PHONY: test
    5.26  test: all
    5.27 @@ -107,6 +113,7 @@
    5.28  .PHONY: clean
    5.29  clean:
    5.30  	$(RM) $(TARGET) $(OBJS) $(DEPS)
    5.31 +	$(RM) $(HERE)/*Tests
    5.32  
    5.33  
    5.34  
     6.1 --- a/test/convenience_scripts/README	Wed May 30 11:21:06 2018 +0200
     6.2 +++ b/test/convenience_scripts/README	Wed May 30 18:31:23 2018 +0200
     6.3 @@ -1,1 +1,3 @@
     6.4  This is just a collection of scripts and source files I've used to convert things and make the test environment behave from time to time. USE AT YOUR OWN RISK.
     6.5 +
     6.6 +Note that the keygen script isn't currently deleting keys properly. We probably just have to shell out and do it.
     7.1 --- a/test/convenience_scripts/keygen_for_test.py	Wed May 30 11:21:06 2018 +0200
     7.2 +++ b/test/convenience_scripts/keygen_for_test.py	Wed May 30 18:31:23 2018 +0200
     7.3 @@ -79,7 +79,7 @@
     7.4  
     7.5      
     7.6      pubkey = gpg.export_keys(fpr)
     7.7 -    privkey = gpg.export_keys(fpr, True)
     7.8 +    privkey = gpg.export_keys(fpr, True, passphrase="")
     7.9  
    7.10      pubkey_filename = os.path.join(pub_path, key_filename_prefix + "pub.asc")
    7.11      privkey_filename = os.path.join(priv_path, key_filename_prefix + "priv.asc")    
    7.12 @@ -93,7 +93,7 @@
    7.13      privkey_file.close()
    7.14          
    7.15      # Delete keys from keyring
    7.16 -    gpg.delete_keys(fpr, True) # True => private keys
    7.17 +    gpg.delete_keys(fpr, True, passphrase="") # True => private keys
    7.18      gpg.delete_keys(fpr)
    7.19  
    7.20      if (args.hgadd):
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/test/genscripts.py	Wed May 30 18:31:23 2018 +0200
     8.3 @@ -0,0 +1,27 @@
     8.4 +# This file is under GNU General Public License 3.0
     8.5 +# see LICENSE.txt
     8.6 +
     8.7 +from os import listdir, getcwd
     8.8 +from os.path import isfile, join
     8.9 +from re import sub
    8.10 +import os
    8.11 +import stat
    8.12 +import datetime
    8.13 +
    8.14 +srcpath = join(getcwd(), "src/engine_tests")
    8.15 +
    8.16 +ls = listdir(srcpath)
    8.17 +
    8.18 +for f in ls:
    8.19 +    if isfile(join(srcpath, f)):
    8.20 +        if (f.endswith(".cc")):
    8.21 +            suite = sub('\.cc$', '', f)
    8.22 +            outfile = open(suite, 'w')
    8.23 +            output = (
    8.24 +                "#!/bin/bash\n"
    8.25 +                "# This is a convenience script for launching individual tests and tab completion with TestDriver \n\n" +
    8.26 +                "./TestDriver " + suite + "\n\n")
    8.27 +            outfile.write(output)
    8.28 +            os.chmod(suite, 
    8.29 +                     (stat.S_IRWXU | stat.S_IRGRP | stat.S_IROTH | stat.S_IXGRP | stat.S_IXOTH))
    8.30 +            outfile.close()
    8.31 \ No newline at end of file
     9.1 --- a/test/include/EncryptMissingPrivateKeyTests.h	Wed May 30 11:21:06 2018 +0200
     9.2 +++ b/test/include/EncryptMissingPrivateKeyTests.h	Wed May 30 18:31:23 2018 +0200
     9.3 @@ -12,6 +12,8 @@
     9.4  class EncryptMissingPrivateKeyTests : public EngineTestSessionSuite {
     9.5      public:
     9.6          EncryptMissingPrivateKeyTests(string test_suite, string test_home_dir);
     9.7 +    protected:
     9.8 +        void setup();
     9.9      private:
    9.10          void check_encrypt_missing_private_key();
    9.11  };
    10.1 --- a/test/include/EngineTestSuite.h	Wed May 30 11:21:06 2018 +0200
    10.2 +++ b/test/include/EngineTestSuite.h	Wed May 30 18:31:23 2018 +0200
    10.3 @@ -18,13 +18,19 @@
    10.4      protected:
    10.5          PEP_SESSION session;
    10.6          string test_home;
    10.7 +        string real_home;
    10.8          string prev_gpg_home;
    10.9          string name;
   10.10          
   10.11          string current_test_name;
   10.12  
   10.13 +#define TEST_FAILED_MESSAGE_BUFSIZE 1000        
   10.14 +        char failed_msg_buf[TEST_FAILED_MESSAGE_BUFSIZE];
   10.15 +        
   10.16          std::map<std::string, void (Test::Suite::*)()> test_map;                
   10.17          
   10.18 +        string my_name;
   10.19 +        
   10.20          unsigned int number_of_tests;
   10.21          unsigned int on_test_number;
   10.22          
   10.23 @@ -34,6 +40,6 @@
   10.24          void set_full_env();
   10.25          void restore_full_env();
   10.26          void initialise_test_home();
   10.27 -        
   10.28 +        void set_my_name();    
   10.29  };
   10.30  #endif
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/test/include/IntegrityTests.h	Wed May 30 18:31:23 2018 +0200
    11.3 @@ -0,0 +1,54 @@
    11.4 +// This file is under GNU General Public License 3.0
    11.5 +// see LICENSE.txt
    11.6 +
    11.7 +#ifndef INTEGRITY_H
    11.8 +#define INTEGRITY_H
    11.9 +
   11.10 +#include <string>
   11.11 +#include "pEpEngine.h"
   11.12 +#include "message_api.h"
   11.13 +
   11.14 +#include "EngineTestIndividualSuite.h"
   11.15 +
   11.16 +using namespace std;
   11.17 +
   11.18 +class IntegrityTests : public EngineTestIndividualSuite {
   11.19 +    public:
   11.20 +        IntegrityTests(string test_suite, string test_home_dir);
   11.21 +        
   11.22 +    protected:
   11.23 +        void setup();
   11.24 +        void tear_down();
   11.25 +            
   11.26 +    private:
   11.27 +        const char* recip_fpr;
   11.28 +
   11.29 +        // used by each test
   11.30 +        string message;
   11.31 +        char* decrypted_msg;
   11.32 +        PEP_STATUS decrypt_status;
   11.33 +        PEP_rating rating;
   11.34 +        PEP_decrypt_flags_t flags;
   11.35 +        stringlist_t* keylist;
   11.36 +        char* dummy_ignore;
   11.37 +        
   11.38 +        void check_unsigned_PGP_MIME();
   11.39 +        void check_unsigned_PGP_MIME_attached_key();
   11.40 +        void check_unsigned_PGP_MIME_w_render_flag();
   11.41 +        void check_known_good_signed_PGP_MIME();
   11.42 +        void check_known_good_signed_PGP_MIME_attached_key();
   11.43 +        void check_unknown_signed_PGP_MIME_no_key();
   11.44 +        void check_unknown_signed_PGP_MIME_attached_key();
   11.45 +        void check_unsigned_PGP_MIME_corrupted();
   11.46 +        void check_signed_PGP_MIME_corrupted();
   11.47 +        void check_unsigned_2_0();
   11.48 +        void check_unknown_signed_2_0_no_key();
   11.49 +        void check_unknown_signed_2_0_no_key_known_signer();
   11.50 +        void check_unknown_signed_2_0_key_attached();
   11.51 +
   11.52 +        void check_integrity();
   11.53 +        
   11.54 +
   11.55 +};
   11.56 +
   11.57 +#endif
    12.1 --- a/test/include/RevokeRegenAttachTests.h	Wed May 30 11:21:06 2018 +0200
    12.2 +++ b/test/include/RevokeRegenAttachTests.h	Wed May 30 18:31:23 2018 +0200
    12.3 @@ -12,6 +12,8 @@
    12.4  class RevokeRegenAttachTests : public EngineTestSessionSuite {
    12.5      public:
    12.6          RevokeRegenAttachTests(string test_suite, string test_home_dir);
    12.7 +    protected:
    12.8 +        void setup();
    12.9      private:
   12.10          void check_revoke_regen_attach();
   12.11  };
    13.1 --- a/test/include/test_util.h	Wed May 30 11:21:06 2018 +0200
    13.2 +++ b/test/include/test_util.h	Wed May 30 18:31:23 2018 +0200
    13.3 @@ -2,6 +2,10 @@
    13.4  #define PEP_TEST_UTILS_H
    13.5  
    13.6  #include <string>
    13.7 +#include <stdlib.h>
    13.8 +#include <sys/stat.h>
    13.9 +#include <ftw.h>
   13.10 +
   13.11  #include "pEpEngine.h"
   13.12  #include "message_api.h"
   13.13  
   13.14 @@ -31,4 +35,11 @@
   13.15  // Grabs a new uuid for your randomish string needs.
   13.16  char* get_new_uuid();
   13.17  
   13.18 +bool slurp_message_and_import_key(PEP_SESSION session, const char* message_fname, std::string& message, const char* key_filename);
   13.19 +
   13.20 +int util_delete_filepath(const char *filepath, 
   13.21 +                         const struct stat *file_stat, 
   13.22 +                         int ftw_info, 
   13.23 +                         struct FTW * ftw_struct);
   13.24 +        
   13.25  #endif
    14.1 --- a/test/src/EngineTestIndividualSuite.cc	Wed May 30 11:21:06 2018 +0200
    14.2 +++ b/test/src/EngineTestIndividualSuite.cc	Wed May 30 18:31:23 2018 +0200
    14.3 @@ -20,11 +20,11 @@
    14.4  }
    14.5  
    14.6  void EngineTestIndividualSuite::setup() {
    14.7 +    EngineTestSuite::setup();
    14.8      set_full_env(); // This will be called by default before every test
    14.9  }
   14.10  
   14.11  void EngineTestIndividualSuite::tear_down() {
   14.12 -    cout << "calling release()\n";
   14.13 -    release(session);
   14.14      restore_full_env();
   14.15 +    EngineTestSuite::tear_down();
   14.16  }
    15.1 --- a/test/src/EngineTestSessionSuite.cc	Wed May 30 11:21:06 2018 +0200
    15.2 +++ b/test/src/EngineTestSessionSuite.cc	Wed May 30 18:31:23 2018 +0200
    15.3 @@ -23,6 +23,7 @@
    15.4  }
    15.5  
    15.6  void EngineTestSessionSuite::tear_down() {
    15.7 +    cout << "Session: tear_down - OTN: " << on_test_number << " NOT: " << number_of_tests << endl; 
    15.8      if (on_test_number == number_of_tests)
    15.9          restore_full_env();
   15.10          
    16.1 --- a/test/src/EngineTestSuite.cc	Wed May 30 11:21:06 2018 +0200
    16.2 +++ b/test/src/EngineTestSuite.cc	Wed May 30 18:31:23 2018 +0200
    16.3 @@ -1,7 +1,14 @@
    16.4 +#include <stdlib.h>
    16.5 +#include <sys/stat.h>
    16.6 +#include <errno.h>
    16.7  #include <stdlib.h>
    16.8  #include <unistd.h>
    16.9  #include <ftw.h>
   16.10 +#include <assert.h>
   16.11  
   16.12 +#include "platform_unix.h"
   16.13 +
   16.14 +#include "test_util.h"
   16.15  #include "EngineTestSuite.h"
   16.16  using namespace std;
   16.17  
   16.18 @@ -9,15 +16,10 @@
   16.19  EngineTestSuite::EngineTestSuite(string suitename, string test_home_dir) {
   16.20      // FIXME: deal with base
   16.21      test_home = test_home_dir;
   16.22 -    
   16.23 -    // TODO: This is *nix specific, which the current testing env is anyway,
   16.24 -    // but it needn't remain so forever and always
   16.25 -    char* tmp = getenv("GNUPGHOME");
   16.26 -    if (tmp)
   16.27 -        prev_gpg_home = getenv("GNUPGHOME");
   16.28 -        
   16.29 +            
   16.30      number_of_tests = 0;
   16.31      on_test_number = 0;
   16.32 +    real_home = getenv("HOME");
   16.33  }
   16.34  
   16.35  EngineTestSuite::~EngineTestSuite() {}
   16.36 @@ -29,45 +31,102 @@
   16.37  }
   16.38  
   16.39  void EngineTestSuite::set_full_env() {
   16.40 +    int success = 0;
   16.41 +    struct stat dirchk;
   16.42 +    
   16.43 +    set_my_name();
   16.44  
   16.45 -    if (test_home.empty())
   16.46 -        throw std::runtime_error("SETUP: BAD INITIALISATION. No test home.");
   16.47 -    
   16.48 -    int success = system("gpgconf --kill all");
   16.49 +    success = system("gpgconf --kill all");
   16.50      if (success != 0)
   16.51          throw std::runtime_error("SETUP: Error when executing 'gpgconf --kill all'.");
   16.52 +    sleep(1); // hopefully enough time for the system to recognise that it is dead. *sigh*    
   16.53 +
   16.54 +    if (stat(test_home.c_str(), &dirchk) == 0) {
   16.55 +        if (!S_ISDIR(dirchk.st_mode))
   16.56 +            throw std::runtime_error(("The test directory, " + test_home + "exists, but is not a directory.").c_str()); 
   16.57 +                    
   16.58 +        struct stat buf;
   16.59 +
   16.60 +        if (stat(test_home.c_str(), &buf) == 0) {
   16.61 +            cout << test_home << " exists. We'll recursively delete. We hope we're not horking your whole system..." << endl;
   16.62 +            int success = nftw((test_home + "/.").c_str(), util_delete_filepath, 100, FTW_DEPTH);
   16.63 +        }
   16.64 +    }
   16.65 +    else {
   16.66 +        int errchk = mkdir(test_home.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
   16.67 +        cout << errchk << endl;
   16.68 +        if (errchk != 0)
   16.69 +            throw std::runtime_error("Error creating a test directory.");
   16.70 +    }
   16.71 +
   16.72 +    string temp_test_home = test_home + "/" + my_name;
   16.73 +    
   16.74 +    int errchk = mkdir(temp_test_home.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
   16.75 +    if (errchk != 0)
   16.76 +        throw std::runtime_error("Error creating a test directory.");
   16.77 +
   16.78 +    temp_test_home += "/" + to_string(on_test_number);
   16.79 +
   16.80 +    errchk = mkdir(temp_test_home.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
   16.81 +    if (errchk != 0)
   16.82 +        throw std::runtime_error("Error creating a test directory.");
   16.83 +
   16.84 +    // TODO: This is *nix specific, which the current testing env is anyway,
   16.85 +    // but it needn't remain so forever and always
   16.86 +    char* tmp = getenv("GNUPGHOME");
   16.87 +    if (tmp)
   16.88 +        prev_gpg_home = tmp;
   16.89 +        
   16.90 +    if (temp_test_home.empty())
   16.91 +        throw std::runtime_error("SETUP: BAD INITIALISATION. No test home.");
   16.92 +
   16.93      
   16.94      string home = getenv("HOME");
   16.95 -    if (test_home.compare(home) == 0 || test_home.compare(home + "/") == 0 ||
   16.96 -        test_home.compare(home + "/.gnupg") == 0 || test_home.compare(home + ".gnupg") == 0 ||
   16.97 -        test_home.compare(prev_gpg_home) == 0 || test_home.compare(prev_gpg_home + "/.gnupg") == 0 ||
   16.98 -        test_home.compare(prev_gpg_home + ".gnupg") == 0)
   16.99 +    cout << "home is " << home << endl;
  16.100 +    assert(temp_test_home.compare(home) != 0);
  16.101 +    assert(temp_test_home.compare(home + "/") != 0);
  16.102 +    assert(temp_test_home.compare(home + "/.gnupg") != 0);
  16.103 +    assert(temp_test_home.compare(home + ".gnupg") != 0);
  16.104 +    assert(temp_test_home.compare(prev_gpg_home) != 0);
  16.105 +    assert(temp_test_home.compare(prev_gpg_home + "/.gnupg") != 0);
  16.106 +    assert(temp_test_home.compare(prev_gpg_home + ".gnupg") != 0);
  16.107 +
  16.108 +    if (temp_test_home.compare(home) == 0 || temp_test_home.compare(home + "/") == 0 ||
  16.109 +        temp_test_home.compare(home + "/.gnupg") == 0 || temp_test_home.compare(home + ".gnupg") == 0 ||
  16.110 +        temp_test_home.compare(prev_gpg_home) == 0 || temp_test_home.compare(prev_gpg_home + "/.gnupg") == 0 ||
  16.111 +        temp_test_home.compare(prev_gpg_home + ".gnupg") == 0)
  16.112          throw std::runtime_error("SETUP: new GNUPGHOME threatens to mess up user GNUPGHOME (and delete all their keys). NO DICE.");
  16.113      
  16.114 -    cout << "Ok - checked if new test home will be safe. We'll try and make the directory, deleting it if it has already exists." << endl;
  16.115 +//    cout << "Ok - checked if new test home will be safe. We'll try and make the directory, deleting it if it has already exists." << endl;
  16.116      
  16.117      struct stat buf;
  16.118      
  16.119 -    success = setenv("GNUPGHOME", (test_home + "/.gnupg").c_str(), 1);
  16.120 +    success = setenv("GNUPGHOME", (temp_test_home + "/.gnupg").c_str(), 1);
  16.121      if (success != 0)
  16.122          throw std::runtime_error("SETUP: Error when setting GNUPGHOME.");
  16.123  
  16.124 -    success = setenv("HOME", test_home.c_str(), 1);
  16.125 +    cout << "New GNUPGHOME is " << getenv("GNUPGHOME") << endl;
  16.126 +    
  16.127 +    success = setenv("HOME", temp_test_home.c_str(), 1);
  16.128      if (success != 0)
  16.129          throw std::runtime_error("SETUP: Cannot set test_home for init.");
  16.130      
  16.131 -    cout << "calling init()\n";
  16.132 +    unix_local_db(true);
  16.133 +    gpg_conf(true);
  16.134 +    gpg_agent_conf(true);
  16.135 +    
  16.136 +//    cout << "calling init()\n";
  16.137      PEP_STATUS status = init(&session);
  16.138 -    // assert(status == PEP_STATUS_OK);
  16.139 -    // assert(session);
  16.140 -    cout << "init() completed.\n";
  16.141 +    assert(status == PEP_STATUS_OK);
  16.142 +    assert(session);
  16.143 +//    cout << "init() completed.\n";
  16.144  
  16.145 -    success = setenv("HOME", home.c_str(), 1);
  16.146 -    if (success != 0)
  16.147 -        throw std::runtime_error("SETUP: Cannot reset home directory! Either set environment variable manually back to your home, or quit this session!");    
  16.148  }
  16.149  
  16.150  void EngineTestSuite::restore_full_env() {
  16.151 +    release(session);
  16.152 +    session = NULL;
  16.153 +        
  16.154      int success = system("gpgconf --kill all");
  16.155      if (success != 0)
  16.156          throw std::runtime_error("RESTORE: Error when executing 'gpgconf --kill all'.");
  16.157 @@ -75,6 +134,18 @@
  16.158      success = setenv("GNUPGHOME", prev_gpg_home.c_str(), 1);
  16.159      if (success != 0)
  16.160          throw std::runtime_error("RESTORE: Warning - cannot restore GNUPGHOME. Either set environment variable manually back to your home, or quit this session!");
  16.161 +                
  16.162 +    success = nftw((test_home + "/.").c_str(), util_delete_filepath, 100, FTW_DEPTH);
  16.163 +    
  16.164 +    success = setenv("HOME", real_home.c_str(), 1);
  16.165 +    if (success != 0)
  16.166 +        throw std::runtime_error("RESTORE: Cannot reset home directory! Either set environment variable manually back to your home, or quit this session!");
  16.167 +    else
  16.168 +        cout << "RESTORE: HOME is now " << getenv("HOME") << endl;
  16.169 +    unix_local_db(true);
  16.170 +    gpg_conf(true);
  16.171 +    gpg_agent_conf(true);
  16.172 +
  16.173  }
  16.174  
  16.175  void EngineTestSuite::setup() {
  16.176 @@ -82,3 +153,7 @@
  16.177  }
  16.178  
  16.179  void EngineTestSuite::tear_down() {}
  16.180 +
  16.181 +void EngineTestSuite::set_my_name() {
  16.182 +    my_name = typeid(*this).name();
  16.183 +}
  16.184 \ No newline at end of file
    17.1 --- a/test/src/TestDriver.cc	Wed May 30 11:21:06 2018 +0200
    17.2 +++ b/test/src/TestDriver.cc	Wed May 30 18:31:23 2018 +0200
    17.3 @@ -16,57 +16,27 @@
    17.4  
    17.5  using namespace std;
    17.6  
    17.7 -string common_test_home = "./pEp_test_home";
    17.8 +string common_test_home;
    17.9  
   17.10  void usage() {
   17.11      throw std::runtime_error("Bad usage. Fix me, you loser developer.");
   17.12  }
   17.13  
   17.14 -int util_delete_filepath(const char *filepath, 
   17.15 -                         const struct stat *file_stat, 
   17.16 -                         int ftw_info, 
   17.17 -                         struct FTW * ftw_struct) {
   17.18 -    int retval = 0;
   17.19 -    switch (ftw_info) {
   17.20 -        case FTW_DP:
   17.21 -            retval = rmdir(filepath);
   17.22 -            break;
   17.23 -        case FTW_F:
   17.24 -        case FTW_SLN:
   17.25 -            retval = unlink(filepath);
   17.26 -            break;    
   17.27 -        default:
   17.28 -            retval = -1;
   17.29 -    }
   17.30 -    
   17.31 -    return retval;
   17.32 -}
   17.33 -
   17.34 -
   17.35  int main(int argc, const char** argv) {
   17.36      const int MIN_ARGC = 1;
   17.37      if (argc < MIN_ARGC)
   17.38          usage();
   17.39      
   17.40 -    struct stat dirchk;
   17.41 -    if (stat(common_test_home.c_str(), &dirchk) == 0) {
   17.42 -        if (!S_ISDIR(dirchk.st_mode))
   17.43 -            throw std::runtime_error(("The test directory, " + common_test_home + "exists, but is not a directory.").c_str()); 
   17.44 -                    
   17.45 -        struct stat buf;
   17.46 +    size_t BUF_MAX_PATHLEN = 4097; 
   17.47 +    char buf[BUF_MAX_PATHLEN];// Linux max path size...
   17.48 +                          
   17.49 +    string curr_wd = getcwd(buf, BUF_MAX_PATHLEN);
   17.50 +    
   17.51 +    if (curr_wd.empty())
   17.52 +        throw std::runtime_error("Error grabbing current working directory"); 
   17.53  
   17.54 -        if (stat(common_test_home.c_str(), &buf) == 0) {
   17.55 -            cout << common_test_home << " exists. We'll recursively delete. We hope we're not horking your whole system..." << endl;
   17.56 -            int success = nftw((common_test_home + "/.").c_str(), util_delete_filepath, 100, FTW_DEPTH);
   17.57 -        }
   17.58 -    }
   17.59 -    else {
   17.60 -        int errchk = mkdir(common_test_home.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
   17.61 -        cout << errchk << endl;
   17.62 -        if (errchk != 0)
   17.63 -            throw std::runtime_error("Error creating a test directory.");
   17.64 -    }
   17.65 -                    
   17.66 +    common_test_home = curr_wd + "/pEp_test_home";    
   17.67 +    
   17.68      EngineTestSuite* test_runner = new EngineTestSuite("MainTestDriver", common_test_home);
   17.69  
   17.70      std::vector<Test::Suite*> suites_to_run;
    18.1 --- a/test/src/engine_tests/AppleMailTests.cc	Wed May 30 11:21:06 2018 +0200
    18.2 +++ b/test/src/engine_tests/AppleMailTests.cc	Wed May 30 18:31:23 2018 +0200
    18.3 @@ -27,7 +27,8 @@
    18.4  
    18.5  AppleMailTests::AppleMailTests(string suitename, string test_home_dir) : 
    18.6      EngineTestSessionSuite::EngineTestSessionSuite(suitename, test_home_dir) {            
    18.7 -    TEST_ADD(AppleMailTests::check_apple_mail);
    18.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("AppleMailTests::check_apple_mail"),
    18.9 +                                                                      static_cast<Func>(&AppleMailTests::check_apple_mail)));
   18.10  }
   18.11  
   18.12  void AppleMailTests::check_apple_mail() {
    19.1 --- a/test/src/engine_tests/CaseAndDotAddressTests.cc	Wed May 30 11:21:06 2018 +0200
    19.2 +++ b/test/src/engine_tests/CaseAndDotAddressTests.cc	Wed May 30 18:31:23 2018 +0200
    19.3 @@ -19,7 +19,8 @@
    19.4  
    19.5  CaseAndDotAddressTests::CaseAndDotAddressTests(string suitename, string test_home_dir) : 
    19.6      EngineTestSessionSuite::EngineTestSessionSuite(suitename, test_home_dir) {            
    19.7 -    TEST_ADD(CaseAndDotAddressTests::check_case_and_dot_address);
    19.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("CaseAndDotAddressTests::check_case_and_dot_address"),
    19.9 +                                                                      static_cast<Func>(&CaseAndDotAddressTests::check_case_and_dot_address)));
   19.10  }
   19.11  
   19.12  void CaseAndDotAddressTests::check_case_and_dot_address() {
    20.1 --- a/test/src/engine_tests/CrashdumpTests.cc	Wed May 30 11:21:06 2018 +0200
    20.2 +++ b/test/src/engine_tests/CrashdumpTests.cc	Wed May 30 18:31:23 2018 +0200
    20.3 @@ -13,7 +13,8 @@
    20.4  
    20.5  CrashdumpTests::CrashdumpTests(string suitename, string test_home_dir) :
    20.6      EngineTestSessionSuite::EngineTestSessionSuite(suitename, test_home_dir) {
    20.7 -    TEST_ADD(CrashdumpTests::check_crashdump);
    20.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("CrashdumpTests::check_crashdump"),
    20.9 +                                                                      static_cast<Func>(&CrashdumpTests::check_crashdump)));
   20.10  }
   20.11  
   20.12  void CrashdumpTests::check_crashdump() {
    21.1 --- a/test/src/engine_tests/EncryptMissingPrivateKeyTests.cc	Wed May 30 11:21:06 2018 +0200
    21.2 +++ b/test/src/engine_tests/EncryptMissingPrivateKeyTests.cc	Wed May 30 18:31:23 2018 +0200
    21.3 @@ -6,6 +6,7 @@
    21.4  #include <fstream>
    21.5  #include <string>
    21.6  #include <cstring> // for strcmp()
    21.7 +#include <assert.h>
    21.8  #include <cpptest.h>
    21.9  
   21.10  #include "blacklist.h"
   21.11 @@ -29,6 +30,13 @@
   21.12                                                                        static_cast<Func>(&EncryptMissingPrivateKeyTests::check_encrypt_missing_private_key)));
   21.13  }
   21.14  
   21.15 +void EncryptMissingPrivateKeyTests::setup() {
   21.16 +    EngineTestSessionSuite::setup();
   21.17 +    string recip_key = slurp("test_keys/pub/pep-test-bob-0xC9C2EE39_pub.asc");
   21.18 +    PEP_STATUS status = import_key(session, recip_key.c_str(), recip_key.size(), NULL);
   21.19 +    assert(status == PEP_STATUS_OK);
   21.20 +}
   21.21 +
   21.22  void EncryptMissingPrivateKeyTests::check_encrypt_missing_private_key() {
   21.23      
   21.24      pEp_identity* no_key_identity = new_identity("blacklistself@kgrothoff.org",
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/test/src/engine_tests/IntegrityTests.do.not.run.before.ENGINE-434	Wed May 30 18:31:23 2018 +0200
    22.3 @@ -0,0 +1,279 @@
    22.4 +// This file is under GNU General Public License 3.0
    22.5 +// see LICENSE.txt
    22.6 +
    22.7 +#include <stdlib.h>
    22.8 +#include <string>
    22.9 +#include <assert.h>
   22.10 +#include <unistd.h>
   22.11 +
   22.12 +#include "pEpEngine.h"
   22.13 +#include "message_api.h"
   22.14 +
   22.15 +#include "test_util.h"
   22.16 +
   22.17 +#include "EngineTestIndividualSuite.h"
   22.18 +#include "IntegrityTests.h"
   22.19 +
   22.20 +using namespace std;
   22.21 +
   22.22 +IntegrityTests::IntegrityTests(string suitename, string test_home_dir) :
   22.23 +    EngineTestIndividualSuite::EngineTestIndividualSuite(suitename, test_home_dir) {
   22.24 +    recip_fpr = "9D8047989841CF4207EA152A4ACAF735F390A40D";
   22.25 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unsigned_PGP_MIME"),
   22.26 +                                                                      static_cast<Func>(&IntegrityTests::check_unsigned_PGP_MIME)));
   22.27 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unsigned_PGP_MIME_attached_key"),
   22.28 +                                                                      static_cast<Func>(&IntegrityTests::check_unsigned_PGP_MIME_attached_key)));
   22.29 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unsigned_PGP_MIME_w_render_flag"),
   22.30 +                                                                      static_cast<Func>(&IntegrityTests::check_unsigned_PGP_MIME_w_render_flag)));
   22.31 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_known_good_signed_PGP_MIME"),
   22.32 +                                                                      static_cast<Func>(&IntegrityTests::check_known_good_signed_PGP_MIME)));
   22.33 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_known_good_signed_PGP_MIME_attached_key"),
   22.34 +                                                                      static_cast<Func>(&IntegrityTests::check_known_good_signed_PGP_MIME_attached_key)));
   22.35 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unknown_signed_PGP_MIME_no_key"),
   22.36 +                                                                      static_cast<Func>(&IntegrityTests::check_unknown_signed_PGP_MIME_no_key)));
   22.37 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unknown_signed_PGP_MIME_attached_key"),
   22.38 +                                                                      static_cast<Func>(&IntegrityTests::check_unknown_signed_PGP_MIME_attached_key)));
   22.39 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unsigned_PGP_MIME_corrupted"),
   22.40 +                                                                      static_cast<Func>(&IntegrityTests::check_unsigned_PGP_MIME_corrupted)));
   22.41 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_signed_PGP_MIME_corrupted"),
   22.42 +                                                                      static_cast<Func>(&IntegrityTests::check_signed_PGP_MIME_corrupted)));
   22.43 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unsigned_2_0"),
   22.44 +                                                                      static_cast<Func>(&IntegrityTests::check_unsigned_2_0)));
   22.45 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unknown_signed_2_0_no_key"),
   22.46 +                                                                      static_cast<Func>(&IntegrityTests::check_unknown_signed_2_0_no_key)));
   22.47 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unknown_signed_2_0_no_key_known_signer"),
   22.48 +                                                                      static_cast<Func>(&IntegrityTests::check_unknown_signed_2_0_no_key_known_signer)));                                                                                                                                        
   22.49 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unknown_signed_2_0_key_attached"),
   22.50 +                                                                      static_cast<Func>(&IntegrityTests::check_unknown_signed_2_0_key_attached)));  
   22.51 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_integrity"),
   22.52 +                                                                      static_cast<Func>(&IntegrityTests::check_integrity)));
   22.53 +}
   22.54 +
   22.55 +void IntegrityTests::setup() {
   22.56 +    EngineTestIndividualSuite::setup();
   22.57 +    string recip_key = slurp("test_keys/pub/integrity_test_recip_0-0xF390A40D_pub.asc");
   22.58 +    PEP_STATUS status = import_key(session, recip_key.c_str(), recip_key.size(), NULL);
   22.59 +    assert(status == PEP_STATUS_OK);
   22.60 +    recip_key = "";
   22.61 +    string priv_key = slurp("test_keys/priv/integrity_test_recip_0-0xF390A40D_priv.asc");
   22.62 +    // cout << priv_key << endl;
   22.63 +    // cout << "GNUPGHOME is " << getenv("GNUPGHOME") << endl;
   22.64 +    status = import_key(session, priv_key.c_str(), priv_key.size(), NULL);
   22.65 +    assert(status == PEP_STATUS_OK);
   22.66 +    // stringlist_t* debug_keylist = NULL;
   22.67 +    // status = find_private_keys(session, recip_fpr, &debug_keylist);
   22.68 +    // assert(debug_keylist);
   22.69 +    
   22.70 +    pEp_identity* me = new_identity("integrity_test_recip@darthmama.org", recip_fpr, PEP_OWN_USERID, "Integrity Test Recipient");
   22.71 +    assert(me != NULL);
   22.72 +    status = set_own_key(session, me, recip_fpr);
   22.73 +    assert(status == PEP_STATUS_OK);
   22.74 +
   22.75 +    message = "";
   22.76 +    decrypted_msg = NULL;
   22.77 +    decrypt_status = PEP_STATUS_OK;
   22.78 +    rating = PEP_rating_undefined;
   22.79 +    flags = 0;
   22.80 +    keylist = NULL;
   22.81 +    dummy_ignore = NULL;
   22.82 +}
   22.83 +
   22.84 +void IntegrityTests::tear_down() {
   22.85 +    free_stringlist(keylist);
   22.86 +    free(decrypted_msg);
   22.87 +    EngineTestIndividualSuite::tear_down();
   22.88 +}
   22.89 +
   22.90 +/*
   22.91 +Type            Error State             Render              Status Code
   22.92 +---------------------------------------------------------------------------------------------------------------
   22.93 +inline          ALL                     Yes, if present     Whatever GPG gives us
   22.94 +PGP/MIME        Unsigned                No                  DECRYPTED_BUT_UNSIGNED (grey)
   22.95 +                Signed, no key          Yes                 NO_KEY_FOR_SIGNER
   22.96 +                Bad sig                 No                  SIGNATURE_DOES_NOT_MATCH
   22.97 +Message 1.0     Unsigned                No                  MODIFICATION_DETECTED
   22.98 +                Signed, no key          No                  MODIFICATION_DETECTED
   22.99 +                Bad sig                 No                  SIGNATURE_DOES_NOT_MATCH
  22.100 +Message 2.0     Unsigned                No                  MODIFICATION_DETECTED (red)
  22.101 +                Signed, no key          No                  MODIFICATION_DETECTED  (red)
  22.102 +                Bad sig                 No                  SIGNATURE_DOES_NOT_MATCH
  22.103 +
  22.104 +*/
  22.105 +
  22.106 +void IntegrityTests::check_known_good_signed_PGP_MIME() {
  22.107 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Signed no attach PGP_MIME.eml", message,
  22.108 +                                             "test_keys/pub/integrity_test_signer_0-0xFF26631A_pub.asc"));
  22.109 +
  22.110 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  22.111 +                                          &rating, &flags, &dummy_ignore);
  22.112 +
  22.113 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_STATUS_OK", tl_status_string(decrypt_status));
  22.114 +    TEST_ASSERT_MSG(decrypt_status == PEP_STATUS_OK, failed_msg_buf);
  22.115 +    TEST_ASSERT(decrypted_msg != NULL);
  22.116 +    TEST_ASSERT(rating == PEP_rating_reliable);
  22.117 +}
  22.118 +
  22.119 +void IntegrityTests::check_known_good_signed_PGP_MIME_attached_key() {
  22.120 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Signed attached key PGP_MIME.eml", message,
  22.121 +                                             NULL));
  22.122 +
  22.123 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  22.124 +                                          &rating, &flags, &dummy_ignore);
  22.125 +
  22.126 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_STATUS_OK", tl_status_string(decrypt_status));
  22.127 +    TEST_ASSERT_MSG(decrypt_status == PEP_STATUS_OK, failed_msg_buf);
  22.128 +    TEST_ASSERT(decrypted_msg != NULL);
  22.129 +    TEST_ASSERT(rating == PEP_rating_reliable);
  22.130 +}
  22.131 +
  22.132 +void IntegrityTests::check_unsigned_PGP_MIME() {
  22.133 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Unsigned from PGP_MIME_noattach.eml", message,
  22.134 +                                             "test_keys/pub/integrity_test_signer_0-0xFF26631A_pub.asc"));
  22.135 +
  22.136 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  22.137 +                                          &rating, &flags, &dummy_ignore);
  22.138 +
  22.139 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_DECRYPTED_BUT_UNSIGNED", tl_status_string(decrypt_status));
  22.140 +    TEST_ASSERT_MSG(decrypt_status == PEP_DECRYPTED_BUT_UNSIGNED, failed_msg_buf);
  22.141 +    TEST_ASSERT(decrypted_msg == NULL);
  22.142 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Rating == %s, should be PEP_rating_unreliable", tl_rating_string(rating));
  22.143 +    TEST_ASSERT_MSG(rating == PEP_rating_unreliable, failed_msg_buf);
  22.144 +}
  22.145 +
  22.146 +void IntegrityTests::check_unsigned_PGP_MIME_attached_key() {
  22.147 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Unsigned from PGP_MIME_attach.eml", message,
  22.148 +                                             NULL));
  22.149 +
  22.150 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  22.151 +                                          &rating, &flags, &dummy_ignore);
  22.152 +
  22.153 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_DECRYPTED_BUT_UNSIGNED", tl_status_string(decrypt_status));
  22.154 +    TEST_ASSERT_MSG(decrypt_status == PEP_DECRYPTED_BUT_UNSIGNED, failed_msg_buf);
  22.155 +    TEST_ASSERT(decrypted_msg == NULL);
  22.156 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Rating == %s, should be PEP_rating_unreliable", tl_rating_string(rating));
  22.157 +    TEST_ASSERT_MSG(rating == PEP_rating_unreliable, failed_msg_buf);
  22.158 +}
  22.159 +
  22.160 +void IntegrityTests::check_unsigned_PGP_MIME_w_render_flag() {
  22.161 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Unsigned from PGP_MIME_noattach.eml", message,
  22.162 +                                             "test_keys/pub/integrity_test_signer_0-0xFF26631A_pub.asc"));
  22.163 +    flags |= PEP_decrypt_deliver_pgpmime_badsigned;
  22.164 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  22.165 +                                          &rating, &flags, &dummy_ignore);
  22.166 +
  22.167 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_DECRYPTED_BUT_UNSIGNED", tl_status_string(decrypt_status));
  22.168 +    TEST_ASSERT_MSG(decrypt_status == PEP_DECRYPTED_BUT_UNSIGNED, failed_msg_buf);
  22.169 +    TEST_ASSERT(decrypted_msg != NULL);
  22.170 +    TEST_ASSERT(rating == PEP_rating_unreliable);
  22.171 +}
  22.172 +
  22.173 +
  22.174 +void IntegrityTests::check_unknown_signed_PGP_MIME_no_key() {
  22.175 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Signed PGP_MIME by unknown signer no attach.eml", message,
  22.176 +                                             NULL));
  22.177 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  22.178 +                                          &rating, &flags, &dummy_ignore);
  22.179 +
  22.180 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_DECRYPT_NO_KEY_FOR_SIGNER", tl_status_string(decrypt_status));
  22.181 +    TEST_ASSERT_MSG(decrypt_status == PEP_DECRYPT_NO_KEY_FOR_SIGNER, failed_msg_buf);
  22.182 +    TEST_ASSERT(decrypted_msg != NULL);
  22.183 +    TEST_ASSERT(rating == PEP_rating_unreliable);
  22.184 +}
  22.185 +
  22.186 +void IntegrityTests::check_unknown_signed_PGP_MIME_attached_key() {
  22.187 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Signed PGP_MIME by unknown signer attach.eml", message,
  22.188 +                                             NULL));
  22.189 +
  22.190 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  22.191 +                                          &rating, &flags, &dummy_ignore);
  22.192 +
  22.193 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_STATUS_OK", tl_status_string(decrypt_status));
  22.194 +    TEST_ASSERT_MSG(decrypt_status == PEP_STATUS_OK, failed_msg_buf);
  22.195 +    TEST_ASSERT(decrypted_msg != NULL);
  22.196 +    TEST_ASSERT(rating == PEP_rating_reliable);
  22.197 +}
  22.198 +
  22.199 +// FIXME: we need cleverer attacked mails
  22.200 +void IntegrityTests::check_unsigned_PGP_MIME_corrupted() {
  22.201 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Unsigned from PGP_MIME_attach_corrupted.eml", message,
  22.202 +                                             NULL));
  22.203 +
  22.204 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  22.205 +                                          &rating, &flags, &dummy_ignore);
  22.206 +
  22.207 +//    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_STATUS_OK", tl_status_string(decrypt_status));
  22.208 +//    TEST_ASSERT_MSG(decrypt_status == PEP_STATUS_OK, failed_msg_buf);
  22.209 +    TEST_ASSERT(decrypt_status != PEP_STATUS_OK && decrypt_status != PEP_DECRYPTED);
  22.210 +    TEST_ASSERT(decrypted_msg == NULL);
  22.211 +}
  22.212 +
  22.213 +void IntegrityTests::check_signed_PGP_MIME_corrupted() {
  22.214 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Signed attached key PGP_MIME_corrupted.eml", message,
  22.215 +                                             NULL));
  22.216 +
  22.217 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  22.218 +                                          &rating, &flags, &dummy_ignore);
  22.219 +
  22.220 +//    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_STATUS_OK", tl_status_string(decrypt_status));
  22.221 +//    TEST_ASSERT_MSG(decrypt_status == PEP_STATUS_OK, failed_msg_buf);
  22.222 +    TEST_ASSERT(decrypt_status != PEP_STATUS_OK && decrypt_status != PEP_DECRYPTED);
  22.223 +    TEST_ASSERT(decrypted_msg == NULL);
  22.224 +}
  22.225 +
  22.226 +void IntegrityTests::check_unsigned_2_0() {
  22.227 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/fake_2.0_unsigned.eml", message,
  22.228 +                                             NULL));
  22.229 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  22.230 +                                          &rating, &flags, &dummy_ignore);
  22.231 +
  22.232 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_DECRYPT_MODIFICATION_DETECTED", tl_status_string(decrypt_status));
  22.233 +    TEST_ASSERT_MSG(decrypt_status == PEP_DECRYPT_MODIFICATION_DETECTED, failed_msg_buf);
  22.234 +    TEST_ASSERT(decrypted_msg == NULL);
  22.235 +    TEST_ASSERT(rating == PEP_rating_under_attack);
  22.236 +}
  22.237 +
  22.238 +void IntegrityTests::check_unknown_signed_2_0_no_key() {
  22.239 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/fake_2.0_signed_no_key_attached.eml", message,
  22.240 +                                             NULL));
  22.241 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  22.242 +                                          &rating, &flags, &dummy_ignore);
  22.243 +
  22.244 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_DECRYPT_MODIFICATION_DETECTED", tl_status_string(decrypt_status));
  22.245 +    TEST_ASSERT_MSG(decrypt_status == PEP_DECRYPT_MODIFICATION_DETECTED, failed_msg_buf);
  22.246 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypted msg should have been NULL, but starts with %s", decrypted_msg);
  22.247 +    TEST_ASSERT_MSG(decrypted_msg == NULL, failed_msg_buf);
  22.248 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Rating == %s, should be PEP_rating_under_attack", tl_rating_string(rating));
  22.249 +    TEST_ASSERT_MSG(rating == PEP_rating_under_attack, failed_msg_buf);
  22.250 +}
  22.251 +
  22.252 +void IntegrityTests::check_unknown_signed_2_0_no_key_known_signer() {
  22.253 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/fake_2.0_signed_no_key_attached.eml", message,
  22.254 +                                             "test_keys/pub/integrity_test_signer_0-0xFF26631A_pub.asc"));
  22.255 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  22.256 +                                          &rating, &flags, &dummy_ignore);
  22.257 +
  22.258 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_DECRYPT_MODIFICATION_DETECTED", tl_status_string(decrypt_status));
  22.259 +    TEST_ASSERT_MSG(decrypt_status == PEP_DECRYPT_MODIFICATION_DETECTED, failed_msg_buf);
  22.260 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypted msg should have been NULL, but starts with %s", decrypted_msg);
  22.261 +    TEST_ASSERT_MSG(decrypted_msg == NULL, failed_msg_buf);
  22.262 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Rating == %s, should be PEP_rating_under_attack", tl_rating_string(rating));
  22.263 +    TEST_ASSERT_MSG(rating == PEP_rating_under_attack, failed_msg_buf);
  22.264 +}
  22.265 +
  22.266 +
  22.267 +void IntegrityTests::check_unknown_signed_2_0_key_attached() {
  22.268 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/fake_2.0_good.eml", message,
  22.269 +                                             NULL));
  22.270 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  22.271 +                                          &rating, &flags, &dummy_ignore);
  22.272 +
  22.273 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_STATUS_OK", tl_status_string(decrypt_status));
  22.274 +    TEST_ASSERT_MSG(decrypt_status == PEP_STATUS_OK, failed_msg_buf);
  22.275 +    TEST_ASSERT(decrypted_msg != NULL);
  22.276 +    TEST_ASSERT(rating == PEP_rating_reliable);
  22.277 +}
  22.278 +
  22.279 +
  22.280 +void IntegrityTests::check_integrity() {
  22.281 +    TEST_ASSERT(true);
  22.282 +}
    23.1 --- a/test/src/engine_tests/MimeTests.cc	Wed May 30 11:21:06 2018 +0200
    23.2 +++ b/test/src/engine_tests/MimeTests.cc	Wed May 30 18:31:23 2018 +0200
    23.3 @@ -69,18 +69,6 @@
    23.4  
    23.5  void MimeTests::check_mime() {
    23.6  
    23.7 -    cout << "\n*** mime_test ***\n\n";
    23.8 -
    23.9 -    PEP_SESSION session;
   23.10 -    
   23.11 -    cout << "calling init()\n";
   23.12 -    PEP_STATUS status1 = init(&session);   
   23.13 -    TEST_ASSERT_MSG((status1 == PEP_STATUS_OK), "status1 == PEP_STATUS_OK");
   23.14 -    TEST_ASSERT_MSG((session), "session");
   23.15 -    cout << "init() completed.\n";
   23.16 -
   23.17 -    // mime test code
   23.18 -
   23.19      // testing multipart/alternative
   23.20  
   23.21      message *msg2 = new_message(PEP_dir_incoming);
    24.1 --- a/test/src/engine_tests/PepSubjectReceivedTests.cc	Wed May 30 11:21:06 2018 +0200
    24.2 +++ b/test/src/engine_tests/PepSubjectReceivedTests.cc	Wed May 30 18:31:23 2018 +0200
    24.3 @@ -64,6 +64,7 @@
    24.4      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
    24.5      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
    24.6      final_ptr = msg_ptr;
    24.7 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
    24.8      flags = 0;
    24.9      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   24.10      final_ptr = dest_msg ? dest_msg : msg_ptr;
   24.11 @@ -97,6 +98,7 @@
   24.12      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   24.13      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   24.14      final_ptr = msg_ptr;
   24.15 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   24.16      flags = 0;
   24.17      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   24.18      final_ptr = dest_msg ? dest_msg : msg_ptr;
   24.19 @@ -197,6 +199,7 @@
   24.20      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   24.21      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   24.22      final_ptr = msg_ptr;
   24.23 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   24.24      flags = 0;
   24.25      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   24.26      final_ptr = dest_msg ? dest_msg : msg_ptr;
   24.27 @@ -230,6 +233,7 @@
   24.28      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   24.29      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   24.30      final_ptr = msg_ptr;
   24.31 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   24.32      flags = 0;
   24.33      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   24.34      final_ptr = dest_msg ? dest_msg : msg_ptr;
   24.35 @@ -238,7 +242,7 @@
   24.36      cout << "longmsg: " << final_ptr->longmsg << endl << endl;
   24.37      cout << "longmsg_formatted: " << (final_ptr->longmsg_formatted ? final_ptr->longmsg_formatted : "(empty)") << endl << endl;
   24.38  
   24.39 -    TEST_ASSERT_MSG((strcmp("p≡p", final_ptr->shortmsg) == 0), "strcmp(\"p≡p\", final_ptr->shortmsg) == 0");
   24.40 +    TEST_ASSERT_MSG((strcmp("pEp", final_ptr->shortmsg) == 0), "strcmp(\"pEp\", final_ptr->shortmsg) == 0");
   24.41  
   24.42      cout << "Test 3: Subject remains intact as desired." << endl << endl;
   24.43  
   24.44 @@ -264,6 +268,7 @@
   24.45      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   24.46      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   24.47      final_ptr = msg_ptr;
   24.48 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   24.49      flags = 0;
   24.50      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   24.51      final_ptr = dest_msg ? dest_msg : msg_ptr;
   24.52 @@ -297,6 +302,7 @@
   24.53      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   24.54      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   24.55      final_ptr = msg_ptr;
   24.56 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   24.57      flags = 0;
   24.58      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   24.59      final_ptr = dest_msg ? dest_msg : msg_ptr;
   24.60 @@ -330,6 +336,7 @@
   24.61      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   24.62      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   24.63      final_ptr = msg_ptr;
   24.64 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   24.65      flags = 0;
   24.66      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   24.67      final_ptr = dest_msg ? dest_msg : msg_ptr;
   24.68 @@ -363,6 +370,7 @@
   24.69      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   24.70      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   24.71      final_ptr = msg_ptr;
   24.72 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   24.73      flags = 0;
   24.74      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   24.75      final_ptr = dest_msg ? dest_msg : msg_ptr;
   24.76 @@ -397,6 +405,7 @@
   24.77      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   24.78      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   24.79      final_ptr = msg_ptr;
   24.80 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   24.81      flags = 0;
   24.82      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   24.83      final_ptr = dest_msg ? dest_msg : msg_ptr;
   24.84 @@ -431,6 +440,7 @@
   24.85      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   24.86      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   24.87      final_ptr = msg_ptr;
   24.88 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   24.89      flags = 0;
   24.90      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   24.91      final_ptr = dest_msg ? dest_msg : msg_ptr;
   24.92 @@ -464,6 +474,7 @@
   24.93      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   24.94      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   24.95      final_ptr = msg_ptr;
   24.96 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   24.97      flags = 0;
   24.98      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   24.99      final_ptr = dest_msg ? dest_msg : msg_ptr;
    25.1 --- a/test/src/engine_tests/RevokeRegenAttachTests.cc	Wed May 30 11:21:06 2018 +0200
    25.2 +++ b/test/src/engine_tests/RevokeRegenAttachTests.cc	Wed May 30 18:31:23 2018 +0200
    25.3 @@ -7,13 +7,16 @@
    25.4  #include <time.h>
    25.5  #include <iostream>
    25.6  #include <fstream>
    25.7 +#include <assert.h>
    25.8  
    25.9  #include "pEpEngine.h"
   25.10  #include "platform.h"
   25.11  #include "mime.h"
   25.12  #include "message_api.h"
   25.13  
   25.14 -#include "cpptest.h"
   25.15 +#include "test_util.h"
   25.16 +
   25.17 +#include <cpptest.h>
   25.18  #include "EngineTestSessionSuite.h"
   25.19  #include "RevokeRegenAttachTests.h"
   25.20  
   25.21 @@ -25,6 +28,14 @@
   25.22                                                                        static_cast<Func>(&RevokeRegenAttachTests::check_revoke_regen_attach)));
   25.23  }
   25.24  
   25.25 +void RevokeRegenAttachTests::setup() {
   25.26 +    EngineTestSessionSuite::setup();
   25.27 +    string recip_key = slurp("test_keys/pub/pep-test-alice-0x6FF00E97_pub.asc");
   25.28 +    PEP_STATUS status = import_key(session, recip_key.c_str(), recip_key.size(), NULL);
   25.29 +    assert(status == PEP_STATUS_OK);
   25.30 +}
   25.31 +
   25.32 +
   25.33  void RevokeRegenAttachTests::check_revoke_regen_attach() {
   25.34      PEP_STATUS status = PEP_STATUS_OK;   
   25.35  
    26.1 --- a/test/src/engine_tests/SequenceTests.cc	Wed May 30 11:21:06 2018 +0200
    26.2 +++ b/test/src/engine_tests/SequenceTests.cc	Wed May 30 18:31:23 2018 +0200
    26.3 @@ -15,7 +15,8 @@
    26.4  
    26.5  SequenceTests::SequenceTests(string suitename, string test_home_dir) : 
    26.6      EngineTestSessionSuite::EngineTestSessionSuite(suitename, test_home_dir) {            
    26.7 -    TEST_ADD(SequenceTests::check_sequences);
    26.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SequenceTests::check_sequences"),
    26.9 +                                                                      static_cast<Func>(&SequenceTests::check_sequences)));
   26.10  }
   26.11  
   26.12  void SequenceTests::check_sequences() {
    27.1 --- a/test/src/engine_tests/StringlistTests.cc	Wed May 30 11:21:06 2018 +0200
    27.2 +++ b/test/src/engine_tests/StringlistTests.cc	Wed May 30 18:31:23 2018 +0200
    27.3 @@ -16,7 +16,8 @@
    27.4  
    27.5  StringlistTests::StringlistTests(string suitename, string test_home_dir) : 
    27.6      EngineTestSuite::EngineTestSuite(suitename, test_home_dir) {            
    27.7 -    TEST_ADD(StringlistTests::check_stringlists);
    27.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("StringlistTests::check_stringlists"),
    27.9 +                                                                      static_cast<Func>(&StringlistTests::check_stringlists)));
   27.10  }
   27.11  
   27.12  void StringlistTests::check_stringlists() {
    28.1 --- a/test/src/engine_tests/StringpairListTests.cc	Wed May 30 11:21:06 2018 +0200
    28.2 +++ b/test/src/engine_tests/StringpairListTests.cc	Wed May 30 18:31:23 2018 +0200
    28.3 @@ -17,7 +17,8 @@
    28.4  
    28.5  StringpairListTests::StringpairListTests(string suitename, string test_home_dir) : 
    28.6      EngineTestSuite::EngineTestSuite(suitename, test_home_dir) {            
    28.7 -    TEST_ADD(StringpairListTests::check_stringpair_lists);
    28.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("StringpairListTests::check_stringpair_lists"),
    28.9 +                                                                      static_cast<Func>(&StringpairListTests::check_stringpair_lists)));
   28.10  }
   28.11  
   28.12  bool StringpairListTests::test_stringpair_equals(stringpair_t* val1, stringpair_t* val2) {
    29.1 --- a/test/src/engine_tests/TrustManipulationTests.cc	Wed May 30 11:21:06 2018 +0200
    29.2 +++ b/test/src/engine_tests/TrustManipulationTests.cc	Wed May 30 18:31:23 2018 +0200
    29.3 @@ -19,7 +19,8 @@
    29.4  
    29.5  TrustManipulationTests::TrustManipulationTests(string suitename, string test_home_dir) : 
    29.6      EngineTestSessionSuite::EngineTestSessionSuite(suitename, test_home_dir) {            
    29.7 -    TEST_ADD(TrustManipulationTests::check_trust_manipulation);
    29.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("TrustManipulationTests::check_trust_manipulation"),
    29.9 +                                                                      static_cast<Func>(&TrustManipulationTests::check_trust_manipulation)));
   29.10  }
   29.11  
   29.12  void TrustManipulationTests::check_trust_manipulation() {
    30.1 --- a/test/src/engine_tests/TrustwordsTests.cc	Wed May 30 11:21:06 2018 +0200
    30.2 +++ b/test/src/engine_tests/TrustwordsTests.cc	Wed May 30 18:31:23 2018 +0200
    30.3 @@ -14,7 +14,8 @@
    30.4  
    30.5  TrustwordsTests::TrustwordsTests(string suitename, string test_home_dir) : 
    30.6      EngineTestSessionSuite::EngineTestSessionSuite(suitename, test_home_dir) {            
    30.7 -    TEST_ADD(TrustwordsTests::check_trustwords);
    30.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("TrustwordsTests::check_trustwords"),
    30.9 +                                                                      static_cast<Func>(&TrustwordsTests::check_trustwords)));
   30.10  }
   30.11  
   30.12  void TrustwordsTests::check_trustwords() {
    31.1 --- a/test/src/engine_tests/UserIDAliasTests.cc	Wed May 30 11:21:06 2018 +0200
    31.2 +++ b/test/src/engine_tests/UserIDAliasTests.cc	Wed May 30 18:31:23 2018 +0200
    31.3 @@ -19,7 +19,8 @@
    31.4  
    31.5  UserIDAliasTests::UserIDAliasTests(string suitename, string test_home_dir) : 
    31.6      EngineTestSessionSuite::EngineTestSessionSuite(suitename, test_home_dir) {            
    31.7 -    TEST_ADD(UserIDAliasTests::check_userid_aliases);
    31.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("UserIDAliasTests::check_userid_aliases"),
    31.9 +                                                                      static_cast<Func>(&UserIDAliasTests::check_userid_aliases)));
   31.10  }
   31.11  
   31.12  void UserIDAliasTests::check_userid_aliases() {
    32.1 --- a/test/src/util/test_util.cc	Wed May 30 11:21:06 2018 +0200
    32.2 +++ b/test/src/util/test_util.cc	Wed May 30 18:31:23 2018 +0200
    32.3 @@ -2,9 +2,16 @@
    32.4  #include "pEpEngine.h"
    32.5  #include "pEp_internal.h"
    32.6  #include "message_api.h"
    32.7 +
    32.8  #include <fstream>
    32.9  #include <sstream>
   32.10  #include <stdexcept>
   32.11 +#include <stdlib.h>
   32.12 +#include <sys/stat.h>
   32.13 +#include <errno.h>
   32.14 +#include <stdlib.h>
   32.15 +#include <unistd.h>
   32.16 +#include <ftw.h>
   32.17  
   32.18  char* str_to_lower(const char* str) {
   32.19      if (!str)
   32.20 @@ -137,6 +144,12 @@
   32.21              return "PEP_DECRYPT_NO_KEY";
   32.22          case PEP_DECRYPT_SIGNATURE_DOES_NOT_MATCH:
   32.23              return "PEP_DECRYPT_SIGNATURE_DOES_NOT_MATCH";
   32.24 +//        case PEP_DECRYPTED_BUT_UNSIGNED:
   32.25 +//            return "PEP_DECRYPTED_BUT_UNSIGNED";
   32.26 +//        case PEP_DECRYPT_MODIFICATION_DETECTED:
   32.27 +//            return "PEP_DECRYPT_MODIFICATION_DETECTED";
   32.28 +//        case PEP_DECRYPT_NO_KEY_FOR_SIGNER:
   32.29 +//            return "PEP_DECRYPT_NO_KEY_FOR_SIGNER";
   32.30          case PEP_VERIFY_NO_KEY:
   32.31              return "PEP_VERIFY_NO_KEY";
   32.32          case PEP_VERIFIED_AND_TRUSTED:
   32.33 @@ -204,7 +217,7 @@
   32.34          case PEP_OUT_OF_MEMORY:
   32.35              return "PEP_OUT_OF_MEMORY";
   32.36          case PEP_UNKNOWN_ERROR:
   32.37 -            return "PEP_UNKNOWN_ERROR";
   32.38 +            return "PEP_UNKNOWN_ERROR";    
   32.39          default:
   32.40   
   32.41              return "PEP_STATUS_OMGWTFBBQ - This means you're using a status the test lib doesn't know about!";
   32.42 @@ -317,3 +330,36 @@
   32.43              return "PEP_ct_OMGWTFBBQ\n\nIn other words, comm type is invalid. Either something's corrupt or a new ct value has been added to the enum but not to the test function.";
   32.44      }
   32.45  }
   32.46 +
   32.47 +bool slurp_message_and_import_key(PEP_SESSION session, const char* message_fname, std::string& message, const char* key_filename) {
   32.48 +    message = slurp(message_fname);
   32.49 +    if (key_filename) {
   32.50 +        std::string keyfile = slurp(key_filename);
   32.51 +        if (import_key(session, keyfile.c_str(), keyfile.size(), NULL) != PEP_STATUS_OK)
   32.52 +            return false;
   32.53 +    }
   32.54 +    return true;
   32.55 +}
   32.56 +
   32.57 +
   32.58 +
   32.59 +int util_delete_filepath(const char *filepath, 
   32.60 +                         const struct stat *file_stat, 
   32.61 +                         int ftw_info, 
   32.62 +                         struct FTW * ftw_struct) {
   32.63 +    int retval = 0;
   32.64 +    switch (ftw_info) {
   32.65 +        case FTW_DP:
   32.66 +            retval = rmdir(filepath);
   32.67 +            break;
   32.68 +        case FTW_F:
   32.69 +        case FTW_SLN:
   32.70 +            retval = unlink(filepath);
   32.71 +            break;    
   32.72 +        default:
   32.73 +            retval = -1;
   32.74 +    }
   32.75 +    
   32.76 +    return retval;
   32.77 +}
   32.78 +
    33.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    33.2 +++ b/test/test_keys/priv/integrity_test_recip_0-0xF390A40D_priv.asc	Wed May 30 18:31:23 2018 +0200
    33.3 @@ -0,0 +1,64 @@
    33.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    33.5 +
    33.6 +lQOYBFr73usBCADhtXwG4vKooTHixzhS3EEMCdqX7DS16yF/cpZJkHfHjahe+JbC
    33.7 +hOUFWMLQI99/ZXecsKNq+Vx7g8/krIyL2qvfwGY4b9RIS84CzxPyDlJ1hgoRLkLf
    33.8 +7qekLL0y25BvP7ZmqpFbtm44MP5jlK5a3GEGlz5HjMcfWVJiFPQ0q63TG8xfP1Zp
    33.9 +RUrbVPdZePFERc3IZGnj6nxhwfJLtjQtx6CZgraDslJZqBTIdeady5yBWNYaRume
   33.10 +Ei+ZH+Whhmi0UD6ojhYUeTtnLRDR1cQwKqx1tegj1zVsXRkipVxTV1jy2qeXkDTA
   33.11 +M3JWObn+qOcFz20uvZfDAkb/01W7Dwaf/C47ABEBAAEAB/wOfgioqInMKg158jC7
   33.12 +oUjL7RYMCy6XP7G27TSZJJ2MQpw8/NkxRDcwULKxipwfIfS8KttTUw+NHrmKhUnA
   33.13 +8Rl4FHJ7zTJkMfnYVFODh0fkI+chk0bX+grpj7XWPiLYAc9EaE9NBDmvgfXTjwhi
   33.14 +7SONuMhW78MZUDLp+U5001El7NQgB/0FeHnx6HLlCkUUK8GDMpp4p7ywfWZYcFJT
   33.15 +KzJ68idR4+ZfISdgRGGHx/hkOu4DS5El8Krrv7VuO83dwSO5EdaSziwYlFbzNLVa
   33.16 +rAuTl0ZF2kqtRR+f5u0HvWcTj/5D9UWT4omlELjzA0lzEcm3pVNWVL6e2heS2zGq
   33.17 +AaCBBADoxW0CWyfWMvZuwcgXj+Bd+bwyFM3GoZq6yAIb9T7ECO2SE+zqzV/Rvya1
   33.18 +zVqjjbVe4MiPRCHZ4y0O2pi0FLYYcd2J0m/QGzj/pBKaJZai7BoSpudqVQgAbgQA
   33.19 +fcHxRLinX8ZDwPS5xTezhf0wBh8MnHnhB1PbItBi/T+mt+H8ZQQA+DujyQQL+Gf6
   33.20 +9Mp6st06QxhiRrK/6dAWQOSi5GtNJDiyNLz1kjFMu6ZIRIPweatn8+z8n16x/GCe
   33.21 +FTLmJ9/n7hwR6HJq0wm8nOMTbzB0gkJg1LB94Aup+Ec2eR3z5TAi3O+LEI/JF37b
   33.22 +NfCgP9v2qAcg+ikum1cgu3G3vQj/Rh8D/REwRAZUbvfTUaNDIayK+OzZrgGrhIQJ
   33.23 +ZR2gVp/Z997T4RsDwtyvS5WpD5zJ1iHpwZx9RBP1Gw3SuC8VWJ1sPLFf2fCLMEvc
   33.24 +ZTNVyJ3KprRygl/skdDkMNmFADeVWsUTLXRpt3dKG/XPlZagfevVIIzJktDiH6Jn
   33.25 +iee57pBs64pbSSG0OUludGVncml0eSBUZXN0IFJlY2lwIDxpbnRlZ3JpdHlfdGVz
   33.26 +dF9yZWNpcEBkYXJ0aG1hbWEub3JnPokBTgQTAQgAOBYhBJ2AR5iYQc9CB+oVKkrK
   33.27 +9zXzkKQNBQJa+97rAhsvBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEErK9zXz
   33.28 +kKQNZ4MIAKFC1nK1gRghKXILC6ZqchVjbYeSJn3nOeZC2KN+NFYTSFowSgku5BYn
   33.29 +F+R5pslk6LOKhc//zsFiyY2fzmXac2uHilZeISwmpR300ZrwWrp0VDH3XnrkH9Ep
   33.30 +wnMXlCTMH1O65J7mfAYGfp4xD5RqcTW9rD9oxjy0EJ1BGwcs2TT2bqilsYjPVsVO
   33.31 +p0bFMKpjf3qFdWDIasRfSOLNM1OeNczGNxh4u04iCrUiWR2uy6tkSIHx/BF98aOL
   33.32 +NSFbqmpHqnRyIyDz15SLbX6dsYx2b5uutDwn4f4zhrYBuHFW+8c7AhZjs22HoUsa
   33.33 +TDMjLyWHW3/qHfkiiDCRHI9+s0Q5kWGdA5gEWvve6wEIANltXi9qBuA904IR/sqz
   33.34 +Yn5lY0scJ7AlS+74DY516s1hd21dNc2BQOeHYR3VN+o1DhPq1lKgPZe+7cS7vpPo
   33.35 +UZuoNl2euMGHxQU9wbp0DL9qaUQx3jM2IEN6efZDSl97DR9PVDJfZfSwqh8zHJb3
   33.36 +viTBBrcRMjJ3XWg3DYC02y8RpzdguNiATYubm5uqUMbf1QvZ2MTWIyl1pObINBsU
   33.37 +RPhVy3NciRrPfQrTai9DqrqMOqLicz1KPkFSc+6W+gYQeYWhcXvq4ZEm5r8vt5DX
   33.38 +5rFTo2WieNoD2AP5+xZ8Cgs6JVpIUwTRy0sOGU5e828tpyXR8iF31gtpPrJhfUlV
   33.39 +VGMAEQEAAQAH/A7KO7/p7HHQgtS0OKq9LRP//ZMcZS68OsAUq4dnSgOSf7c2wfQq
   33.40 +uKmHMfn/iQArf7unG9EfCVGLMU1SoBIbmYGHHbuckmDHxYUnwEfYoQ1cRbDX24+M
   33.41 +PQGaETXJOgPosOnSUZ3jk2Hjqo7YwTcbvxls7/H//3QjXn06UXbR1p8K6kUKfiPy
   33.42 +DMp0qOTj2+3OZnJm57VFi0eLmWNe9qbHhZCj72xkPDJtflqjtvl87WsY7Kc/to+n
   33.43 +9XiCr3DaMxTJR1px9STDePiOj/6BK5ah339bOCRki+6or9JDlxV0nybX8D2nBr4S
   33.44 +mpu4QzVbkQhHpQFV3JxdOOLvSJ5/nadypUEEAOgi6X7wlwdrB8IKUFT5VvMZsdJP
   33.45 +3pnVI/tAdED07jR6cJKTcLvumQP7hr0e7OAqYZ41NgEDeZ8lx+kidKQmunJBXRP3
   33.46 +xcdKIJWqFlMimeIi7YbLw45y0/7awtKpiHNmKjpfXfUnUkupM/E2LUa+ErZbv2iI
   33.47 +8VQjkKr5RT/7qkuzBADvx1uYLB77N1ltv+/uJ6w95PxgQlx1KwmZK6XzgiIjxvfw
   33.48 +YsEojhUfH/LivpJYoX0zylYXEkbaHQZ3wkcXVmoee286VK02/PkxNTCzksueupMp
   33.49 +XyScWdQrru8vQauK9ff3hbIutrdkKiD3MLo1Xy2zv3TaF6xzbPJxoA9AsBO8kQQA
   33.50 +7JYKdeB4azXV0pu1Z9XE1tPDfqQhuH92kc7wAgi4MnIskG/rnQdJTpt4v6X7PNZ5
   33.51 +xMKF/KJgUKOhDkZqeteTBb5Ju7HmE+a0KPEbdai93rswSwD7MttuBnJ0IbQple1j
   33.52 +CKfesgZ3AUKo0+0qau8eBS3YgmJjaufO5JtElmIpC65H84kCbAQYAQgAIBYhBJ2A
   33.53 +R5iYQc9CB+oVKkrK9zXzkKQNBQJa+97rAhsuAUAJEErK9zXzkKQNwHQgBBkBCAAd
   33.54 +FiEEXK1CUUbxlJ14LBUKurkoAKRaNCUFAlr73usACgkQurkoAKRaNCUYRAf/Y1fR
   33.55 +r4wcv8p4QdWJvRc49tE3pA3FCsNOG7L7qkVpyeo0v8aLj2uYccsxQLhizK7usTQ3
   33.56 +b2jgFP+s+IUZ28Ex4gRsSGO0d1+CXQR2xHPUPhoTwY09w8USPqNoFfNs0SjLccsc
   33.57 +JDa4THqaE76svFK/5z7eDI7PPoho3No4iZvE6r2lItHjYtu7qVsC3kY94XSa06W6
   33.58 +LwCCa7ntkM6sMCC/BwoCuA8Tf2DYsUwygjOY0G/ESTRx4RrpD9ubMzT1K0OUZ+4V
   33.59 +M1D8As/uIcNxa4bzKiYyJGuiReeCqhXRrmQ8cXXGgXE2ik5kKITMtemmRft2ry48
   33.60 +U+t7Rwvy7PF9WHXrod5wB/9+2ccNnHTHHDJX+TgRHExrh16/2dDtjbZgUj3LTKoP
   33.61 +NelvNA+fzHKpxcA4Ggx9GaUbzpoo/ZKMko5doWFsTU0H2vbYg2V2YWjwEEYE7lzQ
   33.62 +jebWBqz0etkxgyQnXkB+phZeaBOcW/rzEwXHdQUF+z51QtB6Emals/ISLWxc5Mbz
   33.63 +216ym7LANJ1p658s8+ktj92j3mY4W9ERu5LoG4j+sRLtUvjZJ2+R9qrJkLtcjYF3
   33.64 +FNoqB8np+dgGaWEmvkaJw9lMj/vV2LD+tHc/pzYdwOb/cPyG7+311N5uWy9BlRxM
   33.65 +wd64q8+gdnIBAcqZ8Irt5dWCGkBlh1uIyyV1MI5EHu8L
   33.66 +=8JHC
   33.67 +-----END PGP PRIVATE KEY BLOCK-----
    34.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    34.2 +++ b/test/test_keys/priv/integrity_test_signer_0-0xFF26631A_priv.asc	Wed May 30 18:31:23 2018 +0200
    34.3 @@ -0,0 +1,64 @@
    34.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    34.5 +
    34.6 +lQOYBFr74WABCADbzBMLyrH+kyBoQshc7aK0vOvxHvwURVNtuxBUPeqzIZ4bCvLB
    34.7 +Dqo2ti7bQ1uRsupCbwX/zx36LrCIUZ/U5huxmnfsGuFosnNVbXNNTc8IlnlR/1bq
    34.8 +ESe2xDn9iqUgzBC8Md4nSk8O6xyqpZYqN5PiL7Q80OdKak/ITd15YxwKbkHxaK8S
    34.9 +eEV3UrL51V3qzWGAQ42jujKVfG6HGGp5rJM/syW98w0FIOHavNQE0fR7utZoX30L
   34.10 +5N14soNSQ7Mg45o4sRs+3l7MNIkPGxiWbfVp/flK7XvrLd8WprvY2swTaHJ8xyQj
   34.11 +9jcvXE/tCgk3/z80g5NjwmRNjMSWfoBh8nm3ABEBAAEAB/4+UzpNXC8nwGFunw1A
   34.12 +qJO8C1weFcqmFthm46XoNVxxagVypqKaUsW6WOOlgg6bnG+n4eKCHKFj+UxOg1K+
   34.13 +pHdS37nEpgSn0v44SZ5p27fqt/xz32MuYSnxPegxuFhFmgfezYcwffY4BTwuOWEA
   34.14 +3JyfBSbnHdeP9uBjrIyyKIPhgsahO1DhcUCbnhGaT4u1pe8pWrtxDcZLSrjfdpxz
   34.15 +OqKl+PtGlg/QVuzoGSgndQugChVx05NJ3wCWLmGSnc2qZysCFr7pFkxMlDXa1X5w
   34.16 +ckJ3aZw8f/lHR/yUow+8roLF/zijPnLIQwsLt+l7Jz0FLufvUpmt7gVsnpZSlqcW
   34.17 +D5sdBADjCfrS1EMT7+AXbQuUWNnDdyIcyQ5+mXlwYZKnz87qbQ/N+llqgvikPMft
   34.18 +jOtR21Tlb0J0nqsumfd+KZ3k3fYtS9+SdyLYB9rk7mTTgLhjeRaaO5SsU/DFkBYH
   34.19 +I/WTWPecc6eSbxdv9m97DtjZbL8aBJy5bkkJgYKjJfJYRMQi+wQA99Wcby1ypyP9
   34.20 +6vfik49aWhjWGsQheSlTlcJKLMsefw2zDPDM4bLg31tSqSwHWfAoCmPzRTntegmw
   34.21 +vXFWL3WsIUzPiW4SHWtYcYzBr6WyVYE8uuvirkcYWSBMt8SzFfAQBphnHNoBQudO
   34.22 +DrC8f2CEi/NNWWPloGICFiCdU13a53UD/jZTGQZEa9cQmfpRLGJ/jBPkA152IcdJ
   34.23 +OkhHAQr311Ca7xWm06FWyEeQOrbvfmraHqhnLpdXZF/T3osw4ns8Qj4sRMczeGsZ
   34.24 +5hlr2D5nmLyTG8iefztEaNPGaPelaNkX1mMSUZcqoH3k0dP7omQ/5M1BayEza99Y
   34.25 +c3XOdtaknBSyPl20O0ludGVncml0eSBUZXN0IFNpZ25lciA8aW50ZWdyaXR5X3Rl
   34.26 +c3Rfc2lnbmVyQGRhcnRobWFtYS5vcmc+iQFOBBMBCAA4FiEErSFSbMpVZ7dh0hwM
   34.27 +1MlL6f8mYxoFAlr74WACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1MlL
   34.28 +6f8mYxq7/wgA0HkULYopcQoC9beigbWuZFTgZmnyOLpcFTqckmHZipVNfNtEN3mD
   34.29 +4tBvvPTD65ktvUJlk6DnhfNK3kWcIBuusbdvdlBe3RHcyJUDKlcx2t6XqoKnBAzP
   34.30 +ZlNqa+8wUAmVBmCkzhfQkhaA8fiuF8L5uatMIwMGiYePiKPGk9dFm0kVnYXGYFX4
   34.31 +kD2F2KnRCeHOwreLRzLpJjqIBm9+xERbd0L02VOoL3Sb+6dj1Swyf0v98uHjn4ul
   34.32 +tGfbBN+Ct3RNdY1S6RjKyS7xyjtEE2e2qrPtU/sxaHKz6wRqXlYnhz1I6ucCWauK
   34.33 +MOh21/zyxYXlmqChdpNQ3EYUhqLR9vvn6J0DmARa++FgAQgAuKa6XUzB4pJX0Zz2
   34.34 +glCwxKfy/zjj2UgxtQM61clZPC/NbHx1zbUciNzgnlZTTEEyNpMXsgFueOa8+Xz9
   34.35 +8dTpqBHCyU7X3YnZjYLTyJR7doQbI1lPA57RBT/8HmHlbH3gj7OeGCBRJ2vDXXf5
   34.36 +UWQiTQusCh8GqAvDXbhIUuAEU76Hf16FeBVd64x7tyYjbJRvBTdgqQRcMQWK4o4K
   34.37 +eIHf8MIktRtcK0lhGltwdA513dn7Sh9/SLGbtha0QLiusqIZNBl6nCjBr1Z9zMuU
   34.38 +JBn/M2S6L4sbEx9q19np762xh8wxSCzrZH8xAL1lIjBC+2wgHGnUb/KUzuX0/7mY
   34.39 +LCve8wARAQABAAf7BBuhdcXpYlMDJSSqz0dgR1+9JjRrzT+v62kA/BSYqaAen9U9
   34.40 +AbCPy/OuA5fEDqQ8q74l/s3NWV84wQwo0iJ8eEK85KGeZ81TS7SnZYT4IjDaMbUg
   34.41 +7uGvoMBFqZ9f7UP3pPrH/51ocMoS9JdgspDZuoER+L+r9D0ewY0B/uYA8qP2zw7z
   34.42 +c796QK+vdT7uzCRyVh1nnJlHZzkpSPiOICHJMlZqQm5b44jwyj1kpobGixNIET6n
   34.43 +hKa1KX1i1bXnaisaJ373+gycQvA0PgsULscchhwg5ba+gnFTBaBXnDK2wXv4HwAl
   34.44 +aPWJb7sFq2D3VnNBHdH7tnSlPKwOC2rwqrGSoQQA1w6CcMrRQPNnq+IquBKlrJ1q
   34.45 +NnGS0CMYcgHPFhCB5Rqh4BysIbc9VsOwf/ax4QLG5M9mI+OAI0DPGGhpXwWDdpiv
   34.46 +fGogZJpKkkbWxQzDeA7MMbIveIsl6BkEGmuDRB5f9nlJ9VK/khGD6LkDeAQmpbDq
   34.47 +0xGZuddtHsc0n9kSBJsEANvOT+A6+VCP2752GULHRytONjYn1frvRo4k5nGm38pa
   34.48 +lXPasj6vmYDTTKus3q0cxftY4qkf+VEXxfi2HfNOkLUdJfWWttaqNdpFz+WXSU5k
   34.49 +CtYgAsAr/5MVVWr86PFqWVYHYJtGQdV+a3T3SRyJ9G9YVw3u9u8aXJ4gd5xiKLiJ
   34.50 +A/9jecRDTM9hBfe+Ol7e9b8YrSSw24cj6I84YOssxVnljhHa8TAQD6YdBRVAu/U2
   34.51 +J05HVJ5Q+P8cDySWbyJY6CjRDa8VGVVs0Ue/JEmF4u11kxwZkTH5g57PFyTQHi07
   34.52 +kH1ggtRmeHsBuuJ5a3S1NYJK5bC5Z+ddC3YroI5lqfQqZj5viQJsBBgBCAAgFiEE
   34.53 +rSFSbMpVZ7dh0hwM1MlL6f8mYxoFAlr74WACGy4BQAkQ1MlL6f8mYxrAdCAEGQEI
   34.54 +AB0WIQSDGHPI6DWvbXR93BWoEzPD1TjKdAUCWvvhYAAKCRCoEzPD1TjKdJwkB/0e
   34.55 +UwtplsBrb+CJE+mPEMxy3NT/7v8OYYVaeLsD02u0vkk3u6xFJmA7TXI4f/+6Tac+
   34.56 +h7SWZPycx8DZ7qQjfWEOgatD5YtGnqRc8L0eOYtnC6KdGLdDKHEkTA1vzywhhdTg
   34.57 +isgigPsOmSFjegpEwN4oQOcNMErh6Vn1mWW7eNaeBo0bh2r8dzXTokQs8Q/X0lnu
   34.58 +0bhYgBJK6JVsznKocPazIKOoJiRtWL4AeKB/92uP7fh7vYiFcIZ8knwKDDNODlaM
   34.59 +ugp8ij1aRaqBIVMspnM+/mYWq5Ev5CbfO1DTXS7JDfeoJTDL6yBQaBVRGw3RP3j4
   34.60 +dyZDtgyJ4cGrAorpn7KqToAIANl7hKZIITp7KiWluSkY/9dPSPmfESVjaS5McA96
   34.61 +UMRCxjKmne9/UZm2swjFAFkC5a81hi/c0f551uU8FadZ/CCYtWn80dchGsOYCB94
   34.62 +PUnShkdqTf6bZ+w1nMg+kqoxB2a2K2gasyjiixR5QFylir5FdTJlG2aDabZRmjlW
   34.63 +GzCDB5N/KmnqC2QCxwEi9spvXYMt4U/hBss2vcUx/0fBglyDvlBYba03AP6ovlUX
   34.64 +1sobJdzhaqcnTPLeI9wOc80IKzWJZBT04sbP0TlJTQFGOlwYjD7yJ/YrJXtzpKUj
   34.65 +lBGgYaf3pW0nAsU82a2udbq0avpVk1NZ0Baa4dAB76l5JqQ=
   34.66 +=B/PM
   34.67 +-----END PGP PRIVATE KEY BLOCK-----
    35.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.2 +++ b/test/test_keys/priv/integrity_test_trash_signer_0-0x6A8F15E9_priv.asc	Wed May 30 18:31:23 2018 +0200
    35.3 @@ -0,0 +1,64 @@
    35.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    35.5 +
    35.6 +lQOYBFr75B8BCAC3dIFL8OAErOfpdXqrlXgedtCTNFFwh9rHsh/lUaNEzdUdVjAN
    35.7 +0+rKuEb2iwjOW96tPMGn8pdL4LOjyZfT2GFmmkw8QC7Hnnt3Pq4lBWgJckhpnkT+
    35.8 +o8hyOJn7NS3yvOX2SCeFjKCtLjsEa05gu8H24Gd/ECxfSTJVyxvKz0eLiSesNNAF
    35.9 +FhRb7ZsWKtXzv3juWzfU8hkdS1CCiSzIUp6wK95s+aXqhKv0vUoH7K7qnz+VyE+d
   35.10 +d7gvy/FiBpCuUnVxn2CUWeA9SYOGEe8175lLD8cowo3Firw2iOc792vTz5Ac7qbF
   35.11 +B45VJRX08VPiUgi14cPNyxwH6D18MwlbSNvxABEBAAEAB/kBh+IzLAWpX8EfpZUF
   35.12 +mqbUOj9LTXGZqsiKR8Gmqeze19H9tmQc1Nq2/AqpQtoGPsqTKuqeMUm8MOxhGhGI
   35.13 +i5LSNFrUNeBSn89ZE2DRw/pa1UC43FLxWG/zLTAE4lC3RBjSkUZsStwcXvk99DKy
   35.14 +qIL+Zhat2nZo5SLkrGAObAjugtbV0imL5A6MQoNL0MisQxj1wZ2V/FrFPPZ31YHC
   35.15 +sAHSFm4aAgoLOOmqEnCFXrX1k5kzJVtPbliH3ZJSEtz045ezDDipmrDTHIstseY8
   35.16 +kyg2g0vJaEGHt8wJDbanFE4TZddICpcbXIwee3V+5ZPWyUwCAKkgYjlVhubDQ9pL
   35.17 +I6wxBADCD5Nq4wGuB8NauUhTVuOV9+YWl8yOZ0b/TBisPqCnB9YZWZGAX8nh1nQf
   35.18 +vm069khdPxcwIBHjCZH5ky/S/DaDzoiCAWEBRvhkemByzTkWvP+EiMMdbcGsvTV0
   35.19 +RdGUAiGZf1YNKqfiNOMZIQCXdGPmZcJ4Cm6Gcv2yd1G7CGD23wQA8gJZdyooH49S
   35.20 +UTIMAw8wpdcGKBzwwd+ayo2oMt8A6QjJPgynQMWInnSj+ONnbJjtQihJhQohoylB
   35.21 +PLjibhiStQP2XqffZCMm2pZKQxNDHXWu4f6sebe7iIWdatUyrWzeu2s7X3GbkZAA
   35.22 +/qrpTYNVa2bQhdt5NJhIkX60+THily8EAOP3IPJuEoP5xi8grRhFmQl4d592IGhg
   35.23 +/1UF9tOO1vdt12cRunaR81m2cs18ZZ+hfoZqa9nUwBciXGEgZ5ggtaUGDCGQ5/5d
   35.24 +2ZDCP7tHcN87MDgefpq6q72VX4bYtLN4y1asC8AhZhAtmcnNPy4LsM1NSgJBFMSS
   35.25 +RtllUfMGO0YUOGK0R0ludGVncml0eSBUZXN0IFRyYXNoIFNpZ25lciA8aW50ZWdy
   35.26 +aXR5X3Rlc3RfdHJhc2hfc2lnbmVyQGRhcnRobWFtYS5vcmc+iQFOBBMBCAA4FiEE
   35.27 +Bf4bCu9SVYQ8BKOPi7/cbGqPFekFAlr75B8CGy8FCwkIBwIGFQoJCAsCBBYCAwEC
   35.28 +HgECF4AACgkQi7/cbGqPFekh+gf/Y7ti7rIkDY9CeNF6rXRBcZiBz1XOF07CN9gS
   35.29 +lmmhtW5tUf9OToVIVEiX9XbCc30tkt/RvGagywFd4vEBPlCcpVApnrVRA9ZUlH07
   35.30 +z2swwiGbiuO3UytDfKUFHV3fuIdq+bjiR26ecKUfeFMUcK0NjKqE03K/JiKVKTBx
   35.31 +RAFPo0HFntm0vHXyZ3K23exINGEC1KhvNH0YCNmX1Z64A56GGW5q6XJ71/RS/05E
   35.32 +td8iKO6b4lO3OXSzOMx2+p9DP7KUr+iDRbvTu29B9rLfyS7sSzVJ9QT8WbhtPN2Q
   35.33 +XZ5Ny478y/yzH8YGby8cncFJvQ7GF7iKxUy7Qi+eG3x9fOcvzJ0DmARa++QfAQgA
   35.34 +qA9BSdWZDgZSWfa+fMs7ZDjXjDuOp8UUxo4NRnvA8/2rpTYUvZXPa4oCt9Ha9fMm
   35.35 +5SlnzxvhxXnsGj2xCsHDcb6g5NeIAYZjSHByZTOE8bB9PizDqWCg1sMrxxRFPChp
   35.36 +hlSDxEamj/O6pd3AJpED7x7J3XDimQr9TBfHqZ1f4RSdmb6z71o5eT3dcEOgvECB
   35.37 ++XPcjaLBO3ugh1BQMSWApzDBp4DRhyM2fu/XwsKom/bDr7Lu3mPP3/dlRCIUTOuW
   35.38 +n7B0cjkKYV9/rNqbLBiVFSNomuJNia8xmbsnLy1/ugy0FnE+1Q1xKOWhZ7hX00dL
   35.39 +P3W3KoU2D3mViFPgoMetSQARAQABAAf7B0kmBPFAIeYEmEbZ/5IAoKSANQxN78MG
   35.40 +VrdI0bdCvbElHv6cYT2x5iZvs2VjJIomiQUbAtUMHCIK1Mu7ivesepgPj0GIHBIl
   35.41 +6A7hPrbq5V7H3IlXRYFdZ6zCue43NCzyVN2sGrcPYyqR+xKFJobfO0oZPpg1Z/oc
   35.42 +fLnZMOa+2y9AyASFVQaIlVpC2z2UnTjc/FBAd7fmZvpM/GPlMROAUpAXghj6yGV+
   35.43 +8FYwCldJVWF6oYNs/wsTca7/TsY/jYghcfcWsc3U1kd0Nzq/Ww5Kf4xMC2rJ0DLt
   35.44 +rGa9gny6psRyhtvOJyG4ifQLLErwGl8TGYq8cRakAl+sYq/uEzjhIwQAxyqefauf
   35.45 +A95kYDT0pkJIZ9hyWeXtlutnPXPAPNN6t+xdIbArgMxkKfyiiv6ImQQhdgCHNwVK
   35.46 +QkN0Um++F1xHiq/E3Qv4erNuALQ8lF7Qu5pU5msYMcaxyes9yfmt/e4670lHyOKV
   35.47 +jkvkZGaSY3NB+sA9ys9rOszM+iXOFfQjPIcEANgEPEcf9Qf+GRGSjLpHvQFZdu91
   35.48 +Sp8kuK37BSxXnN9HroK9jDq5q4LcRjUvz7UoqXeF7ZsQCqg6i10n5ZKq1r9D5N1B
   35.49 +LBCfg/mpOV93fRS8y8/lnno4v7IEgGfV85QK4hiZtnjhldC4wrmSoDwhQzA22Y5V
   35.50 +U9HAVm3o9Yq3jIuvA/4nOeRf35MieGEBBUW/hEMp/KnQSQ21t/DZlWjna1yMYkAr
   35.51 +hpwSRYjm2x/l1Y58MYdVWnT3TDjO92W/BKyQ3Yg7+ypzxMOrNHtLVtsuPdf3zmHK
   35.52 +27ngxJBMYuefIulsBbGcP6o7rdiQA5QwG8RE2Le7N4JZX/ZMeSKzpH5xHVba9EFo
   35.53 +iQJsBBgBCAAgFiEEBf4bCu9SVYQ8BKOPi7/cbGqPFekFAlr75B8CGy4BQAkQi7/c
   35.54 +bGqPFenAdCAEGQEIAB0WIQQJvxazmuX2+i4S2n8PXc/IGp+IZwUCWvvkHwAKCRAP
   35.55 +Xc/IGp+IZ1L4B/9PdIRF60R64N2NbskQlfZsMsCZ5+LHkV3lX0/Bgql9n64WLtl+
   35.56 +3y+ufxU4AGPfQM8SPfu95WsA7koa7fmsFI45mcGsYyF9D6MuuDsMnFKW4ioeBo5T
   35.57 +x03ak2xSwhMmhIQXqHJUfbVkHa/Pl1uNjNb7iDAkkDV3fiA7kGxVIjKF/+LbCDtH
   35.58 +98uhiu9enAZ1it72VqGIzzDGF3co4Xg9UsSif7+QQxSpginFVz3eaezbqiVjU0hI
   35.59 +Y1fZ/PeNFUruOMaPJA7vrGasSnlKDJXejhFbW8kHfwSusY3OaAqS2pudzZktR+6J
   35.60 +g8Jm0UO3EguCToSsKLnDUPUqKXov/2VmPrHoRWoH/1Y/J+U+aK5HdFa8/GYsbEbG
   35.61 +z/U+AlEXgGgHZkGFtMNEbGcy6EYGfeWOGRXVfkSgu9jYXBKNgLvqhiIpTslxZ4EZ
   35.62 +YTvmXmgMnJq+tf4Gb5URnUdtd6oM67+rCOMLflLiJNtWeA7k/2cjDJJ4dolp0PY9
   35.63 +ZVQYknz4Wpw+pPtdeV/isvOVMHir3dNchnDWUbo37MEH95hm9ZCx5um6DyVck6LP
   35.64 +da77OXJOGivROGK3iERqn8/nwlIZZCh0LS9uNB/iW/5X/HeimkNaXfPxipRTufI+
   35.65 +CgD2ZO6Vciq19AV6CHJt07G3rZutkDAaHvWjGscVJF321SsJ3jyGqk6vas9VBpc=
   35.66 +=Zcca
   35.67 +-----END PGP PRIVATE KEY BLOCK-----
    36.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    36.2 +++ b/test/test_keys/pub/integrity_test_recip_0-0xF390A40D_pub.asc	Wed May 30 18:31:23 2018 +0200
    36.3 @@ -0,0 +1,37 @@
    36.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    36.5 +
    36.6 +mQENBFr73usBCADhtXwG4vKooTHixzhS3EEMCdqX7DS16yF/cpZJkHfHjahe+JbC
    36.7 +hOUFWMLQI99/ZXecsKNq+Vx7g8/krIyL2qvfwGY4b9RIS84CzxPyDlJ1hgoRLkLf
    36.8 +7qekLL0y25BvP7ZmqpFbtm44MP5jlK5a3GEGlz5HjMcfWVJiFPQ0q63TG8xfP1Zp
    36.9 +RUrbVPdZePFERc3IZGnj6nxhwfJLtjQtx6CZgraDslJZqBTIdeady5yBWNYaRume
   36.10 +Ei+ZH+Whhmi0UD6ojhYUeTtnLRDR1cQwKqx1tegj1zVsXRkipVxTV1jy2qeXkDTA
   36.11 +M3JWObn+qOcFz20uvZfDAkb/01W7Dwaf/C47ABEBAAG0OUludGVncml0eSBUZXN0
   36.12 +IFJlY2lwIDxpbnRlZ3JpdHlfdGVzdF9yZWNpcEBkYXJ0aG1hbWEub3JnPokBTgQT
   36.13 +AQgAOBYhBJ2AR5iYQc9CB+oVKkrK9zXzkKQNBQJa+97rAhsvBQsJCAcCBhUKCQgL
   36.14 +AgQWAgMBAh4BAheAAAoJEErK9zXzkKQNZ4MIAKFC1nK1gRghKXILC6ZqchVjbYeS
   36.15 +Jn3nOeZC2KN+NFYTSFowSgku5BYnF+R5pslk6LOKhc//zsFiyY2fzmXac2uHilZe
   36.16 +ISwmpR300ZrwWrp0VDH3XnrkH9EpwnMXlCTMH1O65J7mfAYGfp4xD5RqcTW9rD9o
   36.17 +xjy0EJ1BGwcs2TT2bqilsYjPVsVOp0bFMKpjf3qFdWDIasRfSOLNM1OeNczGNxh4
   36.18 +u04iCrUiWR2uy6tkSIHx/BF98aOLNSFbqmpHqnRyIyDz15SLbX6dsYx2b5uutDwn
   36.19 +4f4zhrYBuHFW+8c7AhZjs22HoUsaTDMjLyWHW3/qHfkiiDCRHI9+s0Q5kWG5AQ0E
   36.20 +Wvve6wEIANltXi9qBuA904IR/sqzYn5lY0scJ7AlS+74DY516s1hd21dNc2BQOeH
   36.21 +YR3VN+o1DhPq1lKgPZe+7cS7vpPoUZuoNl2euMGHxQU9wbp0DL9qaUQx3jM2IEN6
   36.22 +efZDSl97DR9PVDJfZfSwqh8zHJb3viTBBrcRMjJ3XWg3DYC02y8RpzdguNiATYub
   36.23 +m5uqUMbf1QvZ2MTWIyl1pObINBsURPhVy3NciRrPfQrTai9DqrqMOqLicz1KPkFS
   36.24 +c+6W+gYQeYWhcXvq4ZEm5r8vt5DX5rFTo2WieNoD2AP5+xZ8Cgs6JVpIUwTRy0sO
   36.25 +GU5e828tpyXR8iF31gtpPrJhfUlVVGMAEQEAAYkCbAQYAQgAIBYhBJ2AR5iYQc9C
   36.26 +B+oVKkrK9zXzkKQNBQJa+97rAhsuAUAJEErK9zXzkKQNwHQgBBkBCAAdFiEEXK1C
   36.27 +UUbxlJ14LBUKurkoAKRaNCUFAlr73usACgkQurkoAKRaNCUYRAf/Y1fRr4wcv8p4
   36.28 +QdWJvRc49tE3pA3FCsNOG7L7qkVpyeo0v8aLj2uYccsxQLhizK7usTQ3b2jgFP+s
   36.29 ++IUZ28Ex4gRsSGO0d1+CXQR2xHPUPhoTwY09w8USPqNoFfNs0SjLccscJDa4THqa
   36.30 +E76svFK/5z7eDI7PPoho3No4iZvE6r2lItHjYtu7qVsC3kY94XSa06W6LwCCa7nt
   36.31 +kM6sMCC/BwoCuA8Tf2DYsUwygjOY0G/ESTRx4RrpD9ubMzT1K0OUZ+4VM1D8As/u
   36.32 +IcNxa4bzKiYyJGuiReeCqhXRrmQ8cXXGgXE2ik5kKITMtemmRft2ry48U+t7Rwvy
   36.33 +7PF9WHXrod5wB/9+2ccNnHTHHDJX+TgRHExrh16/2dDtjbZgUj3LTKoPNelvNA+f
   36.34 +zHKpxcA4Ggx9GaUbzpoo/ZKMko5doWFsTU0H2vbYg2V2YWjwEEYE7lzQjebWBqz0
   36.35 +etkxgyQnXkB+phZeaBOcW/rzEwXHdQUF+z51QtB6Emals/ISLWxc5Mbz216ym7LA
   36.36 +NJ1p658s8+ktj92j3mY4W9ERu5LoG4j+sRLtUvjZJ2+R9qrJkLtcjYF3FNoqB8np
   36.37 ++dgGaWEmvkaJw9lMj/vV2LD+tHc/pzYdwOb/cPyG7+311N5uWy9BlRxMwd64q8+g
   36.38 +dnIBAcqZ8Irt5dWCGkBlh1uIyyV1MI5EHu8L
   36.39 +=yUx8
   36.40 +-----END PGP PUBLIC KEY BLOCK-----
    37.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    37.2 +++ b/test/test_keys/pub/integrity_test_signer_0-0xFF26631A_pub.asc	Wed May 30 18:31:23 2018 +0200
    37.3 @@ -0,0 +1,37 @@
    37.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    37.5 +
    37.6 +mQENBFr74WABCADbzBMLyrH+kyBoQshc7aK0vOvxHvwURVNtuxBUPeqzIZ4bCvLB
    37.7 +Dqo2ti7bQ1uRsupCbwX/zx36LrCIUZ/U5huxmnfsGuFosnNVbXNNTc8IlnlR/1bq
    37.8 +ESe2xDn9iqUgzBC8Md4nSk8O6xyqpZYqN5PiL7Q80OdKak/ITd15YxwKbkHxaK8S
    37.9 +eEV3UrL51V3qzWGAQ42jujKVfG6HGGp5rJM/syW98w0FIOHavNQE0fR7utZoX30L
   37.10 +5N14soNSQ7Mg45o4sRs+3l7MNIkPGxiWbfVp/flK7XvrLd8WprvY2swTaHJ8xyQj
   37.11 +9jcvXE/tCgk3/z80g5NjwmRNjMSWfoBh8nm3ABEBAAG0O0ludGVncml0eSBUZXN0
   37.12 +IFNpZ25lciA8aW50ZWdyaXR5X3Rlc3Rfc2lnbmVyQGRhcnRobWFtYS5vcmc+iQFO
   37.13 +BBMBCAA4FiEErSFSbMpVZ7dh0hwM1MlL6f8mYxoFAlr74WACGy8FCwkIBwIGFQoJ
   37.14 +CAsCBBYCAwECHgECF4AACgkQ1MlL6f8mYxq7/wgA0HkULYopcQoC9beigbWuZFTg
   37.15 +ZmnyOLpcFTqckmHZipVNfNtEN3mD4tBvvPTD65ktvUJlk6DnhfNK3kWcIBuusbdv
   37.16 +dlBe3RHcyJUDKlcx2t6XqoKnBAzPZlNqa+8wUAmVBmCkzhfQkhaA8fiuF8L5uatM
   37.17 +IwMGiYePiKPGk9dFm0kVnYXGYFX4kD2F2KnRCeHOwreLRzLpJjqIBm9+xERbd0L0
   37.18 +2VOoL3Sb+6dj1Swyf0v98uHjn4ultGfbBN+Ct3RNdY1S6RjKyS7xyjtEE2e2qrPt
   37.19 +U/sxaHKz6wRqXlYnhz1I6ucCWauKMOh21/zyxYXlmqChdpNQ3EYUhqLR9vvn6LkB
   37.20 +DQRa++FgAQgAuKa6XUzB4pJX0Zz2glCwxKfy/zjj2UgxtQM61clZPC/NbHx1zbUc
   37.21 +iNzgnlZTTEEyNpMXsgFueOa8+Xz98dTpqBHCyU7X3YnZjYLTyJR7doQbI1lPA57R
   37.22 +BT/8HmHlbH3gj7OeGCBRJ2vDXXf5UWQiTQusCh8GqAvDXbhIUuAEU76Hf16FeBVd
   37.23 +64x7tyYjbJRvBTdgqQRcMQWK4o4KeIHf8MIktRtcK0lhGltwdA513dn7Sh9/SLGb
   37.24 +tha0QLiusqIZNBl6nCjBr1Z9zMuUJBn/M2S6L4sbEx9q19np762xh8wxSCzrZH8x
   37.25 +AL1lIjBC+2wgHGnUb/KUzuX0/7mYLCve8wARAQABiQJsBBgBCAAgFiEErSFSbMpV
   37.26 +Z7dh0hwM1MlL6f8mYxoFAlr74WACGy4BQAkQ1MlL6f8mYxrAdCAEGQEIAB0WIQSD
   37.27 +GHPI6DWvbXR93BWoEzPD1TjKdAUCWvvhYAAKCRCoEzPD1TjKdJwkB/0eUwtplsBr
   37.28 +b+CJE+mPEMxy3NT/7v8OYYVaeLsD02u0vkk3u6xFJmA7TXI4f/+6Tac+h7SWZPyc
   37.29 +x8DZ7qQjfWEOgatD5YtGnqRc8L0eOYtnC6KdGLdDKHEkTA1vzywhhdTgisgigPsO
   37.30 +mSFjegpEwN4oQOcNMErh6Vn1mWW7eNaeBo0bh2r8dzXTokQs8Q/X0lnu0bhYgBJK
   37.31 +6JVsznKocPazIKOoJiRtWL4AeKB/92uP7fh7vYiFcIZ8knwKDDNODlaMugp8ij1a
   37.32 +RaqBIVMspnM+/mYWq5Ev5CbfO1DTXS7JDfeoJTDL6yBQaBVRGw3RP3j4dyZDtgyJ
   37.33 +4cGrAorpn7KqToAIANl7hKZIITp7KiWluSkY/9dPSPmfESVjaS5McA96UMRCxjKm
   37.34 +ne9/UZm2swjFAFkC5a81hi/c0f551uU8FadZ/CCYtWn80dchGsOYCB94PUnShkdq
   37.35 +Tf6bZ+w1nMg+kqoxB2a2K2gasyjiixR5QFylir5FdTJlG2aDabZRmjlWGzCDB5N/
   37.36 +KmnqC2QCxwEi9spvXYMt4U/hBss2vcUx/0fBglyDvlBYba03AP6ovlUX1sobJdzh
   37.37 +aqcnTPLeI9wOc80IKzWJZBT04sbP0TlJTQFGOlwYjD7yJ/YrJXtzpKUjlBGgYaf3
   37.38 +pW0nAsU82a2udbq0avpVk1NZ0Baa4dAB76l5JqQ=
   37.39 +=u1h/
   37.40 +-----END PGP PUBLIC KEY BLOCK-----
    38.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    38.2 +++ b/test/test_keys/pub/integrity_test_trash_signer_0-0x6A8F15E9_pub.asc	Wed May 30 18:31:23 2018 +0200
    38.3 @@ -0,0 +1,37 @@
    38.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    38.5 +
    38.6 +mQENBFr75B8BCAC3dIFL8OAErOfpdXqrlXgedtCTNFFwh9rHsh/lUaNEzdUdVjAN
    38.7 +0+rKuEb2iwjOW96tPMGn8pdL4LOjyZfT2GFmmkw8QC7Hnnt3Pq4lBWgJckhpnkT+
    38.8 +o8hyOJn7NS3yvOX2SCeFjKCtLjsEa05gu8H24Gd/ECxfSTJVyxvKz0eLiSesNNAF
    38.9 +FhRb7ZsWKtXzv3juWzfU8hkdS1CCiSzIUp6wK95s+aXqhKv0vUoH7K7qnz+VyE+d
   38.10 +d7gvy/FiBpCuUnVxn2CUWeA9SYOGEe8175lLD8cowo3Firw2iOc792vTz5Ac7qbF
   38.11 +B45VJRX08VPiUgi14cPNyxwH6D18MwlbSNvxABEBAAG0R0ludGVncml0eSBUZXN0
   38.12 +IFRyYXNoIFNpZ25lciA8aW50ZWdyaXR5X3Rlc3RfdHJhc2hfc2lnbmVyQGRhcnRo
   38.13 +bWFtYS5vcmc+iQFOBBMBCAA4FiEEBf4bCu9SVYQ8BKOPi7/cbGqPFekFAlr75B8C
   38.14 +Gy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQi7/cbGqPFekh+gf/Y7ti7rIk
   38.15 +DY9CeNF6rXRBcZiBz1XOF07CN9gSlmmhtW5tUf9OToVIVEiX9XbCc30tkt/RvGag
   38.16 +ywFd4vEBPlCcpVApnrVRA9ZUlH07z2swwiGbiuO3UytDfKUFHV3fuIdq+bjiR26e
   38.17 +cKUfeFMUcK0NjKqE03K/JiKVKTBxRAFPo0HFntm0vHXyZ3K23exINGEC1KhvNH0Y
   38.18 +CNmX1Z64A56GGW5q6XJ71/RS/05Etd8iKO6b4lO3OXSzOMx2+p9DP7KUr+iDRbvT
   38.19 +u29B9rLfyS7sSzVJ9QT8WbhtPN2QXZ5Ny478y/yzH8YGby8cncFJvQ7GF7iKxUy7
   38.20 +Qi+eG3x9fOcvzLkBDQRa++QfAQgAqA9BSdWZDgZSWfa+fMs7ZDjXjDuOp8UUxo4N
   38.21 +RnvA8/2rpTYUvZXPa4oCt9Ha9fMm5SlnzxvhxXnsGj2xCsHDcb6g5NeIAYZjSHBy
   38.22 +ZTOE8bB9PizDqWCg1sMrxxRFPChphlSDxEamj/O6pd3AJpED7x7J3XDimQr9TBfH
   38.23 +qZ1f4RSdmb6z71o5eT3dcEOgvECB+XPcjaLBO3ugh1BQMSWApzDBp4DRhyM2fu/X
   38.24 +wsKom/bDr7Lu3mPP3/dlRCIUTOuWn7B0cjkKYV9/rNqbLBiVFSNomuJNia8xmbsn
   38.25 +Ly1/ugy0FnE+1Q1xKOWhZ7hX00dLP3W3KoU2D3mViFPgoMetSQARAQABiQJsBBgB
   38.26 +CAAgFiEEBf4bCu9SVYQ8BKOPi7/cbGqPFekFAlr75B8CGy4BQAkQi7/cbGqPFenA
   38.27 +dCAEGQEIAB0WIQQJvxazmuX2+i4S2n8PXc/IGp+IZwUCWvvkHwAKCRAPXc/IGp+I
   38.28 +Z1L4B/9PdIRF60R64N2NbskQlfZsMsCZ5+LHkV3lX0/Bgql9n64WLtl+3y+ufxU4
   38.29 +AGPfQM8SPfu95WsA7koa7fmsFI45mcGsYyF9D6MuuDsMnFKW4ioeBo5Tx03ak2xS
   38.30 +whMmhIQXqHJUfbVkHa/Pl1uNjNb7iDAkkDV3fiA7kGxVIjKF/+LbCDtH98uhiu9e
   38.31 +nAZ1it72VqGIzzDGF3co4Xg9UsSif7+QQxSpginFVz3eaezbqiVjU0hIY1fZ/PeN
   38.32 +FUruOMaPJA7vrGasSnlKDJXejhFbW8kHfwSusY3OaAqS2pudzZktR+6Jg8Jm0UO3
   38.33 +EguCToSsKLnDUPUqKXov/2VmPrHoRWoH/1Y/J+U+aK5HdFa8/GYsbEbGz/U+AlEX
   38.34 +gGgHZkGFtMNEbGcy6EYGfeWOGRXVfkSgu9jYXBKNgLvqhiIpTslxZ4EZYTvmXmgM
   38.35 +nJq+tf4Gb5URnUdtd6oM67+rCOMLflLiJNtWeA7k/2cjDJJ4dolp0PY9ZVQYknz4
   38.36 +Wpw+pPtdeV/isvOVMHir3dNchnDWUbo37MEH95hm9ZCx5um6DyVck6LPda77OXJO
   38.37 +GivROGK3iERqn8/nwlIZZCh0LS9uNB/iW/5X/HeimkNaXfPxipRTufI+CgD2ZO6V
   38.38 +ciq19AV6CHJt07G3rZutkDAaHvWjGscVJF321SsJ3jyGqk6vas9VBpc=
   38.39 +=YX1B
   38.40 +-----END PGP PUBLIC KEY BLOCK-----
    39.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    39.2 +++ b/test/test_mails/Signed PGP_MIME by unknown signer attach.eml	Wed May 30 18:31:23 2018 +0200
    39.3 @@ -0,0 +1,159 @@
    39.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    39.5 +X-Original-To: krista@gnunet.org
    39.6 +Delivered-To: krista@gnunet.org
    39.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    39.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 7F14B1C00BE
    39.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:04:38 +0200 (CEST)
   39.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   39.11 +	id 512111C037C; Wed, 16 May 2018 10:04:38 +0200 (CEST)
   39.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   39.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 2CF251C0378
   39.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:04:38 +0200 (CEST)
   39.15 +Received: from vmmaildmz1.informatik.tu-muenchen.de (vmmaildmz1.informatik.tu-muenchen.de [131.159.0.87])
   39.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 224611C0376
   39.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:04:38 +0200 (CEST)
   39.18 +Received: by vmmaildmz1.informatik.tu-muenchen.de (Postfix, from userid 109)
   39.19 +	id 20B831C2DAF; Wed, 16 May 2018 10:04:38 +0200 (CEST)
   39.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   39.21 +	vmmaildmz1.informatik.tu-muenchen.de
   39.22 +X-Spam-Level: 
   39.23 +X-Spam-Status: No, score=-3.6 required=7.0 tests=BAYES_00,ENCRYPTED_MESSAGE,
   39.24 +	RCVD_IN_DNSWL_LOW,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,UNPARSEABLE_RELAY
   39.25 +	autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   39.26 +Received: from vmmaildmz1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   39.27 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTP id 7AB901C2DAD
   39.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:04:35 +0200 (CEST)
   39.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [81.169.146.149])
   39.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   39.31 +	(No client certificate requested)
   39.32 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTPS id 6B0561C2DAB
   39.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:04:35 +0200 (CEST)
   39.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   39.35 +Received: from mailin.rzone.de ([unix socket])
   39.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   39.37 +	Wed, 16 May 2018 10:04:17 +0200 (CEST)
   39.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   39.39 +Authentication-Results: strato.com; arc=none
   39.40 +Authentication-Results: strato.com; dkim=none
   39.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_trash_signer@darthmama.org"
   39.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   39.43 +X-RZG-Expurgate: clean/bounce
   39.44 +X-RZG-Expurgate-ID: 149500::1526457857-00008F41-9F9C44FD/18/0
   39.45 +X-Strato-MessageType: email
   39.46 +X-RZG-CLASS-ID: mi00
   39.47 +Received-SPF: none
   39.48 +	client-ip=131.159.0.8;
   39.49 +	helo="mail-out1.informatik.tu-muenchen.de";
   39.50 +	envelope-from="krista@pep-project.org";
   39.51 +	receiver=smtpin.rzone.de;
   39.52 +	identity=mailfrom;
   39.53 +Received: from mail-out1.informatik.tu-muenchen.de ([131.159.0.8])
   39.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   39.55 +	with ESMTPS id 608741u4G84HlkX
   39.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   39.57 +	(Client did not present a certificate)
   39.58 +	for <integrity_test_recip@darthmama.org>;
   39.59 +	Wed, 16 May 2018 10:04:17 +0200 (CEST)
   39.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   39.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id 8EE8E1042EC0B
   39.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 10:04:11 +0200 (CEST)
   39.63 +From: integrity_test_trash_signer@darthmama.org
   39.64 +Subject: Signed PGP/MIME by unknown signer, attach
   39.65 +To: integrity_test_recip@darthmama.org
   39.66 +Openpgp: preference=signencrypt
   39.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   39.68 +Message-ID: <68082b0a-e2f0-94ef-a26e-4ad9139cf109@pep-project.org>
   39.69 +Date: Wed, 16 May 2018 10:04:11 +0200
   39.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   39.71 + Thunderbird/52.7.0
   39.72 +MIME-Version: 1.0
   39.73 +Content-Type: multipart/encrypted;
   39.74 + protocol="application/pgp-encrypted";
   39.75 + boundary="AtVJlmqHfYE8gLiORs1kPweDez4yeKjvh"
   39.76 +
   39.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   39.78 +--AtVJlmqHfYE8gLiORs1kPweDez4yeKjvh
   39.79 +Content-Type: application/pgp-encrypted
   39.80 +Content-Description: PGP/MIME version identification
   39.81 +
   39.82 +Version: 1
   39.83 +
   39.84 +--AtVJlmqHfYE8gLiORs1kPweDez4yeKjvh
   39.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   39.86 +Content-Description: OpenPGP encrypted message
   39.87 +Content-Disposition: inline; filename="encrypted.asc"
   39.88 +
   39.89 +-----BEGIN PGP MESSAGE-----
   39.90 +
   39.91 +hQEMA7q5KACkWjQlAQgAkEC2Hj/1Nr7m2OSKnIkvhAeByhakeCcLDJqGpTGe0QjX
   39.92 +WURJHT7vLmRNFYGUV1fDm+ngB12kJ7eIft8K2F2ZKwqCV333GdSG3kSqZeyvio3S
   39.93 ++aDJCFEMjHU5eSM/y0lLexFd1SoBcApRuFO3/S3uWtMNpuw1wxIsuBKIES+EkilE
   39.94 +VMbrUOY5AQNtB/xELARdDnEiOV6fxRNo5paKB+PChIodlc9dPogjuGVKPUHQr0sl
   39.95 +SrqrFT7m9tklwrGPg1hsGfZMOL+07K8p3TeIiyw3QGP13sXl7jnEFMC0s/9h1I0J
   39.96 +tmHBI8luREUVLHzMy7wW+Z+RBpgcysFCIIN0t12+boUBDAMPXc/IGp+IZwEH/28f
   39.97 +nfI8k5zIN4zCN741jBCOdo8c961fUqEdO8bHXBPrXAbtiKDJ71tUwlwQEWSoobqj
   39.98 +KJ4Y/7y1Z+T+/uHPV3bOGy3BtRVHVWX9m9yQWuKBCR35PlsN37teb96eZhWirLAx
   39.99 +eDShhrSO2RMBGrmGKxTlFkSuhsFI//+d86wb9c9h6QEcpWaBZC7Cc4Lfz7t6330Q
  39.100 +e7wwHN49DGU7dgCRsVWktjCDb1qqBmpyOuY6fJgpRY+afBHMxt7Eg22r4kfvWRSe
  39.101 +gPl2Acf0UfRirLAoxFlJnxKFPmhZ+p8OS2Xzun+snuaZvQuHdl3lIIQ0UgC0iHes
  39.102 +shTq4ZWEijd4/4wZliDS6wFs0v5NOnr6d6tFxKoVZYqIcogbFsIyAPi7ir6TXY8M
  39.103 +SpZ3eqUaN+UOqRY6E/Mb47wEkQ7wEBPq5exPsUT0KGNm8WmF+srgpz5Dic+ZG4KE
  39.104 +lQkxrIVP2ZrrCt9T+QrXWP40/mPNEkM+o/zT2tA9SjDPJoKc4wj89NSKsj93gFzP
  39.105 +8RrYiqt1gwh/stBX06+ue0gPlShJVXL7vOQSMJpBpFlY3g2LaRJx01Suz59EbKZx
  39.106 +ZtF9sclvH4mNGZu4u11KhJ9BH1lSf83M02W+TFgDH+Ujuf6tw1X/W12Wq6ZxgekL
  39.107 +zIfSY+GnaT8AmtZoxDxNbOCTeJFtH8Q4HteCMBjbBoej0145/lHKjCqbjddkTH3I
  39.108 +x2MvbMVps1/YYi7dXQ9eug08P9kADONmoAhIJHKYT9wIvDDMuJsvUKYQq3ag/FIp
  39.109 +vUujGI5hmMLizt3ATqXuSwZAswWjE6UM9Fpi92pIiQDAYio0qPSGdMkUvrcL+1WZ
  39.110 +BmhCzeCZx5gS3Wd9p4BsWg+flG48hRNQyspl2nm34jZiilacUgxBAKhDKAULQGba
  39.111 +6Qe74zgTInsDP4gWEK5L9dIi/WOubfxi7KyjRSl8D2OZdHxRfIyCcnN/6yr4EjhQ
  39.112 +DnOVMPP4a+V943w+VWgcSl0fGDP2PimJAVO2iU8FheTBv2wEg/WbgzZHuJqJ3Uv2
  39.113 +073ZyHi9NxVvUCZ5rnxFPsHAN8UzGkMhQCmP9qqbZMqfL9L0ZxKeUJHk3aFiX5J7
  39.114 +AafwjZ61eNJkTtuDBBRy/rk8BggwfMk5Jb0pEJWKbUIQjvTAMgcjrn4ZLhWmWIi6
  39.115 +jTtG8srJmrOHNSjo5X7XZYOOK+db00wN7tGb+3iKcBpT8AcLUWZpeH9QAOf3MYwP
  39.116 +BdLcXCRuvtLdsM6o1A59FMjGHNfNl4z9+wK1tVIhc/wCgbbop71WDr6YHIJ/0jEY
  39.117 +94IlZVAmwNJvxd6Eu3yHFqC+G3sBFSc58JyT98aa0UZFgfGDVm/dBlA+H1elnHP9
  39.118 +TDn2brKuff9ei7O2rQFdtMLRabLyNlHlPuB1AIXhtIXvJmZpWt6OMGoQJ5whtUy8
  39.119 +2d6zecsOMGbsiVyZHDvAsTpkJAAtO7kVgBk9of69Ud4L1c+HlnNjXg8dbaLeq0kE
  39.120 +u5Cfx1IvCtNa8GUpLcdcU3IzAuKyc1e1lR3RmFr9Tfnb/0nXs6reIYnj1Moei8yE
  39.121 +Df0F6GVQufDOwoDzH0IRG93ceRaLnBvQYv2Je3g86iSqTnRElWf1rIzDiFkRb5d1
  39.122 +sOVTjlj2PnXaKlMl9zUJgEiem7/KIg349wcSNpv1a2oIOtjNjezBzRiAi4cfr5Uq
  39.123 +u6J2EotD2rVQHtDRy1RZZG268Yj/KK0WLvVvvp4/8hiKYxOrEJ7oqUXpVwM7zxj4
  39.124 +1p6dZukl6vLYzL1ec8MJDafq1arURb7+DMvKNYQhqQk8i6se4+RKpP+ouN4Fhy4a
  39.125 +fOTqTrChzItGDsyBThYubXFo7stdiK/ArAoNg2DDgJbuldstpeGPeaU4tkIsd+hV
  39.126 +DOHzEDl9QdtB4BQOVm751wCQyJEupwppmTafH8ocAu6eX+t+c+4xUJ3gt/F0Ls+4
  39.127 +/LxdXGmPdd8PAVKldJ3IqqMN35YY4BiV85nEkvIE0x0PtCFXB9XEgF3eo8tz5Vhh
  39.128 +tAs6wI8z9J2nCEyqdPlBB0hHWhwzIVahRZZC6SSfLRGoxSgefqCzAoX8COrdu+0x
  39.129 +LjPtYdehK3skWiyw7UeJc0obuL2rSsR2ZAMBC2MePmMCTgRAEELY8DLPr3eEt5pG
  39.130 +1S9Kmjto9tPKR9e1eJ6xUfc5gmUmD75LKq4nQuntCe9qsdCcpyPTx1izMeLKWoJK
  39.131 +27r8EyCcjHogAWp29WSWS/7ZtiC/BS2Eax3gkkZBfMh3VysN8s1wim/rtnNrvDO7
  39.132 +uED1hyc4zVZAy5tVoDXyRi7PwFGKB62jKn3RbpT8Vetyfcco3R0frABLIUSjmiAl
  39.133 +9t3JcnCVoethlcnng8L7srwqi4PxU958SNGRgu8fTBkp82q/fiyDfq3atdqg3HoD
  39.134 +v8pzPZlzFVJkFsbjDr1A4q0QmJE5QOAUGITdmhzf3V8hDUBZHFKekp6nY1FP2lqa
  39.135 +6Hugvu8cNEJZC2fgWMz5pQjkc6RkSxFDLI6T64+BBDUSkpYZQkgPVcCiBqnIa5aR
  39.136 +0nqPGwTY45mcX472r7510U9I71Bvuszh3l1/IHq6U6/w9+m0brB+56k7E3EAbQ7O
  39.137 +kcqNotZYCcSP1DKJTLZLcrGi0NOsXZJtg5z6ACZCCAQro7Nx3M91R+mkr0i/29nD
  39.138 +4cMSbThX4hhjEnEE6WTUfCobAp7uQv5ucA1PwF5xXgI3vAuGOIXF5FPKzkJW/13A
  39.139 +3XBSYNO36s/a5P/3WaQ/w06HowbF05LKyXvFd9+/4eX2wuhrZ5TzdouWQoOpBjew
  39.140 +nVFNhKTEtZ50lH9bJRwKsOxZvPY9CEgjf9lqJ/GkD/K5o/AxIIYGsfEzEcCZ1lac
  39.141 +aPLvuzcN9kEJ7yKhzgWyhkZXfYt96tXxKqBhuY5a6GDNZRQ0BuIu6nGiBvx6pujz
  39.142 +t2YwIyJT3VDGbRDIeLPAd+NaZl0K11ommMrFGBzWOAF5Y/dDGMsSgYeRrYsdfMXk
  39.143 +OccDUeHHe6HfeDfRSMgnYjfIRNHbY7DGCucpGknT2pNA3860mnwi2rmCVog5Nstt
  39.144 +qAc0UEdNzrYhJdcjqTYz0+Fi98mJsiGnk3rjkgQapOJ1T2Do0YDyQKYcn5ASLV76
  39.145 +6ZoeRaVgfx5BQYDNFuCzqYSnnpflyo7EKbTdm46ue3Rz/mIys2DiYFyYbLNAHZAE
  39.146 +G1ukDAFVwLWB8DapcLGxX41KP4xuI9fJcxuf47raEN6FcUaHTTUYvZF/raFnBsWe
  39.147 +YEHYqtinK3BzEetylYMLI6r8B5xnPaovez5CkFkCXnZWwE65K0hJtbR6OgT6I8ry
  39.148 +rjq9ENiRoMWTdK+4DRpktpBw5VM4SZ9IKgh6BxObQA4lhoMvMj4n4oD1UdsbZY10
  39.149 +Whynz8V0LEPM9G2AXKv8arjQVgMLG1hBhMMjI5Je+DOevzV/39iu8OOhkoEfgqOm
  39.150 +ZvdH3b3jOxF8F2Xl6zeRzes8kLD1nTtNRj8Hv1XMP/XsZcZDNzWbySD4fySz3FT4
  39.151 +figxKoMera83ebgCxTHmE6OIjsf0zingQ7QTAYvgYcc8ANH+5mS1tm2Zf/uVH1tn
  39.152 +zjBhPh9Bsju6gcXvTwXcakzrCJrXDHbalILOd8uGDJvMkjH671jTt9QGw2ubdmhl
  39.153 +tMlPr7DQ6U3NWO8QQfHHH/OLZr+Xz9wW3Z/8DJb9l31BeeIfKwG8q8KCf/y+2l+t
  39.154 +dOc6ezdvi4+gDxGIDZDNoDU7XKq64bmzlBixcDCH3Ewr/LXCsMoW8YGpDw7lNoPc
  39.155 +3MysA3OSbsWGPnAQ83YHW511aDGwPDi6fhilOIY29sstkZ5tKxnNV93bDB+IwgqL
  39.156 +LgobHFMrUmh18ogS2ksGf3w203lRhAfm59Q4wlGQuyDXLfFqG2qYealgYVWSmuXa
  39.157 +qKiV8yqpUo7ByCVT/H+UgO70Ajqc1TVWz7NX+TopegoOYWSNqcRmvj2UrWpMgriA
  39.158 +M3ZiPfPbqldNBdqfFdILAkCxO7VNOew9g3vGBZT5gbiH8s4=
  39.159 +=iU12
  39.160 +-----END PGP MESSAGE-----
  39.161 +
  39.162 +--AtVJlmqHfYE8gLiORs1kPweDez4yeKjvh--
    40.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    40.2 +++ b/test/test_mails/Signed PGP_MIME by unknown signer no attach.eml	Wed May 30 18:31:23 2018 +0200
    40.3 @@ -0,0 +1,119 @@
    40.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    40.5 +X-Original-To: krista@gnunet.org
    40.6 +Delivered-To: krista@gnunet.org
    40.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    40.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id C98361C00BE
    40.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:03:27 +0200 (CEST)
   40.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   40.11 +	id 96CAB1C037C; Wed, 16 May 2018 10:03:27 +0200 (CEST)
   40.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   40.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 733FF1C0378
   40.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:03:27 +0200 (CEST)
   40.15 +Received: from vmmaildmz2.informatik.tu-muenchen.de (vmmaildmz2.informatik.tu-muenchen.de [131.159.0.88])
   40.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 5F5421C0376
   40.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:03:27 +0200 (CEST)
   40.18 +Received: by vmmaildmz2.informatik.tu-muenchen.de (Postfix, from userid 109)
   40.19 +	id 5D9981C24B7; Wed, 16 May 2018 10:03:27 +0200 (CEST)
   40.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   40.21 +	vmmaildmz2.informatik.tu-muenchen.de
   40.22 +X-Spam-Level: 
   40.23 +X-Spam-Status: No, score=-3.6 required=7.0 tests=BAYES_00,ENCRYPTED_MESSAGE,
   40.24 +	RCVD_IN_DNSWL_LOW,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,UNPARSEABLE_RELAY
   40.25 +	autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   40.26 +Received: from vmmaildmz2.informatik.tu-muenchen.de (localhost [127.0.0.1])
   40.27 +	by vmmaildmz2.informatik.tu-muenchen.de (Postfix) with ESMTP id B5B751C24B5
   40.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:03:25 +0200 (CEST)
   40.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [81.169.146.148])
   40.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   40.31 +	(No client certificate requested)
   40.32 +	by vmmaildmz2.informatik.tu-muenchen.de (Postfix) with ESMTPS id A63F81C24B0
   40.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:03:23 +0200 (CEST)
   40.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   40.35 +Received: from mailin.rzone.de ([unix socket])
   40.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   40.37 +	Wed, 16 May 2018 10:02:59 +0200 (CEST)
   40.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   40.39 +Authentication-Results: strato.com; arc=none
   40.40 +Authentication-Results: strato.com; dkim=none
   40.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_trash_signer@darthmama.org"
   40.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   40.43 +X-RZG-Expurgate: clean/bounce
   40.44 +X-RZG-Expurgate-ID: 149500::1526457779-00007BD6-42E491C8/18/0
   40.45 +X-Strato-MessageType: email
   40.46 +X-RZG-CLASS-ID: mi00
   40.47 +Received-SPF: none
   40.48 +	client-ip=131.159.0.8;
   40.49 +	helo="mail-out1.informatik.tu-muenchen.de";
   40.50 +	envelope-from="krista@pep-project.org";
   40.51 +	receiver=smtpin.rzone.de;
   40.52 +	identity=mailfrom;
   40.53 +Received: from mail-out1.informatik.tu-muenchen.de ([131.159.0.8])
   40.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   40.55 +	with ESMTPS id g0a676u4G82xmH8
   40.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   40.57 +	(Client did not present a certificate)
   40.58 +	for <integrity_test_recip@darthmama.org>;
   40.59 +	Wed, 16 May 2018 10:02:59 +0200 (CEST)
   40.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   40.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id 1078D1042EC0B
   40.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 10:02:54 +0200 (CEST)
   40.63 +To: integrity_test_recip@darthmama.org
   40.64 +From: integrity_test_trash_signer@darthmama.org
   40.65 +Subject: Signed PGP/MIME by unknown signer, no attach
   40.66 +Openpgp: preference=signencrypt
   40.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   40.68 +Message-ID: <bd243d73-0744-1ec0-306a-aa20c4d02b23@pep-project.org>
   40.69 +Date: Wed, 16 May 2018 10:02:53 +0200
   40.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   40.71 + Thunderbird/52.7.0
   40.72 +MIME-Version: 1.0
   40.73 +Content-Type: multipart/encrypted;
   40.74 + protocol="application/pgp-encrypted";
   40.75 + boundary="f3IGGwWaGwvtbxbGXxJgmhHKDNIlkn4Nr"
   40.76 +
   40.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   40.78 +--f3IGGwWaGwvtbxbGXxJgmhHKDNIlkn4Nr
   40.79 +Content-Type: application/pgp-encrypted
   40.80 +Content-Description: PGP/MIME version identification
   40.81 +
   40.82 +Version: 1
   40.83 +
   40.84 +--f3IGGwWaGwvtbxbGXxJgmhHKDNIlkn4Nr
   40.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   40.86 +Content-Description: OpenPGP encrypted message
   40.87 +Content-Disposition: inline; filename="encrypted.asc"
   40.88 +
   40.89 +-----BEGIN PGP MESSAGE-----
   40.90 +
   40.91 +hQEMA7q5KACkWjQlAQf+I/TvgKPPGX6UhF6plGcdROk/CyynB7YfG79aMfKT/7fS
   40.92 +tuK6jXv+dy1KNKHNl0LKzvTdsHy/sSETk8QglgBEm95d9m76aHVD0qEaL3/jrE/P
   40.93 +paYHo7QAypSmaFwImuU7oeT5jisrsh6VAqvfbqgvxCjJXY6TzMS/oVu5I5/JsczE
   40.94 +lmgoDZ0+pKr64UmhJAgF/RWTx4KFA+MLXIl4KHPDP/FQbK6VNq1C/IoxYZk7me4h
   40.95 +tKnufmTlTPtB8AOWCIhNjJKcQ/M4pf86q76IvAbJyt/1YaQ9uwLB9SG2Stz20fvr
   40.96 +dYJMICFPf1sdMYeAHXgy4FkoBHUwo6Lt3SY87rHJWoUBDAMPXc/IGp+IZwEIAJV9
   40.97 +2UZl3xSlCkJOGTMhpvaEdjCfTTOxR8li5Emn8rYl8GgcG6Q2HBk0Sbln9W2/ykD7
   40.98 +UC23NdlNQhuh3HBdDjVDA0PKY2AnuUE9R4aI+bBuRBxOUBaXxvYUDsdUvbmm/c3P
   40.99 +068bAxvNSGrjblzrQS+8Ee23lqOFr6iYmybfZfmbdXpo2GL9gF/jYxWtwUBqWegm
  40.100 +FoZiLlHYYP1AZJTwrpp2VYkvhXVeQ8XfUs6YOuJ3hIQWOSv+8thfkTIK9HHxLOPs
  40.101 +uHRGlegRg97vWEE0SgvYqzEFhbBuRT2sCqSD8NxMDmfPZlDDcgm99tCK6zv+LAtC
  40.102 +ZQH0/7f5z8R4nJmGmE/S6QGTpLjCx584ZPTtEz1y+JWvtUGmNE/Fq9vqa17bgazy
  40.103 +nQ9WTIHvNU3ZBxqyIfwo1yoiPa4FuyHWDgmfscqeuGj82d3EYT6AnWFlzhEgnn35
  40.104 +j8LZal2l0LGPY1tiqzvtcbZutnKsiNWu7VpUwnGwgi34Ku8rzd1dxHAbuH4EZaUd
  40.105 +cM7m7Px48bo5iJIH8sovnWU9HLQdo1JqKdWRqQkxxsbqIEvmi85KjFEuSLeOEK+K
  40.106 +76mSHsm06RbJ83W4scFexzMStctzboM6fGhXXg4mwzfKFh+0964tBTgP8luse4sr
  40.107 +Ge9S5sX8zE7Zqew90MxysmCR3K/zf031QbtLEtJnUk6Z8EkbcmDBft8k42TmOz0R
  40.108 +dyN/rGdJgv1G2SYKJgojZObBaSeFVaC8EshPYkfkyGHnfuUb6c+kWtye4KDqmEHQ
  40.109 +l8LWEB6Mji3virvv3dzrGUSZns85jevRpsfradGc4n21CqwNrREFgRpgz0tDP95B
  40.110 +4PHCK/7leZqYaOJNU47rYuysapFi30qsqO4ibgP/D+4ElSgeHCSLDLbsGL2ni/8I
  40.111 +e35xfj9SzVip1YwpV97Ab3DfqGDOSQlIppKfiN3iiTtimzm/S4iorQ9tluq5IH5B
  40.112 +Bfef6NHMXkUWRgEB9P4cHq3mal4XCiKbU2klmIK7neSyLkDGROKqFfFlKTD6vvK2
  40.113 +wFSHrvPHRJuQv3aKcmS4AK7BN8vo7TxnsZkCxTaKy4ytUde+n38aSEzsPH57U4d/
  40.114 +R2Zv4277xYRUMN3FerYLCk/a3nA2ZFu7a3bDDsviKx64hnCbnV/BeJ8jtuREua1D
  40.115 +cdxlwr4a7kSZJAuEGxgpS3YJgtslDtzY7/UuXHtk9ejrAe+ethQBx/GiNreh3HqL
  40.116 +SGBn5rI532HBxc6XG4t6oAzP4R8m67ti8nOptFWsKMnSx04iuRleFVERJApi+tdz
  40.117 +7mKoLM+G6FMBfZH17fa0+McuhhMyn5HQsJ1EpadNvlnsKxrbvH/WecoCvLenLmXu
  40.118 +M5ERw2PRBxDklmWW1ZwQE/4zHED/FDZkf7PjD4GILD0eviB4qHE=
  40.119 +=ldkn
  40.120 +-----END PGP MESSAGE-----
  40.121 +
  40.122 +--f3IGGwWaGwvtbxbGXxJgmhHKDNIlkn4Nr--
    41.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    41.2 +++ b/test/test_mails/Signed attached key PGP_MIME.eml	Wed May 30 18:31:23 2018 +0200
    41.3 @@ -0,0 +1,159 @@
    41.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    41.5 +X-Original-To: krista@gnunet.org
    41.6 +Delivered-To: krista@gnunet.org
    41.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    41.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 636F61C00BE
    41.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   41.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   41.11 +	id 37F1B1C0389; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   41.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   41.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 147831C0378
   41.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   41.15 +Received: from vmmaildmz2.informatik.tu-muenchen.de (vmmaildmz2.informatik.tu-muenchen.de [131.159.0.88])
   41.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 09A2C1C0376
   41.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   41.18 +Received: by vmmaildmz2.informatik.tu-muenchen.de (Postfix, from userid 109)
   41.19 +	id 080941C24B5; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   41.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   41.21 +	vmmaildmz2.informatik.tu-muenchen.de
   41.22 +X-Spam-Level: 
   41.23 +X-Spam-Status: No, score=-3.2 required=7.0 tests=AWL,BAYES_00,
   41.24 +	ENCRYPTED_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,
   41.25 +	UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   41.26 +Received: from vmmaildmz2.informatik.tu-muenchen.de (localhost [127.0.0.1])
   41.27 +	by vmmaildmz2.informatik.tu-muenchen.de (Postfix) with ESMTP id 53FDD1C24B7
   41.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:07 +0200 (CEST)
   41.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [81.169.146.146])
   41.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   41.31 +	(No client certificate requested)
   41.32 +	by vmmaildmz2.informatik.tu-muenchen.de (Postfix) with ESMTPS id 42BFB1C24B0
   41.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:07 +0200 (CEST)
   41.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   41.35 +Received: from mailin.rzone.de ([unix socket])
   41.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   41.37 +	Wed, 16 May 2018 09:54:43 +0200 (CEST)
   41.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   41.39 +Authentication-Results: strato.com; arc=none
   41.40 +Authentication-Results: strato.com; dkim=none
   41.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_signer@darthmama.org"
   41.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   41.43 +X-RZG-Expurgate: clean/normal
   41.44 +X-RZG-Expurgate-ID: 149500::1526457282-0000141B-8075D1E7/0/0
   41.45 +X-Strato-MessageType: email
   41.46 +X-RZG-CLASS-ID: mi00
   41.47 +Received-SPF: none
   41.48 +	client-ip=131.159.0.36;
   41.49 +	helo="mail-out2.informatik.tu-muenchen.de";
   41.50 +	envelope-from="krista@pep-project.org";
   41.51 +	receiver=smtpin.rzone.de;
   41.52 +	identity=mailfrom;
   41.53 +Received: from mail-out2.informatik.tu-muenchen.de ([131.159.0.36])
   41.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   41.55 +	with ESMTPS id i0a4c8u4G7sgmTb
   41.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   41.57 +	(Client did not present a certificate)
   41.58 +	for <integrity_test_recip@darthmama.org>;
   41.59 +	Wed, 16 May 2018 09:54:42 +0200 (CEST)
   41.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   41.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id 66DE31042EC0B
   41.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 09:54:37 +0200 (CEST)
   41.63 +From: integrity_test_signer@darthmama.org
   41.64 +Subject: Signed, attached key, PGP/MIME
   41.65 +To: integrity_test_recip@darthmama.org
   41.66 +Openpgp: preference=signencrypt
   41.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   41.68 +Message-ID: <d1a88625-1061-5065-4def-01d307a2da18@pep-project.org>
   41.69 +Date: Wed, 16 May 2018 09:54:37 +0200
   41.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   41.71 + Thunderbird/52.7.0
   41.72 +MIME-Version: 1.0
   41.73 +Content-Type: multipart/encrypted;
   41.74 + protocol="application/pgp-encrypted";
   41.75 + boundary="GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0"
   41.76 +
   41.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   41.78 +--GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0
   41.79 +Content-Type: application/pgp-encrypted
   41.80 +Content-Description: PGP/MIME version identification
   41.81 +
   41.82 +Version: 1
   41.83 +
   41.84 +--GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0
   41.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   41.86 +Content-Description: OpenPGP encrypted message
   41.87 +Content-Disposition: inline; filename="encrypted.asc"
   41.88 +
   41.89 +-----BEGIN PGP MESSAGE-----
   41.90 +
   41.91 +hQEMA7q5KACkWjQlAQf+Na4vN+Vliz8ku1u55rAXsIim9Kut9R3ipoOF+kINodWK
   41.92 +3K3JuA0kBSps34xH7TEH4OdW0JruIzdGTpC/5PKbw1BRbtoAk5AlO6J4iYPoxP4V
   41.93 +wv5UT6QdeM0XvSxNfs066YKaJvwKMPKHDJbLmppMy49bNNUdkg/L/fnbIyJnTgM8
   41.94 +3Qffufgr+gdtk4mdUZF31QKgNIkDz86jUw8U3IDGDkORtfOaUqqfwXb1MtjQfUxa
   41.95 +ihWREYhOHA525HEKJ2hXge10/5CmGcwieE9e0okK/wuFfzNf/P51DJP7a8oGTIzG
   41.96 +9CTz+4iHCeVOkJrnoxQqb/1QQxp4Yoyabo9Z1uDyKYUBDAOoEzPD1TjKdAEH/Aoy
   41.97 +IttAUjW0lvLI5tjLm2EXVmM21eIqNkzvgI2WadvSTTZaHFpDVhWexITF94MF4hvf
   41.98 +GsbwtEn4jsarLU3cnDIwKsv1oRViM2mBntMUKD+XizPbEHk5Wvl7syemaf5xSOba
   41.99 +xYbGWsDOzV5phTg1N0xpJwcq25uKp7A8RCXu7V1B01ek5hYfXwSn2jp/dcFZXE4e
  41.100 +JA3G4e59KCrOAo352u/ETOGi8j/2tkEutIlhJluPeH9b1eVnbxfRBMmaYyzZ2crQ
  41.101 +wVJ2YUdlOYdqTSlaW6CQsyEH3oYyN2NVWsZaeemOYI1sbbjqFr/tcgOYcBzMpvyn
  41.102 +yNdU8IJDBeRrAgaZDeXS6wGStVJPthh3RAot/lX8+sdUOOObfTNAH9n4SdfNnuQk
  41.103 +dhI8kR6xK0Md5gSLZW0SGrw3+JGPW3qLqTYdVFS9F1JDZN5ErRZ6qEcugSChk7v0
  41.104 +bylWuEAu78iXnLgI6mUojBlrOsu90Mhf/1QEivm/afyiBi9YtDQR8myFyx+DdBVb
  41.105 +LRF0sIHXHfBu8qImNe3s6T7RYgTt1ud+AdIN/Gzpzwzm5XhNYnKWclj2UqFAHMjy
  41.106 +GHW92SR/jY515kDpQ8+RtOxtM6VV/FxWlMLlcsAoCmeq4BwrL38mOgwfkhLoEvJc
  41.107 +Tw3FTtTo8u+mfvdh+1jBZOMBUy+B/2u/+n+yQ4d6zNaPwvxDYLrxo6tWVeD7m4Ls
  41.108 +NDEVPSdoneGPEgnBIIxIxrnIaF4sy3WLEzRoX/82/WgVQOFzJ9Og9s5XYkEejq7z
  41.109 +ZKS5S2q3hAggOnYf+dMoiqMs/36g2nCD54TvZ0PfRHO/jpK9RybfZohC+BRDZzPj
  41.110 +mCy/xbF5j2dd+P/D3jZnET9717hap2NUKiYjQTFFg32SF5rs7Mo8KaC3BIPUWGQg
  41.111 +46IpA4J25PTTj2qaJfu1ctqHlhhjU7PQjfaZ0dSvcEg6TYDQF35HQniMObKJuEDD
  41.112 +6b0Ygqd0js30ENM3QP9QMU6hTF+fzzLc2bRO6P79BOerTYlM5GZoADPR4DlJj7+m
  41.113 +rXrw0UEq4BZdVQ8Wkqvw4kvidc+v0kI3TjFDb/yymGo75v06VBQhZuQpeNWfX0Us
  41.114 +wtxuSmMiwDJd6RNf1OpfCfjalxpKexxpopR7D4UbByMoGqcuXNYDm8ghwdj7Ikvi
  41.115 ++WhJEHIgZpD8Ew8EZ84hL/VNzZd++jqgMxIZT9szWtY3ixsom98+8hKnpQcFnmxs
  41.116 +/nNsfFWr/IZejneiR8rqmRQGL3u3Qaowg8J1NVH8AeVi5uS8pDQYeCUONcYDTMAR
  41.117 +42shA03EvxBUNVk9Q0EwEra52GiEDzodje3mQHpElCYP3YDxCc1H9hTL3Ye76J1C
  41.118 +krs3tXznQaBcdafj6SlBOYxsFy1roc4E5hlrQNJnzA5wPv8vCWjE6vW0ymL0MP14
  41.119 +crIpWQ3aF9wmFhJO2k15VKl4ZP4Fcepa+p93YJ9HhY1v8GckYvC3o/NFLI2jdINZ
  41.120 +kHKBzaxTdml1jx0p6ysU6EmO/Drf1abdCVBbBGQm9EmUtHYM6EtEuyR/vLEQnqd+
  41.121 +xutYlQhgzW31h1mwG1ZmY5XwnqbzfWyM5lzkezbLrDIAa6UlJKs2u7zox4XmJ3T3
  41.122 +SvptmmOknAxNvk5+8EnGnqi/YDtaRuGa/NvuUhmCMTv8rHnhdCEgi06E7esj54aW
  41.123 +JJcdzswISnXT9OXkBuCr0tMAUjI3lLMl8UqbhCPr9c75CQ1bSZEri2t73qjUEcIN
  41.124 +ltwaiyy9E8F1yRPmW4beyYySgloLD+caXVCv+qFc5HPzvmg1gHV8mzjcZjepgDZs
  41.125 +Y0oeL8qjA42JD61tJ78ZC0cWILQRgwP9ePONeq8/l1Mir/oE9m/X3hmrbO/+fWQR
  41.126 +6rxVZEoIHFSedePMaEQ2JCmc+vk1t2l1hHbGv8De+TAmlNEJT6MefTTfYwNQ9H9x
  41.127 +0tyxZpZKtFDnw5RiRQSHP/tLaA+d2YseOFo9IZBNfu3XAjbkfHS8p6MV5TMKXt/y
  41.128 +8GCD17RqZ79o3bUqzmykvUAhdnfUHbEqlhBU14S4G+uBNMCTJbASqxWLjLRql4Ju
  41.129 +2mx6xAuDiBi4Uqvmy+x9M+X8d9+k7rGDoVbC8wvdaTeFkvK/+Z7ZXtNVa8pJWsnV
  41.130 +fxsnUoSQtW5L8ReKp5cvnL8NVBf+Au/deWY7LgVDOIYPEjQHXGRoeHQRVTwMvLNq
  41.131 +c/uLpQ0xq2nd1XqhWXjtO0FCep/at73pZVB2E3Sw8ed68cxMDECkJ2tb1oyC5FLd
  41.132 +a0Gwfqbi/4ROYPt57bxPTvJJrHfFZKplgMvhejifvU78eY7Qil239St4M2ry8q/m
  41.133 +boq/IX9d1k/uorl26TmKfObXFOzCb7rqv92qGpDKm7yxS7g7rFuN/aUThxEXBGUK
  41.134 +MB+2UbhBSTC7mz/e+Y9M1X4XcWAvnpKhiGlZ3SC96XibGNymZ5TYbjBoXggNUAai
  41.135 +tuqxlRUlBobrdivBMnwptFl+QTYjvbtoDGfGfrZaAoKGAB5peItFpeVw/BlEZYu3
  41.136 +DPkGDPe9PQkGA08hM/G/PrZCa9UNu0g6rPA5FhIQdU0skMvxOxBSIjkrBov9MDXX
  41.137 +eh3XWF+asV0JMx3uVcoxMAGrZOc7sCxt77x6jW8V/VQJvMckJOU1mZNiepW8xJUE
  41.138 +5/GOrQU49p7GGOWeu5/HMRCn8K4h4aFC/CjLaCcPBI5HNM28xm0QdjqFFMkaVnxA
  41.139 +JrK4QJitTZ2kDATI5CBQTuRhUrLeIJYMnBUkrhzwtUPz193CDMo1toI1hmXyB3YY
  41.140 +jzYQGGwvhHEFrLKn0ZpzHQj3LHEeXHAps8Rsn99bp3o30QmYG39mhsex13ezgjl5
  41.141 +DDnDQH0sr/xoptXyA4Dx2mhrwUJvKjwlxf74whxKoZHgeYX2Jmgm2jL6VeQvcuFM
  41.142 +e2DS4JU3vhWQYXeDA26WbePCFees3tRyWFBkLHs8yqgDoqyFnnEJ2Nd2GtsQs9RT
  41.143 +Tn/UlgQuIhCxn4kJwdc3+UWu6hP3sVlWgg8C3SlY6UDiUGWyGxDFeOyEpBOseh0C
  41.144 +Z8YhAJNhPvNDjPtF0kAFyayhf/fThMc8YnHLEN6g433IKCJ2HdoPrzPlMpPT8dN4
  41.145 +6XlOop3Q+TkTXJoxW10tSapyQysu3pxhi0KSpv5xqflIRy9bPZo4OdeXO8dEBmpM
  41.146 +F3njnv+cdQkkXmd4FKkMIYHV84bCKn5sWljMgG9WJuxKy8GGvxMcSOguY+CpiSQx
  41.147 +/YYqlfH+SYWDRzOTFvRmEwdGZiXAWWA046rUTJBM5NKvzP18ZdadVe8h9cVnE0Rh
  41.148 ++/KUGmIk2wk5cePWiHoSYWxOS5OK2bI/Up17/Y7cxPQ5ymptH8YL3UtcnY5eSyny
  41.149 +8fRK/P2Ekzo90pcSkfBB3/hL0sppu71lEwA/l3OPcZb8QuHpS3WijrEPbyOSZhtZ
  41.150 +ntODRhWSLelSVPHbV36H1sUfEW+1wkjCIOzbJHnNf84S4HzzIfVIFi8SRZ20bWrh
  41.151 +kRZUooUwljbfBK+SAokYeKGCzn1G8mdeyk3ENvU6mwmx2zXyJlQE5rkdkcnk9Lf0
  41.152 +/LNTl8ppP6JfJYuuwX3sge7IFwege2mD4+6FqociIKpoMvDmjMB6JR2d4Jx/5xxR
  41.153 +KjrOtM9sV1q6dEFU8d3HVINhOxnAOQd3WdsN09x6OmepUceCVJ0FAFVivD3Swf0g
  41.154 +B1kKZh6q9RNqf7XGA8oId8fab7cGFcGMOQsEKEWsrmfV+2GMoWd6rUoM74ZxPNxJ
  41.155 +j/2MEV1pm6YeY3i2qHOvAP4HbIdv8rfp30jZwZCqJSnOjYzlbhoeqo8waDHuxHgr
  41.156 +gkcx+y6bZikAOFOukUc3KdC/JdkAQI51XvTBIlEtnlSkzXMUjcyBMK/Pb2WYYbtr
  41.157 +a4CSkOHFRUrqMsc2IdHmlteGwT5aI2Dh7Suei86YGqkCGRgf5L5/RRTD0/IZt+GM
  41.158 +vN6SFrchelb0TGFAZ7tGcK8uodSin6b1LnH5dHv2/g==
  41.159 +=2AN1
  41.160 +-----END PGP MESSAGE-----
  41.161 +
  41.162 +--GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0--
    42.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    42.2 +++ b/test/test_mails/Signed attached key PGP_MIME_corrupted.eml	Wed May 30 18:31:23 2018 +0200
    42.3 @@ -0,0 +1,159 @@
    42.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    42.5 +X-Original-To: krista@gnunet.org
    42.6 +Delivered-To: krista@gnunet.org
    42.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    42.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 636F61C00BE
    42.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   42.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   42.11 +	id 37F1B1C0389; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   42.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   42.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 147831C0378
   42.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   42.15 +Received: from vmmaildmz2.informatik.tu-muenchen.de (vmmaildmz2.informatik.tu-muenchen.de [131.159.0.88])
   42.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 09A2C1C0376
   42.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   42.18 +Received: by vmmaildmz2.informatik.tu-muenchen.de (Postfix, from userid 109)
   42.19 +	id 080941C24B5; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   42.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   42.21 +	vmmaildmz2.informatik.tu-muenchen.de
   42.22 +X-Spam-Level: 
   42.23 +X-Spam-Status: No, score=-3.2 required=7.0 tests=AWL,BAYES_00,
   42.24 +	ENCRYPTED_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,
   42.25 +	UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   42.26 +Received: from vmmaildmz2.informatik.tu-muenchen.de (localhost [127.0.0.1])
   42.27 +	by vmmaildmz2.informatik.tu-muenchen.de (Postfix) with ESMTP id 53FDD1C24B7
   42.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:07 +0200 (CEST)
   42.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [81.169.146.146])
   42.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   42.31 +	(No client certificate requested)
   42.32 +	by vmmaildmz2.informatik.tu-muenchen.de (Postfix) with ESMTPS id 42BFB1C24B0
   42.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:07 +0200 (CEST)
   42.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   42.35 +Received: from mailin.rzone.de ([unix socket])
   42.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   42.37 +	Wed, 16 May 2018 09:54:43 +0200 (CEST)
   42.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   42.39 +Authentication-Results: strato.com; arc=none
   42.40 +Authentication-Results: strato.com; dkim=none
   42.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_signer@darthmama.org"
   42.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   42.43 +X-RZG-Expurgate: clean/normal
   42.44 +X-RZG-Expurgate-ID: 149500::1526457282-0000141B-8075D1E7/0/0
   42.45 +X-Strato-MessageType: email
   42.46 +X-RZG-CLASS-ID: mi00
   42.47 +Received-SPF: none
   42.48 +	client-ip=131.159.0.36;
   42.49 +	helo="mail-out2.informatik.tu-muenchen.de";
   42.50 +	envelope-from="krista@pep-project.org";
   42.51 +	receiver=smtpin.rzone.de;
   42.52 +	identity=mailfrom;
   42.53 +Received: from mail-out2.informatik.tu-muenchen.de ([131.159.0.36])
   42.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   42.55 +	with ESMTPS id i0a4c8u4G7sgmTb
   42.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   42.57 +	(Client did not present a certificate)
   42.58 +	for <integrity_test_recip@darthmama.org>;
   42.59 +	Wed, 16 May 2018 09:54:42 +0200 (CEST)
   42.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   42.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id 66DE31042EC0B
   42.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 09:54:37 +0200 (CEST)
   42.63 +From: integrity_test_signer@darthmama.org
   42.64 +Subject: Signed, attached key, PGP/MIME
   42.65 +To: integrity_test_recip@darthmama.org
   42.66 +Openpgp: preference=signencrypt
   42.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   42.68 +Message-ID: <d1a88625-1061-5065-4def-01d307a2da18@pep-project.org>
   42.69 +Date: Wed, 16 May 2018 09:54:37 +0200
   42.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   42.71 + Thunderbird/52.7.0
   42.72 +MIME-Version: 1.0
   42.73 +Content-Type: multipart/encrypted;
   42.74 + protocol="application/pgp-encrypted";
   42.75 + boundary="GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0"
   42.76 +
   42.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   42.78 +--GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0
   42.79 +Content-Type: application/pgp-encrypted
   42.80 +Content-Description: PGP/MIME version identification
   42.81 +
   42.82 +Version: 1
   42.83 +
   42.84 +--GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0
   42.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   42.86 +Content-Description: OpenPGP encrypted message
   42.87 +Content-Disposition: inline; filename="encrypted.asc"
   42.88 +
   42.89 +-----BEGIN PGP MESSAGE-----
   42.90 +
   42.91 +hQEMA7q5KACkWjQlAQf+Na4vN+Vliz8ku1u55rAXsIim9Kut9R3ipoOF+kINodWK
   42.92 +3K3JuA0kBSps34xH7TEH4OdW0JruIzdGTpC/5PKbw1BRbtoAk5AlO6J4iYPoxP4V
   42.93 +wv5UT6QdeM0XvSxNfs066YKaJvwKMPKHDJbLmppMy49bNNUdkg/L/fnbIyJnTgM8
   42.94 +3Qffufgr+gdtk4mdUZF31QKgNIkDz86jUw8U3IDGDkORtfOaUqqfwXb1MtjQfUxa
   42.95 +ihWREYhOHA525HEKJ2hXge10/5CmGcwieE9e0okK/wuFfzNf/P51DJP7a8oGTIzG
   42.96 +9CTz+4iHCeVOkJrnoxQqb/1QQxp4Yoyabo9Z1uDyKYUBDAOoEzPD1TjKdAEH/Aoy
   42.97 +IttAUjW0lvLI5tjLm2EXVmM21eIqNkzvgI2WadvSTTZaHFpDVhWexITF94MF4hvf
   42.98 +GsbwtEn4jsarLU3cnDIwKsv1oRViM2mBntMUKD+XizPbEHk5Wvl7syemaf5xSOba
   42.99 +xYbGWsDOzV5phTg1N0xpJwcq25uKp7A8RCXu7V1B01ek5hYfXwSn2jp/dcFZXE4e
  42.100 +JA3G4e59KCrOAo352u/ETOGi8j/2tkEutIlhJluPeH9b1eVnbxfRBMmaYyzZ2crQ
  42.101 +wVJ2YUdlOYdqTSlaW6CQsyEH3oYyN2NVWsZaeemOYI1sbbjqFr/tcgOYcBzMpvyn
  42.102 +yNdU8IJDBeRrAgaZDeXS6wGStVJPthh3RAot/lX8+sdUOOObfTNAH9n4SdfNnuQk
  42.103 +dhI8kR6xK0Md5gSLZW0SGrw3+JGPW3qLqTYdVFS9F1JDZN5ErRZ6qEcugSChk7v0
  42.104 +bylWuEAu78iXnLgI6mUojBlrOsu90Mhf/1QEivm/afyiBi9YtDQR8myFyx+DdBVb
  42.105 +LRF0sIHXHfBu8qImNe3s6T7RYgTt1ud+AdIN/Gzpzwzm5XhNYnKWclj2UqFAHMjy
  42.106 +GHW92SR/jY515kDpQ8+RtOxtM6VV/FxWlMLlcsAoCmeq4BwrL38mOgwfkhLoEvJc
  42.107 +Tw3FTtTo8u+mfvdh+1jBZOMBUy+B/2u/+n+yQ4d6zNaPwvxDYLrxo6tWVeD7m4Ls
  42.108 +NDEVPSdoneGPEgnBIIxIxrnIaF4sy3WLEzRoX/82/WgVQOFzJ9Og9s5XYkEejq7z
  42.109 +ZKS5S2q3hAggOnYf+dMoiqMs/36g2nCD54TvZ0PfRHO/jpK9RybfZohC+BRDZzPj
  42.110 +mCy/xbF5j2dd+P/D3jZnET9717hap2NUKiYjQTFFg32SF5rs7Mo8KaC3BIPUWGQg
  42.111 +46IpA4J25PTTj2qaJfu1ctqHlhhjU7PQjfaZ0dSvcEg6TYDQF35HQniMObKJuEDD
  42.112 +6b0Ygqd0js30ENM3QP9QMU6hTF+fzzLc2bRO6P79BOerTYlM5GZoADPR4DlJj7+m
  42.113 +rXrw0UEq4BZdVQ8Wkqvw4kvidc+v0kI3TjFDb/yymGo75v06VBQhZuQpeNWfX0Us
  42.114 +wtxuSmMiwDJd6RNf1OpfCfjalxpKexxpopR7D4UbByMoGqcuXNYDm8ghwdj7Ikvi
  42.115 ++WhJEHIgZpD8Ew8EZ84hL/VNzZd++jqgMxIZT9szWtY3ixsom98+8hKnpQcFnmxs
  42.116 +/nNsfFWr/IZejneiR8rqmRQGL3u3Qaowg8J1NVH8AeVi5uS8pDQYeCUONcYDTMAR
  42.117 +42shA03EvxBUNVk9Q0EwEra52GiEDzodje3mQHpElCYP3YDxCc1H9hTL3Ye76J1C
  42.118 +krs3tXznQaBcdafj6SlBOYxsFy1roc4E5hlrQNJnzA5wPv8vCWjE6vW0ymL0MP14
  42.119 +kHKBzaxTdml1jx0p6ysU6EmO/Drf1abdCVBbBGQm9EmUtHYM6EtEuyR/vLEQnqd+
  42.120 +xutYlQhgzW31h1mwG1ZmY5XwnqbzfWyM5lzkezbLrDIAa6UlJKs2u7zox4XmJ3T3
  42.121 +SvptmmOknAxNvk5+8EnGnqi/YDtaRuGa/NvuUhmCMTv8rHnhdCEgi06E7esj54aW
  42.122 +JJcdzswISnXT9OXkBuCr0tMAUjI3lLMl8UqbhCPr9c75CQ1bSZEri2t73qjUEcIN
  42.123 +ltwaiyy9E8F1yRPmW4beyYySgloLD+caXVCv+qFc5HPzvmg1gHV8mzjcZjepgDZs
  42.124 +Y0oeL8qjA42JD61tJ78ZC0cWILQRgwP9ePONeq8/l1Mir/oE9m/X3hmrbO/+fWQR
  42.125 +6rxVZEoIHFSedePMaEQ2JCmc+vk1t2l1hHbGv8De+TAmlNEJT6MefTTfYwNQ9H9x
  42.126 +0tyxZpZKtFDnw5RiRQSHP/tLaA+d2YseOFo9IZBNfu3XAjbkfHS8p6MV5TMKXt/y
  42.127 +8GCD17RqZ79o3bUqzmykvUAhdnfUHbEqlhBU14S4G+uBNMCTJbASqxWLjLRql4Ju
  42.128 +2mx6xAuDiBi4Uqvmy+x9M+X8d9+k7rGDoVbC8wvdaTeFkvK/+Z7ZXtNVa8pJWsnV
  42.129 +fxsnUoSQtW5L8ReKp5cvnL8NVBf+Au/deWY7LgVDOIYPEjQHXGRoeHQRVTwMvLNq
  42.130 +c/uLpQ0xq2nd1XqhWXjtO0FCep/at73pZVB2E3Sw8ed68cxMDECkJ2tb1oyC5FLd
  42.131 +a0Gwfqbi/4ROYPt57bxPTvJJrHfFZKplgMvhejifvU78eY7Qil239St4M2ry8q/m
  42.132 +boq/IX9d1k/uorl26TmKfObXFOzCb7rqv92qGpDKm7yxS7g7rFuN/aUThxEXBGUK
  42.133 +MB+2UbhBSTC7mz/e+Y9M1X4XcWAvnpKhiGlZ3SC96XibGNymZ5TYbjBoXggNUAai
  42.134 +tuqxlRUlBobrdivBMnwptFl+QTYjvbtoDGfGfrZaAoKGAB5peItFpeVw/BlEZYu3
  42.135 +DPkGDPe9PQkGA08hM/G/PrZCa9UNu0g6rPA5FhIQdU0skMvxOxBSIjkrBov9MDXX
  42.136 +eh3XWF+asV0JMx3uVcoxMAGrZOc7sCxt77x6jW8V/VQJvMckJOU1mZNiepW8xJUE
  42.137 +5/GOrQU49p7GGOWeu5/HMRCn8K4h4aFC/CjLaCcPBI5HNM28xm0QdjqFFMkaVnxA
  42.138 +JrK4QJitTZ2kDATI5CBQTuRhUrLeIJYMnBUkrhzwtUPz193CDMo1toI1hmXyB3YY
  42.139 +jzYQGGwvhHEFrLKn0ZpzHQj3LHEeXHAps8Rsn99bp3o30QmYG39mhsex13ezgjl5
  42.140 +DDnDQH0sr/xoptXyA4Dx2mhrwUJvKjwlxf74whxKoZHgeYX2Jmgm2jL6VeQvcuFM
  42.141 +e2DS4JU3vhWQYXeDA26WbePCFees3tRyWFBkLHs8yqgDoqyFnnEJ2Nd2GtsQs9RT
  42.142 +Tn/UlgQuIhCxn4kJwdc3+UWu6hP3sVlWgg8C3SlY6UDiUGWyGxDFeOyEpBOseh0C
  42.143 +Z8YhAJNhPvNDjPtF0kAFyayhf/fThMc8YnHLEN6g433IKCJ2HdoPrzPlMpPT8dN4
  42.144 +6XlOop3Q+TkTXJoxW10tSapyQysu3pxhi0KSpv5xqflIRy9bPZo4OdeXO8dEBmpM
  42.145 +crIpWQ3aF9wmFhJO2k15VKl4ZP4Fcepa+p93YJ9HhY1v8GckYvC3o/NFLI2jdINZ
  42.146 +F3njnv+cdQkkXmd4FKkMIYHV84bCKn5sWljMgG9WJuxKy8GGvxMcSOguY+CpiSQx
  42.147 +/YYqlfH+SYWDRzOTFvRmEwdGZiXAWWA046rUTJBM5NKvzP18ZdadVe8h9cVnE0Rh
  42.148 ++/KUGmIk2wk5cePWiHoSYWxOS5OK2bI/Up17/Y7cxPQ5ymptH8YL3UtcnY5eSyny
  42.149 +8fRK/P2Ekzo90pcSkfBB3/hL0sppu71lEwA/l3OPcZb8QuHpS3WijrEPbyOSZhtZ
  42.150 +ntODRhWSLelSVPHbV36H1sUfEW+1wkjCIOzbJHnNf84S4HzzIfVIFi8SRZ20bWrh
  42.151 +kRZUooUwljbfBK+SAokYeKGCzn1G8mdeyk3ENvU6mwmx2zXyJlQE5rkdkcnk9Lf0
  42.152 +/LNTl8ppP6JfJYuuwX3sge7IFwege2mD4+6FqociIKpoMvDmjMB6JR2d4Jx/5xxR
  42.153 +KjrOtM9sV1q6dEFU8d3HVINhOxnAOQd3WdsN09x6OmepUceCVJ0FAFVivD3Swf0g
  42.154 +B1kKZh6q9RNqf7XGA8oId8fab7cGFcGMOQsEKEWsrmfV+2GMoWd6rUoM74ZxPNxJ
  42.155 +j/2MEV1pm6YeY3i2qHOvAP4HbIdv8rfp30jZwZCqJSnOjYzlbhoeqo8waDHuxHgr
  42.156 +gkcx+y6bZikAOFOukUc3KdC/JdkAQI51XvTBIlEtnlSkzXMUjcyBMK/Pb2WYYbtr
  42.157 +a4CSkOHFRUrqMsc2IdHmlteGwT5aI2Dh7Suei86YGqkCGRgf5L5/RRTD0/IZt+GM
  42.158 +vN6SFrchelb0TGFAZ7tGcK8uodSin6b1LnH5dHv2/g==
  42.159 +=2AN1
  42.160 +-----END PGP MESSAGE-----
  42.161 +
  42.162 +--GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0--
    43.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    43.2 +++ b/test/test_mails/Signed no attach PGP_MIME.eml	Wed May 30 18:31:23 2018 +0200
    43.3 @@ -0,0 +1,118 @@
    43.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    43.5 +X-Original-To: krista@gnunet.org
    43.6 +Delivered-To: krista@gnunet.org
    43.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    43.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 472E31C00BE
    43.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:53:45 +0200 (CEST)
   43.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   43.11 +	id 1997F1C037C; Wed, 16 May 2018 09:53:45 +0200 (CEST)
   43.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   43.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id E86001C0376
   43.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:53:44 +0200 (CEST)
   43.15 +Received: from vmmaildmz1.informatik.tu-muenchen.de (vmmaildmz1.informatik.tu-muenchen.de [131.159.0.87])
   43.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id D482E1C037C
   43.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:53:44 +0200 (CEST)
   43.18 +Received: by vmmaildmz1.informatik.tu-muenchen.de (Postfix, from userid 109)
   43.19 +	id D30771C2DB6; Wed, 16 May 2018 09:53:44 +0200 (CEST)
   43.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   43.21 +	vmmaildmz1.informatik.tu-muenchen.de
   43.22 +X-Spam-Level: 
   43.23 +X-Spam-Status: No, score=-3.1 required=7.0 tests=AWL,BAYES_00,
   43.24 +	ENCRYPTED_MESSAGE,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,UNPARSEABLE_RELAY
   43.25 +	autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   43.26 +Received: from vmmaildmz1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   43.27 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTP id AE6991C2DB5
   43.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:53:37 +0200 (CEST)
   43.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [85.215.255.1])
   43.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   43.31 +	(No client certificate requested)
   43.32 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTPS id 9E3BF1C2DAD
   43.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:53:32 +0200 (CEST)
   43.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   43.35 +Received: from mailin.rzone.de ([unix socket])
   43.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   43.37 +	Wed, 16 May 2018 09:53:14 +0200 (CEST)
   43.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   43.39 +Authentication-Results: strato.com; arc=none
   43.40 +Authentication-Results: strato.com; dkim=none
   43.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_signer@darthmama.org"
   43.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   43.43 +X-RZG-Expurgate: clean/normal
   43.44 +X-RZG-Expurgate-ID: 149500::1526457194-00007BD0-5EC49E58/0/0
   43.45 +X-Strato-MessageType: email
   43.46 +X-RZG-CLASS-ID: mi00
   43.47 +Received-SPF: none
   43.48 +	client-ip=131.159.0.8;
   43.49 +	helo="mail-out1.informatik.tu-muenchen.de";
   43.50 +	envelope-from="krista@pep-project.org";
   43.51 +	receiver=smtpin.rzone.de;
   43.52 +	identity=mailfrom;
   43.53 +Received: from mail-out1.informatik.tu-muenchen.de ([131.159.0.8])
   43.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   43.55 +	with ESMTPS id n01032u4G7rElHf
   43.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   43.57 +	(Client did not present a certificate)
   43.58 +	for <integrity_test_recip@darthmama.org>;
   43.59 +	Wed, 16 May 2018 09:53:14 +0200 (CEST)
   43.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   43.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id 409EC1042EC0B
   43.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 09:53:08 +0200 (CEST)
   43.63 +To: integrity_test_recip@darthmama.org
   43.64 +From: integrity_test_signer@darthmama.org
   43.65 +Subject: Signed, no attach, PGP/MIME
   43.66 +Openpgp: preference=signencrypt
   43.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   43.68 +Message-ID: <4ce2245d-226d-cf82-06dc-aba9e3a0ecbe@pep-project.org>
   43.69 +Date: Wed, 16 May 2018 09:53:07 +0200
   43.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   43.71 + Thunderbird/52.7.0
   43.72 +MIME-Version: 1.0
   43.73 +Content-Type: multipart/encrypted;
   43.74 + protocol="application/pgp-encrypted";
   43.75 + boundary="SlMATmhocAaxIBNTEgPcJilafyaUyA1G7"
   43.76 +
   43.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   43.78 +--SlMATmhocAaxIBNTEgPcJilafyaUyA1G7
   43.79 +Content-Type: application/pgp-encrypted
   43.80 +Content-Description: PGP/MIME version identification
   43.81 +
   43.82 +Version: 1
   43.83 +
   43.84 +--SlMATmhocAaxIBNTEgPcJilafyaUyA1G7
   43.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   43.86 +Content-Description: OpenPGP encrypted message
   43.87 +Content-Disposition: inline; filename="encrypted.asc"
   43.88 +
   43.89 +-----BEGIN PGP MESSAGE-----
   43.90 +
   43.91 +hQEMA7q5KACkWjQlAQf/SJxqQPmfvxAJOW4E/UkBhs7i0f69pzABNpHtMNUdM0+P
   43.92 +19sC0+t6XXljKfACi6uw/4mZmVPm4xTUhwKw/676Eh03XV86gWQaervpm0LkQtzZ
   43.93 +cX5GsUaMArzQC4z9jmpDlPMz+u6XKlRYGzKgzdju8QfVVGpta/SgYCKV177cXgpm
   43.94 +FYmyyzq4XL/quNf8ql3RS1gi0ciY1mSc+b7Z82FMtDbwiHgfxtrSOcIxuuNCEe15
   43.95 +gJY6w8Z5i/ib/rxuN0TNxbXhsjHUqmfiKOVnSQpHG8sLZsGCGCyyONlEbavYAgpk
   43.96 +z8GcdEEcuZbreuVvWgZ3XcEqk/ztNpcLbXT1UXoPl4UBDAOoEzPD1TjKdAEH/1g8
   43.97 +LD7Qw3sxX/b0OkMM2DWsNreZpSp2pJAHVcFJBeSCzJCdGgGVH6cjig86lLwWlzEV
   43.98 +h3xQG38KrTF66yFk0XQTePDr90DPEXCjKObjloNwV6Ir6fwZwPum98kVZa6mjBGk
   43.99 +kEgVc95P6EAUnBZHsuE6mHaToSf2vN9GkVukoMHlmMM5q4goJcIk9DSVZw4BpBzC
  43.100 +cFWSPuQRN9XZKxSYebFmff1ETBFs9K7yYsYvGRVZOWxaVUMIVIr0p8Y9NXar58oW
  43.101 ++j+gAWWbWvAK72bYuN8hfG9cjR/4/pzlCsSz3zXqXbM/tsGtVexy0h+Cb6a77iT4
  43.102 +UB/vAO55e6V6o2bPUdjS6QFkeXKs6njHJ+YEDuHhh4UifgEV2gO2adkYexnRDsy/
  43.103 +cUGRKTu3AvDgybKBM8q78UComXnZVKpzq2sNeU9ff9HDJVHjonUx93YOoGhHYfKO
  43.104 +1kSJc2wY9jOTCY/6ZimTAu+qzRYr6QFtSQa1i1qVz3iAVPphbbVePXxsFiuwBrGo
  43.105 +RuAHY2DClxDrYA9/ziTU/fp12VCyDhBu3T2ParLqAiBHOyn2dqVjQXqovkRqWp7h
  43.106 +nb8uX2O1z8lMsjX+DcYAlva2/+Dli+yAj9YQ7IWEwjMht0RS0kb6bji7Uv9ukm2y
  43.107 +zDzKXGfa1Ri3HYTZhMpPrxnoV+aoZQDi6QElg0aqu+P/UwmXWQ1SKpOJoMUNg9zb
  43.108 +Bj6A0glicHTo7yArtGXP0hliwY8fs169esXvs+kffogpmuZTk0MLq8fGmpDC81ut
  43.109 +/NJplorQRrYO3gg8ZPdMfMVHPtNB6cXpS4eusYwar3Hm8qzD2PoApqp7kqb6qjY6
  43.110 +pUDQAwNI6/aq71/P6EAenvGPBDGmFrVD6PIJ9TI7svd9pMD2XODzno/rRgutaAJw
  43.111 +CYrcZAbs44O/ord5sYuXkLjBR327myIja98sbcN+uHTdgIRn4u3ymwaN1RLSUI3/
  43.112 +9RSn3N6ypDa06b2JssDk8YFWfIMiQ5mnwbiGL1Axv6rbH8SI1DOJqDuKlVBFMmG7
  43.113 +wCsSYiSO6iB1Wm9cZkJ//3Y3328otMGBBviFK25ukMx3uKTjD5TYFd+8v/bZao8z
  43.114 +SY+rMRCaXytsul/D8QtwEczXsgv8jt+zGBhtPoSBMfoPAd4KliE4ma3XJpSQEPIs
  43.115 +YdCZPFZp/Mv/ftIaOR/QxV3zkdLAZAqy1kuZZCLg0MPOBhtJ7xOhI2SnvgOpCOvN
  43.116 +6e8JEEJsOr/Mzm5uFHdejZ78XX1y/Ha4gnD8mLy7qk/OVgT/+W6rMjL5U73rvIg5
  43.117 +5q4LxSI2oTcR/rJ51lXxWB+QJ/RskYh6x4AoLzWz1lCER2ChS7Q8fNLhEb9P
  43.118 +=GJ3e
  43.119 +-----END PGP MESSAGE-----
  43.120 +
  43.121 +--SlMATmhocAaxIBNTEgPcJilafyaUyA1G7--
    44.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    44.2 +++ b/test/test_mails/Unsigned from PGP_MIME_attach.eml	Wed May 30 18:31:23 2018 +0200
    44.3 @@ -0,0 +1,150 @@
    44.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    44.5 +X-Original-To: krista@gnunet.org
    44.6 +Delivered-To: krista@gnunet.org
    44.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    44.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 327781C00BE
    44.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:15 +0200 (CEST)
   44.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   44.11 +	id 050801C0383; Wed, 16 May 2018 09:49:15 +0200 (CEST)
   44.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   44.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id D5D1D1C038B
   44.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:14 +0200 (CEST)
   44.15 +Received: from vmmaildmz1.informatik.tu-muenchen.de (vmmaildmz1.informatik.tu-muenchen.de [131.159.0.87])
   44.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id CBBE51C0383
   44.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:14 +0200 (CEST)
   44.18 +Received: by vmmaildmz1.informatik.tu-muenchen.de (Postfix, from userid 109)
   44.19 +	id CA4411C2DAD; Wed, 16 May 2018 09:49:14 +0200 (CEST)
   44.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   44.21 +	vmmaildmz1.informatik.tu-muenchen.de
   44.22 +X-Spam-Level: 
   44.23 +X-Spam-Status: No, score=-3.6 required=7.0 tests=BAYES_00,ENCRYPTED_MESSAGE,
   44.24 +	RCVD_IN_DNSWL_LOW,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,TVD_SPACE_RATIO,
   44.25 +	UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   44.26 +Received: from vmmaildmz1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   44.27 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTP id 29AA91C2DAF
   44.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:13 +0200 (CEST)
   44.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [81.169.146.145])
   44.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   44.31 +	(No client certificate requested)
   44.32 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTPS id 1A23B1C2DAE
   44.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:13 +0200 (CEST)
   44.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   44.35 +Received: from mailin.rzone.de ([unix socket])
   44.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   44.37 +	Wed, 16 May 2018 09:48:50 +0200 (CEST)
   44.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   44.39 +Authentication-Results: strato.com; arc=none
   44.40 +Authentication-Results: strato.com; dkim=none
   44.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_signer@darthmama.org"
   44.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   44.43 +X-RZG-Expurgate: clean/normal
   44.44 +X-RZG-Expurgate-ID: 149500::1526456930-00006984-19EF2D04/0/0
   44.45 +X-Strato-MessageType: email
   44.46 +X-RZG-CLASS-ID: mi00
   44.47 +Received-SPF: none
   44.48 +	client-ip=131.159.0.8;
   44.49 +	helo="mail-out1.informatik.tu-muenchen.de";
   44.50 +	envelope-from="krista@pep-project.org";
   44.51 +	receiver=smtpin.rzone.de;
   44.52 +	identity=mailfrom;
   44.53 +Received: from mail-out1.informatik.tu-muenchen.de ([131.159.0.8])
   44.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   44.55 +	with ESMTPS id f06010u4G7moPus
   44.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   44.57 +	(Client did not present a certificate)
   44.58 +	for <integrity_test_recip@darthmama.org>;
   44.59 +	Wed, 16 May 2018 09:48:50 +0200 (CEST)
   44.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   44.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id AF9981042EC0B
   44.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 09:48:44 +0200 (CEST)
   44.63 +From: integrity_test_signer@darthmama.org
   44.64 +Subject: Unsigned from PGP/MIME
   44.65 +To: integrity_test_recip@darthmama.org
   44.66 +Openpgp: preference=signencrypt
   44.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   44.68 +Message-ID: <6bc15b8b-8778-bfce-3b39-e8be8ea2c0f1@pep-project.org>
   44.69 +Date: Wed, 16 May 2018 09:48:44 +0200
   44.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   44.71 + Thunderbird/52.7.0
   44.72 +MIME-Version: 1.0
   44.73 +Content-Type: multipart/encrypted;
   44.74 + protocol="application/pgp-encrypted";
   44.75 + boundary="zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992"
   44.76 +
   44.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   44.78 +--zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992
   44.79 +Content-Type: application/pgp-encrypted
   44.80 +Content-Description: PGP/MIME version identification
   44.81 +
   44.82 +Version: 1
   44.83 +
   44.84 +--zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992
   44.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   44.86 +Content-Description: OpenPGP encrypted message
   44.87 +Content-Disposition: inline; filename="encrypted.asc"
   44.88 +
   44.89 +-----BEGIN PGP MESSAGE-----
   44.90 +
   44.91 +hQEMA7q5KACkWjQlAQgA2G39AYioFWXQzvOEcbCCOqRPfXCM0Rf0Z8n1E+VdkAnh
   44.92 +crSNhyki1xLS2INETt/MMfjyzqT4YDGH28GZx/JLRK8qk48CGU9f/jsSQv27ibiB
   44.93 +jWJsG3QlOa5cvF7dEF6hmn7xYpBCycHPk1vJ8mxXKcP/TxZtwWZf9P7CHCHpJdbV
   44.94 +tbWUlUZbea4okSs4WuUETDCPGLbzRBCzBQYoadV4Z/3FuorUVCfBIPq28AryGjdl
   44.95 +m4JpzOlj0J19tALOfBz45Wo+Lmc38e6cAugLoFREJhv9HrUgq6mr/7GHOqgVJYXL
   44.96 +KPub8h1vzUsMjvnHo/vQaQuPdl3HI5HZJmtzjTO1W4UBDAOoEzPD1TjKdAEH/R93
   44.97 +ShsSEr3aluEkIcqTQPd1FWWtSKzXXamnAlUtrnBz7jDMCvNF8ke+cAdlNIuHnVso
   44.98 +EhvfxYvYnsaV6oGzRPebEua7Yq9eGc7C7FjwchyGk/gN56ii+rkms2zeuDGfR1k7
   44.99 +dBpP80b20Ok3j6wZXQiMxd+G+dUO4i3HQhnnfLgSONsMmj3mROKztRPAMvx21IV8
  44.100 +GLr4OkysZ+LBiPJimKSP00Zaw4AOnYkET2RvQCKRV5cMQk5fMyrb/EfR5Im9wlku
  44.101 +t1YvXIjvZNUG6iA8BIAOkUKrQQFHCOXP9pYRU+ent3BC8bj2bv2/Leaom1PFWUhA
  44.102 +22YXV+7HhnhjC7SCftPS6wGh8qGR1AaGH9/KFXM5cIebuSpVLIRrgsv6pf2OWHvF
  44.103 +PFho7nTM5JFG++oqlBxy3sZE/H17pTjsi3Uj7Ny5+HxSP+oUmeKCdLg2kVH4vwOt
  44.104 +cCTtvHepR1Q3T4ydraTW0GldIRcBHP0HzHvzpgIYW1WH7KhKoIvyU8MImuF7I7tp
  44.105 +fG/R/CIJ+kOomcxZA6QYtOXXsNGOSX6AQDktBwxK0mSqw5OhzuLmj/4mKwJ+tXQi
  44.106 +57JSbWQ6g6RpVhHQMJPP0PKRC1K7RD4RnJ1h6yc1bLnrLA3xtl+XG90V85wdDBSj
  44.107 +v6PSyhYqFKwjV5PQBe2cQNgFgH5aHBhT5zV3jGd7YdXkFoaiseU0BJWfw44iF9az
  44.108 +ESOBuk/3eKkvdlEZRtsK6plhDsk6P4JaKP8n0fKD7sXzXrwdwtIGJ9gU3GH7MM1+
  44.109 +S+uE5RYfA3X0RGBMMwtx+oxph8txH8I4YtBw+GYMQv05PLichtKhASWFzpxqDMgP
  44.110 +5MWd7Epf/j940DRRyp0S1cAY2Y8Mg8Sq8Zqhcs8jKXdTDyFNxWLSA0RFxrUgv3XN
  44.111 +Ov0QzEJesTUr5fgkhTqMefBRiC2PBLWVuBHWZHEHLh944qAxZAW25VAxiUKIJNT6
  44.112 +j6aU5vtC6sKQyaz93pvTvH/jx1QEiWNyoXfyOrysHAFqnRNrgtzJB63ofNd2WTzC
  44.113 +vAvytaiPWip04pIE53Uawg1ioa64FLE28OZOCTyZnyG+jdfXgwkc6MtkOnocPTxt
  44.114 +d8XSjAGta8083uvJkeCkNXL4gz9EVlN4NL5OGS7FySgNQ44cUVPnVG0uKdA2lcG3
  44.115 +OCNkw99S24SyNZnaN8bRNZc8BrXDxetm+ACdDqBeA0xfCS88YYVlTSwA2dz4oqLk
  44.116 +FXWnYUVEFhTP21v4/Rd3zTFo2dmwAwYQjZHKiTSwwhndM6MbKx3sNpLiGUVKvHZn
  44.117 +S5NCqTbY7dEtuvM14Scy/xdqGiZ1R6kX3UkI5foYEAB3c0VdnzfXe206Q3hiRWe9
  44.118 +Pk12n5DytcL8XRhjJBkeysKWoO1Jbrc0Vrk6krzxPwefTa2HULn5ew89x/y43iEb
  44.119 +jdc+VyI19xmxDAp/OiLLX1ASst+Cr1j3Jw+mnZq7KKelFj1fmLxmoZmDW/EJHlxI
  44.120 +7w4WasHS5vk2P7BAH2Qf1mco5z2e5OpugZTwJi7YsaOm/UEWRfexInWxaKKPtUaD
  44.121 +8RfV8gH8TxpNJAWV7Yt6KxgR3KWNmk3ybKAzBD6s6sJqAHSGJvuAnv3MjReuZHLY
  44.122 +75RaIwUZ2mHyDfULrttGq+gM3NhTf8n4JiK6CWMrlEBFHQcO41287lTbgFXf2FXe
  44.123 +ff8Br8iwpwNyPKQykDva6x7QFqOGH+Xs5sySkwTWBMIZbWSctzVCp+3Sa7Tvr2AY
  44.124 +m1bd4ERNaLu2YetkrFVTOEJ4SSbqKNOiM4pTXkbuYZaCqo1wN8DOzgI+qLY7AO4d
  44.125 +iWe/0Np8ppBSdmkFDp+UuVgrxkJdEEk1itxn7pu6e9JLmFuf9Rgfekmpja0B6Mxl
  44.126 +EZiQJttR4c7UeEipEWLYdb0jpJRDxwdYurSHKuFEFjen4wiCnpC3Dvl7oFs5fE/6
  44.127 +w6vu5jqgBIHxjwe3vLBjBQFTL3J8bsw+b54PnX/DO3O/HeF/BKolr+zUisT8hvql
  44.128 +Thj6fK788sW9vQdWB1OHv2wZkiVFjRLSceve0eFUk5H+rBz9lI2zZmnqa90pxIKO
  44.129 +snk6LRS7YLUPCrr0GuxkTMN+pwyyc5ORARzSv6M73UBxHoTQOxr62WwfAoMpfZ64
  44.130 +VDk1we1YuhzxHTRbFZLZ+Bi9n5WLfedY2DIa0F1V3hso8lusUnMrDeyS19T0WNFl
  44.131 +JPBZ9/3gsHB7SCFPv2m3mGbHQffEyHzzr41TrJU9B6EKyE4ncCTlmkYdrAOUBmVx
  44.132 +lN5zMHn5mlhMliJqv53/cB2OxboKQtje9NXxi92ftWvzrfX6gkYqt0cf3xS+ivqD
  44.133 +EAlEslBqoUr7/4PeQkjDVtTlNJRpL4e9fz6cGwVRZjMOcRZOII62t+A8ya1gI/WL
  44.134 +49Y5lr+Sp9ObXUwM0DiAPN8EVuY7xL9mjc6zawv5H+GGt01xnbSJjqhDiYRiRtjx
  44.135 +V1d49NdkHafJ5w+evvLynYvzkkCm5LD+vxgO4z0b/QZw+lxmrA3xT2amIiz53FWz
  44.136 +8UWiRK7JgG/mdoLuzK3FRQavM2zu0z/vYdjOPk8F9TiLEmn2SOTE+dYhtyfrzqgw
  44.137 +UxRgUTLkJDjSTl0ZL4ZLDc11r6G0pFB6U3sAoHPGvnITVkdS4oAI8WkGZQFpS7oD
  44.138 +YDAZ4El9L4LCSagU2lDYr2U2lXZ+B503+0yJJfSzgLh17eQPEEbUuFuMzZQzJ/+z
  44.139 +7Ic8XFlwe73X5D6GR0EnC6Vy9DJGHWQARUY6h3x8LY6uyM5UMgWoejodfig22uwx
  44.140 +DIbLDM9vRnpd7VSr0nmREYqNFoUzsRPf8REzgKk1sU/Wl+ocPSkE+FLh5p92Y4cv
  44.141 +k06i8jlm2SL8siUCt09rKepWZqSPpytwifo1T4Tn2ncjYcngi44jUmQybYYOkrdB
  44.142 ++1o8ZN59j9ceCvVYQHU7AG4EsHQ3LQnhzAN3RvnLl+iam2S5eWSKsOpZ5c76hwUi
  44.143 +5WjIKeumzZyd81OOjV8RBofL0q+m10naW09L5bAkQNhO0g8sT64HSp4fk179wJmE
  44.144 +yMBlhGGbcBwFcnIceSG6Cvjk249vk2FmPqC9OagqggejmDt5fyJo8QJ55sp4jFMT
  44.145 +wCAE3woX1ZSJNAEEfYAwD9urATqjAl3oUV+LFNRVUA2OcmDFY9683BmB6ZW+gEhM
  44.146 +SbaART7zSuQhRbnKmV4UIyxC/KiGJrG12ZdyeNN+4Y8jL3rhoJCMrbW8aIamRXaJ
  44.147 +jXGU1lJbDDGvzIg6a4RtGG30lAIbzpyHtlOYOeBBZPtkRNzIwTjpe75sEwZvFmay
  44.148 +1KQUBUt3RxwQDDZeMoSAwpDBlI4aP+UOHjj3NMaaR69eGcJqT6iKBjJjTia84Lm8
  44.149 +CMIqbEwQIB+8vJrZozgFL9TgWsPy9mLi3czyonWMDwhd7g==
  44.150 +=7Nv1
  44.151 +-----END PGP MESSAGE-----
  44.152 +
  44.153 +--zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992--
    45.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    45.2 +++ b/test/test_mails/Unsigned from PGP_MIME_attach_corrupted.eml	Wed May 30 18:31:23 2018 +0200
    45.3 @@ -0,0 +1,150 @@
    45.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    45.5 +X-Original-To: krista@gnunet.org
    45.6 +Delivered-To: krista@gnunet.org
    45.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    45.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 327781C00BE
    45.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:15 +0200 (CEST)
   45.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   45.11 +	id 050801C0383; Wed, 16 May 2018 09:49:15 +0200 (CEST)
   45.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   45.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id D5D1D1C038B
   45.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:14 +0200 (CEST)
   45.15 +Received: from vmmaildmz1.informatik.tu-muenchen.de (vmmaildmz1.informatik.tu-muenchen.de [131.159.0.87])
   45.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id CBBE51C0383
   45.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:14 +0200 (CEST)
   45.18 +Received: by vmmaildmz1.informatik.tu-muenchen.de (Postfix, from userid 109)
   45.19 +	id CA4411C2DAD; Wed, 16 May 2018 09:49:14 +0200 (CEST)
   45.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   45.21 +	vmmaildmz1.informatik.tu-muenchen.de
   45.22 +X-Spam-Level: 
   45.23 +X-Spam-Status: No, score=-3.6 required=7.0 tests=BAYES_00,ENCRYPTED_MESSAGE,
   45.24 +	RCVD_IN_DNSWL_LOW,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,TVD_SPACE_RATIO,
   45.25 +	UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   45.26 +Received: from vmmaildmz1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   45.27 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTP id 29AA91C2DAF
   45.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:13 +0200 (CEST)
   45.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [81.169.146.145])
   45.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   45.31 +	(No client certificate requested)
   45.32 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTPS id 1A23B1C2DAE
   45.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:13 +0200 (CEST)
   45.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   45.35 +Received: from mailin.rzone.de ([unix socket])
   45.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   45.37 +	Wed, 16 May 2018 09:48:50 +0200 (CEST)
   45.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   45.39 +Authentication-Results: strato.com; arc=none
   45.40 +Authentication-Results: strato.com; dkim=none
   45.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_signer@darthmama.org"
   45.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   45.43 +X-RZG-Expurgate: clean/normal
   45.44 +X-RZG-Expurgate-ID: 149500::1526456930-00006984-19EF2D04/0/0
   45.45 +X-Strato-MessageType: email
   45.46 +X-RZG-CLASS-ID: mi00
   45.47 +Received-SPF: none
   45.48 +	client-ip=131.159.0.8;
   45.49 +	helo="mail-out1.informatik.tu-muenchen.de";
   45.50 +	envelope-from="krista@pep-project.org";
   45.51 +	receiver=smtpin.rzone.de;
   45.52 +	identity=mailfrom;
   45.53 +Received: from mail-out1.informatik.tu-muenchen.de ([131.159.0.8])
   45.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   45.55 +	with ESMTPS id f06010u4G7moPus
   45.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   45.57 +	(Client did not present a certificate)
   45.58 +	for <integrity_test_recip@darthmama.org>;
   45.59 +	Wed, 16 May 2018 09:48:50 +0200 (CEST)
   45.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   45.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id AF9981042EC0B
   45.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 09:48:44 +0200 (CEST)
   45.63 +From: integrity_test_signer@darthmama.org
   45.64 +Subject: Unsigned from PGP/MIME
   45.65 +To: integrity_test_recip@darthmama.org
   45.66 +Openpgp: preference=signencrypt
   45.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   45.68 +Message-ID: <6bc15b8b-8778-bfce-3b39-e8be8ea2c0f1@pep-project.org>
   45.69 +Date: Wed, 16 May 2018 09:48:44 +0200
   45.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   45.71 + Thunderbird/52.7.0
   45.72 +MIME-Version: 1.0
   45.73 +Content-Type: multipart/encrypted;
   45.74 + protocol="application/pgp-encrypted";
   45.75 + boundary="zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992"
   45.76 +
   45.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   45.78 +--zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992
   45.79 +Content-Type: application/pgp-encrypted
   45.80 +Content-Description: PGP/MIME version identification
   45.81 +
   45.82 +Version: 1
   45.83 +
   45.84 +--zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992
   45.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   45.86 +Content-Description: OpenPGP encrypted message
   45.87 +Content-Disposition: inline; filename="encrypted.asc"
   45.88 +
   45.89 +-----BEGIN PGP MESSAGE-----
   45.90 +
   45.91 +hQEMA7q5KACkWjQlAQgA2G39AYioFWXQzvOEcbCCOqRPfXCM0Rf0Z8n1E+VdkAnh
   45.92 +crSNhyki1xLS2INETt/MMfjyzqT4YDGH28GZx/JLRK8qk48CGU9f/jsSQv27ibiB
   45.93 +jWJsG3QlOa5cvF7dEF6hmn7xYpBCycHPk1vJ8mxXKcP/TxZtwWZf9P7CHCHpJdbV
   45.94 +tbWUlUZbea4okSs4WuUETDCPGLbzRBCzBQYoadV4Z/3FuorUVCfBIPq28AryGjdl
   45.95 +m4JpzOlj0J19tALOfBz45Wo+Lmc38e6cAugLoFREJhv9HrUgq6mr/7GHOqgVJYXL
   45.96 +KPub8h1vzUsMjvnHo/vQaQuPdl3HI5HZJmtzjTO1W4UBDAOoEzPD1TjKdAEH/R93
   45.97 +ShsSEr3aluEkIcqTQPd1FWWtSKzXXamnAlUtrnBz7jDMCvNF8ke+cAdlNIuHnVso
   45.98 +EhvfxYvYnsaV6oGzRPebEua7Yq9eGc7C7FjwchyGk/gN56ii+rkms2zeuDGfR1k7
   45.99 +dBpP80b20Ok3j6wZXQiMxd+G+dUO4i3HQhnnfLgSONsMmj3mROKztRPAMvx21IV8
  45.100 +GLr4OkysZ+LBiPJimKSP00Zaw4AOnYkET2RvQCKRV5cMQk5fMyrb/EfR5Im9wlku
  45.101 +t1YvXIjvZNUG6iA8BIAOkUKrQQFHCOXP9pYRU+ent3BC8bj2bv2/Leaom1PFWUhA
  45.102 +22YXV+7HhnhjC7SCftPS6wGh8qGR1AaGH9/KFXM5cIebuSpVLIRrgsv6pf2OWHvF
  45.103 +PFho7nTM5JFG++oqlBxy3sZE/H17pTjsi3Uj7Ny5+HxSP+oUmeKCdLg2kVH4vwOt
  45.104 +cCTtvHepR1Q3T4ydraTW0GldIRcBHP0HzHvzpgIYW1WH7KhKoIvyU8MImuF7I7tp
  45.105 +fG/R/CIJ+kOomcxZA6QYtOXXsNGOSX6AQDktBwxK0mSqw5OhzuLmj/4mKwJ+tXQi
  45.106 +57JSbWQ6g6RpVhHQMJPP0PKRC1K7RD4RnJ1h6yc1bLnrLA3xtl+XG90V85wdDBSj
  45.107 +v6PSyhYqFKwjV5PQBe2cQNgFgH5aHBhT5zV3jGd7YdXkFoaiseU0BJWfw44iF9az
  45.108 +ESOBuk/3eKkvdlEZRtsK6plhDsk6P4JaKP8n0fKD7sXzXrwdwtIGJ9gU3GH7MM1+
  45.109 +S+uE5RYfA3X0RGBMMwtx+oxph8txH8I4YtBw+GYMQv05PLichtKhASWFzpxqDMgP
  45.110 +5MWd7Epf/j940DRRyp0S1cAY2Y8Mg8Sq8Zqhcs8jKXdTDyFNxWLSA0RFxrUgv3XN
  45.111 +Ov0QzEJesTUr5fgkhTqMefBRiC2PBLWVuBHWZHEHLh944qAxZAW25VAxiUKIJNT6
  45.112 +j6aU5vtC6sKQyaz93pvTvH/jx1QEiWNyoXfyOrysHAFqnRNrgtzJB63ofNd2WTzC
  45.113 +vAvytaiPWip04pIE53Uawg1ioa64FLE28OZOCTyZnyG+jdfXgwkc6MtkOnocPTxt
  45.114 +d8XSjAGta8083uvJkeCkNXL4gz9EVlN4NL5OGS7FySgNQ44cUVPnVG0uKdA2lcG3
  45.115 +OCNkw99S24SyNZnaN8bRNZc8BrXDxetm+ACdDqBeA0xfCS88YYVlTSwA2dz4oqLk
  45.116 +FXWnYUVEFhTP21v4/Rd3zTFo2dmwAwYQjZHKiTSwwhndM6MbKx3sNpLiGUVKvHZn
  45.117 +S5NCqTbY7dEtuvM14Scy/xdqGiZ1R6kX3UkI5foYEAB3c0VdnzfXe206Q3hiRWe9
  45.118 +Pk12n5DytcL8XRhjJBkeysKWoO1Jbrc0Vrk6krzxPwefTa2HULn5ew89x/y43iEb
  45.119 +jdc+VyI19xmxDAp/OiLLX1ASst+Cr1j3Jw+mnZq7KKelFj1fmLxmoZmDW/EJHlxI
  45.120 +7w4WasHS5vk2P7BAH2Qf1mco5z2e5OpugZTwJi7YsaOm/UEWRfexInWxaKKPtUaD
  45.121 +8RfV8gH8TxpNJAWV7Yt6KxgR3KWNmk3ybKAzBD6s6sJqAHSGJvuAnv3MjReuZHLY
  45.122 +75RaIwUZ2mHyDfULrttGq+gM3NhTf8n4JiK6CWMrlEBFHQcO41287lTbgFXf2FXe
  45.123 +ff8Br8iwpwNyPKQykDva6x7QFqOGH+Xs5sySkwTWBMIZbWSctzVCp+3Sa7Tvr2AY
  45.124 +m1bd4ERNaLu2YetkrFVTOEJ4SSbqKNOiM4pTXkbuYZaCqo1wN8DOzgI+qLY7AO4d
  45.125 +snk6LRS7YLUPCrr0GuxkTMN+pwyyc5ORARzSv6M73UBxHoTQOxr62WwfAoMpfZ64
  45.126 +iWe/0Np8ppBSdmkFDp+UuVgrxkJdEEk1itxn7pu6e9JLmFuf9Rgfekmpja0B6Mxl
  45.127 +EZiQJttR4c7UeEipEWLYdb0jpJRDxwdYurSHKuFEFjen4wiCnpC3Dvl7oFs5fE/6
  45.128 +w6vu5jqgBIHxjwe3vLBjBQFTL3J8bsw+b54PnX/DO3O/HeF/BKolr+zUisT8hvql
  45.129 +Thj6fK788sW9vQdWB1OHv2wZkiVFjRLSceve0eFUk5H+rBz9lI2zZmnqa90pxIKO
  45.130 +VDk1we1YuhzxHTRbFZLZ+Bi9n5WLfedY2DIa0F1V3hso8lusUnMrDeyS19T0WNFl
  45.131 +JPBZ9/3gsHB7SCFPv2m3mGbHQffEyHzzr41TrJU9B6EKyE4ncCTlmkYdrAOUBmVx
  45.132 +lN5zMHn5mlhMliJqv53/cB2OxboKQtje9NXxi92ftWvzrfX6gkYqt0cf3xS+ivqD
  45.133 +EAlEslBqoUr7/4PeQkjDVtTlNJRpL4e9fz6cGwVRZjMOcRZOII62t+A8ya1gI/WL
  45.134 +49Y5lr+Sp9ObXUwM0DiAPN8EVuY7xL9mjc6zawv5H+GGt01xnbSJjqhDiYRiRtjx
  45.135 +V1d49NdkHafJ5w+evvLynYvzkkCm5LD+vxgO4z0b/QZw+lxmrA3xT2amIiz53FWz
  45.136 +8UWiRK7JgG/mdoLuzK3FRQavM2zu0z/vYdjOPk8F9TiLEmn2SOTE+dYhtyfrzqgw
  45.137 +UxRgUTLkJDjSTl0ZL4ZLDc11r6G0pFB6U3sAoHPGvnITVkdS4oAI8WkGZQFpS7oD
  45.138 +YDAZ4El9L4LCSagU2lDYr2U2lXZ+B503+0yJJfSzgLh17eQPEEbUuFuMzZQzJ/+z
  45.139 +7Ic8XFlwe73X5D6GR0EnC6Vy9DJGHWQARUY6h3x8LY6uyM5UMgWoejodfig22uwx
  45.140 +DIbLDM9vRnpd7VSr0nmREYqNFoUzsRPf8REzgKk1sU/Wl+ocPSkE+FLh5p92Y4cv
  45.141 +k06i8jlm2SL8siUCt09rKepWZqSPpytwifo1T4Tn2ncjYcngi44jUmQybYYOkrdB
  45.142 ++1o8ZN59j9ceCvVYQHU7AG4EsHQ3LQnhzAN3RvnLl+iam2S5eWSKsOpZ5c76hwUi
  45.143 +5WjIKeumzZyd81OOjV8RBofL0q+m10naW09L5bAkQNhO0g8sT64HSp4fk179wJmE
  45.144 +yMBlhGGbcBwFcnIceSG6Cvjk249vk2FmPqC9OagqggejmDt5fyJo8QJ55sp4jFMT
  45.145 +wCAE3woX1ZSJNAEEfYAwD9urATqjAl3oUV+LFNRVUA2OcmDFY9683BmB6ZW+gEhM
  45.146 +SbaART7zSuQhRbnKmV4UIyxC/KiGJrG12ZdyeNN+4Y8jL3rhoJCMrbW8aIamRXaJ
  45.147 +jXGU1lJbDDGvzIg6a4RtGG30lAIbzpyHtlOYOeBBZPtkRNzIwTjpe75sEwZvFmay
  45.148 +1KQUBUt3RxwQDDZeMoSAwpDBlI4aP+UOHjj3NMaaR69eGcJqT6iKBjJjTia84Lm8
  45.149 +CMIqbEwQIB+8vJrZozgFL9TgWsPy9mLi3czyonWMDwhd7g==
  45.150 +=7Nv1
  45.151 +-----END PGP MESSAGE-----
  45.152 +
  45.153 +--zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992--
    46.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    46.2 +++ b/test/test_mails/Unsigned from PGP_MIME_noattach.eml	Wed May 30 18:31:23 2018 +0200
    46.3 @@ -0,0 +1,111 @@
    46.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    46.5 +X-Original-To: krista@gnunet.org
    46.6 +Delivered-To: krista@gnunet.org
    46.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    46.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 692DD1C00BE
    46.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   46.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   46.11 +	id 39A691C037C; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   46.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   46.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 158221C0378
   46.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   46.15 +Received: from vmmaildmz1.informatik.tu-muenchen.de (vmmaildmz1.informatik.tu-muenchen.de [131.159.0.87])
   46.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 00CDE1C0376
   46.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   46.18 +Received: by vmmaildmz1.informatik.tu-muenchen.de (Postfix, from userid 109)
   46.19 +	id F34B21C2DAF; Wed, 16 May 2018 09:51:49 +0200 (CEST)
   46.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   46.21 +	vmmaildmz1.informatik.tu-muenchen.de
   46.22 +X-Spam-Level: 
   46.23 +X-Spam-Status: No, score=-3.2 required=7.0 tests=AWL,BAYES_00,
   46.24 +	ENCRYPTED_MESSAGE,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,TVD_SPACE_RATIO,
   46.25 +	UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   46.26 +Received: from vmmaildmz1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   46.27 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTP id 663211C2DAE
   46.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:48 +0200 (CEST)
   46.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [85.215.255.3])
   46.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   46.31 +	(No client certificate requested)
   46.32 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTPS id 556EA1C2DAD
   46.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:48 +0200 (CEST)
   46.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   46.35 +Received: from mailin.rzone.de ([unix socket])
   46.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   46.37 +	Wed, 16 May 2018 09:51:23 +0200 (CEST)
   46.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   46.39 +Authentication-Results: strato.com; arc=none
   46.40 +Authentication-Results: strato.com; dkim=none
   46.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_signer@darthmama.org"
   46.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   46.43 +X-RZG-Expurgate: clean/normal
   46.44 +X-RZG-Expurgate-ID: 149500::1526457083-00006E4E-71885B6C/0/0
   46.45 +X-Strato-MessageType: email
   46.46 +X-RZG-CLASS-ID: mi00
   46.47 +Received-SPF: none
   46.48 +	client-ip=131.159.0.8;
   46.49 +	helo="mail-out1.informatik.tu-muenchen.de";
   46.50 +	envelope-from="krista@pep-project.org";
   46.51 +	receiver=smtpin.rzone.de;
   46.52 +	identity=mailfrom;
   46.53 +Received: from mail-out1.informatik.tu-muenchen.de ([131.159.0.8])
   46.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   46.55 +	with ESMTPS id p09538u4G7pNmnp
   46.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   46.57 +	(Client did not present a certificate)
   46.58 +	for <integrity_test_recip@darthmama.org>;
   46.59 +	Wed, 16 May 2018 09:51:23 +0200 (CEST)
   46.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   46.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id DB0201042EC0B
   46.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 09:51:17 +0200 (CEST)
   46.63 +From: integrity_test_signer@darthmama.org
   46.64 +Subject: Unsigned from PGP/MIME
   46.65 +To: integrity_test_recip@darthmama.org
   46.66 +Openpgp: preference=signencrypt
   46.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   46.68 +Message-ID: <6d6426b5-f170-a3c7-230e-c4037e4b9ab3@pep-project.org>
   46.69 +Date: Wed, 16 May 2018 09:51:17 +0200
   46.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   46.71 + Thunderbird/52.7.0
   46.72 +MIME-Version: 1.0
   46.73 +Content-Type: multipart/encrypted;
   46.74 + protocol="application/pgp-encrypted";
   46.75 + boundary="kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri"
   46.76 +
   46.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   46.78 +--kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri
   46.79 +Content-Type: application/pgp-encrypted
   46.80 +Content-Description: PGP/MIME version identification
   46.81 +
   46.82 +Version: 1
   46.83 +
   46.84 +--kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri
   46.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   46.86 +Content-Description: OpenPGP encrypted message
   46.87 +Content-Disposition: inline; filename="encrypted.asc"
   46.88 +
   46.89 +-----BEGIN PGP MESSAGE-----
   46.90 +
   46.91 +hQEMA7q5KACkWjQlAQf+KGiO/fA71s4Dahe7LsSBJKNx3ECL72Ha9VQQXODw5So2
   46.92 +U3xy9k/Qp0X1Rf2i/yjtgSAXrDnl0qqRtyLL2466xWotmz1N2DvwusTlQq6sLwlv
   46.93 +inYaKms/k/R2DBNNReciy/95jWT956XjcrWhX6RMHspPXuSlQPuLuSGCekYAwKbn
   46.94 +aRN90BJtWiGZwe82ZVP8OapR9OxMeokPaMyt0bTf0i1lcKP43bC+fyIrjnYble6Q
   46.95 +98LWx9xdqvhF69hSFRyXWycT4+v9sgHTo5kiDDVqP4+7BF9pBH4FcKvDfb9K4URK
   46.96 +EyyBGGSz+3wNEz/HW2RTJgRnZVt1R9tjGqChWiYqbIUBDAOoEzPD1TjKdAEIALgp
   46.97 +VGX4BgL3CgUq2VEpdkAc8/73jcNFeUHeyZXY0c116jzodlPfWzgTYnVKh6jyJUzk
   46.98 +A4tomfZo4ldPz1VMnlmrKArTyOvBYCJqMInLL+XTNqoG/CGHULvxGukm7j3Q9HNz
   46.99 +q9nsWcvY26wPPWpH7beizC8fQdcdbMUT5+qykceUgdSVgolNoWKtvTG4xm2yDWwP
  46.100 +8LLPvXybS/RwlBEoe21UzS9RUPx4W17vW3W8FNR2sJurWpvj3PAKl4BJ/vCunbFK
  46.101 +DSIxekYsBUb2oIWy+9vpz45LuVPLc6+K57GoRv2eE2ld+K9K6DmVv95V/1ndufYJ
  46.102 +JWAZ3GdOtWvKQrrulf3SwNUBoVM0Q9SjYoTbuyTWAXAUYIV0yz1a40MrWkSc5iZr
  46.103 +qJxNcHtKTzx7lMaF95Qds1nFi5gqDx1oLDAXNSl99Gr9JQSboFFneb0nnX63g3A2
  46.104 +woBrs/C4K7FpWAJymtTrlyZATwup06IHQyH1xGctPaO9/j1qHFPeO/1WpePnJ19h
  46.105 +Xwwg76PVmmorBsLxqKqjZxRIKmv+0o8qYJxppjh5qEnYTrCwfF45Tu9zOLt9u4tg
  46.106 +GDQf9MVQFlZsuO5m7ZbQaWVUqHuC+NSIL5G1ed7gSp3H3QBWC9S1qTigcjPZFm5e
  46.107 +Eol2v8Dg/j0DfCf6s4ybzf7YvikVft5rkgWBmkSrIfR5PY1XdPjA7WsN7HzWiNo/
  46.108 +BcfpBu7WdbUyWLR/QJvaVeUFWAZB0o2YnFMm/p2z0uB+b2aaRCM8al5oANjlH/ra
  46.109 +plyoIwGvfWwTuu9Mz9yyn8YHJAGqIzTiHmqoPogw5ZTbabViKkCaWgo8cJ06YspP
  46.110 +pLVoSpsTWdP+gNeARj4DQGKm2ykmriEdqOlhfHSA10ZB74dGUsM=
  46.111 +=5fnF
  46.112 +-----END PGP MESSAGE-----
  46.113 +
  46.114 +--kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri--
    47.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    47.2 +++ b/test/test_mails/Unsigned from PGP_MIME_noattach_corrupted.eml	Wed May 30 18:31:23 2018 +0200
    47.3 @@ -0,0 +1,110 @@
    47.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    47.5 +X-Original-To: krista@gnunet.org
    47.6 +Delivered-To: krista@gnunet.org
    47.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    47.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 692DD1C00BE
    47.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   47.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   47.11 +	id 39A691C037C; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   47.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   47.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 158221C0378
   47.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   47.15 +Received: from vmmaildmz1.informatik.tu-muenchen.de (vmmaildmz1.informatik.tu-muenchen.de [131.159.0.87])
   47.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 00CDE1C0376
   47.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   47.18 +Received: by vmmaildmz1.informatik.tu-muenchen.de (Postfix, from userid 109)
   47.19 +	id F34B21C2DAF; Wed, 16 May 2018 09:51:49 +0200 (CEST)
   47.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   47.21 +	vmmaildmz1.informatik.tu-muenchen.de
   47.22 +X-Spam-Level: 
   47.23 +X-Spam-Status: No, score=-3.2 required=7.0 tests=AWL,BAYES_00,
   47.24 +	ENCRYPTED_MESSAGE,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,TVD_SPACE_RATIO,
   47.25 +	UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   47.26 +Received: from vmmaildmz1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   47.27 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTP id 663211C2DAE
   47.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:48 +0200 (CEST)
   47.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [85.215.255.3])
   47.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   47.31 +	(No client certificate requested)
   47.32 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTPS id 556EA1C2DAD
   47.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:48 +0200 (CEST)
   47.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   47.35 +Received: from mailin.rzone.de ([unix socket])
   47.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   47.37 +	Wed, 16 May 2018 09:51:23 +0200 (CEST)
   47.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   47.39 +Authentication-Results: strato.com; arc=none
   47.40 +Authentication-Results: strato.com; dkim=none
   47.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_signer@darthmama.org"
   47.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   47.43 +X-RZG-Expurgate: clean/normal
   47.44 +X-RZG-Expurgate-ID: 149500::1526457083-00006E4E-71885B6C/0/0
   47.45 +X-Strato-MessageType: email
   47.46 +X-RZG-CLASS-ID: mi00
   47.47 +Received-SPF: none
   47.48 +	client-ip=131.159.0.8;
   47.49 +	helo="mail-out1.informatik.tu-muenchen.de";
   47.50 +	envelope-from="krista@pep-project.org";
   47.51 +	receiver=smtpin.rzone.de;
   47.52 +	identity=mailfrom;
   47.53 +Received: from mail-out1.informatik.tu-muenchen.de ([131.159.0.8])
   47.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   47.55 +	with ESMTPS id p09538u4G7pNmnp
   47.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   47.57 +	(Client did not present a certificate)
   47.58 +	for <integrity_test_recip@darthmama.org>;
   47.59 +	Wed, 16 May 2018 09:51:23 +0200 (CEST)
   47.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   47.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id DB0201042EC0B
   47.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 09:51:17 +0200 (CEST)
   47.63 +From: integrity_test_signer@darthmama.org
   47.64 +Subject: Unsigned from PGP/MIME
   47.65 +To: integrity_test_recip@darthmama.org
   47.66 +Openpgp: preference=signencrypt
   47.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   47.68 +Message-ID: <6d6426b5-f170-a3c7-230e-c4037e4b9ab3@pep-project.org>
   47.69 +Date: Wed, 16 May 2018 09:51:17 +0200
   47.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   47.71 + Thunderbird/52.7.0
   47.72 +MIME-Version: 1.0
   47.73 +Content-Type: multipart/encrypted;
   47.74 + protocol="application/pgp-encrypted";
   47.75 + boundary="kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri"
   47.76 +
   47.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   47.78 +--kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri
   47.79 +Content-Type: application/pgp-encrypted
   47.80 +Content-Description: PGP/MIME version identification
   47.81 +
   47.82 +Version: 1
   47.83 +
   47.84 +--kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri
   47.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   47.86 +Content-Description: OpenPGP encrypted message
   47.87 +Content-Disposition: inline; filename="encrypted.asc"
   47.88 +
   47.89 +-----BEGIN PGP MESSAGE-----
   47.90 +
   47.91 +hQEMA7q5KACkWjQlAQf+KGiO/fA71s4Dahe7LsSBJKNx3ECL72Ha9VQQXODw5So2
   47.92 +U3xy9k/Qp0X1Rf2i/yjtgSAXrDnl0qqRtyLL2466xWotmz1N2DvwusTlQq6sLwlv
   47.93 +inYaKms/k/R2DBNNReciy/95jWT956XjcrWhX6RMHspPXuSlQPuLuSGCekYAwKbn
   47.94 +aRN90BJtWiGZwe82ZVP8OapR9OxMeokPaMyt0bTf0i1lcKP43bC+fyIrjnYble6Q
   47.95 +98LWx9xdqvhF69hSFRyXWycT4+v9sgHTo5kiDDVqP4+7BF9pBH4FcKvDfb9K4URK
   47.96 +VGX4BgL3CgUq2VEpdkAc8/73jcNFeUHeyZXY0c116jzodlPfWzgTYnVKh6jyJUzk
   47.97 +A4tomfZo4ldPz1VMnlmrKArTyOvBYCJqMInLL+XTNqoG/CGHULvxGukm7j3Q9HNz
   47.98 +q9nsWcvY26wPPWpH7beizC8fQdcdbMUT5+qykceUgdSVgolNoWKtvTG4xm2yDWwP
   47.99 +8LLPvXybS/RwlBEoe21UzS9RUPx4W17vW3W8FNR2sJurWpvj3PAKl4BJ/vCunbFK
  47.100 +DSIxekYsBUb2oIWy+9vpz45LuVPLc6+K57GoRv2eE2ld+K9K6DmVv95V/1ndufYJ
  47.101 +JWAZ3GdOtWvKQrrulf3SwNUBoVM0Q9SjYoTbuyTWAXAUYIV0yz1a40MrWkSc5iZr
  47.102 +qJxNcHtKTzx7lMaF95Qds1nFi5gqDx1oLDAXNSl99Gr9JQSboFFneb0nnX63g3A2
  47.103 +woBrs/C4K7FpWAJymtTrlyZATwup06IHQyH1xGctPaO9/j1qHFPeO/1WpePnJ19h
  47.104 +Xwwg76PVmmorBsLxqKqjZxRIKmv+0o8qYJxppjh5qEnYTrCwfF45Tu9zOLt9u4tg
  47.105 +GDQf9MVQFlZsuO5m7ZbQaWVUqHuC+NSIL5G1ed7gSp3H3QBWC9S1qTigcjPZFm5e
  47.106 +Eol2v8Dg/j0DfCf6s4ybzf7YvikVft5rkgWBmkSrIfR5PY1XdPjA7WsN7HzWiNo/
  47.107 +BcfpBu7WdbUyWLR/QJvaVeUFWAZB0o2YnFMm/p2z0uB+b2aaRCM8al5oANjlH/ra
  47.108 +plyoIwGvfWwTuu9Mz9yyn8YHJAGqIzTiHmqoPogw5ZTbabViKkCaWgo8cJ06YspP
  47.109 +pLVoSpsTWdP+gNeARj4DQGKm2ykmriEdqOlhfHSA10ZB74dGUsM=
  47.110 +=5fnF
  47.111 +-----END PGP MESSAGE-----
  47.112 +
  47.113 +--kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri--
    48.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    48.2 +++ b/test/test_mails/fake_2.0_good.eml	Wed May 30 18:31:23 2018 +0200
    48.3 @@ -0,0 +1,110 @@
    48.4 +References: <81836dba-bd06-a7b1-3bee-ceedfd838b32@darthmama.org>
    48.5 +To: Integrity Test Recipient <integrity_test_recip@darthmama.org>
    48.6 +X-Pep-Version: 2.0
    48.7 +From: Integrity Test Signer <integrity_test_signer@darthmama.org>
    48.8 +Subject: =?UTF-8?B?cOKJoXA=?=
    48.9 +Openpgp: preference=signencrypt
   48.10 +X-Forwarded-Message-Id: <81836dba-bd06-a7b1-3bee-ceedfd838b32@darthmama.org>
   48.11 +Message-ID: <b7d4d0b4-414d-598b-3e32-2429b95bc5cc@darthmama.org>
   48.12 +Date: Fri, 18 May 2018 11:42:02 +0200
   48.13 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   48.14 + Thunderbird/52.7.0
   48.15 +MIME-Version: 1.0
   48.16 +In-Reply-To: <81836dba-bd06-a7b1-3bee-ceedfd838b32@darthmama.org>
   48.17 +Content-Type: multipart/encrypted;
   48.18 + protocol="application/pgp-encrypted";
   48.19 + boundary="fAZmN45EsekLabfkXbDDvdBZ8V6hk0g8n"
   48.20 +
   48.21 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   48.22 +--fAZmN45EsekLabfkXbDDvdBZ8V6hk0g8n
   48.23 +Content-Type: application/pgp-encrypted
   48.24 +Content-Description: PGP/MIME version identification
   48.25 +
   48.26 +Version: 1
   48.27 +
   48.28 +--fAZmN45EsekLabfkXbDDvdBZ8V6hk0g8n
   48.29 +Content-Type: application/octet-stream; name="encrypted.asc"
   48.30 +Content-Description: OpenPGP encrypted message
   48.31 +Content-Disposition: inline; filename="encrypted.asc"
   48.32 +
   48.33 +-----BEGIN PGP MESSAGE-----
   48.34 +
   48.35 +hQEMA7q5KACkWjQlAQf/TX3YsxT4uZ24qTMXhVRdf71ZQUK8GCk/NqbUe448Fnet
   48.36 +GkLdGq4W0FE4n39UMza1coDwRGhguIUbhmiCfmmiYxlRTt4D5uAGIOCMjYtRxoSC
   48.37 +FB0OKcQZSlsVD0Aw3WernFf5UPgpHtWhfsqTnw7IkCHZEAZVEc1mTSFth5sIcrBZ
   48.38 +8OPfXfjInEWfU2EPxtz1gImCoYqrdaI/hCx0zjs1BU7+xFoTkB3WdGn2j0K6hp75
   48.39 +X8H99VxOH0NiJUC6i0D5GOLkks1JHYal30slmvVkDbgarGs+PpKrPQy/zWGKNL9r
   48.40 +4LvO6n61Moc+JoeorL51IR96FxtasMdHy83gof6ipYUBDAOoEzPD1TjKdAEH/2+n
   48.41 +1DGUUTi1074L2v1YFVSAQKhX+uF5Rxq9U1G8BHkf5mNNsE/RjWG9cel2k3WGwpi0
   48.42 +x94uL059OiDz+ABHUTmF8aodfrOBDKZDC+xAvaA+RR5RDW++qhqFx0MOOSkHSOPV
   48.43 +4R76+VZ9FrOu0FeGXLxHCqUXu7xjrnM6/JwlAjIR51ohefkS1URe4bm/E9YJocBq
   48.44 +TVw1L/C1kQUvrGHT4ECGmZri13cBggjfAm3J3N/uStRbxVfivWPTbj3XD7j+S0EO
   48.45 +1r/00/mdxfN42KxekwTUNgmcrW4WpoNLFZXVfaff4suJ08Y4C7BvKWnClnQ7yltB
   48.46 +byVUbp1gjFOfcXSxytjS6wE+4wshdvU/AJwtLkA049cqjTdvjXJLwHcv8Ba8V5bm
   48.47 +QhEK+NYenn+j4dq+M/twZqIsEnTE2fmcJ1VyXNX/s4pF7Nc58667cZCMu+4aj17L
   48.48 +m/PZQ4JKOVPY/cyesHB0GsuBx9j/xpXw90YPXTLcWOqnYdB0nNKvufudz4kfZwXq
   48.49 +aSelJYwcaVzDkB0U8vBVuQX6rSH9ylPCluMf/+vgj7BuRHUd3OO/xa3ihw5lJJIr
   48.50 +g5HUDX521GrxQ2rS4CzzgQxdXihhXalRm+XdEfPG5o5TwGpxiJcXPedvogmKfK4+
   48.51 +uwE5LJUWT21g39sXbJeAJkMee4ItVlk0bykVlNW7T0h0f93aJQiqlid04pooQgzc
   48.52 +IOS7yjnYjPg7Kb5rUazSNlfBSQLcBiLYg/GQnG0NuPONEBLen+M0RMn5/Ird3fCZ
   48.53 +WsQjD1LGSWsazdOuc6OuPABSUFaVMLzHHmu5lZmwpas45ARtHq8ZG5LMhxj1/cYh
   48.54 +pPT+6iwgO4M1d5Sjd7Y2WORU86AuSqk8VB+8KsvWRZoTIyAoNj/chM5nbFTZZdtv
   48.55 +yRWp6kULL1w4GtIhUr4hubNeCeXPOw4rEhyedPAFOh4i6OcPn3AQGhsIbkor/q0w
   48.56 +JvqgfG4op/n6UXuj/MtdEfgCCMbhee4CUpkgZXsENNlQajVqDMwakn05HB367Q7G
   48.57 +jxIGeAjEHWJg+tFOgHvHpIQjZd7fD41/rDXbVKalintpvZ0HHjRbUD7EdcGPAmOR
   48.58 +vXCce1X72465SZPGMiM3jBwyFTnfz8XrXWnQCNlhHGJBQBsUL6OufppL6YGrq0J8
   48.59 +tLjzg7nzdwTiJaVzAW6shv98rXSBH4V5nA4Dg8D69oP/s+Yx05XYy0EwYW7yb+mO
   48.60 +4Ho/YzIu3ja7mSgg0BJ1Afk9NNifVWkUNLcKYanZuhKYPRfU2n5k/+wBEG5+ul+N
   48.61 +qerSxHpYPrQnOJXfJtgg5L4cVqK5AHNZvXjQPV777X4hoP1ayYmByfIsoU0eO5cK
   48.62 +SrrFqD3yw0a6JlNFNIJdL+tpt21qldQ5tpUxMNJLpMy2EvigdEmA5nOGFh/VnhZ1
   48.63 +xEg1YKnXGVxODxrtAtO0Mz5i6bdRJ/82hcZOD8RyR3T/0F/614sVPrQE+8BruAny
   48.64 +qgLmdaEbzY3oG4AVwaKzgr5uTZKlGwQfm9G7Pu4TNGHmgtFGXmAsZgOik7HbHMUq
   48.65 +sYDuxwTLQVm1mjNGmoC2evfOFKj9gqaSY3uZAX2ecC83Ej+8kaCsvtaC0Li0fMUQ
   48.66 +18CIsZQHQ88kxthL12r0yrjLyrLfPeea874LQog5HGBu8yDEFHSDWaEaOEkSWI9V
   48.67 +56ZjoIM1YR+WU0l3QHYfTNeTrglP7f1jYSytfleQM+QMU+oKeik3wklk2JxInHyz
   48.68 +ixvdZfTmrltDlGVkcvo2oS57MKEZlzjStUKlVKWxzcXf/2i+q8DCJm2TaIpn36hW
   48.69 +CbXcVC6pQB67/tqIww2/8MvOAI6JHiHZbjhNePputcBLltzq8r9K1/Da0VeDJRna
   48.70 +j/rZPVnq+NFTdOTDqKip1szOwENIuwLEbhZ8W+Qkxxw2rwLgp1AI/n3MImNbeYE7
   48.71 +WFShAY/g8/ueNMHhwVn1peZDRjm1ezKv2vCUU4Eg84r1t3bORslgM/jFsnbSxaoz
   48.72 +7LuW69AliZ5d5LeZe8ux7PoasG4at3EIBrhCVrFjnk7yAYwvLpoYG/JtqruZrL7M
   48.73 +Xb+aCL+eOX05bjJ7MTNkb0Ww60iubFMvu3PZokxbzeqzjmqTZacD6nrmrm7AYT5w
   48.74 ++16QmgtSPnyEURyOHuim/TPIUI+i1+XE3+WYMLk+YjagmGLmpCY3qYEoZMlhaWOa
   48.75 +QeY3eXIVQXHWmXA1ZM/AW5qz2ThTFScOFpaETcNPhq6a5T+Ju6iB0qojBn2VkAKV
   48.76 +s9pCLEmSz6E4HCV0yWArOzGco/JfA5JqC2vaWFaD71etg2AwKYivudjH3zpGORpG
   48.77 +daOquQcoVSNOzaKa5A26Oa+WX3OX02bpG+CJ7y7mxUXXQx2ZcOepj1ANtCzNh/CR
   48.78 +ZGPsGkB4MNG3Bk7EvFG1x0ij/cWFAW7TG3n3WRkmb25/CiW0caxB/9GNiw8S2BsA
   48.79 +shT2CHO2v7dxOnDXec6yHFdICPNhJA10O07b4qAg2y+0un/nkvq2XUsleMZ8ZPC3
   48.80 +aJDk/6CZDj/gZI1ONury2Pa4gKiN5YKkx38nKk4W0uVqqaHO2XI/b/C+C+dDM7Xg
   48.81 +yByX/RGXipvM6/OHrG4fPvfThL1SMIeVMs4WYB1bzfT2TJ6pvrckMwBp1P4kZcqQ
   48.82 +0sK5lF85bXbObhW56v6ToqrFmsA7BEKm2cNt8lFulO/2s3Z5Q6WLmtznTtpRP8RH
   48.83 +x9qF2Pcbgivz3oRUTBUdfpqgL7GtMJmr55vaDL6I1FK9etgbnK5E+rvWf5RLadoE
   48.84 +s9dmkDlxc3LWL657vqp5gcok6g2yzwLA3PDMv+5gAESmcXImplenFMs/djRQcrhN
   48.85 +lG/XqUAzIgFfCbmws4UUfaQOeHh1xfCN+/HVOap+Wg+e8zDeCEowYufOrTg6ZPcz
   48.86 +5GYa96gUjgUTfTeOOMwB/TKoHgINEBAYLASeFOk5wfwRx8MgEDAUj5RqpSD9Y0Zs
   48.87 +PfqnXUb9hPlA/Jy60BVbORx2o3jm5IUHIeTv5YNLAojky6SdqwSbrK5zPLZGlBZ7
   48.88 +DT6s/yvT7G7IQNM8Xgf4HzlLFEM4jHOinoKYevW8gPqY7oznlAp3oEEpZLfz+FfK
   48.89 +6cpK1smTo32/yEf8aeI1FdfHnYBsejYbdE9TyhGMcljluCeU1gF6k6AsnGh1Da6l
   48.90 +xuTZSyi+l8Dn8gSR7Up5lULAVKomFVu7TFpFKg0cDO3JWUdUkCeWvcvZgNALKXAj
   48.91 +DTTfdOXaJanUHbJa3kqdjKujHb69N9TYuVWct1WqdY0rF6TJvQ5y/yzBemd54ymD
   48.92 +JLBEe68yqLNc3pmrtI1Et1ygtYKe5J4QOEbJkx+tlRckABDHZyHn56o4JqAnWnN8
   48.93 +MKNzu6SdCCZRddGZ4e1N2nNlXjlDddC2kwpjgw1KTHg5zBPFzcDzWSDgY/qO6Brx
   48.94 +jGnZbm5Kq2Eht1URR4AuwF9PuOQVc9NXJYaQ+yVixcplCLN+/pE2amIRMNZR6Grh
   48.95 +YPLlOBXTUIiI24rF/cFaqq8DP4vRIyzZPlGPHe+bQDDn0csMjTwQPezdhBupNnoU
   48.96 +L0H7qNbSBf6fof9tlHt8Uf6TVOK93I82HkO9Ph0VuFuWYI/GWfP+H9N8bAGlfa4l
   48.97 +Mk0+YjB40VqTU+oGDfKQmeS1lSL+o+zdi1AvFtN7T7ruOr8aLw7fWGMCQkcesoNu
   48.98 +iFuhUcjhgEBLK1j5mNdaX0dD7RxbpPd+mOynqWo2I5wjaoAnH104v3sxE2N2pX1T
   48.99 +8kujA7xuqd5VlwGumqTIJuWYveGq1OKcjBySVI1SsAN3wQYLRziGsbO4883CbRah
  48.100 +pY14C+enco7cX8bn3Cc+ZHteB8ExajBP20IB8k0MzHoET5ZQIb8I/PbKWpfrpUeR
  48.101 +whDve1i93mn57aA8KtRgTe3AUCUgNVsF4byf+SrZbCScAvJjLav21NJu46zBxL+C
  48.102 +Z7F38/jlhA6uulRR4C9PoQcnGTASxxmqB02WORzu59AjPC0cTuqJ/n3Zq4fYrrfj
  48.103 +4o1UBZCSoqsEPoXY2gtsU75OaezfbPLY7Sa6cASldHBF0DpUxaT2KotUG0RziKd9
  48.104 +90yLlLd2JBTTZV5m0gsYMyOUWfrgHKjLE0PYcvwcADXbDC/Ux+V8LXEd6MoH/G57
  48.105 +6lsACflhN4436NKKhuVqwCSgnvMMzhKmsuZjhjHaijgkySjXjwlxFrOQs/8YsZJB
  48.106 +CNprUPMcxqF5IT4YawMe8zZX/derSXi5A2ydbNTzVKYf4tfK4f9thP1zapgAO3aD
  48.107 +UsaS12TMhtJ7qmBKUQQebCLNuqp4dJyyCVanfFpWtdhpUcZjJQtkJgoTrk4NDXXP
  48.108 +lEnU9CnJL9cAmRtYWC10rihY1fmLgnF0ihRvZU7DvADy93OdFl28nK0ngpDGH/kB
  48.109 +3uNKfxcEOvuX
  48.110 +=qzFU
  48.111 +-----END PGP MESSAGE-----
  48.112 +
  48.113 +--fAZmN45EsekLabfkXbDDvdBZ8V6hk0g8n--
    49.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    49.2 +++ b/test/test_mails/fake_2.0_signed_no_key_attached.eml	Wed May 30 18:31:23 2018 +0200
    49.3 @@ -0,0 +1,72 @@
    49.4 +References: <82758947-86f3-dd25-7fc8-7d4a2a6285fb@darthmama.org>
    49.5 +Subject: =?UTF-8?B?cOKJoXA=?=
    49.6 +To: Integrity Test Recipient <integrity_test_recip@darthmama.org>
    49.7 +X-Pep-Version: 2.0
    49.8 +From: Integrity Test Signer <integrity_test_signer@darthmama.org>
    49.9 +Openpgp: preference=signencrypt
   49.10 +X-Forwarded-Message-Id: <82758947-86f3-dd25-7fc8-7d4a2a6285fb@darthmama.org>
   49.11 +Message-ID: <b5094471-42ba-f3d5-4c83-c6332f7eb04b@darthmama.org>
   49.12 +Date: Fri, 18 May 2018 11:02:02 +0200
   49.13 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   49.14 + Thunderbird/52.7.0
   49.15 +MIME-Version: 1.0
   49.16 +In-Reply-To: <82758947-86f3-dd25-7fc8-7d4a2a6285fb@darthmama.org>
   49.17 +Content-Type: multipart/encrypted;
   49.18 + protocol="application/pgp-encrypted";
   49.19 + boundary="OgFmWm5gGZYdjoko1tOlmGYbHJHS2fRqj"
   49.20 +
   49.21 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   49.22 +--OgFmWm5gGZYdjoko1tOlmGYbHJHS2fRqj
   49.23 +Content-Type: application/pgp-encrypted
   49.24 +Content-Description: PGP/MIME version identification
   49.25 +
   49.26 +Version: 1
   49.27 +
   49.28 +--OgFmWm5gGZYdjoko1tOlmGYbHJHS2fRqj
   49.29 +Content-Type: application/octet-stream; name="encrypted.asc"
   49.30 +Content-Description: OpenPGP encrypted message
   49.31 +Content-Disposition: inline; filename="encrypted.asc"
   49.32 +
   49.33 +-----BEGIN PGP MESSAGE-----
   49.34 +
   49.35 +hQEMA7q5KACkWjQlAQf+PT41TcEgYET3evzYnDkepulTQvuoRrGPMjBQk/Ik6Ubl
   49.36 +1rWb4Yo4bLFMmZB2Gha87BlqIO1irYzIv+iJgVjLQJ9K61sC95XBA7EDnyVCostj
   49.37 +PF7nCUYWP8Xt0rzkWBmjjnjODzoFlkw2m/MW/mnB0ynvF+XlfDkb90e6ELFGEvEX
   49.38 +WFnS38262qi8j2thpjiJ3cew1S53KWiIqZww8xTM6G4MIS9dCoQq0/nKSfcE7zYJ
   49.39 +Ju2g1Mc0SstmfIv8nh9k+EMiMi830r+ia+tHpLn9mYvnKSxcoEAqGsc0EnflOzvT
   49.40 +VVce9V5CU80l7uF+SaJ2BNCMMHUbACCsafuDn/wH8oUBDAOoEzPD1TjKdAEH/RxY
   49.41 +MKbgC85PXZ4G65j1RmVBgtflQFa5ewmCZEN1AHkV7jLFVpmjWuXj0oO7At0S9v2N
   49.42 +6xu8GJfIKhAC8C20khfln6XuwKa1Yn5YQqR8buak6WrBa4XMU7wYlLBPDh5xGd/k
   49.43 +dYLJOdrLjC5v+FohPafShs4u68F1k8vtd5vzIpAyqqNSXXbod5dYMye45x9oOH2K
   49.44 +GCPgAoLoObOW6eTCrwHlqKCReMXFUL1ZtJSXquaIm5mOeVCi2jC9yBSozXaOYYUr
   49.45 +PV+iSyzpPWtOF1ckzZr1/Ej9hRkBwMehLDpPEtnC+xC1PWUJ3ftjb07agC3LJRrY
   49.46 +X6iV5GH47kDht+bJR0zS6gFEkNxzgZaN6kgMwMeslDfd5GXaEqOL9iPyH07N8dud
   49.47 +DoCLKvJ7HwtqG8p/iWB1GPyge8QJY9dZYA38OSD5O7SmCdTeN/aDybcx53KR3ql/
   49.48 +3ODcvrbBQCL+1YdsPxQqWP8yGGKgBUrm/iLjS33gVZLs+bMbr7pSNopotqbDn6mc
   49.49 +G0Ys3kw8AuUU6MRnyQYvIpUOoD00/b1+oEA5J4U7SHAFGE3ZS3soK9+HbJ2Y7IHL
   49.50 +g9BMIZ9FIxBR9wImJJrnFwXXdhcaHq+CVYyqGbE6oV2PXMAkTfcHfHv9oIkvtBI4
   49.51 +w6kY8oh6Gvm0b1NmBx824qF5M7eZ3w9NISC+jLgdDIuIDQ6xImT4uATiSbu7CHzu
   49.52 +qf7zYRoyWGcSBaBtLzh1Yj07O604Yi3lGKT7omfOSZINgqJyTp7RTgojDzFRVXww
   49.53 +lSg/Xngy7IM9QVZr/18sYsnU0R7AH83Cdpc8y2qQyTb/R51+wdT1bdK/LKiHfML5
   49.54 +Fan4uZazMZzmCq0+owSFA1++lN82dvkJ7SE5dFasR+yoTCMy5FVbiWKeHVhLZU2O
   49.55 +TOjhZ06nLMV4r2z9lGzvAgBY8JxNIQe3Ynh4AmCnaNvpmCYDkOzNWN7MH1H83jlN
   49.56 +z0+Wnx9iuu23KSeTxhFnvK9sxL9p4k+XK0HnX+XdNvlLIAx6G9RKWVOodEl8tsUD
   49.57 +Mo4qGUQqh9mDmDNdmQhmT8u0iRZ9tEo7gRw8SRk9O0E6n0cUIXYwzGbB2XKGWYwZ
   49.58 +cqzmDkE4dQEN3hq3QR9tUP9IdHAGjoxpUkDCPF4deEzlqoAclrOpwjPjawZuHtyQ
   49.59 +UP0SNlj106Xl0YiUz8f9Z5ZAHj+fSawc6KBY0l+E9bsc1rNbhft1nafQo9yNMgL5
   49.60 +Gop3Wo6O1BJehR2FQOxxkW7BUhxzcjkTCuYkc7ZOBKRbL5sMiIYJZVL5ofjUar1T
   49.61 +g4dsmZpkK0yEMWNTVU0ayY/nzV4S2gch1SA7EUB27TPk9yhNyufwFdTjjNEnZVPz
   49.62 +h6kX2unFoimxSyvHrSBOq28rSUTfm5u/TZ7RoR42v3cz4F8g0KIWb7Wb9Lk7yTre
   49.63 +GdYVUDVCZbEVPf9MOgaG0jjWcmsYSHp1o2MyMDMDVZh2cCHCAHgLzqVM+yPIIVpC
   49.64 +B4wMNGj4TAusA7JAUkdCxXMa14g8kDTcmfNiQprA0QQioocmYXnJhWj/jcN3zwgf
   49.65 +53OI/+0+Cj71oThWj8BzIjwD9EQlXgHQMrGeYZ4r09lDgCncMDadll07b5Goqrmx
   49.66 +vMDgGcvdeNB0MnaMigU2VRoEb/oLQjP3GYySYBYfd+jtGL/SjOV0LXQnfKtI/AJF
   49.67 +YIHX3peSJwvnz/MTG2Hhsw5TO9OmTV2BihgEmLJVzmmntOer9WDkEZfJ/2vdBMP9
   49.68 +bQ9/J9nfjdAR1vYy34ppFyGLL/dworfPcl+oHYX6kGfQEoWROwsxSY7xp/vsaRF2
   49.69 +d4RCf5yhZWTNabSlZNCh8pexa47UPO+uJ9asJvywo57MP9hlv+muqzXxFd4ni3JY
   49.70 +njwzTNRUuCUeeFHleeDYr4KiAsz/vvp4rZJLMTqpsv9fBLPKuLYLOjtkI8B3OpNN
   49.71 +AVtCFmlWXNI=
   49.72 +=lors
   49.73 +-----END PGP MESSAGE-----
   49.74 +
   49.75 +--OgFmWm5gGZYdjoko1tOlmGYbHJHS2fRqj--
    50.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    50.2 +++ b/test/test_mails/fake_2.0_unsigned.eml	Wed May 30 18:31:23 2018 +0200
    50.3 @@ -0,0 +1,101 @@
    50.4 +References: <81836dba-bd06-a7b1-3bee-ceedfd838b32@darthmama.org>
    50.5 +Subject: =?UTF-8?B?cOKJoXA=?=
    50.6 +To: Integrity Test Recipient <integrity_test_recip@darthmama.org>
    50.7 +X-Pep-Version: 2.0
    50.8 +From: Integrity Test Signer <integrity_test_signer@darthmama.org>
    50.9 +Openpgp: preference=signencrypt
   50.10 +X-Forwarded-Message-Id: <81836dba-bd06-a7b1-3bee-ceedfd838b32@darthmama.org>
   50.11 +Message-ID: <d5969379-4545-ee40-e129-107bc454bc18@darthmama.org>
   50.12 +Date: Fri, 18 May 2018 10:57:47 +0200
   50.13 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   50.14 + Thunderbird/52.7.0
   50.15 +MIME-Version: 1.0
   50.16 +In-Reply-To: <81836dba-bd06-a7b1-3bee-ceedfd838b32@darthmama.org>
   50.17 +Content-Type: multipart/encrypted;
   50.18 + protocol="application/pgp-encrypted";
   50.19 + boundary="xS4Wpa7iWOftMYICCywSG2djUku494t0Q"
   50.20 +
   50.21 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   50.22 +--xS4Wpa7iWOftMYICCywSG2djUku494t0Q
   50.23 +Content-Type: application/pgp-encrypted
   50.24 +Content-Description: PGP/MIME version identification
   50.25 +
   50.26 +Version: 1
   50.27 +
   50.28 +--xS4Wpa7iWOftMYICCywSG2djUku494t0Q
   50.29 +Content-Type: application/octet-stream; name="encrypted.asc"
   50.30 +Content-Description: OpenPGP encrypted message
   50.31 +Content-Disposition: inline; filename="encrypted.asc"
   50.32 +
   50.33 +-----BEGIN PGP MESSAGE-----
   50.34 +
   50.35 +hQEMA7q5KACkWjQlAQf/flA7qFcNdoiTYcRtnnvM6Kjs658g2AqytSu13iq/PdkP
   50.36 +GJGr476TxVzlz+WFSLWgl+zrpJoa1vnIwooJ/O8eR2v8SZ6BEomGiHd0AmWraoTW
   50.37 +vz/PjOEV2MIpG2hm1MfcoDjLY2uL/qZvaM0nRrpuWBG0utMg+opLwXLjhittwM4Z
   50.38 +x9txmh2K+SVT6AS7ClF4+t/RxL0sDNqtqJJfTcZvbWwemJbENz4L7VPFHJDnKqFh
   50.39 +ioJtysHt2rT0H2IKGYDk+XoJuG0Y1Y6UIuYSBYVWASpFhe74PtLJ2UeZeB5eiyEZ
   50.40 +7qgMuSAZcWT/u6wYvl0m6exqn6BseJUaCgcArPYOioUBDAOoEzPD1TjKdAEIAKgy
   50.41 +wGx+ZZsIzvJuHQxKn4Ec8bAhQcBHks5Bysjs1WK3TplJwsvrgjKpgL0tGBnb4iha
   50.42 +qlg0BAwqEKa6XUrcqZGahtu8mymWRxxSE1fRpM2Xgj0bip1DaiF3FpbRdbAToE5j
   50.43 +pW9RFU9w/sMppl1PMxwRSuHjUGKsUet2QgJGS7+l1H8xZRz4201sNhDdltxMsvCe
   50.44 ++5lW1eN4jAa4XO+6Nxky+eH9jKKZ1S5dpofE9p4ZsjrrtUmN4lbXS0uDUtA+0O7H
   50.45 +gFv+9r03/LORub7L5dQ744UEzZl4kXVIZoH0e2KSUJoR1g1lZsGHCsZyT2d4HOkK
   50.46 +Qt0J3IGVdiUY32LVuu3S6wHkPPt5vwa9b3SKVeI4vi190K89HuOTXepNowQZkCdo
   50.47 +M+tKZK/OkgRDevdcP6koDmfkLYRMreTD80TxvXOSBmUlqxOW4NVCbYuuf8PkCos9
   50.48 +5F6UD0aJG0J4J8gSt2+VBgdCcu7/+M1VOjM28F/SpXiRxlqVzpbHc6AsPwaZG4xf
   50.49 +n4K6JcMtuBu4zokhBUEhcr+lsbRLgJWl5vTdxtPChH4HNDOD9EGiH//xBgv4XY/h
   50.50 +YCNKas7mI19a10oL91xiL5k5NFK3+VxCClJgCnPnydHbcP3EmYXS2SjE/IRg1O5t
   50.51 +WClpfDs6JsfKSlA+02pNWokdOOYfrJdebmGzHd7JjO/eBMQ0rIb1qzKBRknFf75g
   50.52 +Aw9v+jqIuA6tIaI089hMXjRPe6TUN/q1cQs9rfhjcK2vKMGD4nTgW3IyCmSIKovN
   50.53 ++eB5yJOdR5+XNwyWgKHB5WfSCsTckXRve3eBqSdI8194f68oAqqxBNgBTQHJbAR1
   50.54 +mKpGKNLM6vlIHvpavuExDQNj6Za+7xojRUhb+5p95oZR7zk8FVJ+/yBS3iCfaV2v
   50.55 +HyhY9SqPxqfDpx6BZJWA1tT/nputNZJ2oVkeOX2FYoRtThYziwZXZlXrdQ7rC+VG
   50.56 +htQl6aibBrGvVVDcU5GjVWmRuj/xGPBHIRew4Xi9LT9sBKBLKEBC/VLHV4//tBYo
   50.57 +6kiKSCPw+CBc0dJwWYutHPe1TtJjGE8PLOcwx+tgkndiUk47RJq7Q2lb325LKbOv
   50.58 +BnsRQlGcFzMUQS7xqQ3cu3S+VftYwK25Tn8B2TKQO8XE7gfsSxGxiqfRTkEYXni1
   50.59 +FzdJ3zomFDzGfwc0iH/jZhSf6b6k50txFZ+6T9uyFWkAbOwwK6CuBk5Nwt2h6zUL
   50.60 +2UQEQkVlZARADU/OvAlxH66+mazrLwd44zXgPKyWNZ2QY++gzbr3VyAS/9ODADBG
   50.61 +uCsIIqxgrFq95+AmEqpOO6V5JsQN5tWi87KgnWn9CZ1NI24oQ//5N27BL6bWW/ti
   50.62 +tEFnnR9hfjK5kVKkaqBcIuxixV6pxc9meXPRjTlOFzHomYhlq6f/mFGeLF109Kpo
   50.63 +ssO/TrmaVnpcQ6WwHy1EjGkCdmI6oWLzGg0GDdHIgAKxrsPRwSlYDbQnQGZzTvB8
   50.64 +c6K7RkCLoUc51/Hw9Ddb4BU0PAODvfSdd7zywf44FCh7tbE7C0ITYWMDonQBYhd9
   50.65 +gzQnXvV6uCxz6It/vdqlr4NvvsUC+mTf2UhZdzxSsJ6IMiwBg5EdN1HgBJahjBTL
   50.66 +K+1/rrBWoG7JcI7jca4PGYcHkrYEi+YzgvmZRdzq2c2xnxdDhRZ9QIzkINEr/B7A
   50.67 +qrMqJhH4bYFPpsR0d2qXNrvGnhR406cWH6ws+cXRpcnyo+X3MIhFNs+NN8UDYTdj
   50.68 +oLJypUE0PLIDy0+fHY99UEVltuYgNR+htmjG+JrFdMBSC+c2U0wq4hi3HYe/oCXP
   50.69 ++S19EQG723wtEKZcedVivJPinrWibEdCdcNBGQ5OSqsjKMhSDuBtkGck3tkRC1U1
   50.70 +b0ioSmtnSei7qq6nHrWyjErPedWsIYnvxMa5LmuoewSuJKzJQlBr0QOIxVjzAPVQ
   50.71 +oVzriUXFaetVwiiyfB0MPMumP1/OHd4hej/PlXTFFd5aSGQKCeNsQALy820o9D1O
   50.72 +MAkfeAlu0W3VRzDJo/9O4Fxp/B031qGTbsEwqUZ9WXG3JUK02B4va0iX6N2FiPBe
   50.73 +/kcFEeZLOZb865XXWVw9KsIbj5g8fyFzBxABnHcq/0F9xPyF+rq8cfXYWueVNn0B
   50.74 +HpQRJY5hoR0NwSwmD3CC6grPNvjJDuqeia2+sZgI+O7SyPh3luZIKuBbPaDHYFKl
   50.75 +K1TllDKTV3sxvZLBtRxZK0/TnVyn1WWPtZILOe60o0P5ycJP16CepWB9DPKtxf3D
   50.76 +kJrBlBM/od3bjfaQnvs3uCj7WFlrmbtZ3ecKR/6NV3iuKteyJFv0hoBCbkceypET
   50.77 +F6zeZ0rdDct4J48MnwmdWIx24PZc1t7mGIVNa+clsDSgdm5ei17cWs17SLi+ukRX
   50.78 +suv9MG2s/esydxqCNu+GDyYNGKPDvxP2aMhqam9v5tX8VA2KHyplDbbo+Ukbw5Xf
   50.79 +VJ09WCvBJbexGdl+ipdS93UonOWDT7zvZHwv47v1G3JC7MEWkcJdkd5i+8Z++Vxu
   50.80 +tEUupH6wKzX2oC9G7pTTnJdLr6zMZuWqOPoagX51MHJSfULxQAOFNH8yxrnLF3tC
   50.81 +Tlr4jKiUycioTMMvCTecbTA0sXyGKpkMDGF9mcoKCHGYhsIA8ALxFJbw0kVPJYRp
   50.82 +sfe73dAdMF7KyWrJEtqinynNOZNzqrbW5NtXklFYhbrIhpqrrbkbrSakHbwGNB94
   50.83 +ZT2To+edwwk2m59+DtzTlPk6aOCs5qaEvchu9/po4K9oIDl5lW1qDfGFj4x+Juem
   50.84 +cXTjk5FLFCsdbtogl59wEvwFP3DL9groAsbtrRnpNFRUIeHnQfIH+UfOBIKJs+fG
   50.85 +Iir5d8I2eIB65LlN+Vz2FlilGL8st1VZ9tG1RsftLXjVkselUM8q48FhOBxQi/Gc
   50.86 +Z0Hc2rT82I8oKE6W+Tj5aUOp4wzAY75n1jUtVTmHsbifDv8F0SCXy4OG5fASsTsV
   50.87 +zibRN3DflBfom2/R9haOjee8ZdUs7TM18Zxgq+XViTFekLSUgrYy/NfhRH/crTq2
   50.88 +i0FoluBMnxgDhRIP0FeJFBQr8p/5WVUa1WorMW07BLFrqPcdxlRamMHplfRtEdB0
   50.89 +6eD4MSoCqSr6Avj5ZRbxMj/tdIIoAjPXK5R9I8Zp3uKBRoAtshEt71svxIzc94Bw
   50.90 +xUvLW2nS1OGwnHmfovu1UhG/aQokH6MBw3/Twii36CFc6iwk6ToLf8YDGOERDsqC
   50.91 +woXWDQRsOvYvcksZb529SL+1twyJaIVETkK5uhdNW+R4WMzWnGQR/c36BjnEm0hm
   50.92 +kygJcr/9PFfMy1nwpOOIu5hI4Clf0HcxIqVXdIhKftvlpzgTNy6hF2uiBlPSVuXO
   50.93 +LHkYY6oW1cLKYBuQsYJICzsPs57LD+ND8ofR0+DHjP1VLcnKlNIBfmE/ookn5Xs/
   50.94 +sR7c5lyIVRCTpHDEUA5pOk6Y/pPxbuWgLAMvyPgmsOtYvRFa6t9nTbapsk/BSiEc
   50.95 +vEwK83xPy+dPvnpuvaTcfqRb9f67X2uhLvZES8W70xVyVHH7nPiUbojZq7jlNm9h
   50.96 +cqYCQOfyo5bI56iG3aBB5pN8bVne3biX1AEaZOwMeQlgYLNAQA7TLDPxfdtqu/FJ
   50.97 +QPdBr9KGuqCvTHhny3VIL+vEX1j3CCONHLMBLK/QeW752U2wGtG2gZjug9Tdcuvz
   50.98 +zjB0hWPz96EAo7hvbF5HFg5VETRz15ayfEhB/A7Pnsz8hSvlXu0RRHyte/zsW702
   50.99 +8zAgpFj7tL2vcP7rRrCwZxQgCd//Hxav7KomJBModQfCGwqYO3nycP85570TxStR
  50.100 +RWHYbmnzfP5HbH+e9w==
  50.101 +=NMby
  50.102 +-----END PGP MESSAGE-----
  50.103 +
  50.104 +--xS4Wpa7iWOftMYICCywSG2djUku494t0Q--