merged in default ENGINE-427
authorKrista Bennett <krista@pep-project.org>
Thu, 07 Jun 2018 09:05:46 +0200
branchENGINE-427
changeset 274304e899c60fac
parent 2693 f78c4741405e
parent 2741 5953e581f6be
child 2744 df7e5d64011f
merged in default
test/msg_2.0.asc
     1.1 --- a/build-mac/pEpEngine.xcodeproj/project.pbxproj	Thu May 24 11:06:17 2018 +0200
     1.2 +++ b/build-mac/pEpEngine.xcodeproj/project.pbxproj	Thu Jun 07 09:05:46 2018 +0200
     1.3 @@ -977,7 +977,7 @@
     1.4  				ONLY_ACTIVE_ARCH = YES;
     1.5  				OTHER_CFLAGS = "-DSQLITE3_FROM_OS";
     1.6  				SDKROOT = iphoneos;
     1.7 -				VALID_ARCHS = arm64;
     1.8 +				VALID_ARCHS = "arm64 armv7s armv7";
     1.9  			};
    1.10  			name = Debug;
    1.11  		};
    1.12 @@ -1033,7 +1033,7 @@
    1.13  				OTHER_CFLAGS = "-DSQLITE3_FROM_OS";
    1.14  				SDKROOT = iphoneos;
    1.15  				VALIDATE_PRODUCT = YES;
    1.16 -				VALID_ARCHS = arm64;
    1.17 +				VALID_ARCHS = "arm64 armv7s armv7";
    1.18  			};
    1.19  			name = Release;
    1.20  		};
     2.1 --- a/src/message_api.c	Thu May 24 11:06:17 2018 +0200
     2.2 +++ b/src/message_api.c	Thu Jun 07 09:05:46 2018 +0200
     2.3 @@ -3131,9 +3131,13 @@
     2.4                  
     2.5                  /* Ensure messages whose maintext is in the attachments
     2.6                     move main text into message struct longmsg et al */
     2.7 -                if (pull_up_attached_main_msg(msg) && msg->shortmsg) {
     2.8 +                /* KG: This IS a src modification of old - we're adding to it
     2.9 +                   w/ memhole subject, but the question is whether or not
    2.10 +                   this is OK overall... */
    2.11 +                pull_up_attached_main_msg(msg);
    2.12 +                if (msg->shortmsg) {
    2.13                      free(src->shortmsg);
    2.14 -                    src->shortmsg = strdup(msg->shortmsg);
    2.15 +                    src->shortmsg = strdup(msg->shortmsg);                    
    2.16                  }
    2.17  
    2.18                  // check for private key in decrypted message attachment while importing
     3.1 --- a/src/mime.c	Thu May 24 11:06:17 2018 +0200
     3.2 +++ b/src/mime.c	Thu Jun 07 09:05:46 2018 +0200
     3.3 @@ -1153,8 +1153,12 @@
     3.4      clistiter *cur;
     3.5      size_t index;
     3.6      int r;
     3.7 +    
     3.8      stringpair_list_t *opt = msg->opt_fields;
     3.9  
    3.10 +    if (!fieldlist)
    3.11 +        return PEP_STATUS_OK;
    3.12 +        
    3.13      for (cur = clist_begin(fieldlist); cur != NULL; cur = clist_next(cur)) {
    3.14          _field = clist_content(cur);
    3.15  
    3.16 @@ -1342,7 +1346,7 @@
    3.17                  break;
    3.18          }
    3.19      }
    3.20 -
    3.21 +    
    3.22      return PEP_STATUS_OK;
    3.23  
    3.24  enomem:
    3.25 @@ -1429,6 +1433,47 @@
    3.26      return PEP_STATUS_OK;
    3.27  }
    3.28  
    3.29 +// THIS IS A BEST-EFFORT ONLY FUNCTION, AND WE ARE NOT DOING MORE THAN THE
    3.30 +// SUBJECT FOR NOW.
    3.31 +static PEP_STATUS interpret_protected_headers(
    3.32 +        struct mailmime* mime, 
    3.33 +        message* msg
    3.34 +    )
    3.35 +{
    3.36 +    // N.B. this is *very much* enigmail output specific, and right now,
    3.37 +    // we only care about subject replacement.
    3.38 +    const char* header_string = "Content-Type: text/rfc822-headers; protected-headers=\"v1\"\nContent-Disposition: inline\n\n";
    3.39 +    size_t content_length = mime->mm_length;
    3.40 +    size_t header_strlen = strlen(header_string);
    3.41 +    if (header_strlen < content_length) {
    3.42 +        const char* headerblock = mime->mm_mime_start;
    3.43 +        size_t subject_len = 0;
    3.44 +        headerblock = strstr(headerblock, header_string);
    3.45 +        if (headerblock) {
    3.46 +            const char* subj_start = "Subject: ";
    3.47 +            size_t subj_len = strlen(subj_start);
    3.48 +            headerblock = strstr(headerblock, subj_start);
    3.49 +            if (headerblock) {
    3.50 +                headerblock += subj_len;
    3.51 +                char* end_pt = strstr(headerblock, "\n");
    3.52 +                if (end_pt) {
    3.53 +                    if (end_pt != mime->mm_mime_start && *(end_pt - 1) == '\r')
    3.54 +                        end_pt--;
    3.55 +                    subject_len = end_pt - headerblock;
    3.56 +                    char* new_subj = (char*)calloc(subject_len + 1, 1);
    3.57 +                    if (new_subj) {
    3.58 +                        strlcpy(new_subj, headerblock, subject_len + 1);
    3.59 +                        free(msg->shortmsg);
    3.60 +                        msg->shortmsg = new_subj;
    3.61 +                    }    
    3.62 +                } // if there's no endpoint, there's something wrong here so we ignore all
    3.63 +                  // This is best effort.
    3.64 +            }
    3.65 +        }
    3.66 +    }
    3.67 +    return PEP_STATUS_OK;
    3.68 +}
    3.69 +
    3.70  static PEP_STATUS interpret_MIME(
    3.71          struct mailmime *mime,
    3.72          message *msg
    3.73 @@ -1462,6 +1507,11 @@
    3.74                      if (status)
    3.75                          return status;
    3.76                  }
    3.77 +                else if (_is_text_part(content, "rfc822-headers")) {
    3.78 +                    status = interpret_protected_headers(part, msg);
    3.79 +                    if (status)
    3.80 +                        return status;
    3.81 +                }
    3.82                  else if (_is_text_part(content, "html") &&
    3.83                          msg->longmsg_formatted == NULL) {
    3.84                      status = interpret_body(part, &msg->longmsg_formatted,
    3.85 @@ -1508,7 +1558,6 @@
    3.86                  struct mailmime *part= clist_content(cur);
    3.87                  if (part == NULL)
    3.88                      return PEP_ILLEGAL_VALUE;
    3.89 -
    3.90                  status = interpret_MIME(part, msg);
    3.91                  if (status != PEP_STATUS_OK)
    3.92                      return status;
    3.93 @@ -1522,6 +1571,11 @@
    3.94                  if (status)
    3.95                      return status;
    3.96              }
    3.97 +            else if (_is_text_part(content, "rfc822-headers")) {
    3.98 +                status = interpret_protected_headers(mime, msg);
    3.99 +                if (status)
   3.100 +                    return status;
   3.101 +            }
   3.102              else if (_is_text_part(content, NULL) && msg->longmsg == NULL) {
   3.103                  status = interpret_body(mime, &msg->longmsg, NULL);
   3.104                  if (status)
     4.1 --- a/src/pEp_internal.h	Thu May 24 11:06:17 2018 +0200
     4.2 +++ b/src/pEp_internal.h	Thu Jun 07 09:05:46 2018 +0200
     4.3 @@ -61,7 +61,11 @@
     4.4  #else // UNIX
     4.5  #define _POSIX_C_SOURCE 200809L
     4.6  #include <dlfcn.h>
     4.7 +#ifdef NDEBUG
     4.8  #define LOCAL_DB unix_local_db()
     4.9 +#else
    4.10 +#define LOCAL_DB unix_local_db(false)
    4.11 +#endif
    4.12  #ifndef SYSTEM_DB
    4.13  #define SYSTEM_DB "/usr/share/pEp/system.db"
    4.14  #endif
     5.1 --- a/src/pgp_gpg.c	Thu May 24 11:06:17 2018 +0200
     5.2 +++ b/src/pgp_gpg.c	Thu Jun 07 09:05:46 2018 +0200
     5.3 @@ -262,8 +262,11 @@
     5.4          stringlist_add(conf_keys, "allow-freeform-uid");
     5.5          stringlist_add(conf_values, "");
     5.6  
     5.7 +#if defined(WIN32) || defined(NDEBUG)
     5.8          bResult = ensure_config_values(conf_keys, conf_values, gpg_conf());
     5.9 -
    5.10 +#else
    5.11 +        bResult = ensure_config_values(conf_keys, conf_values, gpg_conf(false));
    5.12 +#endif
    5.13          free_stringlist(conf_keys);
    5.14          free_stringlist(conf_values);
    5.15  
    5.16 @@ -279,8 +282,11 @@
    5.17          stringlist_add(conf_keys, "max-cache-ttl");
    5.18          stringlist_add(conf_values, "1200");
    5.19  
    5.20 +#if defined(WIN32) || defined(NDEBUG)
    5.21          bResult = ensure_config_values(conf_keys, conf_values, gpg_agent_conf());
    5.22 -
    5.23 +#else        
    5.24 +        bResult = ensure_config_values(conf_keys, conf_values, gpg_agent_conf(false));
    5.25 +#endif
    5.26          free_stringlist(conf_keys);
    5.27          free_stringlist(conf_values);
    5.28  
    5.29 @@ -292,6 +298,8 @@
    5.30  
    5.31          gpgme = dlopen(LIBGPGME, RTLD_LAZY);
    5.32          if (gpgme == NULL) {
    5.33 +            // FIXME: Hotfix here?
    5.34 +            
    5.35              status = PEP_INIT_CANNOT_LOAD_GPGME;
    5.36              goto pep_error;
    5.37          }
    5.38 @@ -803,7 +811,8 @@
    5.39                          }
    5.40                          case GPG_ERR_CERT_REVOKED:
    5.41                          case GPG_ERR_BAD_SIGNATURE:
    5.42 -                            result = PEP_DECRYPT_SIGNATURE_DOES_NOT_MATCH;
    5.43 +			    result = PEP_DECRYPT_SIGNATURE_DOES_NOT_MATCH;
    5.44 +                            //result = PEP_DECRYPT_BAD_SIGNATURE;
    5.45                              break;
    5.46                          case GPG_ERR_SIG_EXPIRED:
    5.47                          case GPG_ERR_KEY_EXPIRED:
     6.1 --- a/src/pgp_netpgp.c	Thu May 24 11:06:17 2018 +0200
     6.2 +++ b/src/pgp_netpgp.c	Thu Jun 07 09:05:46 2018 +0200
     6.3 @@ -46,7 +46,12 @@
     6.4      // netpgp_setvar(&netpgp, "need userid", "1");
     6.5  
     6.6      // NetPGP shares home with GPG
     6.7 -    home = gpg_home();
     6.8 +    #if defined(WIN32) || defined(NDEBUG)
     6.9 +        home = gpg_home();
    6.10 +    #else
    6.11 +        home = gpg_home(false);
    6.12 +    #endif
    6.13 +    
    6.14      if(home){
    6.15          netpgp_set_homedir(&netpgp,(char*)home, NULL, 0);
    6.16      }else{
     7.1 --- a/src/platform_unix.c	Thu May 24 11:06:17 2018 +0200
     7.2 +++ b/src/platform_unix.c	Thu Jun 07 09:05:46 2018 +0200
     7.3 @@ -208,12 +208,21 @@
     7.4  
     7.5  #endif
     7.6  
     7.7 +#ifdef NDEBUG
     7.8  const char *unix_local_db(void)
     7.9 +#else
    7.10 +const char *unix_local_db(int reset)
    7.11 +#endif
    7.12  {
    7.13      static char buffer[MAX_PATH];
    7.14      static bool done = false;
    7.15  
    7.16 -    if (!done) {
    7.17 +    #ifdef NDEBUG
    7.18 +    if (!done)
    7.19 +    #else
    7.20 +    if ((!done) || reset)
    7.21 +    #endif
    7.22 +    {
    7.23          char *home_env;
    7.24          if((home_env = getenv("HOME"))){
    7.25              char *p = stpncpy(buffer, home_env, MAX_PATH);
    7.26 @@ -240,12 +249,20 @@
    7.27  static const char *gpg_agent_conf_name = "gpg-agent.conf";
    7.28  static const char *gpg_conf_empty = "# Created by pEpEngine\n";
    7.29  
    7.30 +#ifdef NDEBUG
    7.31  static bool ensure_gpg_home(const char **conf, const char **home){
    7.32 +#else
    7.33 +static bool ensure_gpg_home(const char **conf, const char **home, int reset){
    7.34 +#endif    
    7.35      static char path[MAX_PATH];
    7.36      static char dirname[MAX_PATH];
    7.37      static bool done = false;
    7.38  
    7.39 +#ifdef NDEBUG
    7.40      if (!done) {
    7.41 +#else
    7.42 +    if (reset || !done) {
    7.43 +#endif        
    7.44          char *p;
    7.45          ssize_t len;
    7.46          char *gpg_home_env = getenv("GNUPGHOME");
    7.47 @@ -317,15 +334,27 @@
    7.48      return true;
    7.49  }
    7.50  
    7.51 +#ifdef NDEBUG
    7.52  static bool ensure_gpg_agent_conf(const char **agent_conf){
    7.53 +#else
    7.54 +static bool ensure_gpg_agent_conf(const char **agent_conf, int reset){    
    7.55 +#endif    
    7.56      static char agent_path[MAX_PATH];
    7.57      static bool done = false;
    7.58  
    7.59 +#ifdef NDEBUG
    7.60      if (!done) {
    7.61          const char *dirname;
    7.62  
    7.63          if (!ensure_gpg_home(NULL, &dirname)) /* Then dirname won't be set. */
    7.64              return false;
    7.65 +#else
    7.66 +    if (reset || !done) {
    7.67 +        const char *dirname;
    7.68 +
    7.69 +        if (!ensure_gpg_home(NULL, &dirname, reset)) /* Then dirname won't be set. */
    7.70 +            return false;
    7.71 +#endif
    7.72  
    7.73          char *p = stpncpy(agent_path, dirname, MAX_PATH);
    7.74          
    7.75 @@ -367,6 +396,7 @@
    7.76      return true;
    7.77  }
    7.78  
    7.79 +#ifdef NDEBUG
    7.80  const char *gpg_conf(void)
    7.81  {
    7.82      const char *conf;
    7.83 @@ -374,7 +404,17 @@
    7.84          return conf;
    7.85      return NULL;
    7.86  }
    7.87 +#else
    7.88 +const char *gpg_conf(int reset)
    7.89 +{
    7.90 +    const char *conf;
    7.91 +    if(ensure_gpg_home(&conf, NULL, reset))
    7.92 +        return conf;
    7.93 +    return NULL;
    7.94 +}
    7.95 +#endif
    7.96  
    7.97 +#ifdef NDEBUG
    7.98  const char *gpg_home(void)
    7.99  {
   7.100      const char *home;
   7.101 @@ -382,7 +422,17 @@
   7.102          return home;
   7.103      return NULL;
   7.104  }
   7.105 +#else
   7.106 +const char *gpg_home(int reset)
   7.107 +{
   7.108 +    const char *home;
   7.109 +    if(ensure_gpg_home(NULL, &home, reset))
   7.110 +        return home;
   7.111 +    return NULL;
   7.112 +}
   7.113 +#endif
   7.114  
   7.115 +#ifdef NDEBUG
   7.116  const char *gpg_agent_conf(void)
   7.117  {
   7.118      const char *agent_conf;
   7.119 @@ -390,3 +440,12 @@
   7.120          return agent_conf;
   7.121      return NULL;
   7.122  }
   7.123 +#else
   7.124 +const char *gpg_agent_conf(int reset)
   7.125 +{
   7.126 +    const char *agent_conf;
   7.127 +    if(ensure_gpg_agent_conf(&agent_conf, reset))
   7.128 +        return agent_conf;
   7.129 +    return NULL;
   7.130 +}
   7.131 +#endif
   7.132 \ No newline at end of file
     8.1 --- a/src/platform_unix.h	Thu May 24 11:06:17 2018 +0200
     8.2 +++ b/src/platform_unix.h	Thu Jun 07 09:05:46 2018 +0200
     8.3 @@ -20,11 +20,18 @@
     8.4  extern "C" {
     8.5  #endif
     8.6  
     8.7 +#ifdef NDEBUG
     8.8  const char *unix_local_db(void);
     8.9 -
    8.10  const char *gpg_conf(void);
    8.11  const char *gpg_agent_conf(void);
    8.12  const char *gpg_home(void);
    8.13 +#else
    8.14 +const char *unix_local_db(int reset);
    8.15 +const char *gpg_conf(int reset);
    8.16 +const char *gpg_agent_conf(int reset);
    8.17 +const char *gpg_home(int reset);
    8.18 +#endif
    8.19 +
    8.20  
    8.21  #ifdef ANDROID
    8.22  
     9.1 --- a/test/Makefile	Thu May 24 11:06:17 2018 +0200
     9.2 +++ b/test/Makefile	Thu Jun 07 09:05:46 2018 +0200
     9.3 @@ -83,7 +83,7 @@
     9.4  
     9.5  CPPFLAGS += $(INC_FLAGS) -MMD -MP
     9.6  
     9.7 -all: suitemaker $(TARGET) test_home_
     9.8 +all: suitemaker $(TARGET) test_home_ scripts
     9.9  	
    9.10  $(TARGET): $(OBJS)
    9.11  	$(CXX) $(CPPFLAGS) $(LDFLAGS) $(OBJS) $(LDFLAGS) $(LDLIBS) -o $@
    9.12 @@ -98,7 +98,13 @@
    9.13  		
    9.14  .PHONY: test_home_
    9.15  test_home_: 
    9.16 -	mkdir -p $(TEST_HOME)
    9.17 +	
    9.18 +
    9.19 +.PHONY: test_home_
    9.20 +scripts: 
    9.21 +ifdef PY_ENV
    9.22 +	$(PY_ENV) genscripts.py
    9.23 +endif
    9.24  
    9.25  .PHONY: test
    9.26  test: all
    9.27 @@ -107,6 +113,7 @@
    9.28  .PHONY: clean
    9.29  clean:
    9.30  	$(RM) $(TARGET) $(OBJS) $(DEPS)
    9.31 +	$(RM) $(HERE)/*Tests
    9.32  
    9.33  
    9.34  
    10.1 --- a/test/convenience_scripts/README	Thu May 24 11:06:17 2018 +0200
    10.2 +++ b/test/convenience_scripts/README	Thu Jun 07 09:05:46 2018 +0200
    10.3 @@ -1,1 +1,3 @@
    10.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.
    10.5 +
    10.6 +Note that the keygen script isn't currently deleting keys properly. We probably just have to shell out and do it.
    11.1 --- a/test/convenience_scripts/keygen_for_test.py	Thu May 24 11:06:17 2018 +0200
    11.2 +++ b/test/convenience_scripts/keygen_for_test.py	Thu Jun 07 09:05:46 2018 +0200
    11.3 @@ -67,9 +67,14 @@
    11.4      
    11.5      print(input_data)
    11.6      key = None
    11.7 -    key = gpg.gen_key(input_data)
    11.8 -    if not key:
    11.9 -        raise Exception('Key not created in iteration ' + str(i))
   11.10 +    try:
   11.11 +        key = gpg.gen_key(input_data)
   11.12 +        if not key:
   11.13 +            raise Exception('Key not created in iteration ' + str(i))
   11.14 +    except ValueError:
   11.15 +        pass
   11.16 +
   11.17 +
   11.18      pubkey = None
   11.19      privkey = None
   11.20      
   11.21 @@ -79,7 +84,7 @@
   11.22  
   11.23      
   11.24      pubkey = gpg.export_keys(fpr)
   11.25 -    privkey = gpg.export_keys(fpr, True)
   11.26 +    privkey = gpg.export_keys(fpr, True, passphrase="")
   11.27  
   11.28      pubkey_filename = os.path.join(pub_path, key_filename_prefix + "pub.asc")
   11.29      privkey_filename = os.path.join(priv_path, key_filename_prefix + "priv.asc")    
   11.30 @@ -93,7 +98,7 @@
   11.31      privkey_file.close()
   11.32          
   11.33      # Delete keys from keyring
   11.34 -    gpg.delete_keys(fpr, True) # True => private keys
   11.35 +    gpg.delete_keys(fpr, True, passphrase="") # True => private keys
   11.36      gpg.delete_keys(fpr)
   11.37  
   11.38      if (args.hgadd):
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/test/genscripts.py	Thu Jun 07 09:05:46 2018 +0200
    12.3 @@ -0,0 +1,27 @@
    12.4 +# This file is under GNU General Public License 3.0
    12.5 +# see LICENSE.txt
    12.6 +
    12.7 +from os import listdir, getcwd
    12.8 +from os.path import isfile, join
    12.9 +from re import sub
   12.10 +import os
   12.11 +import stat
   12.12 +import datetime
   12.13 +
   12.14 +srcpath = join(getcwd(), "src/engine_tests")
   12.15 +
   12.16 +ls = listdir(srcpath)
   12.17 +
   12.18 +for f in ls:
   12.19 +    if isfile(join(srcpath, f)):
   12.20 +        if (f.endswith(".cc")):
   12.21 +            suite = sub('\.cc$', '', f)
   12.22 +            outfile = open(suite, 'w')
   12.23 +            output = (
   12.24 +                "#!/bin/bash\n"
   12.25 +                "# This is a convenience script for launching individual tests and tab completion with TestDriver \n\n" +
   12.26 +                "./TestDriver " + suite + "\n\n")
   12.27 +            outfile.write(output)
   12.28 +            os.chmod(suite, 
   12.29 +                     (stat.S_IRWXU | stat.S_IRGRP | stat.S_IROTH | stat.S_IXGRP | stat.S_IXOTH))
   12.30 +            outfile.close()
   12.31 \ No newline at end of file
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/test/include/BCCTests.h	Thu Jun 07 09:05:46 2018 +0200
    13.3 @@ -0,0 +1,21 @@
    13.4 +// This file is under GNU General Public License 3.0
    13.5 +// see LICENSE.txt
    13.6 +
    13.7 +#ifndef BCC_H
    13.8 +#define BCC_H
    13.9 +
   13.10 +#include <string>
   13.11 +#include "EngineTestIndividualSuite.h"
   13.12 +
   13.13 +using namespace std;
   13.14 +
   13.15 +class BCCTests : public EngineTestIndividualSuite {
   13.16 +    public:
   13.17 +        BCCTests(string test_suite, string test_home_dir);
   13.18 +    protected:
   13.19 +	void setup();
   13.20 +    private:
   13.21 +        void check_single_BCC();
   13.22 +};
   13.23 +
   13.24 +#endif
    14.1 --- a/test/include/EncryptMissingPrivateKeyTests.h	Thu May 24 11:06:17 2018 +0200
    14.2 +++ b/test/include/EncryptMissingPrivateKeyTests.h	Thu Jun 07 09:05:46 2018 +0200
    14.3 @@ -12,6 +12,8 @@
    14.4  class EncryptMissingPrivateKeyTests : public EngineTestSessionSuite {
    14.5      public:
    14.6          EncryptMissingPrivateKeyTests(string test_suite, string test_home_dir);
    14.7 +    protected:
    14.8 +        void setup();
    14.9      private:
   14.10          void check_encrypt_missing_private_key();
   14.11  };
    15.1 --- a/test/include/EngineTestSuite.h	Thu May 24 11:06:17 2018 +0200
    15.2 +++ b/test/include/EngineTestSuite.h	Thu Jun 07 09:05:46 2018 +0200
    15.3 @@ -18,13 +18,19 @@
    15.4      protected:
    15.5          PEP_SESSION session;
    15.6          string test_home;
    15.7 +        string real_home;
    15.8          string prev_gpg_home;
    15.9          string name;
   15.10          
   15.11          string current_test_name;
   15.12  
   15.13 +#define TEST_FAILED_MESSAGE_BUFSIZE 1000        
   15.14 +        char failed_msg_buf[TEST_FAILED_MESSAGE_BUFSIZE];
   15.15 +        
   15.16          std::map<std::string, void (Test::Suite::*)()> test_map;                
   15.17          
   15.18 +        string my_name;
   15.19 +        
   15.20          unsigned int number_of_tests;
   15.21          unsigned int on_test_number;
   15.22          
   15.23 @@ -34,6 +40,6 @@
   15.24          void set_full_env();
   15.25          void restore_full_env();
   15.26          void initialise_test_home();
   15.27 -        
   15.28 +        void set_my_name();    
   15.29  };
   15.30  #endif
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/test/include/IntegrityTests.h	Thu Jun 07 09:05:46 2018 +0200
    16.3 @@ -0,0 +1,54 @@
    16.4 +// This file is under GNU General Public License 3.0
    16.5 +// see LICENSE.txt
    16.6 +
    16.7 +#ifndef INTEGRITY_H
    16.8 +#define INTEGRITY_H
    16.9 +
   16.10 +#include <string>
   16.11 +#include "pEpEngine.h"
   16.12 +#include "message_api.h"
   16.13 +
   16.14 +#include "EngineTestIndividualSuite.h"
   16.15 +
   16.16 +using namespace std;
   16.17 +
   16.18 +class IntegrityTests : public EngineTestIndividualSuite {
   16.19 +    public:
   16.20 +        IntegrityTests(string test_suite, string test_home_dir);
   16.21 +        
   16.22 +    protected:
   16.23 +        void setup();
   16.24 +        void tear_down();
   16.25 +            
   16.26 +    private:
   16.27 +        const char* recip_fpr;
   16.28 +
   16.29 +        // used by each test
   16.30 +        string message;
   16.31 +        char* decrypted_msg;
   16.32 +        PEP_STATUS decrypt_status;
   16.33 +        PEP_rating rating;
   16.34 +        PEP_decrypt_flags_t flags;
   16.35 +        stringlist_t* keylist;
   16.36 +        char* dummy_ignore;
   16.37 +        
   16.38 +        void check_unsigned_PGP_MIME();
   16.39 +        void check_unsigned_PGP_MIME_attached_key();
   16.40 +        void check_unsigned_PGP_MIME_w_render_flag();
   16.41 +        void check_known_good_signed_PGP_MIME();
   16.42 +        void check_known_good_signed_PGP_MIME_attached_key();
   16.43 +        void check_unknown_signed_PGP_MIME_no_key();
   16.44 +        void check_unknown_signed_PGP_MIME_attached_key();
   16.45 +        void check_unsigned_PGP_MIME_corrupted();
   16.46 +        void check_signed_PGP_MIME_corrupted();
   16.47 +        void check_unsigned_2_0();
   16.48 +        void check_unknown_signed_2_0_no_key();
   16.49 +        void check_unknown_signed_2_0_no_key_known_signer();
   16.50 +        void check_unknown_signed_2_0_key_attached();
   16.51 +
   16.52 +        void check_integrity();
   16.53 +        
   16.54 +
   16.55 +};
   16.56 +
   16.57 +#endif
    17.1 --- a/test/include/RevokeRegenAttachTests.h	Thu May 24 11:06:17 2018 +0200
    17.2 +++ b/test/include/RevokeRegenAttachTests.h	Thu Jun 07 09:05:46 2018 +0200
    17.3 @@ -12,6 +12,8 @@
    17.4  class RevokeRegenAttachTests : public EngineTestSessionSuite {
    17.5      public:
    17.6          RevokeRegenAttachTests(string test_suite, string test_home_dir);
    17.7 +    protected:
    17.8 +        void setup();
    17.9      private:
   17.10          void check_revoke_regen_attach();
   17.11  };
    18.1 --- a/test/include/test_util.h	Thu May 24 11:06:17 2018 +0200
    18.2 +++ b/test/include/test_util.h	Thu Jun 07 09:05:46 2018 +0200
    18.3 @@ -2,6 +2,10 @@
    18.4  #define PEP_TEST_UTILS_H
    18.5  
    18.6  #include <string>
    18.7 +#include <stdlib.h>
    18.8 +#include <sys/stat.h>
    18.9 +#include <ftw.h>
   18.10 +
   18.11  #include "pEpEngine.h"
   18.12  #include "message_api.h"
   18.13  
   18.14 @@ -31,4 +35,11 @@
   18.15  // Grabs a new uuid for your randomish string needs.
   18.16  char* get_new_uuid();
   18.17  
   18.18 +bool slurp_message_and_import_key(PEP_SESSION session, const char* message_fname, std::string& message, const char* key_filename);
   18.19 +
   18.20 +int util_delete_filepath(const char *filepath, 
   18.21 +                         const struct stat *file_stat, 
   18.22 +                         int ftw_info, 
   18.23 +                         struct FTW * ftw_struct);
   18.24 +        
   18.25  #endif
    19.1 --- a/test/msg_2.0.asc	Thu May 24 11:06:17 2018 +0200
    19.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.3 @@ -1,87 +0,0 @@
    19.4 -From: Alice Test <pep.test.alice@pep-project.org>
    19.5 -To: Carol Test <pep-test-carol@pep-project.org>
    19.6 -Subject: =?utf-8?Q?p=E2=89=A1p?=
    19.7 -References: <one-839274982347239847@pep-project.org>
    19.8 - <two-dfddffd839274982347239847@pep-project.org>
    19.9 - <three-OMGWTFBBQ.edfddffd839274982347239847@pep-project.org>
   19.10 -X-pEp-Version: 2.0
   19.11 -MIME-Version: 1.0
   19.12 -Content-Type: multipart/mixed; boundary="5375f3c96151eefd677a67745a07392e"
   19.13 -
   19.14 ---5375f3c96151eefd677a67745a07392e
   19.15 -Content-Type: text/plain; charset="utf-8"
   19.16 -Content-Transfer-Encoding: quoted-printable
   19.17 -Content-Disposition: inline; filename="msg.txt"
   19.18 -
   19.19 -this message was encrypted with p=E2=89=A1p https://pEp-project.org
   19.20 ---5375f3c96151eefd677a67745a07392e
   19.21 -Content-Type: application/pgp-encrypted
   19.22 -
   19.23 -Version: 1
   19.24 ---5375f3c96151eefd677a67745a07392e
   19.25 -Content-Type: application/octet-stream
   19.26 -Content-Disposition: attachment; filename="msg.asc"
   19.27 -
   19.28 ------BEGIN PGP MESSAGE-----
   19.29 -
   19.30 -hQEMA1oCBdlzCD9NAQgAwpb80p7R1/brmEqsRD06ey/pvSylS7GIYued57QhwZfr
   19.31 -GtB90lUCcR9gz6th9546gjLvO7kdptHHpAc1PNmsNEkRif3OdEqUssWTIS3f//t6
   19.32 -7lMm/0Cg4sefynt1GQlNVhGeNKR7OMdET9IGGpu0ff+mmiaojyf7EacpgEeDUQM8
   19.33 -t5OGemPwA0I7UyFLscp1N7touZsZ7EyypRuBwezD6v/u/dBosl607GTql8t6gG96
   19.34 -6yIOvLdwLmb6Qn24q7BwnCWWJrNneIxTGlYDLKhkXR0rhKL8M/8BjNSTIWsZoXBX
   19.35 -sK5TkYP/fYwQmCBuR15pKBbmiUTh/sEu4UvmgTkKKIUBDAOo6/9vKSPoQgEIAJOX
   19.36 -DmGHCKi0Ge3kWaWSq35I85C+NQcoBRLGnPnSRS26RA0ujMvZzQ30STaUnmR9z9ME
   19.37 -UV0JNl8yjaKdDWGWj8q/VJrQraKMipOiGMuIKz3qYpY703x0neA50GSL8LSCAbuq
   19.38 -W1jDhZOsl4BaDB1dn19yzE7dCLcXHGlo2usfqxLj5uvezAEjyqeZO66hCTddcH/D
   19.39 -KlSj8yDdlG6YOwo+rJShds+bviGHPdJocH+JceYZyh3WFLYZACQ10NSkP5rrpAb2
   19.40 -1Jge8dyy/DNlTxonLrlxOLEx2fg+nLXIVjczjQxt7MIgGCAmxV3V/BIwMsEDPf4n
   19.41 -g+mUU/hGnIhyon6R98fS6wEuNjOz3Ob1nrep/0JxA/qeWqMTvyBRmYLodohPCJrh
   19.42 -PhG3PKMeXA89PUXWP39DNppBPvmXKFnueKPz03VWZGl+F5fKidXbJUxdpBTwE2a2
   19.43 -QqPX1E+NpTRe1kSTq/4ep1b42PlTwCILEKthiSjSXV3truE/6fKxheSM9dArV17y
   19.44 -zZCxK/QFemcayGi7QngIoOpsfXD3ZiB4V7Y0So53QM5w8mQi/ka4IAHgngoBhPEN
   19.45 -um4KHyO4OYBtQhyEAv69v6Tt7Lxn05SU6ip9zBOFC/N2xztXn6+4+cAZqIzz/rBL
   19.46 -7JefUloA3Q9Lqnc3iYOkjIGL9B+xi8qYqr480PN9AVlpvGGgkvZoDilpZBtRqVYM
   19.47 -SLeKFMO4pAC7SU3GrvqsN5FMAAdffuxRNr/kODrx4ELd7heybU9xOYoLwGn0C69g
   19.48 -qFU47fVSWybK2cZGxBFTVvgmHxWtkBvvyOW7POffx9+Myyxaecjj35yhXJ6pS7rO
   19.49 -joC0NI5ZU8m6ZJsUKplZFjYalv1YeRj7kFfbAPXjQ1spA+7fqLacGrS2FUv/G/CJ
   19.50 -7WNZX/4SSkFFu+gsKiTfXjBo9FkaypElbJzeHWiESKxt1IylpuKE4AfaHDbyM8II
   19.51 -Z8kr2+a7hjwio2U1G8/b1+hiKpmopn7wjAKE5DzmG8bNRRJSRh6Pi15VmojPOsK9
   19.52 -sILgvnxELtAthm3XLtvCUYF0qpQ4XLHbcYaT1lROpJOw19wpKnSbsk6NnbXcje6q
   19.53 -Nf7br5jC/GwV/E3HZUt6IimHr5ObVHNsG65TCEhjTmlPsYaqSjXcJujilz95GvKY
   19.54 -uBWCQXfeARGNdeajoVc9SViTd8vYPXHwBF2atgUDu/wdqULJ7GnF2rd6Dls3R2Mk
   19.55 -ybFvCXjLcuCOW4G07SNe43rX2OxoK1xIl6n0BN4tVVOeKK0mckDweeTDRkQ+EADh
   19.56 -698tzIEOYTSghcDd1pGFp99HeukD/cLXIZu4/+ijPYLLMP7KTH/fiGd8EcCGywC3
   19.57 -Ts9NA74RzRQlSMUq/cSFLwshXaUati+iOJ4vPaqXJj8x+fkwYdJ38NZAsIEfz196
   19.58 -hOCznzF1SSbQFqxLcxud1uUieUlC3JExZBBy5RU1q53RDfoNPNNEmco4yuHQP2Pn
   19.59 -Iqn6xb5aq5wfCNqlwhsk3DKX6WQfwLPJMNNFhh1scsCkLM2pnsMp1js37mxjCqTT
   19.60 -DmhJY7FZ3hS/PyU0i8He+NDaKOF7TrO95lgLUUPp9NiCyPEIc7lwMSHNpO4Dp59S
   19.61 -Pb5MY70vd+Bhpv983FaSdGQLuJMni9E1ivdwKaIGjildN87hJLCA9ai/IUJPy3BY
   19.62 -8JmqvWubhfZ5e6+IDKz7mfk+CFsKcgzeDql+K+x2cLRTFtSTwMcwBNg7g1cUijEl
   19.63 -P/+NV5kORhXqZUgKRddaNphoC6V8ENEFpfdw/QxuqbvWLgbbsWHYY3Txs+P+3Lvt
   19.64 -za1QsLvTYBjlbyMKPE6d4lvzAnxU90uiZmhd9IHh1FdXRDv0b3CbSNKxohMNBZvD
   19.65 -FRrqLWnysZbd+ee/Hyds9o51EIAQKR4IY7yc7J4V7TsRn+XlI0oybEA8QNMOn7G1
   19.66 -VASo/Oh+7DqdLDtsdOEWCuPu1T+SgCvtTXWjjvZLgao9A5ef53ciJZdjD7lO0gSi
   19.67 -WVTnGww66Mx2U1SPyRF8PASJODWrHNHBu5RzOySbaSNe5YDawif1GYQZdWRNus3w
   19.68 -q/4bKH8PX6XLN6a7rmR2Pze6OUQxxUA2LVzRZBrYBeNjNgFtykQ7n4l1i3xnBurO
   19.69 -IApMsM21vQcMZIjwuKHL3HHfFF0jQOkmOVSdoiLP53TS40OjChTi8hQcCgssLPHj
   19.70 -vrx7K4AsQiB7V2YXtEPII5v/xfV0CCSkCmSUKnV/jZ2wBBvW2qTXxdvg3l8o9sWa
   19.71 -tlDlbBMr3PIYaOGknjSxjBmqpwzOpGbuhZ7knz1o4ya7c1tHTqKJAN+lqUSosKSv
   19.72 -Q6qoVZo6xg8JxFt+/7FXXIj4fP430oFdXyKDFg69TW7TQo5PaGBSDnvAd/+QmhXM
   19.73 -togcFN13dcz2qHUVYjKDde8yWeFoWV3DovZQI+0jANJUPA6igDG/QH3wUWlAku8p
   19.74 -/zl4Tqf5/F9rjHyQYPaRu4+eN96Dr4Sx90o54u6JsCdDZRNcqdhwLxbCUrNSz5wf
   19.75 -ViyEKjO5mJxWKDBvSCZV2YO/4r0qyhNq8lqjLM6mEkRgoz9HV2JO8O8sfh/79ZE6
   19.76 -YQq50U0HfiV49qA9enILEx4O0U/wZLS5dn/JG0hOmQOIkeGoyfdBTCWYYyw18uiZ
   19.77 -/pSFzWxaqoT0O73UjOmddtE1fJnLxKp/MEwljZVY8tZ3F5BzmvSDHvW90/KJCdYC
   19.78 -KyQ7edF/HMxYMLZYawFplloudxIWvVlRWtReKppUbbO7opAX36YwScKDnICHZzJs
   19.79 -f2i8K/N4F8U2xEpArWTSytclkouqqnOEMQ1IDU9nz7ryX5AJUaxqmwtLAMRwPq+3
   19.80 -pQ1yHMIl1EnUZ1TU3UUZA9PODPdekmJz8IMeDdcDH8gDDF/9NQS/HqMN6GxROVC9
   19.81 -Ez9cPiMvJIN528UYjPGPkBQJ1FLZREI8RE0+kWwipUOlBh1ZlDtBxfhUMOUvEtIb
   19.82 -KX48kzWDCcFE2IFk16BOSWidOgSQeu4qqlI8ja3SmCxTYRXyls0oeGD4gRxV1wy1
   19.83 -mPumA7lppxm8aD3rfjY00MXonu9DJItS9xhZ3SDW2wjSkwuPi7e1NunBiVbslhSQ
   19.84 -ZpluSM0c23NVLYuk8r7LU9Wz1QJikCq9Erw6LvUbt9cRigXpI/pn0xyJsUSdY+JX
   19.85 -gusGfd5EHg+epa8rlsW5c4Du9Le7Pn+hsqCmIk9AzSZo+exw/UJ9BZdhyn5tr3zW
   19.86 -Bw88tCsYGg==
   19.87 -=QWws
   19.88 ------END PGP MESSAGE-----
   19.89 -
   19.90 ---5375f3c96151eefd677a67745a07392e--
    20.1 --- a/test/src/EngineTestIndividualSuite.cc	Thu May 24 11:06:17 2018 +0200
    20.2 +++ b/test/src/EngineTestIndividualSuite.cc	Thu Jun 07 09:05:46 2018 +0200
    20.3 @@ -20,11 +20,11 @@
    20.4  }
    20.5  
    20.6  void EngineTestIndividualSuite::setup() {
    20.7 +    EngineTestSuite::setup();
    20.8      set_full_env(); // This will be called by default before every test
    20.9  }
   20.10  
   20.11  void EngineTestIndividualSuite::tear_down() {
   20.12 -    cout << "calling release()\n";
   20.13 -    release(session);
   20.14      restore_full_env();
   20.15 +    EngineTestSuite::tear_down();
   20.16  }
    21.1 --- a/test/src/EngineTestSessionSuite.cc	Thu May 24 11:06:17 2018 +0200
    21.2 +++ b/test/src/EngineTestSessionSuite.cc	Thu Jun 07 09:05:46 2018 +0200
    21.3 @@ -23,6 +23,7 @@
    21.4  }
    21.5  
    21.6  void EngineTestSessionSuite::tear_down() {
    21.7 +    cout << "Session: tear_down - OTN: " << on_test_number << " NOT: " << number_of_tests << endl; 
    21.8      if (on_test_number == number_of_tests)
    21.9          restore_full_env();
   21.10          
    22.1 --- a/test/src/EngineTestSuite.cc	Thu May 24 11:06:17 2018 +0200
    22.2 +++ b/test/src/EngineTestSuite.cc	Thu Jun 07 09:05:46 2018 +0200
    22.3 @@ -1,7 +1,14 @@
    22.4 +#include <stdlib.h>
    22.5 +#include <sys/stat.h>
    22.6 +#include <errno.h>
    22.7  #include <stdlib.h>
    22.8  #include <unistd.h>
    22.9  #include <ftw.h>
   22.10 +#include <assert.h>
   22.11  
   22.12 +#include "platform_unix.h"
   22.13 +
   22.14 +#include "test_util.h"
   22.15  #include "EngineTestSuite.h"
   22.16  using namespace std;
   22.17  
   22.18 @@ -9,15 +16,10 @@
   22.19  EngineTestSuite::EngineTestSuite(string suitename, string test_home_dir) {
   22.20      // FIXME: deal with base
   22.21      test_home = test_home_dir;
   22.22 -    
   22.23 -    // TODO: This is *nix specific, which the current testing env is anyway,
   22.24 -    // but it needn't remain so forever and always
   22.25 -    char* tmp = getenv("GNUPGHOME");
   22.26 -    if (tmp)
   22.27 -        prev_gpg_home = getenv("GNUPGHOME");
   22.28 -        
   22.29 +            
   22.30      number_of_tests = 0;
   22.31      on_test_number = 0;
   22.32 +    real_home = getenv("HOME");
   22.33  }
   22.34  
   22.35  EngineTestSuite::~EngineTestSuite() {}
   22.36 @@ -29,45 +31,102 @@
   22.37  }
   22.38  
   22.39  void EngineTestSuite::set_full_env() {
   22.40 +    int success = 0;
   22.41 +    struct stat dirchk;
   22.42 +    
   22.43 +    set_my_name();
   22.44  
   22.45 -    if (test_home.empty())
   22.46 -        throw std::runtime_error("SETUP: BAD INITIALISATION. No test home.");
   22.47 -    
   22.48 -    int success = system("gpgconf --kill all");
   22.49 +    success = system("gpgconf --kill all");
   22.50      if (success != 0)
   22.51          throw std::runtime_error("SETUP: Error when executing 'gpgconf --kill all'.");
   22.52 +    sleep(1); // hopefully enough time for the system to recognise that it is dead. *sigh*    
   22.53 +
   22.54 +    if (stat(test_home.c_str(), &dirchk) == 0) {
   22.55 +        if (!S_ISDIR(dirchk.st_mode))
   22.56 +            throw std::runtime_error(("The test directory, " + test_home + "exists, but is not a directory.").c_str()); 
   22.57 +                    
   22.58 +        struct stat buf;
   22.59 +
   22.60 +        if (stat(test_home.c_str(), &buf) == 0) {
   22.61 +            cout << test_home << " exists. We'll recursively delete. We hope we're not horking your whole system..." << endl;
   22.62 +            int success = nftw((test_home + "/.").c_str(), util_delete_filepath, 100, FTW_DEPTH);
   22.63 +        }
   22.64 +    }
   22.65 +    else {
   22.66 +        int errchk = mkdir(test_home.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
   22.67 +        cout << errchk << endl;
   22.68 +        if (errchk != 0)
   22.69 +            throw std::runtime_error("Error creating a test directory.");
   22.70 +    }
   22.71 +
   22.72 +    string temp_test_home = test_home + "/" + my_name;
   22.73 +    
   22.74 +    int errchk = mkdir(temp_test_home.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
   22.75 +    if (errchk != 0)
   22.76 +        throw std::runtime_error("Error creating a test directory.");
   22.77 +
   22.78 +    temp_test_home += "/" + to_string(on_test_number);
   22.79 +
   22.80 +    errchk = mkdir(temp_test_home.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
   22.81 +    if (errchk != 0)
   22.82 +        throw std::runtime_error("Error creating a test directory.");
   22.83 +
   22.84 +    // TODO: This is *nix specific, which the current testing env is anyway,
   22.85 +    // but it needn't remain so forever and always
   22.86 +    char* tmp = getenv("GNUPGHOME");
   22.87 +    if (tmp)
   22.88 +        prev_gpg_home = tmp;
   22.89 +        
   22.90 +    if (temp_test_home.empty())
   22.91 +        throw std::runtime_error("SETUP: BAD INITIALISATION. No test home.");
   22.92 +
   22.93      
   22.94      string home = getenv("HOME");
   22.95 -    if (test_home.compare(home) == 0 || test_home.compare(home + "/") == 0 ||
   22.96 -        test_home.compare(home + "/.gnupg") == 0 || test_home.compare(home + ".gnupg") == 0 ||
   22.97 -        test_home.compare(prev_gpg_home) == 0 || test_home.compare(prev_gpg_home + "/.gnupg") == 0 ||
   22.98 -        test_home.compare(prev_gpg_home + ".gnupg") == 0)
   22.99 +    cout << "home is " << home << endl;
  22.100 +    assert(temp_test_home.compare(home) != 0);
  22.101 +    assert(temp_test_home.compare(home + "/") != 0);
  22.102 +    assert(temp_test_home.compare(home + "/.gnupg") != 0);
  22.103 +    assert(temp_test_home.compare(home + ".gnupg") != 0);
  22.104 +    assert(temp_test_home.compare(prev_gpg_home) != 0);
  22.105 +    assert(temp_test_home.compare(prev_gpg_home + "/.gnupg") != 0);
  22.106 +    assert(temp_test_home.compare(prev_gpg_home + ".gnupg") != 0);
  22.107 +
  22.108 +    if (temp_test_home.compare(home) == 0 || temp_test_home.compare(home + "/") == 0 ||
  22.109 +        temp_test_home.compare(home + "/.gnupg") == 0 || temp_test_home.compare(home + ".gnupg") == 0 ||
  22.110 +        temp_test_home.compare(prev_gpg_home) == 0 || temp_test_home.compare(prev_gpg_home + "/.gnupg") == 0 ||
  22.111 +        temp_test_home.compare(prev_gpg_home + ".gnupg") == 0)
  22.112          throw std::runtime_error("SETUP: new GNUPGHOME threatens to mess up user GNUPGHOME (and delete all their keys). NO DICE.");
  22.113      
  22.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;
  22.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;
  22.116      
  22.117      struct stat buf;
  22.118      
  22.119 -    success = setenv("GNUPGHOME", (test_home + "/.gnupg").c_str(), 1);
  22.120 +    success = setenv("GNUPGHOME", (temp_test_home + "/.gnupg").c_str(), 1);
  22.121      if (success != 0)
  22.122          throw std::runtime_error("SETUP: Error when setting GNUPGHOME.");
  22.123  
  22.124 -    success = setenv("HOME", test_home.c_str(), 1);
  22.125 +    cout << "New GNUPGHOME is " << getenv("GNUPGHOME") << endl;
  22.126 +    
  22.127 +    success = setenv("HOME", temp_test_home.c_str(), 1);
  22.128      if (success != 0)
  22.129          throw std::runtime_error("SETUP: Cannot set test_home for init.");
  22.130      
  22.131 -    cout << "calling init()\n";
  22.132 +    unix_local_db(true);
  22.133 +    gpg_conf(true);
  22.134 +    gpg_agent_conf(true);
  22.135 +    
  22.136 +//    cout << "calling init()\n";
  22.137      PEP_STATUS status = init(&session);
  22.138 -    // assert(status == PEP_STATUS_OK);
  22.139 -    // assert(session);
  22.140 -    cout << "init() completed.\n";
  22.141 +    assert(status == PEP_STATUS_OK);
  22.142 +    assert(session);
  22.143 +//    cout << "init() completed.\n";
  22.144  
  22.145 -    success = setenv("HOME", home.c_str(), 1);
  22.146 -    if (success != 0)
  22.147 -        throw std::runtime_error("SETUP: Cannot reset home directory! Either set environment variable manually back to your home, or quit this session!");    
  22.148  }
  22.149  
  22.150  void EngineTestSuite::restore_full_env() {
  22.151 +    release(session);
  22.152 +    session = NULL;
  22.153 +        
  22.154      int success = system("gpgconf --kill all");
  22.155      if (success != 0)
  22.156          throw std::runtime_error("RESTORE: Error when executing 'gpgconf --kill all'.");
  22.157 @@ -75,6 +134,18 @@
  22.158      success = setenv("GNUPGHOME", prev_gpg_home.c_str(), 1);
  22.159      if (success != 0)
  22.160          throw std::runtime_error("RESTORE: Warning - cannot restore GNUPGHOME. Either set environment variable manually back to your home, or quit this session!");
  22.161 +                
  22.162 +    success = nftw((test_home + "/.").c_str(), util_delete_filepath, 100, FTW_DEPTH);
  22.163 +    
  22.164 +    success = setenv("HOME", real_home.c_str(), 1);
  22.165 +    if (success != 0)
  22.166 +        throw std::runtime_error("RESTORE: Cannot reset home directory! Either set environment variable manually back to your home, or quit this session!");
  22.167 +    else
  22.168 +        cout << "RESTORE: HOME is now " << getenv("HOME") << endl;
  22.169 +    unix_local_db(true);
  22.170 +    gpg_conf(true);
  22.171 +    gpg_agent_conf(true);
  22.172 +
  22.173  }
  22.174  
  22.175  void EngineTestSuite::setup() {
  22.176 @@ -82,3 +153,7 @@
  22.177  }
  22.178  
  22.179  void EngineTestSuite::tear_down() {}
  22.180 +
  22.181 +void EngineTestSuite::set_my_name() {
  22.182 +    my_name = typeid(*this).name();
  22.183 +}
  22.184 \ No newline at end of file
    23.1 --- a/test/src/SuiteMaker.cc	Thu May 24 11:06:17 2018 +0200
    23.2 +++ b/test/src/SuiteMaker.cc	Thu Jun 07 09:05:46 2018 +0200
    23.3 @@ -21,6 +21,7 @@
    23.4  #include "AppleMailTests.h"
    23.5  #include "CaseAndDotAddressTests.h"
    23.6  #include "SequenceTests.h"
    23.7 +#include "BCCTests.h"
    23.8  #include "MessageApiTests.h"
    23.9  #include "I18nTests.h"
   23.10  #include "CrashdumpTests.h"
   23.11 @@ -59,6 +60,7 @@
   23.12      "AppleMailTests",
   23.13      "CaseAndDotAddressTests",
   23.14      "SequenceTests",
   23.15 +    "BCCTests",
   23.16      "MessageApiTests",
   23.17      "I18nTests",
   23.18      "CrashdumpTests",
   23.19 @@ -88,7 +90,7 @@
   23.20  };
   23.21  
   23.22  // This file is generated, so magic constants are ok.
   23.23 -int SuiteMaker::num_suites = 35;
   23.24 +int SuiteMaker::num_suites = 36;
   23.25  
   23.26  void SuiteMaker::suitemaker_build(const char* test_class_name, const char* test_home, Test::Suite** test_suite) {
   23.27      if (strcmp(test_class_name, "MapAsn1Tests") == 0)
   23.28 @@ -109,6 +111,8 @@
   23.29          *test_suite = new CaseAndDotAddressTests(test_class_name, test_home);
   23.30      else if (strcmp(test_class_name, "SequenceTests") == 0)
   23.31          *test_suite = new SequenceTests(test_class_name, test_home);
   23.32 +    else if (strcmp(test_class_name, "BCCTests") == 0)
   23.33 +        *test_suite = new BCCTests(test_class_name, test_home);
   23.34      else if (strcmp(test_class_name, "MessageApiTests") == 0)
   23.35          *test_suite = new MessageApiTests(test_class_name, test_home);
   23.36      else if (strcmp(test_class_name, "I18nTests") == 0)
    24.1 --- a/test/src/TestDriver.cc	Thu May 24 11:06:17 2018 +0200
    24.2 +++ b/test/src/TestDriver.cc	Thu Jun 07 09:05:46 2018 +0200
    24.3 @@ -16,57 +16,27 @@
    24.4  
    24.5  using namespace std;
    24.6  
    24.7 -string common_test_home = "./pEp_test_home";
    24.8 +string common_test_home;
    24.9  
   24.10  void usage() {
   24.11      throw std::runtime_error("Bad usage. Fix me, you loser developer.");
   24.12  }
   24.13  
   24.14 -int util_delete_filepath(const char *filepath, 
   24.15 -                         const struct stat *file_stat, 
   24.16 -                         int ftw_info, 
   24.17 -                         struct FTW * ftw_struct) {
   24.18 -    int retval = 0;
   24.19 -    switch (ftw_info) {
   24.20 -        case FTW_DP:
   24.21 -            retval = rmdir(filepath);
   24.22 -            break;
   24.23 -        case FTW_F:
   24.24 -        case FTW_SLN:
   24.25 -            retval = unlink(filepath);
   24.26 -            break;    
   24.27 -        default:
   24.28 -            retval = -1;
   24.29 -    }
   24.30 -    
   24.31 -    return retval;
   24.32 -}
   24.33 -
   24.34 -
   24.35  int main(int argc, const char** argv) {
   24.36      const int MIN_ARGC = 1;
   24.37      if (argc < MIN_ARGC)
   24.38          usage();
   24.39      
   24.40 -    struct stat dirchk;
   24.41 -    if (stat(common_test_home.c_str(), &dirchk) == 0) {
   24.42 -        if (!S_ISDIR(dirchk.st_mode))
   24.43 -            throw std::runtime_error(("The test directory, " + common_test_home + "exists, but is not a directory.").c_str()); 
   24.44 -                    
   24.45 -        struct stat buf;
   24.46 +    size_t BUF_MAX_PATHLEN = 4097; 
   24.47 +    char buf[BUF_MAX_PATHLEN];// Linux max path size...
   24.48 +                          
   24.49 +    string curr_wd = getcwd(buf, BUF_MAX_PATHLEN);
   24.50 +    
   24.51 +    if (curr_wd.empty())
   24.52 +        throw std::runtime_error("Error grabbing current working directory"); 
   24.53  
   24.54 -        if (stat(common_test_home.c_str(), &buf) == 0) {
   24.55 -            cout << common_test_home << " exists. We'll recursively delete. We hope we're not horking your whole system..." << endl;
   24.56 -            int success = nftw((common_test_home + "/.").c_str(), util_delete_filepath, 100, FTW_DEPTH);
   24.57 -        }
   24.58 -    }
   24.59 -    else {
   24.60 -        int errchk = mkdir(common_test_home.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
   24.61 -        cout << errchk << endl;
   24.62 -        if (errchk != 0)
   24.63 -            throw std::runtime_error("Error creating a test directory.");
   24.64 -    }
   24.65 -                    
   24.66 +    common_test_home = curr_wd + "/pEp_test_home";    
   24.67 +    
   24.68      EngineTestSuite* test_runner = new EngineTestSuite("MainTestDriver", common_test_home);
   24.69  
   24.70      std::vector<Test::Suite*> suites_to_run;
    25.1 --- a/test/src/engine_tests/AppleMailTests.cc	Thu May 24 11:06:17 2018 +0200
    25.2 +++ b/test/src/engine_tests/AppleMailTests.cc	Thu Jun 07 09:05:46 2018 +0200
    25.3 @@ -27,7 +27,8 @@
    25.4  
    25.5  AppleMailTests::AppleMailTests(string suitename, string test_home_dir) : 
    25.6      EngineTestSessionSuite::EngineTestSessionSuite(suitename, test_home_dir) {            
    25.7 -    TEST_ADD(AppleMailTests::check_apple_mail);
    25.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("AppleMailTests::check_apple_mail"),
    25.9 +                                                                      static_cast<Func>(&AppleMailTests::check_apple_mail)));
   25.10  }
   25.11  
   25.12  void AppleMailTests::check_apple_mail() {
    26.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.2 +++ b/test/src/engine_tests/BCCTests.cc	Thu Jun 07 09:05:46 2018 +0200
    26.3 @@ -0,0 +1,67 @@
    26.4 +// This file is under GNU General Public License 3.0
    26.5 +// see LICENSE.txt
    26.6 +
    26.7 +#include <stdlib.h>
    26.8 +#include <string>
    26.9 +#include <cstring>
   26.10 +#include <assert.h>
   26.11 +
   26.12 +#include "pEpEngine.h"
   26.13 +#include "message_api.h"
   26.14 +
   26.15 +#include <cpptest.h>
   26.16 +#include "test_util.h"
   26.17 +#include "EngineTestIndividualSuite.h"
   26.18 +#include "BCCTests.h"
   26.19 +
   26.20 +using namespace std;
   26.21 +
   26.22 +BCCTests::BCCTests(string suitename, string test_home_dir) :
   26.23 +    EngineTestIndividualSuite::EngineTestIndividualSuite(suitename, test_home_dir) {
   26.24 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("BCCTests::check_single_BCC"),
   26.25 +                                                                      static_cast<Func>(&BCCTests::check_single_BCC)));
   26.26 +}
   26.27 +
   26.28 +void BCCTests::setup() {
   26.29 +    EngineTestIndividualSuite::setup();
   26.30 +    string keystr = slurp("test_keys/priv/bcc_test_dude_0-0x1CCCFC41_priv.asc");
   26.31 +    PEP_STATUS status = import_key(session, keystr.c_str(), keystr.size(), NULL);
   26.32 +    assert(status == PEP_STATUS_OK);    
   26.33 +    pEp_identity * me = new_identity("bcc_test_dude_0@darthmama.cool", "0AE9AA3E320595CF93296BDFA155AC491CCCFC41", PEP_OWN_USERID, "BCC Test Sender");    
   26.34 +    status = set_own_key(session, me, "0AE9AA3E320595CF93296BDFA155AC491CCCFC41");
   26.35 +    keystr = slurp("test_keys/pub/bcc_test_dude_0-0x1CCCFC41_pub.asc");
   26.36 +    status = import_key(session, keystr.c_str(), keystr.size(), NULL);
   26.37 +    assert(status == PEP_STATUS_OK);
   26.38 +    keystr = slurp("test_keys/pub/bcc_test_dude_1-0xDAC746BE_pub.asc");
   26.39 +    status = import_key(session, keystr.c_str(), keystr.size(), NULL);
   26.40 +    assert(status == PEP_STATUS_OK);
   26.41 +    keystr = slurp("test_keys/pub/bcc_test_dude_2-0x53CECCF7_pub.asc");
   26.42 +    status = import_key(session, keystr.c_str(), keystr.size(), NULL);
   26.43 +    assert(status == PEP_STATUS_OK);    
   26.44 +}
   26.45 +
   26.46 +void BCCTests::check_single_BCC() {
   26.47 +    PEP_STATUS status = PEP_UNKNOWN_ERROR;
   26.48 +    
   26.49 +    // 0AE9AA3E320595CF93296BDFA155AC491CCCFC41
   26.50 +    // D0AF2F9695E186A8DC058B935FE2793DDAC746BE
   26.51 +    // B36E468E7A381946FCDBDDFA84B1F3E853CECCF7
   26.52 +    pEp_identity* sender = new_identity("bcc_test_dude_0@darthmama.cool", NULL, PEP_OWN_USERID, "BCC Test Sender");
   26.53 +    pEp_identity* open_recip = new_identity("bcc_test_dude_1@darthmama.cool", NULL, NULL, "BCC Test Recip");
   26.54 +    pEp_identity* bcc_recip = new_identity("bcc_test_dude_2@darthmama.cool", NULL, NULL, "BCC Super Sekrit Test Recip");
   26.55 +    
   26.56 +    message *msg = new_message(PEP_dir_outgoing);
   26.57 +    TEST_ASSERT_MSG((msg), "msg");
   26.58 +    msg->from = sender;
   26.59 +//    msg->to = new_identity_list(open_recip); FYI, this is supposed to fail for now. Unfortunately.
   26.60 +    msg->bcc = new_identity_list(bcc_recip);
   26.61 +    msg->shortmsg = strdup("Hello, world");
   26.62 +    msg->longmsg = strdup("Your mother was a hamster and your father smelt of elderberries.");
   26.63 +    msg->attachments = new_bloblist(NULL, 0, "application/octet-stream", NULL);
   26.64 +
   26.65 +    message *enc_msg = nullptr;
   26.66 +    status = encrypt_message(session, msg, NULL, &enc_msg, PEP_enc_PGP_MIME, 0);
   26.67 +
   26.68 +    TEST_ASSERT(status == PEP_STATUS_OK);
   26.69 +}
   26.70 +
    27.1 --- a/test/src/engine_tests/CaseAndDotAddressTests.cc	Thu May 24 11:06:17 2018 +0200
    27.2 +++ b/test/src/engine_tests/CaseAndDotAddressTests.cc	Thu Jun 07 09:05:46 2018 +0200
    27.3 @@ -19,7 +19,8 @@
    27.4  
    27.5  CaseAndDotAddressTests::CaseAndDotAddressTests(string suitename, string test_home_dir) : 
    27.6      EngineTestSessionSuite::EngineTestSessionSuite(suitename, test_home_dir) {            
    27.7 -    TEST_ADD(CaseAndDotAddressTests::check_case_and_dot_address);
    27.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("CaseAndDotAddressTests::check_case_and_dot_address"),
    27.9 +                                                                      static_cast<Func>(&CaseAndDotAddressTests::check_case_and_dot_address)));
   27.10  }
   27.11  
   27.12  void CaseAndDotAddressTests::check_case_and_dot_address() {
    28.1 --- a/test/src/engine_tests/CrashdumpTests.cc	Thu May 24 11:06:17 2018 +0200
    28.2 +++ b/test/src/engine_tests/CrashdumpTests.cc	Thu Jun 07 09:05:46 2018 +0200
    28.3 @@ -13,7 +13,8 @@
    28.4  
    28.5  CrashdumpTests::CrashdumpTests(string suitename, string test_home_dir) :
    28.6      EngineTestSessionSuite::EngineTestSessionSuite(suitename, test_home_dir) {
    28.7 -    TEST_ADD(CrashdumpTests::check_crashdump);
    28.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("CrashdumpTests::check_crashdump"),
    28.9 +                                                                      static_cast<Func>(&CrashdumpTests::check_crashdump)));
   28.10  }
   28.11  
   28.12  void CrashdumpTests::check_crashdump() {
    29.1 --- a/test/src/engine_tests/EncryptMissingPrivateKeyTests.cc	Thu May 24 11:06:17 2018 +0200
    29.2 +++ b/test/src/engine_tests/EncryptMissingPrivateKeyTests.cc	Thu Jun 07 09:05:46 2018 +0200
    29.3 @@ -6,6 +6,7 @@
    29.4  #include <fstream>
    29.5  #include <string>
    29.6  #include <cstring> // for strcmp()
    29.7 +#include <assert.h>
    29.8  #include <cpptest.h>
    29.9  
   29.10  #include "blacklist.h"
   29.11 @@ -29,6 +30,13 @@
   29.12                                                                        static_cast<Func>(&EncryptMissingPrivateKeyTests::check_encrypt_missing_private_key)));
   29.13  }
   29.14  
   29.15 +void EncryptMissingPrivateKeyTests::setup() {
   29.16 +    EngineTestSessionSuite::setup();
   29.17 +    string recip_key = slurp("test_keys/pub/pep-test-bob-0xC9C2EE39_pub.asc");
   29.18 +    PEP_STATUS status = import_key(session, recip_key.c_str(), recip_key.size(), NULL);
   29.19 +    assert(status == PEP_STATUS_OK);
   29.20 +}
   29.21 +
   29.22  void EncryptMissingPrivateKeyTests::check_encrypt_missing_private_key() {
   29.23      
   29.24      pEp_identity* no_key_identity = new_identity("blacklistself@kgrothoff.org",
    30.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.2 +++ b/test/src/engine_tests/IntegrityTests.do.not.run.before.ENGINE-434	Thu Jun 07 09:05:46 2018 +0200
    30.3 @@ -0,0 +1,279 @@
    30.4 +// This file is under GNU General Public License 3.0
    30.5 +// see LICENSE.txt
    30.6 +
    30.7 +#include <stdlib.h>
    30.8 +#include <string>
    30.9 +#include <assert.h>
   30.10 +#include <unistd.h>
   30.11 +
   30.12 +#include "pEpEngine.h"
   30.13 +#include "message_api.h"
   30.14 +
   30.15 +#include "test_util.h"
   30.16 +
   30.17 +#include "EngineTestIndividualSuite.h"
   30.18 +#include "IntegrityTests.h"
   30.19 +
   30.20 +using namespace std;
   30.21 +
   30.22 +IntegrityTests::IntegrityTests(string suitename, string test_home_dir) :
   30.23 +    EngineTestIndividualSuite::EngineTestIndividualSuite(suitename, test_home_dir) {
   30.24 +    recip_fpr = "9D8047989841CF4207EA152A4ACAF735F390A40D";
   30.25 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unsigned_PGP_MIME"),
   30.26 +                                                                      static_cast<Func>(&IntegrityTests::check_unsigned_PGP_MIME)));
   30.27 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unsigned_PGP_MIME_attached_key"),
   30.28 +                                                                      static_cast<Func>(&IntegrityTests::check_unsigned_PGP_MIME_attached_key)));
   30.29 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unsigned_PGP_MIME_w_render_flag"),
   30.30 +                                                                      static_cast<Func>(&IntegrityTests::check_unsigned_PGP_MIME_w_render_flag)));
   30.31 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_known_good_signed_PGP_MIME"),
   30.32 +                                                                      static_cast<Func>(&IntegrityTests::check_known_good_signed_PGP_MIME)));
   30.33 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_known_good_signed_PGP_MIME_attached_key"),
   30.34 +                                                                      static_cast<Func>(&IntegrityTests::check_known_good_signed_PGP_MIME_attached_key)));
   30.35 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unknown_signed_PGP_MIME_no_key"),
   30.36 +                                                                      static_cast<Func>(&IntegrityTests::check_unknown_signed_PGP_MIME_no_key)));
   30.37 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unknown_signed_PGP_MIME_attached_key"),
   30.38 +                                                                      static_cast<Func>(&IntegrityTests::check_unknown_signed_PGP_MIME_attached_key)));
   30.39 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unsigned_PGP_MIME_corrupted"),
   30.40 +                                                                      static_cast<Func>(&IntegrityTests::check_unsigned_PGP_MIME_corrupted)));
   30.41 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_signed_PGP_MIME_corrupted"),
   30.42 +                                                                      static_cast<Func>(&IntegrityTests::check_signed_PGP_MIME_corrupted)));
   30.43 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unsigned_2_0"),
   30.44 +                                                                      static_cast<Func>(&IntegrityTests::check_unsigned_2_0)));
   30.45 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unknown_signed_2_0_no_key"),
   30.46 +                                                                      static_cast<Func>(&IntegrityTests::check_unknown_signed_2_0_no_key)));
   30.47 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unknown_signed_2_0_no_key_known_signer"),
   30.48 +                                                                      static_cast<Func>(&IntegrityTests::check_unknown_signed_2_0_no_key_known_signer)));                                                                                                                                        
   30.49 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_unknown_signed_2_0_key_attached"),
   30.50 +                                                                      static_cast<Func>(&IntegrityTests::check_unknown_signed_2_0_key_attached)));  
   30.51 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("IntegrityTests::check_integrity"),
   30.52 +                                                                      static_cast<Func>(&IntegrityTests::check_integrity)));
   30.53 +}
   30.54 +
   30.55 +void IntegrityTests::setup() {
   30.56 +    EngineTestIndividualSuite::setup();
   30.57 +    string recip_key = slurp("test_keys/pub/integrity_test_recip_0-0xF390A40D_pub.asc");
   30.58 +    PEP_STATUS status = import_key(session, recip_key.c_str(), recip_key.size(), NULL);
   30.59 +    assert(status == PEP_STATUS_OK);
   30.60 +    recip_key = "";
   30.61 +    string priv_key = slurp("test_keys/priv/integrity_test_recip_0-0xF390A40D_priv.asc");
   30.62 +    // cout << priv_key << endl;
   30.63 +    // cout << "GNUPGHOME is " << getenv("GNUPGHOME") << endl;
   30.64 +    status = import_key(session, priv_key.c_str(), priv_key.size(), NULL);
   30.65 +    assert(status == PEP_STATUS_OK);
   30.66 +    // stringlist_t* debug_keylist = NULL;
   30.67 +    // status = find_private_keys(session, recip_fpr, &debug_keylist);
   30.68 +    // assert(debug_keylist);
   30.69 +    
   30.70 +    pEp_identity* me = new_identity("integrity_test_recip@darthmama.org", recip_fpr, PEP_OWN_USERID, "Integrity Test Recipient");
   30.71 +    assert(me != NULL);
   30.72 +    status = set_own_key(session, me, recip_fpr);
   30.73 +    assert(status == PEP_STATUS_OK);
   30.74 +
   30.75 +    message = "";
   30.76 +    decrypted_msg = NULL;
   30.77 +    decrypt_status = PEP_STATUS_OK;
   30.78 +    rating = PEP_rating_undefined;
   30.79 +    flags = 0;
   30.80 +    keylist = NULL;
   30.81 +    dummy_ignore = NULL;
   30.82 +}
   30.83 +
   30.84 +void IntegrityTests::tear_down() {
   30.85 +    free_stringlist(keylist);
   30.86 +    free(decrypted_msg);
   30.87 +    EngineTestIndividualSuite::tear_down();
   30.88 +}
   30.89 +
   30.90 +/*
   30.91 +Type            Error State             Render              Status Code
   30.92 +---------------------------------------------------------------------------------------------------------------
   30.93 +inline          ALL                     Yes, if present     Whatever GPG gives us
   30.94 +PGP/MIME        Unsigned                No                  DECRYPTED_BUT_UNSIGNED (grey)
   30.95 +                Signed, no key          Yes                 NO_KEY_FOR_SIGNER
   30.96 +                Bad sig                 No                  SIGNATURE_DOES_NOT_MATCH
   30.97 +Message 1.0     Unsigned                No                  MODIFICATION_DETECTED
   30.98 +                Signed, no key          No                  MODIFICATION_DETECTED
   30.99 +                Bad sig                 No                  SIGNATURE_DOES_NOT_MATCH
  30.100 +Message 2.0     Unsigned                No                  MODIFICATION_DETECTED (red)
  30.101 +                Signed, no key          No                  MODIFICATION_DETECTED  (red)
  30.102 +                Bad sig                 No                  SIGNATURE_DOES_NOT_MATCH
  30.103 +
  30.104 +*/
  30.105 +
  30.106 +void IntegrityTests::check_known_good_signed_PGP_MIME() {
  30.107 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Signed no attach PGP_MIME.eml", message,
  30.108 +                                             "test_keys/pub/integrity_test_signer_0-0xFF26631A_pub.asc"));
  30.109 +
  30.110 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  30.111 +                                          &rating, &flags, &dummy_ignore);
  30.112 +
  30.113 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_STATUS_OK", tl_status_string(decrypt_status));
  30.114 +    TEST_ASSERT_MSG(decrypt_status == PEP_STATUS_OK, failed_msg_buf);
  30.115 +    TEST_ASSERT(decrypted_msg != NULL);
  30.116 +    TEST_ASSERT(rating == PEP_rating_reliable);
  30.117 +}
  30.118 +
  30.119 +void IntegrityTests::check_known_good_signed_PGP_MIME_attached_key() {
  30.120 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Signed attached key PGP_MIME.eml", message,
  30.121 +                                             NULL));
  30.122 +
  30.123 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  30.124 +                                          &rating, &flags, &dummy_ignore);
  30.125 +
  30.126 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_STATUS_OK", tl_status_string(decrypt_status));
  30.127 +    TEST_ASSERT_MSG(decrypt_status == PEP_STATUS_OK, failed_msg_buf);
  30.128 +    TEST_ASSERT(decrypted_msg != NULL);
  30.129 +    TEST_ASSERT(rating == PEP_rating_reliable);
  30.130 +}
  30.131 +
  30.132 +void IntegrityTests::check_unsigned_PGP_MIME() {
  30.133 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Unsigned from PGP_MIME_noattach.eml", message,
  30.134 +                                             "test_keys/pub/integrity_test_signer_0-0xFF26631A_pub.asc"));
  30.135 +
  30.136 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  30.137 +                                          &rating, &flags, &dummy_ignore);
  30.138 +
  30.139 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_DECRYPTED_BUT_UNSIGNED", tl_status_string(decrypt_status));
  30.140 +    TEST_ASSERT_MSG(decrypt_status == PEP_DECRYPTED_BUT_UNSIGNED, failed_msg_buf);
  30.141 +    TEST_ASSERT(decrypted_msg == NULL);
  30.142 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Rating == %s, should be PEP_rating_unreliable", tl_rating_string(rating));
  30.143 +    TEST_ASSERT_MSG(rating == PEP_rating_unreliable, failed_msg_buf);
  30.144 +}
  30.145 +
  30.146 +void IntegrityTests::check_unsigned_PGP_MIME_attached_key() {
  30.147 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Unsigned from PGP_MIME_attach.eml", message,
  30.148 +                                             NULL));
  30.149 +
  30.150 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  30.151 +                                          &rating, &flags, &dummy_ignore);
  30.152 +
  30.153 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_DECRYPTED_BUT_UNSIGNED", tl_status_string(decrypt_status));
  30.154 +    TEST_ASSERT_MSG(decrypt_status == PEP_DECRYPTED_BUT_UNSIGNED, failed_msg_buf);
  30.155 +    TEST_ASSERT(decrypted_msg == NULL);
  30.156 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Rating == %s, should be PEP_rating_unreliable", tl_rating_string(rating));
  30.157 +    TEST_ASSERT_MSG(rating == PEP_rating_unreliable, failed_msg_buf);
  30.158 +}
  30.159 +
  30.160 +void IntegrityTests::check_unsigned_PGP_MIME_w_render_flag() {
  30.161 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Unsigned from PGP_MIME_noattach.eml", message,
  30.162 +                                             "test_keys/pub/integrity_test_signer_0-0xFF26631A_pub.asc"));
  30.163 +    flags |= PEP_decrypt_deliver_pgpmime_badsigned;
  30.164 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  30.165 +                                          &rating, &flags, &dummy_ignore);
  30.166 +
  30.167 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_DECRYPTED_BUT_UNSIGNED", tl_status_string(decrypt_status));
  30.168 +    TEST_ASSERT_MSG(decrypt_status == PEP_DECRYPTED_BUT_UNSIGNED, failed_msg_buf);
  30.169 +    TEST_ASSERT(decrypted_msg != NULL);
  30.170 +    TEST_ASSERT(rating == PEP_rating_unreliable);
  30.171 +}
  30.172 +
  30.173 +
  30.174 +void IntegrityTests::check_unknown_signed_PGP_MIME_no_key() {
  30.175 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Signed PGP_MIME by unknown signer no attach.eml", message,
  30.176 +                                             NULL));
  30.177 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  30.178 +                                          &rating, &flags, &dummy_ignore);
  30.179 +
  30.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));
  30.181 +    TEST_ASSERT_MSG(decrypt_status == PEP_DECRYPT_NO_KEY_FOR_SIGNER, failed_msg_buf);
  30.182 +    TEST_ASSERT(decrypted_msg != NULL);
  30.183 +    TEST_ASSERT(rating == PEP_rating_unreliable);
  30.184 +}
  30.185 +
  30.186 +void IntegrityTests::check_unknown_signed_PGP_MIME_attached_key() {
  30.187 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Signed PGP_MIME by unknown signer attach.eml", message,
  30.188 +                                             NULL));
  30.189 +
  30.190 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  30.191 +                                          &rating, &flags, &dummy_ignore);
  30.192 +
  30.193 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_STATUS_OK", tl_status_string(decrypt_status));
  30.194 +    TEST_ASSERT_MSG(decrypt_status == PEP_STATUS_OK, failed_msg_buf);
  30.195 +    TEST_ASSERT(decrypted_msg != NULL);
  30.196 +    TEST_ASSERT(rating == PEP_rating_reliable);
  30.197 +}
  30.198 +
  30.199 +// FIXME: we need cleverer attacked mails
  30.200 +void IntegrityTests::check_unsigned_PGP_MIME_corrupted() {
  30.201 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Unsigned from PGP_MIME_attach_corrupted.eml", message,
  30.202 +                                             NULL));
  30.203 +
  30.204 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  30.205 +                                          &rating, &flags, &dummy_ignore);
  30.206 +
  30.207 +//    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_STATUS_OK", tl_status_string(decrypt_status));
  30.208 +//    TEST_ASSERT_MSG(decrypt_status == PEP_STATUS_OK, failed_msg_buf);
  30.209 +    TEST_ASSERT(decrypt_status != PEP_STATUS_OK && decrypt_status != PEP_DECRYPTED);
  30.210 +    TEST_ASSERT(decrypted_msg == NULL);
  30.211 +}
  30.212 +
  30.213 +void IntegrityTests::check_signed_PGP_MIME_corrupted() {
  30.214 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/Signed attached key PGP_MIME_corrupted.eml", message,
  30.215 +                                             NULL));
  30.216 +
  30.217 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  30.218 +                                          &rating, &flags, &dummy_ignore);
  30.219 +
  30.220 +//    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_STATUS_OK", tl_status_string(decrypt_status));
  30.221 +//    TEST_ASSERT_MSG(decrypt_status == PEP_STATUS_OK, failed_msg_buf);
  30.222 +    TEST_ASSERT(decrypt_status != PEP_STATUS_OK && decrypt_status != PEP_DECRYPTED);
  30.223 +    TEST_ASSERT(decrypted_msg == NULL);
  30.224 +}
  30.225 +
  30.226 +void IntegrityTests::check_unsigned_2_0() {
  30.227 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/fake_2.0_unsigned.eml", message,
  30.228 +                                             NULL));
  30.229 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  30.230 +                                          &rating, &flags, &dummy_ignore);
  30.231 +
  30.232 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_DECRYPT_MODIFICATION_DETECTED", tl_status_string(decrypt_status));
  30.233 +    TEST_ASSERT_MSG(decrypt_status == PEP_DECRYPT_MODIFICATION_DETECTED, failed_msg_buf);
  30.234 +    TEST_ASSERT(decrypted_msg == NULL);
  30.235 +    TEST_ASSERT(rating == PEP_rating_under_attack);
  30.236 +}
  30.237 +
  30.238 +void IntegrityTests::check_unknown_signed_2_0_no_key() {
  30.239 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/fake_2.0_signed_no_key_attached.eml", message,
  30.240 +                                             NULL));
  30.241 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  30.242 +                                          &rating, &flags, &dummy_ignore);
  30.243 +
  30.244 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_DECRYPT_MODIFICATION_DETECTED", tl_status_string(decrypt_status));
  30.245 +    TEST_ASSERT_MSG(decrypt_status == PEP_DECRYPT_MODIFICATION_DETECTED, failed_msg_buf);
  30.246 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypted msg should have been NULL, but starts with %s", decrypted_msg);
  30.247 +    TEST_ASSERT_MSG(decrypted_msg == NULL, failed_msg_buf);
  30.248 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Rating == %s, should be PEP_rating_under_attack", tl_rating_string(rating));
  30.249 +    TEST_ASSERT_MSG(rating == PEP_rating_under_attack, failed_msg_buf);
  30.250 +}
  30.251 +
  30.252 +void IntegrityTests::check_unknown_signed_2_0_no_key_known_signer() {
  30.253 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/fake_2.0_signed_no_key_attached.eml", message,
  30.254 +                                             "test_keys/pub/integrity_test_signer_0-0xFF26631A_pub.asc"));
  30.255 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  30.256 +                                          &rating, &flags, &dummy_ignore);
  30.257 +
  30.258 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_DECRYPT_MODIFICATION_DETECTED", tl_status_string(decrypt_status));
  30.259 +    TEST_ASSERT_MSG(decrypt_status == PEP_DECRYPT_MODIFICATION_DETECTED, failed_msg_buf);
  30.260 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypted msg should have been NULL, but starts with %s", decrypted_msg);
  30.261 +    TEST_ASSERT_MSG(decrypted_msg == NULL, failed_msg_buf);
  30.262 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Rating == %s, should be PEP_rating_under_attack", tl_rating_string(rating));
  30.263 +    TEST_ASSERT_MSG(rating == PEP_rating_under_attack, failed_msg_buf);
  30.264 +}
  30.265 +
  30.266 +
  30.267 +void IntegrityTests::check_unknown_signed_2_0_key_attached() {
  30.268 +    TEST_ASSERT(slurp_message_and_import_key(session, "test_mails/fake_2.0_good.eml", message,
  30.269 +                                             NULL));
  30.270 +    decrypt_status = MIME_decrypt_message(session, message.c_str(), message.size(), &decrypted_msg, &keylist,
  30.271 +                                          &rating, &flags, &dummy_ignore);
  30.272 +
  30.273 +    snprintf(failed_msg_buf, TEST_FAILED_MESSAGE_BUFSIZE, "Decrypt status == %s, should be PEP_STATUS_OK", tl_status_string(decrypt_status));
  30.274 +    TEST_ASSERT_MSG(decrypt_status == PEP_STATUS_OK, failed_msg_buf);
  30.275 +    TEST_ASSERT(decrypted_msg != NULL);
  30.276 +    TEST_ASSERT(rating == PEP_rating_reliable);
  30.277 +}
  30.278 +
  30.279 +
  30.280 +void IntegrityTests::check_integrity() {
  30.281 +    TEST_ASSERT(true);
  30.282 +}
    31.1 --- a/test/src/engine_tests/MimeTests.cc	Thu May 24 11:06:17 2018 +0200
    31.2 +++ b/test/src/engine_tests/MimeTests.cc	Thu Jun 07 09:05:46 2018 +0200
    31.3 @@ -69,18 +69,6 @@
    31.4  
    31.5  void MimeTests::check_mime() {
    31.6  
    31.7 -    cout << "\n*** mime_test ***\n\n";
    31.8 -
    31.9 -    PEP_SESSION session;
   31.10 -    
   31.11 -    cout << "calling init()\n";
   31.12 -    PEP_STATUS status1 = init(&session);   
   31.13 -    TEST_ASSERT_MSG((status1 == PEP_STATUS_OK), "status1 == PEP_STATUS_OK");
   31.14 -    TEST_ASSERT_MSG((session), "session");
   31.15 -    cout << "init() completed.\n";
   31.16 -
   31.17 -    // mime test code
   31.18 -
   31.19      // testing multipart/alternative
   31.20  
   31.21      message *msg2 = new_message(PEP_dir_incoming);
    32.1 --- a/test/src/engine_tests/PepSubjectReceivedTests.cc	Thu May 24 11:06:17 2018 +0200
    32.2 +++ b/test/src/engine_tests/PepSubjectReceivedTests.cc	Thu Jun 07 09:05:46 2018 +0200
    32.3 @@ -64,6 +64,7 @@
    32.4      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
    32.5      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
    32.6      final_ptr = msg_ptr;
    32.7 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
    32.8      flags = 0;
    32.9      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   32.10      final_ptr = dest_msg ? dest_msg : msg_ptr;
   32.11 @@ -97,6 +98,7 @@
   32.12      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   32.13      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   32.14      final_ptr = msg_ptr;
   32.15 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   32.16      flags = 0;
   32.17      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   32.18      final_ptr = dest_msg ? dest_msg : msg_ptr;
   32.19 @@ -197,6 +199,7 @@
   32.20      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   32.21      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   32.22      final_ptr = msg_ptr;
   32.23 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   32.24      flags = 0;
   32.25      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   32.26      final_ptr = dest_msg ? dest_msg : msg_ptr;
   32.27 @@ -230,6 +233,7 @@
   32.28      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   32.29      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   32.30      final_ptr = msg_ptr;
   32.31 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   32.32      flags = 0;
   32.33      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   32.34      final_ptr = dest_msg ? dest_msg : msg_ptr;
   32.35 @@ -238,7 +242,7 @@
   32.36      cout << "longmsg: " << final_ptr->longmsg << endl << endl;
   32.37      cout << "longmsg_formatted: " << (final_ptr->longmsg_formatted ? final_ptr->longmsg_formatted : "(empty)") << endl << endl;
   32.38  
   32.39 -    TEST_ASSERT_MSG((strcmp("p≡p", final_ptr->shortmsg) == 0), "strcmp(\"p≡p\", final_ptr->shortmsg) == 0");
   32.40 +    TEST_ASSERT_MSG((strcmp("pEp", final_ptr->shortmsg) == 0), "strcmp(\"pEp\", final_ptr->shortmsg) == 0");
   32.41  
   32.42      cout << "Test 3: Subject remains intact as desired." << endl << endl;
   32.43  
   32.44 @@ -264,6 +268,7 @@
   32.45      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   32.46      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   32.47      final_ptr = msg_ptr;
   32.48 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   32.49      flags = 0;
   32.50      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   32.51      final_ptr = dest_msg ? dest_msg : msg_ptr;
   32.52 @@ -297,6 +302,7 @@
   32.53      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   32.54      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   32.55      final_ptr = msg_ptr;
   32.56 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   32.57      flags = 0;
   32.58      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   32.59      final_ptr = dest_msg ? dest_msg : msg_ptr;
   32.60 @@ -330,6 +336,7 @@
   32.61      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   32.62      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   32.63      final_ptr = msg_ptr;
   32.64 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   32.65      flags = 0;
   32.66      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   32.67      final_ptr = dest_msg ? dest_msg : msg_ptr;
   32.68 @@ -363,6 +370,7 @@
   32.69      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   32.70      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   32.71      final_ptr = msg_ptr;
   32.72 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   32.73      flags = 0;
   32.74      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   32.75      final_ptr = dest_msg ? dest_msg : msg_ptr;
   32.76 @@ -397,6 +405,7 @@
   32.77      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   32.78      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   32.79      final_ptr = msg_ptr;
   32.80 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   32.81      flags = 0;
   32.82      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   32.83      final_ptr = dest_msg ? dest_msg : msg_ptr;
   32.84 @@ -431,6 +440,7 @@
   32.85      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   32.86      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   32.87      final_ptr = msg_ptr;
   32.88 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   32.89      flags = 0;
   32.90      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   32.91      final_ptr = dest_msg ? dest_msg : msg_ptr;
   32.92 @@ -464,6 +474,7 @@
   32.93      TEST_ASSERT_MSG((status == PEP_STATUS_OK), "status == PEP_STATUS_OK");
   32.94      TEST_ASSERT_MSG((msg_ptr), "msg_ptr");
   32.95      final_ptr = msg_ptr;
   32.96 +    //flags = PEP_decrypt_deliver_pgpmime_badsigned; // We created this test before deciding not to display unsigned messages
   32.97      flags = 0;
   32.98      status = decrypt_message(session, msg_ptr, &dest_msg, &keylist, &rating, &flags);
   32.99      final_ptr = dest_msg ? dest_msg : msg_ptr;
    33.1 --- a/test/src/engine_tests/RevokeRegenAttachTests.cc	Thu May 24 11:06:17 2018 +0200
    33.2 +++ b/test/src/engine_tests/RevokeRegenAttachTests.cc	Thu Jun 07 09:05:46 2018 +0200
    33.3 @@ -7,13 +7,16 @@
    33.4  #include <time.h>
    33.5  #include <iostream>
    33.6  #include <fstream>
    33.7 +#include <assert.h>
    33.8  
    33.9  #include "pEpEngine.h"
   33.10  #include "platform.h"
   33.11  #include "mime.h"
   33.12  #include "message_api.h"
   33.13  
   33.14 -#include "cpptest.h"
   33.15 +#include "test_util.h"
   33.16 +
   33.17 +#include <cpptest.h>
   33.18  #include "EngineTestSessionSuite.h"
   33.19  #include "RevokeRegenAttachTests.h"
   33.20  
   33.21 @@ -25,6 +28,14 @@
   33.22                                                                        static_cast<Func>(&RevokeRegenAttachTests::check_revoke_regen_attach)));
   33.23  }
   33.24  
   33.25 +void RevokeRegenAttachTests::setup() {
   33.26 +    EngineTestSessionSuite::setup();
   33.27 +    string recip_key = slurp("test_keys/pub/pep-test-alice-0x6FF00E97_pub.asc");
   33.28 +    PEP_STATUS status = import_key(session, recip_key.c_str(), recip_key.size(), NULL);
   33.29 +    assert(status == PEP_STATUS_OK);
   33.30 +}
   33.31 +
   33.32 +
   33.33  void RevokeRegenAttachTests::check_revoke_regen_attach() {
   33.34      PEP_STATUS status = PEP_STATUS_OK;   
   33.35  
    34.1 --- a/test/src/engine_tests/SequenceTests.cc	Thu May 24 11:06:17 2018 +0200
    34.2 +++ b/test/src/engine_tests/SequenceTests.cc	Thu Jun 07 09:05:46 2018 +0200
    34.3 @@ -15,7 +15,8 @@
    34.4  
    34.5  SequenceTests::SequenceTests(string suitename, string test_home_dir) : 
    34.6      EngineTestSessionSuite::EngineTestSessionSuite(suitename, test_home_dir) {            
    34.7 -    TEST_ADD(SequenceTests::check_sequences);
    34.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SequenceTests::check_sequences"),
    34.9 +                                                                      static_cast<Func>(&SequenceTests::check_sequences)));
   34.10  }
   34.11  
   34.12  void SequenceTests::check_sequences() {
    35.1 --- a/test/src/engine_tests/StringlistTests.cc	Thu May 24 11:06:17 2018 +0200
    35.2 +++ b/test/src/engine_tests/StringlistTests.cc	Thu Jun 07 09:05:46 2018 +0200
    35.3 @@ -16,7 +16,8 @@
    35.4  
    35.5  StringlistTests::StringlistTests(string suitename, string test_home_dir) : 
    35.6      EngineTestSuite::EngineTestSuite(suitename, test_home_dir) {            
    35.7 -    TEST_ADD(StringlistTests::check_stringlists);
    35.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("StringlistTests::check_stringlists"),
    35.9 +                                                                      static_cast<Func>(&StringlistTests::check_stringlists)));
   35.10  }
   35.11  
   35.12  void StringlistTests::check_stringlists() {
    36.1 --- a/test/src/engine_tests/StringpairListTests.cc	Thu May 24 11:06:17 2018 +0200
    36.2 +++ b/test/src/engine_tests/StringpairListTests.cc	Thu Jun 07 09:05:46 2018 +0200
    36.3 @@ -17,7 +17,8 @@
    36.4  
    36.5  StringpairListTests::StringpairListTests(string suitename, string test_home_dir) : 
    36.6      EngineTestSuite::EngineTestSuite(suitename, test_home_dir) {            
    36.7 -    TEST_ADD(StringpairListTests::check_stringpair_lists);
    36.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("StringpairListTests::check_stringpair_lists"),
    36.9 +                                                                      static_cast<Func>(&StringpairListTests::check_stringpair_lists)));
   36.10  }
   36.11  
   36.12  bool StringpairListTests::test_stringpair_equals(stringpair_t* val1, stringpair_t* val2) {
    37.1 --- a/test/src/engine_tests/TrustManipulationTests.cc	Thu May 24 11:06:17 2018 +0200
    37.2 +++ b/test/src/engine_tests/TrustManipulationTests.cc	Thu Jun 07 09:05:46 2018 +0200
    37.3 @@ -19,7 +19,8 @@
    37.4  
    37.5  TrustManipulationTests::TrustManipulationTests(string suitename, string test_home_dir) : 
    37.6      EngineTestSessionSuite::EngineTestSessionSuite(suitename, test_home_dir) {            
    37.7 -    TEST_ADD(TrustManipulationTests::check_trust_manipulation);
    37.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("TrustManipulationTests::check_trust_manipulation"),
    37.9 +                                                                      static_cast<Func>(&TrustManipulationTests::check_trust_manipulation)));
   37.10  }
   37.11  
   37.12  void TrustManipulationTests::check_trust_manipulation() {
    38.1 --- a/test/src/engine_tests/TrustwordsTests.cc	Thu May 24 11:06:17 2018 +0200
    38.2 +++ b/test/src/engine_tests/TrustwordsTests.cc	Thu Jun 07 09:05:46 2018 +0200
    38.3 @@ -14,7 +14,8 @@
    38.4  
    38.5  TrustwordsTests::TrustwordsTests(string suitename, string test_home_dir) : 
    38.6      EngineTestSessionSuite::EngineTestSessionSuite(suitename, test_home_dir) {            
    38.7 -    TEST_ADD(TrustwordsTests::check_trustwords);
    38.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("TrustwordsTests::check_trustwords"),
    38.9 +                                                                      static_cast<Func>(&TrustwordsTests::check_trustwords)));
   38.10  }
   38.11  
   38.12  void TrustwordsTests::check_trustwords() {
    39.1 --- a/test/src/engine_tests/UserIDAliasTests.cc	Thu May 24 11:06:17 2018 +0200
    39.2 +++ b/test/src/engine_tests/UserIDAliasTests.cc	Thu Jun 07 09:05:46 2018 +0200
    39.3 @@ -19,7 +19,8 @@
    39.4  
    39.5  UserIDAliasTests::UserIDAliasTests(string suitename, string test_home_dir) : 
    39.6      EngineTestSessionSuite::EngineTestSessionSuite(suitename, test_home_dir) {            
    39.7 -    TEST_ADD(UserIDAliasTests::check_userid_aliases);
    39.8 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("UserIDAliasTests::check_userid_aliases"),
    39.9 +                                                                      static_cast<Func>(&UserIDAliasTests::check_userid_aliases)));
   39.10  }
   39.11  
   39.12  void UserIDAliasTests::check_userid_aliases() {
    40.1 --- a/test/src/util/test_util.cc	Thu May 24 11:06:17 2018 +0200
    40.2 +++ b/test/src/util/test_util.cc	Thu Jun 07 09:05:46 2018 +0200
    40.3 @@ -2,9 +2,16 @@
    40.4  #include "pEpEngine.h"
    40.5  #include "pEp_internal.h"
    40.6  #include "message_api.h"
    40.7 +
    40.8  #include <fstream>
    40.9  #include <sstream>
   40.10  #include <stdexcept>
   40.11 +#include <stdlib.h>
   40.12 +#include <sys/stat.h>
   40.13 +#include <errno.h>
   40.14 +#include <stdlib.h>
   40.15 +#include <unistd.h>
   40.16 +#include <ftw.h>
   40.17  
   40.18  char* str_to_lower(const char* str) {
   40.19      if (!str)
   40.20 @@ -137,6 +144,12 @@
   40.21              return "PEP_DECRYPT_NO_KEY";
   40.22          case PEP_DECRYPT_SIGNATURE_DOES_NOT_MATCH:
   40.23              return "PEP_DECRYPT_SIGNATURE_DOES_NOT_MATCH";
   40.24 +//        case PEP_DECRYPTED_BUT_UNSIGNED:
   40.25 +//            return "PEP_DECRYPTED_BUT_UNSIGNED";
   40.26 +//        case PEP_DECRYPT_MODIFICATION_DETECTED:
   40.27 +//            return "PEP_DECRYPT_MODIFICATION_DETECTED";
   40.28 +//        case PEP_DECRYPT_NO_KEY_FOR_SIGNER:
   40.29 +//            return "PEP_DECRYPT_NO_KEY_FOR_SIGNER";
   40.30          case PEP_VERIFY_NO_KEY:
   40.31              return "PEP_VERIFY_NO_KEY";
   40.32          case PEP_VERIFIED_AND_TRUSTED:
   40.33 @@ -204,7 +217,7 @@
   40.34          case PEP_OUT_OF_MEMORY:
   40.35              return "PEP_OUT_OF_MEMORY";
   40.36          case PEP_UNKNOWN_ERROR:
   40.37 -            return "PEP_UNKNOWN_ERROR";
   40.38 +            return "PEP_UNKNOWN_ERROR";    
   40.39          default:
   40.40   
   40.41              return "PEP_STATUS_OMGWTFBBQ - This means you're using a status the test lib doesn't know about!";
   40.42 @@ -317,3 +330,36 @@
   40.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.";
   40.44      }
   40.45  }
   40.46 +
   40.47 +bool slurp_message_and_import_key(PEP_SESSION session, const char* message_fname, std::string& message, const char* key_filename) {
   40.48 +    message = slurp(message_fname);
   40.49 +    if (key_filename) {
   40.50 +        std::string keyfile = slurp(key_filename);
   40.51 +        if (import_key(session, keyfile.c_str(), keyfile.size(), NULL) != PEP_STATUS_OK)
   40.52 +            return false;
   40.53 +    }
   40.54 +    return true;
   40.55 +}
   40.56 +
   40.57 +
   40.58 +
   40.59 +int util_delete_filepath(const char *filepath, 
   40.60 +                         const struct stat *file_stat, 
   40.61 +                         int ftw_info, 
   40.62 +                         struct FTW * ftw_struct) {
   40.63 +    int retval = 0;
   40.64 +    switch (ftw_info) {
   40.65 +        case FTW_DP:
   40.66 +            retval = rmdir(filepath);
   40.67 +            break;
   40.68 +        case FTW_F:
   40.69 +        case FTW_SLN:
   40.70 +            retval = unlink(filepath);
   40.71 +            break;    
   40.72 +        default:
   40.73 +            retval = -1;
   40.74 +    }
   40.75 +    
   40.76 +    return retval;
   40.77 +}
   40.78 +
    41.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    41.2 +++ b/test/test_keys/priv/bcc_test_dude_0-0x1CCCFC41_priv.asc	Thu Jun 07 09:05:46 2018 +0200
    41.3 @@ -0,0 +1,64 @@
    41.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    41.5 +
    41.6 +lQOYBFsXrp0BCADYI/0kZfPXEtCNjF97pKDT2tke4kJyjL6BuR/eCf/LuvYMYvcr
    41.7 +eTB528zfyUNCnRMHDkUg07ng9lBjUkVM5GiG+TObS7NcSzsBSK2MatCi1hXIKz6e
    41.8 +MrqYBybn1Ef8UnSs8Qt64v4F6m625R3yUDk8G3QpNMyi2ibUEOeU7qLfhdObxoGU
    41.9 ++IwFygPbKpeitWR/Hb5WUBPFF13kAqn3UjmXNGA/FW5oYNSV+ovZuoNXfUlxFKJk
   41.10 +b/MFv6s0MwEf7CAU/GcfEHWgx1jxsVBYDDkRHqkuiUHUTXWJGMthnbvABQFtX5bR
   41.11 +fIzMqCundqZCncAk1DKJWzIxBgHOtpcGncmrABEBAAEAB/wNkvEJHKgG1/p7W+ym
   41.12 +iLfFplG1bqiVUMEpciAODfBfx0Lq6I+KTjxHouYHyzgrUk8JcJF8gXTZK87voJE+
   41.13 +m3z0YRPRyxwdYzzLlK4QNVMbWY5DpHJJys4iJxd/6WUzSQBlLhGLqv7LY1DcW/ZD
   41.14 +VgYfgBU4U0W4woeRZkBiVOcAr5AvuesIWqGQYa8N1UiVfFefGTqcFwpAVxEWNBxJ
   41.15 +rOLcDsUnCMjH71oOBumU6QuGT/G8zW8I60hQoQFjHV7v/1CE8NCDf/6VK1CPE0E+
   41.16 +2GJuzt/tjnG9DBGocyJ/lrHesvwh/0FW11ZE/he0qQG0XkGk+axQh9F8WIlVZKcv
   41.17 +ISvhBADlhjLv1Jnr14/4hLbyz567LqUnDEO2K823wsrU1BEnF1rpV6yGWPo6iDI3
   41.18 +TA6um++vwxbtSxvSY4mBZU5eMO2DVu9StGahnU9W9MjHPg66rIHBAhg/Apbobiti
   41.19 +v6a2rHJrjhit2DiSAHhHsKsnOhvuFy8Ud7lla+RgP7aE3ka9CwQA8RKS87VBx+oa
   41.20 +hhtU3E9V0/c29VBkxTgXtTTe+2nmt0coVHKVZocgEaYj/oXQ39q3d6bjxS+97xES
   41.21 +SLFadWGR4z/mx0qRe4kxOMAe3fSJ1qQj57jFGzD44kO7egYqY2WvH9ncvzDZl5Hq
   41.22 +VFoaVM7Z6fxFkoisHQ77ESh0uvqMyeEEAI93VCKn2wtj0ApCNN4DCRCiP6gtRcIY
   41.23 +nfr8vW8X6VvAHt5R9FnCjxn/3RSKhljgOGgiK0ZJw9opIxvXYx13XOc/NxeujaTI
   41.24 +temiH43+MZh0h7WEedP5UlNDB39QBakSxX9kopI+0d2kkJN07YX7o4aH9LoQUKHg
   41.25 +/1N9Z6sGecPuPle0N0JDQyBUZXN0IFBhcnRpY2lwYW50IDAgPGJjY190ZXN0X2R1
   41.26 +ZGVfMEBkYXJ0aG1hbWEuY29vbD6JAU4EEwEIADgWIQQK6ao+MgWVz5Mpa9+hVaxJ
   41.27 +HMz8QQUCWxeunQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRChVaxJHMz8
   41.28 +QVY2B/9KLgvTenscM2MERB4fJ0WXUY5J8+oeUaXRSq5hx4YfbmIA1GTAEwwW9NwD
   41.29 +FyX6iu0wqNnlheW+zlhdY3Nhsb0OM3MChAgXrteAXtR3bjsS+aq+I/hASLZ7N4L8
   41.30 +JRZKyGtP0g6cSSFSOXgXwCegju8xBHmJsH/sSc9pCCK+wGIDL1mr+C75gPeN77UZ
   41.31 +HOl7Xf7ILZYeSh/V5erNaJ2hZm1PkYKMVxIKtfXB6n6lHAFFJ9MJLloJ+IDWbMzB
   41.32 +rkn8OTxxQtchrG/WQM8VFMSARCPUA+VvBvoJWekBlL4S7TnT9ttdVsHZAPOAA7tt
   41.33 +krZ+8oSZnU33H/PtJcXfrWrmgGJEnQOYBFsXrp0BCACpGtYkycsi5kjvWp2d1ztF
   41.34 +ECPqWgO6csoB5Bv7LJTnoqacwsnsuNXq4OcFvArQfw6AoMDXi4SADpIWHn42yymX
   41.35 +4N1Ba8fKmm2zE7fS0CSFfGh0QiY93Irts9+MQgEFlKcJ5TdrrklqIDBZmZ73Cqk3
   41.36 +cy2B2ZL8dUlG8/zFk06cwGlf2vNcsYU5vYWbnfOLmH1Pzmbd3IoWOxT3Yfjrq3ec
   41.37 +dTB56wY40j/tk2ISGQXs3/5O1qPLJYTDy86lumB9WS35JCjrn50JqM5ipyx6dVGQ
   41.38 +S+N3cjAljhHsTxGsRr1WfruHzfEoS21+O3y8HMlv1P8+Jx7D3mRRh2LZf0Q8yprt
   41.39 +ABEBAAEAB/4l/IkLsQfQcmYCXHrpDML7590FhQxu2t/NbnIpqVFWukcOkkQdSMUG
   41.40 +8tf6hgvw24XEt7eyA51zTbKbxORJxzfz7deN3Vn/RVLspfqGYOq/UJu/N+fSwCK2
   41.41 +NFB8d4w2tnaSZrrdFcTYkdwCmJtot6yc7+LSVy9pRih8h4zpzgYb+FB2H2XxBMMD
   41.42 +s8fuCU6oMnQPG9OIIyn1PYyCVCV/cAASQupGxJGsjcKQkz6KA8fTicYsA41/7mm8
   41.43 +JjQ3nv9yMfIEaY2EaX3tMpL4Vh15cj+jhnlgTrKmQnQv+f8Ez+iXvCcMKxlJQ1CG
   41.44 +gyuWfyP5tOqnjH/5+9tzfjEo656u8lDJBADH7RkRMxQjJOAXR1nERm1RVBoF6ls2
   41.45 +9iUubakoHMbbfKz3IsWN+akyY2PZ08nsGRSYR/Q7HAE84i9VSPJ8ijiBlsG2JLuB
   41.46 +graV2RTePaEBP2/XIsY6WrZgcw7nDXL0smpz88xJtwXzqX/nDbVcT5PsoHPMOiNu
   41.47 +1xGyP2l9Jxao2QQA2Ii8Rji/oo+5NhQCTVp+n2YbY95uLFPHfy/qt5MuyJM/NHAU
   41.48 +tAHNt9yNmOgOog/mD7BMq4LiHtvnfloRltVzT+FhnEx2QzTBhPXV3bgwZrwJQe65
   41.49 +3RME5cKLCBWZ9AHXkaEFDw3mGp1o6zqjz5YlenlNV8FL0RS4tI9yWhDvFjUD/jvU
   41.50 +JOOKpCCUe6qNcXMsb+GuqaZ+IcW9tMwshk+b90u9+sLt0K9iA+H5M8VGEQARooYv
   41.51 +obP7L0lQDeZDnfYJjHlQ+1OSWq75WcyJ+qrB3yaRABpnICcE/rEjKJxLPzBbToyS
   41.52 ++eOUmspMOio8+9RU7/bjqtZlCMe15QaRTB8Rh6taQiiJAmwEGAEIACAWIQQK6ao+
   41.53 +MgWVz5Mpa9+hVaxJHMz8QQUCWxeunQIbLgFACRChVaxJHMz8QcB0IAQZAQgAHRYh
   41.54 +BCjWK3P5Nbis4voQy58GBhMYDIJQBQJbF66dAAoJEJ8GBhMYDIJQiJgIAI1L1RF7
   41.55 +Doep5kYoMP87dl5Kcy7uW0YJ7sIGKIKOC6odBMP5ffwNYFfNQGJDd/9Q3b7aIV6O
   41.56 +kQ8HnCvjjoPb8Ub4mDZ5OqAESIC8q6ThzY1RgugFcp+eR32gzTUzpn+PIkwD9Hu5
   41.57 +T/MxhoEJ1k1ZtNxk6t9+kII5wZ+ZUZwmP0LPSANNMHA2F4oJHTpyN+YHYaf6aWzo
   41.58 +XD4q8JkQ012uHF34rUsVsD7pNEoCNjOu4R6MKOhrLPF7b7NQHgtVvXbZ9qBj/yxE
   41.59 +fEUxOLbqJxAVdUtO0j+u0eB4tuD5qaB0FKQ/fiCvNr8/paA6u3heuaX8Saum8ll2
   41.60 +Xsh84PZThpBhpR8UoQgAzkqKpERMykCuYuk3K0vPqtenL1oG1Ptn4vYlrBzrcoXL
   41.61 +vtVxq4j+7iWBuvvoz3ePQifo+eOZrpe4dQriN+KnA0Qi7VX5YuVPNBYsvpcg9FqP
   41.62 +kTBWO26mkfEiSFOVD4IcCSmo4nveB6EMfJJO5S74+MWSJRaE9EhaV42lmnBP4n7a
   41.63 +BvQ8yrxEqd4LQyCTgJpLAVswWT8cBNwmUuWqKSl6vmZ7mwdWJP2N4qgTnuG0ZCXc
   41.64 +LgXHaySKICo0SpjtcFCTUYMpYGpWTW1VrO0zfqUMGPe0BzmtCYZjgA3bAp6qYtLT
   41.65 +gZZLpwkrO0PIdJo6tZF13FIQU7TYKTVjde50IF5efw==
   41.66 +=IphG
   41.67 +-----END PGP PRIVATE KEY BLOCK-----
    42.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    42.2 +++ b/test/test_keys/priv/bcc_test_dude_1-0xDAC746BE_priv.asc	Thu Jun 07 09:05:46 2018 +0200
    42.3 @@ -0,0 +1,64 @@
    42.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    42.5 +
    42.6 +lQOYBFsXrqcBCACsJqCAgpquWOhW0pxDTpe+OZHyowNewOK2E4xyQk+710YdKIrg
    42.7 +I8j9+l1E4gUgJ+IiP7AIoTo89CcQINSt4Dith1+AjZgVnN4jxC5Jg7oARafALOxm
    42.8 +kF3mcRqA1T/e7TKBlx5MXwz2HPQBDKRekYomiFXPbBAYnSaTzGoVPmLAULf+TgoT
    42.9 +MtXRG59zHmUtV8ZVTttT9tCAWie0pBscQVL1x/D6x3a221JBcfhcrLFMJf0UoWGB
   42.10 +nlBEzrLQNrl3XRYyQJXCN0BpWvyZBPM35KfGifc7zV70Qrz2XGhSv/lpZct5/D8I
   42.11 +L5GclT2b0VFdVBYbiCPZZj6DbHxtXwDBwmf3ABEBAAEAB/4zX9uqPk+3FCVSM8wa
   42.12 +cgvq4vdhN7C7yEhgGflh59QvtJDiBsVbGpLS6LKI6gKpk/1yRxtbl/HvWtWFhKaz
   42.13 +tSR09N9VV+w5FvVcKyG9IqiRiDgFq+JowVCkgsBsDjffaV4XOmf6Vqthj0ZqQcGT
   42.14 +z08xLKKfIhqzncJzfR9zc4i452CUNC3BNMOVN9JQqGAVLhfP7Gqa7aH/344M87Rf
   42.15 +AK9IjEj6PpFhlxhM2dp9xRNt70XMeGm98Bm4FVpaLHvM57UIxtzE4sZ/CDJQ8iOQ
   42.16 +xDwvwXLvTwFBIvgysjSKy+pUK1Ige102rvGN20MkXlodgl8dqnTq5UQQXixp/iab
   42.17 +h0uRBADQrssShenxA8/WRTWdSRKP3XeKvznb6eNBfg0WTbsodgBi9XoT099BAs+m
   42.18 +rRYPMUENKh/wmiKhNh1FQagvvsDWdGx16bDujB26a9YFQm4cF0CW61NpMDF/+Ww5
   42.19 +SwnM7gUZ6vPXQl9k6q/ohWukRcdnb6dfJq/GcRFJjr/4UpW/8wQA0y9NU+RE7jNE
   42.20 +7uV215QVSwSgVTki4e3NShqbtq5CH81aKSyMxPnA9SfiBSUOpWqf/ILjX0gOz83p
   42.21 +z5NWJlRGQNWtufZSY78mrMlpMj8vOQoGt3PsRjykjbogEwGHCaMfD2KdUBtPbOaB
   42.22 +B3/Fvrz3JGwIvEA7SVJVYHhwX/rCfO0D/j0xSIXMMZvTeuLzAY4Ovn9KWbXXMU13
   42.23 +cD5wdzWqwa4kGddodAvzjLLqZY1Kbl0GlWmjZEXJroR8aAUtLIMChbtL5jLr+RZ0
   42.24 +ysmGZOMDtl39aWK24irWFAtjHMCQWR3VOwHa+G0telqdKhXEjcHyqVIolByrMVbc
   42.25 +9Z+KPiy2nwnhOCq0N0JDQyBUZXN0IFBhcnRpY2lwYW50IDEgPGJjY190ZXN0X2R1
   42.26 +ZGVfMUBkYXJ0aG1hbWEuY29vbD6JAU4EEwEIADgWIQTQry+WleGGqNwFi5Nf4nk9
   42.27 +2sdGvgUCWxeupwIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRBf4nk92sdG
   42.28 +vhPfCACH4rdbxWmPyp3KC4SRfX0hs9tDi4IMyp0FKasZZR6TS25B0wPHcn5Ujd2U
   42.29 +78sZUSWFiB3uajBSU8tZ5OhF/6Kq8OjD1gKyWr5fBBP78Jia20eOye63wVM8UCfJ
   42.30 +oTrZk+vtfFnC3tU7+xT+1XB/EkXLr8vV92sHziplhdWQ7Ufc6Ise6zwZarAEqPdQ
   42.31 +ImLUE+fUk/HnCIS7mh36lXS7pTm3RUHbraxLd+FFbwfoHydcJRqwIiiFqQY60oWL
   42.32 +i5TcEdw8RltoTpv1XZYYyqOQCAqZXAdWmjCv1xo+teEku9TW4TqBMKJTs8CVxLFF
   42.33 +3YN6Lgnju4L9Q2hfiXlSutCwFurcnQOYBFsXrqcBCADP7ZCJ4UluQDpguMuSCa/f
   42.34 +PI8RUDQzFppdLgBf14iuoCIaSKEtA/fPa0JkQ+SGHHR3y013lIEfdSI2hwUSvEDS
   42.35 +ZIJJ7pVrMkqooHNqO92yrM55f6nkBNFZc7jj1AP5VlgyAOirKF/ocPCl/d/mz13z
   42.36 +HEDqbnx3/ky8j9PVfZlZ45FbK50ErPvFlH2elOaS/BILHBpo2DFsBwZRZdyLfn/E
   42.37 +QkwPtgpznd+erx6zD8Be548/DLjDmgQEWRQ071rVdvIOInCEnXdDoWWpq+4gfU1n
   42.38 +KwMfKvQOvq1qeTJOKhMPkJQDciAvgN4TGvRKCaNoB3yrAYu6kj77+C9qvf9ZJZl9
   42.39 +ABEBAAEAB/48EYCBJLFnBW0YBirhTKUfU8ptEQOTgsMjiieXiJe3AxH3D+ZoL85G
   42.40 +gNEUUDzTtaK7/OKrWh6XbOpuYEFJ8VK0tU6idyd5aXUCFCBjn1njxWJ83THCatXk
   42.41 +BrdyMgzX2mbuQy70S1yxtPcArUAi2ONmWVIzp6mTrMaUbuSet4M24S6VJ2rr2bPg
   42.42 +6V/l+xhVRRF87QXFTYo3lUO9UuFIVNTHF5G25z0CGNOTqGhW8x7Mq+HSCzpZlXpn
   42.43 +taRkEXx5lGhigLRu/QSVnYdzqI5mD43Qi4xNZE5dmpWIThwapx8sQNA25SRwa8im
   42.44 +zKf+ruubm7Yf/NPtj5Bd/pfPrJwBWAgtBADUG4RBV3pR9EBZti/wwtheqICGGj4A
   42.45 +HN2J589SCHXapgg2573Dp2YwRGwXoXDLJ5e61jmIuDSjkZLwXEZP6/4/5O65RFSD
   42.46 +ol4ykDtn/QXd/nrad7gujMbXuaoiG5dS6kiLZYxn+aSRMqcP5dzhH4oHSlYuBMBc
   42.47 +kjwRBT+Ic29MvwQA+vSjH/nh9T69eWl/F78qKs5TVrnxuQ/jmmwDdgK26Ch1NtTa
   42.48 +yaOyO8doEArMyQEHIdjqmfJGj8wwrGqA4Hew1k4E/KIlgSLPJRM/JKeZE/njn4jl
   42.49 +NMM/+56dKfV+gu3pXUA+WPw+NSAX9pKtC7JwbXHUIlUpmTbeNW7ppxMW3MMD/irf
   42.50 +c0aXkwi/suW472Yg3F2853W6FRzlLpRa3ucQF7XHGHaoiI+eYbNK6mnH460eB6oF
   42.51 +CZp2XUALZosebFPnTQU65fLdf3fmAs2aJEo82noKf4yU4Fu2huYVTrOi25DemqRH
   42.52 +saT9xdY/JL/g+qf2boHE6jkG1hLL/z1pFhxyfa+YQ+mJAmwEGAEIACAWIQTQry+W
   42.53 +leGGqNwFi5Nf4nk92sdGvgUCWxeupwIbLgFACRBf4nk92sdGvsB0IAQZAQgAHRYh
   42.54 +BKzvhDSRUUC9vyWSEMYlKpnI+14GBQJbF66nAAoJEMYlKpnI+14GhqIH/0q0ulT0
   42.55 +JI9nNYjwBQTMZ1cx5otcBEZUT19dMKXVfmMsS0T2gpIwp63iPw3l1UiamXf1TgS8
   42.56 +P7mYg05pctdbdQuI2Q47sxHAKKGGozIrgrsPHc/lyWXd9do/IXmS9e8rX2G4YnRA
   42.57 +61cJzpBy+nSi36t/7uIlbrghQ7yfBfCv9748Q+5AwPa1v3PKtkARLEtTA17OQR5F
   42.58 +M29TcI1vTkhbs+6VpoHffbvwcWj9TNl4eGpfUgNXwEVxUFGocFJ++7oUxYUC53qK
   42.59 +ONB5X9Aw3zzwXyFwgpipcXKoGghf5vl5mAz8/UfeucfsvzJHvF2ST4I5qHXty0Et
   42.60 +5f/LqZTw+Cz4x4HIcQf+OZjmh3DazM1OS8fLZsPg1Hhe0S9HDNxcZDZx7pgG6VjR
   42.61 +osbpuBYN4Gembwn5HMaTG7SHn33EuTeo395HCuJXEHGWe8UDyo+kheIhWb/D/FbK
   42.62 +2sWRopeheZKmZHZPBFCHsH9zXzOvh+WJAe6y27gM4Ro2vh24jYMxWp+ONVODbiq6
   42.63 +GsaB8D1tMkh4vKDmDufpPjEoIBNFnbmPzdT0ply1fxRTR+tCdgAIBDC+beVSbZUX
   42.64 +AvtA/x3poIaeK4yRJ2xwBD6VrULwpZVkRpXav7SHMC7NkQ8eC9jm+zj5lUDcCsyL
   42.65 +QhZV1rZwRICSOt4E7BTD58NBP1AwkWQE7IZkFIkVPg==
   42.66 +=Jke2
   42.67 +-----END PGP PRIVATE KEY BLOCK-----
    43.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    43.2 +++ b/test/test_keys/priv/bcc_test_dude_2-0x53CECCF7_priv.asc	Thu Jun 07 09:05:46 2018 +0200
    43.3 @@ -0,0 +1,64 @@
    43.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    43.5 +
    43.6 +lQOYBFsXrq4BCAC/A0IRUN17SqPDvTPN7XkLtg4Cear8oMWQRCX+OKoYVthbZJYZ
    43.7 +/XCHWgDqPtIEEzbT1607060ucWjWnGq3eMpnooxfVl2YclhrK/qdAkWe/CTb3c33
    43.8 +nXkGH8fBt+Memdn5Tuj92qnCqAdVSPeIx9ExBy4v/3j1jmZP6c/7TdsvPrz8GMy7
    43.9 +pQ2H4bkq0I8QNYs/rF1vZXnvRoXgunA5SlVmUakewixUicBpG/PRgAZnZHnfrwKH
   43.10 +AVmGQv7gfbAi4QYrgeZEthEJerHcD+OTKu/GVEjF0iH89oq8W/l2VQ7xRsiNZHWO
   43.11 +i+pABNR2Q5qMq0ja1Pb65dgG8pKtU8z/1GEvABEBAAEAB/9euOtk8eB7eQagFS3g
   43.12 +82ABBj2JTbOUxtdiFOFwYcI8AqkVHVrwNYW9oUzt3MxB+BNK11wRXIW3j8bpEjU7
   43.13 +mbtpzCpnRslwRVgCgZMslElZL3nJzIMMxXsUJeNl9d47uRjmcJLK/EoN/UxxpxcV
   43.14 +rd1XvlNRuxNNVln3TB/24+OLV+jguxF0Mq5kcYkIrhTm22uXHG5wMI836DD84jCE
   43.15 +BT0p6nUVR05BJdLbrJCc8FsYnbOG1UdWkhArOsXFUWm39/cO63aBIT5wTxNZ0u3b
   43.16 +X1ZaArFIT4LliYKQ+UD1Tk6BmsphRhDErKHgtCQL0E1wSYl0iGJUG/ZBrRG+Bnsi
   43.17 +t8fpBADDnyaqnMR6e4yRHuoqgRupaVdHOBQ32K2krqBhL0KNthgCZXwfagdvkhez
   43.18 +xE+SBliziVid7GP3Ewsw5vpy2WnkNxvJXRrXYE3RLylSiIYmBXT2yOcAHKiuHUyC
   43.19 +OWweaOlUNW6SmYXS2HJUqPMy9bzMUINmhZQ0Q7DlcJaCJHbqCQQA+ffvWux/oIFP
   43.20 +rpu74DWZfqEqhNMYBzkvnZkn4Dlop4d04/1RANM9WSh4Q9YfALNzCKdgxwtpMHvR
   43.21 +91ogiSrfmAZMnpRvQ05NOjbsiDF63V1QZJbunML6iJ7jdxNzcXDyvYZXSS763L7a
   43.22 +jG/oxrVHMSD98lWknRT3bKUOqzwin3cD/3xY1qKsu0FH6ScW4rgNZYYzAFHt0lEw
   43.23 +aqT2N/oyEz8+lJH3tHV2S02z5wZB9HU1uSB3kzQi4vbfkgT/z8Pp5n9ysUY+7f0b
   43.24 +7kwdAokQujXFB0t2RcD1eVywuNa+w93NKFOtETBS1OLTjHLOxLvtvGsyECQBYnfJ
   43.25 +JNUOrOFx/LDWPYK0N0JDQyBUZXN0IFBhcnRpY2lwYW50IDIgPGJjY190ZXN0X2R1
   43.26 +ZGVfMkBkYXJ0aG1hbWEuY29vbD6JAU4EEwEIADgWIQSzbkaOejgZRvzb3fqEsfPo
   43.27 +U87M9wUCWxeurgIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRCEsfPoU87M
   43.28 +98SNB/4oh5JrBPf8MIWLbRMrN+/qPXuNMvyegfVA7KQA/YfiX7MkacCYhu33zIHS
   43.29 +g7EY7pzUM8Kiuw7C3I8Rnb3zSvTarI73Z6g15nOHuFseyGcJCQj29uu15eUCwLMm
   43.30 +z2WAH0u2JWNMs7TqGDQcE7sVOU/ryIAWMa90dsObbRD6F1Sy4wLx/6DK2ErZX9rJ
   43.31 +e+2oY+8pFzzxl2lQb4I3YRDmwlHhOlmcEWFKlHkeenVzREAi7x5MxRe4mUMK/wbo
   43.32 +/IEGYXRWj2JhS6Uww+D0YJxQW6z1SJaQogTTkg/qOBrhvwAIKAkgCodu5FYTRbAI
   43.33 +u7M1UcIBR4vzO8d7HxY7y37DbAZtnQOXBFsXrq4BCAC7a8uQPa8IODpG/05ti4kb
   43.34 +0on5PVYqxC841sUeqF7MP5ptoznP5RnY45QDZKJD/ats+kXi9F94qJBPNIMeFW/W
   43.35 +35dZN/8s6PBAA3GYkSiRWoz53AOQsNv5ckXT811KQ+CJOgw0tWX2s8W6wdkcsKVe
   43.36 +FRx+lo4JVU8h3iSftG0Ukl8HyCIdHNwpsIf17OAz7ZeMYCUstryVwxsPkAAMsU6Q
   43.37 +K61bXMIPUlWvAZeK0duoVsq9X/NF0fh/RiqDrL8ee8sovuvh2wAL/gdfOMGesKn5
   43.38 +P8THp8Z6mfCRj+A2TFwMpHULQv3hRniWqHi7zaHYWYz9WaNyI9WCybWpfv95K+TX
   43.39 +ABEBAAEAB/UYzF231Asq4Vz54qjNCP0yh1U34bc13si92HnMzIOr7dXCPEG5H6nE
   43.40 +3vYTvgUlaZmdffj0eauTQiWCOXUpKMQ9IyCm8z98dTngVbTlTGuKvV3XQd7Qfh0x
   43.41 +9tol1BuNMQeXPJSrVsArsRtcmp1XavoZYXU1Lr/URHVig3sYj0SjEjYeYuNQa5K4
   43.42 +/pBIpIerTtyeItuu0MWgj5wVtR1Ex4+NBe/XWl4rEPN13Nh7TbigksqkIBs9/Hai
   43.43 +XtweXHom8+WC283qKiKierTpQrIqmuAvWJne3euhrB7vqfq66SVjycNAj0JlaJ2a
   43.44 +cBXoH3VvLUkERnLsOtwkFNt67qCohYEEAMPUFhGjEgcM5ywZG/+COzx1PMFVFTOh
   43.45 +Qyt0RgIHTa++5evAT38TMKQIT6KogtAB6XOvT/cEivpjJr4bwSY7/cE14j/AE8FX
   43.46 +pWPSFY4XZ/vqwRQ7BgU3VdFqI2E8qgxqfjSu7MCarKXZK8I2eU3wXkMKWRVyCgHc
   43.47 +uIW0dqKGiQRBBAD1AmHD3ax1FKZalbnTe0TPWlk7b71tbLFmiPO0IsXsS2qbVJEc
   43.48 +AV7nP0HZ0npPF8PEmcBoXoiQtlFq6GEeAVJiyL2RicJ4STD1G+HgU9DP76/aDzXR
   43.49 +Ai/epJWIgE3p4BH/m/8Z4gzi3WACYSA8C5O9AxqUVjZm5otcOAg8UN/DFwP/XIVA
   43.50 +/9ny2bziwbL3QRo/9UQ2/qR9yrVSVfjS8/uzUE2eUl5xdZl4YODsYBRzgbXLCtK9
   43.51 +PwUHqMRDdzs/y1SmWYtj21357nQkf1W39+FkZFlpbLiQHNVvZA+j/g9oaVIGspn4
   43.52 +TGwjdg/zAe6uRjCMEtkCSHCSKfQ0yGcwlBAbQEc+XIkCbAQYAQgAIBYhBLNuRo56
   43.53 +OBlG/Nvd+oSx8+hTzsz3BQJbF66uAhsuAUAJEISx8+hTzsz3wHQgBBkBCAAdFiEE
   43.54 ++lLFkcz3tty2vw9VyoRI/A/1Gg8FAlsXrq4ACgkQyoRI/A/1Gg8axAf/STY0pYDM
   43.55 +A+U0NeqSz6m3nNdzWwEcJxLCd/ggFm6S0Y19sYK61o+YVZFVyL3LgFN5lMN2t1Bp
   43.56 +EzPQQUMKBvRvLf62VQJg37x1lc9i/b/MRsEgf6/ELme2ab+S+SR9ZvzeUBN08pvr
   43.57 +fzwhzLm1iPx1X0r0lASE1h/S7X8oTEbn3MW22VTYXjPMjSN5PT2K7Nu23Vr+aXYi
   43.58 +hi7DcnrRLFUlRpzfRA/2mk+u2+EUlHDIUs+tkCqBQoPNYkmPgIQvvIA1CVTqBimv
   43.59 +6KdATcBUpPcraEmybe7FborWSI/R9JDT5eiqNSjA3BlDCEDlok6Kh2oHZc3iTHpE
   43.60 +SuafB2bRKONY80bdB/9JtT/ZXoYWhTtR54wRqn6lAtdvT3NBprj8WQJFnSu6GNon
   43.61 +2PdJkQT+07A92gOxR1DdRU6QN+k0+0tuYez8+rrExUO6UpFi+4CrsYsWuYkGbszB
   43.62 +da5SII/+wTpLvaYdkfdj8b67CdTf2IiBxeMP7OluB5VOXgL2HafgHQptkqpBCYJj
   43.63 +4xu+mDx/0xtNLvWD2FKpshCbateo/vRgaE0WwQ+eRNAr5sXFya+qaeb1Wcm542IR
   43.64 +o0Yv6Gs4D3XZVDU1Q5TbCZfCanQuEWFXHlU7jCUNIqpbxIw3nMLV/KY4ssjw9gP/
   43.65 +dbb6LUU0f3Cqped3DYga7VpZYlG4Zi7micuBoqa0
   43.66 +=Cykw
   43.67 +-----END PGP PRIVATE KEY BLOCK-----
    44.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    44.2 +++ b/test/test_keys/priv/integrity_test_recip_0-0xF390A40D_priv.asc	Thu Jun 07 09:05:46 2018 +0200
    44.3 @@ -0,0 +1,64 @@
    44.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    44.5 +
    44.6 +lQOYBFr73usBCADhtXwG4vKooTHixzhS3EEMCdqX7DS16yF/cpZJkHfHjahe+JbC
    44.7 +hOUFWMLQI99/ZXecsKNq+Vx7g8/krIyL2qvfwGY4b9RIS84CzxPyDlJ1hgoRLkLf
    44.8 +7qekLL0y25BvP7ZmqpFbtm44MP5jlK5a3GEGlz5HjMcfWVJiFPQ0q63TG8xfP1Zp
    44.9 +RUrbVPdZePFERc3IZGnj6nxhwfJLtjQtx6CZgraDslJZqBTIdeady5yBWNYaRume
   44.10 +Ei+ZH+Whhmi0UD6ojhYUeTtnLRDR1cQwKqx1tegj1zVsXRkipVxTV1jy2qeXkDTA
   44.11 +M3JWObn+qOcFz20uvZfDAkb/01W7Dwaf/C47ABEBAAEAB/wOfgioqInMKg158jC7
   44.12 +oUjL7RYMCy6XP7G27TSZJJ2MQpw8/NkxRDcwULKxipwfIfS8KttTUw+NHrmKhUnA
   44.13 +8Rl4FHJ7zTJkMfnYVFODh0fkI+chk0bX+grpj7XWPiLYAc9EaE9NBDmvgfXTjwhi
   44.14 +7SONuMhW78MZUDLp+U5001El7NQgB/0FeHnx6HLlCkUUK8GDMpp4p7ywfWZYcFJT
   44.15 +KzJ68idR4+ZfISdgRGGHx/hkOu4DS5El8Krrv7VuO83dwSO5EdaSziwYlFbzNLVa
   44.16 +rAuTl0ZF2kqtRR+f5u0HvWcTj/5D9UWT4omlELjzA0lzEcm3pVNWVL6e2heS2zGq
   44.17 +AaCBBADoxW0CWyfWMvZuwcgXj+Bd+bwyFM3GoZq6yAIb9T7ECO2SE+zqzV/Rvya1
   44.18 +zVqjjbVe4MiPRCHZ4y0O2pi0FLYYcd2J0m/QGzj/pBKaJZai7BoSpudqVQgAbgQA
   44.19 +fcHxRLinX8ZDwPS5xTezhf0wBh8MnHnhB1PbItBi/T+mt+H8ZQQA+DujyQQL+Gf6
   44.20 +9Mp6st06QxhiRrK/6dAWQOSi5GtNJDiyNLz1kjFMu6ZIRIPweatn8+z8n16x/GCe
   44.21 +FTLmJ9/n7hwR6HJq0wm8nOMTbzB0gkJg1LB94Aup+Ec2eR3z5TAi3O+LEI/JF37b
   44.22 +NfCgP9v2qAcg+ikum1cgu3G3vQj/Rh8D/REwRAZUbvfTUaNDIayK+OzZrgGrhIQJ
   44.23 +ZR2gVp/Z997T4RsDwtyvS5WpD5zJ1iHpwZx9RBP1Gw3SuC8VWJ1sPLFf2fCLMEvc
   44.24 +ZTNVyJ3KprRygl/skdDkMNmFADeVWsUTLXRpt3dKG/XPlZagfevVIIzJktDiH6Jn
   44.25 +iee57pBs64pbSSG0OUludGVncml0eSBUZXN0IFJlY2lwIDxpbnRlZ3JpdHlfdGVz
   44.26 +dF9yZWNpcEBkYXJ0aG1hbWEub3JnPokBTgQTAQgAOBYhBJ2AR5iYQc9CB+oVKkrK
   44.27 +9zXzkKQNBQJa+97rAhsvBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEErK9zXz
   44.28 +kKQNZ4MIAKFC1nK1gRghKXILC6ZqchVjbYeSJn3nOeZC2KN+NFYTSFowSgku5BYn
   44.29 +F+R5pslk6LOKhc//zsFiyY2fzmXac2uHilZeISwmpR300ZrwWrp0VDH3XnrkH9Ep
   44.30 +wnMXlCTMH1O65J7mfAYGfp4xD5RqcTW9rD9oxjy0EJ1BGwcs2TT2bqilsYjPVsVO
   44.31 +p0bFMKpjf3qFdWDIasRfSOLNM1OeNczGNxh4u04iCrUiWR2uy6tkSIHx/BF98aOL
   44.32 +NSFbqmpHqnRyIyDz15SLbX6dsYx2b5uutDwn4f4zhrYBuHFW+8c7AhZjs22HoUsa
   44.33 +TDMjLyWHW3/qHfkiiDCRHI9+s0Q5kWGdA5gEWvve6wEIANltXi9qBuA904IR/sqz
   44.34 +Yn5lY0scJ7AlS+74DY516s1hd21dNc2BQOeHYR3VN+o1DhPq1lKgPZe+7cS7vpPo
   44.35 +UZuoNl2euMGHxQU9wbp0DL9qaUQx3jM2IEN6efZDSl97DR9PVDJfZfSwqh8zHJb3
   44.36 +viTBBrcRMjJ3XWg3DYC02y8RpzdguNiATYubm5uqUMbf1QvZ2MTWIyl1pObINBsU
   44.37 +RPhVy3NciRrPfQrTai9DqrqMOqLicz1KPkFSc+6W+gYQeYWhcXvq4ZEm5r8vt5DX
   44.38 +5rFTo2WieNoD2AP5+xZ8Cgs6JVpIUwTRy0sOGU5e828tpyXR8iF31gtpPrJhfUlV
   44.39 +VGMAEQEAAQAH/A7KO7/p7HHQgtS0OKq9LRP//ZMcZS68OsAUq4dnSgOSf7c2wfQq
   44.40 +uKmHMfn/iQArf7unG9EfCVGLMU1SoBIbmYGHHbuckmDHxYUnwEfYoQ1cRbDX24+M
   44.41 +PQGaETXJOgPosOnSUZ3jk2Hjqo7YwTcbvxls7/H//3QjXn06UXbR1p8K6kUKfiPy
   44.42 +DMp0qOTj2+3OZnJm57VFi0eLmWNe9qbHhZCj72xkPDJtflqjtvl87WsY7Kc/to+n
   44.43 +9XiCr3DaMxTJR1px9STDePiOj/6BK5ah339bOCRki+6or9JDlxV0nybX8D2nBr4S
   44.44 +mpu4QzVbkQhHpQFV3JxdOOLvSJ5/nadypUEEAOgi6X7wlwdrB8IKUFT5VvMZsdJP
   44.45 +3pnVI/tAdED07jR6cJKTcLvumQP7hr0e7OAqYZ41NgEDeZ8lx+kidKQmunJBXRP3
   44.46 +xcdKIJWqFlMimeIi7YbLw45y0/7awtKpiHNmKjpfXfUnUkupM/E2LUa+ErZbv2iI
   44.47 +8VQjkKr5RT/7qkuzBADvx1uYLB77N1ltv+/uJ6w95PxgQlx1KwmZK6XzgiIjxvfw
   44.48 +YsEojhUfH/LivpJYoX0zylYXEkbaHQZ3wkcXVmoee286VK02/PkxNTCzksueupMp
   44.49 +XyScWdQrru8vQauK9ff3hbIutrdkKiD3MLo1Xy2zv3TaF6xzbPJxoA9AsBO8kQQA
   44.50 +7JYKdeB4azXV0pu1Z9XE1tPDfqQhuH92kc7wAgi4MnIskG/rnQdJTpt4v6X7PNZ5
   44.51 +xMKF/KJgUKOhDkZqeteTBb5Ju7HmE+a0KPEbdai93rswSwD7MttuBnJ0IbQple1j
   44.52 +CKfesgZ3AUKo0+0qau8eBS3YgmJjaufO5JtElmIpC65H84kCbAQYAQgAIBYhBJ2A
   44.53 +R5iYQc9CB+oVKkrK9zXzkKQNBQJa+97rAhsuAUAJEErK9zXzkKQNwHQgBBkBCAAd
   44.54 +FiEEXK1CUUbxlJ14LBUKurkoAKRaNCUFAlr73usACgkQurkoAKRaNCUYRAf/Y1fR
   44.55 +r4wcv8p4QdWJvRc49tE3pA3FCsNOG7L7qkVpyeo0v8aLj2uYccsxQLhizK7usTQ3
   44.56 +b2jgFP+s+IUZ28Ex4gRsSGO0d1+CXQR2xHPUPhoTwY09w8USPqNoFfNs0SjLccsc
   44.57 +JDa4THqaE76svFK/5z7eDI7PPoho3No4iZvE6r2lItHjYtu7qVsC3kY94XSa06W6
   44.58 +LwCCa7ntkM6sMCC/BwoCuA8Tf2DYsUwygjOY0G/ESTRx4RrpD9ubMzT1K0OUZ+4V
   44.59 +M1D8As/uIcNxa4bzKiYyJGuiReeCqhXRrmQ8cXXGgXE2ik5kKITMtemmRft2ry48
   44.60 +U+t7Rwvy7PF9WHXrod5wB/9+2ccNnHTHHDJX+TgRHExrh16/2dDtjbZgUj3LTKoP
   44.61 +NelvNA+fzHKpxcA4Ggx9GaUbzpoo/ZKMko5doWFsTU0H2vbYg2V2YWjwEEYE7lzQ
   44.62 +jebWBqz0etkxgyQnXkB+phZeaBOcW/rzEwXHdQUF+z51QtB6Emals/ISLWxc5Mbz
   44.63 +216ym7LANJ1p658s8+ktj92j3mY4W9ERu5LoG4j+sRLtUvjZJ2+R9qrJkLtcjYF3
   44.64 +FNoqB8np+dgGaWEmvkaJw9lMj/vV2LD+tHc/pzYdwOb/cPyG7+311N5uWy9BlRxM
   44.65 +wd64q8+gdnIBAcqZ8Irt5dWCGkBlh1uIyyV1MI5EHu8L
   44.66 +=8JHC
   44.67 +-----END PGP PRIVATE KEY BLOCK-----
    45.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    45.2 +++ b/test/test_keys/priv/integrity_test_signer_0-0xFF26631A_priv.asc	Thu Jun 07 09:05:46 2018 +0200
    45.3 @@ -0,0 +1,64 @@
    45.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    45.5 +
    45.6 +lQOYBFr74WABCADbzBMLyrH+kyBoQshc7aK0vOvxHvwURVNtuxBUPeqzIZ4bCvLB
    45.7 +Dqo2ti7bQ1uRsupCbwX/zx36LrCIUZ/U5huxmnfsGuFosnNVbXNNTc8IlnlR/1bq
    45.8 +ESe2xDn9iqUgzBC8Md4nSk8O6xyqpZYqN5PiL7Q80OdKak/ITd15YxwKbkHxaK8S
    45.9 +eEV3UrL51V3qzWGAQ42jujKVfG6HGGp5rJM/syW98w0FIOHavNQE0fR7utZoX30L
   45.10 +5N14soNSQ7Mg45o4sRs+3l7MNIkPGxiWbfVp/flK7XvrLd8WprvY2swTaHJ8xyQj
   45.11 +9jcvXE/tCgk3/z80g5NjwmRNjMSWfoBh8nm3ABEBAAEAB/4+UzpNXC8nwGFunw1A
   45.12 +qJO8C1weFcqmFthm46XoNVxxagVypqKaUsW6WOOlgg6bnG+n4eKCHKFj+UxOg1K+
   45.13 +pHdS37nEpgSn0v44SZ5p27fqt/xz32MuYSnxPegxuFhFmgfezYcwffY4BTwuOWEA
   45.14 +3JyfBSbnHdeP9uBjrIyyKIPhgsahO1DhcUCbnhGaT4u1pe8pWrtxDcZLSrjfdpxz
   45.15 +OqKl+PtGlg/QVuzoGSgndQugChVx05NJ3wCWLmGSnc2qZysCFr7pFkxMlDXa1X5w
   45.16 +ckJ3aZw8f/lHR/yUow+8roLF/zijPnLIQwsLt+l7Jz0FLufvUpmt7gVsnpZSlqcW
   45.17 +D5sdBADjCfrS1EMT7+AXbQuUWNnDdyIcyQ5+mXlwYZKnz87qbQ/N+llqgvikPMft
   45.18 +jOtR21Tlb0J0nqsumfd+KZ3k3fYtS9+SdyLYB9rk7mTTgLhjeRaaO5SsU/DFkBYH
   45.19 +I/WTWPecc6eSbxdv9m97DtjZbL8aBJy5bkkJgYKjJfJYRMQi+wQA99Wcby1ypyP9
   45.20 +6vfik49aWhjWGsQheSlTlcJKLMsefw2zDPDM4bLg31tSqSwHWfAoCmPzRTntegmw
   45.21 +vXFWL3WsIUzPiW4SHWtYcYzBr6WyVYE8uuvirkcYWSBMt8SzFfAQBphnHNoBQudO
   45.22 +DrC8f2CEi/NNWWPloGICFiCdU13a53UD/jZTGQZEa9cQmfpRLGJ/jBPkA152IcdJ
   45.23 +OkhHAQr311Ca7xWm06FWyEeQOrbvfmraHqhnLpdXZF/T3osw4ns8Qj4sRMczeGsZ
   45.24 +5hlr2D5nmLyTG8iefztEaNPGaPelaNkX1mMSUZcqoH3k0dP7omQ/5M1BayEza99Y
   45.25 +c3XOdtaknBSyPl20O0ludGVncml0eSBUZXN0IFNpZ25lciA8aW50ZWdyaXR5X3Rl
   45.26 +c3Rfc2lnbmVyQGRhcnRobWFtYS5vcmc+iQFOBBMBCAA4FiEErSFSbMpVZ7dh0hwM
   45.27 +1MlL6f8mYxoFAlr74WACGy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ1MlL
   45.28 +6f8mYxq7/wgA0HkULYopcQoC9beigbWuZFTgZmnyOLpcFTqckmHZipVNfNtEN3mD
   45.29 +4tBvvPTD65ktvUJlk6DnhfNK3kWcIBuusbdvdlBe3RHcyJUDKlcx2t6XqoKnBAzP
   45.30 +ZlNqa+8wUAmVBmCkzhfQkhaA8fiuF8L5uatMIwMGiYePiKPGk9dFm0kVnYXGYFX4
   45.31 +kD2F2KnRCeHOwreLRzLpJjqIBm9+xERbd0L02VOoL3Sb+6dj1Swyf0v98uHjn4ul
   45.32 +tGfbBN+Ct3RNdY1S6RjKyS7xyjtEE2e2qrPtU/sxaHKz6wRqXlYnhz1I6ucCWauK
   45.33 +MOh21/zyxYXlmqChdpNQ3EYUhqLR9vvn6J0DmARa++FgAQgAuKa6XUzB4pJX0Zz2
   45.34 +glCwxKfy/zjj2UgxtQM61clZPC/NbHx1zbUciNzgnlZTTEEyNpMXsgFueOa8+Xz9
   45.35 +8dTpqBHCyU7X3YnZjYLTyJR7doQbI1lPA57RBT/8HmHlbH3gj7OeGCBRJ2vDXXf5
   45.36 +UWQiTQusCh8GqAvDXbhIUuAEU76Hf16FeBVd64x7tyYjbJRvBTdgqQRcMQWK4o4K
   45.37 +eIHf8MIktRtcK0lhGltwdA513dn7Sh9/SLGbtha0QLiusqIZNBl6nCjBr1Z9zMuU
   45.38 +JBn/M2S6L4sbEx9q19np762xh8wxSCzrZH8xAL1lIjBC+2wgHGnUb/KUzuX0/7mY
   45.39 +LCve8wARAQABAAf7BBuhdcXpYlMDJSSqz0dgR1+9JjRrzT+v62kA/BSYqaAen9U9
   45.40 +AbCPy/OuA5fEDqQ8q74l/s3NWV84wQwo0iJ8eEK85KGeZ81TS7SnZYT4IjDaMbUg
   45.41 +7uGvoMBFqZ9f7UP3pPrH/51ocMoS9JdgspDZuoER+L+r9D0ewY0B/uYA8qP2zw7z
   45.42 +c796QK+vdT7uzCRyVh1nnJlHZzkpSPiOICHJMlZqQm5b44jwyj1kpobGixNIET6n
   45.43 +hKa1KX1i1bXnaisaJ373+gycQvA0PgsULscchhwg5ba+gnFTBaBXnDK2wXv4HwAl
   45.44 +aPWJb7sFq2D3VnNBHdH7tnSlPKwOC2rwqrGSoQQA1w6CcMrRQPNnq+IquBKlrJ1q
   45.45 +NnGS0CMYcgHPFhCB5Rqh4BysIbc9VsOwf/ax4QLG5M9mI+OAI0DPGGhpXwWDdpiv
   45.46 +fGogZJpKkkbWxQzDeA7MMbIveIsl6BkEGmuDRB5f9nlJ9VK/khGD6LkDeAQmpbDq
   45.47 +0xGZuddtHsc0n9kSBJsEANvOT+A6+VCP2752GULHRytONjYn1frvRo4k5nGm38pa
   45.48 +lXPasj6vmYDTTKus3q0cxftY4qkf+VEXxfi2HfNOkLUdJfWWttaqNdpFz+WXSU5k
   45.49 +CtYgAsAr/5MVVWr86PFqWVYHYJtGQdV+a3T3SRyJ9G9YVw3u9u8aXJ4gd5xiKLiJ
   45.50 +A/9jecRDTM9hBfe+Ol7e9b8YrSSw24cj6I84YOssxVnljhHa8TAQD6YdBRVAu/U2
   45.51 +J05HVJ5Q+P8cDySWbyJY6CjRDa8VGVVs0Ue/JEmF4u11kxwZkTH5g57PFyTQHi07
   45.52 +kH1ggtRmeHsBuuJ5a3S1NYJK5bC5Z+ddC3YroI5lqfQqZj5viQJsBBgBCAAgFiEE
   45.53 +rSFSbMpVZ7dh0hwM1MlL6f8mYxoFAlr74WACGy4BQAkQ1MlL6f8mYxrAdCAEGQEI
   45.54 +AB0WIQSDGHPI6DWvbXR93BWoEzPD1TjKdAUCWvvhYAAKCRCoEzPD1TjKdJwkB/0e
   45.55 +UwtplsBrb+CJE+mPEMxy3NT/7v8OYYVaeLsD02u0vkk3u6xFJmA7TXI4f/+6Tac+
   45.56 +h7SWZPycx8DZ7qQjfWEOgatD5YtGnqRc8L0eOYtnC6KdGLdDKHEkTA1vzywhhdTg
   45.57 +isgigPsOmSFjegpEwN4oQOcNMErh6Vn1mWW7eNaeBo0bh2r8dzXTokQs8Q/X0lnu
   45.58 +0bhYgBJK6JVsznKocPazIKOoJiRtWL4AeKB/92uP7fh7vYiFcIZ8knwKDDNODlaM
   45.59 +ugp8ij1aRaqBIVMspnM+/mYWq5Ev5CbfO1DTXS7JDfeoJTDL6yBQaBVRGw3RP3j4
   45.60 +dyZDtgyJ4cGrAorpn7KqToAIANl7hKZIITp7KiWluSkY/9dPSPmfESVjaS5McA96
   45.61 +UMRCxjKmne9/UZm2swjFAFkC5a81hi/c0f551uU8FadZ/CCYtWn80dchGsOYCB94
   45.62 +PUnShkdqTf6bZ+w1nMg+kqoxB2a2K2gasyjiixR5QFylir5FdTJlG2aDabZRmjlW
   45.63 +GzCDB5N/KmnqC2QCxwEi9spvXYMt4U/hBss2vcUx/0fBglyDvlBYba03AP6ovlUX
   45.64 +1sobJdzhaqcnTPLeI9wOc80IKzWJZBT04sbP0TlJTQFGOlwYjD7yJ/YrJXtzpKUj
   45.65 +lBGgYaf3pW0nAsU82a2udbq0avpVk1NZ0Baa4dAB76l5JqQ=
   45.66 +=B/PM
   45.67 +-----END PGP PRIVATE KEY BLOCK-----
    46.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    46.2 +++ b/test/test_keys/priv/integrity_test_trash_signer_0-0x6A8F15E9_priv.asc	Thu Jun 07 09:05:46 2018 +0200
    46.3 @@ -0,0 +1,64 @@
    46.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    46.5 +
    46.6 +lQOYBFr75B8BCAC3dIFL8OAErOfpdXqrlXgedtCTNFFwh9rHsh/lUaNEzdUdVjAN
    46.7 +0+rKuEb2iwjOW96tPMGn8pdL4LOjyZfT2GFmmkw8QC7Hnnt3Pq4lBWgJckhpnkT+
    46.8 +o8hyOJn7NS3yvOX2SCeFjKCtLjsEa05gu8H24Gd/ECxfSTJVyxvKz0eLiSesNNAF
    46.9 +FhRb7ZsWKtXzv3juWzfU8hkdS1CCiSzIUp6wK95s+aXqhKv0vUoH7K7qnz+VyE+d
   46.10 +d7gvy/FiBpCuUnVxn2CUWeA9SYOGEe8175lLD8cowo3Firw2iOc792vTz5Ac7qbF
   46.11 +B45VJRX08VPiUgi14cPNyxwH6D18MwlbSNvxABEBAAEAB/kBh+IzLAWpX8EfpZUF
   46.12 +mqbUOj9LTXGZqsiKR8Gmqeze19H9tmQc1Nq2/AqpQtoGPsqTKuqeMUm8MOxhGhGI
   46.13 +i5LSNFrUNeBSn89ZE2DRw/pa1UC43FLxWG/zLTAE4lC3RBjSkUZsStwcXvk99DKy
   46.14 +qIL+Zhat2nZo5SLkrGAObAjugtbV0imL5A6MQoNL0MisQxj1wZ2V/FrFPPZ31YHC
   46.15 +sAHSFm4aAgoLOOmqEnCFXrX1k5kzJVtPbliH3ZJSEtz045ezDDipmrDTHIstseY8
   46.16 +kyg2g0vJaEGHt8wJDbanFE4TZddICpcbXIwee3V+5ZPWyUwCAKkgYjlVhubDQ9pL
   46.17 +I6wxBADCD5Nq4wGuB8NauUhTVuOV9+YWl8yOZ0b/TBisPqCnB9YZWZGAX8nh1nQf
   46.18 +vm069khdPxcwIBHjCZH5ky/S/DaDzoiCAWEBRvhkemByzTkWvP+EiMMdbcGsvTV0
   46.19 +RdGUAiGZf1YNKqfiNOMZIQCXdGPmZcJ4Cm6Gcv2yd1G7CGD23wQA8gJZdyooH49S
   46.20 +UTIMAw8wpdcGKBzwwd+ayo2oMt8A6QjJPgynQMWInnSj+ONnbJjtQihJhQohoylB
   46.21 +PLjibhiStQP2XqffZCMm2pZKQxNDHXWu4f6sebe7iIWdatUyrWzeu2s7X3GbkZAA
   46.22 +/qrpTYNVa2bQhdt5NJhIkX60+THily8EAOP3IPJuEoP5xi8grRhFmQl4d592IGhg
   46.23 +/1UF9tOO1vdt12cRunaR81m2cs18ZZ+hfoZqa9nUwBciXGEgZ5ggtaUGDCGQ5/5d
   46.24 +2ZDCP7tHcN87MDgefpq6q72VX4bYtLN4y1asC8AhZhAtmcnNPy4LsM1NSgJBFMSS
   46.25 +RtllUfMGO0YUOGK0R0ludGVncml0eSBUZXN0IFRyYXNoIFNpZ25lciA8aW50ZWdy
   46.26 +aXR5X3Rlc3RfdHJhc2hfc2lnbmVyQGRhcnRobWFtYS5vcmc+iQFOBBMBCAA4FiEE
   46.27 +Bf4bCu9SVYQ8BKOPi7/cbGqPFekFAlr75B8CGy8FCwkIBwIGFQoJCAsCBBYCAwEC
   46.28 +HgECF4AACgkQi7/cbGqPFekh+gf/Y7ti7rIkDY9CeNF6rXRBcZiBz1XOF07CN9gS
   46.29 +lmmhtW5tUf9OToVIVEiX9XbCc30tkt/RvGagywFd4vEBPlCcpVApnrVRA9ZUlH07
   46.30 +z2swwiGbiuO3UytDfKUFHV3fuIdq+bjiR26ecKUfeFMUcK0NjKqE03K/JiKVKTBx
   46.31 +RAFPo0HFntm0vHXyZ3K23exINGEC1KhvNH0YCNmX1Z64A56GGW5q6XJ71/RS/05E
   46.32 +td8iKO6b4lO3OXSzOMx2+p9DP7KUr+iDRbvTu29B9rLfyS7sSzVJ9QT8WbhtPN2Q
   46.33 +XZ5Ny478y/yzH8YGby8cncFJvQ7GF7iKxUy7Qi+eG3x9fOcvzJ0DmARa++QfAQgA
   46.34 +qA9BSdWZDgZSWfa+fMs7ZDjXjDuOp8UUxo4NRnvA8/2rpTYUvZXPa4oCt9Ha9fMm
   46.35 +5SlnzxvhxXnsGj2xCsHDcb6g5NeIAYZjSHByZTOE8bB9PizDqWCg1sMrxxRFPChp
   46.36 +hlSDxEamj/O6pd3AJpED7x7J3XDimQr9TBfHqZ1f4RSdmb6z71o5eT3dcEOgvECB
   46.37 ++XPcjaLBO3ugh1BQMSWApzDBp4DRhyM2fu/XwsKom/bDr7Lu3mPP3/dlRCIUTOuW
   46.38 +n7B0cjkKYV9/rNqbLBiVFSNomuJNia8xmbsnLy1/ugy0FnE+1Q1xKOWhZ7hX00dL
   46.39 +P3W3KoU2D3mViFPgoMetSQARAQABAAf7B0kmBPFAIeYEmEbZ/5IAoKSANQxN78MG
   46.40 +VrdI0bdCvbElHv6cYT2x5iZvs2VjJIomiQUbAtUMHCIK1Mu7ivesepgPj0GIHBIl
   46.41 +6A7hPrbq5V7H3IlXRYFdZ6zCue43NCzyVN2sGrcPYyqR+xKFJobfO0oZPpg1Z/oc
   46.42 +fLnZMOa+2y9AyASFVQaIlVpC2z2UnTjc/FBAd7fmZvpM/GPlMROAUpAXghj6yGV+
   46.43 +8FYwCldJVWF6oYNs/wsTca7/TsY/jYghcfcWsc3U1kd0Nzq/Ww5Kf4xMC2rJ0DLt
   46.44 +rGa9gny6psRyhtvOJyG4ifQLLErwGl8TGYq8cRakAl+sYq/uEzjhIwQAxyqefauf
   46.45 +A95kYDT0pkJIZ9hyWeXtlutnPXPAPNN6t+xdIbArgMxkKfyiiv6ImQQhdgCHNwVK
   46.46 +QkN0Um++F1xHiq/E3Qv4erNuALQ8lF7Qu5pU5msYMcaxyes9yfmt/e4670lHyOKV
   46.47 +jkvkZGaSY3NB+sA9ys9rOszM+iXOFfQjPIcEANgEPEcf9Qf+GRGSjLpHvQFZdu91
   46.48 +Sp8kuK37BSxXnN9HroK9jDq5q4LcRjUvz7UoqXeF7ZsQCqg6i10n5ZKq1r9D5N1B
   46.49 +LBCfg/mpOV93fRS8y8/lnno4v7IEgGfV85QK4hiZtnjhldC4wrmSoDwhQzA22Y5V
   46.50 +U9HAVm3o9Yq3jIuvA/4nOeRf35MieGEBBUW/hEMp/KnQSQ21t/DZlWjna1yMYkAr
   46.51 +hpwSRYjm2x/l1Y58MYdVWnT3TDjO92W/BKyQ3Yg7+ypzxMOrNHtLVtsuPdf3zmHK
   46.52 +27ngxJBMYuefIulsBbGcP6o7rdiQA5QwG8RE2Le7N4JZX/ZMeSKzpH5xHVba9EFo
   46.53 +iQJsBBgBCAAgFiEEBf4bCu9SVYQ8BKOPi7/cbGqPFekFAlr75B8CGy4BQAkQi7/c
   46.54 +bGqPFenAdCAEGQEIAB0WIQQJvxazmuX2+i4S2n8PXc/IGp+IZwUCWvvkHwAKCRAP
   46.55 +Xc/IGp+IZ1L4B/9PdIRF60R64N2NbskQlfZsMsCZ5+LHkV3lX0/Bgql9n64WLtl+
   46.56 +3y+ufxU4AGPfQM8SPfu95WsA7koa7fmsFI45mcGsYyF9D6MuuDsMnFKW4ioeBo5T
   46.57 +x03ak2xSwhMmhIQXqHJUfbVkHa/Pl1uNjNb7iDAkkDV3fiA7kGxVIjKF/+LbCDtH
   46.58 +98uhiu9enAZ1it72VqGIzzDGF3co4Xg9UsSif7+QQxSpginFVz3eaezbqiVjU0hI
   46.59 +Y1fZ/PeNFUruOMaPJA7vrGasSnlKDJXejhFbW8kHfwSusY3OaAqS2pudzZktR+6J
   46.60 +g8Jm0UO3EguCToSsKLnDUPUqKXov/2VmPrHoRWoH/1Y/J+U+aK5HdFa8/GYsbEbG
   46.61 +z/U+AlEXgGgHZkGFtMNEbGcy6EYGfeWOGRXVfkSgu9jYXBKNgLvqhiIpTslxZ4EZ
   46.62 +YTvmXmgMnJq+tf4Gb5URnUdtd6oM67+rCOMLflLiJNtWeA7k/2cjDJJ4dolp0PY9
   46.63 +ZVQYknz4Wpw+pPtdeV/isvOVMHir3dNchnDWUbo37MEH95hm9ZCx5um6DyVck6LP
   46.64 +da77OXJOGivROGK3iERqn8/nwlIZZCh0LS9uNB/iW/5X/HeimkNaXfPxipRTufI+
   46.65 +CgD2ZO6Vciq19AV6CHJt07G3rZutkDAaHvWjGscVJF321SsJ3jyGqk6vas9VBpc=
   46.66 +=Zcca
   46.67 +-----END PGP PRIVATE KEY BLOCK-----
    47.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    47.2 +++ b/test/test_keys/pub/bcc_test_dude_0-0x1CCCFC41_pub.asc	Thu Jun 07 09:05:46 2018 +0200
    47.3 @@ -0,0 +1,37 @@
    47.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    47.5 +
    47.6 +mQENBFsXrp0BCADYI/0kZfPXEtCNjF97pKDT2tke4kJyjL6BuR/eCf/LuvYMYvcr
    47.7 +eTB528zfyUNCnRMHDkUg07ng9lBjUkVM5GiG+TObS7NcSzsBSK2MatCi1hXIKz6e
    47.8 +MrqYBybn1Ef8UnSs8Qt64v4F6m625R3yUDk8G3QpNMyi2ibUEOeU7qLfhdObxoGU
    47.9 ++IwFygPbKpeitWR/Hb5WUBPFF13kAqn3UjmXNGA/FW5oYNSV+ovZuoNXfUlxFKJk
   47.10 +b/MFv6s0MwEf7CAU/GcfEHWgx1jxsVBYDDkRHqkuiUHUTXWJGMthnbvABQFtX5bR
   47.11 +fIzMqCundqZCncAk1DKJWzIxBgHOtpcGncmrABEBAAG0N0JDQyBUZXN0IFBhcnRp
   47.12 +Y2lwYW50IDAgPGJjY190ZXN0X2R1ZGVfMEBkYXJ0aG1hbWEuY29vbD6JAU4EEwEI
   47.13 +ADgWIQQK6ao+MgWVz5Mpa9+hVaxJHMz8QQUCWxeunQIbLwULCQgHAgYVCgkICwIE
   47.14 +FgIDAQIeAQIXgAAKCRChVaxJHMz8QVY2B/9KLgvTenscM2MERB4fJ0WXUY5J8+oe
   47.15 +UaXRSq5hx4YfbmIA1GTAEwwW9NwDFyX6iu0wqNnlheW+zlhdY3Nhsb0OM3MChAgX
   47.16 +rteAXtR3bjsS+aq+I/hASLZ7N4L8JRZKyGtP0g6cSSFSOXgXwCegju8xBHmJsH/s
   47.17 +Sc9pCCK+wGIDL1mr+C75gPeN77UZHOl7Xf7ILZYeSh/V5erNaJ2hZm1PkYKMVxIK
   47.18 +tfXB6n6lHAFFJ9MJLloJ+IDWbMzBrkn8OTxxQtchrG/WQM8VFMSARCPUA+VvBvoJ
   47.19 +WekBlL4S7TnT9ttdVsHZAPOAA7ttkrZ+8oSZnU33H/PtJcXfrWrmgGJEuQENBFsX
   47.20 +rp0BCACpGtYkycsi5kjvWp2d1ztFECPqWgO6csoB5Bv7LJTnoqacwsnsuNXq4OcF
   47.21 +vArQfw6AoMDXi4SADpIWHn42yymX4N1Ba8fKmm2zE7fS0CSFfGh0QiY93Irts9+M
   47.22 +QgEFlKcJ5TdrrklqIDBZmZ73Cqk3cy2B2ZL8dUlG8/zFk06cwGlf2vNcsYU5vYWb
   47.23 +nfOLmH1Pzmbd3IoWOxT3Yfjrq3ecdTB56wY40j/tk2ISGQXs3/5O1qPLJYTDy86l
   47.24 +umB9WS35JCjrn50JqM5ipyx6dVGQS+N3cjAljhHsTxGsRr1WfruHzfEoS21+O3y8
   47.25 +HMlv1P8+Jx7D3mRRh2LZf0Q8yprtABEBAAGJAmwEGAEIACAWIQQK6ao+MgWVz5Mp
   47.26 +a9+hVaxJHMz8QQUCWxeunQIbLgFACRChVaxJHMz8QcB0IAQZAQgAHRYhBCjWK3P5
   47.27 +Nbis4voQy58GBhMYDIJQBQJbF66dAAoJEJ8GBhMYDIJQiJgIAI1L1RF7Doep5kYo
   47.28 +MP87dl5Kcy7uW0YJ7sIGKIKOC6odBMP5ffwNYFfNQGJDd/9Q3b7aIV6OkQ8HnCvj
   47.29 +joPb8Ub4mDZ5OqAESIC8q6ThzY1RgugFcp+eR32gzTUzpn+PIkwD9Hu5T/MxhoEJ
   47.30 +1k1ZtNxk6t9+kII5wZ+ZUZwmP0LPSANNMHA2F4oJHTpyN+YHYaf6aWzoXD4q8JkQ
   47.31 +012uHF34rUsVsD7pNEoCNjOu4R6MKOhrLPF7b7NQHgtVvXbZ9qBj/yxEfEUxOLbq
   47.32 +JxAVdUtO0j+u0eB4tuD5qaB0FKQ/fiCvNr8/paA6u3heuaX8Saum8ll2Xsh84PZT
   47.33 +hpBhpR8UoQgAzkqKpERMykCuYuk3K0vPqtenL1oG1Ptn4vYlrBzrcoXLvtVxq4j+
   47.34 +7iWBuvvoz3ePQifo+eOZrpe4dQriN+KnA0Qi7VX5YuVPNBYsvpcg9FqPkTBWO26m
   47.35 +kfEiSFOVD4IcCSmo4nveB6EMfJJO5S74+MWSJRaE9EhaV42lmnBP4n7aBvQ8yrxE
   47.36 +qd4LQyCTgJpLAVswWT8cBNwmUuWqKSl6vmZ7mwdWJP2N4qgTnuG0ZCXcLgXHaySK
   47.37 +ICo0SpjtcFCTUYMpYGpWTW1VrO0zfqUMGPe0BzmtCYZjgA3bAp6qYtLTgZZLpwkr
   47.38 +O0PIdJo6tZF13FIQU7TYKTVjde50IF5efw==
   47.39 +=ABTI
   47.40 +-----END PGP PUBLIC KEY BLOCK-----
    48.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    48.2 +++ b/test/test_keys/pub/bcc_test_dude_1-0xDAC746BE_pub.asc	Thu Jun 07 09:05:46 2018 +0200
    48.3 @@ -0,0 +1,37 @@
    48.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    48.5 +
    48.6 +mQENBFsXrqcBCACsJqCAgpquWOhW0pxDTpe+OZHyowNewOK2E4xyQk+710YdKIrg
    48.7 +I8j9+l1E4gUgJ+IiP7AIoTo89CcQINSt4Dith1+AjZgVnN4jxC5Jg7oARafALOxm
    48.8 +kF3mcRqA1T/e7TKBlx5MXwz2HPQBDKRekYomiFXPbBAYnSaTzGoVPmLAULf+TgoT
    48.9 +MtXRG59zHmUtV8ZVTttT9tCAWie0pBscQVL1x/D6x3a221JBcfhcrLFMJf0UoWGB
   48.10 +nlBEzrLQNrl3XRYyQJXCN0BpWvyZBPM35KfGifc7zV70Qrz2XGhSv/lpZct5/D8I
   48.11 +L5GclT2b0VFdVBYbiCPZZj6DbHxtXwDBwmf3ABEBAAG0N0JDQyBUZXN0IFBhcnRp
   48.12 +Y2lwYW50IDEgPGJjY190ZXN0X2R1ZGVfMUBkYXJ0aG1hbWEuY29vbD6JAU4EEwEI
   48.13 +ADgWIQTQry+WleGGqNwFi5Nf4nk92sdGvgUCWxeupwIbLwULCQgHAgYVCgkICwIE
   48.14 +FgIDAQIeAQIXgAAKCRBf4nk92sdGvhPfCACH4rdbxWmPyp3KC4SRfX0hs9tDi4IM
   48.15 +yp0FKasZZR6TS25B0wPHcn5Ujd2U78sZUSWFiB3uajBSU8tZ5OhF/6Kq8OjD1gKy
   48.16 +Wr5fBBP78Jia20eOye63wVM8UCfJoTrZk+vtfFnC3tU7+xT+1XB/EkXLr8vV92sH
   48.17 +ziplhdWQ7Ufc6Ise6zwZarAEqPdQImLUE+fUk/HnCIS7mh36lXS7pTm3RUHbraxL
   48.18 +d+FFbwfoHydcJRqwIiiFqQY60oWLi5TcEdw8RltoTpv1XZYYyqOQCAqZXAdWmjCv
   48.19 +1xo+teEku9TW4TqBMKJTs8CVxLFF3YN6Lgnju4L9Q2hfiXlSutCwFurcuQENBFsX
   48.20 +rqcBCADP7ZCJ4UluQDpguMuSCa/fPI8RUDQzFppdLgBf14iuoCIaSKEtA/fPa0Jk
   48.21 +Q+SGHHR3y013lIEfdSI2hwUSvEDSZIJJ7pVrMkqooHNqO92yrM55f6nkBNFZc7jj
   48.22 +1AP5VlgyAOirKF/ocPCl/d/mz13zHEDqbnx3/ky8j9PVfZlZ45FbK50ErPvFlH2e
   48.23 +lOaS/BILHBpo2DFsBwZRZdyLfn/EQkwPtgpznd+erx6zD8Be548/DLjDmgQEWRQ0
   48.24 +71rVdvIOInCEnXdDoWWpq+4gfU1nKwMfKvQOvq1qeTJOKhMPkJQDciAvgN4TGvRK
   48.25 +CaNoB3yrAYu6kj77+C9qvf9ZJZl9ABEBAAGJAmwEGAEIACAWIQTQry+WleGGqNwF
   48.26 +i5Nf4nk92sdGvgUCWxeupwIbLgFACRBf4nk92sdGvsB0IAQZAQgAHRYhBKzvhDSR
   48.27 +UUC9vyWSEMYlKpnI+14GBQJbF66nAAoJEMYlKpnI+14GhqIH/0q0ulT0JI9nNYjw
   48.28 +BQTMZ1cx5otcBEZUT19dMKXVfmMsS0T2gpIwp63iPw3l1UiamXf1TgS8P7mYg05p
   48.29 +ctdbdQuI2Q47sxHAKKGGozIrgrsPHc/lyWXd9do/IXmS9e8rX2G4YnRA61cJzpBy
   48.30 ++nSi36t/7uIlbrghQ7yfBfCv9748Q+5AwPa1v3PKtkARLEtTA17OQR5FM29TcI1v
   48.31 +Tkhbs+6VpoHffbvwcWj9TNl4eGpfUgNXwEVxUFGocFJ++7oUxYUC53qKONB5X9Aw
   48.32 +3zzwXyFwgpipcXKoGghf5vl5mAz8/UfeucfsvzJHvF2ST4I5qHXty0Et5f/LqZTw
   48.33 ++Cz4x4HIcQf+OZjmh3DazM1OS8fLZsPg1Hhe0S9HDNxcZDZx7pgG6VjRosbpuBYN
   48.34 +4Gembwn5HMaTG7SHn33EuTeo395HCuJXEHGWe8UDyo+kheIhWb/D/FbK2sWRopeh
   48.35 +eZKmZHZPBFCHsH9zXzOvh+WJAe6y27gM4Ro2vh24jYMxWp+ONVODbiq6GsaB8D1t
   48.36 +Mkh4vKDmDufpPjEoIBNFnbmPzdT0ply1fxRTR+tCdgAIBDC+beVSbZUXAvtA/x3p
   48.37 +oIaeK4yRJ2xwBD6VrULwpZVkRpXav7SHMC7NkQ8eC9jm+zj5lUDcCsyLQhZV1rZw
   48.38 +RICSOt4E7BTD58NBP1AwkWQE7IZkFIkVPg==
   48.39 +=aoCm
   48.40 +-----END PGP PUBLIC KEY BLOCK-----
    49.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    49.2 +++ b/test/test_keys/pub/bcc_test_dude_2-0x53CECCF7_pub.asc	Thu Jun 07 09:05:46 2018 +0200
    49.3 @@ -0,0 +1,37 @@
    49.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    49.5 +
    49.6 +mQENBFsXrq4BCAC/A0IRUN17SqPDvTPN7XkLtg4Cear8oMWQRCX+OKoYVthbZJYZ
    49.7 +/XCHWgDqPtIEEzbT1607060ucWjWnGq3eMpnooxfVl2YclhrK/qdAkWe/CTb3c33
    49.8 +nXkGH8fBt+Memdn5Tuj92qnCqAdVSPeIx9ExBy4v/3j1jmZP6c/7TdsvPrz8GMy7
    49.9 +pQ2H4bkq0I8QNYs/rF1vZXnvRoXgunA5SlVmUakewixUicBpG/PRgAZnZHnfrwKH
   49.10 +AVmGQv7gfbAi4QYrgeZEthEJerHcD+OTKu/GVEjF0iH89oq8W/l2VQ7xRsiNZHWO
   49.11 +i+pABNR2Q5qMq0ja1Pb65dgG8pKtU8z/1GEvABEBAAG0N0JDQyBUZXN0IFBhcnRp
   49.12 +Y2lwYW50IDIgPGJjY190ZXN0X2R1ZGVfMkBkYXJ0aG1hbWEuY29vbD6JAU4EEwEI
   49.13 +ADgWIQSzbkaOejgZRvzb3fqEsfPoU87M9wUCWxeurgIbLwULCQgHAgYVCgkICwIE
   49.14 +FgIDAQIeAQIXgAAKCRCEsfPoU87M98SNB/4oh5JrBPf8MIWLbRMrN+/qPXuNMvye
   49.15 +gfVA7KQA/YfiX7MkacCYhu33zIHSg7EY7pzUM8Kiuw7C3I8Rnb3zSvTarI73Z6g1
   49.16 +5nOHuFseyGcJCQj29uu15eUCwLMmz2WAH0u2JWNMs7TqGDQcE7sVOU/ryIAWMa90
   49.17 +dsObbRD6F1Sy4wLx/6DK2ErZX9rJe+2oY+8pFzzxl2lQb4I3YRDmwlHhOlmcEWFK
   49.18 +lHkeenVzREAi7x5MxRe4mUMK/wbo/IEGYXRWj2JhS6Uww+D0YJxQW6z1SJaQogTT
   49.19 +kg/qOBrhvwAIKAkgCodu5FYTRbAIu7M1UcIBR4vzO8d7HxY7y37DbAZtuQENBFsX
   49.20 +rq4BCAC7a8uQPa8IODpG/05ti4kb0on5PVYqxC841sUeqF7MP5ptoznP5RnY45QD
   49.21 +ZKJD/ats+kXi9F94qJBPNIMeFW/W35dZN/8s6PBAA3GYkSiRWoz53AOQsNv5ckXT
   49.22 +811KQ+CJOgw0tWX2s8W6wdkcsKVeFRx+lo4JVU8h3iSftG0Ukl8HyCIdHNwpsIf1
   49.23 +7OAz7ZeMYCUstryVwxsPkAAMsU6QK61bXMIPUlWvAZeK0duoVsq9X/NF0fh/RiqD
   49.24 +rL8ee8sovuvh2wAL/gdfOMGesKn5P8THp8Z6mfCRj+A2TFwMpHULQv3hRniWqHi7
   49.25 +zaHYWYz9WaNyI9WCybWpfv95K+TXABEBAAGJAmwEGAEIACAWIQSzbkaOejgZRvzb
   49.26 +3fqEsfPoU87M9wUCWxeurgIbLgFACRCEsfPoU87M98B0IAQZAQgAHRYhBPpSxZHM
   49.27 +97bctr8PVcqESPwP9RoPBQJbF66uAAoJEMqESPwP9RoPGsQH/0k2NKWAzAPlNDXq
   49.28 +ks+pt5zXc1sBHCcSwnf4IBZuktGNfbGCutaPmFWRVci9y4BTeZTDdrdQaRMz0EFD
   49.29 +Cgb0by3+tlUCYN+8dZXPYv2/zEbBIH+vxC5ntmm/kvkkfWb83lATdPKb6388Icy5
   49.30 +tYj8dV9K9JQEhNYf0u1/KExG59zFttlU2F4zzI0jeT09iuzbtt1a/ml2IoYuw3J6
   49.31 +0SxVJUac30QP9ppPrtvhFJRwyFLPrZAqgUKDzWJJj4CEL7yANQlU6gYpr+inQE3A
   49.32 +VKT3K2hJsm3uxW6K1kiP0fSQ0+XoqjUowNwZQwhA5aJOiodqB2XN4kx6RErmnwdm
   49.33 +0SjjWPNG3Qf/SbU/2V6GFoU7UeeMEap+pQLXb09zQaa4/FkCRZ0ruhjaJ9j3SZEE
   49.34 +/tOwPdoDsUdQ3UVOkDfpNPtLbmHs/Pq6xMVDulKRYvuAq7GLFrmJBm7MwXWuUiCP
   49.35 +/sE6S72mHZH3Y/G+uwnU39iIgcXjD+zpbgeVTl4C9h2n4B0KbZKqQQmCY+Mbvpg8
   49.36 +f9MbTS71g9hSqbIQm2rXqP70YGhNFsEPnkTQK+bFxcmvqmnm9VnJueNiEaNGL+hr
   49.37 +OA912VQ1NUOU2wmXwmp0LhFhVx5VO4wlDSKqW8SMN5zC1fymOLLI8PYD/3W2+i1F
   49.38 +NH9wqqXndw2IGu1aWWJRuGYu5onLgaKmtA==
   49.39 +=O1eU
   49.40 +-----END PGP PUBLIC KEY BLOCK-----
    50.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    50.2 +++ b/test/test_keys/pub/integrity_test_recip_0-0xF390A40D_pub.asc	Thu Jun 07 09:05:46 2018 +0200
    50.3 @@ -0,0 +1,37 @@
    50.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    50.5 +
    50.6 +mQENBFr73usBCADhtXwG4vKooTHixzhS3EEMCdqX7DS16yF/cpZJkHfHjahe+JbC
    50.7 +hOUFWMLQI99/ZXecsKNq+Vx7g8/krIyL2qvfwGY4b9RIS84CzxPyDlJ1hgoRLkLf
    50.8 +7qekLL0y25BvP7ZmqpFbtm44MP5jlK5a3GEGlz5HjMcfWVJiFPQ0q63TG8xfP1Zp
    50.9 +RUrbVPdZePFERc3IZGnj6nxhwfJLtjQtx6CZgraDslJZqBTIdeady5yBWNYaRume
   50.10 +Ei+ZH+Whhmi0UD6ojhYUeTtnLRDR1cQwKqx1tegj1zVsXRkipVxTV1jy2qeXkDTA
   50.11 +M3JWObn+qOcFz20uvZfDAkb/01W7Dwaf/C47ABEBAAG0OUludGVncml0eSBUZXN0
   50.12 +IFJlY2lwIDxpbnRlZ3JpdHlfdGVzdF9yZWNpcEBkYXJ0aG1hbWEub3JnPokBTgQT
   50.13 +AQgAOBYhBJ2AR5iYQc9CB+oVKkrK9zXzkKQNBQJa+97rAhsvBQsJCAcCBhUKCQgL
   50.14 +AgQWAgMBAh4BAheAAAoJEErK9zXzkKQNZ4MIAKFC1nK1gRghKXILC6ZqchVjbYeS
   50.15 +Jn3nOeZC2KN+NFYTSFowSgku5BYnF+R5pslk6LOKhc//zsFiyY2fzmXac2uHilZe
   50.16 +ISwmpR300ZrwWrp0VDH3XnrkH9EpwnMXlCTMH1O65J7mfAYGfp4xD5RqcTW9rD9o
   50.17 +xjy0EJ1BGwcs2TT2bqilsYjPVsVOp0bFMKpjf3qFdWDIasRfSOLNM1OeNczGNxh4
   50.18 +u04iCrUiWR2uy6tkSIHx/BF98aOLNSFbqmpHqnRyIyDz15SLbX6dsYx2b5uutDwn
   50.19 +4f4zhrYBuHFW+8c7AhZjs22HoUsaTDMjLyWHW3/qHfkiiDCRHI9+s0Q5kWG5AQ0E
   50.20 +Wvve6wEIANltXi9qBuA904IR/sqzYn5lY0scJ7AlS+74DY516s1hd21dNc2BQOeH
   50.21 +YR3VN+o1DhPq1lKgPZe+7cS7vpPoUZuoNl2euMGHxQU9wbp0DL9qaUQx3jM2IEN6
   50.22 +efZDSl97DR9PVDJfZfSwqh8zHJb3viTBBrcRMjJ3XWg3DYC02y8RpzdguNiATYub
   50.23 +m5uqUMbf1QvZ2MTWIyl1pObINBsURPhVy3NciRrPfQrTai9DqrqMOqLicz1KPkFS
   50.24 +c+6W+gYQeYWhcXvq4ZEm5r8vt5DX5rFTo2WieNoD2AP5+xZ8Cgs6JVpIUwTRy0sO
   50.25 +GU5e828tpyXR8iF31gtpPrJhfUlVVGMAEQEAAYkCbAQYAQgAIBYhBJ2AR5iYQc9C
   50.26 +B+oVKkrK9zXzkKQNBQJa+97rAhsuAUAJEErK9zXzkKQNwHQgBBkBCAAdFiEEXK1C
   50.27 +UUbxlJ14LBUKurkoAKRaNCUFAlr73usACgkQurkoAKRaNCUYRAf/Y1fRr4wcv8p4
   50.28 +QdWJvRc49tE3pA3FCsNOG7L7qkVpyeo0v8aLj2uYccsxQLhizK7usTQ3b2jgFP+s
   50.29 ++IUZ28Ex4gRsSGO0d1+CXQR2xHPUPhoTwY09w8USPqNoFfNs0SjLccscJDa4THqa
   50.30 +E76svFK/5z7eDI7PPoho3No4iZvE6r2lItHjYtu7qVsC3kY94XSa06W6LwCCa7nt
   50.31 +kM6sMCC/BwoCuA8Tf2DYsUwygjOY0G/ESTRx4RrpD9ubMzT1K0OUZ+4VM1D8As/u
   50.32 +IcNxa4bzKiYyJGuiReeCqhXRrmQ8cXXGgXE2ik5kKITMtemmRft2ry48U+t7Rwvy
   50.33 +7PF9WHXrod5wB/9+2ccNnHTHHDJX+TgRHExrh16/2dDtjbZgUj3LTKoPNelvNA+f
   50.34 +zHKpxcA4Ggx9GaUbzpoo/ZKMko5doWFsTU0H2vbYg2V2YWjwEEYE7lzQjebWBqz0
   50.35 +etkxgyQnXkB+phZeaBOcW/rzEwXHdQUF+z51QtB6Emals/ISLWxc5Mbz216ym7LA
   50.36 +NJ1p658s8+ktj92j3mY4W9ERu5LoG4j+sRLtUvjZJ2+R9qrJkLtcjYF3FNoqB8np
   50.37 ++dgGaWEmvkaJw9lMj/vV2LD+tHc/pzYdwOb/cPyG7+311N5uWy9BlRxMwd64q8+g
   50.38 +dnIBAcqZ8Irt5dWCGkBlh1uIyyV1MI5EHu8L
   50.39 +=yUx8
   50.40 +-----END PGP PUBLIC KEY BLOCK-----
    51.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    51.2 +++ b/test/test_keys/pub/integrity_test_signer_0-0xFF26631A_pub.asc	Thu Jun 07 09:05:46 2018 +0200
    51.3 @@ -0,0 +1,37 @@
    51.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    51.5 +
    51.6 +mQENBFr74WABCADbzBMLyrH+kyBoQshc7aK0vOvxHvwURVNtuxBUPeqzIZ4bCvLB
    51.7 +Dqo2ti7bQ1uRsupCbwX/zx36LrCIUZ/U5huxmnfsGuFosnNVbXNNTc8IlnlR/1bq
    51.8 +ESe2xDn9iqUgzBC8Md4nSk8O6xyqpZYqN5PiL7Q80OdKak/ITd15YxwKbkHxaK8S
    51.9 +eEV3UrL51V3qzWGAQ42jujKVfG6HGGp5rJM/syW98w0FIOHavNQE0fR7utZoX30L
   51.10 +5N14soNSQ7Mg45o4sRs+3l7MNIkPGxiWbfVp/flK7XvrLd8WprvY2swTaHJ8xyQj
   51.11 +9jcvXE/tCgk3/z80g5NjwmRNjMSWfoBh8nm3ABEBAAG0O0ludGVncml0eSBUZXN0
   51.12 +IFNpZ25lciA8aW50ZWdyaXR5X3Rlc3Rfc2lnbmVyQGRhcnRobWFtYS5vcmc+iQFO
   51.13 +BBMBCAA4FiEErSFSbMpVZ7dh0hwM1MlL6f8mYxoFAlr74WACGy8FCwkIBwIGFQoJ
   51.14 +CAsCBBYCAwECHgECF4AACgkQ1MlL6f8mYxq7/wgA0HkULYopcQoC9beigbWuZFTg
   51.15 +ZmnyOLpcFTqckmHZipVNfNtEN3mD4tBvvPTD65ktvUJlk6DnhfNK3kWcIBuusbdv
   51.16 +dlBe3RHcyJUDKlcx2t6XqoKnBAzPZlNqa+8wUAmVBmCkzhfQkhaA8fiuF8L5uatM
   51.17 +IwMGiYePiKPGk9dFm0kVnYXGYFX4kD2F2KnRCeHOwreLRzLpJjqIBm9+xERbd0L0
   51.18 +2VOoL3Sb+6dj1Swyf0v98uHjn4ultGfbBN+Ct3RNdY1S6RjKyS7xyjtEE2e2qrPt
   51.19 +U/sxaHKz6wRqXlYnhz1I6ucCWauKMOh21/zyxYXlmqChdpNQ3EYUhqLR9vvn6LkB
   51.20 +DQRa++FgAQgAuKa6XUzB4pJX0Zz2glCwxKfy/zjj2UgxtQM61clZPC/NbHx1zbUc
   51.21 +iNzgnlZTTEEyNpMXsgFueOa8+Xz98dTpqBHCyU7X3YnZjYLTyJR7doQbI1lPA57R
   51.22 +BT/8HmHlbH3gj7OeGCBRJ2vDXXf5UWQiTQusCh8GqAvDXbhIUuAEU76Hf16FeBVd
   51.23 +64x7tyYjbJRvBTdgqQRcMQWK4o4KeIHf8MIktRtcK0lhGltwdA513dn7Sh9/SLGb
   51.24 +tha0QLiusqIZNBl6nCjBr1Z9zMuUJBn/M2S6L4sbEx9q19np762xh8wxSCzrZH8x
   51.25 +AL1lIjBC+2wgHGnUb/KUzuX0/7mYLCve8wARAQABiQJsBBgBCAAgFiEErSFSbMpV
   51.26 +Z7dh0hwM1MlL6f8mYxoFAlr74WACGy4BQAkQ1MlL6f8mYxrAdCAEGQEIAB0WIQSD
   51.27 +GHPI6DWvbXR93BWoEzPD1TjKdAUCWvvhYAAKCRCoEzPD1TjKdJwkB/0eUwtplsBr
   51.28 +b+CJE+mPEMxy3NT/7v8OYYVaeLsD02u0vkk3u6xFJmA7TXI4f/+6Tac+h7SWZPyc
   51.29 +x8DZ7qQjfWEOgatD5YtGnqRc8L0eOYtnC6KdGLdDKHEkTA1vzywhhdTgisgigPsO
   51.30 +mSFjegpEwN4oQOcNMErh6Vn1mWW7eNaeBo0bh2r8dzXTokQs8Q/X0lnu0bhYgBJK
   51.31 +6JVsznKocPazIKOoJiRtWL4AeKB/92uP7fh7vYiFcIZ8knwKDDNODlaMugp8ij1a
   51.32 +RaqBIVMspnM+/mYWq5Ev5CbfO1DTXS7JDfeoJTDL6yBQaBVRGw3RP3j4dyZDtgyJ
   51.33 +4cGrAorpn7KqToAIANl7hKZIITp7KiWluSkY/9dPSPmfESVjaS5McA96UMRCxjKm
   51.34 +ne9/UZm2swjFAFkC5a81hi/c0f551uU8FadZ/CCYtWn80dchGsOYCB94PUnShkdq
   51.35 +Tf6bZ+w1nMg+kqoxB2a2K2gasyjiixR5QFylir5FdTJlG2aDabZRmjlWGzCDB5N/
   51.36 +KmnqC2QCxwEi9spvXYMt4U/hBss2vcUx/0fBglyDvlBYba03AP6ovlUX1sobJdzh
   51.37 +aqcnTPLeI9wOc80IKzWJZBT04sbP0TlJTQFGOlwYjD7yJ/YrJXtzpKUjlBGgYaf3
   51.38 +pW0nAsU82a2udbq0avpVk1NZ0Baa4dAB76l5JqQ=
   51.39 +=u1h/
   51.40 +-----END PGP PUBLIC KEY BLOCK-----
    52.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    52.2 +++ b/test/test_keys/pub/integrity_test_trash_signer_0-0x6A8F15E9_pub.asc	Thu Jun 07 09:05:46 2018 +0200
    52.3 @@ -0,0 +1,37 @@
    52.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    52.5 +
    52.6 +mQENBFr75B8BCAC3dIFL8OAErOfpdXqrlXgedtCTNFFwh9rHsh/lUaNEzdUdVjAN
    52.7 +0+rKuEb2iwjOW96tPMGn8pdL4LOjyZfT2GFmmkw8QC7Hnnt3Pq4lBWgJckhpnkT+
    52.8 +o8hyOJn7NS3yvOX2SCeFjKCtLjsEa05gu8H24Gd/ECxfSTJVyxvKz0eLiSesNNAF
    52.9 +FhRb7ZsWKtXzv3juWzfU8hkdS1CCiSzIUp6wK95s+aXqhKv0vUoH7K7qnz+VyE+d
   52.10 +d7gvy/FiBpCuUnVxn2CUWeA9SYOGEe8175lLD8cowo3Firw2iOc792vTz5Ac7qbF
   52.11 +B45VJRX08VPiUgi14cPNyxwH6D18MwlbSNvxABEBAAG0R0ludGVncml0eSBUZXN0
   52.12 +IFRyYXNoIFNpZ25lciA8aW50ZWdyaXR5X3Rlc3RfdHJhc2hfc2lnbmVyQGRhcnRo
   52.13 +bWFtYS5vcmc+iQFOBBMBCAA4FiEEBf4bCu9SVYQ8BKOPi7/cbGqPFekFAlr75B8C
   52.14 +Gy8FCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQi7/cbGqPFekh+gf/Y7ti7rIk
   52.15 +DY9CeNF6rXRBcZiBz1XOF07CN9gSlmmhtW5tUf9OToVIVEiX9XbCc30tkt/RvGag
   52.16 +ywFd4vEBPlCcpVApnrVRA9ZUlH07z2swwiGbiuO3UytDfKUFHV3fuIdq+bjiR26e
   52.17 +cKUfeFMUcK0NjKqE03K/JiKVKTBxRAFPo0HFntm0vHXyZ3K23exINGEC1KhvNH0Y
   52.18 +CNmX1Z64A56GGW5q6XJ71/RS/05Etd8iKO6b4lO3OXSzOMx2+p9DP7KUr+iDRbvT
   52.19 +u29B9rLfyS7sSzVJ9QT8WbhtPN2QXZ5Ny478y/yzH8YGby8cncFJvQ7GF7iKxUy7
   52.20 +Qi+eG3x9fOcvzLkBDQRa++QfAQgAqA9BSdWZDgZSWfa+fMs7ZDjXjDuOp8UUxo4N
   52.21 +RnvA8/2rpTYUvZXPa4oCt9Ha9fMm5SlnzxvhxXnsGj2xCsHDcb6g5NeIAYZjSHBy
   52.22 +ZTOE8bB9PizDqWCg1sMrxxRFPChphlSDxEamj/O6pd3AJpED7x7J3XDimQr9TBfH
   52.23 +qZ1f4RSdmb6z71o5eT3dcEOgvECB+XPcjaLBO3ugh1BQMSWApzDBp4DRhyM2fu/X
   52.24 +wsKom/bDr7Lu3mPP3/dlRCIUTOuWn7B0cjkKYV9/rNqbLBiVFSNomuJNia8xmbsn
   52.25 +Ly1/ugy0FnE+1Q1xKOWhZ7hX00dLP3W3KoU2D3mViFPgoMetSQARAQABiQJsBBgB
   52.26 +CAAgFiEEBf4bCu9SVYQ8BKOPi7/cbGqPFekFAlr75B8CGy4BQAkQi7/cbGqPFenA
   52.27 +dCAEGQEIAB0WIQQJvxazmuX2+i4S2n8PXc/IGp+IZwUCWvvkHwAKCRAPXc/IGp+I
   52.28 +Z1L4B/9PdIRF60R64N2NbskQlfZsMsCZ5+LHkV3lX0/Bgql9n64WLtl+3y+ufxU4
   52.29 +AGPfQM8SPfu95WsA7koa7fmsFI45mcGsYyF9D6MuuDsMnFKW4ioeBo5Tx03ak2xS
   52.30 +whMmhIQXqHJUfbVkHa/Pl1uNjNb7iDAkkDV3fiA7kGxVIjKF/+LbCDtH98uhiu9e
   52.31 +nAZ1it72VqGIzzDGF3co4Xg9UsSif7+QQxSpginFVz3eaezbqiVjU0hIY1fZ/PeN
   52.32 +FUruOMaPJA7vrGasSnlKDJXejhFbW8kHfwSusY3OaAqS2pudzZktR+6Jg8Jm0UO3
   52.33 +EguCToSsKLnDUPUqKXov/2VmPrHoRWoH/1Y/J+U+aK5HdFa8/GYsbEbGz/U+AlEX
   52.34 +gGgHZkGFtMNEbGcy6EYGfeWOGRXVfkSgu9jYXBKNgLvqhiIpTslxZ4EZYTvmXmgM
   52.35 +nJq+tf4Gb5URnUdtd6oM67+rCOMLflLiJNtWeA7k/2cjDJJ4dolp0PY9ZVQYknz4
   52.36 +Wpw+pPtdeV/isvOVMHir3dNchnDWUbo37MEH95hm9ZCx5um6DyVck6LPda77OXJO
   52.37 +GivROGK3iERqn8/nwlIZZCh0LS9uNB/iW/5X/HeimkNaXfPxipRTufI+CgD2ZO6V
   52.38 +ciq19AV6CHJt07G3rZutkDAaHvWjGscVJF321SsJ3jyGqk6vas9VBpc=
   52.39 +=YX1B
   52.40 +-----END PGP PUBLIC KEY BLOCK-----
    53.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    53.2 +++ b/test/test_mails/Signed PGP_MIME by unknown signer attach.eml	Thu Jun 07 09:05:46 2018 +0200
    53.3 @@ -0,0 +1,159 @@
    53.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    53.5 +X-Original-To: krista@gnunet.org
    53.6 +Delivered-To: krista@gnunet.org
    53.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    53.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 7F14B1C00BE
    53.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:04:38 +0200 (CEST)
   53.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   53.11 +	id 512111C037C; Wed, 16 May 2018 10:04:38 +0200 (CEST)
   53.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   53.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 2CF251C0378
   53.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:04:38 +0200 (CEST)
   53.15 +Received: from vmmaildmz1.informatik.tu-muenchen.de (vmmaildmz1.informatik.tu-muenchen.de [131.159.0.87])
   53.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 224611C0376
   53.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:04:38 +0200 (CEST)
   53.18 +Received: by vmmaildmz1.informatik.tu-muenchen.de (Postfix, from userid 109)
   53.19 +	id 20B831C2DAF; Wed, 16 May 2018 10:04:38 +0200 (CEST)
   53.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   53.21 +	vmmaildmz1.informatik.tu-muenchen.de
   53.22 +X-Spam-Level: 
   53.23 +X-Spam-Status: No, score=-3.6 required=7.0 tests=BAYES_00,ENCRYPTED_MESSAGE,
   53.24 +	RCVD_IN_DNSWL_LOW,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,UNPARSEABLE_RELAY
   53.25 +	autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   53.26 +Received: from vmmaildmz1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   53.27 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTP id 7AB901C2DAD
   53.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:04:35 +0200 (CEST)
   53.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [81.169.146.149])
   53.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   53.31 +	(No client certificate requested)
   53.32 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTPS id 6B0561C2DAB
   53.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:04:35 +0200 (CEST)
   53.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   53.35 +Received: from mailin.rzone.de ([unix socket])
   53.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   53.37 +	Wed, 16 May 2018 10:04:17 +0200 (CEST)
   53.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   53.39 +Authentication-Results: strato.com; arc=none
   53.40 +Authentication-Results: strato.com; dkim=none
   53.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_trash_signer@darthmama.org"
   53.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   53.43 +X-RZG-Expurgate: clean/bounce
   53.44 +X-RZG-Expurgate-ID: 149500::1526457857-00008F41-9F9C44FD/18/0
   53.45 +X-Strato-MessageType: email
   53.46 +X-RZG-CLASS-ID: mi00
   53.47 +Received-SPF: none
   53.48 +	client-ip=131.159.0.8;
   53.49 +	helo="mail-out1.informatik.tu-muenchen.de";
   53.50 +	envelope-from="krista@pep-project.org";
   53.51 +	receiver=smtpin.rzone.de;
   53.52 +	identity=mailfrom;
   53.53 +Received: from mail-out1.informatik.tu-muenchen.de ([131.159.0.8])
   53.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   53.55 +	with ESMTPS id 608741u4G84HlkX
   53.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   53.57 +	(Client did not present a certificate)
   53.58 +	for <integrity_test_recip@darthmama.org>;
   53.59 +	Wed, 16 May 2018 10:04:17 +0200 (CEST)
   53.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   53.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id 8EE8E1042EC0B
   53.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 10:04:11 +0200 (CEST)
   53.63 +From: integrity_test_trash_signer@darthmama.org
   53.64 +Subject: Signed PGP/MIME by unknown signer, attach
   53.65 +To: integrity_test_recip@darthmama.org
   53.66 +Openpgp: preference=signencrypt
   53.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   53.68 +Message-ID: <68082b0a-e2f0-94ef-a26e-4ad9139cf109@pep-project.org>
   53.69 +Date: Wed, 16 May 2018 10:04:11 +0200
   53.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   53.71 + Thunderbird/52.7.0
   53.72 +MIME-Version: 1.0
   53.73 +Content-Type: multipart/encrypted;
   53.74 + protocol="application/pgp-encrypted";
   53.75 + boundary="AtVJlmqHfYE8gLiORs1kPweDez4yeKjvh"
   53.76 +
   53.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   53.78 +--AtVJlmqHfYE8gLiORs1kPweDez4yeKjvh
   53.79 +Content-Type: application/pgp-encrypted
   53.80 +Content-Description: PGP/MIME version identification
   53.81 +
   53.82 +Version: 1
   53.83 +
   53.84 +--AtVJlmqHfYE8gLiORs1kPweDez4yeKjvh
   53.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   53.86 +Content-Description: OpenPGP encrypted message
   53.87 +Content-Disposition: inline; filename="encrypted.asc"
   53.88 +
   53.89 +-----BEGIN PGP MESSAGE-----
   53.90 +
   53.91 +hQEMA7q5KACkWjQlAQgAkEC2Hj/1Nr7m2OSKnIkvhAeByhakeCcLDJqGpTGe0QjX
   53.92 +WURJHT7vLmRNFYGUV1fDm+ngB12kJ7eIft8K2F2ZKwqCV333GdSG3kSqZeyvio3S
   53.93 ++aDJCFEMjHU5eSM/y0lLexFd1SoBcApRuFO3/S3uWtMNpuw1wxIsuBKIES+EkilE
   53.94 +VMbrUOY5AQNtB/xELARdDnEiOV6fxRNo5paKB+PChIodlc9dPogjuGVKPUHQr0sl
   53.95 +SrqrFT7m9tklwrGPg1hsGfZMOL+07K8p3TeIiyw3QGP13sXl7jnEFMC0s/9h1I0J
   53.96 +tmHBI8luREUVLHzMy7wW+Z+RBpgcysFCIIN0t12+boUBDAMPXc/IGp+IZwEH/28f
   53.97 +nfI8k5zIN4zCN741jBCOdo8c961fUqEdO8bHXBPrXAbtiKDJ71tUwlwQEWSoobqj
   53.98 +KJ4Y/7y1Z+T+/uHPV3bOGy3BtRVHVWX9m9yQWuKBCR35PlsN37teb96eZhWirLAx
   53.99 +eDShhrSO2RMBGrmGKxTlFkSuhsFI//+d86wb9c9h6QEcpWaBZC7Cc4Lfz7t6330Q
  53.100 +e7wwHN49DGU7dgCRsVWktjCDb1qqBmpyOuY6fJgpRY+afBHMxt7Eg22r4kfvWRSe
  53.101 +gPl2Acf0UfRirLAoxFlJnxKFPmhZ+p8OS2Xzun+snuaZvQuHdl3lIIQ0UgC0iHes
  53.102 +shTq4ZWEijd4/4wZliDS6wFs0v5NOnr6d6tFxKoVZYqIcogbFsIyAPi7ir6TXY8M
  53.103 +SpZ3eqUaN+UOqRY6E/Mb47wEkQ7wEBPq5exPsUT0KGNm8WmF+srgpz5Dic+ZG4KE
  53.104 +lQkxrIVP2ZrrCt9T+QrXWP40/mPNEkM+o/zT2tA9SjDPJoKc4wj89NSKsj93gFzP
  53.105 +8RrYiqt1gwh/stBX06+ue0gPlShJVXL7vOQSMJpBpFlY3g2LaRJx01Suz59EbKZx
  53.106 +ZtF9sclvH4mNGZu4u11KhJ9BH1lSf83M02W+TFgDH+Ujuf6tw1X/W12Wq6ZxgekL
  53.107 +zIfSY+GnaT8AmtZoxDxNbOCTeJFtH8Q4HteCMBjbBoej0145/lHKjCqbjddkTH3I
  53.108 +x2MvbMVps1/YYi7dXQ9eug08P9kADONmoAhIJHKYT9wIvDDMuJsvUKYQq3ag/FIp
  53.109 +vUujGI5hmMLizt3ATqXuSwZAswWjE6UM9Fpi92pIiQDAYio0qPSGdMkUvrcL+1WZ
  53.110 +BmhCzeCZx5gS3Wd9p4BsWg+flG48hRNQyspl2nm34jZiilacUgxBAKhDKAULQGba
  53.111 +6Qe74zgTInsDP4gWEK5L9dIi/WOubfxi7KyjRSl8D2OZdHxRfIyCcnN/6yr4EjhQ
  53.112 +DnOVMPP4a+V943w+VWgcSl0fGDP2PimJAVO2iU8FheTBv2wEg/WbgzZHuJqJ3Uv2
  53.113 +073ZyHi9NxVvUCZ5rnxFPsHAN8UzGkMhQCmP9qqbZMqfL9L0ZxKeUJHk3aFiX5J7
  53.114 +AafwjZ61eNJkTtuDBBRy/rk8BggwfMk5Jb0pEJWKbUIQjvTAMgcjrn4ZLhWmWIi6
  53.115 +jTtG8srJmrOHNSjo5X7XZYOOK+db00wN7tGb+3iKcBpT8AcLUWZpeH9QAOf3MYwP
  53.116 +BdLcXCRuvtLdsM6o1A59FMjGHNfNl4z9+wK1tVIhc/wCgbbop71WDr6YHIJ/0jEY
  53.117 +94IlZVAmwNJvxd6Eu3yHFqC+G3sBFSc58JyT98aa0UZFgfGDVm/dBlA+H1elnHP9
  53.118 +TDn2brKuff9ei7O2rQFdtMLRabLyNlHlPuB1AIXhtIXvJmZpWt6OMGoQJ5whtUy8
  53.119 +2d6zecsOMGbsiVyZHDvAsTpkJAAtO7kVgBk9of69Ud4L1c+HlnNjXg8dbaLeq0kE
  53.120 +u5Cfx1IvCtNa8GUpLcdcU3IzAuKyc1e1lR3RmFr9Tfnb/0nXs6reIYnj1Moei8yE
  53.121 +Df0F6GVQufDOwoDzH0IRG93ceRaLnBvQYv2Je3g86iSqTnRElWf1rIzDiFkRb5d1
  53.122 +sOVTjlj2PnXaKlMl9zUJgEiem7/KIg349wcSNpv1a2oIOtjNjezBzRiAi4cfr5Uq
  53.123 +u6J2EotD2rVQHtDRy1RZZG268Yj/KK0WLvVvvp4/8hiKYxOrEJ7oqUXpVwM7zxj4
  53.124 +1p6dZukl6vLYzL1ec8MJDafq1arURb7+DMvKNYQhqQk8i6se4+RKpP+ouN4Fhy4a
  53.125 +fOTqTrChzItGDsyBThYubXFo7stdiK/ArAoNg2DDgJbuldstpeGPeaU4tkIsd+hV
  53.126 +DOHzEDl9QdtB4BQOVm751wCQyJEupwppmTafH8ocAu6eX+t+c+4xUJ3gt/F0Ls+4
  53.127 +/LxdXGmPdd8PAVKldJ3IqqMN35YY4BiV85nEkvIE0x0PtCFXB9XEgF3eo8tz5Vhh
  53.128 +tAs6wI8z9J2nCEyqdPlBB0hHWhwzIVahRZZC6SSfLRGoxSgefqCzAoX8COrdu+0x
  53.129 +LjPtYdehK3skWiyw7UeJc0obuL2rSsR2ZAMBC2MePmMCTgRAEELY8DLPr3eEt5pG
  53.130 +1S9Kmjto9tPKR9e1eJ6xUfc5gmUmD75LKq4nQuntCe9qsdCcpyPTx1izMeLKWoJK
  53.131 +27r8EyCcjHogAWp29WSWS/7ZtiC/BS2Eax3gkkZBfMh3VysN8s1wim/rtnNrvDO7
  53.132 +uED1hyc4zVZAy5tVoDXyRi7PwFGKB62jKn3RbpT8Vetyfcco3R0frABLIUSjmiAl
  53.133 +9t3JcnCVoethlcnng8L7srwqi4PxU958SNGRgu8fTBkp82q/fiyDfq3atdqg3HoD
  53.134 +v8pzPZlzFVJkFsbjDr1A4q0QmJE5QOAUGITdmhzf3V8hDUBZHFKekp6nY1FP2lqa
  53.135 +6Hugvu8cNEJZC2fgWMz5pQjkc6RkSxFDLI6T64+BBDUSkpYZQkgPVcCiBqnIa5aR
  53.136 +0nqPGwTY45mcX472r7510U9I71Bvuszh3l1/IHq6U6/w9+m0brB+56k7E3EAbQ7O
  53.137 +kcqNotZYCcSP1DKJTLZLcrGi0NOsXZJtg5z6ACZCCAQro7Nx3M91R+mkr0i/29nD
  53.138 +4cMSbThX4hhjEnEE6WTUfCobAp7uQv5ucA1PwF5xXgI3vAuGOIXF5FPKzkJW/13A
  53.139 +3XBSYNO36s/a5P/3WaQ/w06HowbF05LKyXvFd9+/4eX2wuhrZ5TzdouWQoOpBjew
  53.140 +nVFNhKTEtZ50lH9bJRwKsOxZvPY9CEgjf9lqJ/GkD/K5o/AxIIYGsfEzEcCZ1lac
  53.141 +aPLvuzcN9kEJ7yKhzgWyhkZXfYt96tXxKqBhuY5a6GDNZRQ0BuIu6nGiBvx6pujz
  53.142 +t2YwIyJT3VDGbRDIeLPAd+NaZl0K11ommMrFGBzWOAF5Y/dDGMsSgYeRrYsdfMXk
  53.143 +OccDUeHHe6HfeDfRSMgnYjfIRNHbY7DGCucpGknT2pNA3860mnwi2rmCVog5Nstt
  53.144 +qAc0UEdNzrYhJdcjqTYz0+Fi98mJsiGnk3rjkgQapOJ1T2Do0YDyQKYcn5ASLV76
  53.145 +6ZoeRaVgfx5BQYDNFuCzqYSnnpflyo7EKbTdm46ue3Rz/mIys2DiYFyYbLNAHZAE
  53.146 +G1ukDAFVwLWB8DapcLGxX41KP4xuI9fJcxuf47raEN6FcUaHTTUYvZF/raFnBsWe
  53.147 +YEHYqtinK3BzEetylYMLI6r8B5xnPaovez5CkFkCXnZWwE65K0hJtbR6OgT6I8ry
  53.148 +rjq9ENiRoMWTdK+4DRpktpBw5VM4SZ9IKgh6BxObQA4lhoMvMj4n4oD1UdsbZY10
  53.149 +Whynz8V0LEPM9G2AXKv8arjQVgMLG1hBhMMjI5Je+DOevzV/39iu8OOhkoEfgqOm
  53.150 +ZvdH3b3jOxF8F2Xl6zeRzes8kLD1nTtNRj8Hv1XMP/XsZcZDNzWbySD4fySz3FT4
  53.151 +figxKoMera83ebgCxTHmE6OIjsf0zingQ7QTAYvgYcc8ANH+5mS1tm2Zf/uVH1tn
  53.152 +zjBhPh9Bsju6gcXvTwXcakzrCJrXDHbalILOd8uGDJvMkjH671jTt9QGw2ubdmhl
  53.153 +tMlPr7DQ6U3NWO8QQfHHH/OLZr+Xz9wW3Z/8DJb9l31BeeIfKwG8q8KCf/y+2l+t
  53.154 +dOc6ezdvi4+gDxGIDZDNoDU7XKq64bmzlBixcDCH3Ewr/LXCsMoW8YGpDw7lNoPc
  53.155 +3MysA3OSbsWGPnAQ83YHW511aDGwPDi6fhilOIY29sstkZ5tKxnNV93bDB+IwgqL
  53.156 +LgobHFMrUmh18ogS2ksGf3w203lRhAfm59Q4wlGQuyDXLfFqG2qYealgYVWSmuXa
  53.157 +qKiV8yqpUo7ByCVT/H+UgO70Ajqc1TVWz7NX+TopegoOYWSNqcRmvj2UrWpMgriA
  53.158 +M3ZiPfPbqldNBdqfFdILAkCxO7VNOew9g3vGBZT5gbiH8s4=
  53.159 +=iU12
  53.160 +-----END PGP MESSAGE-----
  53.161 +
  53.162 +--AtVJlmqHfYE8gLiORs1kPweDez4yeKjvh--
    54.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    54.2 +++ b/test/test_mails/Signed PGP_MIME by unknown signer no attach.eml	Thu Jun 07 09:05:46 2018 +0200
    54.3 @@ -0,0 +1,119 @@
    54.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    54.5 +X-Original-To: krista@gnunet.org
    54.6 +Delivered-To: krista@gnunet.org
    54.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    54.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id C98361C00BE
    54.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:03:27 +0200 (CEST)
   54.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   54.11 +	id 96CAB1C037C; Wed, 16 May 2018 10:03:27 +0200 (CEST)
   54.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   54.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 733FF1C0378
   54.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:03:27 +0200 (CEST)
   54.15 +Received: from vmmaildmz2.informatik.tu-muenchen.de (vmmaildmz2.informatik.tu-muenchen.de [131.159.0.88])
   54.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 5F5421C0376
   54.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:03:27 +0200 (CEST)
   54.18 +Received: by vmmaildmz2.informatik.tu-muenchen.de (Postfix, from userid 109)
   54.19 +	id 5D9981C24B7; Wed, 16 May 2018 10:03:27 +0200 (CEST)
   54.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   54.21 +	vmmaildmz2.informatik.tu-muenchen.de
   54.22 +X-Spam-Level: 
   54.23 +X-Spam-Status: No, score=-3.6 required=7.0 tests=BAYES_00,ENCRYPTED_MESSAGE,
   54.24 +	RCVD_IN_DNSWL_LOW,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,UNPARSEABLE_RELAY
   54.25 +	autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   54.26 +Received: from vmmaildmz2.informatik.tu-muenchen.de (localhost [127.0.0.1])
   54.27 +	by vmmaildmz2.informatik.tu-muenchen.de (Postfix) with ESMTP id B5B751C24B5
   54.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:03:25 +0200 (CEST)
   54.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [81.169.146.148])
   54.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   54.31 +	(No client certificate requested)
   54.32 +	by vmmaildmz2.informatik.tu-muenchen.de (Postfix) with ESMTPS id A63F81C24B0
   54.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 10:03:23 +0200 (CEST)
   54.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   54.35 +Received: from mailin.rzone.de ([unix socket])
   54.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   54.37 +	Wed, 16 May 2018 10:02:59 +0200 (CEST)
   54.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   54.39 +Authentication-Results: strato.com; arc=none
   54.40 +Authentication-Results: strato.com; dkim=none
   54.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_trash_signer@darthmama.org"
   54.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   54.43 +X-RZG-Expurgate: clean/bounce
   54.44 +X-RZG-Expurgate-ID: 149500::1526457779-00007BD6-42E491C8/18/0
   54.45 +X-Strato-MessageType: email
   54.46 +X-RZG-CLASS-ID: mi00
   54.47 +Received-SPF: none
   54.48 +	client-ip=131.159.0.8;
   54.49 +	helo="mail-out1.informatik.tu-muenchen.de";
   54.50 +	envelope-from="krista@pep-project.org";
   54.51 +	receiver=smtpin.rzone.de;
   54.52 +	identity=mailfrom;
   54.53 +Received: from mail-out1.informatik.tu-muenchen.de ([131.159.0.8])
   54.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   54.55 +	with ESMTPS id g0a676u4G82xmH8
   54.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   54.57 +	(Client did not present a certificate)
   54.58 +	for <integrity_test_recip@darthmama.org>;
   54.59 +	Wed, 16 May 2018 10:02:59 +0200 (CEST)
   54.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   54.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id 1078D1042EC0B
   54.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 10:02:54 +0200 (CEST)
   54.63 +To: integrity_test_recip@darthmama.org
   54.64 +From: integrity_test_trash_signer@darthmama.org
   54.65 +Subject: Signed PGP/MIME by unknown signer, no attach
   54.66 +Openpgp: preference=signencrypt
   54.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   54.68 +Message-ID: <bd243d73-0744-1ec0-306a-aa20c4d02b23@pep-project.org>
   54.69 +Date: Wed, 16 May 2018 10:02:53 +0200
   54.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   54.71 + Thunderbird/52.7.0
   54.72 +MIME-Version: 1.0
   54.73 +Content-Type: multipart/encrypted;
   54.74 + protocol="application/pgp-encrypted";
   54.75 + boundary="f3IGGwWaGwvtbxbGXxJgmhHKDNIlkn4Nr"
   54.76 +
   54.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   54.78 +--f3IGGwWaGwvtbxbGXxJgmhHKDNIlkn4Nr
   54.79 +Content-Type: application/pgp-encrypted
   54.80 +Content-Description: PGP/MIME version identification
   54.81 +
   54.82 +Version: 1
   54.83 +
   54.84 +--f3IGGwWaGwvtbxbGXxJgmhHKDNIlkn4Nr
   54.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   54.86 +Content-Description: OpenPGP encrypted message
   54.87 +Content-Disposition: inline; filename="encrypted.asc"
   54.88 +
   54.89 +-----BEGIN PGP MESSAGE-----
   54.90 +
   54.91 +hQEMA7q5KACkWjQlAQf+I/TvgKPPGX6UhF6plGcdROk/CyynB7YfG79aMfKT/7fS
   54.92 +tuK6jXv+dy1KNKHNl0LKzvTdsHy/sSETk8QglgBEm95d9m76aHVD0qEaL3/jrE/P
   54.93 +paYHo7QAypSmaFwImuU7oeT5jisrsh6VAqvfbqgvxCjJXY6TzMS/oVu5I5/JsczE
   54.94 +lmgoDZ0+pKr64UmhJAgF/RWTx4KFA+MLXIl4KHPDP/FQbK6VNq1C/IoxYZk7me4h
   54.95 +tKnufmTlTPtB8AOWCIhNjJKcQ/M4pf86q76IvAbJyt/1YaQ9uwLB9SG2Stz20fvr
   54.96 +dYJMICFPf1sdMYeAHXgy4FkoBHUwo6Lt3SY87rHJWoUBDAMPXc/IGp+IZwEIAJV9
   54.97 +2UZl3xSlCkJOGTMhpvaEdjCfTTOxR8li5Emn8rYl8GgcG6Q2HBk0Sbln9W2/ykD7
   54.98 +UC23NdlNQhuh3HBdDjVDA0PKY2AnuUE9R4aI+bBuRBxOUBaXxvYUDsdUvbmm/c3P
   54.99 +068bAxvNSGrjblzrQS+8Ee23lqOFr6iYmybfZfmbdXpo2GL9gF/jYxWtwUBqWegm
  54.100 +FoZiLlHYYP1AZJTwrpp2VYkvhXVeQ8XfUs6YOuJ3hIQWOSv+8thfkTIK9HHxLOPs
  54.101 +uHRGlegRg97vWEE0SgvYqzEFhbBuRT2sCqSD8NxMDmfPZlDDcgm99tCK6zv+LAtC
  54.102 +ZQH0/7f5z8R4nJmGmE/S6QGTpLjCx584ZPTtEz1y+JWvtUGmNE/Fq9vqa17bgazy
  54.103 +nQ9WTIHvNU3ZBxqyIfwo1yoiPa4FuyHWDgmfscqeuGj82d3EYT6AnWFlzhEgnn35
  54.104 +j8LZal2l0LGPY1tiqzvtcbZutnKsiNWu7VpUwnGwgi34Ku8rzd1dxHAbuH4EZaUd
  54.105 +cM7m7Px48bo5iJIH8sovnWU9HLQdo1JqKdWRqQkxxsbqIEvmi85KjFEuSLeOEK+K
  54.106 +76mSHsm06RbJ83W4scFexzMStctzboM6fGhXXg4mwzfKFh+0964tBTgP8luse4sr
  54.107 +Ge9S5sX8zE7Zqew90MxysmCR3K/zf031QbtLEtJnUk6Z8EkbcmDBft8k42TmOz0R
  54.108 +dyN/rGdJgv1G2SYKJgojZObBaSeFVaC8EshPYkfkyGHnfuUb6c+kWtye4KDqmEHQ
  54.109 +l8LWEB6Mji3virvv3dzrGUSZns85jevRpsfradGc4n21CqwNrREFgRpgz0tDP95B
  54.110 +4PHCK/7leZqYaOJNU47rYuysapFi30qsqO4ibgP/D+4ElSgeHCSLDLbsGL2ni/8I
  54.111 +e35xfj9SzVip1YwpV97Ab3DfqGDOSQlIppKfiN3iiTtimzm/S4iorQ9tluq5IH5B
  54.112 +Bfef6NHMXkUWRgEB9P4cHq3mal4XCiKbU2klmIK7neSyLkDGROKqFfFlKTD6vvK2
  54.113 +wFSHrvPHRJuQv3aKcmS4AK7BN8vo7TxnsZkCxTaKy4ytUde+n38aSEzsPH57U4d/
  54.114 +R2Zv4277xYRUMN3FerYLCk/a3nA2ZFu7a3bDDsviKx64hnCbnV/BeJ8jtuREua1D
  54.115 +cdxlwr4a7kSZJAuEGxgpS3YJgtslDtzY7/UuXHtk9ejrAe+ethQBx/GiNreh3HqL
  54.116 +SGBn5rI532HBxc6XG4t6oAzP4R8m67ti8nOptFWsKMnSx04iuRleFVERJApi+tdz
  54.117 +7mKoLM+G6FMBfZH17fa0+McuhhMyn5HQsJ1EpadNvlnsKxrbvH/WecoCvLenLmXu
  54.118 +M5ERw2PRBxDklmWW1ZwQE/4zHED/FDZkf7PjD4GILD0eviB4qHE=
  54.119 +=ldkn
  54.120 +-----END PGP MESSAGE-----
  54.121 +
  54.122 +--f3IGGwWaGwvtbxbGXxJgmhHKDNIlkn4Nr--
    55.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    55.2 +++ b/test/test_mails/Signed attached key PGP_MIME.eml	Thu Jun 07 09:05:46 2018 +0200
    55.3 @@ -0,0 +1,159 @@
    55.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    55.5 +X-Original-To: krista@gnunet.org
    55.6 +Delivered-To: krista@gnunet.org
    55.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    55.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 636F61C00BE
    55.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   55.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   55.11 +	id 37F1B1C0389; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   55.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   55.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 147831C0378
   55.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   55.15 +Received: from vmmaildmz2.informatik.tu-muenchen.de (vmmaildmz2.informatik.tu-muenchen.de [131.159.0.88])
   55.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 09A2C1C0376
   55.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   55.18 +Received: by vmmaildmz2.informatik.tu-muenchen.de (Postfix, from userid 109)
   55.19 +	id 080941C24B5; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   55.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   55.21 +	vmmaildmz2.informatik.tu-muenchen.de
   55.22 +X-Spam-Level: 
   55.23 +X-Spam-Status: No, score=-3.2 required=7.0 tests=AWL,BAYES_00,
   55.24 +	ENCRYPTED_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,
   55.25 +	UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   55.26 +Received: from vmmaildmz2.informatik.tu-muenchen.de (localhost [127.0.0.1])
   55.27 +	by vmmaildmz2.informatik.tu-muenchen.de (Postfix) with ESMTP id 53FDD1C24B7
   55.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:07 +0200 (CEST)
   55.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [81.169.146.146])
   55.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   55.31 +	(No client certificate requested)
   55.32 +	by vmmaildmz2.informatik.tu-muenchen.de (Postfix) with ESMTPS id 42BFB1C24B0
   55.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:07 +0200 (CEST)
   55.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   55.35 +Received: from mailin.rzone.de ([unix socket])
   55.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   55.37 +	Wed, 16 May 2018 09:54:43 +0200 (CEST)
   55.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   55.39 +Authentication-Results: strato.com; arc=none
   55.40 +Authentication-Results: strato.com; dkim=none
   55.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_signer@darthmama.org"
   55.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   55.43 +X-RZG-Expurgate: clean/normal
   55.44 +X-RZG-Expurgate-ID: 149500::1526457282-0000141B-8075D1E7/0/0
   55.45 +X-Strato-MessageType: email
   55.46 +X-RZG-CLASS-ID: mi00
   55.47 +Received-SPF: none
   55.48 +	client-ip=131.159.0.36;
   55.49 +	helo="mail-out2.informatik.tu-muenchen.de";
   55.50 +	envelope-from="krista@pep-project.org";
   55.51 +	receiver=smtpin.rzone.de;
   55.52 +	identity=mailfrom;
   55.53 +Received: from mail-out2.informatik.tu-muenchen.de ([131.159.0.36])
   55.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   55.55 +	with ESMTPS id i0a4c8u4G7sgmTb
   55.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   55.57 +	(Client did not present a certificate)
   55.58 +	for <integrity_test_recip@darthmama.org>;
   55.59 +	Wed, 16 May 2018 09:54:42 +0200 (CEST)
   55.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   55.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id 66DE31042EC0B
   55.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 09:54:37 +0200 (CEST)
   55.63 +From: integrity_test_signer@darthmama.org
   55.64 +Subject: Signed, attached key, PGP/MIME
   55.65 +To: integrity_test_recip@darthmama.org
   55.66 +Openpgp: preference=signencrypt
   55.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   55.68 +Message-ID: <d1a88625-1061-5065-4def-01d307a2da18@pep-project.org>
   55.69 +Date: Wed, 16 May 2018 09:54:37 +0200
   55.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   55.71 + Thunderbird/52.7.0
   55.72 +MIME-Version: 1.0
   55.73 +Content-Type: multipart/encrypted;
   55.74 + protocol="application/pgp-encrypted";
   55.75 + boundary="GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0"
   55.76 +
   55.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   55.78 +--GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0
   55.79 +Content-Type: application/pgp-encrypted
   55.80 +Content-Description: PGP/MIME version identification
   55.81 +
   55.82 +Version: 1
   55.83 +
   55.84 +--GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0
   55.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   55.86 +Content-Description: OpenPGP encrypted message
   55.87 +Content-Disposition: inline; filename="encrypted.asc"
   55.88 +
   55.89 +-----BEGIN PGP MESSAGE-----
   55.90 +
   55.91 +hQEMA7q5KACkWjQlAQf+Na4vN+Vliz8ku1u55rAXsIim9Kut9R3ipoOF+kINodWK
   55.92 +3K3JuA0kBSps34xH7TEH4OdW0JruIzdGTpC/5PKbw1BRbtoAk5AlO6J4iYPoxP4V
   55.93 +wv5UT6QdeM0XvSxNfs066YKaJvwKMPKHDJbLmppMy49bNNUdkg/L/fnbIyJnTgM8
   55.94 +3Qffufgr+gdtk4mdUZF31QKgNIkDz86jUw8U3IDGDkORtfOaUqqfwXb1MtjQfUxa
   55.95 +ihWREYhOHA525HEKJ2hXge10/5CmGcwieE9e0okK/wuFfzNf/P51DJP7a8oGTIzG
   55.96 +9CTz+4iHCeVOkJrnoxQqb/1QQxp4Yoyabo9Z1uDyKYUBDAOoEzPD1TjKdAEH/Aoy
   55.97 +IttAUjW0lvLI5tjLm2EXVmM21eIqNkzvgI2WadvSTTZaHFpDVhWexITF94MF4hvf
   55.98 +GsbwtEn4jsarLU3cnDIwKsv1oRViM2mBntMUKD+XizPbEHk5Wvl7syemaf5xSOba
   55.99 +xYbGWsDOzV5phTg1N0xpJwcq25uKp7A8RCXu7V1B01ek5hYfXwSn2jp/dcFZXE4e
  55.100 +JA3G4e59KCrOAo352u/ETOGi8j/2tkEutIlhJluPeH9b1eVnbxfRBMmaYyzZ2crQ
  55.101 +wVJ2YUdlOYdqTSlaW6CQsyEH3oYyN2NVWsZaeemOYI1sbbjqFr/tcgOYcBzMpvyn
  55.102 +yNdU8IJDBeRrAgaZDeXS6wGStVJPthh3RAot/lX8+sdUOOObfTNAH9n4SdfNnuQk
  55.103 +dhI8kR6xK0Md5gSLZW0SGrw3+JGPW3qLqTYdVFS9F1JDZN5ErRZ6qEcugSChk7v0
  55.104 +bylWuEAu78iXnLgI6mUojBlrOsu90Mhf/1QEivm/afyiBi9YtDQR8myFyx+DdBVb
  55.105 +LRF0sIHXHfBu8qImNe3s6T7RYgTt1ud+AdIN/Gzpzwzm5XhNYnKWclj2UqFAHMjy
  55.106 +GHW92SR/jY515kDpQ8+RtOxtM6VV/FxWlMLlcsAoCmeq4BwrL38mOgwfkhLoEvJc
  55.107 +Tw3FTtTo8u+mfvdh+1jBZOMBUy+B/2u/+n+yQ4d6zNaPwvxDYLrxo6tWVeD7m4Ls
  55.108 +NDEVPSdoneGPEgnBIIxIxrnIaF4sy3WLEzRoX/82/WgVQOFzJ9Og9s5XYkEejq7z
  55.109 +ZKS5S2q3hAggOnYf+dMoiqMs/36g2nCD54TvZ0PfRHO/jpK9RybfZohC+BRDZzPj
  55.110 +mCy/xbF5j2dd+P/D3jZnET9717hap2NUKiYjQTFFg32SF5rs7Mo8KaC3BIPUWGQg
  55.111 +46IpA4J25PTTj2qaJfu1ctqHlhhjU7PQjfaZ0dSvcEg6TYDQF35HQniMObKJuEDD
  55.112 +6b0Ygqd0js30ENM3QP9QMU6hTF+fzzLc2bRO6P79BOerTYlM5GZoADPR4DlJj7+m
  55.113 +rXrw0UEq4BZdVQ8Wkqvw4kvidc+v0kI3TjFDb/yymGo75v06VBQhZuQpeNWfX0Us
  55.114 +wtxuSmMiwDJd6RNf1OpfCfjalxpKexxpopR7D4UbByMoGqcuXNYDm8ghwdj7Ikvi
  55.115 ++WhJEHIgZpD8Ew8EZ84hL/VNzZd++jqgMxIZT9szWtY3ixsom98+8hKnpQcFnmxs
  55.116 +/nNsfFWr/IZejneiR8rqmRQGL3u3Qaowg8J1NVH8AeVi5uS8pDQYeCUONcYDTMAR
  55.117 +42shA03EvxBUNVk9Q0EwEra52GiEDzodje3mQHpElCYP3YDxCc1H9hTL3Ye76J1C
  55.118 +krs3tXznQaBcdafj6SlBOYxsFy1roc4E5hlrQNJnzA5wPv8vCWjE6vW0ymL0MP14
  55.119 +crIpWQ3aF9wmFhJO2k15VKl4ZP4Fcepa+p93YJ9HhY1v8GckYvC3o/NFLI2jdINZ
  55.120 +kHKBzaxTdml1jx0p6ysU6EmO/Drf1abdCVBbBGQm9EmUtHYM6EtEuyR/vLEQnqd+
  55.121 +xutYlQhgzW31h1mwG1ZmY5XwnqbzfWyM5lzkezbLrDIAa6UlJKs2u7zox4XmJ3T3
  55.122 +SvptmmOknAxNvk5+8EnGnqi/YDtaRuGa/NvuUhmCMTv8rHnhdCEgi06E7esj54aW
  55.123 +JJcdzswISnXT9OXkBuCr0tMAUjI3lLMl8UqbhCPr9c75CQ1bSZEri2t73qjUEcIN
  55.124 +ltwaiyy9E8F1yRPmW4beyYySgloLD+caXVCv+qFc5HPzvmg1gHV8mzjcZjepgDZs
  55.125 +Y0oeL8qjA42JD61tJ78ZC0cWILQRgwP9ePONeq8/l1Mir/oE9m/X3hmrbO/+fWQR
  55.126 +6rxVZEoIHFSedePMaEQ2JCmc+vk1t2l1hHbGv8De+TAmlNEJT6MefTTfYwNQ9H9x
  55.127 +0tyxZpZKtFDnw5RiRQSHP/tLaA+d2YseOFo9IZBNfu3XAjbkfHS8p6MV5TMKXt/y
  55.128 +8GCD17RqZ79o3bUqzmykvUAhdnfUHbEqlhBU14S4G+uBNMCTJbASqxWLjLRql4Ju
  55.129 +2mx6xAuDiBi4Uqvmy+x9M+X8d9+k7rGDoVbC8wvdaTeFkvK/+Z7ZXtNVa8pJWsnV
  55.130 +fxsnUoSQtW5L8ReKp5cvnL8NVBf+Au/deWY7LgVDOIYPEjQHXGRoeHQRVTwMvLNq
  55.131 +c/uLpQ0xq2nd1XqhWXjtO0FCep/at73pZVB2E3Sw8ed68cxMDECkJ2tb1oyC5FLd
  55.132 +a0Gwfqbi/4ROYPt57bxPTvJJrHfFZKplgMvhejifvU78eY7Qil239St4M2ry8q/m
  55.133 +boq/IX9d1k/uorl26TmKfObXFOzCb7rqv92qGpDKm7yxS7g7rFuN/aUThxEXBGUK
  55.134 +MB+2UbhBSTC7mz/e+Y9M1X4XcWAvnpKhiGlZ3SC96XibGNymZ5TYbjBoXggNUAai
  55.135 +tuqxlRUlBobrdivBMnwptFl+QTYjvbtoDGfGfrZaAoKGAB5peItFpeVw/BlEZYu3
  55.136 +DPkGDPe9PQkGA08hM/G/PrZCa9UNu0g6rPA5FhIQdU0skMvxOxBSIjkrBov9MDXX
  55.137 +eh3XWF+asV0JMx3uVcoxMAGrZOc7sCxt77x6jW8V/VQJvMckJOU1mZNiepW8xJUE
  55.138 +5/GOrQU49p7GGOWeu5/HMRCn8K4h4aFC/CjLaCcPBI5HNM28xm0QdjqFFMkaVnxA
  55.139 +JrK4QJitTZ2kDATI5CBQTuRhUrLeIJYMnBUkrhzwtUPz193CDMo1toI1hmXyB3YY
  55.140 +jzYQGGwvhHEFrLKn0ZpzHQj3LHEeXHAps8Rsn99bp3o30QmYG39mhsex13ezgjl5
  55.141 +DDnDQH0sr/xoptXyA4Dx2mhrwUJvKjwlxf74whxKoZHgeYX2Jmgm2jL6VeQvcuFM
  55.142 +e2DS4JU3vhWQYXeDA26WbePCFees3tRyWFBkLHs8yqgDoqyFnnEJ2Nd2GtsQs9RT
  55.143 +Tn/UlgQuIhCxn4kJwdc3+UWu6hP3sVlWgg8C3SlY6UDiUGWyGxDFeOyEpBOseh0C
  55.144 +Z8YhAJNhPvNDjPtF0kAFyayhf/fThMc8YnHLEN6g433IKCJ2HdoPrzPlMpPT8dN4
  55.145 +6XlOop3Q+TkTXJoxW10tSapyQysu3pxhi0KSpv5xqflIRy9bPZo4OdeXO8dEBmpM
  55.146 +F3njnv+cdQkkXmd4FKkMIYHV84bCKn5sWljMgG9WJuxKy8GGvxMcSOguY+CpiSQx
  55.147 +/YYqlfH+SYWDRzOTFvRmEwdGZiXAWWA046rUTJBM5NKvzP18ZdadVe8h9cVnE0Rh
  55.148 ++/KUGmIk2wk5cePWiHoSYWxOS5OK2bI/Up17/Y7cxPQ5ymptH8YL3UtcnY5eSyny
  55.149 +8fRK/P2Ekzo90pcSkfBB3/hL0sppu71lEwA/l3OPcZb8QuHpS3WijrEPbyOSZhtZ
  55.150 +ntODRhWSLelSVPHbV36H1sUfEW+1wkjCIOzbJHnNf84S4HzzIfVIFi8SRZ20bWrh
  55.151 +kRZUooUwljbfBK+SAokYeKGCzn1G8mdeyk3ENvU6mwmx2zXyJlQE5rkdkcnk9Lf0
  55.152 +/LNTl8ppP6JfJYuuwX3sge7IFwege2mD4+6FqociIKpoMvDmjMB6JR2d4Jx/5xxR
  55.153 +KjrOtM9sV1q6dEFU8d3HVINhOxnAOQd3WdsN09x6OmepUceCVJ0FAFVivD3Swf0g
  55.154 +B1kKZh6q9RNqf7XGA8oId8fab7cGFcGMOQsEKEWsrmfV+2GMoWd6rUoM74ZxPNxJ
  55.155 +j/2MEV1pm6YeY3i2qHOvAP4HbIdv8rfp30jZwZCqJSnOjYzlbhoeqo8waDHuxHgr
  55.156 +gkcx+y6bZikAOFOukUc3KdC/JdkAQI51XvTBIlEtnlSkzXMUjcyBMK/Pb2WYYbtr
  55.157 +a4CSkOHFRUrqMsc2IdHmlteGwT5aI2Dh7Suei86YGqkCGRgf5L5/RRTD0/IZt+GM
  55.158 +vN6SFrchelb0TGFAZ7tGcK8uodSin6b1LnH5dHv2/g==
  55.159 +=2AN1
  55.160 +-----END PGP MESSAGE-----
  55.161 +
  55.162 +--GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0--
    56.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    56.2 +++ b/test/test_mails/Signed attached key PGP_MIME_corrupted.eml	Thu Jun 07 09:05:46 2018 +0200
    56.3 @@ -0,0 +1,159 @@
    56.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    56.5 +X-Original-To: krista@gnunet.org
    56.6 +Delivered-To: krista@gnunet.org
    56.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    56.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 636F61C00BE
    56.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   56.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   56.11 +	id 37F1B1C0389; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   56.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   56.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 147831C0378
   56.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   56.15 +Received: from vmmaildmz2.informatik.tu-muenchen.de (vmmaildmz2.informatik.tu-muenchen.de [131.159.0.88])
   56.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 09A2C1C0376
   56.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   56.18 +Received: by vmmaildmz2.informatik.tu-muenchen.de (Postfix, from userid 109)
   56.19 +	id 080941C24B5; Wed, 16 May 2018 09:55:09 +0200 (CEST)
   56.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   56.21 +	vmmaildmz2.informatik.tu-muenchen.de
   56.22 +X-Spam-Level: 
   56.23 +X-Spam-Status: No, score=-3.2 required=7.0 tests=AWL,BAYES_00,
   56.24 +	ENCRYPTED_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,
   56.25 +	UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   56.26 +Received: from vmmaildmz2.informatik.tu-muenchen.de (localhost [127.0.0.1])
   56.27 +	by vmmaildmz2.informatik.tu-muenchen.de (Postfix) with ESMTP id 53FDD1C24B7
   56.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:07 +0200 (CEST)
   56.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [81.169.146.146])
   56.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   56.31 +	(No client certificate requested)
   56.32 +	by vmmaildmz2.informatik.tu-muenchen.de (Postfix) with ESMTPS id 42BFB1C24B0
   56.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:55:07 +0200 (CEST)
   56.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   56.35 +Received: from mailin.rzone.de ([unix socket])
   56.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   56.37 +	Wed, 16 May 2018 09:54:43 +0200 (CEST)
   56.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   56.39 +Authentication-Results: strato.com; arc=none
   56.40 +Authentication-Results: strato.com; dkim=none
   56.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_signer@darthmama.org"
   56.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   56.43 +X-RZG-Expurgate: clean/normal
   56.44 +X-RZG-Expurgate-ID: 149500::1526457282-0000141B-8075D1E7/0/0
   56.45 +X-Strato-MessageType: email
   56.46 +X-RZG-CLASS-ID: mi00
   56.47 +Received-SPF: none
   56.48 +	client-ip=131.159.0.36;
   56.49 +	helo="mail-out2.informatik.tu-muenchen.de";
   56.50 +	envelope-from="krista@pep-project.org";
   56.51 +	receiver=smtpin.rzone.de;
   56.52 +	identity=mailfrom;
   56.53 +Received: from mail-out2.informatik.tu-muenchen.de ([131.159.0.36])
   56.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   56.55 +	with ESMTPS id i0a4c8u4G7sgmTb
   56.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   56.57 +	(Client did not present a certificate)
   56.58 +	for <integrity_test_recip@darthmama.org>;
   56.59 +	Wed, 16 May 2018 09:54:42 +0200 (CEST)
   56.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   56.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id 66DE31042EC0B
   56.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 09:54:37 +0200 (CEST)
   56.63 +From: integrity_test_signer@darthmama.org
   56.64 +Subject: Signed, attached key, PGP/MIME
   56.65 +To: integrity_test_recip@darthmama.org
   56.66 +Openpgp: preference=signencrypt
   56.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   56.68 +Message-ID: <d1a88625-1061-5065-4def-01d307a2da18@pep-project.org>
   56.69 +Date: Wed, 16 May 2018 09:54:37 +0200
   56.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   56.71 + Thunderbird/52.7.0
   56.72 +MIME-Version: 1.0
   56.73 +Content-Type: multipart/encrypted;
   56.74 + protocol="application/pgp-encrypted";
   56.75 + boundary="GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0"
   56.76 +
   56.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   56.78 +--GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0
   56.79 +Content-Type: application/pgp-encrypted
   56.80 +Content-Description: PGP/MIME version identification
   56.81 +
   56.82 +Version: 1
   56.83 +
   56.84 +--GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0
   56.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   56.86 +Content-Description: OpenPGP encrypted message
   56.87 +Content-Disposition: inline; filename="encrypted.asc"
   56.88 +
   56.89 +-----BEGIN PGP MESSAGE-----
   56.90 +
   56.91 +hQEMA7q5KACkWjQlAQf+Na4vN+Vliz8ku1u55rAXsIim9Kut9R3ipoOF+kINodWK
   56.92 +3K3JuA0kBSps34xH7TEH4OdW0JruIzdGTpC/5PKbw1BRbtoAk5AlO6J4iYPoxP4V
   56.93 +wv5UT6QdeM0XvSxNfs066YKaJvwKMPKHDJbLmppMy49bNNUdkg/L/fnbIyJnTgM8
   56.94 +3Qffufgr+gdtk4mdUZF31QKgNIkDz86jUw8U3IDGDkORtfOaUqqfwXb1MtjQfUxa
   56.95 +ihWREYhOHA525HEKJ2hXge10/5CmGcwieE9e0okK/wuFfzNf/P51DJP7a8oGTIzG
   56.96 +9CTz+4iHCeVOkJrnoxQqb/1QQxp4Yoyabo9Z1uDyKYUBDAOoEzPD1TjKdAEH/Aoy
   56.97 +IttAUjW0lvLI5tjLm2EXVmM21eIqNkzvgI2WadvSTTZaHFpDVhWexITF94MF4hvf
   56.98 +GsbwtEn4jsarLU3cnDIwKsv1oRViM2mBntMUKD+XizPbEHk5Wvl7syemaf5xSOba
   56.99 +xYbGWsDOzV5phTg1N0xpJwcq25uKp7A8RCXu7V1B01ek5hYfXwSn2jp/dcFZXE4e
  56.100 +JA3G4e59KCrOAo352u/ETOGi8j/2tkEutIlhJluPeH9b1eVnbxfRBMmaYyzZ2crQ
  56.101 +wVJ2YUdlOYdqTSlaW6CQsyEH3oYyN2NVWsZaeemOYI1sbbjqFr/tcgOYcBzMpvyn
  56.102 +yNdU8IJDBeRrAgaZDeXS6wGStVJPthh3RAot/lX8+sdUOOObfTNAH9n4SdfNnuQk
  56.103 +dhI8kR6xK0Md5gSLZW0SGrw3+JGPW3qLqTYdVFS9F1JDZN5ErRZ6qEcugSChk7v0
  56.104 +bylWuEAu78iXnLgI6mUojBlrOsu90Mhf/1QEivm/afyiBi9YtDQR8myFyx+DdBVb
  56.105 +LRF0sIHXHfBu8qImNe3s6T7RYgTt1ud+AdIN/Gzpzwzm5XhNYnKWclj2UqFAHMjy
  56.106 +GHW92SR/jY515kDpQ8+RtOxtM6VV/FxWlMLlcsAoCmeq4BwrL38mOgwfkhLoEvJc
  56.107 +Tw3FTtTo8u+mfvdh+1jBZOMBUy+B/2u/+n+yQ4d6zNaPwvxDYLrxo6tWVeD7m4Ls
  56.108 +NDEVPSdoneGPEgnBIIxIxrnIaF4sy3WLEzRoX/82/WgVQOFzJ9Og9s5XYkEejq7z
  56.109 +ZKS5S2q3hAggOnYf+dMoiqMs/36g2nCD54TvZ0PfRHO/jpK9RybfZohC+BRDZzPj
  56.110 +mCy/xbF5j2dd+P/D3jZnET9717hap2NUKiYjQTFFg32SF5rs7Mo8KaC3BIPUWGQg
  56.111 +46IpA4J25PTTj2qaJfu1ctqHlhhjU7PQjfaZ0dSvcEg6TYDQF35HQniMObKJuEDD
  56.112 +6b0Ygqd0js30ENM3QP9QMU6hTF+fzzLc2bRO6P79BOerTYlM5GZoADPR4DlJj7+m
  56.113 +rXrw0UEq4BZdVQ8Wkqvw4kvidc+v0kI3TjFDb/yymGo75v06VBQhZuQpeNWfX0Us
  56.114 +wtxuSmMiwDJd6RNf1OpfCfjalxpKexxpopR7D4UbByMoGqcuXNYDm8ghwdj7Ikvi
  56.115 ++WhJEHIgZpD8Ew8EZ84hL/VNzZd++jqgMxIZT9szWtY3ixsom98+8hKnpQcFnmxs
  56.116 +/nNsfFWr/IZejneiR8rqmRQGL3u3Qaowg8J1NVH8AeVi5uS8pDQYeCUONcYDTMAR
  56.117 +42shA03EvxBUNVk9Q0EwEra52GiEDzodje3mQHpElCYP3YDxCc1H9hTL3Ye76J1C
  56.118 +krs3tXznQaBcdafj6SlBOYxsFy1roc4E5hlrQNJnzA5wPv8vCWjE6vW0ymL0MP14
  56.119 +kHKBzaxTdml1jx0p6ysU6EmO/Drf1abdCVBbBGQm9EmUtHYM6EtEuyR/vLEQnqd+
  56.120 +xutYlQhgzW31h1mwG1ZmY5XwnqbzfWyM5lzkezbLrDIAa6UlJKs2u7zox4XmJ3T3
  56.121 +SvptmmOknAxNvk5+8EnGnqi/YDtaRuGa/NvuUhmCMTv8rHnhdCEgi06E7esj54aW
  56.122 +JJcdzswISnXT9OXkBuCr0tMAUjI3lLMl8UqbhCPr9c75CQ1bSZEri2t73qjUEcIN
  56.123 +ltwaiyy9E8F1yRPmW4beyYySgloLD+caXVCv+qFc5HPzvmg1gHV8mzjcZjepgDZs
  56.124 +Y0oeL8qjA42JD61tJ78ZC0cWILQRgwP9ePONeq8/l1Mir/oE9m/X3hmrbO/+fWQR
  56.125 +6rxVZEoIHFSedePMaEQ2JCmc+vk1t2l1hHbGv8De+TAmlNEJT6MefTTfYwNQ9H9x
  56.126 +0tyxZpZKtFDnw5RiRQSHP/tLaA+d2YseOFo9IZBNfu3XAjbkfHS8p6MV5TMKXt/y
  56.127 +8GCD17RqZ79o3bUqzmykvUAhdnfUHbEqlhBU14S4G+uBNMCTJbASqxWLjLRql4Ju
  56.128 +2mx6xAuDiBi4Uqvmy+x9M+X8d9+k7rGDoVbC8wvdaTeFkvK/+Z7ZXtNVa8pJWsnV
  56.129 +fxsnUoSQtW5L8ReKp5cvnL8NVBf+Au/deWY7LgVDOIYPEjQHXGRoeHQRVTwMvLNq
  56.130 +c/uLpQ0xq2nd1XqhWXjtO0FCep/at73pZVB2E3Sw8ed68cxMDECkJ2tb1oyC5FLd
  56.131 +a0Gwfqbi/4ROYPt57bxPTvJJrHfFZKplgMvhejifvU78eY7Qil239St4M2ry8q/m
  56.132 +boq/IX9d1k/uorl26TmKfObXFOzCb7rqv92qGpDKm7yxS7g7rFuN/aUThxEXBGUK
  56.133 +MB+2UbhBSTC7mz/e+Y9M1X4XcWAvnpKhiGlZ3SC96XibGNymZ5TYbjBoXggNUAai
  56.134 +tuqxlRUlBobrdivBMnwptFl+QTYjvbtoDGfGfrZaAoKGAB5peItFpeVw/BlEZYu3
  56.135 +DPkGDPe9PQkGA08hM/G/PrZCa9UNu0g6rPA5FhIQdU0skMvxOxBSIjkrBov9MDXX
  56.136 +eh3XWF+asV0JMx3uVcoxMAGrZOc7sCxt77x6jW8V/VQJvMckJOU1mZNiepW8xJUE
  56.137 +5/GOrQU49p7GGOWeu5/HMRCn8K4h4aFC/CjLaCcPBI5HNM28xm0QdjqFFMkaVnxA
  56.138 +JrK4QJitTZ2kDATI5CBQTuRhUrLeIJYMnBUkrhzwtUPz193CDMo1toI1hmXyB3YY
  56.139 +jzYQGGwvhHEFrLKn0ZpzHQj3LHEeXHAps8Rsn99bp3o30QmYG39mhsex13ezgjl5
  56.140 +DDnDQH0sr/xoptXyA4Dx2mhrwUJvKjwlxf74whxKoZHgeYX2Jmgm2jL6VeQvcuFM
  56.141 +e2DS4JU3vhWQYXeDA26WbePCFees3tRyWFBkLHs8yqgDoqyFnnEJ2Nd2GtsQs9RT
  56.142 +Tn/UlgQuIhCxn4kJwdc3+UWu6hP3sVlWgg8C3SlY6UDiUGWyGxDFeOyEpBOseh0C
  56.143 +Z8YhAJNhPvNDjPtF0kAFyayhf/fThMc8YnHLEN6g433IKCJ2HdoPrzPlMpPT8dN4
  56.144 +6XlOop3Q+TkTXJoxW10tSapyQysu3pxhi0KSpv5xqflIRy9bPZo4OdeXO8dEBmpM
  56.145 +crIpWQ3aF9wmFhJO2k15VKl4ZP4Fcepa+p93YJ9HhY1v8GckYvC3o/NFLI2jdINZ
  56.146 +F3njnv+cdQkkXmd4FKkMIYHV84bCKn5sWljMgG9WJuxKy8GGvxMcSOguY+CpiSQx
  56.147 +/YYqlfH+SYWDRzOTFvRmEwdGZiXAWWA046rUTJBM5NKvzP18ZdadVe8h9cVnE0Rh
  56.148 ++/KUGmIk2wk5cePWiHoSYWxOS5OK2bI/Up17/Y7cxPQ5ymptH8YL3UtcnY5eSyny
  56.149 +8fRK/P2Ekzo90pcSkfBB3/hL0sppu71lEwA/l3OPcZb8QuHpS3WijrEPbyOSZhtZ
  56.150 +ntODRhWSLelSVPHbV36H1sUfEW+1wkjCIOzbJHnNf84S4HzzIfVIFi8SRZ20bWrh
  56.151 +kRZUooUwljbfBK+SAokYeKGCzn1G8mdeyk3ENvU6mwmx2zXyJlQE5rkdkcnk9Lf0
  56.152 +/LNTl8ppP6JfJYuuwX3sge7IFwege2mD4+6FqociIKpoMvDmjMB6JR2d4Jx/5xxR
  56.153 +KjrOtM9sV1q6dEFU8d3HVINhOxnAOQd3WdsN09x6OmepUceCVJ0FAFVivD3Swf0g
  56.154 +B1kKZh6q9RNqf7XGA8oId8fab7cGFcGMOQsEKEWsrmfV+2GMoWd6rUoM74ZxPNxJ
  56.155 +j/2MEV1pm6YeY3i2qHOvAP4HbIdv8rfp30jZwZCqJSnOjYzlbhoeqo8waDHuxHgr
  56.156 +gkcx+y6bZikAOFOukUc3KdC/JdkAQI51XvTBIlEtnlSkzXMUjcyBMK/Pb2WYYbtr
  56.157 +a4CSkOHFRUrqMsc2IdHmlteGwT5aI2Dh7Suei86YGqkCGRgf5L5/RRTD0/IZt+GM
  56.158 +vN6SFrchelb0TGFAZ7tGcK8uodSin6b1LnH5dHv2/g==
  56.159 +=2AN1
  56.160 +-----END PGP MESSAGE-----
  56.161 +
  56.162 +--GfA7ODe575gGs7n7L4H9bbYJrjDb44tY0--
    57.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    57.2 +++ b/test/test_mails/Signed no attach PGP_MIME.eml	Thu Jun 07 09:05:46 2018 +0200
    57.3 @@ -0,0 +1,118 @@
    57.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    57.5 +X-Original-To: krista@gnunet.org
    57.6 +Delivered-To: krista@gnunet.org
    57.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    57.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 472E31C00BE
    57.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:53:45 +0200 (CEST)
   57.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   57.11 +	id 1997F1C037C; Wed, 16 May 2018 09:53:45 +0200 (CEST)
   57.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   57.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id E86001C0376
   57.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:53:44 +0200 (CEST)
   57.15 +Received: from vmmaildmz1.informatik.tu-muenchen.de (vmmaildmz1.informatik.tu-muenchen.de [131.159.0.87])
   57.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id D482E1C037C
   57.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:53:44 +0200 (CEST)
   57.18 +Received: by vmmaildmz1.informatik.tu-muenchen.de (Postfix, from userid 109)
   57.19 +	id D30771C2DB6; Wed, 16 May 2018 09:53:44 +0200 (CEST)
   57.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   57.21 +	vmmaildmz1.informatik.tu-muenchen.de
   57.22 +X-Spam-Level: 
   57.23 +X-Spam-Status: No, score=-3.1 required=7.0 tests=AWL,BAYES_00,
   57.24 +	ENCRYPTED_MESSAGE,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,UNPARSEABLE_RELAY
   57.25 +	autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   57.26 +Received: from vmmaildmz1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   57.27 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTP id AE6991C2DB5
   57.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:53:37 +0200 (CEST)
   57.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [85.215.255.1])
   57.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   57.31 +	(No client certificate requested)
   57.32 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTPS id 9E3BF1C2DAD
   57.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:53:32 +0200 (CEST)
   57.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   57.35 +Received: from mailin.rzone.de ([unix socket])
   57.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   57.37 +	Wed, 16 May 2018 09:53:14 +0200 (CEST)
   57.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   57.39 +Authentication-Results: strato.com; arc=none
   57.40 +Authentication-Results: strato.com; dkim=none
   57.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_signer@darthmama.org"
   57.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   57.43 +X-RZG-Expurgate: clean/normal
   57.44 +X-RZG-Expurgate-ID: 149500::1526457194-00007BD0-5EC49E58/0/0
   57.45 +X-Strato-MessageType: email
   57.46 +X-RZG-CLASS-ID: mi00
   57.47 +Received-SPF: none
   57.48 +	client-ip=131.159.0.8;
   57.49 +	helo="mail-out1.informatik.tu-muenchen.de";
   57.50 +	envelope-from="krista@pep-project.org";
   57.51 +	receiver=smtpin.rzone.de;
   57.52 +	identity=mailfrom;
   57.53 +Received: from mail-out1.informatik.tu-muenchen.de ([131.159.0.8])
   57.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   57.55 +	with ESMTPS id n01032u4G7rElHf
   57.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   57.57 +	(Client did not present a certificate)
   57.58 +	for <integrity_test_recip@darthmama.org>;
   57.59 +	Wed, 16 May 2018 09:53:14 +0200 (CEST)
   57.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   57.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id 409EC1042EC0B
   57.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 09:53:08 +0200 (CEST)
   57.63 +To: integrity_test_recip@darthmama.org
   57.64 +From: integrity_test_signer@darthmama.org
   57.65 +Subject: Signed, no attach, PGP/MIME
   57.66 +Openpgp: preference=signencrypt
   57.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   57.68 +Message-ID: <4ce2245d-226d-cf82-06dc-aba9e3a0ecbe@pep-project.org>
   57.69 +Date: Wed, 16 May 2018 09:53:07 +0200
   57.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   57.71 + Thunderbird/52.7.0
   57.72 +MIME-Version: 1.0
   57.73 +Content-Type: multipart/encrypted;
   57.74 + protocol="application/pgp-encrypted";
   57.75 + boundary="SlMATmhocAaxIBNTEgPcJilafyaUyA1G7"
   57.76 +
   57.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   57.78 +--SlMATmhocAaxIBNTEgPcJilafyaUyA1G7
   57.79 +Content-Type: application/pgp-encrypted
   57.80 +Content-Description: PGP/MIME version identification
   57.81 +
   57.82 +Version: 1
   57.83 +
   57.84 +--SlMATmhocAaxIBNTEgPcJilafyaUyA1G7
   57.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   57.86 +Content-Description: OpenPGP encrypted message
   57.87 +Content-Disposition: inline; filename="encrypted.asc"
   57.88 +
   57.89 +-----BEGIN PGP MESSAGE-----
   57.90 +
   57.91 +hQEMA7q5KACkWjQlAQf/SJxqQPmfvxAJOW4E/UkBhs7i0f69pzABNpHtMNUdM0+P
   57.92 +19sC0+t6XXljKfACi6uw/4mZmVPm4xTUhwKw/676Eh03XV86gWQaervpm0LkQtzZ
   57.93 +cX5GsUaMArzQC4z9jmpDlPMz+u6XKlRYGzKgzdju8QfVVGpta/SgYCKV177cXgpm
   57.94 +FYmyyzq4XL/quNf8ql3RS1gi0ciY1mSc+b7Z82FMtDbwiHgfxtrSOcIxuuNCEe15
   57.95 +gJY6w8Z5i/ib/rxuN0TNxbXhsjHUqmfiKOVnSQpHG8sLZsGCGCyyONlEbavYAgpk
   57.96 +z8GcdEEcuZbreuVvWgZ3XcEqk/ztNpcLbXT1UXoPl4UBDAOoEzPD1TjKdAEH/1g8
   57.97 +LD7Qw3sxX/b0OkMM2DWsNreZpSp2pJAHVcFJBeSCzJCdGgGVH6cjig86lLwWlzEV
   57.98 +h3xQG38KrTF66yFk0XQTePDr90DPEXCjKObjloNwV6Ir6fwZwPum98kVZa6mjBGk
   57.99 +kEgVc95P6EAUnBZHsuE6mHaToSf2vN9GkVukoMHlmMM5q4goJcIk9DSVZw4BpBzC
  57.100 +cFWSPuQRN9XZKxSYebFmff1ETBFs9K7yYsYvGRVZOWxaVUMIVIr0p8Y9NXar58oW
  57.101 ++j+gAWWbWvAK72bYuN8hfG9cjR/4/pzlCsSz3zXqXbM/tsGtVexy0h+Cb6a77iT4
  57.102 +UB/vAO55e6V6o2bPUdjS6QFkeXKs6njHJ+YEDuHhh4UifgEV2gO2adkYexnRDsy/
  57.103 +cUGRKTu3AvDgybKBM8q78UComXnZVKpzq2sNeU9ff9HDJVHjonUx93YOoGhHYfKO
  57.104 +1kSJc2wY9jOTCY/6ZimTAu+qzRYr6QFtSQa1i1qVz3iAVPphbbVePXxsFiuwBrGo
  57.105 +RuAHY2DClxDrYA9/ziTU/fp12VCyDhBu3T2ParLqAiBHOyn2dqVjQXqovkRqWp7h
  57.106 +nb8uX2O1z8lMsjX+DcYAlva2/+Dli+yAj9YQ7IWEwjMht0RS0kb6bji7Uv9ukm2y
  57.107 +zDzKXGfa1Ri3HYTZhMpPrxnoV+aoZQDi6QElg0aqu+P/UwmXWQ1SKpOJoMUNg9zb
  57.108 +Bj6A0glicHTo7yArtGXP0hliwY8fs169esXvs+kffogpmuZTk0MLq8fGmpDC81ut
  57.109 +/NJplorQRrYO3gg8ZPdMfMVHPtNB6cXpS4eusYwar3Hm8qzD2PoApqp7kqb6qjY6
  57.110 +pUDQAwNI6/aq71/P6EAenvGPBDGmFrVD6PIJ9TI7svd9pMD2XODzno/rRgutaAJw
  57.111 +CYrcZAbs44O/ord5sYuXkLjBR327myIja98sbcN+uHTdgIRn4u3ymwaN1RLSUI3/
  57.112 +9RSn3N6ypDa06b2JssDk8YFWfIMiQ5mnwbiGL1Axv6rbH8SI1DOJqDuKlVBFMmG7
  57.113 +wCsSYiSO6iB1Wm9cZkJ//3Y3328otMGBBviFK25ukMx3uKTjD5TYFd+8v/bZao8z
  57.114 +SY+rMRCaXytsul/D8QtwEczXsgv8jt+zGBhtPoSBMfoPAd4KliE4ma3XJpSQEPIs
  57.115 +YdCZPFZp/Mv/ftIaOR/QxV3zkdLAZAqy1kuZZCLg0MPOBhtJ7xOhI2SnvgOpCOvN
  57.116 +6e8JEEJsOr/Mzm5uFHdejZ78XX1y/Ha4gnD8mLy7qk/OVgT/+W6rMjL5U73rvIg5
  57.117 +5q4LxSI2oTcR/rJ51lXxWB+QJ/RskYh6x4AoLzWz1lCER2ChS7Q8fNLhEb9P
  57.118 +=GJ3e
  57.119 +-----END PGP MESSAGE-----
  57.120 +
  57.121 +--SlMATmhocAaxIBNTEgPcJilafyaUyA1G7--
    58.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    58.2 +++ b/test/test_mails/Unsigned from PGP_MIME_attach.eml	Thu Jun 07 09:05:46 2018 +0200
    58.3 @@ -0,0 +1,150 @@
    58.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    58.5 +X-Original-To: krista@gnunet.org
    58.6 +Delivered-To: krista@gnunet.org
    58.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    58.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 327781C00BE
    58.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:15 +0200 (CEST)
   58.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   58.11 +	id 050801C0383; Wed, 16 May 2018 09:49:15 +0200 (CEST)
   58.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   58.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id D5D1D1C038B
   58.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:14 +0200 (CEST)
   58.15 +Received: from vmmaildmz1.informatik.tu-muenchen.de (vmmaildmz1.informatik.tu-muenchen.de [131.159.0.87])
   58.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id CBBE51C0383
   58.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:14 +0200 (CEST)
   58.18 +Received: by vmmaildmz1.informatik.tu-muenchen.de (Postfix, from userid 109)
   58.19 +	id CA4411C2DAD; Wed, 16 May 2018 09:49:14 +0200 (CEST)
   58.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   58.21 +	vmmaildmz1.informatik.tu-muenchen.de
   58.22 +X-Spam-Level: 
   58.23 +X-Spam-Status: No, score=-3.6 required=7.0 tests=BAYES_00,ENCRYPTED_MESSAGE,
   58.24 +	RCVD_IN_DNSWL_LOW,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,TVD_SPACE_RATIO,
   58.25 +	UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   58.26 +Received: from vmmaildmz1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   58.27 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTP id 29AA91C2DAF
   58.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:13 +0200 (CEST)
   58.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [81.169.146.145])
   58.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   58.31 +	(No client certificate requested)
   58.32 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTPS id 1A23B1C2DAE
   58.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:13 +0200 (CEST)
   58.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   58.35 +Received: from mailin.rzone.de ([unix socket])
   58.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   58.37 +	Wed, 16 May 2018 09:48:50 +0200 (CEST)
   58.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   58.39 +Authentication-Results: strato.com; arc=none
   58.40 +Authentication-Results: strato.com; dkim=none
   58.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_signer@darthmama.org"
   58.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   58.43 +X-RZG-Expurgate: clean/normal
   58.44 +X-RZG-Expurgate-ID: 149500::1526456930-00006984-19EF2D04/0/0
   58.45 +X-Strato-MessageType: email
   58.46 +X-RZG-CLASS-ID: mi00
   58.47 +Received-SPF: none
   58.48 +	client-ip=131.159.0.8;
   58.49 +	helo="mail-out1.informatik.tu-muenchen.de";
   58.50 +	envelope-from="krista@pep-project.org";
   58.51 +	receiver=smtpin.rzone.de;
   58.52 +	identity=mailfrom;
   58.53 +Received: from mail-out1.informatik.tu-muenchen.de ([131.159.0.8])
   58.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   58.55 +	with ESMTPS id f06010u4G7moPus
   58.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   58.57 +	(Client did not present a certificate)
   58.58 +	for <integrity_test_recip@darthmama.org>;
   58.59 +	Wed, 16 May 2018 09:48:50 +0200 (CEST)
   58.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   58.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id AF9981042EC0B
   58.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 09:48:44 +0200 (CEST)
   58.63 +From: integrity_test_signer@darthmama.org
   58.64 +Subject: Unsigned from PGP/MIME
   58.65 +To: integrity_test_recip@darthmama.org
   58.66 +Openpgp: preference=signencrypt
   58.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   58.68 +Message-ID: <6bc15b8b-8778-bfce-3b39-e8be8ea2c0f1@pep-project.org>
   58.69 +Date: Wed, 16 May 2018 09:48:44 +0200
   58.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   58.71 + Thunderbird/52.7.0
   58.72 +MIME-Version: 1.0
   58.73 +Content-Type: multipart/encrypted;
   58.74 + protocol="application/pgp-encrypted";
   58.75 + boundary="zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992"
   58.76 +
   58.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   58.78 +--zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992
   58.79 +Content-Type: application/pgp-encrypted
   58.80 +Content-Description: PGP/MIME version identification
   58.81 +
   58.82 +Version: 1
   58.83 +
   58.84 +--zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992
   58.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   58.86 +Content-Description: OpenPGP encrypted message
   58.87 +Content-Disposition: inline; filename="encrypted.asc"
   58.88 +
   58.89 +-----BEGIN PGP MESSAGE-----
   58.90 +
   58.91 +hQEMA7q5KACkWjQlAQgA2G39AYioFWXQzvOEcbCCOqRPfXCM0Rf0Z8n1E+VdkAnh
   58.92 +crSNhyki1xLS2INETt/MMfjyzqT4YDGH28GZx/JLRK8qk48CGU9f/jsSQv27ibiB
   58.93 +jWJsG3QlOa5cvF7dEF6hmn7xYpBCycHPk1vJ8mxXKcP/TxZtwWZf9P7CHCHpJdbV
   58.94 +tbWUlUZbea4okSs4WuUETDCPGLbzRBCzBQYoadV4Z/3FuorUVCfBIPq28AryGjdl
   58.95 +m4JpzOlj0J19tALOfBz45Wo+Lmc38e6cAugLoFREJhv9HrUgq6mr/7GHOqgVJYXL
   58.96 +KPub8h1vzUsMjvnHo/vQaQuPdl3HI5HZJmtzjTO1W4UBDAOoEzPD1TjKdAEH/R93
   58.97 +ShsSEr3aluEkIcqTQPd1FWWtSKzXXamnAlUtrnBz7jDMCvNF8ke+cAdlNIuHnVso
   58.98 +EhvfxYvYnsaV6oGzRPebEua7Yq9eGc7C7FjwchyGk/gN56ii+rkms2zeuDGfR1k7
   58.99 +dBpP80b20Ok3j6wZXQiMxd+G+dUO4i3HQhnnfLgSONsMmj3mROKztRPAMvx21IV8
  58.100 +GLr4OkysZ+LBiPJimKSP00Zaw4AOnYkET2RvQCKRV5cMQk5fMyrb/EfR5Im9wlku
  58.101 +t1YvXIjvZNUG6iA8BIAOkUKrQQFHCOXP9pYRU+ent3BC8bj2bv2/Leaom1PFWUhA
  58.102 +22YXV+7HhnhjC7SCftPS6wGh8qGR1AaGH9/KFXM5cIebuSpVLIRrgsv6pf2OWHvF
  58.103 +PFho7nTM5JFG++oqlBxy3sZE/H17pTjsi3Uj7Ny5+HxSP+oUmeKCdLg2kVH4vwOt
  58.104 +cCTtvHepR1Q3T4ydraTW0GldIRcBHP0HzHvzpgIYW1WH7KhKoIvyU8MImuF7I7tp
  58.105 +fG/R/CIJ+kOomcxZA6QYtOXXsNGOSX6AQDktBwxK0mSqw5OhzuLmj/4mKwJ+tXQi
  58.106 +57JSbWQ6g6RpVhHQMJPP0PKRC1K7RD4RnJ1h6yc1bLnrLA3xtl+XG90V85wdDBSj
  58.107 +v6PSyhYqFKwjV5PQBe2cQNgFgH5aHBhT5zV3jGd7YdXkFoaiseU0BJWfw44iF9az
  58.108 +ESOBuk/3eKkvdlEZRtsK6plhDsk6P4JaKP8n0fKD7sXzXrwdwtIGJ9gU3GH7MM1+
  58.109 +S+uE5RYfA3X0RGBMMwtx+oxph8txH8I4YtBw+GYMQv05PLichtKhASWFzpxqDMgP
  58.110 +5MWd7Epf/j940DRRyp0S1cAY2Y8Mg8Sq8Zqhcs8jKXdTDyFNxWLSA0RFxrUgv3XN
  58.111 +Ov0QzEJesTUr5fgkhTqMefBRiC2PBLWVuBHWZHEHLh944qAxZAW25VAxiUKIJNT6
  58.112 +j6aU5vtC6sKQyaz93pvTvH/jx1QEiWNyoXfyOrysHAFqnRNrgtzJB63ofNd2WTzC
  58.113 +vAvytaiPWip04pIE53Uawg1ioa64FLE28OZOCTyZnyG+jdfXgwkc6MtkOnocPTxt
  58.114 +d8XSjAGta8083uvJkeCkNXL4gz9EVlN4NL5OGS7FySgNQ44cUVPnVG0uKdA2lcG3
  58.115 +OCNkw99S24SyNZnaN8bRNZc8BrXDxetm+ACdDqBeA0xfCS88YYVlTSwA2dz4oqLk
  58.116 +FXWnYUVEFhTP21v4/Rd3zTFo2dmwAwYQjZHKiTSwwhndM6MbKx3sNpLiGUVKvHZn
  58.117 +S5NCqTbY7dEtuvM14Scy/xdqGiZ1R6kX3UkI5foYEAB3c0VdnzfXe206Q3hiRWe9
  58.118 +Pk12n5DytcL8XRhjJBkeysKWoO1Jbrc0Vrk6krzxPwefTa2HULn5ew89x/y43iEb
  58.119 +jdc+VyI19xmxDAp/OiLLX1ASst+Cr1j3Jw+mnZq7KKelFj1fmLxmoZmDW/EJHlxI
  58.120 +7w4WasHS5vk2P7BAH2Qf1mco5z2e5OpugZTwJi7YsaOm/UEWRfexInWxaKKPtUaD
  58.121 +8RfV8gH8TxpNJAWV7Yt6KxgR3KWNmk3ybKAzBD6s6sJqAHSGJvuAnv3MjReuZHLY
  58.122 +75RaIwUZ2mHyDfULrttGq+gM3NhTf8n4JiK6CWMrlEBFHQcO41287lTbgFXf2FXe
  58.123 +ff8Br8iwpwNyPKQykDva6x7QFqOGH+Xs5sySkwTWBMIZbWSctzVCp+3Sa7Tvr2AY
  58.124 +m1bd4ERNaLu2YetkrFVTOEJ4SSbqKNOiM4pTXkbuYZaCqo1wN8DOzgI+qLY7AO4d
  58.125 +iWe/0Np8ppBSdmkFDp+UuVgrxkJdEEk1itxn7pu6e9JLmFuf9Rgfekmpja0B6Mxl
  58.126 +EZiQJttR4c7UeEipEWLYdb0jpJRDxwdYurSHKuFEFjen4wiCnpC3Dvl7oFs5fE/6
  58.127 +w6vu5jqgBIHxjwe3vLBjBQFTL3J8bsw+b54PnX/DO3O/HeF/BKolr+zUisT8hvql
  58.128 +Thj6fK788sW9vQdWB1OHv2wZkiVFjRLSceve0eFUk5H+rBz9lI2zZmnqa90pxIKO
  58.129 +snk6LRS7YLUPCrr0GuxkTMN+pwyyc5ORARzSv6M73UBxHoTQOxr62WwfAoMpfZ64
  58.130 +VDk1we1YuhzxHTRbFZLZ+Bi9n5WLfedY2DIa0F1V3hso8lusUnMrDeyS19T0WNFl
  58.131 +JPBZ9/3gsHB7SCFPv2m3mGbHQffEyHzzr41TrJU9B6EKyE4ncCTlmkYdrAOUBmVx
  58.132 +lN5zMHn5mlhMliJqv53/cB2OxboKQtje9NXxi92ftWvzrfX6gkYqt0cf3xS+ivqD
  58.133 +EAlEslBqoUr7/4PeQkjDVtTlNJRpL4e9fz6cGwVRZjMOcRZOII62t+A8ya1gI/WL
  58.134 +49Y5lr+Sp9ObXUwM0DiAPN8EVuY7xL9mjc6zawv5H+GGt01xnbSJjqhDiYRiRtjx
  58.135 +V1d49NdkHafJ5w+evvLynYvzkkCm5LD+vxgO4z0b/QZw+lxmrA3xT2amIiz53FWz
  58.136 +8UWiRK7JgG/mdoLuzK3FRQavM2zu0z/vYdjOPk8F9TiLEmn2SOTE+dYhtyfrzqgw
  58.137 +UxRgUTLkJDjSTl0ZL4ZLDc11r6G0pFB6U3sAoHPGvnITVkdS4oAI8WkGZQFpS7oD
  58.138 +YDAZ4El9L4LCSagU2lDYr2U2lXZ+B503+0yJJfSzgLh17eQPEEbUuFuMzZQzJ/+z
  58.139 +7Ic8XFlwe73X5D6GR0EnC6Vy9DJGHWQARUY6h3x8LY6uyM5UMgWoejodfig22uwx
  58.140 +DIbLDM9vRnpd7VSr0nmREYqNFoUzsRPf8REzgKk1sU/Wl+ocPSkE+FLh5p92Y4cv
  58.141 +k06i8jlm2SL8siUCt09rKepWZqSPpytwifo1T4Tn2ncjYcngi44jUmQybYYOkrdB
  58.142 ++1o8ZN59j9ceCvVYQHU7AG4EsHQ3LQnhzAN3RvnLl+iam2S5eWSKsOpZ5c76hwUi
  58.143 +5WjIKeumzZyd81OOjV8RBofL0q+m10naW09L5bAkQNhO0g8sT64HSp4fk179wJmE
  58.144 +yMBlhGGbcBwFcnIceSG6Cvjk249vk2FmPqC9OagqggejmDt5fyJo8QJ55sp4jFMT
  58.145 +wCAE3woX1ZSJNAEEfYAwD9urATqjAl3oUV+LFNRVUA2OcmDFY9683BmB6ZW+gEhM
  58.146 +SbaART7zSuQhRbnKmV4UIyxC/KiGJrG12ZdyeNN+4Y8jL3rhoJCMrbW8aIamRXaJ
  58.147 +jXGU1lJbDDGvzIg6a4RtGG30lAIbzpyHtlOYOeBBZPtkRNzIwTjpe75sEwZvFmay
  58.148 +1KQUBUt3RxwQDDZeMoSAwpDBlI4aP+UOHjj3NMaaR69eGcJqT6iKBjJjTia84Lm8
  58.149 +CMIqbEwQIB+8vJrZozgFL9TgWsPy9mLi3czyonWMDwhd7g==
  58.150 +=7Nv1
  58.151 +-----END PGP MESSAGE-----
  58.152 +
  58.153 +--zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992--
    59.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    59.2 +++ b/test/test_mails/Unsigned from PGP_MIME_attach_corrupted.eml	Thu Jun 07 09:05:46 2018 +0200
    59.3 @@ -0,0 +1,150 @@
    59.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    59.5 +X-Original-To: krista@gnunet.org
    59.6 +Delivered-To: krista@gnunet.org
    59.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    59.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 327781C00BE
    59.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:15 +0200 (CEST)
   59.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   59.11 +	id 050801C0383; Wed, 16 May 2018 09:49:15 +0200 (CEST)
   59.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   59.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id D5D1D1C038B
   59.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:14 +0200 (CEST)
   59.15 +Received: from vmmaildmz1.informatik.tu-muenchen.de (vmmaildmz1.informatik.tu-muenchen.de [131.159.0.87])
   59.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id CBBE51C0383
   59.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:14 +0200 (CEST)
   59.18 +Received: by vmmaildmz1.informatik.tu-muenchen.de (Postfix, from userid 109)
   59.19 +	id CA4411C2DAD; Wed, 16 May 2018 09:49:14 +0200 (CEST)
   59.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   59.21 +	vmmaildmz1.informatik.tu-muenchen.de
   59.22 +X-Spam-Level: 
   59.23 +X-Spam-Status: No, score=-3.6 required=7.0 tests=BAYES_00,ENCRYPTED_MESSAGE,
   59.24 +	RCVD_IN_DNSWL_LOW,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,TVD_SPACE_RATIO,
   59.25 +	UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   59.26 +Received: from vmmaildmz1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   59.27 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTP id 29AA91C2DAF
   59.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:13 +0200 (CEST)
   59.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [81.169.146.145])
   59.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   59.31 +	(No client certificate requested)
   59.32 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTPS id 1A23B1C2DAE
   59.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:49:13 +0200 (CEST)
   59.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   59.35 +Received: from mailin.rzone.de ([unix socket])
   59.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   59.37 +	Wed, 16 May 2018 09:48:50 +0200 (CEST)
   59.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   59.39 +Authentication-Results: strato.com; arc=none
   59.40 +Authentication-Results: strato.com; dkim=none
   59.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_signer@darthmama.org"
   59.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   59.43 +X-RZG-Expurgate: clean/normal
   59.44 +X-RZG-Expurgate-ID: 149500::1526456930-00006984-19EF2D04/0/0
   59.45 +X-Strato-MessageType: email
   59.46 +X-RZG-CLASS-ID: mi00
   59.47 +Received-SPF: none
   59.48 +	client-ip=131.159.0.8;
   59.49 +	helo="mail-out1.informatik.tu-muenchen.de";
   59.50 +	envelope-from="krista@pep-project.org";
   59.51 +	receiver=smtpin.rzone.de;
   59.52 +	identity=mailfrom;
   59.53 +Received: from mail-out1.informatik.tu-muenchen.de ([131.159.0.8])
   59.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   59.55 +	with ESMTPS id f06010u4G7moPus
   59.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   59.57 +	(Client did not present a certificate)
   59.58 +	for <integrity_test_recip@darthmama.org>;
   59.59 +	Wed, 16 May 2018 09:48:50 +0200 (CEST)
   59.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   59.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id AF9981042EC0B
   59.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 09:48:44 +0200 (CEST)
   59.63 +From: integrity_test_signer@darthmama.org
   59.64 +Subject: Unsigned from PGP/MIME
   59.65 +To: integrity_test_recip@darthmama.org
   59.66 +Openpgp: preference=signencrypt
   59.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   59.68 +Message-ID: <6bc15b8b-8778-bfce-3b39-e8be8ea2c0f1@pep-project.org>
   59.69 +Date: Wed, 16 May 2018 09:48:44 +0200
   59.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   59.71 + Thunderbird/52.7.0
   59.72 +MIME-Version: 1.0
   59.73 +Content-Type: multipart/encrypted;
   59.74 + protocol="application/pgp-encrypted";
   59.75 + boundary="zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992"
   59.76 +
   59.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   59.78 +--zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992
   59.79 +Content-Type: application/pgp-encrypted
   59.80 +Content-Description: PGP/MIME version identification
   59.81 +
   59.82 +Version: 1
   59.83 +
   59.84 +--zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992
   59.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   59.86 +Content-Description: OpenPGP encrypted message
   59.87 +Content-Disposition: inline; filename="encrypted.asc"
   59.88 +
   59.89 +-----BEGIN PGP MESSAGE-----
   59.90 +
   59.91 +hQEMA7q5KACkWjQlAQgA2G39AYioFWXQzvOEcbCCOqRPfXCM0Rf0Z8n1E+VdkAnh
   59.92 +crSNhyki1xLS2INETt/MMfjyzqT4YDGH28GZx/JLRK8qk48CGU9f/jsSQv27ibiB
   59.93 +jWJsG3QlOa5cvF7dEF6hmn7xYpBCycHPk1vJ8mxXKcP/TxZtwWZf9P7CHCHpJdbV
   59.94 +tbWUlUZbea4okSs4WuUETDCPGLbzRBCzBQYoadV4Z/3FuorUVCfBIPq28AryGjdl
   59.95 +m4JpzOlj0J19tALOfBz45Wo+Lmc38e6cAugLoFREJhv9HrUgq6mr/7GHOqgVJYXL
   59.96 +KPub8h1vzUsMjvnHo/vQaQuPdl3HI5HZJmtzjTO1W4UBDAOoEzPD1TjKdAEH/R93
   59.97 +ShsSEr3aluEkIcqTQPd1FWWtSKzXXamnAlUtrnBz7jDMCvNF8ke+cAdlNIuHnVso
   59.98 +EhvfxYvYnsaV6oGzRPebEua7Yq9eGc7C7FjwchyGk/gN56ii+rkms2zeuDGfR1k7
   59.99 +dBpP80b20Ok3j6wZXQiMxd+G+dUO4i3HQhnnfLgSONsMmj3mROKztRPAMvx21IV8
  59.100 +GLr4OkysZ+LBiPJimKSP00Zaw4AOnYkET2RvQCKRV5cMQk5fMyrb/EfR5Im9wlku
  59.101 +t1YvXIjvZNUG6iA8BIAOkUKrQQFHCOXP9pYRU+ent3BC8bj2bv2/Leaom1PFWUhA
  59.102 +22YXV+7HhnhjC7SCftPS6wGh8qGR1AaGH9/KFXM5cIebuSpVLIRrgsv6pf2OWHvF
  59.103 +PFho7nTM5JFG++oqlBxy3sZE/H17pTjsi3Uj7Ny5+HxSP+oUmeKCdLg2kVH4vwOt
  59.104 +cCTtvHepR1Q3T4ydraTW0GldIRcBHP0HzHvzpgIYW1WH7KhKoIvyU8MImuF7I7tp
  59.105 +fG/R/CIJ+kOomcxZA6QYtOXXsNGOSX6AQDktBwxK0mSqw5OhzuLmj/4mKwJ+tXQi
  59.106 +57JSbWQ6g6RpVhHQMJPP0PKRC1K7RD4RnJ1h6yc1bLnrLA3xtl+XG90V85wdDBSj
  59.107 +v6PSyhYqFKwjV5PQBe2cQNgFgH5aHBhT5zV3jGd7YdXkFoaiseU0BJWfw44iF9az
  59.108 +ESOBuk/3eKkvdlEZRtsK6plhDsk6P4JaKP8n0fKD7sXzXrwdwtIGJ9gU3GH7MM1+
  59.109 +S+uE5RYfA3X0RGBMMwtx+oxph8txH8I4YtBw+GYMQv05PLichtKhASWFzpxqDMgP
  59.110 +5MWd7Epf/j940DRRyp0S1cAY2Y8Mg8Sq8Zqhcs8jKXdTDyFNxWLSA0RFxrUgv3XN
  59.111 +Ov0QzEJesTUr5fgkhTqMefBRiC2PBLWVuBHWZHEHLh944qAxZAW25VAxiUKIJNT6
  59.112 +j6aU5vtC6sKQyaz93pvTvH/jx1QEiWNyoXfyOrysHAFqnRNrgtzJB63ofNd2WTzC
  59.113 +vAvytaiPWip04pIE53Uawg1ioa64FLE28OZOCTyZnyG+jdfXgwkc6MtkOnocPTxt
  59.114 +d8XSjAGta8083uvJkeCkNXL4gz9EVlN4NL5OGS7FySgNQ44cUVPnVG0uKdA2lcG3
  59.115 +OCNkw99S24SyNZnaN8bRNZc8BrXDxetm+ACdDqBeA0xfCS88YYVlTSwA2dz4oqLk
  59.116 +FXWnYUVEFhTP21v4/Rd3zTFo2dmwAwYQjZHKiTSwwhndM6MbKx3sNpLiGUVKvHZn
  59.117 +S5NCqTbY7dEtuvM14Scy/xdqGiZ1R6kX3UkI5foYEAB3c0VdnzfXe206Q3hiRWe9
  59.118 +Pk12n5DytcL8XRhjJBkeysKWoO1Jbrc0Vrk6krzxPwefTa2HULn5ew89x/y43iEb
  59.119 +jdc+VyI19xmxDAp/OiLLX1ASst+Cr1j3Jw+mnZq7KKelFj1fmLxmoZmDW/EJHlxI
  59.120 +7w4WasHS5vk2P7BAH2Qf1mco5z2e5OpugZTwJi7YsaOm/UEWRfexInWxaKKPtUaD
  59.121 +8RfV8gH8TxpNJAWV7Yt6KxgR3KWNmk3ybKAzBD6s6sJqAHSGJvuAnv3MjReuZHLY
  59.122 +75RaIwUZ2mHyDfULrttGq+gM3NhTf8n4JiK6CWMrlEBFHQcO41287lTbgFXf2FXe
  59.123 +ff8Br8iwpwNyPKQykDva6x7QFqOGH+Xs5sySkwTWBMIZbWSctzVCp+3Sa7Tvr2AY
  59.124 +m1bd4ERNaLu2YetkrFVTOEJ4SSbqKNOiM4pTXkbuYZaCqo1wN8DOzgI+qLY7AO4d
  59.125 +snk6LRS7YLUPCrr0GuxkTMN+pwyyc5ORARzSv6M73UBxHoTQOxr62WwfAoMpfZ64
  59.126 +iWe/0Np8ppBSdmkFDp+UuVgrxkJdEEk1itxn7pu6e9JLmFuf9Rgfekmpja0B6Mxl
  59.127 +EZiQJttR4c7UeEipEWLYdb0jpJRDxwdYurSHKuFEFjen4wiCnpC3Dvl7oFs5fE/6
  59.128 +w6vu5jqgBIHxjwe3vLBjBQFTL3J8bsw+b54PnX/DO3O/HeF/BKolr+zUisT8hvql
  59.129 +Thj6fK788sW9vQdWB1OHv2wZkiVFjRLSceve0eFUk5H+rBz9lI2zZmnqa90pxIKO
  59.130 +VDk1we1YuhzxHTRbFZLZ+Bi9n5WLfedY2DIa0F1V3hso8lusUnMrDeyS19T0WNFl
  59.131 +JPBZ9/3gsHB7SCFPv2m3mGbHQffEyHzzr41TrJU9B6EKyE4ncCTlmkYdrAOUBmVx
  59.132 +lN5zMHn5mlhMliJqv53/cB2OxboKQtje9NXxi92ftWvzrfX6gkYqt0cf3xS+ivqD
  59.133 +EAlEslBqoUr7/4PeQkjDVtTlNJRpL4e9fz6cGwVRZjMOcRZOII62t+A8ya1gI/WL
  59.134 +49Y5lr+Sp9ObXUwM0DiAPN8EVuY7xL9mjc6zawv5H+GGt01xnbSJjqhDiYRiRtjx
  59.135 +V1d49NdkHafJ5w+evvLynYvzkkCm5LD+vxgO4z0b/QZw+lxmrA3xT2amIiz53FWz
  59.136 +8UWiRK7JgG/mdoLuzK3FRQavM2zu0z/vYdjOPk8F9TiLEmn2SOTE+dYhtyfrzqgw
  59.137 +UxRgUTLkJDjSTl0ZL4ZLDc11r6G0pFB6U3sAoHPGvnITVkdS4oAI8WkGZQFpS7oD
  59.138 +YDAZ4El9L4LCSagU2lDYr2U2lXZ+B503+0yJJfSzgLh17eQPEEbUuFuMzZQzJ/+z
  59.139 +7Ic8XFlwe73X5D6GR0EnC6Vy9DJGHWQARUY6h3x8LY6uyM5UMgWoejodfig22uwx
  59.140 +DIbLDM9vRnpd7VSr0nmREYqNFoUzsRPf8REzgKk1sU/Wl+ocPSkE+FLh5p92Y4cv
  59.141 +k06i8jlm2SL8siUCt09rKepWZqSPpytwifo1T4Tn2ncjYcngi44jUmQybYYOkrdB
  59.142 ++1o8ZN59j9ceCvVYQHU7AG4EsHQ3LQnhzAN3RvnLl+iam2S5eWSKsOpZ5c76hwUi
  59.143 +5WjIKeumzZyd81OOjV8RBofL0q+m10naW09L5bAkQNhO0g8sT64HSp4fk179wJmE
  59.144 +yMBlhGGbcBwFcnIceSG6Cvjk249vk2FmPqC9OagqggejmDt5fyJo8QJ55sp4jFMT
  59.145 +wCAE3woX1ZSJNAEEfYAwD9urATqjAl3oUV+LFNRVUA2OcmDFY9683BmB6ZW+gEhM
  59.146 +SbaART7zSuQhRbnKmV4UIyxC/KiGJrG12ZdyeNN+4Y8jL3rhoJCMrbW8aIamRXaJ
  59.147 +jXGU1lJbDDGvzIg6a4RtGG30lAIbzpyHtlOYOeBBZPtkRNzIwTjpe75sEwZvFmay
  59.148 +1KQUBUt3RxwQDDZeMoSAwpDBlI4aP+UOHjj3NMaaR69eGcJqT6iKBjJjTia84Lm8
  59.149 +CMIqbEwQIB+8vJrZozgFL9TgWsPy9mLi3czyonWMDwhd7g==
  59.150 +=7Nv1
  59.151 +-----END PGP MESSAGE-----
  59.152 +
  59.153 +--zj2GfTMbnKWrFx27CNTQKfWO4zsQJC992--
    60.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    60.2 +++ b/test/test_mails/Unsigned from PGP_MIME_noattach.eml	Thu Jun 07 09:05:46 2018 +0200
    60.3 @@ -0,0 +1,111 @@
    60.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    60.5 +X-Original-To: krista@gnunet.org
    60.6 +Delivered-To: krista@gnunet.org
    60.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    60.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 692DD1C00BE
    60.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   60.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   60.11 +	id 39A691C037C; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   60.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   60.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 158221C0378
   60.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   60.15 +Received: from vmmaildmz1.informatik.tu-muenchen.de (vmmaildmz1.informatik.tu-muenchen.de [131.159.0.87])
   60.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 00CDE1C0376
   60.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   60.18 +Received: by vmmaildmz1.informatik.tu-muenchen.de (Postfix, from userid 109)
   60.19 +	id F34B21C2DAF; Wed, 16 May 2018 09:51:49 +0200 (CEST)
   60.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   60.21 +	vmmaildmz1.informatik.tu-muenchen.de
   60.22 +X-Spam-Level: 
   60.23 +X-Spam-Status: No, score=-3.2 required=7.0 tests=AWL,BAYES_00,
   60.24 +	ENCRYPTED_MESSAGE,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,TVD_SPACE_RATIO,
   60.25 +	UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   60.26 +Received: from vmmaildmz1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   60.27 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTP id 663211C2DAE
   60.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:48 +0200 (CEST)
   60.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [85.215.255.3])
   60.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   60.31 +	(No client certificate requested)
   60.32 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTPS id 556EA1C2DAD
   60.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:48 +0200 (CEST)
   60.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   60.35 +Received: from mailin.rzone.de ([unix socket])
   60.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   60.37 +	Wed, 16 May 2018 09:51:23 +0200 (CEST)
   60.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   60.39 +Authentication-Results: strato.com; arc=none
   60.40 +Authentication-Results: strato.com; dkim=none
   60.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_signer@darthmama.org"
   60.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   60.43 +X-RZG-Expurgate: clean/normal
   60.44 +X-RZG-Expurgate-ID: 149500::1526457083-00006E4E-71885B6C/0/0
   60.45 +X-Strato-MessageType: email
   60.46 +X-RZG-CLASS-ID: mi00
   60.47 +Received-SPF: none
   60.48 +	client-ip=131.159.0.8;
   60.49 +	helo="mail-out1.informatik.tu-muenchen.de";
   60.50 +	envelope-from="krista@pep-project.org";
   60.51 +	receiver=smtpin.rzone.de;
   60.52 +	identity=mailfrom;
   60.53 +Received: from mail-out1.informatik.tu-muenchen.de ([131.159.0.8])
   60.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   60.55 +	with ESMTPS id p09538u4G7pNmnp
   60.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   60.57 +	(Client did not present a certificate)
   60.58 +	for <integrity_test_recip@darthmama.org>;
   60.59 +	Wed, 16 May 2018 09:51:23 +0200 (CEST)
   60.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   60.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id DB0201042EC0B
   60.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 09:51:17 +0200 (CEST)
   60.63 +From: integrity_test_signer@darthmama.org
   60.64 +Subject: Unsigned from PGP/MIME
   60.65 +To: integrity_test_recip@darthmama.org
   60.66 +Openpgp: preference=signencrypt
   60.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   60.68 +Message-ID: <6d6426b5-f170-a3c7-230e-c4037e4b9ab3@pep-project.org>
   60.69 +Date: Wed, 16 May 2018 09:51:17 +0200
   60.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   60.71 + Thunderbird/52.7.0
   60.72 +MIME-Version: 1.0
   60.73 +Content-Type: multipart/encrypted;
   60.74 + protocol="application/pgp-encrypted";
   60.75 + boundary="kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri"
   60.76 +
   60.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   60.78 +--kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri
   60.79 +Content-Type: application/pgp-encrypted
   60.80 +Content-Description: PGP/MIME version identification
   60.81 +
   60.82 +Version: 1
   60.83 +
   60.84 +--kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri
   60.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   60.86 +Content-Description: OpenPGP encrypted message
   60.87 +Content-Disposition: inline; filename="encrypted.asc"
   60.88 +
   60.89 +-----BEGIN PGP MESSAGE-----
   60.90 +
   60.91 +hQEMA7q5KACkWjQlAQf+KGiO/fA71s4Dahe7LsSBJKNx3ECL72Ha9VQQXODw5So2
   60.92 +U3xy9k/Qp0X1Rf2i/yjtgSAXrDnl0qqRtyLL2466xWotmz1N2DvwusTlQq6sLwlv
   60.93 +inYaKms/k/R2DBNNReciy/95jWT956XjcrWhX6RMHspPXuSlQPuLuSGCekYAwKbn
   60.94 +aRN90BJtWiGZwe82ZVP8OapR9OxMeokPaMyt0bTf0i1lcKP43bC+fyIrjnYble6Q
   60.95 +98LWx9xdqvhF69hSFRyXWycT4+v9sgHTo5kiDDVqP4+7BF9pBH4FcKvDfb9K4URK
   60.96 +EyyBGGSz+3wNEz/HW2RTJgRnZVt1R9tjGqChWiYqbIUBDAOoEzPD1TjKdAEIALgp
   60.97 +VGX4BgL3CgUq2VEpdkAc8/73jcNFeUHeyZXY0c116jzodlPfWzgTYnVKh6jyJUzk
   60.98 +A4tomfZo4ldPz1VMnlmrKArTyOvBYCJqMInLL+XTNqoG/CGHULvxGukm7j3Q9HNz
   60.99 +q9nsWcvY26wPPWpH7beizC8fQdcdbMUT5+qykceUgdSVgolNoWKtvTG4xm2yDWwP
  60.100 +8LLPvXybS/RwlBEoe21UzS9RUPx4W17vW3W8FNR2sJurWpvj3PAKl4BJ/vCunbFK
  60.101 +DSIxekYsBUb2oIWy+9vpz45LuVPLc6+K57GoRv2eE2ld+K9K6DmVv95V/1ndufYJ
  60.102 +JWAZ3GdOtWvKQrrulf3SwNUBoVM0Q9SjYoTbuyTWAXAUYIV0yz1a40MrWkSc5iZr
  60.103 +qJxNcHtKTzx7lMaF95Qds1nFi5gqDx1oLDAXNSl99Gr9JQSboFFneb0nnX63g3A2
  60.104 +woBrs/C4K7FpWAJymtTrlyZATwup06IHQyH1xGctPaO9/j1qHFPeO/1WpePnJ19h
  60.105 +Xwwg76PVmmorBsLxqKqjZxRIKmv+0o8qYJxppjh5qEnYTrCwfF45Tu9zOLt9u4tg
  60.106 +GDQf9MVQFlZsuO5m7ZbQaWVUqHuC+NSIL5G1ed7gSp3H3QBWC9S1qTigcjPZFm5e
  60.107 +Eol2v8Dg/j0DfCf6s4ybzf7YvikVft5rkgWBmkSrIfR5PY1XdPjA7WsN7HzWiNo/
  60.108 +BcfpBu7WdbUyWLR/QJvaVeUFWAZB0o2YnFMm/p2z0uB+b2aaRCM8al5oANjlH/ra
  60.109 +plyoIwGvfWwTuu9Mz9yyn8YHJAGqIzTiHmqoPogw5ZTbabViKkCaWgo8cJ06YspP
  60.110 +pLVoSpsTWdP+gNeARj4DQGKm2ykmriEdqOlhfHSA10ZB74dGUsM=
  60.111 +=5fnF
  60.112 +-----END PGP MESSAGE-----
  60.113 +
  60.114 +--kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri--
    61.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    61.2 +++ b/test/test_mails/Unsigned from PGP_MIME_noattach_corrupted.eml	Thu Jun 07 09:05:46 2018 +0200
    61.3 @@ -0,0 +1,110 @@
    61.4 +Return-Path: <SRS0=Yoy/Rz=ID=pep-project.org=krista@srs.smtpin.rzone.de>
    61.5 +X-Original-To: krista@gnunet.org
    61.6 +Delivered-To: krista@gnunet.org
    61.7 +Received: from vmmailrelay1.informatik.tu-muenchen.de (mailrelay1.informatik.tu-muenchen.de [131.159.254.14])
    61.8 +	by sam.net.in.tum.de (Postfix) with ESMTP id 692DD1C00BE
    61.9 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   61.10 +Received: by vmmailrelay1.informatik.tu-muenchen.de (Postfix, from userid 109)
   61.11 +	id 39A691C037C; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   61.12 +Received: from vmmailrelay1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   61.13 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 158221C0378
   61.14 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   61.15 +Received: from vmmaildmz1.informatik.tu-muenchen.de (vmmaildmz1.informatik.tu-muenchen.de [131.159.0.87])
   61.16 +	by vmmailrelay1.informatik.tu-muenchen.de (Postfix) with ESMTP id 00CDE1C0376
   61.17 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:50 +0200 (CEST)
   61.18 +Received: by vmmaildmz1.informatik.tu-muenchen.de (Postfix, from userid 109)
   61.19 +	id F34B21C2DAF; Wed, 16 May 2018 09:51:49 +0200 (CEST)
   61.20 +X-Spam-Checker-Version: SpamAssassin 3.4.0-tuminfo_1 (2014-02-07) on
   61.21 +	vmmaildmz1.informatik.tu-muenchen.de
   61.22 +X-Spam-Level: 
   61.23 +X-Spam-Status: No, score=-3.2 required=7.0 tests=AWL,BAYES_00,
   61.24 +	ENCRYPTED_MESSAGE,SPF_HELO_PASS,TVD_RCVD_SPACE_BRACKET,TVD_SPACE_RATIO,
   61.25 +	UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.0-tuminfo_1
   61.26 +Received: from vmmaildmz1.informatik.tu-muenchen.de (localhost [127.0.0.1])
   61.27 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTP id 663211C2DAE
   61.28 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:48 +0200 (CEST)
   61.29 +Received: from mi4-p00-ob.smtp.rzone.de (mi4-p00-ob.smtp.rzone.de [85.215.255.3])
   61.30 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
   61.31 +	(No client certificate requested)
   61.32 +	by vmmaildmz1.informatik.tu-muenchen.de (Postfix) with ESMTPS id 556EA1C2DAD
   61.33 +	for <krista@gnunet.org>; Wed, 16 May 2018 09:51:48 +0200 (CEST)
   61.34 +X-RZG-FWD-BY: integrity_test_recip@darthmama.org
   61.35 +Received: from mailin.rzone.de ([unix socket])
   61.36 +	by mailin.rzone.de (RZmta 43.8) with LMTPA;
   61.37 +	Wed, 16 May 2018 09:51:23 +0200 (CEST)
   61.38 +Authentication-Results: strato.com; dmarc=none header.from=darthmama.org
   61.39 +Authentication-Results: strato.com; arc=none
   61.40 +Authentication-Results: strato.com; dkim=none
   61.41 +Authentication-Results: strato.com; dkim-adsp=none header.from="integrity_test_signer@darthmama.org"
   61.42 +Authentication-Results: strato.com; spf=none smtp.mailfrom="krista@pep-project.org"
   61.43 +X-RZG-Expurgate: clean/normal
   61.44 +X-RZG-Expurgate-ID: 149500::1526457083-00006E4E-71885B6C/0/0
   61.45 +X-Strato-MessageType: email
   61.46 +X-RZG-CLASS-ID: mi00
   61.47 +Received-SPF: none
   61.48 +	client-ip=131.159.0.8;
   61.49 +	helo="mail-out1.informatik.tu-muenchen.de";
   61.50 +	envelope-from="krista@pep-project.org";
   61.51 +	receiver=smtpin.rzone.de;
   61.52 +	identity=mailfrom;
   61.53 +Received: from mail-out1.informatik.tu-muenchen.de ([131.159.0.8])
   61.54 +	by smtpin.rzone.de (RZmta 43.8 OK)
   61.55 +	with ESMTPS id p09538u4G7pNmnp
   61.56 +	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA))
   61.57 +	(Client did not present a certificate)
   61.58 +	for <integrity_test_recip@darthmama.org>;
   61.59 +	Wed, 16 May 2018 09:51:23 +0200 (CEST)
   61.60 +Received: from [192.168.178.22] (ip5b439605.dynamic.kabel-deutschland.de [91.67.150.5])
   61.61 +	by services.sec.in.tum.de (Postfix) with ESMTPSA id DB0201042EC0B
   61.62 +	for <integrity_test_recip@darthmama.org>; Wed, 16 May 2018 09:51:17 +0200 (CEST)
   61.63 +From: integrity_test_signer@darthmama.org
   61.64 +Subject: Unsigned from PGP/MIME
   61.65 +To: integrity_test_recip@darthmama.org
   61.66 +Openpgp: preference=signencrypt
   61.67 +Organization: =?UTF-8?B?cOKJoXA=?=
   61.68 +Message-ID: <6d6426b5-f170-a3c7-230e-c4037e4b9ab3@pep-project.org>
   61.69 +Date: Wed, 16 May 2018 09:51:17 +0200
   61.70 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   61.71 + Thunderbird/52.7.0
   61.72 +MIME-Version: 1.0
   61.73 +Content-Type: multipart/encrypted;
   61.74 + protocol="application/pgp-encrypted";
   61.75 + boundary="kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri"
   61.76 +
   61.77 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   61.78 +--kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri
   61.79 +Content-Type: application/pgp-encrypted
   61.80 +Content-Description: PGP/MIME version identification
   61.81 +
   61.82 +Version: 1
   61.83 +
   61.84 +--kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri
   61.85 +Content-Type: application/octet-stream; name="encrypted.asc"
   61.86 +Content-Description: OpenPGP encrypted message
   61.87 +Content-Disposition: inline; filename="encrypted.asc"
   61.88 +
   61.89 +-----BEGIN PGP MESSAGE-----
   61.90 +
   61.91 +hQEMA7q5KACkWjQlAQf+KGiO/fA71s4Dahe7LsSBJKNx3ECL72Ha9VQQXODw5So2
   61.92 +U3xy9k/Qp0X1Rf2i/yjtgSAXrDnl0qqRtyLL2466xWotmz1N2DvwusTlQq6sLwlv
   61.93 +inYaKms/k/R2DBNNReciy/95jWT956XjcrWhX6RMHspPXuSlQPuLuSGCekYAwKbn
   61.94 +aRN90BJtWiGZwe82ZVP8OapR9OxMeokPaMyt0bTf0i1lcKP43bC+fyIrjnYble6Q
   61.95 +98LWx9xdqvhF69hSFRyXWycT4+v9sgHTo5kiDDVqP4+7BF9pBH4FcKvDfb9K4URK
   61.96 +VGX4BgL3CgUq2VEpdkAc8/73jcNFeUHeyZXY0c116jzodlPfWzgTYnVKh6jyJUzk
   61.97 +A4tomfZo4ldPz1VMnlmrKArTyOvBYCJqMInLL+XTNqoG/CGHULvxGukm7j3Q9HNz
   61.98 +q9nsWcvY26wPPWpH7beizC8fQdcdbMUT5+qykceUgdSVgolNoWKtvTG4xm2yDWwP
   61.99 +8LLPvXybS/RwlBEoe21UzS9RUPx4W17vW3W8FNR2sJurWpvj3PAKl4BJ/vCunbFK
  61.100 +DSIxekYsBUb2oIWy+9vpz45LuVPLc6+K57GoRv2eE2ld+K9K6DmVv95V/1ndufYJ
  61.101 +JWAZ3GdOtWvKQrrulf3SwNUBoVM0Q9SjYoTbuyTWAXAUYIV0yz1a40MrWkSc5iZr
  61.102 +qJxNcHtKTzx7lMaF95Qds1nFi5gqDx1oLDAXNSl99Gr9JQSboFFneb0nnX63g3A2
  61.103 +woBrs/C4K7FpWAJymtTrlyZATwup06IHQyH1xGctPaO9/j1qHFPeO/1WpePnJ19h
  61.104 +Xwwg76PVmmorBsLxqKqjZxRIKmv+0o8qYJxppjh5qEnYTrCwfF45Tu9zOLt9u4tg
  61.105 +GDQf9MVQFlZsuO5m7ZbQaWVUqHuC+NSIL5G1ed7gSp3H3QBWC9S1qTigcjPZFm5e
  61.106 +Eol2v8Dg/j0DfCf6s4ybzf7YvikVft5rkgWBmkSrIfR5PY1XdPjA7WsN7HzWiNo/
  61.107 +BcfpBu7WdbUyWLR/QJvaVeUFWAZB0o2YnFMm/p2z0uB+b2aaRCM8al5oANjlH/ra
  61.108 +plyoIwGvfWwTuu9Mz9yyn8YHJAGqIzTiHmqoPogw5ZTbabViKkCaWgo8cJ06YspP
  61.109 +pLVoSpsTWdP+gNeARj4DQGKm2ykmriEdqOlhfHSA10ZB74dGUsM=
  61.110 +=5fnF
  61.111 +-----END PGP MESSAGE-----
  61.112 +
  61.113 +--kgRMQyABSGRETRvNUTrfrka8axQ9DV0ri--
    62.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    62.2 +++ b/test/test_mails/fake_2.0_good.eml	Thu Jun 07 09:05:46 2018 +0200
    62.3 @@ -0,0 +1,110 @@
    62.4 +References: <81836dba-bd06-a7b1-3bee-ceedfd838b32@darthmama.org>
    62.5 +To: Integrity Test Recipient <integrity_test_recip@darthmama.org>
    62.6 +X-Pep-Version: 2.0
    62.7 +From: Integrity Test Signer <integrity_test_signer@darthmama.org>
    62.8 +Subject: =?UTF-8?B?cOKJoXA=?=
    62.9 +Openpgp: preference=signencrypt
   62.10 +X-Forwarded-Message-Id: <81836dba-bd06-a7b1-3bee-ceedfd838b32@darthmama.org>
   62.11 +Message-ID: <b7d4d0b4-414d-598b-3e32-2429b95bc5cc@darthmama.org>
   62.12 +Date: Fri, 18 May 2018 11:42:02 +0200
   62.13 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   62.14 + Thunderbird/52.7.0
   62.15 +MIME-Version: 1.0
   62.16 +In-Reply-To: <81836dba-bd06-a7b1-3bee-ceedfd838b32@darthmama.org>
   62.17 +Content-Type: multipart/encrypted;
   62.18 + protocol="application/pgp-encrypted";
   62.19 + boundary="fAZmN45EsekLabfkXbDDvdBZ8V6hk0g8n"
   62.20 +
   62.21 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   62.22 +--fAZmN45EsekLabfkXbDDvdBZ8V6hk0g8n
   62.23 +Content-Type: application/pgp-encrypted
   62.24 +Content-Description: PGP/MIME version identification
   62.25 +
   62.26 +Version: 1
   62.27 +
   62.28 +--fAZmN45EsekLabfkXbDDvdBZ8V6hk0g8n
   62.29 +Content-Type: application/octet-stream; name="encrypted.asc"
   62.30 +Content-Description: OpenPGP encrypted message
   62.31 +Content-Disposition: inline; filename="encrypted.asc"
   62.32 +
   62.33 +-----BEGIN PGP MESSAGE-----
   62.34 +
   62.35 +hQEMA7q5KACkWjQlAQf/TX3YsxT4uZ24qTMXhVRdf71ZQUK8GCk/NqbUe448Fnet
   62.36 +GkLdGq4W0FE4n39UMza1coDwRGhguIUbhmiCfmmiYxlRTt4D5uAGIOCMjYtRxoSC
   62.37 +FB0OKcQZSlsVD0Aw3WernFf5UPgpHtWhfsqTnw7IkCHZEAZVEc1mTSFth5sIcrBZ
   62.38 +8OPfXfjInEWfU2EPxtz1gImCoYqrdaI/hCx0zjs1BU7+xFoTkB3WdGn2j0K6hp75
   62.39 +X8H99VxOH0NiJUC6i0D5GOLkks1JHYal30slmvVkDbgarGs+PpKrPQy/zWGKNL9r
   62.40 +4LvO6n61Moc+JoeorL51IR96FxtasMdHy83gof6ipYUBDAOoEzPD1TjKdAEH/2+n
   62.41 +1DGUUTi1074L2v1YFVSAQKhX+uF5Rxq9U1G8BHkf5mNNsE/RjWG9cel2k3WGwpi0
   62.42 +x94uL059OiDz+ABHUTmF8aodfrOBDKZDC+xAvaA+RR5RDW++qhqFx0MOOSkHSOPV
   62.43 +4R76+VZ9FrOu0FeGXLxHCqUXu7xjrnM6/JwlAjIR51ohefkS1URe4bm/E9YJocBq
   62.44 +TVw1L/C1kQUvrGHT4ECGmZri13cBggjfAm3J3N/uStRbxVfivWPTbj3XD7j+S0EO
   62.45 +1r/00/mdxfN42KxekwTUNgmcrW4WpoNLFZXVfaff4suJ08Y4C7BvKWnClnQ7yltB
   62.46 +byVUbp1gjFOfcXSxytjS6wE+4wshdvU/AJwtLkA049cqjTdvjXJLwHcv8Ba8V5bm
   62.47 +QhEK+NYenn+j4dq+M/twZqIsEnTE2fmcJ1VyXNX/s4pF7Nc58667cZCMu+4aj17L
   62.48 +m/PZQ4JKOVPY/cyesHB0GsuBx9j/xpXw90YPXTLcWOqnYdB0nNKvufudz4kfZwXq
   62.49 +aSelJYwcaVzDkB0U8vBVuQX6rSH9ylPCluMf/+vgj7BuRHUd3OO/xa3ihw5lJJIr
   62.50 +g5HUDX521GrxQ2rS4CzzgQxdXihhXalRm+XdEfPG5o5TwGpxiJcXPedvogmKfK4+
   62.51 +uwE5LJUWT21g39sXbJeAJkMee4ItVlk0bykVlNW7T0h0f93aJQiqlid04pooQgzc
   62.52 +IOS7yjnYjPg7Kb5rUazSNlfBSQLcBiLYg/GQnG0NuPONEBLen+M0RMn5/Ird3fCZ
   62.53 +WsQjD1LGSWsazdOuc6OuPABSUFaVMLzHHmu5lZmwpas45ARtHq8ZG5LMhxj1/cYh
   62.54 +pPT+6iwgO4M1d5Sjd7Y2WORU86AuSqk8VB+8KsvWRZoTIyAoNj/chM5nbFTZZdtv
   62.55 +yRWp6kULL1w4GtIhUr4hubNeCeXPOw4rEhyedPAFOh4i6OcPn3AQGhsIbkor/q0w
   62.56 +JvqgfG4op/n6UXuj/MtdEfgCCMbhee4CUpkgZXsENNlQajVqDMwakn05HB367Q7G
   62.57 +jxIGeAjEHWJg+tFOgHvHpIQjZd7fD41/rDXbVKalintpvZ0HHjRbUD7EdcGPAmOR
   62.58 +vXCce1X72465SZPGMiM3jBwyFTnfz8XrXWnQCNlhHGJBQBsUL6OufppL6YGrq0J8
   62.59 +tLjzg7nzdwTiJaVzAW6shv98rXSBH4V5nA4Dg8D69oP/s+Yx05XYy0EwYW7yb+mO
   62.60 +4Ho/YzIu3ja7mSgg0BJ1Afk9NNifVWkUNLcKYanZuhKYPRfU2n5k/+wBEG5+ul+N
   62.61 +qerSxHpYPrQnOJXfJtgg5L4cVqK5AHNZvXjQPV777X4hoP1ayYmByfIsoU0eO5cK
   62.62 +SrrFqD3yw0a6JlNFNIJdL+tpt21qldQ5tpUxMNJLpMy2EvigdEmA5nOGFh/VnhZ1
   62.63 +xEg1YKnXGVxODxrtAtO0Mz5i6bdRJ/82hcZOD8RyR3T/0F/614sVPrQE+8BruAny
   62.64 +qgLmdaEbzY3oG4AVwaKzgr5uTZKlGwQfm9G7Pu4TNGHmgtFGXmAsZgOik7HbHMUq
   62.65 +sYDuxwTLQVm1mjNGmoC2evfOFKj9gqaSY3uZAX2ecC83Ej+8kaCsvtaC0Li0fMUQ
   62.66 +18CIsZQHQ88kxthL12r0yrjLyrLfPeea874LQog5HGBu8yDEFHSDWaEaOEkSWI9V
   62.67 +56ZjoIM1YR+WU0l3QHYfTNeTrglP7f1jYSytfleQM+QMU+oKeik3wklk2JxInHyz
   62.68 +ixvdZfTmrltDlGVkcvo2oS57MKEZlzjStUKlVKWxzcXf/2i+q8DCJm2TaIpn36hW
   62.69 +CbXcVC6pQB67/tqIww2/8MvOAI6JHiHZbjhNePputcBLltzq8r9K1/Da0VeDJRna
   62.70 +j/rZPVnq+NFTdOTDqKip1szOwENIuwLEbhZ8W+Qkxxw2rwLgp1AI/n3MImNbeYE7
   62.71 +WFShAY/g8/ueNMHhwVn1peZDRjm1ezKv2vCUU4Eg84r1t3bORslgM/jFsnbSxaoz
   62.72 +7LuW69AliZ5d5LeZe8ux7PoasG4at3EIBrhCVrFjnk7yAYwvLpoYG/JtqruZrL7M
   62.73 +Xb+aCL+eOX05bjJ7MTNkb0Ww60iubFMvu3PZokxbzeqzjmqTZacD6nrmrm7AYT5w
   62.74 ++16QmgtSPnyEURyOHuim/TPIUI+i1+XE3+WYMLk+YjagmGLmpCY3qYEoZMlhaWOa
   62.75 +QeY3eXIVQXHWmXA1ZM/AW5qz2ThTFScOFpaETcNPhq6a5T+Ju6iB0qojBn2VkAKV
   62.76 +s9pCLEmSz6E4HCV0yWArOzGco/JfA5JqC2vaWFaD71etg2AwKYivudjH3zpGORpG
   62.77 +daOquQcoVSNOzaKa5A26Oa+WX3OX02bpG+CJ7y7mxUXXQx2ZcOepj1ANtCzNh/CR
   62.78 +ZGPsGkB4MNG3Bk7EvFG1x0ij/cWFAW7TG3n3WRkmb25/CiW0caxB/9GNiw8S2BsA
   62.79 +shT2CHO2v7dxOnDXec6yHFdICPNhJA10O07b4qAg2y+0un/nkvq2XUsleMZ8ZPC3
   62.80 +aJDk/6CZDj/gZI1ONury2Pa4gKiN5YKkx38nKk4W0uVqqaHO2XI/b/C+C+dDM7Xg
   62.81 +yByX/RGXipvM6/OHrG4fPvfThL1SMIeVMs4WYB1bzfT2TJ6pvrckMwBp1P4kZcqQ
   62.82 +0sK5lF85bXbObhW56v6ToqrFmsA7BEKm2cNt8lFulO/2s3Z5Q6WLmtznTtpRP8RH
   62.83 +x9qF2Pcbgivz3oRUTBUdfpqgL7GtMJmr55vaDL6I1FK9etgbnK5E+rvWf5RLadoE
   62.84 +s9dmkDlxc3LWL657vqp5gcok6g2yzwLA3PDMv+5gAESmcXImplenFMs/djRQcrhN
   62.85 +lG/XqUAzIgFfCbmws4UUfaQOeHh1xfCN+/HVOap+Wg+e8zDeCEowYufOrTg6ZPcz
   62.86 +5GYa96gUjgUTfTeOOMwB/TKoHgINEBAYLASeFOk5wfwRx8MgEDAUj5RqpSD9Y0Zs
   62.87 +PfqnXUb9hPlA/Jy60BVbORx2o3jm5IUHIeTv5YNLAojky6SdqwSbrK5zPLZGlBZ7
   62.88 +DT6s/yvT7G7IQNM8Xgf4HzlLFEM4jHOinoKYevW8gPqY7oznlAp3oEEpZLfz+FfK
   62.89 +6cpK1smTo32/yEf8aeI1FdfHnYBsejYbdE9TyhGMcljluCeU1gF6k6AsnGh1Da6l
   62.90 +xuTZSyi+l8Dn8gSR7Up5lULAVKomFVu7TFpFKg0cDO3JWUdUkCeWvcvZgNALKXAj
   62.91 +DTTfdOXaJanUHbJa3kqdjKujHb69N9TYuVWct1WqdY0rF6TJvQ5y/yzBemd54ymD
   62.92 +JLBEe68yqLNc3pmrtI1Et1ygtYKe5J4QOEbJkx+tlRckABDHZyHn56o4JqAnWnN8
   62.93 +MKNzu6SdCCZRddGZ4e1N2nNlXjlDddC2kwpjgw1KTHg5zBPFzcDzWSDgY/qO6Brx
   62.94 +jGnZbm5Kq2Eht1URR4AuwF9PuOQVc9NXJYaQ+yVixcplCLN+/pE2amIRMNZR6Grh
   62.95 +YPLlOBXTUIiI24rF/cFaqq8DP4vRIyzZPlGPHe+bQDDn0csMjTwQPezdhBupNnoU
   62.96 +L0H7qNbSBf6fof9tlHt8Uf6TVOK93I82HkO9Ph0VuFuWYI/GWfP+H9N8bAGlfa4l
   62.97 +Mk0+YjB40VqTU+oGDfKQmeS1lSL+o+zdi1AvFtN7T7ruOr8aLw7fWGMCQkcesoNu
   62.98 +iFuhUcjhgEBLK1j5mNdaX0dD7RxbpPd+mOynqWo2I5wjaoAnH104v3sxE2N2pX1T
   62.99 +8kujA7xuqd5VlwGumqTIJuWYveGq1OKcjBySVI1SsAN3wQYLRziGsbO4883CbRah
  62.100 +pY14C+enco7cX8bn3Cc+ZHteB8ExajBP20IB8k0MzHoET5ZQIb8I/PbKWpfrpUeR
  62.101 +whDve1i93mn57aA8KtRgTe3AUCUgNVsF4byf+SrZbCScAvJjLav21NJu46zBxL+C
  62.102 +Z7F38/jlhA6uulRR4C9PoQcnGTASxxmqB02WORzu59AjPC0cTuqJ/n3Zq4fYrrfj
  62.103 +4o1UBZCSoqsEPoXY2gtsU75OaezfbPLY7Sa6cASldHBF0DpUxaT2KotUG0RziKd9
  62.104 +90yLlLd2JBTTZV5m0gsYMyOUWfrgHKjLE0PYcvwcADXbDC/Ux+V8LXEd6MoH/G57
  62.105 +6lsACflhN4436NKKhuVqwCSgnvMMzhKmsuZjhjHaijgkySjXjwlxFrOQs/8YsZJB
  62.106 +CNprUPMcxqF5IT4YawMe8zZX/derSXi5A2ydbNTzVKYf4tfK4f9thP1zapgAO3aD
  62.107 +UsaS12TMhtJ7qmBKUQQebCLNuqp4dJyyCVanfFpWtdhpUcZjJQtkJgoTrk4NDXXP
  62.108 +lEnU9CnJL9cAmRtYWC10rihY1fmLgnF0ihRvZU7DvADy93OdFl28nK0ngpDGH/kB
  62.109 +3uNKfxcEOvuX
  62.110 +=qzFU
  62.111 +-----END PGP MESSAGE-----
  62.112 +
  62.113 +--fAZmN45EsekLabfkXbDDvdBZ8V6hk0g8n--
    63.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    63.2 +++ b/test/test_mails/fake_2.0_signed_no_key_attached.eml	Thu Jun 07 09:05:46 2018 +0200
    63.3 @@ -0,0 +1,72 @@
    63.4 +References: <82758947-86f3-dd25-7fc8-7d4a2a6285fb@darthmama.org>
    63.5 +Subject: =?UTF-8?B?cOKJoXA=?=
    63.6 +To: Integrity Test Recipient <integrity_test_recip@darthmama.org>
    63.7 +X-Pep-Version: 2.0
    63.8 +From: Integrity Test Signer <integrity_test_signer@darthmama.org>
    63.9 +Openpgp: preference=signencrypt
   63.10 +X-Forwarded-Message-Id: <82758947-86f3-dd25-7fc8-7d4a2a6285fb@darthmama.org>
   63.11 +Message-ID: <b5094471-42ba-f3d5-4c83-c6332f7eb04b@darthmama.org>
   63.12 +Date: Fri, 18 May 2018 11:02:02 +0200
   63.13 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   63.14 + Thunderbird/52.7.0
   63.15 +MIME-Version: 1.0
   63.16 +In-Reply-To: <82758947-86f3-dd25-7fc8-7d4a2a6285fb@darthmama.org>
   63.17 +Content-Type: multipart/encrypted;
   63.18 + protocol="application/pgp-encrypted";
   63.19 + boundary="OgFmWm5gGZYdjoko1tOlmGYbHJHS2fRqj"
   63.20 +
   63.21 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   63.22 +--OgFmWm5gGZYdjoko1tOlmGYbHJHS2fRqj
   63.23 +Content-Type: application/pgp-encrypted
   63.24 +Content-Description: PGP/MIME version identification
   63.25 +
   63.26 +Version: 1
   63.27 +
   63.28 +--OgFmWm5gGZYdjoko1tOlmGYbHJHS2fRqj
   63.29 +Content-Type: application/octet-stream; name="encrypted.asc"
   63.30 +Content-Description: OpenPGP encrypted message
   63.31 +Content-Disposition: inline; filename="encrypted.asc"
   63.32 +
   63.33 +-----BEGIN PGP MESSAGE-----
   63.34 +
   63.35 +hQEMA7q5KACkWjQlAQf+PT41TcEgYET3evzYnDkepulTQvuoRrGPMjBQk/Ik6Ubl
   63.36 +1rWb4Yo4bLFMmZB2Gha87BlqIO1irYzIv+iJgVjLQJ9K61sC95XBA7EDnyVCostj
   63.37 +PF7nCUYWP8Xt0rzkWBmjjnjODzoFlkw2m/MW/mnB0ynvF+XlfDkb90e6ELFGEvEX
   63.38 +WFnS38262qi8j2thpjiJ3cew1S53KWiIqZww8xTM6G4MIS9dCoQq0/nKSfcE7zYJ
   63.39 +Ju2g1Mc0SstmfIv8nh9k+EMiMi830r+ia+tHpLn9mYvnKSxcoEAqGsc0EnflOzvT
   63.40 +VVce9V5CU80l7uF+SaJ2BNCMMHUbACCsafuDn/wH8oUBDAOoEzPD1TjKdAEH/RxY
   63.41 +MKbgC85PXZ4G65j1RmVBgtflQFa5ewmCZEN1AHkV7jLFVpmjWuXj0oO7At0S9v2N
   63.42 +6xu8GJfIKhAC8C20khfln6XuwKa1Yn5YQqR8buak6WrBa4XMU7wYlLBPDh5xGd/k
   63.43 +dYLJOdrLjC5v+FohPafShs4u68F1k8vtd5vzIpAyqqNSXXbod5dYMye45x9oOH2K
   63.44 +GCPgAoLoObOW6eTCrwHlqKCReMXFUL1ZtJSXquaIm5mOeVCi2jC9yBSozXaOYYUr
   63.45 +PV+iSyzpPWtOF1ckzZr1/Ej9hRkBwMehLDpPEtnC+xC1PWUJ3ftjb07agC3LJRrY
   63.46 +X6iV5GH47kDht+bJR0zS6gFEkNxzgZaN6kgMwMeslDfd5GXaEqOL9iPyH07N8dud
   63.47 +DoCLKvJ7HwtqG8p/iWB1GPyge8QJY9dZYA38OSD5O7SmCdTeN/aDybcx53KR3ql/
   63.48 +3ODcvrbBQCL+1YdsPxQqWP8yGGKgBUrm/iLjS33gVZLs+bMbr7pSNopotqbDn6mc
   63.49 +G0Ys3kw8AuUU6MRnyQYvIpUOoD00/b1+oEA5J4U7SHAFGE3ZS3soK9+HbJ2Y7IHL
   63.50 +g9BMIZ9FIxBR9wImJJrnFwXXdhcaHq+CVYyqGbE6oV2PXMAkTfcHfHv9oIkvtBI4
   63.51 +w6kY8oh6Gvm0b1NmBx824qF5M7eZ3w9NISC+jLgdDIuIDQ6xImT4uATiSbu7CHzu
   63.52 +qf7zYRoyWGcSBaBtLzh1Yj07O604Yi3lGKT7omfOSZINgqJyTp7RTgojDzFRVXww
   63.53 +lSg/Xngy7IM9QVZr/18sYsnU0R7AH83Cdpc8y2qQyTb/R51+wdT1bdK/LKiHfML5
   63.54 +Fan4uZazMZzmCq0+owSFA1++lN82dvkJ7SE5dFasR+yoTCMy5FVbiWKeHVhLZU2O
   63.55 +TOjhZ06nLMV4r2z9lGzvAgBY8JxNIQe3Ynh4AmCnaNvpmCYDkOzNWN7MH1H83jlN
   63.56 +z0+Wnx9iuu23KSeTxhFnvK9sxL9p4k+XK0HnX+XdNvlLIAx6G9RKWVOodEl8tsUD
   63.57 +Mo4qGUQqh9mDmDNdmQhmT8u0iRZ9tEo7gRw8SRk9O0E6n0cUIXYwzGbB2XKGWYwZ
   63.58 +cqzmDkE4dQEN3hq3QR9tUP9IdHAGjoxpUkDCPF4deEzlqoAclrOpwjPjawZuHtyQ
   63.59 +UP0SNlj106Xl0YiUz8f9Z5ZAHj+fSawc6KBY0l+E9bsc1rNbhft1nafQo9yNMgL5
   63.60 +Gop3Wo6O1BJehR2FQOxxkW7BUhxzcjkTCuYkc7ZOBKRbL5sMiIYJZVL5ofjUar1T
   63.61 +g4dsmZpkK0yEMWNTVU0ayY/nzV4S2gch1SA7EUB27TPk9yhNyufwFdTjjNEnZVPz
   63.62 +h6kX2unFoimxSyvHrSBOq28rSUTfm5u/TZ7RoR42v3cz4F8g0KIWb7Wb9Lk7yTre
   63.63 +GdYVUDVCZbEVPf9MOgaG0jjWcmsYSHp1o2MyMDMDVZh2cCHCAHgLzqVM+yPIIVpC
   63.64 +B4wMNGj4TAusA7JAUkdCxXMa14g8kDTcmfNiQprA0QQioocmYXnJhWj/jcN3zwgf
   63.65 +53OI/+0+Cj71oThWj8BzIjwD9EQlXgHQMrGeYZ4r09lDgCncMDadll07b5Goqrmx
   63.66 +vMDgGcvdeNB0MnaMigU2VRoEb/oLQjP3GYySYBYfd+jtGL/SjOV0LXQnfKtI/AJF
   63.67 +YIHX3peSJwvnz/MTG2Hhsw5TO9OmTV2BihgEmLJVzmmntOer9WDkEZfJ/2vdBMP9
   63.68 +bQ9/J9nfjdAR1vYy34ppFyGLL/dworfPcl+oHYX6kGfQEoWROwsxSY7xp/vsaRF2
   63.69 +d4RCf5yhZWTNabSlZNCh8pexa47UPO+uJ9asJvywo57MP9hlv+muqzXxFd4ni3JY
   63.70 +njwzTNRUuCUeeFHleeDYr4KiAsz/vvp4rZJLMTqpsv9fBLPKuLYLOjtkI8B3OpNN
   63.71 +AVtCFmlWXNI=
   63.72 +=lors
   63.73 +-----END PGP MESSAGE-----
   63.74 +
   63.75 +--OgFmWm5gGZYdjoko1tOlmGYbHJHS2fRqj--
    64.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    64.2 +++ b/test/test_mails/fake_2.0_unsigned.eml	Thu Jun 07 09:05:46 2018 +0200
    64.3 @@ -0,0 +1,101 @@
    64.4 +References: <81836dba-bd06-a7b1-3bee-ceedfd838b32@darthmama.org>
    64.5 +Subject: =?UTF-8?B?cOKJoXA=?=
    64.6 +To: Integrity Test Recipient <integrity_test_recip@darthmama.org>
    64.7 +X-Pep-Version: 2.0
    64.8 +From: Integrity Test Signer <integrity_test_signer@darthmama.org>
    64.9 +Openpgp: preference=signencrypt
   64.10 +X-Forwarded-Message-Id: <81836dba-bd06-a7b1-3bee-ceedfd838b32@darthmama.org>
   64.11 +Message-ID: <d5969379-4545-ee40-e129-107bc454bc18@darthmama.org>
   64.12 +Date: Fri, 18 May 2018 10:57:47 +0200
   64.13 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
   64.14 + Thunderbird/52.7.0
   64.15 +MIME-Version: 1.0
   64.16 +In-Reply-To: <81836dba-bd06-a7b1-3bee-ceedfd838b32@darthmama.org>
   64.17 +Content-Type: multipart/encrypted;
   64.18 + protocol="application/pgp-encrypted";
   64.19 + boundary="xS4Wpa7iWOftMYICCywSG2djUku494t0Q"
   64.20 +
   64.21 +This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
   64.22 +--xS4Wpa7iWOftMYICCywSG2djUku494t0Q
   64.23 +Content-Type: application/pgp-encrypted
   64.24 +Content-Description: PGP/MIME version identification
   64.25 +
   64.26 +Version: 1
   64.27 +
   64.28 +--xS4Wpa7iWOftMYICCywSG2djUku494t0Q
   64.29 +Content-Type: application/octet-stream; name="encrypted.asc"
   64.30 +Content-Description: OpenPGP encrypted message
   64.31 +Content-Disposition: inline; filename="encrypted.asc"
   64.32 +
   64.33 +-----BEGIN PGP MESSAGE-----
   64.34 +
   64.35 +hQEMA7q5KACkWjQlAQf/flA7qFcNdoiTYcRtnnvM6Kjs658g2AqytSu13iq/PdkP
   64.36 +GJGr476TxVzlz+WFSLWgl+zrpJoa1vnIwooJ/O8eR2v8SZ6BEomGiHd0AmWraoTW
   64.37 +vz/PjOEV2MIpG2hm1MfcoDjLY2uL/qZvaM0nRrpuWBG0utMg+opLwXLjhittwM4Z
   64.38 +x9txmh2K+SVT6AS7ClF4+t/RxL0sDNqtqJJfTcZvbWwemJbENz4L7VPFHJDnKqFh
   64.39 +ioJtysHt2rT0H2IKGYDk+XoJuG0Y1Y6UIuYSBYVWASpFhe74PtLJ2UeZeB5eiyEZ
   64.40 +7qgMuSAZcWT/u6wYvl0m6exqn6BseJUaCgcArPYOioUBDAOoEzPD1TjKdAEIAKgy
   64.41 +wGx+ZZsIzvJuHQxKn4Ec8bAhQcBHks5Bysjs1WK3TplJwsvrgjKpgL0tGBnb4iha
   64.42 +qlg0BAwqEKa6XUrcqZGahtu8mymWRxxSE1fRpM2Xgj0bip1DaiF3FpbRdbAToE5j
   64.43 +pW9RFU9w/sMppl1PMxwRSuHjUGKsUet2QgJGS7+l1H8xZRz4201sNhDdltxMsvCe
   64.44 ++5lW1eN4jAa4XO+6Nxky+eH9jKKZ1S5dpofE9p4ZsjrrtUmN4lbXS0uDUtA+0O7H
   64.45 +gFv+9r03/LORub7L5dQ744UEzZl4kXVIZoH0e2KSUJoR1g1lZsGHCsZyT2d4HOkK
   64.46 +Qt0J3IGVdiUY32LVuu3S6wHkPPt5vwa9b3SKVeI4vi190K89HuOTXepNowQZkCdo
   64.47 +M+tKZK/OkgRDevdcP6koDmfkLYRMreTD80TxvXOSBmUlqxOW4NVCbYuuf8PkCos9
   64.48 +5F6UD0aJG0J4J8gSt2+VBgdCcu7/+M1VOjM28F/SpXiRxlqVzpbHc6AsPwaZG4xf
   64.49 +n4K6JcMtuBu4zokhBUEhcr+lsbRLgJWl5vTdxtPChH4HNDOD9EGiH//xBgv4XY/h
   64.50 +YCNKas7mI19a10oL91xiL5k5NFK3+VxCClJgCnPnydHbcP3EmYXS2SjE/IRg1O5t
   64.51 +WClpfDs6JsfKSlA+02pNWokdOOYfrJdebmGzHd7JjO/eBMQ0rIb1qzKBRknFf75g
   64.52 +Aw9v+jqIuA6tIaI089hMXjRPe6TUN/q1cQs9rfhjcK2vKMGD4nTgW3IyCmSIKovN
   64.53 ++eB5yJOdR5+XNwyWgKHB5WfSCsTckXRve3eBqSdI8194f68oAqqxBNgBTQHJbAR1
   64.54 +mKpGKNLM6vlIHvpavuExDQNj6Za+7xojRUhb+5p95oZR7zk8FVJ+/yBS3iCfaV2v
   64.55 +HyhY9SqPxqfDpx6BZJWA1tT/nputNZJ2oVkeOX2FYoRtThYziwZXZlXrdQ7rC+VG
   64.56 +htQl6aibBrGvVVDcU5GjVWmRuj/xGPBHIRew4Xi9LT9sBKBLKEBC/VLHV4//tBYo
   64.57 +6kiKSCPw+CBc0dJwWYutHPe1TtJjGE8PLOcwx+tgkndiUk47RJq7Q2lb325LKbOv
   64.58 +BnsRQlGcFzMUQS7xqQ3cu3S+VftYwK25Tn8B2TKQO8XE7gfsSxGxiqfRTkEYXni1
   64.59 +FzdJ3zomFDzGfwc0iH/jZhSf6b6k50txFZ+6T9uyFWkAbOwwK6CuBk5Nwt2h6zUL
   64.60 +2UQEQkVlZARADU/OvAlxH66+mazrLwd44zXgPKyWNZ2QY++gzbr3VyAS/9ODADBG
   64.61 +uCsIIqxgrFq95+AmEqpOO6V5JsQN5tWi87KgnWn9CZ1NI24oQ//5N27BL6bWW/ti
   64.62 +tEFnnR9hfjK5kVKkaqBcIuxixV6pxc9meXPRjTlOFzHomYhlq6f/mFGeLF109Kpo
   64.63 +ssO/TrmaVnpcQ6WwHy1EjGkCdmI6oWLzGg0GDdHIgAKxrsPRwSlYDbQnQGZzTvB8
   64.64 +c6K7RkCLoUc51/Hw9Ddb4BU0PAODvfSdd7zywf44FCh7tbE7C0ITYWMDonQBYhd9
   64.65 +gzQnXvV6uCxz6It/vdqlr4NvvsUC+mTf2UhZdzxSsJ6IMiwBg5EdN1HgBJahjBTL
   64.66 +K+1/rrBWoG7JcI7jca4PGYcHkrYEi+YzgvmZRdzq2c2xnxdDhRZ9QIzkINEr/B7A
   64.67 +qrMqJhH4bYFPpsR0d2qXNrvGnhR406cWH6ws+cXRpcnyo+X3MIhFNs+NN8UDYTdj
   64.68 +oLJypUE0PLIDy0+fHY99UEVltuYgNR+htmjG+JrFdMBSC+c2U0wq4hi3HYe/oCXP
   64.69 ++S19EQG723wtEKZcedVivJPinrWibEdCdcNBGQ5OSqsjKMhSDuBtkGck3tkRC1U1
   64.70 +b0ioSmtnSei7qq6nHrWyjErPedWsIYnvxMa5LmuoewSuJKzJQlBr0QOIxVjzAPVQ
   64.71 +oVzriUXFaetVwiiyfB0MPMumP1/OHd4hej/PlXTFFd5aSGQKCeNsQALy820o9D1O
   64.72 +MAkfeAlu0W3VRzDJo/9O4Fxp/B031qGTbsEwqUZ9WXG3JUK02B4va0iX6N2FiPBe
   64.73 +/kcFEeZLOZb865XXWVw9KsIbj5g8fyFzBxABnHcq/0F9xPyF+rq8cfXYWueVNn0B
   64.74 +HpQRJY5hoR0NwSwmD3CC6grPNvjJDuqeia2+sZgI+O7SyPh3luZIKuBbPaDHYFKl
   64.75 +K1TllDKTV3sxvZLBtRxZK0/TnVyn1WWPtZILOe60o0P5ycJP16CepWB9DPKtxf3D
   64.76 +kJrBlBM/od3bjfaQnvs3uCj7WFlrmbtZ3ecKR/6NV3iuKteyJFv0hoBCbkceypET
   64.77 +F6zeZ0rdDct4J48MnwmdWIx24PZc1t7mGIVNa+clsDSgdm5ei17cWs17SLi+ukRX
   64.78 +suv9MG2s/esydxqCNu+GDyYNGKPDvxP2aMhqam9v5tX8VA2KHyplDbbo+Ukbw5Xf
   64.79 +VJ09WCvBJbexGdl+ipdS93UonOWDT7zvZHwv47v1G3JC7MEWkcJdkd5i+8Z++Vxu
   64.80 +tEUupH6wKzX2oC9G7pTTnJdLr6zMZuWqOPoagX51MHJSfULxQAOFNH8yxrnLF3tC
   64.81 +Tlr4jKiUycioTMMvCTecbTA0sXyGKpkMDGF9mcoKCHGYhsIA8ALxFJbw0kVPJYRp
   64.82 +sfe73dAdMF7KyWrJEtqinynNOZNzqrbW5NtXklFYhbrIhpqrrbkbrSakHbwGNB94
   64.83 +ZT2To+edwwk2m59+DtzTlPk6aOCs5qaEvchu9/po4K9oIDl5lW1qDfGFj4x+Juem
   64.84 +cXTjk5FLFCsdbtogl59wEvwFP3DL9groAsbtrRnpNFRUIeHnQfIH+UfOBIKJs+fG
   64.85 +Iir5d8I2eIB65LlN+Vz2FlilGL8st1VZ9tG1RsftLXjVkselUM8q48FhOBxQi/Gc
   64.86 +Z0Hc2rT82I8oKE6W+Tj5aUOp4wzAY75n1jUtVTmHsbifDv8F0SCXy4OG5fASsTsV
   64.87 +zibRN3DflBfom2/R9haOjee8ZdUs7TM18Zxgq+XViTFekLSUgrYy/NfhRH/crTq2
   64.88 +i0FoluBMnxgDhRIP0FeJFBQr8p/5WVUa1WorMW07BLFrqPcdxlRamMHplfRtEdB0
   64.89 +6eD4MSoCqSr6Avj5ZRbxMj/tdIIoAjPXK5R9I8Zp3uKBRoAtshEt71svxIzc94Bw
   64.90 +xUvLW2nS1OGwnHmfovu1UhG/aQokH6MBw3/Twii36CFc6iwk6ToLf8YDGOERDsqC
   64.91 +woXWDQRsOvYvcksZb529SL+1twyJaIVETkK5uhdNW+R4WMzWnGQR/c36BjnEm0hm
   64.92 +kygJcr/9PFfMy1nwpOOIu5hI4Clf0HcxIqVXdIhKftvlpzgTNy6hF2uiBlPSVuXO
   64.93 +LHkYY6oW1cLKYBuQsYJICzsPs57LD+ND8ofR0+DHjP1VLcnKlNIBfmE/ookn5Xs/
   64.94 +sR7c5lyIVRCTpHDEUA5pOk6Y/pPxbuWgLAMvyPgmsOtYvRFa6t9nTbapsk/BSiEc
   64.95 +vEwK83xPy+dPvnpuvaTcfqRb9f67X2uhLvZES8W70xVyVHH7nPiUbojZq7jlNm9h
   64.96 +cqYCQOfyo5bI56iG3aBB5pN8bVne3biX1AEaZOwMeQlgYLNAQA7TLDPxfdtqu/FJ
   64.97 +QPdBr9KGuqCvTHhny3VIL+vEX1j3CCONHLMBLK/QeW752U2wGtG2gZjug9Tdcuvz
   64.98 +zjB0hWPz96EAo7hvbF5HFg5VETRz15ayfEhB/A7Pnsz8hSvlXu0RRHyte/zsW702
   64.99 +8zAgpFj7tL2vcP7rRrCwZxQgCd//Hxav7KomJBModQfCGwqYO3nycP85570TxStR
  64.100 +RWHYbmnzfP5HbH+e9w==
  64.101 +=NMby
  64.102 +-----END PGP MESSAGE-----
  64.103 +
  64.104 +--xS4Wpa7iWOftMYICCywSG2djUku494t0Q--