ENGINE-473: have the DB update partially fixed on renewal, but trust status is still not sticky. MOAR DEBUGGING! ENGINE-473
authorKrista Bennett <krista@pep-project.org>
Fri, 19 Oct 2018 11:32:54 +0200
branchENGINE-473
changeset 3071aae2e2a9ad63
parent 3063 33907822c832
child 3072 a02a5b80c92a
ENGINE-473: have the DB update partially fixed on renewal, but trust status is still not sticky. MOAR DEBUGGING!
src/keymanagement.c
src/pEpEngine.h
test/include/Engine358Tests.h
test/src/SuiteMaker.cc
test/src/engine_tests/Engine358Tests.cc
test/test_keys/priv/sercullen-test-0xCEAADED4_priv.asc
     1.1 --- a/src/keymanagement.c	Tue Oct 16 12:29:57 2018 +0200
     1.2 +++ b/src/keymanagement.c	Fri Oct 19 11:32:54 2018 +0200
     1.3 @@ -134,6 +134,19 @@
     1.4          get_key_rating(session, fpr, &ct);
     1.5          ident->comm_type = ct;
     1.6      }
     1.7 +    else if (ct == PEP_ct_key_expired || ct == PEP_ct_key_expired_but_confirmed) {
     1.8 +        PEP_comm_type ct_expire_check = PEP_ct_unknown;
     1.9 +        get_key_rating(session, fpr, &ct_expire_check);
    1.10 +        if (ct_expire_check >= PEP_ct_strong_but_unconfirmed) {
    1.11 +            ident->comm_type = ct_expire_check;
    1.12 +            if (ct == PEP_ct_key_expired_but_confirmed)
    1.13 +                ident->comm_type |= PEP_ct_confirmed;
    1.14 +            ct = ident->comm_type;
    1.15 +            // We need to fix this trust in the DB.
    1.16 +            status = set_trust(session, ident);
    1.17 +        }
    1.18 +    }
    1.19 +    
    1.20      
    1.21      bool pep_user = false;
    1.22      
    1.23 @@ -193,18 +206,28 @@
    1.24              // if key is valid (second check because pEp key might be extended above)
    1.25              //      Return fpr        
    1.26              status = key_expired(session, fpr, time(NULL), &expired);            
    1.27 -            if (status != PEP_STATUS_OK) {
    1.28 -                 ident->comm_type = PEP_ct_key_expired;
    1.29 -                 return status;
    1.30 -             }
    1.31 +            if (status != PEP_STATUS_OK)
    1.32 +                return status;
    1.33 +                
    1.34 +            if (expired) {
    1.35 +                if (ident->comm_type & PEP_ct_confirmed || (ident->comm_type == PEP_ct_key_expired_but_confirmed))
    1.36 +                    ident->comm_type = PEP_ct_key_expired_but_confirmed;
    1.37 +                else
    1.38 +                    ident->comm_type = PEP_ct_key_expired;
    1.39 +                return status;
    1.40 +            }
    1.41              // communicate key(?)
    1.42          }        
    1.43      }
    1.44       
    1.45      if (revoked) 
    1.46          ct = PEP_ct_key_revoked;
    1.47 -    else if (expired)
    1.48 -        ct = PEP_ct_key_expired;        
    1.49 +    else if (expired) {
    1.50 +        if (ident->comm_type & PEP_ct_confirmed || (ident->comm_type == PEP_ct_key_expired_but_confirmed))
    1.51 +            ct = PEP_ct_key_expired_but_confirmed;
    1.52 +        else
    1.53 +            ct = PEP_ct_key_expired;
    1.54 +    }
    1.55      else if (blacklisted) { // never true for .me
    1.56          ident->comm_type = ct = PEP_ct_key_not_found;
    1.57          free(ident->fpr);
    1.58 @@ -214,6 +237,7 @@
    1.59      
    1.60      switch (ct) {
    1.61          case PEP_ct_key_expired:
    1.62 +        case PEP_ct_key_expired_but_confirmed:
    1.63          case PEP_ct_key_revoked:
    1.64          case PEP_ct_key_b0rken:
    1.65              // delete key from being default key for all users/identities
    1.66 @@ -339,6 +363,7 @@
    1.67          case PEP_ct_key_revoked:
    1.68          case PEP_ct_key_b0rken:
    1.69          case PEP_ct_key_expired:
    1.70 +        case PEP_ct_key_expired_but_confirmed:
    1.71          case PEP_ct_compromised:
    1.72          case PEP_ct_mistrusted:
    1.73              // this only happens when it's all there is
     2.1 --- a/src/pEpEngine.h	Tue Oct 16 12:29:57 2018 +0200
     2.2 +++ b/src/pEpEngine.h	Fri Oct 19 11:32:54 2018 +0200
     2.3 @@ -432,6 +432,7 @@
     2.4      PEP_ct_key_expired = 0x04,
     2.5      PEP_ct_key_revoked = 0x05,
     2.6      PEP_ct_key_b0rken = 0x06,
     2.7 +    PEP_ct_key_expired_but_confirmed = 0x07, // NOT with confirmed bit. Just retaining info here in case of renewal.
     2.8      PEP_ct_my_key_not_included = 0x09,
     2.9  
    2.10      PEP_ct_security_by_obscurity = 0x0a,
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/test/include/Engine358Tests.h	Fri Oct 19 11:32:54 2018 +0200
     3.3 @@ -0,0 +1,19 @@
     3.4 +// This file is under GNU General Public License 3.0
     3.5 +// see LICENSE.txt
     3.6 +
     3.7 +#ifndef ENGINE358_H
     3.8 +#define ENGINE358_H
     3.9 +
    3.10 +#include <string>
    3.11 +#include "EngineTestIndividualSuite.h"
    3.12 +
    3.13 +using namespace std;
    3.14 +
    3.15 +class Engine358Tests : public EngineTestIndividualSuite {
    3.16 +    public:
    3.17 +        Engine358Tests(string test_suite, string test_home_dir);
    3.18 +    private:
    3.19 +        void check_engine358();
    3.20 +};
    3.21 +
    3.22 +#endif
     4.1 --- a/test/src/SuiteMaker.cc	Tue Oct 16 12:29:57 2018 +0200
     4.2 +++ b/test/src/SuiteMaker.cc	Fri Oct 19 11:32:54 2018 +0200
     4.3 @@ -24,6 +24,7 @@
     4.4  #include "DecryptAttachPrivateKeyUntrustedTests.h"
     4.5  #include "BCCTests.h"
     4.6  #include "LeastColorGroupTests.h"
     4.7 +#include "Engine358Tests.h"
     4.8  #include "MistrustUndoTests.h"
     4.9  #include "BlacklistAcceptNewKeyTests.h"
    4.10  #include "MessageApiTests.h"
    4.11 @@ -36,6 +37,7 @@
    4.12  #include "SequenceTests.h"
    4.13  #include "TrustwordsTests.h"
    4.14  #include "RevokeRegenAttachTests.h"
    4.15 +#include "CheckRenewedExpiredKeyTrustStatusTests.h"
    4.16  #include "EncryptMissingPrivateKeyTests.h"
    4.17  #include "PepSubjectReceivedTests.h"
    4.18  #include "KeyeditTests.h"
    4.19 @@ -67,6 +69,7 @@
    4.20      "DecryptAttachPrivateKeyUntrustedTests",
    4.21      "BCCTests",
    4.22      "LeastColorGroupTests",
    4.23 +    "Engine358Tests",
    4.24      "MistrustUndoTests",
    4.25      "BlacklistAcceptNewKeyTests",
    4.26      "MessageApiTests",
    4.27 @@ -79,6 +82,7 @@
    4.28      "SequenceTests",
    4.29      "TrustwordsTests",
    4.30      "RevokeRegenAttachTests",
    4.31 +    "CheckRenewedExpiredKeyTrustStatusTests",
    4.32      "EncryptMissingPrivateKeyTests",
    4.33      "PepSubjectReceivedTests",
    4.34      "KeyeditTests",
    4.35 @@ -98,7 +102,7 @@
    4.36  };
    4.37  
    4.38  // This file is generated, so magic constants are ok.
    4.39 -int SuiteMaker::num_suites = 40;
    4.40 +int SuiteMaker::num_suites = 42;
    4.41  
    4.42  void SuiteMaker::suitemaker_build(const char* test_class_name, const char* test_home, Test::Suite** test_suite) {
    4.43      if (strcmp(test_class_name, "DecorateTests") == 0)
    4.44 @@ -125,6 +129,8 @@
    4.45          *test_suite = new BCCTests(test_class_name, test_home);
    4.46      else if (strcmp(test_class_name, "LeastColorGroupTests") == 0)
    4.47          *test_suite = new LeastColorGroupTests(test_class_name, test_home);
    4.48 +    else if (strcmp(test_class_name, "Engine358Tests") == 0)
    4.49 +        *test_suite = new Engine358Tests(test_class_name, test_home);
    4.50      else if (strcmp(test_class_name, "MistrustUndoTests") == 0)
    4.51          *test_suite = new MistrustUndoTests(test_class_name, test_home);
    4.52      else if (strcmp(test_class_name, "BlacklistAcceptNewKeyTests") == 0)
    4.53 @@ -149,6 +155,8 @@
    4.54          *test_suite = new TrustwordsTests(test_class_name, test_home);
    4.55      else if (strcmp(test_class_name, "RevokeRegenAttachTests") == 0)
    4.56          *test_suite = new RevokeRegenAttachTests(test_class_name, test_home);
    4.57 +    else if (strcmp(test_class_name, "CheckRenewedExpiredKeyTrustStatusTests") == 0)
    4.58 +        *test_suite = new CheckRenewedExpiredKeyTrustStatusTests(test_class_name, test_home);
    4.59      else if (strcmp(test_class_name, "EncryptMissingPrivateKeyTests") == 0)
    4.60          *test_suite = new EncryptMissingPrivateKeyTests(test_class_name, test_home);
    4.61      else if (strcmp(test_class_name, "PepSubjectReceivedTests") == 0)
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/test/src/engine_tests/Engine358Tests.cc	Fri Oct 19 11:32:54 2018 +0200
     5.3 @@ -0,0 +1,54 @@
     5.4 +// This file is under GNU General Public License 3.0
     5.5 +// see LICENSE.txt
     5.6 +
     5.7 +#include <stdlib.h>
     5.8 +#include <string>
     5.9 +#include <cstring>
    5.10 +#include <cpptest.h>
    5.11 +
    5.12 +#include "pEpEngine.h"
    5.13 +
    5.14 +#include "test_util.h"
    5.15 +#include "EngineTestIndividualSuite.h"
    5.16 +#include "Engine358Tests.h"
    5.17 +
    5.18 +using namespace std;
    5.19 +
    5.20 +Engine358Tests::Engine358Tests(string suitename, string test_home_dir) :
    5.21 +    EngineTestIndividualSuite::EngineTestIndividualSuite(suitename, test_home_dir) {
    5.22 +    add_test_to_suite(std::pair<std::string, void (Test::Suite::*)()>(string("Engine358Tests::check_engine358"),
    5.23 +                                                                      static_cast<Func>(&Engine358Tests::check_engine358)));
    5.24 +}
    5.25 +
    5.26 +void Engine358Tests::check_engine358() {
    5.27 +    bool ok = false;
    5.28 +    ok = slurp_and_import_key(session, "test_keys/pub/pep-test-alice-0x6FF00E97_pub.asc");
    5.29 +    TEST_ASSERT(ok);    
    5.30 +    ok = slurp_and_import_key(session, "test_keys/priv/pep-test-alice-0x6FF00E97_priv.asc");    
    5.31 +    TEST_ASSERT(ok);
    5.32 +    ok = slurp_and_import_key(session, "test_keys/pub/inquisitor-0xA4728718_full_expired.pub.asc");    
    5.33 +    TEST_ASSERT(ok);
    5.34 +
    5.35 +    const char* alice_fpr = "4ABE3AAF59AC32CFE4F86500A9411D176FF00E97";
    5.36 +    pEp_identity* alice_from = new_identity("pep.test.alice@pep-project.org", alice_fpr, PEP_OWN_USERID, "Alice Cooper");
    5.37 +
    5.38 +    PEP_STATUS status = set_own_key(session, alice_from, alice_fpr); 
    5.39 +    TEST_ASSERT_MSG((status == PEP_STATUS_OK), tl_status_string(status));
    5.40 +
    5.41 +    pEp_identity* expired_inquisitor = new_identity("inquisitor@darthmama.org", NULL, NULL, "Lady Claire Trevelyan");
    5.42 +    message* msg = new_message(PEP_dir_outgoing);    
    5.43 +
    5.44 +    msg->from = alice_from;
    5.45 +    msg->to = new_identity_list(expired_inquisitor);
    5.46 +    msg->shortmsg = strdup("Blah!");
    5.47 +    msg->longmsg = strdup("Blahblahblah!");
    5.48 +    msg->attachments = new_bloblist(NULL, 0, "application/octet-stream", NULL);
    5.49 +
    5.50 +    message* enc_msg = NULL;
    5.51 +    
    5.52 +    status = encrypt_message(session, msg, NULL, &enc_msg, PEP_enc_PGP_MIME, 0);
    5.53 +    TEST_ASSERT(!enc_msg);
    5.54 +    TEST_ASSERT(msg->to && msg->to->ident);
    5.55 +    TEST_ASSERT_MSG((status == PEP_UNENCRYPTED), tl_status_string(status));
    5.56 +}
    5.57 +
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/test/test_keys/priv/sercullen-test-0xCEAADED4_priv.asc	Fri Oct 19 11:32:54 2018 +0200
     6.3 @@ -0,0 +1,82 @@
     6.4 +-----BEGIN PGP PRIVATE KEY BLOCK-----
     6.5 +
     6.6 +lQVYBEdLUAgBDADAha/ZeyFZp8U2OfaaUH+TDBPDdte4D6Z/lakRYDpBLAdjWkoV
     6.7 +6CRjei7NJtYzTtOQIC2FjGd+DYCWQaW28Jj2DMhvUq/qhwUPNzK/mZ7tfA2rXRsY
     6.8 +34qNWn/g5OnVDw4e1JMv4qUAiaDOTEjrR9zO3iFrFppXhur2SF2ypbP61nG0J+wx
     6.9 +KJda6/n9H16Krtl4VXesOABSjX4Kn+eZxRcQdu1GXiBXs1YKyvN00za3g/73x+GR
    6.10 +ZzxAp+W+ns4AanCGpzFhTR72/ZTlwT5hUfx/0xisgRdo/m6ggCLX49kyAqfS6T1F
    6.11 +ZE0S4HdehFmNg/s5IqTCUt/0iceQpE1QrHJT/dHkF//Mgmvmb8gucXBvExrRYK9f
    6.12 +1QWFP0w0RJ9ftl3Zs7izTBE6od46rPr60EcJU0u0i0uJvL4Oq7XBxYNAg794ELIm
    6.13 +5riVmyhV9ZU7bTdeKMLGwByQYZPogchIoG4m2i+qW+9ckt0B4KNNR4s3T3HCBSTj
    6.14 +DO+ToGKJMWxKwLMAEQEAAQAL/AoOHBgA4amzFpynGQV6Q7on8jaHDOvr4ABRcdn+
    6.15 +QNre+2EillDf7QTV8mJ8LztfO7NIBZ++c43BMBz+P2vpDJeylzgFsAEYARkzAtZq
    6.16 ++18Y180JcdmHY11eLjnciRWC/HPQNuX+6mQpBOhk/OrgfxVopthlN9H9lbo8H5GR
    6.17 +SRpGUW350ZgAk9ckEOjknd5bhptNq3P9OaxrcaYJTHB3V96Y8GwG4oEcxrrGd0IK
    6.18 +GnjUlgrygV98w7n2iu+9Hc6YMkJGDOINWlei5lNE7NU5QD6F4Tn5ejU/M48za8Sw
    6.19 +kpdQq3i3cqd9fR085o66xhLfCZrQLDeleGcYVjfPMtJxRbF0Gjlqd10HSNBQVBU2
    6.20 +75jeGcX04fR/JGiQ5rQx11EMnA6Q66mE59txk3kyVgJFz2/ikxLBZRfMSwxZrbaB
    6.21 +ybGeXyXF89Xn4XrwGyTIp2BTpHBywjhEqLFTGNRURZp6AdUUB95FcZmyePhIqfTR
    6.22 +Whjji//f79AlNGQHq8cGGx7k8QYAwXYBLPPqLbAmakiF9SntjkI/R9h7oKTQ8Dh0
    6.23 +wj/rsDFIaclOEY1OY/5hEtlM2MqXBAneyIOQVJGvwb06lz5bmqp/UBk7pKSbFLWt
    6.24 +/85XGgzq4A7PWlm+h+3hwRn/qfwgHcyTsEfvHKvKgKRDrOWoWGJSObUtaDIuGG5K
    6.25 +yhvJBrPLwoY+43Whn2Z6chryEVjpiFDPYKfMN7LJpH782kBxoWKRoaIuDTMKXYfN
    6.26 +nZxdg5zk4x1PlhPYb4z0QTVxGzhtBgD+wf8EkIWRv4gdUx41r55osJACcovSrp4X
    6.27 +M6FP3lF4ETfiTMXQjpoo+TzVBGOn5LfAW2BS7wkDc6pNxkjEQmJf12CGcq7rdCPZ
    6.28 +q0fa8ercPCeg2I3/Ygv1wfSdPb2GuzSazjsEZythrkrlyuHOb9odRUAEFW9lutBV
    6.29 +WjuAyIJxc56i7VYKClcN4x49+8yXbhyiCDcumeEK5k50jx+fZnY3R50yddrWG7rm
    6.30 +1p1VNQYlBgiEmLYhvAEo7KMdUAB2aZ8GAOhg6Bsu+HU/tpTO6WAMpdbx9PI3W4A4
    6.31 +kyNco+ta22vmKKLZNpdDbwMVbOtmkeVPtNazEduaQVUpYsHJu9YPwFwku/1/+2Vp
    6.32 +XYBFy5uHuOLcwqKcSELXT9dtU7oBue3Yif87FhCmbLxScZIjYmYaWAYi0iZg8pOq
    6.33 +6YvfJJ+o91+GldNc5oY8lYLzXOMm0tdojmOkzt6FVAe4ticmxWjYTLamten1cAgj
    6.34 +nVHfoOWLiQfqQLdMe9IMJJwvPdm0cTqbeeLJtDRTZXIgQ3VsbGVuIFJ1dGhlcmZv
    6.35 +cmQgPHNlcmN1bGxlbi10ZXN0QGRhcnRobWFtYS5vcmc+iQHUBBMBCAA+FiEEHJZm
    6.36 +2LPij0qjhH2omm51486q3tQFAkdLUAgCGwMFCQPCZwAFCwkIBwIGFQoJCAsCBBYC
    6.37 +AwECHgECF4AACgkQmm51486q3tR6wQv/Y85s1dIOkbqJkO/juRouamzgDboTHcw+
    6.38 +5yNdrArwhJpd1CUUP4L4l6dTj9RYUxoj2hazDjVH3gC8lV1qdMc6eYjBPSO/g1Mg
    6.39 +1cF8sBqHmJaUtT7K54O5R6wl+77DmxVmbCLv7XKk6CLGlBQFe3YdlJ4lJ5EwTm4t
    6.40 +J0m5cvgZOlAqZOBOptwB5IAWZ4jemlllMTwAXzCwW4tPkTvi7qG4HjszOUYL5qd2
    6.41 +xksvWj0Qhf8nXgKSJctfuTTceVqIbtFgjAGIBa6DtrmqkVf6G8ANmxdjcSawCJNf
    6.42 +G+MFjm1KTS4CU6RCcrc55aQHqTZglbIfNeQPJeTOsoZLyFdTTX63WnWpgix08Jo/
    6.43 +YHo8ECWOofO/tKlI9Mq8ZoyAJyJpDhE7PX0UA5uQlxZHxuLTKIWWBB5nZqkkzclW
    6.44 +ebfKW9Qss2D2u/jQp29U7gTrgooNVZnXmumScr53JL2qDUs/cYB9ioXolMK6D0Ak
    6.45 +qmu8oM7PfgdC32Mye53M2cFg3vIuDXoPnQVYBEdLUAgBDADAwXe5Co+NyhUZGP1a
    6.46 +3iowKH6XcAZOIJUrlJtWU6DG+EeicLXquI+r7iwi9SRvJhSvy6RQwKgUsKc/WEcx
    6.47 +R5v9gsNH00lFzP+BVkOC0pjCqC9OH+H3FunoWjwLDM9FWusGCZGTcFFbteG9HimE
    6.48 +F4v6TydpPEqsB3x0xabE9Dn02MjFj0kb2qikKyACutd0qiKlX+4VON9qbudP3ENF
    6.49 +khrrVWeI4hlIi1Gko4nills6xpYnFLOCdQMyuYy+xhdPU9GHn6vfksLWvKCMzsnK
    6.50 +wBKH67q0dTmIZwPV9nlb4IgsRnaFs0YWjFaw8MIloocqbIS0arUbR5pkNjYJ1hOn
    6.51 +y3I6Pj+K3xoynpDo5uKnhJR5eSvDA0Ez89EDOnINJWLy0H1oENkhDFAIO/wsvL2V
    6.52 +fBZRjatkP//CKhNg4iiaIIyIM/kHCtSG5r/OLcliWmzVmRkgX8bQiQ+C+EvV7mw4
    6.53 +I2OeAE3GfO/Zll7fZgveE63PFUNn6axYwqk5h3Divz+riaEAEQEAAQAL+QE3Jxdc
    6.54 +XO/espfcK7rPNFJl6vhu/ScwduhVsU4PzG98wMziK499lvBVWeNlitOFmLNMFC7r
    6.55 +LBQnUgKo/pfttOraEHurNibRxlmtLtNMGyj9EQFL26uochSkPwUt0T/FdT5uQIP+
    6.56 +vRCYOsJrxoS99kS/i4bTGcBwcqU02tqalKP52vg98U7S5+XTHMpPncyvRvUmf/ST
    6.57 +zXrZFK3Q/H6bj35k5Th8fn7R3BOu8U9jtdMOzgMUkxYzQTAocd4BF0QJigGjZ/42
    6.58 +pa/lBuCsQddZtawMbBvAPxq53KXHhH/XzGf+i6WxBvY66iWckFgiOYp9Hq7cc3EK
    6.59 +9WI/PDYXOe2UcJTntBGQq4npkkgXV1DYZmNvjgbtskdj+eTm+tbGTfPwCE30R6TJ
    6.60 +xWarB8l4meGXzW7mYHAlvPMYbZXvGtmM2oGiUPLQrhOgy7znLbewW6sbi1O+7lVh
    6.61 +nPZH9F/kZz5vfFR7W066MgbrLDDD2PVGTGnLFyhUEIF5DripDq5SADAeAQYAz9LA
    6.62 +ej16U0G+awDF2hKRwaSXgZOWGt0AsMWsleyEaE8UdK76AofUJiwfxw3Zn5PBTjd4
    6.63 +EnrMC6IKSIEgRlNvy6KGh8M7J5o2ert6ikH93x+lFEwM80JoDRIKsRdedKq7PBcD
    6.64 +SOMa0Y6GOgZcHWdw8fDcrH44WxkwnTs14nyg0GjAi2eVegKybiiYG2DMHLgYde6/
    6.65 +pLO1/ImbHbCz2gRdsrFE47KAktnvHjRZtDO/sJDcZICj9i5VRrHepc+32WdhBgDt
    6.66 +cIkiV6r8JWGfAtE7I3/+vzgnWyVheunQX9zPris7F1p8Y3J7PM3K6Jdn/C18zw4O
    6.67 +7OUSdr5sBMmFR+4UlI91tel5l2SlC1tp6X1e8jiLNSeaSgwWaRBzhpHyMJFGP6Br
    6.68 +HE+Hrm8Eisw1r4DJlVOhtHK1yhTw0jTGoaleJ4Zw0YToRtsfjd9pDfIEfTNnwA5E
    6.69 +/yZC8SshMvgOBZKt5FFcZyuGVOK9FoDUODeV+EiBobQIsXWzOjpqOKGlXD5+ikEG
    6.70 +AJzaaX/zji0rWnTLtXliIh45KZWaFdVx310WsBhodBUXJoGCh6u5GorV5R8OsDMS
    6.71 +eGF/ZkWHrfJ15saC6SYz35T/XOqIaQBgDezDxND1Ww+S4cn3D26/PgOJOBE3SEg4
    6.72 +8Eq6cJhpxUaR7oA/8Q4gcre6H0hYFyESOHIT8c8bYjgt6gBZAzd01PPd5nEoa0gP
    6.73 +bjjsRM0oN+pW5hoSR1t07zzHe/U4Ldzk5TErB+A7Ssnmq+vqR3w4X7SYKVQ/+8uf
    6.74 +WtnkiQG8BBgBCAAmFiEEHJZm2LPij0qjhH2omm51486q3tQFAkdLUAgCGwwFCQPC
    6.75 +ZwAACgkQmm51486q3tSOEAwAtxGSZrVZvVB6WSwps/smJLt/k19ywqqTEgzuYSIy
    6.76 +MZ6Y7iqlRy73tFUjRPmWduFWYHeAtAl36KHVGxAr4ZT9raj3af94JORnm5uyCXGt
    6.77 +UduIhMuwh8iQKZ1f9pI8iFxB3rBh25v7KNHZRZ9BU42CjsvWt3brWoKtjeEm9htP
    6.78 +lA9+bZY5KBF+JVwo/7VkFqxX1egDJsNpYfephZWrTOfqXO1/agBD1woUyeShihNw
    6.79 +fWiZ384Nz2iwmvBUUBZUhMLhoSEWCdkDtHg+gct/0cy0BCmMHG/p2DRwmmAwqY/7
    6.80 +h05kMDnDHFugI62hX2Um+nUcIpKTFXmwf3haev5su2eCE4D6stIL5XECcsaJnr31
    6.81 +mJIhPwjDlvLI7Erh/EiSJ3O7a0Q6uUqOz05aXuvbY+Xtg3qvY1JuobA+Gk6VL2/U
    6.82 +mifHMgsgYRlWZhohjK0hAFw1u8rpib2TTyG8FQJluB0rJ8+nVIjyQtVsWXoj+sEY
    6.83 +YaxF8MSCzkTmFnhdIPMPkTXB
    6.84 +=6nmY
    6.85 +-----END PGP PRIVATE KEY BLOCK-----