Merged in ENGINE-487 / ENGINE-508 fix
authorKrista 'DarthMama' Bennett <krista@pep.foundation>
Wed, 23 Jan 2019 11:20:24 +0100
changeset 32328a7ab7c488b8
parent 3226 906f09d51761
parent 3231 9e0cc2126b5e
child 3234 538a03bab6b8
child 3246 ec48ea509c8d
Merged in ENGINE-487 / ENGINE-508 fix
     1.1 --- a/src/pgp_gpg.c	Wed Jan 16 17:50:35 2019 +0100
     1.2 +++ b/src/pgp_gpg.c	Wed Jan 23 11:20:24 2019 +0100
     1.3 @@ -360,6 +360,7 @@
     1.4          DLOAD(gpgme_signers_add);
     1.5          DLOAD(gpgme_set_passphrase_cb);
     1.6          DLOAD(gpgme_get_key);
     1.7 +        DLOAD(gpgme_strerror);
     1.8          
     1.9  #ifdef GPGME_VERSION_NUMBER
    1.10  #if (GPGME_VERSION_NUMBER >= 0x010700)
    1.11 @@ -2003,31 +2004,63 @@
    1.12              *comm_type = PEP_ct_key_revoked;            
    1.13          else if (key->expired)
    1.14              *comm_type = PEP_ct_key_expired;
    1.15 +        else if (!key->subkeys)
    1.16 +            *comm_type = PEP_ct_key_b0rken;
    1.17          else {
    1.18              // Ok, so we now need to check subkeys. Normally, we could just
    1.19              // shortcut this by looking at key->can_sign and key->can_encrypt,
    1.20              // but we want the REASON we can't use a key, so this gets ugly.
    1.21              PEP_comm_type max_comm_type = *comm_type;
    1.22 -                        
    1.23 -            PEP_comm_type best_sign = PEP_ct_no_encryption;
    1.24 -            PEP_comm_type best_enc = PEP_ct_no_encryption;
    1.25 -            
    1.26 +
    1.27 +            // NOTE: 
    1.28 +            // PEP_ct_pEp functions here as an unreachable top;
    1.29 +            // it is impossible on just a key.
    1.30 +            // IF THIS CHANGES, we must choose something else.
    1.31 +            PEP_comm_type worst_sign = PEP_ct_pEp;
    1.32 +            PEP_comm_type worst_enc = PEP_ct_pEp;
    1.33 +
    1.34 +            PEP_comm_type error_sign = PEP_ct_unknown;
    1.35 +            PEP_comm_type error_enc = PEP_ct_unknown;
    1.36 +
    1.37 +            // We require that the underlying client NOT force-use expired or revoked
    1.38 +            // subkeys instead of a valid one.
    1.39 +            //
    1.40 +            // So here we check all the subkeys; we make note of the existence
    1.41 +            // of an expired, revoked, or invalid subkey, in case there is no
    1.42 +            // other alternative (we want to return useful information).
    1.43 +            // At the same time, we try to evaluate the least strong useable keys 
    1.44 +            // for signing and encryption. If there is a useable one of both,
    1.45 +            // the key comm_type corresponds to the lesser of these two least strong
    1.46 +            // keys
    1.47              for (gpgme_subkey_t sk = key->subkeys; sk != NULL; sk = sk->next) {
    1.48 +                
    1.49 +                // Only evaluate signing keys or encryption keys
    1.50                  if (sk->can_sign || sk->can_encrypt) {
    1.51                      PEP_comm_type curr_sign = PEP_ct_no_encryption;
    1.52                      PEP_comm_type curr_enc = PEP_ct_no_encryption;
    1.53 -                    
    1.54 -                    if (sk->length < 1024) {
    1.55 +
    1.56 +#ifdef GPGME_PK_ECC                    
    1.57 +                    if ((sk->pubkey_algo != GPGME_PK_ECC && sk->length < 1024) 
    1.58 +                        || (sk->pubkey_algo == GPGME_PK_ECC && sk->length < 160)) {
    1.59 +#else
    1.60 +                    if (sk->length < 1024) {                        
    1.61 +#endif                        
    1.62                          if (sk->can_sign)
    1.63                              curr_sign = PEP_ct_key_too_short;
    1.64                          if (sk->can_encrypt)                               
    1.65                              curr_enc = PEP_ct_key_too_short;
    1.66                      }
    1.67 -                    else if (
    1.68 -                        ((sk->pubkey_algo == GPGME_PK_RSA)
    1.69 -                        || (sk->pubkey_algo == GPGME_PK_RSA_E)
    1.70 -                        || (sk->pubkey_algo == GPGME_PK_RSA_S))
    1.71 -                        && sk->length == 1024) {
    1.72 +                    else if 
    1.73 +                        (
    1.74 +                            (((sk->pubkey_algo == GPGME_PK_RSA)
    1.75 +                                || (sk->pubkey_algo == GPGME_PK_RSA_E)
    1.76 +                                || (sk->pubkey_algo == GPGME_PK_RSA_S))
    1.77 +                                && sk->length == 1024)
    1.78 +#ifdef GPGME_PK_ECC                    
    1.79 +                            || (sk->pubkey_algo == GPGME_PK_ECC
    1.80 +                                && sk->length == 160)
    1.81 +#endif                             
    1.82 +                        ) {
    1.83                          if (sk->can_sign)
    1.84                              curr_sign = PEP_ct_OpenPGP_weak_unconfirmed;
    1.85                          if (sk->can_encrypt)                               
    1.86 @@ -2057,18 +2090,39 @@
    1.87                          if (sk->can_encrypt)                               
    1.88                              curr_enc = PEP_ct_key_revoked;
    1.89                      }
    1.90 -                    if (sk->can_sign)
    1.91 -                        best_sign = _MAX(curr_sign, best_sign);
    1.92 -                    if (sk->can_encrypt)
    1.93 -                        best_enc = _MAX(curr_enc, best_enc);
    1.94 +                    switch (curr_sign) {
    1.95 +                        case PEP_ct_key_b0rken:
    1.96 +                        case PEP_ct_key_expired:
    1.97 +                        case PEP_ct_key_revoked:
    1.98 +                            error_sign = curr_sign;
    1.99 +                            break;
   1.100 +                        default:    
   1.101 +                            if (sk->can_sign)
   1.102 +                                worst_sign = _MIN(curr_sign, worst_sign);
   1.103 +                            break;
   1.104 +                    }
   1.105 +                    switch (curr_enc) {
   1.106 +                        case PEP_ct_key_b0rken:
   1.107 +                        case PEP_ct_key_expired:
   1.108 +                        case PEP_ct_key_revoked:
   1.109 +                            error_sign = curr_sign;
   1.110 +                            break;
   1.111 +                        default:    
   1.112 +                            if (sk->can_encrypt)
   1.113 +                                worst_enc = _MIN(curr_enc, worst_enc);
   1.114 +                            break;
   1.115 +                    }                    
   1.116                  }    
   1.117              }
   1.118 -            if (best_enc == PEP_ct_no_encryption ||
   1.119 -                best_sign == PEP_ct_no_encryption) {
   1.120 -                *comm_type = PEP_ct_key_b0rken;
   1.121 +            if (worst_enc == PEP_ct_pEp ||
   1.122 +                worst_sign == PEP_ct_pEp) {
   1.123 +                // No valid key was found for one or both; return a useful 
   1.124 +                // error comm_type
   1.125 +                PEP_comm_type error_ct = _MAX(error_enc, error_sign);    
   1.126 +                *comm_type = (error_ct == PEP_ct_unknown ? PEP_ct_key_b0rken : error_ct);
   1.127              }
   1.128              else {
   1.129 -                *comm_type = _MIN(best_sign, _MIN(max_comm_type, best_enc));
   1.130 +                *comm_type = _MIN(max_comm_type, _MIN(worst_sign, worst_enc));
   1.131              }                
   1.132          }
   1.133          break;
     2.1 --- a/src/pgp_gpg_internal.h	Wed Jan 16 17:50:35 2019 +0100
     2.2 +++ b/src/pgp_gpg_internal.h	Wed Jan 23 11:20:24 2019 +0100
     2.3 @@ -81,6 +81,8 @@
     2.4          gpgme_edit_cb_t FNC, void *HANDLE, gpgme_data_t OUT);
     2.5  typedef gpgme_ssize_t (*gpgme_io_write_t)(int fd, const void *buffer,
     2.6          size_t count);
     2.7 +typedef const char*(*gpgme_strerror_t)(gpgme_error_t err);
     2.8 +
     2.9  
    2.10  #ifdef GPGME_VERSION_NUMBER 
    2.11  #if (GPGME_VERSION_NUMBER >= 0x010700)
    2.12 @@ -150,6 +152,8 @@
    2.13  	gpgme_key_release_t gpgme_key_release;
    2.14      gpgme_op_edit_t gpgme_op_edit;
    2.15      gpgme_io_write_t gpgme_io_write;
    2.16 +    
    2.17 +    gpgme_strerror_t gpgme_strerror;
    2.18  
    2.19      gpgme_set_passphrase_cb_t gpgme_set_passphrase_cb;
    2.20  };
     3.1 --- a/test/convenience_scripts/keygen_for_test.py	Wed Jan 16 17:50:35 2019 +0100
     3.2 +++ b/test/convenience_scripts/keygen_for_test.py	Wed Jan 23 11:20:24 2019 +0100
     3.3 @@ -85,7 +85,7 @@
     3.4  
     3.5      
     3.6      pubkey = gpg.export_keys(fpr)
     3.7 -    privkey = gpg.export_keys(fpr, True, passphrase="")
     3.8 +    privkey = gpg.export_keys(fpr, True)
     3.9  
    3.10      pubkey_filename = os.path.join(pub_path, key_filename_prefix + "pub.asc")
    3.11      privkey_filename = os.path.join(priv_path, key_filename_prefix + "priv.asc")    
    3.12 @@ -99,7 +99,7 @@
    3.13      privkey_file.close()
    3.14          
    3.15      # Delete keys from keyring
    3.16 -    gpg.delete_keys(fpr, True, passphrase="") # True => private keys
    3.17 +    gpg.delete_keys(fpr, True) # True => private keys
    3.18      gpg.delete_keys(fpr)
    3.19  
    3.20      if (args.hgadd):
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/test/include/SubkeyRatingEvalTests.h	Wed Jan 23 11:20:24 2019 +0100
     4.3 @@ -0,0 +1,29 @@
     4.4 +// This file is under GNU General Public License 3.0
     4.5 +// see LICENSE.txt
     4.6 +
     4.7 +#ifndef SUBKEY_RATING_EVAL_H
     4.8 +#define SUBKEY_RATING_EVAL_H
     4.9 +
    4.10 +#include <string>
    4.11 +#include "EngineTestIndividualSuite.h"
    4.12 +
    4.13 +using namespace std;
    4.14 +
    4.15 +class SubkeyRatingEvalTests : public EngineTestIndividualSuite {
    4.16 +    public:
    4.17 +        SubkeyRatingEvalTests(string test_suite, string test_home_dir);
    4.18 +    private:
    4.19 +        void check_subkey_rating_eval();
    4.20 +        void check_subkey_rating_eval_no_es();
    4.21 +        void check_subkey_rating_eval_weak_s();    
    4.22 +        void check_subkey_rating_eval_ecc_s();
    4.23 +        void check_subkey_rating_eval_weak_e_strong_ecc_se();
    4.24 +        void check_subkey_rating_eval_bad_es();
    4.25 +        void check_subkey_rating_eval_bad_e();
    4.26 +        void check_subkey_rating_eval_bad_s_ecc_e();    
    4.27 +        void check_subkey_rating_eval_revoked_sign_no_alt();    
    4.28 +        void check_subkey_rating_eval_revoked_e_with_alt();            
    4.29 +
    4.30 +};
    4.31 +
    4.32 +#endif
     5.1 --- a/test/src/EngineTestSuite.cc	Wed Jan 16 17:50:35 2019 +0100
     5.2 +++ b/test/src/EngineTestSuite.cc	Wed Jan 23 11:20:24 2019 +0100
     5.3 @@ -102,7 +102,7 @@
     5.4  #ifndef USE_NETPGP
     5.5      success = system("gpgconf --kill all");
     5.6      if (success != 0)
     5.7 -        throw std::runtime_error("SETUP: Error when executing 'gpgconf --kill all'.");
     5.8 +        throw std::runtime_error("SETUP: Error when executing 'gpgconf --kill all'.");    
     5.9  #endif
    5.10  
    5.11      if (stat(test_home.c_str(), &dirchk) == 0) {
     6.1 --- a/test/src/SuiteMaker.cc	Wed Jan 16 17:50:35 2019 +0100
     6.2 +++ b/test/src/SuiteMaker.cc	Wed Jan 23 11:20:24 2019 +0100
     6.3 @@ -22,6 +22,7 @@
     6.4  #include "IdentityListTests.h"
     6.5  #include "PgpBinaryTests.h"
     6.6  #include "MistrustUndoTests.h"
     6.7 +#include "SubkeyRatingEvalTests.h"
     6.8  #include "MessageNullFromTests.h"
     6.9  #include "LeastCommonDenomColorTests.h"
    6.10  #include "StringlistTests.h"
    6.11 @@ -34,6 +35,7 @@
    6.12  #include "Engine358Tests.h"
    6.13  #include "BlacklistAcceptNewKeyTests.h"
    6.14  #include "DecryptAttachPrivateKeyUntrustedTests.h"
    6.15 +#include "ReturnMistrustFprTests.h"
    6.16  #include "BlacklistTests.h"
    6.17  #include "RevokeRegenAttachTests.h"
    6.18  #include "PepSubjectReceivedTests.h"
    6.19 @@ -68,6 +70,7 @@
    6.20      "IdentityListTests",
    6.21      "PgpBinaryTests",
    6.22      "MistrustUndoTests",
    6.23 +    "SubkeyRatingEvalTests",
    6.24      "MessageNullFromTests",
    6.25      "LeastCommonDenomColorTests",
    6.26      "StringlistTests",
    6.27 @@ -80,6 +83,7 @@
    6.28      "Engine358Tests",
    6.29      "BlacklistAcceptNewKeyTests",
    6.30      "DecryptAttachPrivateKeyUntrustedTests",
    6.31 +    "ReturnMistrustFprTests",
    6.32      "BlacklistTests",
    6.33      "RevokeRegenAttachTests",
    6.34      "PepSubjectReceivedTests",
    6.35 @@ -104,7 +108,7 @@
    6.36  };
    6.37  
    6.38  // This file is generated, so magic constants are ok.
    6.39 -int SuiteMaker::num_suites = 43;
    6.40 +int SuiteMaker::num_suites = 45;
    6.41  
    6.42  void SuiteMaker::suitemaker_build(const char* test_class_name, const char* test_home, Test::Suite** test_suite) {
    6.43      if (strcmp(test_class_name, "MimeTests") == 0)
    6.44 @@ -127,6 +131,8 @@
    6.45          *test_suite = new PgpBinaryTests(test_class_name, test_home);
    6.46      else if (strcmp(test_class_name, "MistrustUndoTests") == 0)
    6.47          *test_suite = new MistrustUndoTests(test_class_name, test_home);
    6.48 +    else if (strcmp(test_class_name, "SubkeyRatingEvalTests") == 0)
    6.49 +        *test_suite = new SubkeyRatingEvalTests(test_class_name, test_home);
    6.50      else if (strcmp(test_class_name, "MessageNullFromTests") == 0)
    6.51          *test_suite = new MessageNullFromTests(test_class_name, test_home);
    6.52      else if (strcmp(test_class_name, "LeastCommonDenomColorTests") == 0)
    6.53 @@ -151,6 +157,8 @@
    6.54          *test_suite = new BlacklistAcceptNewKeyTests(test_class_name, test_home);
    6.55      else if (strcmp(test_class_name, "DecryptAttachPrivateKeyUntrustedTests") == 0)
    6.56          *test_suite = new DecryptAttachPrivateKeyUntrustedTests(test_class_name, test_home);
    6.57 +    else if (strcmp(test_class_name, "ReturnMistrustFprTests") == 0)
    6.58 +        *test_suite = new ReturnMistrustFprTests(test_class_name, test_home);
    6.59      else if (strcmp(test_class_name, "BlacklistTests") == 0)
    6.60          *test_suite = new BlacklistTests(test_class_name, test_home);
    6.61      else if (strcmp(test_class_name, "RevokeRegenAttachTests") == 0)
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/test/src/engine_tests/SubkeyRatingEvalTests.cc	Wed Jan 23 11:20:24 2019 +0100
     7.3 @@ -0,0 +1,179 @@
     7.4 +// This file is under GNU General Public License 3.0
     7.5 +// see LICENSE.txt
     7.6 +
     7.7 +#include <stdlib.h>
     7.8 +#include <string>
     7.9 +
    7.10 +#include "pEpEngine.h"
    7.11 +
    7.12 +#include <cpptest.h>
    7.13 +#include "test_util.h"
    7.14 +
    7.15 +#include "EngineTestIndividualSuite.h"
    7.16 +#include "SubkeyRatingEvalTests.h"
    7.17 +
    7.18 +using namespace std;
    7.19 +
    7.20 +SubkeyRatingEvalTests::SubkeyRatingEvalTests(string suitename, string test_home_dir) :
    7.21 +    EngineTestIndividualSuite::EngineTestIndividualSuite(suitename, test_home_dir) {
    7.22 +
    7.23 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_no_es"),
    7.24 +        static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_no_es)));
    7.25 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_weak_s"),
    7.26 +        static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_weak_s)));    
    7.27 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_ecc_s"),
    7.28 +        static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_ecc_s)));
    7.29 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_weak_e_strong_ecc_se"),
    7.30 +        static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_weak_e_strong_ecc_se)));
    7.31 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_bad_es"),
    7.32 +        static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_bad_es)));
    7.33 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_bad_e"),
    7.34 +        static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_bad_e)));
    7.35 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_bad_s_ecc_e"),
    7.36 +        static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_bad_s_ecc_e)));    
    7.37 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_revoked_sign_no_alt"),
    7.38 +        static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_revoked_sign_no_alt)));    
    7.39 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("SubkeyRatingEvalTests::check_subkey_rating_eval_revoked_e_with_alt"),
    7.40 +        static_cast<Func>(&SubkeyRatingEvalTests::check_subkey_rating_eval_revoked_e_with_alt)));            
    7.41 +}
    7.42 +
    7.43 +// pub   rsa2048 2019-01-21 [CA]
    7.44 +//       F0D03C842C0770C2C2A9FEAF2A1ED9814929DC45
    7.45 +// uid           [ unknown] Subkey Check 0 <subkey_select_0@darthmama.cool>
    7.46 +// 
    7.47 +void SubkeyRatingEvalTests::check_subkey_rating_eval_no_es() {
    7.48 +    slurp_and_import_key(session, "test_keys/pub/subkey_select_0-0x4929DC45_pub.asc");
    7.49 +    PEP_comm_type ct = PEP_ct_unknown;
    7.50 +    PEP_STATUS status = get_key_rating(session, "F0D03C842C0770C2C2A9FEAF2A1ED9814929DC45", &ct);
    7.51 +    TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
    7.52 +    TEST_ASSERT_MSG(ct = PEP_ct_key_b0rken, tl_ct_string(ct));
    7.53 +    TEST_ASSERT(true);
    7.54 +}
    7.55 +
    7.56 +// pub   rsa2048 2019-01-21 [CEA]
    7.57 +//       918AF6E986F39B630541E10DF5F7FA35F2BFF59E
    7.58 +// uid           [ unknown] Subkey Check 1 <subkey_select_1@darthmama.cool>
    7.59 +// sub   rsa1024 2019-01-21 [S]
    7.60 +// 
    7.61 +void SubkeyRatingEvalTests::check_subkey_rating_eval_weak_s() {
    7.62 +    slurp_and_import_key(session, "test_keys/pub/subkey_select_1-0xF2BFF59E_pub.asc");
    7.63 +    PEP_comm_type ct = PEP_ct_unknown;
    7.64 +    PEP_STATUS status = get_key_rating(session, "918AF6E986F39B630541E10DF5F7FA35F2BFF59E", &ct);
    7.65 +    TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
    7.66 +    TEST_ASSERT_MSG(ct = PEP_ct_OpenPGP_weak_unconfirmed, tl_ct_string(ct));
    7.67 +    TEST_ASSERT(true);
    7.68 +}    
    7.69 +
    7.70 +// pub   rsa2048 2019-01-21 [CEA]
    7.71 +//       8894202E3D791C95560058BD77676BACBAD7800C
    7.72 +// uid           [ unknown] Subkey Check 2 <subkey_select_2@darthmama.cool>
    7.73 +// sub   ed25519 2019-01-21 [S]
    7.74 +// 
    7.75 +void SubkeyRatingEvalTests::check_subkey_rating_eval_ecc_s() {
    7.76 +    slurp_and_import_key(session, "test_keys/pub/subkey_select_2-0xBAD7800C_pub.asc");
    7.77 +    PEP_comm_type ct = PEP_ct_unknown;
    7.78 +    PEP_STATUS status = get_key_rating(session, "8894202E3D791C95560058BD77676BACBAD7800C", &ct);
    7.79 +    TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
    7.80 +    TEST_ASSERT_MSG(ct = PEP_ct_OpenPGP_unconfirmed, tl_ct_string(ct));
    7.81 +    TEST_ASSERT(true);
    7.82 +}
    7.83 +
    7.84 +// pub   rsa2048 2019-01-21 [CA]
    7.85 +//       5EA5F7F71BB39B4F7924D1E8D11C676134F44C02
    7.86 +// uid           [ unknown] Subkey Check 3 <subkey_select_3@darthmama.cool>
    7.87 +// sub   ed25519 2019-01-21 [S]
    7.88 +// sub   cv25519 2019-01-21 [E]
    7.89 +// sub   rsa1024 2019-01-21 [E]
    7.90 +//
    7.91 +void SubkeyRatingEvalTests::check_subkey_rating_eval_weak_e_strong_ecc_se() {
    7.92 +    slurp_and_import_key(session, "test_keys/pub/subkey_select_3-0x34F44C02_pub.asc");
    7.93 +    PEP_comm_type ct = PEP_ct_unknown;
    7.94 +    PEP_STATUS status = get_key_rating(session, "5EA5F7F71BB39B4F7924D1E8D11C676134F44C02", &ct);
    7.95 +    TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
    7.96 +    TEST_ASSERT_MSG(ct = PEP_ct_OpenPGP_weak_unconfirmed, tl_ct_string(ct));
    7.97 +    TEST_ASSERT(true);
    7.98 +}
    7.99 +
   7.100 +// pub   rsa512 2019-01-22 [SC]
   7.101 +//       70376BC88DE2DAB4BEF831B65FD6F65326F88D0B
   7.102 +// uid           [ unknown] Weak RSA Key <crappykey_0@darthmama.cool>
   7.103 +// sub   rsa512 2019-01-22 [E]
   7.104 +// 
   7.105 +void SubkeyRatingEvalTests::check_subkey_rating_eval_bad_es() {
   7.106 +    slurp_and_import_key(session, "test_keys/pub/crappykey_0-26F88D0B_pub.asc");
   7.107 +    PEP_comm_type ct = PEP_ct_unknown;
   7.108 +    PEP_STATUS status = get_key_rating(session, "70376BC88DE2DAB4BEF831B65FD6F65326F88D0B", &ct);
   7.109 +    TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
   7.110 +    TEST_ASSERT_MSG(ct = PEP_ct_key_too_short, tl_ct_string(ct));
   7.111 +    TEST_ASSERT(true);
   7.112 +}
   7.113 +
   7.114 +// pub   rsa512 2019-01-22 [C]
   7.115 +//       F712B88AF525E4E32A2A24BCD1B86137C508F2B1
   7.116 +// uid           [ unknown] Weak RSA Key <crappykey_1@darthmama.cool>
   7.117 +// sub   rsa512 2019-01-22 [E]
   7.118 +// sub   rsa2048 2019-01-22 [S]
   7.119 +// 
   7.120 +void SubkeyRatingEvalTests::check_subkey_rating_eval_bad_e() {
   7.121 +    slurp_and_import_key(session, "test_keys/pub/crappykey_1-0xC508F2B1_pub.asc");
   7.122 +    PEP_comm_type ct = PEP_ct_unknown;
   7.123 +    PEP_STATUS status = get_key_rating(session, "F712B88AF525E4E32A2A24BCD1B86137C508F2B1", &ct);
   7.124 +    TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
   7.125 +    TEST_ASSERT_MSG(ct = PEP_ct_key_too_short, tl_ct_string(ct));
   7.126 +    TEST_ASSERT(true);
   7.127 +}
   7.128 +
   7.129 +// pub   rsa512 2019-01-22 [SC]
   7.130 +//       18544492055207B2936BB215325776FBC027262F
   7.131 +// uid           [ unknown] Weak RSA Key <crappykey_2@darthmama.cool>
   7.132 +// sub   cv25519 2019-01-22 [E]
   7.133 +//
   7.134 +void SubkeyRatingEvalTests::check_subkey_rating_eval_bad_s_ecc_e() {
   7.135 +    slurp_and_import_key(session, "test_keys/pub/crappykey_2-0xC027262F_pub.asc");
   7.136 +    PEP_comm_type ct = PEP_ct_unknown;
   7.137 +    PEP_STATUS status = get_key_rating(session, "18544492055207B2936BB215325776FBC027262F", &ct);
   7.138 +    TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
   7.139 +    TEST_ASSERT_MSG(ct = PEP_ct_key_too_short, tl_ct_string(ct));
   7.140 +    TEST_ASSERT(true);
   7.141 +}    
   7.142 +
   7.143 +// pub   rsa2048 2019-01-21 [CEA]
   7.144 +//       1E0D278644E2E293A9E953D9AC97F67F6E6C7B8A
   7.145 +// uid           [ unknown] Subkey Check 4 <subkey_select_4@darthmama.cool>
   7.146 +// The following key was revoked on 2019-01-22 by RSA key AC97F67F6E6C7B8A Subkey Check 4 <subkey_select_4@darthmama.cool>
   7.147 +// ssb  ed25519/7A03BDF88893985F
   7.148 +//      created: 2019-01-22  revoked: 2019-01-22  usage: S   
   7.149 +// [ unknown] (1). Subkey Check 4 <subkey_select_4@darthmama.cool>
   7.150 +//
   7.151 +void SubkeyRatingEvalTests::check_subkey_rating_eval_revoked_sign_no_alt() {
   7.152 +    slurp_and_import_key(session, "test_keys/pub/subkey_select_4-0x6E6C7B8A_pub.asc");
   7.153 +    PEP_comm_type ct = PEP_ct_unknown;
   7.154 +    PEP_STATUS status = get_key_rating(session, "1E0D278644E2E293A9E953D9AC97F67F6E6C7B8A", &ct);
   7.155 +    TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
   7.156 +    TEST_ASSERT_MSG(ct = PEP_ct_key_revoked, tl_ct_string(ct));
   7.157 +    TEST_ASSERT(true);
   7.158 +}    
   7.159 +
   7.160 +// pub   rsa2048 2019-01-21 [SCA]
   7.161 +//       A2C00B12660CCB5759E6BF1854315D29D106E693
   7.162 +// uid           [ unknown] Subkey Check 5 <subkey_select_5@darthmama.cool>
   7.163 +// sub   cv25519 2019-01-22 [E]
   7.164 +//
   7.165 +// sec  rsa2048/54315D29D106E693
   7.166 +//      created: 2019-01-21  expires: never       usage: SCA 
   7.167 +//      trust: unknown       validity: unknown
   7.168 +// The following key was revoked on 2019-01-22 by RSA key 54315D29D106E693 Subkey Check 5 <subkey_select_5@darthmama.cool>
   7.169 +// ssb  rsa2048/B16DED0A115801B4
   7.170 +//      created: 2019-01-22  revoked: 2019-01-22  usage: E   
   7.171 +// ssb  cv25519/01B398B420DC3B57
   7.172 +//      created: 2019-01-22  expires: never       usage: E   
   7.173 +// [ unknown] (1). Subkey Check 5 <subkey_select_5@darthmama.cool>
   7.174 +//
   7.175 +void SubkeyRatingEvalTests::check_subkey_rating_eval_revoked_e_with_alt() {
   7.176 +    slurp_and_import_key(session, "test_keys/pub/subkey_select_5-0xD106E693_pub.asc");
   7.177 +    PEP_comm_type ct = PEP_ct_unknown;
   7.178 +    PEP_STATUS status = get_key_rating(session, "A2C00B12660CCB5759E6BF1854315D29D106E693", &ct);
   7.179 +    TEST_ASSERT_MSG(status == PEP_STATUS_OK, tl_status_string(status));
   7.180 +    TEST_ASSERT_MSG(ct = PEP_ct_OpenPGP_unconfirmed, tl_ct_string(ct));
   7.181 +    TEST_ASSERT(true);
   7.182 +}    
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/test/test_keys/priv/crappykey_0-26F88D0B_priv.asc	Wed Jan 23 11:20:24 2019 +0100
     8.3 @@ -0,0 +1,20 @@
     8.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
     8.5 +
     8.6 +lPgEXEbjwgECAKrQi4nib3fj2QJEFB21fxYXSH0AP48OrK5am/fHIZnorQGQInVE
     8.7 +7/Z3DWLguO6JVGgL22T4HQyHFhq4PCed0r0AEQEAAQAB/R75v3wrJFSk7Gr1RoKW
     8.8 +saujYEFOxLfgDN93TfZSVZ0PoPLMSuuACVlJnisolvy+qzO43Ijur0h5u9NCs4fR
     8.9 +tx8BAL3634H04e01CgDb0IzOh8B0yZOxZT838T+DzOaA4NyHAQDmLKv1bhbClDZ8
    8.10 +xSCEwfTOMtLz0Ne893hU8novnC2LmwD6A68+ErYGMWXZBr4Hf00Nrfxqidh/AIMm
    8.11 +H6ZwLj278tRYzLQpV2VhayBSU0EgS2V5IDxjcmFwcHlrZXlfMEBkYXJ0aG1hbWEu
    8.12 +Y29vbD6IewQTAQIAJQUCXEbjwgUJAAAAAAIbAwYLAwcICQoGFQIICQoBBBYBAgAC
    8.13 +GQEACgkQX9b2Uyb4jQuJ/QH/Yub9iPjUXun8rHcerpT+44MeV5kA/N4HeQy8Ucdn
    8.14 +t5v+Y30HelR+NKtHgM3N9WlfnW0p3T9Gh1+huOxbuXOnY5z4BFxG48IBAgC6RCV1
    8.15 +28OxUGyMTu6ezqYB5ukTphHgEqPy7aI73EgxI7knLwGCSonliFaevk28GBiqssKZ
    8.16 +a4/1Xod/EuOsSgzFABEBAAEAAf4oZCmpZpgHhdScEmu9RTuLcwq854i9yd0Ci1Rg
    8.17 +XbLL8L/gae2bzzToknCZ00VqihWuw4dMqreV+HptAc2VetnbAQDQRgK1HO5ZeVYV
    8.18 ++Cz0pM/sAo/eP4QXFo2/bJvGqB2HYwEA5PMeOrq2N5P5F6NRkQtm5s/VnNMiohme
    8.19 +ps9xDyQIN7cA/0uYDVxvxMF3DqMDsa+LQ2a1Pz4ZoMJRnMv76bZYQ00DUyGIXwQY
    8.20 +AQIACQUCXEbjwgIbDAAKCRBf1vZTJviNC4O3AgChC8ynK4r5FjXr3pgQMffw3VPI
    8.21 +sGgUyZGkTiOzRvgla2vnm7JBackX0zgWYeKYT91Z1YvUAgaXsOtg5+E/6/tK
    8.22 +=7Xzk
    8.23 +-----END PGP PRIVATE KEY BLOCK-----
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/test/test_keys/priv/crappykey_1-0xC508F2B1_priv.asc	Wed Jan 23 11:20:24 2019 +0100
     9.3 @@ -0,0 +1,49 @@
     9.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
     9.5 +
     9.6 +lPgEXEblSgECANCN0ls7KiHjDvhNtjEXubECaeG6WUWyiVjylfGd5C3DkCpPw62j
     9.7 +C+5I5iTAwWqhgCYFXx2Taa5bZfxhkyc5sN0AEQEAAQAB/RGEP+1SuFS1Tf4UBN/1
     9.8 +tq6D3eHMNZBRkRCr+2UaVl5zfjgLByh089KOTRkhcMmFRug+GgFkoPYkwNEY9A83
     9.9 +Pj8BAON6co/3W+hfgFlQ3RVvHHtiUvr0crrpY3spzGqNuMtTAQDqs/H7QLO4f1Be
    9.10 +KSK3ZuEDfA1BU6z6ojG0Xo6vz+E9DwEAtNQlExTHD7bnPE81Y2iUmPe8v+MlPXr9
    9.11 +Q343n58EnJdQF7QpV2VhayBSU0EgS2V5IDxjcmFwcHlrZXlfMUBkYXJ0aG1hbWEu
    9.12 +Y29vbD6IkgQTAQgAPAUJAAAAAAYLAwcICQoGFQIICQoBBBYBAgACGQEWIQT3EriK
    9.13 +9SXk4yoqJLzRuGE3xQjysQUCXEbmRQIbAQAKCRDRuGE3xQjysdbTAf9aljQ/Yin9
    9.14 +nHuCp36NSJ6Pz0ojFH4U/X9bdg0ObJMy9nB2kq52dToQVqAAeCrNoM72nUdYpMNK
    9.15 +/gjUkAuZWJYCnPgEXEblSgECAKJ6vLeL3tz58A5Rp+xe/EfE1o/N3P3/75c2ESDS
    9.16 +xQZS4E0zoZaQGOcdbhKwTAyhGqVUNaz29Fh6P2Sx1XCMAiEAEQEAAQAB/A3Dj3qO
    9.17 +AQBftOgFn0/NARqUUGfItOyYcoOw+xT4fePJ3XPzmUoYpvnnK0KG6OjrQp7Xl7ua
    9.18 +dG9T4fB+gVJluTUBAMq19UtJyqzsLBNOSSDfEiULc5i19guLqyeK1/F23RYdAQDN
    9.19 +MUnUsbw1KZzQH6labVuFJEhz9m4WnEMKOw6R6ahM1QEAgzMDoKgw1Jk9qS7cCgtv
    9.20 +XfJMs+60tW2JLcxW/r2VPatSWIhfBBgBAgAJBQJcRuVKAhsMAAoJENG4YTfFCPKx
    9.21 +vJ0B/2UpjsZ2rfUzz4fL+i6xV5hLLtuGxfTmcSDCYxUO6oBSFixYOCKLJ8Pj4PPd
    9.22 +Xk2WwAR/46hX7RiTwKG4VdwlzhCdA5gEXEbmTQEIAN9yhr8bxHoO0UOcaer6bHnw
    9.23 +dJgNmnqpTprFy6/dQk0e5WQsSndqtjhbcM1bVPvtBN9TRNu2V5KskHkIGi9hT6ti
    9.24 +nwb8RpiMmP2IqBB4TG775dDZFoPCIUgT2N9ttHMmEV5z1T3ihFrRZMgeK2tjFgY7
    9.25 +prLm8SPJYy8OHLXtZ1pgjGq/lfWr9FHi+aRPeS+kacSe5kbJdiBrTjQ2V/yXdEUJ
    9.26 +mX65YjFLfh7/mWueMG1weyyM50EjTV/iD+5qLunYgU0KIeMwPEjqlGrj0JSNjhQL
    9.27 +4W3SWK0B2tu2zhT5BD+u0XDug+ZVR1n09HCcE95/BqIqpCf5TJxHswUqLH25dGkA
    9.28 +EQEAAQAH/RnnT3qpL+pMfHL/l4HPnTK3rvSPoyh0JzInGvlcx5pkKgimX82fN9ep
    9.29 +thaAb4YzEH0JTLLB3T4aNjdpuotilxdRvAjVxyNZLUU7Cey63XWCSz6eZA9LOot+
    9.30 +DYa9U42DzMCr4f0mHNzgaHQQl00ANCXt1WHpBux0pMRoOOjYSEKANmKpaU54QHS5
    9.31 +BfIL/7ZgFEayt5jtXsN41La69UvchhqX1OlxcT6gZP84V5cBMn9iom/bjwNMt+RN
    9.32 +8tRhYUh/QvlIziH6h1+/jtAeFYe/f2cVEqS0sGSAA3G8Ng2gVKDaZippOWYCGskD
    9.33 +Iv3V5Dqdzo0Lr1CdXuZG6BYw8OS4fTkEAO2aYYfIQCQrJCvSzPK9TZJ1pJ2+Wznf
    9.34 +rGcbt1KDi9IYsSLB95FM6P0dVBxeQMVcBfh5k5xz5QMBI4uaV80OeG+mZ/vXAWVW
    9.35 +ZamJiYJUANxiJd1R2vdoLiOEu88jqEOADcvAtYymEouAhViklmduwRoRiy7VlGBH
    9.36 +89P/U3Muz4ZlBADwv49v2OUAL1JMqXcCbsZIe03Wc+CofM3sr+Iim8ZF3GwolrQC
    9.37 +7WTB4gkRFK8YdhOIObRfceM49ziF5qf3jWtxLO71uA6mFG+RyLVHKjm7Mb1BBVzI
    9.38 +Wm3KLxR6BSp3a+DfyZ2abfOOisblZ7+4UFYv/oMbv+oexCs473bS/tdDtQQA0wtF
    9.39 +OlXQ0EvidXbNG3urK6o2imOiSlRL3e41CkfkbLS7e3t5mgbMfP73UVNVDf2xFo0Y
    9.40 +vp5urVMFs4HolLe/it9t23G1k8OzKoAVj8inOetImGcNbkq1AJo8LxTIgSNnAllP
    9.41 +z0An+8fy4iN8v3CIaEQDSWstIm/EWP0+zKHwPCs9BYkBrAQYAQgAIBYhBPcSuIr1
    9.42 +JeTjKiokvNG4YTfFCPKxBQJcRuZNAhsCAUAJENG4YTfFCPKxwHQgBBkBCAAdFiEE
    9.43 +RGu+bZeUOk6WERPaRphZFzO/xKQFAlxG5k0ACgkQRphZFzO/xKSCpwgAvKNwZHlT
    9.44 +APkILWmappLE3r99hPfWVAE7p3i69T8rSf/7VhGQiOpFyrw6u/BGVSWEQ+av0NdQ
    9.45 +IsxHCHu0fmV4PIhL8sRE2sP0/0yr6vdriJA5Bha43dv2Iy/EIK4oZ2xwNhPL0l9W
    9.46 +w4d1tr1hX50TBoo0nV3qH6AYHYAebwGCghMhEkeVxH8PzAKnh+qM8f8XpwaOAVmF
    9.47 +Rolg7GCNuDzNl07cyGkVcAqy/lsRNAEow+y3SA6UhmbtDoH2qTYOqYHh3Ntav9n5
    9.48 +rTjwumiLLpbDNnIEnt2rIED48d3krokt/8kSNW1FXaybca51vA0r7m43UycutEJ9
    9.49 +A4fEKzoHeGZkdKdqAgClDYMTn8TgJd01MSlkwhsqqeniG/dEU0ZCptOaYs2GsGBo
    9.50 +byz69d5LKTqcrEbuafP5MXilLOSQkcfPAxli7j0B
    9.51 +=TUJ0
    9.52 +-----END PGP PRIVATE KEY BLOCK-----
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/test/test_keys/priv/crappykey_2-0xC027262F_priv.asc	Wed Jan 23 11:20:24 2019 +0100
    10.3 @@ -0,0 +1,18 @@
    10.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    10.5 +
    10.6 +lPgEXEblegECAKrUcuK2FN/qr6tg0OK4IpDky/kJExGaLGGds2LNqSTuTPCHCCQ/
    10.7 +2gbxFYS60M8oaXpax+EWI4sydMzQR4qXo10AEQEAAQAB/RVGHsaH+WKHRfg4Nts9
    10.8 +JiTYMWSikirbgdJoQro3tWxBQscwoD3fjvzM8QQ90uAI88PxckYr2HCr2X4rNdUt
    10.9 +jMsBAMQjgSRjk9ihXeJ3iR/TlY8woiBwnMYl+diahjghGGZ7AQDe94svWLqIW1YC
   10.10 +MSlAAQVtFnoeGKCt+eP+O5VLG0miBwD+PfDp9sJ4EOU07/QFZ8dF7W/LWj/ByzuM
   10.11 +Gccl9jgeMBZPW7QpV2VhayBSU0EgS2V5IDxjcmFwcHlrZXlfMkBkYXJ0aG1hbWEu
   10.12 +Y29vbD6IewQTAQIAJQUCXEblegUJAAAAAAIbAwYLAwcICQoGFQIICQoBBBYBAgAC
   10.13 +GQEACgkQMld2+8AnJi8WIgH/TQE605yPZac0fEvzuCTl+k/vOCP1P1FkfsbUm+rz
   10.14 +vMnrslso3UFLJIclO9rmQQINl307+fRLXbuZ1Oy34wgtA5xdBFxG5xASCisGAQQB
   10.15 +l1UBBQEBB0Cug/QGjM5TjeKyg6niEHNv+DQZLCdFd49RHzSk896aVAMBCAcAAP9u
   10.16 +ON2eSiUMGZZUPvY7W9qMQ5mt4MAYsZjuG6xw6Rdo4BDFiHYEGAEIACAWIQQYVESS
   10.17 +BVIHspNrshUyV3b7wCcmLwUCXEbnEAIbDAAKCRAyV3b7wCcmL0ZzAgCQqosUluGK
   10.18 +Yn0mLBLLD6Ryhh1YAkehYyzdchOAZdDgK2vqHG4BIFmPVvdTDYtbFeZ3mqqcjs7r
   10.19 +1UXZAJtYuPO+
   10.20 +=2i1A
   10.21 +-----END PGP PRIVATE KEY BLOCK-----
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/test/test_keys/priv/subkey_select_0-0x4929DC45_priv.asc	Wed Jan 23 11:20:24 2019 +0100
    11.3 @@ -0,0 +1,32 @@
    11.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    11.5 +
    11.6 +lQOYBFxGBkEBCACxp7qY+FhxQmHicXiVNz65bZxnu8E72iGseEXctVJGv/F3J8DO
    11.7 +RU2mJ+VbKkx3levnCTQPx3Vwg77PSZyu8TJN/Nex9xSypTDo6fMtdOSWLgcKIyIZ
    11.8 ++fcsW61cSs7xgqdx/JaNzmfmXEe7OwoXi0I99BVX//uz1ZWK7nj/YiJs+xuTo5S0
    11.9 +lgWNQ+h0CrbSu4jT8ANMhCHCtqz+biFYATV70Rv3RNz0yVijYQ3h4tuwdONfo9gH
   11.10 +BAoESdhEdk12LJGrgvnY5FKOrx9Q0oHxdmM8Qg66pwd32pram0jeg0cQ3SK8VmBP
   11.11 +vfo24gtKsn4f0oy0jYuxWEgOK1BjNKgepF6FABEBAAEAB/sEgHxbR4HQPu8lkpwM
   11.12 +ZfW+M6+gtlKPfnfXe8XDccnXtqH7E8QQRhPRZ9XpUUFWT3OGq4ZI9xQ8CW6iqJoi
   11.13 +mcSdUtCxdxIsc8CxSkpqBroLLzfo8xp4X4v6sQkL225yks3E9vJmvgoGfaSoszaO
   11.14 +ga4oTUDkNb2uYTV0q5Xf3OAD9G82AXDWrjFuSo+f9/XZ/i1hTQFq83uL/KwB9zrg
   11.15 +V+sY6zvWKKsNngNLLGOjsA/2tE6HynVH2CTNHB36zVXdIGnof7EvTeFTCOj+z8k/
   11.16 +Npqr+05fr4HV7rb3q4Nney+sGyOLk/viE9zxss0nNeHPBflZiAjpUh0B82g9zXVh
   11.17 +LqO5BADEGHtLxqDczaIRVIfvZF4cGcDgJ7Qe1qd2j4CWhh1j57WkRXFDTxvgxL2T
   11.18 +E+HkSwmCLjjgzfLlxhzAQ37WmewIG3xPNCyl1HF4bzWpbJIl7NShk7W9L9FAPlq5
   11.19 +YIcF2gb/GO/nsVQSI4IJ4DqltNUpm6yBhKnbk03tCD9GIACiOQQA5+0gN1aKqjI0
   11.20 +D9g+P/FiuU2kwacBVr6NYgkncupuVD5P1pa8BYGY04UgwNBwZDi2rtRkSa8AUS0d
   11.21 +71wie/3aGeV8Ns1m/1MyH+4ERQAUARpAA4YllNIlCe6buic5nsZqSjf+Y6UyXyUa
   11.22 +Rtt9vRJF5PcjfGt+FiXJ5btFDH+Urq0D/RjpSIodnM51YVznd24pZfDDHOQRE/O7
   11.23 +zKGbykPghH3zv79ZBK7tWEas87UnGWgj7F5RPF+zg6AE6pPWp2z8DYFHJ1ru5f+3
   11.24 +C/BiyzTQgkZCLccFgh+xPgwpn0YlsmO86zTqGiRZidkV5UP3hpNpW46S9NplJP51
   11.25 +9EUM6itNccJLP5u0L1N1YmtleSBDaGVjayAwIDxzdWJrZXlfc2VsZWN0XzBAZGFy
   11.26 +dGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE
   11.27 +8NA8hCwHcMLCqf6vKh7ZgUkp3EUFAlxGCMQCGyEACgkQKh7ZgUkp3EVWRAf+MCTJ
   11.28 +Z/gIitYdJsGoYIEm4bs1JO+/lKZFSLoCtxtcIIFBDqsVhitDC0UtNyuD7TRXanNL
   11.29 +XirlOTN/uYKzP/IFiU+q0KoKihNWn7gK7tPdAQ5uwQZb/7omUZScnfPieurPuKAS
   11.30 +H4q5XGcqecET05FE/JORxEh57aD3/ILW1AakEeKgfC240Z8pEO5bTMda3BV6Va0H
   11.31 +GaHsq6GylvzKj2FmcxpbBbrUjxvat4oshTNReYHL2C3i4S4hALJCLO2/8pQzNqof
   11.32 +itRkn32oR7+PyYgXY2nnjPO7+Mr6J9Jgr237mzBeq/dAt4qlY5VI8tD1LfVh62tq
   11.33 +y96bbenIL8D8xOHWDQ==
   11.34 +=Aa/E
   11.35 +-----END PGP PRIVATE KEY BLOCK-----
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/test/test_keys/priv/subkey_select_1-0xF2BFF59E_priv.asc	Wed Jan 23 11:20:24 2019 +0100
    12.3 @@ -0,0 +1,52 @@
    12.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    12.5 +
    12.6 +lQOYBFxGBkcBCACzk5CHhKqW0iOYWLo82kQEg+SC61mnxZcwOpad008YbQB/LXRl
    12.7 +4vlxssfZy8upfazux7lMNvz+OlwmGWt+PiVUqZmfWtOkMtKajtXfOj2hXyKOvcib
    12.8 +P42N/D9EGXgo723XAnx0TRRjf2AmP/w/yHkORGBNnLLek6i5J73pnK2x6FtzKITw
    12.9 +8akrX3nwGVhC3DYd1Hf/pdTpl3mp8Lo6bI10rpSMmvcp4/Ie5uJ16LxO04loLAi5
   12.10 +Ic6Q4+YX5WOOPHvdY09w059MXZocuomEmdY8PIvoef954k4+KZWmYpf0SKYOscQc
   12.11 +uznCWTMAQAdRNDjvX49IswRZVBvJYVPHUDGpABEBAAEAB/wNWlR9vIqCGCe9F809
   12.12 +YiN69yMM7cV8ZAUSeSt4RTKqnSGo00SboOLYe/6VU4Hrh/n4cBHMuNgGFWktt2fW
   12.13 +pXYEKMT7ZExmzL/77dFkaGxrF+u2E9GbYwCPxWkfk19BIqXsaMsVS3f6erRiaRFE
   12.14 +3Y921UnDQPrMnHaIJ2GH7KETyz83hbwugUhJ4+5ANQCBALr+iraVxMGkaBPCQobf
   12.15 +S5W7CPJOCL3q0avb1KVRTedIkR2CNN7ZcDWLUuNIoWUSdUoP7AQFYBkIMN6OZkch
   12.16 +yl5aYt8sn9+cy6aHeD1MkUGqRaiSeYkeg/A7HR3wz0MSrJVWZkj9arhmh2+jW6dX
   12.17 +k80JBADLgRu1s9iOuo34+VZs1+4CrEYTZ8VqqEYc4mIExYkgG3U9dDYOC+HyJjkB
   12.18 +uk7JJ68g2k7t4eSCWiWdq6FIAlnLHvng0yxYyNA1wIau4YkkHj9jNl0FiuItFysg
   12.19 +tagfF5SuEkt4QQWDproSaNzbOMlJqXBA4npx3pRi59Ilah8n5QQA4eZR/jLtF4Hf
   12.20 +BgNP6ipYzGd1hVbrbx+Uk/KBXgsAokcOUNGT68sN4WN6SrYOay7BicOcYbwacXmn
   12.21 +5fwSxxKw/ldAVA69tjNSnxGWt/z3R6w5/0zfJErQSlBknlieDqp/+Dld4txGoIXk
   12.22 +7DhhXbT92aOws7TeZGC4BrFRrmQrvnUEAM94M+i7KqREitHDfia6hmdeNAPSOkEd
   12.23 +zMskvPuaJFljgijCqUHKVbm4XmMzlC8fMB1aQWHjhuGK0RzWPimm1TNeJV88pWDg
   12.24 +yQS7E+046Q5fhEQ9FRKCXRnwNs4Eeuy9GjPkguyuvwUK8opaP4y5BbsFbU63tW+W
   12.25 +S624HciQ2Ct8OJ20L1N1YmtleSBDaGVjayAxIDxzdWJrZXlfc2VsZWN0XzFAZGFy
   12.26 +dGhtYW1hLmNvb2w+iQFNBBMBCAA4BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE
   12.27 +kYr26Ybzm2MFQeEN9ff6NfK/9Z4FAlxGCiECGy0ACgkQ9ff6NfK/9Z7IZgf4qLkK
   12.28 +YeeqOmVk9HARqcyhYYhBrGOF4VaLVW5lJES5IzK+kT9wc6V0qGrqTqHrlLRCATiV
   12.29 +Aths/Gyq+eUbHFT68WQ9+2BESyt9/dV36QQyQ0tdgYK0x6G0anzUYjpwac1zW4M/
   12.30 +v5mBDFqhTbfNO8FvRsU6Yctmgw07q3OFpZ6PBAOXlfalICzZ2RNzRCEOvKhZMuzf
   12.31 +UVH/GfXceXBDn5Db1jFkjh4RJCP0XUaAPV+pw3bO2Sn9Ype3h0dqKE0G5K1QVKbM
   12.32 +rH8LACR6WSXbGdjUyB+uXcqnUKBmaIS5p5oKOMU+xaATM24t651FhOik7uS4gBdv
   12.33 +REr6yp1ae05g04eTnQHYBFxGCi4BBADa2zESBybF1cT3QqoEoDMLyq0tJOjrEXPF
   12.34 +HmkB8TBWjQpQZD29jXPk+Q3EPVCn2xA3oHDheockOlIJX27a4l2rdDTq5wW7q8C3
   12.35 +Vu2KAXFmsoVA7tEJoSDwm/V3KG/JZEJis2+mz/OYK2KB0Fpy3zQX1fanKRwVfo1d
   12.36 +sazhFQjbWQARAQABAAP7BvlyPGFW9noD/18z/NbAGbGZSDWDaK5TMqZv8Txm7nMr
   12.37 +L3mqUAaYeWUIb8cGcXr1LtihkEXv1ZM4Nw1AAqCxHG0LvdsI1NONM2LKBfe7ImHP
   12.38 +3GtVJN8ErwoO1pGIMjM2MG8RpqUSvP4aDk5w1/qHs4pdPJyQGQCg8/QfsjI9xnMC
   12.39 +AOMp2IxOFrIQlEZNuIDMZqpgo2s0lEAMxn7nQLmOhnBjGWH5avLi6md8ACefvhre
   12.40 +IQ11pj92lx0vtIi9Hl2C2psCAPajYmyHfTa6QdUvoTzY9V/Q/Xem+Z5r3E80QcmN
   12.41 +wkJVnZ5t31o6xouSH8hV5bCzmnm3AFMJQzWsSH/TGZHVtxsB/ibXietdyWTX2kPy
   12.42 +Qpj4FvRAcvONHTbJp8EXVIQkLRKUNZR7E3zxLySpRD4sKEBohCgkzWWuupM06JC6
   12.43 +cZ64UcecTYkB6wQYAQgAIBYhBJGK9umG85tjBUHhDfX3+jXyv/WeBQJcRgouAhsC
   12.44 +AL8JEPX3+jXyv/WetCAEGQEIAB0WIQTZpr5HRPjJJV6vGvKUbbiK2DrcuAUCXEYK
   12.45 +LgAKCRCUbbiK2DrcuN00BADQB1V+lYhcbX5XNZUcnvaPyXJCCmgbrtRM+SzUtkJe
   12.46 +IBgtsCfyo6Z3fSq3vl7s9YB9S8hKUBTzzeTi36i2fwlfcGMFgvB7N0qHJY3mRlzo
   12.47 +JXG2HpM55WELIp+HmJx8WKk4kYQWzFxarclm0u7hrSa01vwHcLu+751Lkslqe/83
   12.48 +D8IACACf499BLxGvC3W537gED9GIOousA5rB4BCdFvaXdfpXu8EYFI+cW4QSgtF3
   12.49 +lSp/7g5ggKkRyUtxmAcNBdw4V/1wpzwPvk6+0RKgo2IRY+r6fpiML5b4ULuzT38E
   12.50 +X2CwzwNerYuAvJM/u7BkzzmP9W0ZxkFw2xBTEvLFMvXyXEGNMllenY/aP/zX41lf
   12.51 +X7o3Y6Zq1/VIbYTwIxb6FyWWzNb5xpe5er8umQ7Dxu2pL+0xmshiFjIPymxaLLEk
   12.52 +9kCOqrl8q9OHfxswJvZu0bDikNOV9oIjjJFkDxQGirE/+zQFHxca0nnqwlkghb5m
   12.53 +kTdnvrwnWuCV33IV6KVBaQNojRlZ
   12.54 +=DSim
   12.55 +-----END PGP PRIVATE KEY BLOCK-----
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/test/test_keys/priv/subkey_select_2-0xBAD7800C_priv.asc	Wed Jan 23 11:20:24 2019 +0100
    13.3 @@ -0,0 +1,43 @@
    13.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    13.5 +
    13.6 +lQOYBFxGBkwBCACQa3Qt8LaXvGZ1WL7qJyjeKNd2xW5y6DO8+6Sm6AxEdRSkEg0w
    13.7 +DuceemwhCl8p/VlLsUsqnBXqxR6j4cKGQkSsmvZhZt6EFcPD9/OU1CovcbzylJd1
    13.8 +C8bxFypd2qVpOh0i0lOfhbrtbzCocoDVWZ4rfiMPUWy6E0HGfEcxU8GPMOSIsdbC
    13.9 +vnbZbZrgW8VK8f+vjn4FFrBtMF3Xs1LGwAuzSdTYW68Be7k3MkKKkJl0QrTEzIxo
   13.10 +IEO1EZStmo8VM8nGh0rLe+mQI9TaN/Jn3DCE4m4gmS37hyl4+MPkM7jEc1eJ8DAa
   13.11 +EYpnDoTAs58OBpuHBzsXXvFL/hA5U4rMl9mbABEBAAEAB/wMzGD9iJVTNBXWX2N9
   13.12 +Ml7g9TicT28ezWzMWiFOI0ahsx3S/ms0b5WpcfWZe1GnUcrd4Nva7lMo54gew4KE
   13.13 +Iw+dRkGrAb1FclJTexVB2AgsWoWBRTbONMQlbcVKOkv/W8WPkO5qjCTefBnmoPhs
   13.14 +L9F1uZYXekKgPir4O9+T7lVlwDA5bApDqwHRHqaDjOgUY6vb7ciBYNZj8AfPDbwo
   13.15 +hXeJZWs2BJrcIpxGyo8p9sv9QPdeXCnmUy/u6ABv/T56njx/p5nw5g7beDJazZJh
   13.16 +65SOXqPMNpMVbABL9Sw5YHTorGuCob5rKa7W0wgzFgIOaNKJPXuHKaMwNvfwJdi6
   13.17 +MohRBADAMbPK79TOwrCNASFZBHGWharfV1ncniLg2UrxXyLZs+taNfbYo0TorBV3
   13.18 +PvNx3B6V+t9RCOC0yFmBOA14gQbHo7P8V6nn/fDVPbhDQklFpiyZ/+dMvvin9mzV
   13.19 +Jdcv9VKgz0CbMPgRZQp221fwLPIOiAf0B5YFlpF7eo89hOiiqwQAwF15lRbry4l2
   13.20 +GMXE47b+SapKZDseYC+2d3VOqoT+fu1/SmpVk7I6llPYbFPSULW6HRlzNiJz9qbX
   13.21 +zByBN8Lf7p8Xu+RJUoq5vTySnXE6kDe0CTvll75KVDqCWEmCTeokBNda4gAcffG/
   13.22 +zh+8+PqIluz34fRAJut6uTUkONNhJNEEAJ8rO2MYmWpCecpo2jnp2KqQqiaBQX5T
   13.23 +p9n9CL/5vcza6POGqpI00BQ3P6jhrkgcu4IzGL9g9cNt/D34SIzWEGdcI/RDEwR9
   13.24 +6+xS5JBbcOwtGaSW7oBa5EyQ6mPTLwpqexfWzBRSU0oeyPUJcFs8qVv1TRSj/r0D
   13.25 +FC/TBswOMV5MRd20L1N1YmtleSBDaGVjayAyIDxzdWJrZXlfc2VsZWN0XzJAZGFy
   13.26 +dGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE
   13.27 +iJQgLj15HJVWAFi9d2drrLrXgAwFAlxGDH0CGy0ACgkQd2drrLrXgAwt4Qf/VbzQ
   13.28 +FNxLHFqi6x2mffvPR3gUtygMyv3EjlH8VOyDuDmGu3nCm7Q4LdtjtVhDRYlmwaQH
   13.29 +lVp2JxRWDVPUpru7fKxMxk7H39oGoh85VItJAyqZZhCbal2FM/W3j/+pnig0Q2kN
   13.30 +oCVlD3WZg13Ejw/cw7z4zasaT+O2AJ9KzRNw4Hk5FEnlhjuSCLdox/oMCe5RM5Nm
   13.31 +UazC5m4ejpqE/hryLzp10PjCMJCXz2fMrAWMZbVWB5vmioP6oR0UjiJdfnEPjjJ7
   13.32 +L2w7A08j6kATh4+hPG2FXbox6J3tBJ1flwWcZGiTUYEzxPpq3ArOqUEypddkNdrs
   13.33 +hMQnwSjBJzdFlR4beZxYBFxGDDEWCSsGAQQB2kcPAQEHQIxutjFIiJAtLbBcHCnX
   13.34 +U2jM8JJ8Gz8aGeq2p9KnzVCrAAD/Q84qakEUlqTydLlNFaKwPxSQMa8yU/K0H15X
   13.35 +UqiaO6gPP4kBrQQYAQgAIBYhBIiUIC49eRyVVgBYvXdna6y614AMBQJcRgwxAhsC
   13.36 +AIEJEHdna6y614AMdiAEGRYIAB0WIQRWH8vG5CqfqndZdeTDVOVYIRxyngUCXEYM
   13.37 +MQAKCRDDVOVYIRxynmFFAP4vQjE4j3g1965DVPhMMpmfJ1lhOmqTZBjB7ivDWIDP
   13.38 +OQD/fSq5SYLRJYFnHT27WEFut0DlwDu8/IHxsex/F00oQwLcPAf9HYxMGJGihaDo
   13.39 +PzEUZXCTBhjCoVJpah7JPe5NK80DtRn+HmuQyoFuxUHLKVQb5QkWm8diZQk0/Lf2
   13.40 +Dad9QZttDycK5EKfbVWE6TlS8bCbJkGuhtP8qcJePT5Glo1xQrJ64Cb8Moh3Xkih
   13.41 +WggZdqO7EKEFxrpDxbDXLjoq2emdHM3VfjtMwqLm+TFbU1gN9womWSucTqG52+Pz
   13.42 +4odazRDC7vsH6+rPl4xyn/gjBBJm8HFxvw1ehoTNFqxUOIgicfnDVsJzcn30cC0K
   13.43 +YPRFKal5dBMuhdCeogKbj6/HOsr5IiPnTXl3g7sHFIHmHPsYDs/CKGwqkToeEFkz
   13.44 +TmswobwksQ==
   13.45 +=c+dd
   13.46 +-----END PGP PRIVATE KEY BLOCK-----
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/test/test_keys/priv/subkey_select_3-0x34F44C02_priv.asc	Wed Jan 23 11:20:24 2019 +0100
    14.3 @@ -0,0 +1,68 @@
    14.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    14.5 +
    14.6 +lQOYBFxGBk8BCACikTVRrTEv3Ak3GBm6qNvODY2/P6gksIGgFCqWf6igu2xcBFq/
    14.7 +lNSVXTWUBSHKJUTXujizohDj+uu8ptRxiB9pIjCED10rP0pFhknYRXVInfx6uxGE
    14.8 +ToZ30VymvyVFw1RiHd4Fxg7fg3ri4+8rli+DxcgpiXySusibasnWjrUJMBDXMFl9
    14.9 +LpKCXaS7HNuNQqNYImbM2x3X3q66XOgPb7VIzj8nqdCugASTrCOMZvVytGghPATl
   14.10 +03JzFDPmzbVyxQaGPCqOe9eLVsy+YEvQaZ86qPUiJuEJ/7+ScwvB++kjWi/J6qTR
   14.11 +4SeghWPJr63DYwy6Xo6cx8Bkvhriy+JnYIrvABEBAAEAB/wPviUeMDnrqxC/Y5eW
   14.12 +QmTqytg3tYfoaalb4agQI/OmARBoxsks9VIy1rBqEacohrxocbGs/5xIH5P1lGhN
   14.13 +SEPWcAenuj8pAXuFSRBcn7lQW3BISFZVbC9MahthUHBhFZ3V1JOcFoZ5MafUUgNm
   14.14 +wqf+SEhucVB9exYTKt+55d71MSljQ/e4Dn6XQQq88871uD69D/EVU/Dw90oUrUnz
   14.15 +Ty3U3RVHw2GtK9DUHF/SfK8Nc69u3IMpjpRmdd/zIGtnrT/mhucCFkwnfSjn7tEx
   14.16 +U4XGgNCbsVMDDStTn669SMD/VuBJ/O5ct3PR6BTc/gpTKQuTAjY+sUaneRbvKpOT
   14.17 +vqvRBADHzgpWllmvCbZc9x7vIJwfUsGQlSS4QbJHtL8UYke58oS/LY7LY5IyFIDS
   14.18 +hhCI9oVYbMFmWRd8dO5I8M4PjTogcv7BwP2zoS7hb18hwjUZ0BNoCVnZwrjZ1HQp
   14.19 +d+QpdQNeGmZG7JtKGM8UTAWV91MlfP1SST5gXm2ZvXcXs811XwQA0EoOjk5ZMEiQ
   14.20 +7xB4JhXWJ9aPR3k9QN0ENFwazngMCufOljBVFqfdv3XnVLN27xdpdD5ajOEW9p3K
   14.21 +qJYFhAzDpmlyy1OkVHLtO5iXO9ahyl8qRRg9KFb7IQF/40duR+VdOj6+3JvjCaoq
   14.22 +AcIUh680wxNGw6Qree5npD/Aa/oNxHED/RT71bza2n+YKaTZG7ZDzkEtG6+aEooN
   14.23 +zWpTiD2bF7/hnS2Y5YAwaE2NrreI3dL0x+aq9PQEZBKWna7vhvDaBiGSeclafOc0
   14.24 +dSxowA9BDoiSV7DFAuh3hEOsVQyjjGUcagv8FxkYX5VCEq4lJf5qhHMuDeqMhZXu
   14.25 +HsfFsURIqoocNmC0L1N1YmtleSBDaGVjayAzIDxzdWJrZXlfc2VsZWN0XzNAZGFy
   14.26 +dGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE
   14.27 +XqX39xuzm095JNHo0RxnYTT0TAIFAlxGDVwCGyEACgkQ0RxnYTT0TAJHfgf/S01s
   14.28 +cxkskxHWeXwUfVeb/iYbX86TtIB+AJfsiw5HavSQVdH2gU9m6ZSm/yxM9+WRU4uA
   14.29 +RaiXRd2HXCMwqx3IIkPjNlNSyB2xyTLdsddCr0+Tfw09ELbgqn9xZk2d4+EB52QO
   14.30 +2D7sYfjV6Rd/HBtEfvihr0DZtXQA76TTl3dMUVPP/lq/FmaGFaFEROtnAKkOnLhv
   14.31 +cNAQVFuVmZ0cZRR21r4qeoblOvSHAWqMSSQ6H0f/xkPJj7qOqGoBRSjyPdLBogQe
   14.32 +YaIQTDChtya2WCEqKTF1qPsGyUCLYJW4ieFLXirfQqFkuGgh3sflWSwF3CYH3/m6
   14.33 +w3j7aAuVXTVQjb3qk5xYBFxGDV4WCSsGAQQB2kcPAQEHQK1WjaIbAxPLWtVDwrGs
   14.34 +BTXx5xmsPko0/7acLzBEPGu5AAD/Q3AYePqEt3mQkSZvZIJx8uirnQ1i3dn+Xv+V
   14.35 +7agDZiYSWIkBrQQYAQgAIBYhBF6l9/cbs5tPeSTR6NEcZ2E09EwCBQJcRg1eAhsC
   14.36 +AIEJENEcZ2E09EwCdiAEGRYIAB0WIQSoApShnz2Mo/d2YoNaLJmUAdrVJAUCXEYN
   14.37 +XgAKCRBaLJmUAdrVJMKkAQCGLN1t0q/2PpPH2pSGjxV7Fx+JVTVnOzJJqOgbligZ
   14.38 +vgEA9yg+XIe32fvppxa5Hj9iVyrAbxHSt/SMa5aAuoSnAgm1SwgAidW5rtpCgmdK
   14.39 +D3uEh0gp3aLnpJqx5WeTkw57bIgzHouztF9avCP/Adg8jwjUUt7SsHoRNN6D8w8Q
   14.40 +AcVelf3FbqHtCFrUnMteWABdbLXoOHg1c8l+mnIfDt14QoOQszBYhOAdGCt7fyh2
   14.41 +Q2sZCwSIxsIlVK7d/pjZ2UVBGfwArxVHHLwcBhJA/g0M6Bee0Ak6gixdRcV56+cN
   14.42 +b/S+sbMXC1RPR21D0pTikEvydRhnFozcLmOSAUj2wc6d0UAvmVmP1G8fhgyjSZ1H
   14.43 +I0tnqhLgubYwLKinnpjkdF0yFqq0Er0hNLPIbM41UENj5BQyucmsfMV9GkewPnWY
   14.44 +4+MP5+KtMpxdBFxGDZMSCisGAQQBl1UBBQEBB0Dr6TTal9yPtgRTA6lJpNCca1lI
   14.45 +ZUrlY7rXd6QGU1xxDgMBCAcAAP96xpYMKeDFyT7TXf+yaW30evDn/T7XvZnvL+Tv
   14.46 +/XeaIBU5iQE2BBgBCAAgFiEEXqX39xuzm095JNHo0RxnYTT0TAIFAlxGDZMCGwwA
   14.47 +CgkQ0RxnYTT0TALBwQf/RJttjrzJWxAmbTtNTYUrs3ze+XLN0u/XN4Hrl0Wr/g/a
   14.48 +0+aV8c76ju3jHLRK9NqidediKiuzJL8d1KzgapNBjBp67RhPrusRIplo6YAggSYg
   14.49 +5ZuPL6zqLe9ZZ0evhdltUeCRNHegwLDVVLp8xw0T3jQPdSuVGqI88iu2/go1f1i/
   14.50 +CyjzwzDNVnYzCYozZsrF1+CRyBsAsak85F6xWgIr4A7JqZ1UUIAAcZlPUU27szFA
   14.51 +w3QL/dBpxfejlXK+AYOsM3/1eXergfWxyJo6J0CAIXA+9tCbOuXbIbJReEdfdQwD
   14.52 +6vke1icWTwrXsh4Zt3Zag1sXq1Pe69pYUVSvglHYlJ0B2ARcRg2qAQQA1LNWmbgS
   14.53 +HrqI3T8vYGg/18Cf5B9klY4UWuAj3VsdBJVxp0ZJwzmk/N+0b2XTuWd8iPlHuGn4
   14.54 +Plqk/zf+C9YuWOtXUCuRGlQeBuTs5LVgV2QeFf/Q7+mZHOmxOPO2gTlPI7S3TcQR
   14.55 +aB0nLYSUK/11EHHMtauy3LZtmdqzazKdJm8AEQEAAQAD+gIsTKfBY6w5ld6ZPDbl
   14.56 +7xgno94aVOSE7Yb57lzClVH6cjfrgJT5zDwqCHr/UcVS7DqSBPceBu4hfLkqWCs2
   14.57 +WE0T8AqmJcj5RyaaF/36/sdKZ7YrCrTrkja0zmrn07pSfI9pte35J2IzXidQtUmX
   14.58 +Q2G7m3HZjjwOHWN++PoTTEyBAgDjGo4004LnfpcLt93Uob2e9uZKjIbzcFiqxkGa
   14.59 +sHVv4l00SyukB0lUuYtfeT693sP1XLbAYiN+piUxFau4dWFhAgDvw6DBTS2+/ctO
   14.60 +D95lmEHNsPNZgp535G75wFbBSeBJo8lJckljv22DYtYnbHbEL4jxaLn4SGA1898S
   14.61 +HMuFpwnPAgDkGGuUc7zYqME0xxw04GAvdPJ0MW2Mm0gLwqeM75GSI3oOBUcKSFrd
   14.62 +TSYLjXlMPTLXYOrxxEFkVaWRPleUPrj0pHqJATYEGAEIACAWIQRepff3G7ObT3kk
   14.63 +0ejRHGdhNPRMAgUCXEYNqgIbDAAKCRDRHGdhNPRMAoZiB/4rSiCXB5PJMAQhC2B3
   14.64 +A5pYQL52kP95+ru4VjAUINmpWb/puycnQInTu3afKsFHRV/pBMBRbk1yI3u7NGt+
   14.65 +x3REr14KL/k5e2q+MthQPr0Hj13jAToZsc9+9hZzlDl2fuje8qx09hLwZ0qqmkAm
   14.66 +7LzSliMLeot/qr19dioKSsdJWJdOSpsHtEUt0tO0wbcBXlfE5NRN17bH9KgOb1L1
   14.67 +15BvklWlglP1AplIvWIc63ii76MCohW6Sth/QiLOmVBqS6trkQxyYa0GOGnkSBkC
   14.68 +8Tn82MMP8AMlGgpdFykb+8xYNvHCcCJrJPI3ABCamGe2DBH/aIbzTcMXc666+8yP
   14.69 ++rtx
   14.70 +=IIBT
   14.71 +-----END PGP PRIVATE KEY BLOCK-----
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/test/test_keys/priv/subkey_select_4-0x6E6C7B8A_priv.asc	Wed Jan 23 11:20:24 2019 +0100
    15.3 @@ -0,0 +1,49 @@
    15.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    15.5 +
    15.6 +lQOYBFxGBlIBCADQ0BAuaVLY6qVfirbMzGVE9o7T9vJcRuLU5UaQe2xVS/qswu6T
    15.7 +q078R4ItAOItaSUhP081MMZNHCZmMHtJvnkgGCQfGdUnUntbx/McetnNHanXOFtX
    15.8 +51H6rBT2t+0kFQ1FcofG3jXlOgEi3ISqv2MBfkhFG+feVmc1uCcxp4A2pFp+cLhv
    15.9 +nWIJ7ksvKyGM+tbQOIpY+ylYcFWDqCzSZ2nv97U0GMVY4cuKEZpGB8ArPec8X7EM
   15.10 +WSbM6rCHsWSdIO4XrwYazQZeBnIUAN44h76SkSdNuSqJgasXNmJFaMoZtZ8JrcCQ
   15.11 +Zrre+z6CBDr+Zsn5PoqK16TcYZKxRv1Q5MczABEBAAEAB/9lMJ7WzuV+Bt/TF/aT
   15.12 +8m0U6WK3p1E1lIhx4RW8CIOsJiC5PdG9r+Ob789OncH9fZmnrfVlclh2n7CgDtiA
   15.13 +GRS7j9dZVvxrjNYI2TGf2IzZkIlwqXfidk/M6T1TfjgmJymCQQk5Pw/hIKXSTgjg
   15.14 +cdS5sYe2LdrEbRyg9LfRoTlJwKTpdBZQcBbHUIuYWij0HMabOPW2ZgJKTgGdzLuo
   15.15 +UdIHTlCraovpSX+LF+AMQmMbQXVuSnO8bvSSENe24xHeOv7hA6QtH9E2puQQTqR9
   15.16 +cAPVrcNa1rBg8pWi9EeqwocSMz/Pj3dKj4sF53xK/JSrmzL6ArNguZUQwJziQZ2/
   15.17 +M6c5BADVfcJ2dDMBNoWacStxETAJMK0msIg5JD3fGckaEFAnuuM3U5GDrQfD+Ipo
   15.18 +WpUsEJwohEvjU9vihiFHz0nO9x5jB1oKoHM3Kq34xBlh4B9jJC+pbJptVGi10nPB
   15.19 +pzbO9f0A6xbTJljVxv5HUESoFwaICbwm+CWR/CSqMglUJD+rbwQA+mPT0H/NJPKX
   15.20 +3MVFgj7COpiPMciUyaeyVIclIh0HJHhqmryPSliQrbHjctsOgHy1vwLhtMHwX6Jm
   15.21 +w48Brt411SZRP6pUBOGPkjO100mYlxlX9rRbziVY3/GVHqWTyG6Lzt9HTg/bNmgR
   15.22 +MkaHpLNJ7LliYHM6F4AFFSmXgWVyDn0D/0zjTLGWQL22TmtzlqDPq8twgzrKqyVR
   15.23 +Y5LBz8U8stfcBy/8GUWy3bWgp6mUTOywzolR2CXK4qf0Lkie9Ooi7veo2hRNyogq
   15.24 +QHsy8IGtD2KgwDFrGRHD6K3eES/kbiqQvGPKc8z8JkChYFk9nzANbkj/UILz/6YL
   15.25 +Oqh4mCfqAJnPQke0L1N1YmtleSBDaGVjayA0IDxzdWJrZXlfc2VsZWN0XzRAZGFy
   15.26 +dGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE
   15.27 +Hg0nhkTi4pOp6VPZrJf2f25se4oFAlxG8bsCGy0ACgkQrJf2f25se4rBFgf9GFyV
   15.28 +dylvzmkeHcf2AyL/+9xXtwhIowp45RWBwyYum4kpbeHa7pBBBCYthDRFpIE+G22M
   15.29 +Cf1cPEjoGqvRbBO2AusozVeqQ2kQ4+Cb2aC8I2Em5+7aFgUSN0VLEKi/9n8eMu0z
   15.30 +WBVZo+QCGOXAZ03tlvatBd+awNniXQii3G49roOdGzdv5v4hA/hyCl3IqIaJIpRK
   15.31 +z1gEh8EpkapJveTYCVH7azZZubunX1O7cOuDxs5IOZWQBijiXA6jXsqMI06VJjX/
   15.32 +UVeUViQbywmlTjnRwImAyZsWPDByCPR362Ar+Y4k1iwgw9TDnqmnWiCBT6NwaWFl
   15.33 +VjmCWavVGuU/tUWjm5xYBFxG8cAWCSsGAQQB2kcPAQEHQPT1C2N0d7S7xVo9hp05
   15.34 +oHdabF9O7OFbOFzljC3GdIwdAAEA6IiGfhtMFvL94/W+dVe2k55WJ7PAWq+exSR3
   15.35 +/7oEgboSGYkBNgQoAQgAIBYhBB4NJ4ZE4uKTqelT2ayX9n9ubHuKBQJcRvHzAh0D
   15.36 +AAoJEKyX9n9ubHuKvy8IAKFdb4EAiNZ2Knpu7veEJUtHFU5RqK2n36Yt5uOWyYlm
   15.37 +lMvIvfdnnWyLZo8n9V7ZviWbzIOQyljQC+8AGEWzmfe8588cFiSmAO3Z+vgL3Gtp
   15.38 +9y7DOerGQK1l8VZDTthv9k00QiWlSYRNSiaX51eNuCX6e0/tm2zM/eSZT3lmgFgf
   15.39 +qFm57S3cVcrb0hOp0gVEV7KyOWTd6fVwHOoH0SQJMEhv5QiWe+1bN4sj35mSD/bm
   15.40 +FFhJzGBytC5XxmaFy5y5Ej/M36gTOd29R47yHp9+CcxrPJlBv/ulRT96aitx8+PX
   15.41 +plQiPjA1gqf2wLaijrG3Z7CKTw7P9X13r3TYAMu/slGJAa0EGAEIACAWIQQeDSeG
   15.42 +ROLik6npU9msl/Z/bmx7igUCXEbxwAIbAgCBCRCsl/Z/bmx7inYgBBkWCAAdFiEE
   15.43 +9tfb6mpSSdbhzcPaegO9+IiTmF8FAlxG8cAACgkQegO9+IiTmF/5ywD/ZNFuYrMq
   15.44 +2h4LE7XffiBwbvUbdQ17ybLHfkM8gDQvJKsA+wZjliNP9bpN6hZG6YyDvPOSQq6l
   15.45 +YoPbd1gou4NRyTMAVGQH/jzh+PV96UJCvCKJWaEr9yGWPWkgSa2Ebw1mNzB2maW+
   15.46 +NT83Ywckd61747dghmz5ETuXfFKXGp3nW2f7ozDs2Y8P1Yh6xMge1JN66ZDPd68J
   15.47 +Z2OawG5i0r1/9hXWKrcJQQALkzYTFij1IjZQEMiQ/1sgAAybLHPVOeXv7o1F5EZ6
   15.48 +sCQybQ7RCTFLRkEFjc2OjIeH3+NMMdibEPSEtxBz5Q+kW/dB9c4EGNplVuDSC89V
   15.49 +iCC+NDSi4h97dPu3ZWY6SL2+4K5lOEoVD5XB7rBDHaT4h8BvGe7l9Box0W/y4pXj
   15.50 +8NePc/YZfuEATtasqfObSTShXTQf2HIJgGwuxXXAQp0=
   15.51 +=mMuL
   15.52 +-----END PGP PRIVATE KEY BLOCK-----
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/test/test_keys/priv/subkey_select_5-0xD106E693_priv.asc	Wed Jan 23 11:20:24 2019 +0100
    16.3 @@ -0,0 +1,73 @@
    16.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
    16.5 +
    16.6 +lQOYBFxGBlQBCAC4ZU2FVdlU3ghrsETX/G34YFP7ywiy5cHlayODWygJBOz6w1MI
    16.7 +OiG6tlGzoB7uGMRfByIz00Ry0GoJtm/shyrh2f+qrT5Pqw38SpjJ5PipMndNPaQh
    16.8 +svxWnrpiSpnn/948uqoUHVD/oDjcJQHLVRb1j3fW6oJqV7Z2IjMvhunCtmJ+63fO
    16.9 +M9dsV43oYRcMv13y3rGKsK6OLBuOVNXVbpRKN3Q2oUui2qiVsq4++ABbBQQN9Nft
   16.10 +8poMArL9wLCL2pUB+ZqMhx9SW7bYByyQSdiwZj5CkR6EwNrm73ZIPgByKg5193de
   16.11 +s32DyadnQYbbFQu+YjMgBYekfY8o8LtZEXpfABEBAAEAB/9EkEJlaDkB8fc+l5HZ
   16.12 +n76CQssnjmSjJIRW2mIflxcJV4AIc/VdU0Q0aVNyz4CAtsvZq8zfaViDupQbHW97
   16.13 +ivz6crU6kOVg+TEflNtAAvgk7aNnoJp1f1iNmsKiBqw4lC7d9OiFxyrVig1qagZD
   16.14 +RVXeo+SDELrCcO/i+C+BJhCoeceZtpA69vmfou3bYT4Fj3yc2rAvJSLpwJgdRp7d
   16.15 +9tzbT9oOoca614TY2dxL96xwWhKuOSTj9XaG9UnvTa+x2wdtEBnUqodjEo+Qlwka
   16.16 ++QzaJSZoqEfFDBMWz7bdaO+1/csCPMXXHyuDDib1/7GnAU8kouDgrHdDAqQgLa++
   16.17 +Pbs5BADJlxxygBtqYleSuGorV99+RAoDHl9AIqmj88vcXyS8T3GEjZ6j6jWIUsTA
   16.18 +VBV25hCFM6YaOw9zd7m+Mxcz7KUkr+c6u+fmnn7p//0eLDM590bBFI+qlxTreg5q
   16.19 +GP5RodvCUO586SCDwL6EB2U/jviH9zkRET9kB7OpVGKZCbFUhwQA6ioh8K7Hhe+D
   16.20 +7by8QoJap0VSfkH9FUh5Yv+toaWWIVjjeS+kxSlL9Fmylpft+m/BOUcibvXBaFlR
   16.21 +/0kZHekMcaCm0PMc0AVTsB2Kro5BWOBMKEBIdEGBjiA1LudLWmIBNYVjJ9VDG3CR
   16.22 +xP93g8OcPiDCvgpz4f2uQGDAVFkOeWkD/14CsWLPDTQlnQu1NMVMIn4lu5btbuqW
   16.23 +Bt1y3L5xUQa7AQzFRq0wAGCnmwAEXkY2TUaXK/iLYnu+sugBaWb7zzd7kZ7REWsf
   16.24 +gUwihJljDOwYmUrGBf8FEYiw2xTJCKbbBUrCkkjnUt1HNz3chSkNuMcVbuQD73Pj
   16.25 +ZNm/BEmwFqjnOzW0L1N1YmtleSBDaGVjayA1IDxzdWJrZXlfc2VsZWN0XzVAZGFy
   16.26 +dGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE
   16.27 +osALEmYMy1dZ5r8YVDFdKdEG5pMFAlxG8xgCGyMACgkQVDFdKdEG5pOa/ggApoZj
   16.28 +V/dIerseQjhRvcmsb8AuCtYIeGJdQsI2vmPvi2v3sblnHzJN6fqHX1kjW+Anm/47
   16.29 +O8Y38iCa/ClGbEzPlNIjt2gbRU2fDMFXs/Y/uahmJ5im8u1o/5/u99t+Pg8xWngy
   16.30 +xSMfbiCUah9+sWV926qXMgAWLQi+WXEth9hJHDr0ojnSYZdv7hDj1ja5Ureq+f8c
   16.31 +vZN1JlTT5Eek3mUKcCFGT0MgBvCw6oyXuMS2PhQETx0MLI/A4DZ61I6V3CugmwwI
   16.32 +UV8R/fzU/n8lF9X+5To+kyiRhznB/jaqXmG1bpF+lpxTegbBNcfEAKHhHcj7yuEj
   16.33 +zSKSvGu+duxJD+tXHp0DmARcRvMfAQgA4nTlPF0e8YPjg8iwsdwjFsBYUPu4Jga2
   16.34 +ZKdgMs54LujAs8Hy95JKS5i7Dj58EDzu2WLXkBXQkm9iYCd9K5dPAdXb56aAqtrb
   16.35 ++FXGqvdIAeeVIN/G7m3r3YcqZuypU7K/TsCU1/l+AWOYi0i7P5b9awVY9gAVTkB9
   16.36 +fglKMR7FlISKt4vriwYu3O36BWNx7b2GpsJmMQVoA0EG9JytnaIorNBjvFu3siJ8
   16.37 +PU0SDIhXJUfFVPiGiw0xmikxUB87tBnAhtqsHh56KG2zKnfW1thG5YHzPiLkba+u
   16.38 +zlXUrbBUxzlY9PXy1dBGR/Uli1xQD9YMtpyyD7P4r5sHLk5lc/aCTQARAQABAAf+
   16.39 +Jw8Z/d4i6O3CZ3fNUDQjwjgVU4yDL93fBj/fRgwaKx8eo7KbbWuoUF8svlF1NRjJ
   16.40 +aqnTe+jjU2qOSX7uJj9gE3U3S36KuU1r/OqQjGr/2sI+lM+8IGJJuSkn3V5K+2J8
   16.41 +gEETuyevfd5XkIiQMXDhz1x6Al4zzo4thvhjuVKxKgMaV6SEqDcOoUEd2lh1T/7j
   16.42 ++656x3G1vcMRp4dRtVSmKsVeBEd3wUxFLNZyvJxBMeUU32+o3MwuBnTiTztLjBil
   16.43 +77qWc8GZMlST1nTX1YcjL5PPLy1rBKmHp+3iqaO9QeE0s4McAAlUY7ep0E4H1TAS
   16.44 +soicTRg7g3n5vu8yVFF++QQA7T/DxY27CSn5itx0CsJdHnSj8xqgFmIWP2u6ukYW
   16.45 +BYWbYt1lPNfFn9Mc4dC4jBYcBEagD1WZiz16msGqdcwlzxLTtbPiWyXvd1KG65hY
   16.46 +QgLOCi6PO+fNrNZBmYFbVoJxIr9+pjtfFOHNMFQY02prm+3ZahX0R5Txp0Jn+uZ/
   16.47 +3eUEAPRaxKAnwKJH3e0NPeJCQ0b/sJaQ+Bp9U4kFJ6dbUkjirOXK7+8c4J+3qu4B
   16.48 +e89WEtGpbC3X+sGzMPZ/1byvddeMJWWA90qOedBQKRPpDtQU0NkIUOUnXmKpsKBC
   16.49 +UbNMLtSq3OOp2hSHPKyAaZUQ/iqKgnT0SMvitLdKlZOBG4xJBAC1pDtxf/HHzG/J
   16.50 +gBjFJnfkDXkRabciQwYT+wqHOjpDSysiJZJ8rQHZBvK4WAkxJq3F1GxSRdTU2xpb
   16.51 +8WQ5dMqNN/UXEhzUNAKlVcv8LZxElXcDdAgsK/aWG6DNONIACHi/k9uUCmFi4wbO
   16.52 +/pWPsCOUqJJbcdGZE/CX5RLypkLmUD2ZiQE2BCgBCAAgFiEEosALEmYMy1dZ5r8Y
   16.53 +VDFdKdEG5pMFAlxG81ACHQEACgkQVDFdKdEG5pN1WQf/cYE9+f7Q5aNEK3CtxCIj
   16.54 +Z3mqeHioItNVW88E5OLbpwfoPCWBVVTTHmOibeHdjjo0P/qZrOMTzkgLfOIiLiyS
   16.55 +6D/EHReyuX2GjXuTFelcccytcOuPOPmJl7yvAVp1wfOwmIX7gvGjXIeqji2Kfv3l
   16.56 +Ff35g8v4QQYGsSVG5fczysSsieMJBTpCvYc8Y2MYdk1Uo0h180a448yIaCRnGdM4
   16.57 +STXdj/g9HSwoyGJFCDQx5zes99jRSlmLJAzNALkE+oY0r0QdMHPTVCKVHBrRztZU
   16.58 +UkYRAoQ7hHbErGj8spqtxwBMi8BBDOYrD8dCltGPOH1Lt1HDH3E+Ju4VJwfZH6gb
   16.59 +rYkBNgQYAQgAIBYhBKLACxJmDMtXWea/GFQxXSnRBuaTBQJcRvMfAhsMAAoJEFQx
   16.60 +XSnRBuaTDi0H/jJJ6o2Jf8kX/l5BT8FKvAA+PpWO8BFQEFPMsIJKb/n2PqAc8c+U
   16.61 +Tizkm+bL4Dgk8m2lMmluzR55KJr3Arau2BTrHciXNEctVIEeobUC/yIRB0sMX7hK
   16.62 +fU0cDSBtOJoZA5JcSIFoUY4A/I1Suw3FX2uZASepsWPcu8Rj9moNU2lyXoxyb6xv
   16.63 +zEr9DLj6Rc7211VvUnPeXhYRVs/PlMWp06pEzDr63f3CwxxWXvfCOEszIw51OHYr
   16.64 +DdGo+W5enOmHY/EuiV3DMME8AqjSYiTiw4LKWGoUBq+9HUM8GW3sdEXUnFx0gq3J
   16.65 +sx/W06SuX7gmKpnIT8eg3KH7WV8WD8XgoA+cXQRcRvNYEgorBgEEAZdVAQUBAQdA
   16.66 +66eYEm3rUShDU+2xPEGUXTOYGGI1p8E+nNhJXlIgYA4DAQgHAAD/Z5sKGEhd6yYC
   16.67 +2eVNfdWkPEQsBUx1fo8stBzoO0ImLKANrokBNgQYAQgAIBYhBKLACxJmDMtXWea/
   16.68 +GFQxXSnRBuaTBQJcRvNYAhsMAAoJEFQxXSnRBuaTEp4IALFhWfIW8MZjXMRDbhlV
   16.69 +tJ5IwbpXCxuGKzsitYYTmEo6IpxexPfNv1zEX+p6TzPE18bM3bTvY0YWq/nJK5VI
   16.70 +sVxat6d2yCi0/435daQuUkhzkznlWk8BNaGSGvXJta9uhHY61lT/QxvVBhxVf68P
   16.71 +TZbtWnE2Vo+SO4iyNU16/A5VEwIi4B+7BZpNyj3obZUHO2dcR3XSHIPkg0VYOu2P
   16.72 +UmWqBjze9tvzCGS57XJI2CbifVX2hReadFqCOeyy+PGkS28BU/CZEGvQ2IJ2QRJd
   16.73 +yz2t+snKNxeGxdrG+9v5vWwamRmW4Yyuko90rrrsOqobh/i7hlmOrZt3rMiUFZD1
   16.74 +WaU=
   16.75 +=Q5MA
   16.76 +-----END PGP PRIVATE KEY BLOCK-----
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/test/test_keys/pub/crappykey_0-26F88D0B_pub.asc	Wed Jan 23 11:20:24 2019 +0100
    17.3 @@ -0,0 +1,13 @@
    17.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    17.5 +
    17.6 +mE0EXEbjwgECAKrQi4nib3fj2QJEFB21fxYXSH0AP48OrK5am/fHIZnorQGQInVE
    17.7 +7/Z3DWLguO6JVGgL22T4HQyHFhq4PCed0r0AEQEAAbQpV2VhayBSU0EgS2V5IDxj
    17.8 +cmFwcHlrZXlfMEBkYXJ0aG1hbWEuY29vbD6IewQTAQIAJQUCXEbjwgUJAAAAAAIb
    17.9 +AwYLAwcICQoGFQIICQoBBBYBAgACGQEACgkQX9b2Uyb4jQuJ/QH/Yub9iPjUXun8
   17.10 +rHcerpT+44MeV5kA/N4HeQy8Ucdnt5v+Y30HelR+NKtHgM3N9WlfnW0p3T9Gh1+h
   17.11 +uOxbuXOnY7hNBFxG48IBAgC6RCV128OxUGyMTu6ezqYB5ukTphHgEqPy7aI73Egx
   17.12 +I7knLwGCSonliFaevk28GBiqssKZa4/1Xod/EuOsSgzFABEBAAGIXwQYAQIACQUC
   17.13 +XEbjwgIbDAAKCRBf1vZTJviNC4O3AgChC8ynK4r5FjXr3pgQMffw3VPIsGgUyZGk
   17.14 +TiOzRvgla2vnm7JBackX0zgWYeKYT91Z1YvUAgaXsOtg5+E/6/tK
   17.15 +=x0Il
   17.16 +-----END PGP PUBLIC KEY BLOCK-----
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/test/test_keys/pub/crappykey_1-0xC508F2B1_pub.asc	Wed Jan 23 11:20:24 2019 +0100
    18.3 @@ -0,0 +1,28 @@
    18.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    18.5 +
    18.6 +mE0EXEblSgECANCN0ls7KiHjDvhNtjEXubECaeG6WUWyiVjylfGd5C3DkCpPw62j
    18.7 +C+5I5iTAwWqhgCYFXx2Taa5bZfxhkyc5sN0AEQEAAbQpV2VhayBSU0EgS2V5IDxj
    18.8 +cmFwcHlrZXlfMUBkYXJ0aG1hbWEuY29vbD6IkgQTAQgAPAUJAAAAAAYLAwcICQoG
    18.9 +FQIICQoBBBYBAgACGQEWIQT3EriK9SXk4yoqJLzRuGE3xQjysQUCXEbmRQIbAQAK
   18.10 +CRDRuGE3xQjysdbTAf9aljQ/Yin9nHuCp36NSJ6Pz0ojFH4U/X9bdg0ObJMy9nB2
   18.11 +kq52dToQVqAAeCrNoM72nUdYpMNK/gjUkAuZWJYCuE0EXEblSgECAKJ6vLeL3tz5
   18.12 +8A5Rp+xe/EfE1o/N3P3/75c2ESDSxQZS4E0zoZaQGOcdbhKwTAyhGqVUNaz29Fh6
   18.13 +P2Sx1XCMAiEAEQEAAYhfBBgBAgAJBQJcRuVKAhsMAAoJENG4YTfFCPKxvJ0B/2Up
   18.14 +jsZ2rfUzz4fL+i6xV5hLLtuGxfTmcSDCYxUO6oBSFixYOCKLJ8Pj4PPdXk2WwAR/
   18.15 +46hX7RiTwKG4VdwlzhC5AQ0EXEbmTQEIAN9yhr8bxHoO0UOcaer6bHnwdJgNmnqp
   18.16 +TprFy6/dQk0e5WQsSndqtjhbcM1bVPvtBN9TRNu2V5KskHkIGi9hT6tinwb8RpiM
   18.17 +mP2IqBB4TG775dDZFoPCIUgT2N9ttHMmEV5z1T3ihFrRZMgeK2tjFgY7prLm8SPJ
   18.18 +Yy8OHLXtZ1pgjGq/lfWr9FHi+aRPeS+kacSe5kbJdiBrTjQ2V/yXdEUJmX65YjFL
   18.19 +fh7/mWueMG1weyyM50EjTV/iD+5qLunYgU0KIeMwPEjqlGrj0JSNjhQL4W3SWK0B
   18.20 +2tu2zhT5BD+u0XDug+ZVR1n09HCcE95/BqIqpCf5TJxHswUqLH25dGkAEQEAAYkB
   18.21 +rAQYAQgAIBYhBPcSuIr1JeTjKiokvNG4YTfFCPKxBQJcRuZNAhsCAUAJENG4YTfF
   18.22 +CPKxwHQgBBkBCAAdFiEERGu+bZeUOk6WERPaRphZFzO/xKQFAlxG5k0ACgkQRphZ
   18.23 +FzO/xKSCpwgAvKNwZHlTAPkILWmappLE3r99hPfWVAE7p3i69T8rSf/7VhGQiOpF
   18.24 +yrw6u/BGVSWEQ+av0NdQIsxHCHu0fmV4PIhL8sRE2sP0/0yr6vdriJA5Bha43dv2
   18.25 +Iy/EIK4oZ2xwNhPL0l9Ww4d1tr1hX50TBoo0nV3qH6AYHYAebwGCghMhEkeVxH8P
   18.26 +zAKnh+qM8f8XpwaOAVmFRolg7GCNuDzNl07cyGkVcAqy/lsRNAEow+y3SA6Uhmbt
   18.27 +DoH2qTYOqYHh3Ntav9n5rTjwumiLLpbDNnIEnt2rIED48d3krokt/8kSNW1FXayb
   18.28 +ca51vA0r7m43UycutEJ9A4fEKzoHeGZkdKdqAgClDYMTn8TgJd01MSlkwhsqqeni
   18.29 +G/dEU0ZCptOaYs2GsGBobyz69d5LKTqcrEbuafP5MXilLOSQkcfPAxli7j0B
   18.30 +=3gub
   18.31 +-----END PGP PUBLIC KEY BLOCK-----
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/test/test_keys/pub/crappykey_2-0xC027262F_pub.asc	Wed Jan 23 11:20:24 2019 +0100
    19.3 @@ -0,0 +1,13 @@
    19.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    19.5 +
    19.6 +mE0EXEblegECAKrUcuK2FN/qr6tg0OK4IpDky/kJExGaLGGds2LNqSTuTPCHCCQ/
    19.7 +2gbxFYS60M8oaXpax+EWI4sydMzQR4qXo10AEQEAAbQpV2VhayBSU0EgS2V5IDxj
    19.8 +cmFwcHlrZXlfMkBkYXJ0aG1hbWEuY29vbD6IewQTAQIAJQUCXEblegUJAAAAAAIb
    19.9 +AwYLAwcICQoGFQIICQoBBBYBAgACGQEACgkQMld2+8AnJi8WIgH/TQE605yPZac0
   19.10 +fEvzuCTl+k/vOCP1P1FkfsbUm+rzvMnrslso3UFLJIclO9rmQQINl307+fRLXbuZ
   19.11 +1Oy34wgtA7g4BFxG5xASCisGAQQBl1UBBQEBB0Cug/QGjM5TjeKyg6niEHNv+DQZ
   19.12 +LCdFd49RHzSk896aVAMBCAeIdgQYAQgAIBYhBBhURJIFUgeyk2uyFTJXdvvAJyYv
   19.13 +BQJcRucQAhsMAAoJEDJXdvvAJyYvRnMCAJCqixSW4YpifSYsEssPpHKGHVgCR6Fj
   19.14 +LN1yE4Bl0OAra+ocbgEgWY9W91MNi1sV5neaqpyOzuvVRdkAm1i4874=
   19.15 +=ncwA
   19.16 +-----END PGP PUBLIC KEY BLOCK-----
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/test/test_keys/pub/subkey_select_0-0x4929DC45_pub.asc	Wed Jan 23 11:20:24 2019 +0100
    20.3 @@ -0,0 +1,18 @@
    20.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    20.5 +
    20.6 +mQENBFxGBkEBCACxp7qY+FhxQmHicXiVNz65bZxnu8E72iGseEXctVJGv/F3J8DO
    20.7 +RU2mJ+VbKkx3levnCTQPx3Vwg77PSZyu8TJN/Nex9xSypTDo6fMtdOSWLgcKIyIZ
    20.8 ++fcsW61cSs7xgqdx/JaNzmfmXEe7OwoXi0I99BVX//uz1ZWK7nj/YiJs+xuTo5S0
    20.9 +lgWNQ+h0CrbSu4jT8ANMhCHCtqz+biFYATV70Rv3RNz0yVijYQ3h4tuwdONfo9gH
   20.10 +BAoESdhEdk12LJGrgvnY5FKOrx9Q0oHxdmM8Qg66pwd32pram0jeg0cQ3SK8VmBP
   20.11 +vfo24gtKsn4f0oy0jYuxWEgOK1BjNKgepF6FABEBAAG0L1N1YmtleSBDaGVjayAw
   20.12 +IDxzdWJrZXlfc2VsZWN0XzBAZGFydGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcC
   20.13 +BhUKCQgLAgQWAgMBAh4BAheAFiEE8NA8hCwHcMLCqf6vKh7ZgUkp3EUFAlxGCMQC
   20.14 +GyEACgkQKh7ZgUkp3EVWRAf+MCTJZ/gIitYdJsGoYIEm4bs1JO+/lKZFSLoCtxtc
   20.15 +IIFBDqsVhitDC0UtNyuD7TRXanNLXirlOTN/uYKzP/IFiU+q0KoKihNWn7gK7tPd
   20.16 +AQ5uwQZb/7omUZScnfPieurPuKASH4q5XGcqecET05FE/JORxEh57aD3/ILW1Aak
   20.17 +EeKgfC240Z8pEO5bTMda3BV6Va0HGaHsq6GylvzKj2FmcxpbBbrUjxvat4oshTNR
   20.18 +eYHL2C3i4S4hALJCLO2/8pQzNqofitRkn32oR7+PyYgXY2nnjPO7+Mr6J9Jgr237
   20.19 +mzBeq/dAt4qlY5VI8tD1LfVh62tqy96bbenIL8D8xOHWDQ==
   20.20 +=P4RS
   20.21 +-----END PGP PUBLIC KEY BLOCK-----
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/test/test_keys/pub/subkey_select_1-0xF2BFF59E_pub.asc	Wed Jan 23 11:20:24 2019 +0100
    21.3 @@ -0,0 +1,31 @@
    21.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    21.5 +
    21.6 +mQENBFxGBkcBCACzk5CHhKqW0iOYWLo82kQEg+SC61mnxZcwOpad008YbQB/LXRl
    21.7 +4vlxssfZy8upfazux7lMNvz+OlwmGWt+PiVUqZmfWtOkMtKajtXfOj2hXyKOvcib
    21.8 +P42N/D9EGXgo723XAnx0TRRjf2AmP/w/yHkORGBNnLLek6i5J73pnK2x6FtzKITw
    21.9 +8akrX3nwGVhC3DYd1Hf/pdTpl3mp8Lo6bI10rpSMmvcp4/Ie5uJ16LxO04loLAi5
   21.10 +Ic6Q4+YX5WOOPHvdY09w059MXZocuomEmdY8PIvoef954k4+KZWmYpf0SKYOscQc
   21.11 +uznCWTMAQAdRNDjvX49IswRZVBvJYVPHUDGpABEBAAG0L1N1YmtleSBDaGVjayAx
   21.12 +IDxzdWJrZXlfc2VsZWN0XzFAZGFydGhtYW1hLmNvb2w+iQFNBBMBCAA4BQsJCAcC
   21.13 +BhUKCQgLAgQWAgMBAh4BAheAFiEEkYr26Ybzm2MFQeEN9ff6NfK/9Z4FAlxGCiEC
   21.14 +Gy0ACgkQ9ff6NfK/9Z7IZgf4qLkKYeeqOmVk9HARqcyhYYhBrGOF4VaLVW5lJES5
   21.15 +IzK+kT9wc6V0qGrqTqHrlLRCATiVAths/Gyq+eUbHFT68WQ9+2BESyt9/dV36QQy
   21.16 +Q0tdgYK0x6G0anzUYjpwac1zW4M/v5mBDFqhTbfNO8FvRsU6Yctmgw07q3OFpZ6P
   21.17 +BAOXlfalICzZ2RNzRCEOvKhZMuzfUVH/GfXceXBDn5Db1jFkjh4RJCP0XUaAPV+p
   21.18 +w3bO2Sn9Ype3h0dqKE0G5K1QVKbMrH8LACR6WSXbGdjUyB+uXcqnUKBmaIS5p5oK
   21.19 +OMU+xaATM24t651FhOik7uS4gBdvREr6yp1ae05g04eTuI0EXEYKLgEEANrbMRIH
   21.20 +JsXVxPdCqgSgMwvKrS0k6OsRc8UeaQHxMFaNClBkPb2Nc+T5DcQ9UKfbEDegcOF6
   21.21 +hyQ6UglfbtriXat0NOrnBburwLdW7YoBcWayhUDu0QmhIPCb9Xcob8lkQmKzb6bP
   21.22 +85grYoHQWnLfNBfV9qcpHBV+jV2xrOEVCNtZABEBAAGJAesEGAEIACAWIQSRivbp
   21.23 +hvObYwVB4Q319/o18r/1ngUCXEYKLgIbAgC/CRD19/o18r/1nrQgBBkBCAAdFiEE
   21.24 +2aa+R0T4ySVerxrylG24itg63LgFAlxGCi4ACgkQlG24itg63LjdNAQA0AdVfpWI
   21.25 +XG1+VzWVHJ72j8lyQgpoG67UTPks1LZCXiAYLbAn8qOmd30qt75e7PWAfUvISlAU
   21.26 +883k4t+otn8JX3BjBYLwezdKhyWN5kZc6CVxth6TOeVhCyKfh5icfFipOJGEFsxc
   21.27 +Wq3JZtLu4a0mtNb8B3C7vu+dS5LJanv/Nw/CAAgAn+PfQS8Rrwt1ud+4BA/RiDqL
   21.28 +rAOaweAQnRb2l3X6V7vBGBSPnFuEEoLRd5Uqf+4OYICpEclLcZgHDQXcOFf9cKc8
   21.29 +D75OvtESoKNiEWPq+n6YjC+W+FC7s09/BF9gsM8DXq2LgLyTP7uwZM85j/VtGcZB
   21.30 +cNsQUxLyxTL18lxBjTJZXp2P2j/81+NZX1+6N2Omatf1SG2E8CMW+hcllszW+caX
   21.31 +uXq/LpkOw8btqS/tMZrIYhYyD8psWiyxJPZAjqq5fKvTh38bMCb2btGw4pDTlfaC
   21.32 +I4yRZA8UBoqxP/s0BR8XGtJ56sJZIIW+ZpE3Z768J1rgld9yFeilQWkDaI0ZWQ==
   21.33 +=tl7g
   21.34 +-----END PGP PUBLIC KEY BLOCK-----
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/test/test_keys/pub/subkey_select_2-0xBAD7800C_pub.asc	Wed Jan 23 11:20:24 2019 +0100
    22.3 @@ -0,0 +1,28 @@
    22.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    22.5 +
    22.6 +mQENBFxGBkwBCACQa3Qt8LaXvGZ1WL7qJyjeKNd2xW5y6DO8+6Sm6AxEdRSkEg0w
    22.7 +DuceemwhCl8p/VlLsUsqnBXqxR6j4cKGQkSsmvZhZt6EFcPD9/OU1CovcbzylJd1
    22.8 +C8bxFypd2qVpOh0i0lOfhbrtbzCocoDVWZ4rfiMPUWy6E0HGfEcxU8GPMOSIsdbC
    22.9 +vnbZbZrgW8VK8f+vjn4FFrBtMF3Xs1LGwAuzSdTYW68Be7k3MkKKkJl0QrTEzIxo
   22.10 +IEO1EZStmo8VM8nGh0rLe+mQI9TaN/Jn3DCE4m4gmS37hyl4+MPkM7jEc1eJ8DAa
   22.11 +EYpnDoTAs58OBpuHBzsXXvFL/hA5U4rMl9mbABEBAAG0L1N1YmtleSBDaGVjayAy
   22.12 +IDxzdWJrZXlfc2VsZWN0XzJAZGFydGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcC
   22.13 +BhUKCQgLAgQWAgMBAh4BAheAFiEEiJQgLj15HJVWAFi9d2drrLrXgAwFAlxGDH0C
   22.14 +Gy0ACgkQd2drrLrXgAwt4Qf/VbzQFNxLHFqi6x2mffvPR3gUtygMyv3EjlH8VOyD
   22.15 +uDmGu3nCm7Q4LdtjtVhDRYlmwaQHlVp2JxRWDVPUpru7fKxMxk7H39oGoh85VItJ
   22.16 +AyqZZhCbal2FM/W3j/+pnig0Q2kNoCVlD3WZg13Ejw/cw7z4zasaT+O2AJ9KzRNw
   22.17 +4Hk5FEnlhjuSCLdox/oMCe5RM5NmUazC5m4ejpqE/hryLzp10PjCMJCXz2fMrAWM
   22.18 +ZbVWB5vmioP6oR0UjiJdfnEPjjJ7L2w7A08j6kATh4+hPG2FXbox6J3tBJ1flwWc
   22.19 +ZGiTUYEzxPpq3ArOqUEypddkNdrshMQnwSjBJzdFlR4bebgzBFxGDDEWCSsGAQQB
   22.20 +2kcPAQEHQIxutjFIiJAtLbBcHCnXU2jM8JJ8Gz8aGeq2p9KnzVCriQGtBBgBCAAg
   22.21 +FiEEiJQgLj15HJVWAFi9d2drrLrXgAwFAlxGDDECGwIAgQkQd2drrLrXgAx2IAQZ
   22.22 +FggAHRYhBFYfy8bkKp+qd1l15MNU5VghHHKeBQJcRgwxAAoJEMNU5VghHHKeYUUA
   22.23 +/i9CMTiPeDX3rkNU+EwymZ8nWWE6apNkGMHuK8NYgM85AP99KrlJgtElgWcdPbtY
   22.24 +QW63QOXAO7z8gfGx7H8XTShDAtw8B/0djEwYkaKFoOg/MRRlcJMGGMKhUmlqHsk9
   22.25 +7k0rzQO1Gf4ea5DKgW7FQcspVBvlCRabx2JlCTT8t/YNp31Bm20PJwrkQp9tVYTp
   22.26 +OVLxsJsmQa6G0/ypwl49PkaWjXFCsnrgJvwyiHdeSKFaCBl2o7sQoQXGukPFsNcu
   22.27 +OirZ6Z0czdV+O0zCoub5MVtTWA33CiZZK5xOobnb4/Pih1rNEMLu+wfr6s+XjHKf
   22.28 ++CMEEmbwcXG/DV6GhM0WrFQ4iCJx+cNWwnNyffRwLQpg9EUpqXl0Ey6F0J6iApuP
   22.29 +r8c6yvkiI+dNeXeDuwcUgeYc+xgOz8IobCqROh4QWTNOazChvCSx
   22.30 +=xnz/
   22.31 +-----END PGP PUBLIC KEY BLOCK-----
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/test/test_keys/pub/subkey_select_3-0x34F44C02_pub.asc	Wed Jan 23 11:20:24 2019 +0100
    23.3 @@ -0,0 +1,46 @@
    23.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    23.5 +
    23.6 +mQENBFxGBk8BCACikTVRrTEv3Ak3GBm6qNvODY2/P6gksIGgFCqWf6igu2xcBFq/
    23.7 +lNSVXTWUBSHKJUTXujizohDj+uu8ptRxiB9pIjCED10rP0pFhknYRXVInfx6uxGE
    23.8 +ToZ30VymvyVFw1RiHd4Fxg7fg3ri4+8rli+DxcgpiXySusibasnWjrUJMBDXMFl9
    23.9 +LpKCXaS7HNuNQqNYImbM2x3X3q66XOgPb7VIzj8nqdCugASTrCOMZvVytGghPATl
   23.10 +03JzFDPmzbVyxQaGPCqOe9eLVsy+YEvQaZ86qPUiJuEJ/7+ScwvB++kjWi/J6qTR
   23.11 +4SeghWPJr63DYwy6Xo6cx8Bkvhriy+JnYIrvABEBAAG0L1N1YmtleSBDaGVjayAz
   23.12 +IDxzdWJrZXlfc2VsZWN0XzNAZGFydGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcC
   23.13 +BhUKCQgLAgQWAgMBAh4BAheAFiEEXqX39xuzm095JNHo0RxnYTT0TAIFAlxGDVwC
   23.14 +GyEACgkQ0RxnYTT0TAJHfgf/S01scxkskxHWeXwUfVeb/iYbX86TtIB+AJfsiw5H
   23.15 +avSQVdH2gU9m6ZSm/yxM9+WRU4uARaiXRd2HXCMwqx3IIkPjNlNSyB2xyTLdsddC
   23.16 +r0+Tfw09ELbgqn9xZk2d4+EB52QO2D7sYfjV6Rd/HBtEfvihr0DZtXQA76TTl3dM
   23.17 +UVPP/lq/FmaGFaFEROtnAKkOnLhvcNAQVFuVmZ0cZRR21r4qeoblOvSHAWqMSSQ6
   23.18 +H0f/xkPJj7qOqGoBRSjyPdLBogQeYaIQTDChtya2WCEqKTF1qPsGyUCLYJW4ieFL
   23.19 +XirfQqFkuGgh3sflWSwF3CYH3/m6w3j7aAuVXTVQjb3qk7gzBFxGDV4WCSsGAQQB
   23.20 +2kcPAQEHQK1WjaIbAxPLWtVDwrGsBTXx5xmsPko0/7acLzBEPGu5iQGtBBgBCAAg
   23.21 +FiEEXqX39xuzm095JNHo0RxnYTT0TAIFAlxGDV4CGwIAgQkQ0RxnYTT0TAJ2IAQZ
   23.22 +FggAHRYhBKgClKGfPYyj93Zig1osmZQB2tUkBQJcRg1eAAoJEFosmZQB2tUkwqQB
   23.23 +AIYs3W3Sr/Y+k8falIaPFXsXH4lVNWc7Mkmo6BuWKBm+AQD3KD5ch7fZ++mnFrke
   23.24 +P2JXKsBvEdK39IxrloC6hKcCCbVLCACJ1bmu2kKCZ0oPe4SHSCndouekmrHlZ5OT
   23.25 +DntsiDMei7O0X1q8I/8B2DyPCNRS3tKwehE03oPzDxABxV6V/cVuoe0IWtScy15Y
   23.26 +AF1steg4eDVzyX6ach8O3XhCg5CzMFiE4B0YK3t/KHZDaxkLBIjGwiVUrt3+mNnZ
   23.27 +RUEZ/ACvFUccvBwGEkD+DQzoF57QCTqCLF1FxXnr5w1v9L6xsxcLVE9HbUPSlOKQ
   23.28 +S/J1GGcWjNwuY5IBSPbBzp3RQC+ZWY/Ubx+GDKNJnUcjS2eqEuC5tjAsqKeemOR0
   23.29 +XTIWqrQSvSE0s8hszjVQQ2PkFDK5yax8xX0aR7A+dZjj4w/n4q0yuDgEXEYNkxIK
   23.30 +KwYBBAGXVQEFAQEHQOvpNNqX3I+2BFMDqUmk0JxrWUhlSuVjutd3pAZTXHEOAwEI
   23.31 +B4kBNgQYAQgAIBYhBF6l9/cbs5tPeSTR6NEcZ2E09EwCBQJcRg2TAhsMAAoJENEc
   23.32 +Z2E09EwCwcEH/0SbbY68yVsQJm07TU2FK7N83vlyzdLv1zeB65dFq/4P2tPmlfHO
   23.33 ++o7t4xy0SvTaonXnYiorsyS/HdSs4GqTQYwaeu0YT67rESKZaOmAIIEmIOWbjy+s
   23.34 +6i3vWWdHr4XZbVHgkTR3oMCw1VS6fMcNE940D3UrlRqiPPIrtv4KNX9Yvwso88Mw
   23.35 +zVZ2MwmKM2bKxdfgkcgbALGpPOResVoCK+AOyamdVFCAAHGZT1FNu7MxQMN0C/3Q
   23.36 +acX3o5VyvgGDrDN/9Xl3q4H1sciaOidAgCFwPvbQmzrl2yGyUXhHX3UMA+r5HtYn
   23.37 +Fk8K17IeGbd2WoNbF6tT3uvaWFFUr4JR2JS4jQRcRg2qAQQA1LNWmbgSHrqI3T8v
   23.38 +YGg/18Cf5B9klY4UWuAj3VsdBJVxp0ZJwzmk/N+0b2XTuWd8iPlHuGn4Plqk/zf+
   23.39 +C9YuWOtXUCuRGlQeBuTs5LVgV2QeFf/Q7+mZHOmxOPO2gTlPI7S3TcQRaB0nLYSU
   23.40 +K/11EHHMtauy3LZtmdqzazKdJm8AEQEAAYkBNgQYAQgAIBYhBF6l9/cbs5tPeSTR
   23.41 +6NEcZ2E09EwCBQJcRg2qAhsMAAoJENEcZ2E09EwChmIH/itKIJcHk8kwBCELYHcD
   23.42 +mlhAvnaQ/3n6u7hWMBQg2alZv+m7JydAidO7dp8qwUdFX+kEwFFuTXIje7s0a37H
   23.43 +dESvXgov+Tl7ar4y2FA+vQePXeMBOhmxz372FnOUOXZ+6N7yrHT2EvBnSqqaQCbs
   23.44 +vNKWIwt6i3+qvX12KgpKx0lYl05Kmwe0RS3S07TBtwFeV8Tk1E3Xtsf0qA5vUvXX
   23.45 +kG+SVaWCU/UCmUi9YhzreKLvowKiFbpK2H9CIs6ZUGpLq2uRDHJhrQY4aeRIGQLx
   23.46 +OfzYww/wAyUaCl0XKRv7zFg28cJwImsk8jcAEJqYZ7YMEf9ohvNNwxdzrrr7zI/6
   23.47 +u3E=
   23.48 +=Pkm5
   23.49 +-----END PGP PUBLIC KEY BLOCK-----
    24.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.2 +++ b/test/test_keys/pub/subkey_select_4-0x6E6C7B8A_pub.asc	Wed Jan 23 11:20:24 2019 +0100
    24.3 @@ -0,0 +1,35 @@
    24.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    24.5 +
    24.6 +mQENBFxGBlIBCADQ0BAuaVLY6qVfirbMzGVE9o7T9vJcRuLU5UaQe2xVS/qswu6T
    24.7 +q078R4ItAOItaSUhP081MMZNHCZmMHtJvnkgGCQfGdUnUntbx/McetnNHanXOFtX
    24.8 +51H6rBT2t+0kFQ1FcofG3jXlOgEi3ISqv2MBfkhFG+feVmc1uCcxp4A2pFp+cLhv
    24.9 +nWIJ7ksvKyGM+tbQOIpY+ylYcFWDqCzSZ2nv97U0GMVY4cuKEZpGB8ArPec8X7EM
   24.10 +WSbM6rCHsWSdIO4XrwYazQZeBnIUAN44h76SkSdNuSqJgasXNmJFaMoZtZ8JrcCQ
   24.11 +Zrre+z6CBDr+Zsn5PoqK16TcYZKxRv1Q5MczABEBAAG0L1N1YmtleSBDaGVjayA0
   24.12 +IDxzdWJrZXlfc2VsZWN0XzRAZGFydGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcC
   24.13 +BhUKCQgLAgQWAgMBAh4BAheAFiEEHg0nhkTi4pOp6VPZrJf2f25se4oFAlxG8bsC
   24.14 +Gy0ACgkQrJf2f25se4rBFgf9GFyVdylvzmkeHcf2AyL/+9xXtwhIowp45RWBwyYu
   24.15 +m4kpbeHa7pBBBCYthDRFpIE+G22MCf1cPEjoGqvRbBO2AusozVeqQ2kQ4+Cb2aC8
   24.16 +I2Em5+7aFgUSN0VLEKi/9n8eMu0zWBVZo+QCGOXAZ03tlvatBd+awNniXQii3G49
   24.17 +roOdGzdv5v4hA/hyCl3IqIaJIpRKz1gEh8EpkapJveTYCVH7azZZubunX1O7cOuD
   24.18 +xs5IOZWQBijiXA6jXsqMI06VJjX/UVeUViQbywmlTjnRwImAyZsWPDByCPR362Ar
   24.19 ++Y4k1iwgw9TDnqmnWiCBT6NwaWFlVjmCWavVGuU/tUWjm7gzBFxG8cAWCSsGAQQB
   24.20 +2kcPAQEHQPT1C2N0d7S7xVo9hp05oHdabF9O7OFbOFzljC3GdIwdiQE2BCgBCAAg
   24.21 +FiEEHg0nhkTi4pOp6VPZrJf2f25se4oFAlxG8fMCHQMACgkQrJf2f25se4q/LwgA
   24.22 +oV1vgQCI1nYqem7u94QlS0cVTlGoraffpi3m45bJiWaUy8i992edbItmjyf1Xtm+
   24.23 +JZvMg5DKWNAL7wAYRbOZ97znzxwWJKYA7dn6+Avca2n3LsM56sZArWXxVkNO2G/2
   24.24 +TTRCJaVJhE1KJpfnV424Jfp7T+2bbMz95JlPeWaAWB+oWbntLdxVytvSE6nSBURX
   24.25 +srI5ZN3p9XAc6gfRJAkwSG/lCJZ77Vs3iyPfmZIP9uYUWEnMYHK0LlfGZoXLnLkS
   24.26 +P8zfqBM53b1HjvIen34JzGs8mUG/+6VFP3pqK3Hz49emVCI+MDWCp/bAtqKOsbdn
   24.27 +sIpPDs/1fXevdNgAy7+yUYkBrQQYAQgAIBYhBB4NJ4ZE4uKTqelT2ayX9n9ubHuK
   24.28 +BQJcRvHAAhsCAIEJEKyX9n9ubHuKdiAEGRYIAB0WIQT219vqalJJ1uHNw9p6A734
   24.29 +iJOYXwUCXEbxwAAKCRB6A734iJOYX/nLAP9k0W5isyraHgsTtd9+IHBu9Rt1DXvJ
   24.30 +ssd+QzyANC8kqwD7BmOWI0/1uk3qFkbpjIO885JCrqVig9t3WCi7g1HJMwBUZAf+
   24.31 +POH49X3pQkK8IolZoSv3IZY9aSBJrYRvDWY3MHaZpb41PzdjByR3rXvjt2CGbPkR
   24.32 +O5d8UpcanedbZ/ujMOzZjw/ViHrEyB7Uk3rpkM93rwlnY5rAbmLSvX/2FdYqtwlB
   24.33 +AAuTNhMWKPUiNlAQyJD/WyAADJssc9U55e/ujUXkRnqwJDJtDtEJMUtGQQWNzY6M
   24.34 +h4ff40wx2JsQ9IS3EHPlD6Rb90H1zgQY2mVW4NILz1WIIL40NKLiH3t0+7dlZjpI
   24.35 +vb7grmU4ShUPlcHusEMdpPiHwG8Z7uX0GjHRb/LilePw149z9hl+4QBO1qyp85tJ
   24.36 +NKFdNB/YcgmAbC7FdcBCnQ==
   24.37 +=hOhH
   24.38 +-----END PGP PUBLIC KEY BLOCK-----
    25.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2 +++ b/test/test_keys/pub/subkey_select_5-0xD106E693_pub.asc	Wed Jan 23 11:20:24 2019 +0100
    25.3 @@ -0,0 +1,45 @@
    25.4 +-----BEGIN PGP PUBLIC KEY BLOCK-----
    25.5 +
    25.6 +mQENBFxGBlQBCAC4ZU2FVdlU3ghrsETX/G34YFP7ywiy5cHlayODWygJBOz6w1MI
    25.7 +OiG6tlGzoB7uGMRfByIz00Ry0GoJtm/shyrh2f+qrT5Pqw38SpjJ5PipMndNPaQh
    25.8 +svxWnrpiSpnn/948uqoUHVD/oDjcJQHLVRb1j3fW6oJqV7Z2IjMvhunCtmJ+63fO
    25.9 +M9dsV43oYRcMv13y3rGKsK6OLBuOVNXVbpRKN3Q2oUui2qiVsq4++ABbBQQN9Nft
   25.10 +8poMArL9wLCL2pUB+ZqMhx9SW7bYByyQSdiwZj5CkR6EwNrm73ZIPgByKg5193de
   25.11 +s32DyadnQYbbFQu+YjMgBYekfY8o8LtZEXpfABEBAAG0L1N1YmtleSBDaGVjayA1
   25.12 +IDxzdWJrZXlfc2VsZWN0XzVAZGFydGhtYW1hLmNvb2w+iQFOBBMBCAA4BQsJCAcC
   25.13 +BhUKCQgLAgQWAgMBAh4BAheAFiEEosALEmYMy1dZ5r8YVDFdKdEG5pMFAlxG8xgC
   25.14 +GyMACgkQVDFdKdEG5pOa/ggApoZjV/dIerseQjhRvcmsb8AuCtYIeGJdQsI2vmPv
   25.15 +i2v3sblnHzJN6fqHX1kjW+Anm/47O8Y38iCa/ClGbEzPlNIjt2gbRU2fDMFXs/Y/
   25.16 +uahmJ5im8u1o/5/u99t+Pg8xWngyxSMfbiCUah9+sWV926qXMgAWLQi+WXEth9hJ
   25.17 +HDr0ojnSYZdv7hDj1ja5Ureq+f8cvZN1JlTT5Eek3mUKcCFGT0MgBvCw6oyXuMS2
   25.18 +PhQETx0MLI/A4DZ61I6V3CugmwwIUV8R/fzU/n8lF9X+5To+kyiRhznB/jaqXmG1
   25.19 +bpF+lpxTegbBNcfEAKHhHcj7yuEjzSKSvGu+duxJD+tXHrkBDQRcRvMfAQgA4nTl
   25.20 +PF0e8YPjg8iwsdwjFsBYUPu4Jga2ZKdgMs54LujAs8Hy95JKS5i7Dj58EDzu2WLX
   25.21 +kBXQkm9iYCd9K5dPAdXb56aAqtrb+FXGqvdIAeeVIN/G7m3r3YcqZuypU7K/TsCU
   25.22 +1/l+AWOYi0i7P5b9awVY9gAVTkB9fglKMR7FlISKt4vriwYu3O36BWNx7b2GpsJm
   25.23 +MQVoA0EG9JytnaIorNBjvFu3siJ8PU0SDIhXJUfFVPiGiw0xmikxUB87tBnAhtqs
   25.24 +Hh56KG2zKnfW1thG5YHzPiLkba+uzlXUrbBUxzlY9PXy1dBGR/Uli1xQD9YMtpyy
   25.25 +D7P4r5sHLk5lc/aCTQARAQABiQE2BCgBCAAgFiEEosALEmYMy1dZ5r8YVDFdKdEG
   25.26 +5pMFAlxG81ACHQEACgkQVDFdKdEG5pN1WQf/cYE9+f7Q5aNEK3CtxCIjZ3mqeHio
   25.27 +ItNVW88E5OLbpwfoPCWBVVTTHmOibeHdjjo0P/qZrOMTzkgLfOIiLiyS6D/EHRey
   25.28 +uX2GjXuTFelcccytcOuPOPmJl7yvAVp1wfOwmIX7gvGjXIeqji2Kfv3lFf35g8v4
   25.29 +QQYGsSVG5fczysSsieMJBTpCvYc8Y2MYdk1Uo0h180a448yIaCRnGdM4STXdj/g9
   25.30 +HSwoyGJFCDQx5zes99jRSlmLJAzNALkE+oY0r0QdMHPTVCKVHBrRztZUUkYRAoQ7
   25.31 +hHbErGj8spqtxwBMi8BBDOYrD8dCltGPOH1Lt1HDH3E+Ju4VJwfZH6gbrYkBNgQY
   25.32 +AQgAIBYhBKLACxJmDMtXWea/GFQxXSnRBuaTBQJcRvMfAhsMAAoJEFQxXSnRBuaT
   25.33 +Di0H/jJJ6o2Jf8kX/l5BT8FKvAA+PpWO8BFQEFPMsIJKb/n2PqAc8c+UTizkm+bL
   25.34 +4Dgk8m2lMmluzR55KJr3Arau2BTrHciXNEctVIEeobUC/yIRB0sMX7hKfU0cDSBt
   25.35 +OJoZA5JcSIFoUY4A/I1Suw3FX2uZASepsWPcu8Rj9moNU2lyXoxyb6xvzEr9DLj6
   25.36 +Rc7211VvUnPeXhYRVs/PlMWp06pEzDr63f3CwxxWXvfCOEszIw51OHYrDdGo+W5e
   25.37 +nOmHY/EuiV3DMME8AqjSYiTiw4LKWGoUBq+9HUM8GW3sdEXUnFx0gq3Jsx/W06Su
   25.38 +X7gmKpnIT8eg3KH7WV8WD8XgoA+4OARcRvNYEgorBgEEAZdVAQUBAQdA66eYEm3r
   25.39 +UShDU+2xPEGUXTOYGGI1p8E+nNhJXlIgYA4DAQgHiQE2BBgBCAAgFiEEosALEmYM
   25.40 +y1dZ5r8YVDFdKdEG5pMFAlxG81gCGwwACgkQVDFdKdEG5pMSnggAsWFZ8hbwxmNc
   25.41 +xENuGVW0nkjBulcLG4YrOyK1hhOYSjoinF7E982/XMRf6npPM8TXxszdtO9jRhar
   25.42 ++ckrlUixXFq3p3bIKLT/jfl1pC5SSHOTOeVaTwE1oZIa9cm1r26EdjrWVP9DG9UG
   25.43 +HFV/rw9Nlu1acTZWj5I7iLI1TXr8DlUTAiLgH7sFmk3KPehtlQc7Z1xHddIcg+SD
   25.44 +RVg67Y9SZaoGPN722/MIZLntckjYJuJ9VfaFF5p0WoI57LL48aRLbwFT8JkQa9DY
   25.45 +gnZBEl3LPa36yco3F4bF2sb72/m9bBqZGZbhjK6Sj3Suuuw6qhuH+LuGWY6tm3es
   25.46 +yJQVkPVZpQ==
   25.47 +=00b5
   25.48 +-----END PGP PUBLIC KEY BLOCK-----