From 76a9869339daeae42b797bbbe63783261b729cdd Mon Sep 17 00:00:00 2001 From: Graeme Connell Date: Thu, 20 Oct 2022 16:52:03 -0600 Subject: [PATCH] Squashed history. --- .dockerignore | 5 + .github/workflows/dockercache/action.yml | 41 + .github/workflows/push.yml | 42 + .github/workflows/test.yml | 29 + .gitignore | 8 + .gitmodules | 18 + LICENSE | 661 +++++ Makefile | 68 + README.md | 78 + SECURITY.md | 11 + check_copyrights.sh | 12 + docker/Dockerfile | 139 + docker/apt.conf | 15 + docker/aws-nitro-enclaves-nsm-api | 1 + docker/aws-nitro.Cargo.lock | 561 ++++ docker/check_hash.sh | 8 + docker/ms.sources.list | 1 + docker/sgx.sources.list | 1 + docker/sgx_default_qcnl_azure.conf | 29 + docker/sha256.go1.20.2.linux-amd64.tar.gz | 1 + docker/sha256.libnsm.a | 1 + docker/sha256.protoc-21.8-linux-x86_64.zip | 1 + docker/sources.list | 5 + docs/Healing.md | 98 + docs/Messages.md | 176 ++ docs/svr3spec/.gitignore | 5 + docs/svr3spec/README.md | 11 + docs/svr3spec/svr3.bib | 40 + docs/svr3spec/svr3.pdf | Bin 0 -> 330906 bytes docs/svr3spec/svr3.tex | 349 +++ enclave/.gitignore | 4 + enclave/Makefile | 232 ++ enclave/Makefile.HOST | 4 + enclave/Makefile.NSM | 4 + enclave/Makefile.SGX | 4 + enclave/Makefile.TEST | 4 + enclave/Makefile.base | 164 ++ enclave/Makefile.subdir | 41 + enclave/README.md | 159 ++ enclave/SipHash | 1 + enclave/attestation/attestation.cc | 90 + enclave/attestation/attestation.h | 51 + enclave/client/client.cc | 225 ++ enclave/client/client.h | 86 + enclave/context/context.cc | 47 + enclave/context/context.h | 101 + enclave/context/tests/acquire_lock.cc | 69 + enclave/core/core.cc | 1689 ++++++++++++ enclave/core/core.h | 311 +++ enclave/core/coretest/replicagroup.cc | 145 ++ enclave/core/coretest/replicagroup.h | 249 ++ enclave/core/coretest/testingclient.cc | 184 ++ enclave/core/coretest/testingclient.h | 81 + enclave/core/coretest/testingcore.cc | 290 +++ enclave/core/coretest/testingcore.h | 124 + enclave/core/internal.h | 76 + enclave/core/tests/core.cc | 2306 +++++++++++++++++ enclave/db/db.cc | 27 + enclave/db/db.h | 122 + enclave/db/db2.cc | 342 +++ enclave/db/db2.h | 113 + enclave/db/db3.cc | 298 +++ enclave/db/db3.h | 124 + enclave/db/tests/db2.cc | 247 ++ enclave/db/tests/db3.cc | 373 +++ enclave/ecalls/ecalls.cc | 97 + enclave/env/env.cc | 80 + enclave/env/env.h | 50 + enclave/env/nsm/nsm.cc | 114 + enclave/env/nsm/nsm.h | 17 + enclave/env/sgx/sgx.cc | 272 ++ enclave/env/test/test.cc | 94 + enclave/env/test/test.h | 17 + enclave/env/test/tests/testrand.cc | 28 + enclave/find_header.sh | 25 + enclave/googletest | 1 + enclave/groupclock/groupclock.cc | 52 + enclave/groupclock/groupclock.h | 37 + enclave/groupclock/tests/groupclock.cc | 55 + enclave/gtest/gtest-all.cc | 1 + enclave/gtest/gtest_main.cc | 1 + enclave/hmac/hmac.cc | 25 + enclave/hmac/hmac.h | 17 + enclave/hmac/tests/hmac.cc | 44 + enclave/libsodium | 1 + enclave/metrics/counters.h | 114 + enclave/metrics/gauges.h | 51 + enclave/metrics/metrics.cc | 100 + enclave/metrics/metrics.h | 92 + enclave/metrics/tests/metrics.cc | 122 + enclave/nitromain/nitromain.cc | 144 + enclave/noise-c | 1 + enclave/noise/noise.cc | 73 + enclave/noise/noise.h | 76 + enclave/noise/tests/encrypt_decrypt.cc | 100 + enclave/noisewrap/tests/noisewrap.cc | 33 + enclave/noisewrap/wrap.cc | 15 + enclave/peerid/peerid.cc | 49 + enclave/peerid/peerid.h | 54 + enclave/peerid/tests/peerid.cc | 107 + enclave/peers/peers.cc | 691 +++++ enclave/peers/peers.h | 261 ++ enclave/peers/tests/peermanager.cc | 207 ++ enclave/proto/clientlog.proto | 26 + enclave/proto/e2e.proto | 156 ++ enclave/proto/raft.proto | 76 + enclave/proto/tests.proto | 11 + enclave/protobuf | 1 + enclave/protobuf-lite/README.md | 20 + enclave/protobuf-lite/any_lite.cc | 1 + enclave/protobuf-lite/arena.cc | 1 + enclave/protobuf-lite/arenastring.cc | 1 + enclave/protobuf-lite/arenaz_sampler.cc | 1 + enclave/protobuf-lite/bytestream.cc | 1 + enclave/protobuf-lite/coded_stream.cc | 1 + enclave/protobuf-lite/common.cc | 1 + enclave/protobuf-lite/extension_set.cc | 1 + enclave/protobuf-lite/generated_enum_util.cc | 1 + .../generated_message_tctable_lite.cc | 1 + .../protobuf-lite/generated_message_util.cc | 1 + .../protobuf-lite/implicit_weak_message.cc | 1 + enclave/protobuf-lite/inlined_string_field.cc | 1 + enclave/protobuf-lite/int128.cc | 1 + enclave/protobuf-lite/io_win32.cc | 1 + enclave/protobuf-lite/map.cc | 1 + enclave/protobuf-lite/message_lite.cc | 1 + enclave/protobuf-lite/parse_context.cc | 1 + enclave/protobuf-lite/repeated_field.cc | 1 + enclave/protobuf-lite/repeated_ptr_field.cc | 1 + enclave/protobuf-lite/status.cc | 1 + enclave/protobuf-lite/statusor.cc | 1 + enclave/protobuf-lite/stringpiece.cc | 1 + enclave/protobuf-lite/stringprintf.cc | 1 + enclave/protobuf-lite/strtod.cc | 1 + enclave/protobuf-lite/structurally_valid.cc | 1 + enclave/protobuf-lite/strutil.cc | 1 + enclave/protobuf-lite/time.cc | 1 + enclave/protobuf-lite/wire_format_lite.cc | 1 + enclave/protobuf-lite/zero_copy_stream.cc | 1 + .../protobuf-lite/zero_copy_stream_impl.cc | 1 + .../zero_copy_stream_impl_lite.cc | 1 + enclave/queue/queue.h | 47 + enclave/queue/tests/queue.cc | 44 + enclave/raft/internal.h | 84 + enclave/raft/log.cc | 178 ++ enclave/raft/log.h | 112 + enclave/raft/membership.cc | 118 + enclave/raft/membership.h | 52 + enclave/raft/raft.cc | 1147 ++++++++ enclave/raft/raft.h | 289 +++ enclave/raft/tests/log.cc | 109 + enclave/raft/tests/membership.cc | 132 + enclave/raft/tests/raft.cc | 277 ++ enclave/raft/tests/setdiffsize.cc | 48 + enclave/raft/types.h | 17 + enclave/releases/.keep | 0 ...dd4ba50c25359f01e9f733eeba4382bca001d45094 | Bin 0 -> 29543104 bytes ...f8a79e8bd20d7652531feb3381cbffd446d270be95 | Bin 0 -> 29543104 bytes enclave/sender/sender.cc | 19 + enclave/sender/sender.h | 17 + enclave/sender/tests/sender.cc | 37 + enclave/sip/halfsiphash.c | 1 + enclave/sip/halfsiphash.h | 1 + enclave/sip/hasher.cc | 25 + enclave/sip/hasher.h | 24 + enclave/sip/tests/hasher.cc | 44 + enclave/socketwrap/socket.cc | 95 + enclave/socketwrap/socket.h | 39 + enclave/socketwrap/tests/socket.cc | 91 + enclave/svr2.conf | 21 + enclave/svr2/.keep | 1 + enclave/svr2_small.conf | 7 + enclave/svr2_test.conf | 7 + enclave/test_deps.sh | 17 + enclave/testhost/testhost.cc | 264 ++ enclave/timeout/tests/timeout.cc | 87 + enclave/timeout/timeout.cc | 58 + enclave/timeout/timeout.h | 62 + enclave/util/bytes.h | 36 + enclave/util/constant.h | 31 + enclave/util/cpu.h | 21 + enclave/util/endian.h | 62 + enclave/util/hex.cc | 30 + enclave/util/hex.h | 29 + enclave/util/log.cc | 33 + enclave/util/log.h | 41 + enclave/util/macros.h | 34 + enclave/util/mutex.h | 52 + enclave/util/tests/constant.cc | 28 + enclave/util/tests/endian.cc | 31 + enclave/util/tests/hex.cc | 29 + enclave/util/threadsafetyannotations.h | 74 + enclave/util/ticks.cc | 8 + enclave/util/ticks.h | 18 + host/.gitignore | 5 + host/.tool-versions | 1 + host/Makefile | 65 + host/README.md | 18 + host/auth/auth.go | 101 + host/auth/auth_test.go | 45 + host/cmd/control/main.go | 73 + host/cmd/svr2client/main.go | 261 ++ host/config/config.go | 138 + host/config/config_test.go | 38 + host/config/peer.go | 31 + host/config/raft.go | 36 + host/config/rate.go | 29 + host/config/redis.go | 37 + host/config/request.go | 28 + host/dispatch/dispatcher.go | 350 +++ host/dispatch/dispatcher_test.go | 268 ++ host/dispatch/metrics.go | 133 + host/dispatch/metrics_test.go | 132 + host/enclave.config.sample | 22 + host/enclave/callback.go | 22 + host/enclave/enclave_test.go | 98 + host/enclave/iface.go | 17 + host/enclave/logging.go | 52 + host/enclave/nitro.go | 204 ++ host/enclave/sgx.go | 223 ++ host/go.mod | 39 + host/go.sum | 175 ++ host/health/health.go | 43 + host/health/health_test.go | 53 + host/host.config.sample | 13 + host/integration/integration_test.go | 325 +++ host/integration/testdata/enclave.config | 20 + host/logger/logger.go | 60 + host/main.go | 97 + host/miniredis/miniredis.go | 25 + host/peer/client.go | 507 ++++ host/peer/client_test.go | 664 +++++ host/peer/peer.go | 18 + host/peer/peerdb/peerdb.go | 217 ++ host/peer/peerdb/peerdb_test.go | 183 ++ host/peer/sequence_number.go | 74 + host/peer/serialize.go | 154 ++ host/peer/server.go | 307 +++ host/peer/server_test.go | 355 +++ host/peerid/peerid.go | 39 + host/proto/control.proto | 181 ++ host/proto/error.go | 16 + host/proto/error_test.go | 20 + host/proto/peerdb.proto | 16 + host/raftmanager/raftmanager.go | 191 ++ host/raftmanager/raftmanager_test.go | 76 + host/rate/rate.go | 76 + host/rate/rate_test.go | 90 + host/service/service.go | 162 ++ host/service/service_test.go | 281 ++ host/servicetest/servicetest.go | 81 + host/util/clock.go | 29 + host/util/clock_test.go | 45 + host/util/txid.go | 17 + host/util/user_agent.go | 86 + host/util/user_agent_test.go | 82 + host/util/util.go | 58 + host/web/client/control_client.go | 57 + host/web/client/svr2client.go | 99 + host/web/handlers/control.go | 79 + host/web/handlers/delete_backup.go | 66 + host/web/handlers/handlers.go | 24 + host/web/handlers/set_log_level.go | 92 + host/web/handlers/set_log_level_test.go | 110 + host/web/handlers/websocket.go | 228 ++ host/web/middleware/auth.go | 30 + host/web/middleware/metrics.go | 81 + host/web/middleware/rate.go | 53 + host/web/server_test.go | 92 + shared/.gitignore | 4 + shared/proto/client.proto | 114 + shared/proto/client3.proto | 77 + shared/proto/enclaveconfig.proto | 92 + shared/proto/error.proto | 214 ++ shared/proto/metrics.proto | 19 + shared/proto/msgs.proto | 210 ++ shared/proto/nitro.proto | 38 + shared/svr2.edl | 47 + 278 files changed, 27698 insertions(+) create mode 100644 .dockerignore create mode 100644 .github/workflows/dockercache/action.yml create mode 100644 .github/workflows/push.yml create mode 100644 .github/workflows/test.yml create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README.md create mode 100644 SECURITY.md create mode 100755 check_copyrights.sh create mode 100644 docker/Dockerfile create mode 100644 docker/apt.conf create mode 160000 docker/aws-nitro-enclaves-nsm-api create mode 100644 docker/aws-nitro.Cargo.lock create mode 100755 docker/check_hash.sh create mode 100644 docker/ms.sources.list create mode 100644 docker/sgx.sources.list create mode 100644 docker/sgx_default_qcnl_azure.conf create mode 100644 docker/sha256.go1.20.2.linux-amd64.tar.gz create mode 100644 docker/sha256.libnsm.a create mode 100644 docker/sha256.protoc-21.8-linux-x86_64.zip create mode 100644 docker/sources.list create mode 100644 docs/Healing.md create mode 100644 docs/Messages.md create mode 100644 docs/svr3spec/.gitignore create mode 100644 docs/svr3spec/README.md create mode 100644 docs/svr3spec/svr3.bib create mode 100644 docs/svr3spec/svr3.pdf create mode 100644 docs/svr3spec/svr3.tex create mode 100644 enclave/.gitignore create mode 100644 enclave/Makefile create mode 100644 enclave/Makefile.HOST create mode 100644 enclave/Makefile.NSM create mode 100644 enclave/Makefile.SGX create mode 100644 enclave/Makefile.TEST create mode 100644 enclave/Makefile.base create mode 100644 enclave/Makefile.subdir create mode 100644 enclave/README.md create mode 160000 enclave/SipHash create mode 100644 enclave/attestation/attestation.cc create mode 100644 enclave/attestation/attestation.h create mode 100644 enclave/client/client.cc create mode 100644 enclave/client/client.h create mode 100644 enclave/context/context.cc create mode 100644 enclave/context/context.h create mode 100644 enclave/context/tests/acquire_lock.cc create mode 100644 enclave/core/core.cc create mode 100644 enclave/core/core.h create mode 100644 enclave/core/coretest/replicagroup.cc create mode 100644 enclave/core/coretest/replicagroup.h create mode 100644 enclave/core/coretest/testingclient.cc create mode 100644 enclave/core/coretest/testingclient.h create mode 100644 enclave/core/coretest/testingcore.cc create mode 100644 enclave/core/coretest/testingcore.h create mode 100644 enclave/core/internal.h create mode 100644 enclave/core/tests/core.cc create mode 100644 enclave/db/db.cc create mode 100644 enclave/db/db.h create mode 100644 enclave/db/db2.cc create mode 100644 enclave/db/db2.h create mode 100644 enclave/db/db3.cc create mode 100644 enclave/db/db3.h create mode 100644 enclave/db/tests/db2.cc create mode 100644 enclave/db/tests/db3.cc create mode 100644 enclave/ecalls/ecalls.cc create mode 100644 enclave/env/env.cc create mode 100644 enclave/env/env.h create mode 100644 enclave/env/nsm/nsm.cc create mode 100644 enclave/env/nsm/nsm.h create mode 100644 enclave/env/sgx/sgx.cc create mode 100644 enclave/env/test/test.cc create mode 100644 enclave/env/test/test.h create mode 100644 enclave/env/test/tests/testrand.cc create mode 100755 enclave/find_header.sh create mode 160000 enclave/googletest create mode 100644 enclave/groupclock/groupclock.cc create mode 100644 enclave/groupclock/groupclock.h create mode 100644 enclave/groupclock/tests/groupclock.cc create mode 120000 enclave/gtest/gtest-all.cc create mode 120000 enclave/gtest/gtest_main.cc create mode 100644 enclave/hmac/hmac.cc create mode 100644 enclave/hmac/hmac.h create mode 100644 enclave/hmac/tests/hmac.cc create mode 160000 enclave/libsodium create mode 100644 enclave/metrics/counters.h create mode 100644 enclave/metrics/gauges.h create mode 100644 enclave/metrics/metrics.cc create mode 100644 enclave/metrics/metrics.h create mode 100644 enclave/metrics/tests/metrics.cc create mode 100644 enclave/nitromain/nitromain.cc create mode 160000 enclave/noise-c create mode 100644 enclave/noise/noise.cc create mode 100644 enclave/noise/noise.h create mode 100644 enclave/noise/tests/encrypt_decrypt.cc create mode 100644 enclave/noisewrap/tests/noisewrap.cc create mode 100644 enclave/noisewrap/wrap.cc create mode 100644 enclave/peerid/peerid.cc create mode 100644 enclave/peerid/peerid.h create mode 100644 enclave/peerid/tests/peerid.cc create mode 100644 enclave/peers/peers.cc create mode 100644 enclave/peers/peers.h create mode 100644 enclave/peers/tests/peermanager.cc create mode 100644 enclave/proto/clientlog.proto create mode 100644 enclave/proto/e2e.proto create mode 100644 enclave/proto/raft.proto create mode 100644 enclave/proto/tests.proto create mode 160000 enclave/protobuf create mode 100644 enclave/protobuf-lite/README.md create mode 120000 enclave/protobuf-lite/any_lite.cc create mode 120000 enclave/protobuf-lite/arena.cc create mode 120000 enclave/protobuf-lite/arenastring.cc create mode 120000 enclave/protobuf-lite/arenaz_sampler.cc create mode 120000 enclave/protobuf-lite/bytestream.cc create mode 120000 enclave/protobuf-lite/coded_stream.cc create mode 120000 enclave/protobuf-lite/common.cc create mode 120000 enclave/protobuf-lite/extension_set.cc create mode 120000 enclave/protobuf-lite/generated_enum_util.cc create mode 120000 enclave/protobuf-lite/generated_message_tctable_lite.cc create mode 120000 enclave/protobuf-lite/generated_message_util.cc create mode 120000 enclave/protobuf-lite/implicit_weak_message.cc create mode 120000 enclave/protobuf-lite/inlined_string_field.cc create mode 120000 enclave/protobuf-lite/int128.cc create mode 120000 enclave/protobuf-lite/io_win32.cc create mode 120000 enclave/protobuf-lite/map.cc create mode 120000 enclave/protobuf-lite/message_lite.cc create mode 120000 enclave/protobuf-lite/parse_context.cc create mode 120000 enclave/protobuf-lite/repeated_field.cc create mode 120000 enclave/protobuf-lite/repeated_ptr_field.cc create mode 120000 enclave/protobuf-lite/status.cc create mode 120000 enclave/protobuf-lite/statusor.cc create mode 120000 enclave/protobuf-lite/stringpiece.cc create mode 120000 enclave/protobuf-lite/stringprintf.cc create mode 120000 enclave/protobuf-lite/strtod.cc create mode 120000 enclave/protobuf-lite/structurally_valid.cc create mode 120000 enclave/protobuf-lite/strutil.cc create mode 120000 enclave/protobuf-lite/time.cc create mode 120000 enclave/protobuf-lite/wire_format_lite.cc create mode 120000 enclave/protobuf-lite/zero_copy_stream.cc create mode 120000 enclave/protobuf-lite/zero_copy_stream_impl.cc create mode 120000 enclave/protobuf-lite/zero_copy_stream_impl_lite.cc create mode 100644 enclave/queue/queue.h create mode 100644 enclave/queue/tests/queue.cc create mode 100644 enclave/raft/internal.h create mode 100644 enclave/raft/log.cc create mode 100644 enclave/raft/log.h create mode 100644 enclave/raft/membership.cc create mode 100644 enclave/raft/membership.h create mode 100644 enclave/raft/raft.cc create mode 100644 enclave/raft/raft.h create mode 100644 enclave/raft/tests/log.cc create mode 100644 enclave/raft/tests/membership.cc create mode 100644 enclave/raft/tests/raft.cc create mode 100644 enclave/raft/tests/setdiffsize.cc create mode 100644 enclave/raft/types.h create mode 100644 enclave/releases/.keep create mode 100644 enclave/releases/default.6ee1042f9e20f880326686dd4ba50c25359f01e9f733eeba4382bca001d45094 create mode 100644 enclave/releases/small.a8a261420a6bb9b61aa25bf8a79e8bd20d7652531feb3381cbffd446d270be95 create mode 100644 enclave/sender/sender.cc create mode 100644 enclave/sender/sender.h create mode 100644 enclave/sender/tests/sender.cc create mode 120000 enclave/sip/halfsiphash.c create mode 120000 enclave/sip/halfsiphash.h create mode 100644 enclave/sip/hasher.cc create mode 100644 enclave/sip/hasher.h create mode 100644 enclave/sip/tests/hasher.cc create mode 100644 enclave/socketwrap/socket.cc create mode 100644 enclave/socketwrap/socket.h create mode 100644 enclave/socketwrap/tests/socket.cc create mode 100644 enclave/svr2.conf create mode 100644 enclave/svr2/.keep create mode 100644 enclave/svr2_small.conf create mode 100644 enclave/svr2_test.conf create mode 100755 enclave/test_deps.sh create mode 100644 enclave/testhost/testhost.cc create mode 100644 enclave/timeout/tests/timeout.cc create mode 100644 enclave/timeout/timeout.cc create mode 100644 enclave/timeout/timeout.h create mode 100644 enclave/util/bytes.h create mode 100644 enclave/util/constant.h create mode 100644 enclave/util/cpu.h create mode 100644 enclave/util/endian.h create mode 100644 enclave/util/hex.cc create mode 100644 enclave/util/hex.h create mode 100644 enclave/util/log.cc create mode 100644 enclave/util/log.h create mode 100644 enclave/util/macros.h create mode 100644 enclave/util/mutex.h create mode 100644 enclave/util/tests/constant.cc create mode 100644 enclave/util/tests/endian.cc create mode 100644 enclave/util/tests/hex.cc create mode 100644 enclave/util/threadsafetyannotations.h create mode 100644 enclave/util/ticks.cc create mode 100644 enclave/util/ticks.h create mode 100644 host/.gitignore create mode 100644 host/.tool-versions create mode 100644 host/Makefile create mode 100644 host/README.md create mode 100644 host/auth/auth.go create mode 100644 host/auth/auth_test.go create mode 100644 host/cmd/control/main.go create mode 100644 host/cmd/svr2client/main.go create mode 100644 host/config/config.go create mode 100644 host/config/config_test.go create mode 100644 host/config/peer.go create mode 100644 host/config/raft.go create mode 100644 host/config/rate.go create mode 100644 host/config/redis.go create mode 100644 host/config/request.go create mode 100644 host/dispatch/dispatcher.go create mode 100644 host/dispatch/dispatcher_test.go create mode 100644 host/dispatch/metrics.go create mode 100644 host/dispatch/metrics_test.go create mode 100644 host/enclave.config.sample create mode 100644 host/enclave/callback.go create mode 100644 host/enclave/enclave_test.go create mode 100644 host/enclave/iface.go create mode 100644 host/enclave/logging.go create mode 100644 host/enclave/nitro.go create mode 100644 host/enclave/sgx.go create mode 100644 host/go.mod create mode 100644 host/go.sum create mode 100644 host/health/health.go create mode 100644 host/health/health_test.go create mode 100644 host/host.config.sample create mode 100644 host/integration/integration_test.go create mode 100644 host/integration/testdata/enclave.config create mode 100644 host/logger/logger.go create mode 100644 host/main.go create mode 100644 host/miniredis/miniredis.go create mode 100644 host/peer/client.go create mode 100644 host/peer/client_test.go create mode 100644 host/peer/peer.go create mode 100644 host/peer/peerdb/peerdb.go create mode 100644 host/peer/peerdb/peerdb_test.go create mode 100644 host/peer/sequence_number.go create mode 100644 host/peer/serialize.go create mode 100644 host/peer/server.go create mode 100644 host/peer/server_test.go create mode 100644 host/peerid/peerid.go create mode 100644 host/proto/control.proto create mode 100644 host/proto/error.go create mode 100644 host/proto/error_test.go create mode 100644 host/proto/peerdb.proto create mode 100644 host/raftmanager/raftmanager.go create mode 100644 host/raftmanager/raftmanager_test.go create mode 100644 host/rate/rate.go create mode 100644 host/rate/rate_test.go create mode 100644 host/service/service.go create mode 100644 host/service/service_test.go create mode 100644 host/servicetest/servicetest.go create mode 100644 host/util/clock.go create mode 100644 host/util/clock_test.go create mode 100644 host/util/txid.go create mode 100644 host/util/user_agent.go create mode 100644 host/util/user_agent_test.go create mode 100644 host/util/util.go create mode 100644 host/web/client/control_client.go create mode 100644 host/web/client/svr2client.go create mode 100644 host/web/handlers/control.go create mode 100644 host/web/handlers/delete_backup.go create mode 100644 host/web/handlers/handlers.go create mode 100644 host/web/handlers/set_log_level.go create mode 100644 host/web/handlers/set_log_level_test.go create mode 100644 host/web/handlers/websocket.go create mode 100644 host/web/middleware/auth.go create mode 100644 host/web/middleware/metrics.go create mode 100644 host/web/middleware/rate.go create mode 100644 host/web/server_test.go create mode 100644 shared/.gitignore create mode 100644 shared/proto/client.proto create mode 100644 shared/proto/client3.proto create mode 100644 shared/proto/enclaveconfig.proto create mode 100644 shared/proto/error.proto create mode 100644 shared/proto/metrics.proto create mode 100644 shared/proto/msgs.proto create mode 100644 shared/proto/nitro.proto create mode 100644 shared/svr2.edl diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..af0e44f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +.gopath +.gocache +.git +enclave/build +enclave/core.* diff --git a/.github/workflows/dockercache/action.yml b/.github/workflows/dockercache/action.yml new file mode 100644 index 0000000..b98a4dc --- /dev/null +++ b/.github/workflows/dockercache/action.yml @@ -0,0 +1,41 @@ +name: Docker Caching +description: Cache a docker image + +inputs: + dockerdir: + required: true + type: string + imagename: + required: true + type: string + target: + required: false + type: string + dockerfile: + required: true + type: string + +runs: + using: composite + + steps: + - name: Check for cached docker image + id: cached-docker + uses: actions/cache@v3 + with: + path: dockerimage-${{ hashFiles(inputs.dockerfile) }}.tar + key: ${{ runner.os }}-dockerimagetar-${{ hashFiles(inputs.dockerfile) }} + restore-keys: ${{ runner.os }}-dockerimagetar- + + - name: Load docker image + run: docker load --input dockerimage-*.tar || true + shell: bash + + - name: Build/label docker image + run: docker build -t ${{ inputs.imagename }} -f ${{ inputs.dockerfile }} ${{ inputs.dockerdir }} --target=${{ inputs.target }} --cache-from ${{ inputs.imagename }}:latest + shell: bash + + - name: Save docker image + if: steps.cached-docker.outputs.cache-hit != 'true' + run: docker save --output dockerimage-${{ hashFiles(inputs.dockerfile) }}.tar ${{ inputs.imagename }}:latest $(docker history -q ${{ inputs.imagename }}:latest | grep -v missing) + shell: bash diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml new file mode 100644 index 0000000..a190f98 --- /dev/null +++ b/.github/workflows/push.yml @@ -0,0 +1,42 @@ +name: Build and push Docker image + +on: + release: + types: [published] + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + id-token: write # This is required for requesting the JWT + contents: read # This is required for actions/checkout + steps: + - name: Checkout main project + uses: actions/checkout@v3 + with: + submodules: true + + - name: Docker cache + uses: ./.github/workflows/dockercache + with: + dockerdir: . + imagename: svr2_buildenv + target: builder + dockerfile: docker/Dockerfile + + - name: 'Az CLI login' + uses: azure/login@v1 + with: + client-id: ${{ secrets.AZURE_CLIENT_ID }} + tenant-id: ${{ secrets.AZURE_TENANT_ID }} + subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + + - name: 'Docker login' + run: + az acr login --name ${{ secrets.AZURE_CONTAINER_REGISTRY_NAME }} + + - name: Build and push container image + run: | + make container + docker tag svr2_runenv:latest "${{ secrets.REGISTRY_LOGIN_SERVER }}/svr2:${GITHUB_REF_NAME}" + docker push "${{ secrets.REGISTRY_LOGIN_SERVER }}/svr2:${GITHUB_REF_NAME}" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..3518323 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,29 @@ +name: CI +on: [push] + +jobs: + test: + runs-on: ubuntu-latest + permissions: + packages: read + contents: read + + steps: + - name: Checkout main project + uses: actions/checkout@v3 + with: + submodules: true + + - name: Docker cache + uses: ./.github/workflows/dockercache + with: + dockerdir: . + imagename: svr2_buildenv + target: builder + dockerfile: docker/Dockerfile + + - name: Build and test + run: make + + - name: Validate + run: make docker_validate diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6836034 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.sw? +.gocache +.gopath +**/.devcontainer +**/.vscode +**/*.code-workspace +.tool-versions +.idea diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..855d0d0 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,18 @@ +[submodule "enclave/protobuf"] + path = enclave/protobuf + url = https://github.com/protocolbuffers/protobuf.git +[submodule "enclave/noise-c"] + path = enclave/noise-c + url = https://github.com/rweather/noise-c.git +[submodule "enclave/SipHash"] + path = enclave/SipHash + url = https://github.com/veorq/SipHash +[submodule "enclave/googletest"] + path = enclave/googletest + url = https://github.com/google/googletest +[submodule "enclave/libsodium"] + path = enclave/libsodium + url = https://github.com/jedisct1/libsodium +[submodule "docker/aws-nitro-enclaves-nsm-api"] + path = docker/aws-nitro-enclaves-nsm-api + url = https://github.com/aws/aws-nitro-enclaves-nsm-api.git diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..be3f7b2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..67cb42a --- /dev/null +++ b/Makefile @@ -0,0 +1,68 @@ +dockall: docker_all + +all: validate host enclave control + +MAKE_ARGS ?= --keep-going + +enclave_testbin: | git + $(MAKE) $(MAKE_ARGS) -C enclave build/enclave.test + +validate: + $(MAKE) $(MAKE_ARGS) -C enclave validate + $(MAKE) $(MAKE_ARGS) -C host validate + ./check_copyrights.sh + +git: + git submodule init || true + git submodule update || true + +enclave: enclave_testbin + $(MAKE) $(MAKE_ARGS) -C enclave all + +enclave_test: + $(MAKE) $(MAKE_ARGS) -C enclave test + +host: enclave_testbin + $(MAKE) $(MAKE_ARGS) -C host all + +control: + $(MAKE) $(MAKE_ARGS) -C host control + +clean: + $(MAKE) $(MAKE_ARGS) -C enclave clean + $(MAKE) $(MAKE_ARGS) -C host clean + +dockerbase: | git + docker build -f docker/Dockerfile -t svr2_buildenv --target=builder . + +PARALLEL ?= $(shell cat /proc/cpuinfo | grep '^cpu cores' | awk '{ sum += $$4 } END { print sum }') +DOCKER_MAKE_ARGS ?= -j$(PARALLEL) MAKE_ARGS="$(MAKE_ARGS)" +ARCH ?= $(shell arch) +ifeq ($(ARCH),arm64) + DOCKER_MAKE_ARGS += 'GO_TEST_FLAGS=-short' # long tests can cause qemu crashes in x86 emulation +endif +DOCKER_ARGS ?= +docker_%: dockerbase + docker run \ + -v "$$(pwd):/src" \ + -u "$$(id -u):$$(id -g)" \ + $(DOCKER_ARGS) \ + svr2_buildenv /bin/bash -c "make V=$(V) $(DOCKER_MAKE_ARGS) $*" + +dockersh: dockerbase + docker run --rm -it \ + -v "$$(pwd):/src" \ + -u "$$(id -u):$$(id -g)" \ + -e "TERM=xterm-256color" \ + $(DOCKER_ARGS) \ + svr2_buildenv + +container: dockerbase + docker build -f docker/Dockerfile -t svr2_runenv . + +enclave_release: docker_enclave_releaser +enclave_releaser: enclave host # depends on 'host' so its tests will run + cp -vn enclave/build/enclave.signed "enclave/releases/default.$$(/opt/openenclave/bin/oesign dump -e enclave/build/enclave.signed | fgrep -i mrenclave | cut -d '=' -f2)" + cp -vn enclave/build/enclave.small "enclave/releases/small.$$(/opt/openenclave/bin/oesign dump -e enclave/build/enclave.small | fgrep -i mrenclave | cut -d '=' -f2)" + +.PHONY: all clean enclave host dockersh docker dockerbase git validate enclave_testbin control enclave_release enclave_releaser diff --git a/README.md b/README.md new file mode 100644 index 0000000..e1b58c8 --- /dev/null +++ b/README.md @@ -0,0 +1,78 @@ +# Secure Value Recovery Service v2 + +The SecureValueRecovery2 (SVR2) project aims to store client-side secrets +server-side protected by a human-remembered (and thus, low-entropy) pin. +It does so by limiting the number of attempts to recover such a secret to +a very small guess count, to disallow brute-force attacks that would otherwise +trivially recover such a secret. To limit the number of recovery attempts, +SVR2 keeps persistent state on the guess count, along with the secret itself, +in a multi-replica, strong-consensus, shared storage mechanism based on +in-memory Raft. + +SVR2 is designed, first and foremost, to not leak the secret +material, and, secondarily, to provide the material back to clients. Given +this, if there is a choice between "lose the secret material forever" and +"store the secret material but potentially leak it", we'll choose the former. +This means that, in some cases, we've chosen to allow the system to lose +_liveness_ (the ability to serve back anything) in order to maintain the +security properties of the system. We'll happily discard every secret in the +system rather than expose one of the secrets to a leak. + +## History + +SVR2 is a successor to the +[SecureValueRecovery](https://github.com/signalapp/SecureValueRecovery) +project that Signal already uses for the above stated purpose. We've built +a second version of this system to handle a few specific issues: + +- Update to SGX DCAP capabilities +- Provide better operational handling of crashes/failures via self-healing +- Simplify to a single-replica-group model since SGX CPUs now have an EPC size of hundreds of gigabytes + +As part of SGX DCAP updates, this project also attempts to be as safe as +possible while running on SGX TME memory, compared to the differing +security guarantees of the SGX MEE memory utilized in the original version. + +## Building + +In order to build and test everything in this repository, you should be able to +just run `make` at the top-level. You must have a valid `docker` installed +locally to do this. Running this at the top-level will: + +- Create a docker image in which to build things +- Build `enclave/enclave.test` (a debug enclave for simulation/testing) and + `enclave/enclave.signed` (a production enclave) +- Build and test the host-side process in `host/` + +If you'd like to incrementally build and change things, you can do so by +running `make dockersh`. This will build the aforementioned docker image, +then drop you inside of it in a `bash` shell. You can then run any of + +``` +make all # Make everything +make enclave # Make all of the enclave stuf +make host # Make all of the host stuff +(cd enclave && make $SOMETARGET) # Make just a specific target in enclave +(cd host && make $SOMETARGET) # Make just a specific target in host +``` + +## Code layout + +Code is divided into a few main directories at the top-level + +* `docker` - Contains the spec for the docker image used to build everything else. +* `shared` - Contains all code/configs that must be shared between the host and enclave. + This includes any protos that the host and enclave use to communicate, + and the definitions of ocalls/ecalls (the `*.edl` files). +* `enclave` - Contains all code and build rules for building the in-enclave binary. + This is a C++ codebase. +* `host` - Contains all code and build rules for building the host-side binary, which + starts up an enclave, then communicates with it. This is a Go codebase. +* `docs` - Contains additional documentation above and beyond the host/enclave `README.md` + docs on specific topics. + +## License + +Copyright 2023 Signal Messenger, LLC + +Licensed under the [AGPLv3](LICENSE) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..2c23595 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,11 @@ +## Reporting a Vulnerability + +If you've found a security vulnerability in this repository, +please report it via email to . + +Please only use this address to report security flaws in the Signal application (including this +repository). For questions, support, or feature requests concerning the app, please submit a +[support request][] or join the [unofficial community forum][]. + +[support request]: https://support.signal.org/hc/requests/new +[unofficial community forum]: https://community.signalusers.org/ diff --git a/check_copyrights.sh b/check_copyrights.sh new file mode 100755 index 0000000..0ca71bf --- /dev/null +++ b/check_copyrights.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +OUT=0 +for pattern in '*.c' '*.cc' '*.h' '*.go' '*.proto'; do + for file in `find ./ -name $pattern -type f | grep -v -f <(cat .gitmodules | grep path | awk '{print $3}') | egrep -v 'gopath|enclave/build|host/enclave/c'`; do + if ! grep -q Copyright $file; then + OUT=1 + echo "Missing copyright in '$file'" 1>&2 + fi + done +done +exit $OUT diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..4a59652 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,139 @@ +# syntax=docker/dockerfile:1 +# To build use: +# docker build -t oebuild . +FROM amd64/debian:bullseye-20220912 AS base + +LABEL description="linux build environment for sgx." + +COPY docker/apt.conf docker/sources.list /etc/apt/ +RUN apt-get update && \ + apt-get -y install \ + gpg \ + gnupg2 \ + wget \ + software-properties-common + +COPY docker/sgx.sources.list docker/ms.sources.list /etc/apt/sources.list.d/ +# ms and intel repos keep old packages around, +# however if they remove some of these in the future +# binary packages can be retrieved from github releases +RUN wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | apt-key add - && \ + wget -qO - https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \ + apt-get update && \ + apt -y install \ + libsgx-ae-id-enclave=1.16.100.2-focal1 \ + libsgx-ae-pce=2.19.100.3-focal1 \ + libsgx-ae-qe3=1.16.100.2-focal1 \ + libsgx-dcap-ql=1.16.100.2-focal1 \ + libsgx-dcap-ql-dev=1.16.100.2-focal1 \ + libsgx-enclave-common=2.19.100.3-focal1 \ + libsgx-headers=2.19.100.3-focal1 \ + libsgx-pce-logic=1.16.100.2-focal1 \ + libsgx-qe3-logic=1.16.100.2-focal1 \ + libsgx-urts=2.19.100.3-focal1 \ + open-enclave=0.19.0 + +FROM public.ecr.aws/amazonlinux/amazonlinux@sha256:94e7183b0739140dbd5b639fb7600f0a2299cec5df8780c26d9cb409da5315a9 AS nsmbuild +ENV HOST_MACHINE=x86_64 +ENV RUST_VERSION=1.58.1 +ENV RUSTUP_HOME=/usr/local/rustup \ + CARGO_HOME=/usr/local/cargo \ + PATH=/usr/local/cargo/bin:$PATH + +RUN yum install -y gcc + +RUN set -eux; \ + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs/ | sh -s -- --default-toolchain ${RUST_VERSION} -y ; \ + chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \ + rustup --version; \ + cargo --version; \ + rustc --version + +COPY docker/aws-nitro-enclaves-nsm-api /build +COPY docker/aws-nitro.Cargo.lock /build/Cargo.lock +WORKDIR /build + +RUN set -eux; \ + (cd nsm-lib && cargo build --release --locked) +RUN ar mD target/release/libnsm.a $(ar t target/release/libnsm.a | env -u LANG LC_ALL=C sort) +COPY docker/check_hash.sh docker/sha256.* ./ +RUN ./check_hash.sh target/release/libnsm.a + +FROM base AS builder + +RUN mkdir /src && \ + apt-get update && \ + apt-get -y install \ + clang-11 \ + libssl-dev \ + gdb \ + libtool \ + bison \ + automake \ + flex \ + libcurl4 \ + pkg-config \ + make \ + unzip \ + git \ + gcc \ + libgtest-dev + +COPY docker/check_hash.sh docker/sha256.* ./ + +ARG PROTOBUF_PLATFORM=linux-x86_64 +ARG PROTOBUF_VERSION=21.8 +ARG PROTOBUF_BASE=protoc-${PROTOBUF_VERSION}-${PROTOBUF_PLATFORM} + +RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOBUF_VERSION}/${PROTOBUF_BASE}.zip \ + && /bin/bash ./check_hash.sh ${PROTOBUF_BASE}.zip \ + && mkdir -p ${PROTOBUF_BASE} \ + && cd ${PROTOBUF_BASE} \ + && unzip -o ../${PROTOBUF_BASE}.zip \ + && cd .. \ + && mv ${PROTOBUF_BASE} /opt/protobuf + +ARG GOLANG_PLATFORM=linux-amd64 +ARG GOLANG_VERSION=1.20.2 +ARG GOLANG_TAR_GZ=go${GOLANG_VERSION}.${GOLANG_PLATFORM}.tar.gz + +RUN wget https://go.dev/dl/${GOLANG_TAR_GZ} \ + && /bin/bash ./check_hash.sh ${GOLANG_TAR_GZ} \ + && tar xzf ${GOLANG_TAR_GZ} \ + && mv go /opt/ + +ENV PATH="/opt/openenclave/bin:/opt/go/bin:/opt/protobuf/bin:${PATH}" +ENV GOROOT="/opt/go" +ENV GOBIN="/opt/go/bin" +ENV PKG_CONFIG_PATH="/opt/openenclave/share/pkgconfig" + +ARG PROTOC_GEN_GO_GITREV=6875c3d7242d1a3db910ce8a504f124cb840c23a +RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@${PROTOC_GEN_GO_GITREV} +RUN echo "export PS1='buildenv: \w$ '" >> /etc/bash.bashrc + +# Set this after `go install` so we don't use the same cache as root. +ENV GOPATH="/src/.gopath" +ENV GOCACHE="/src/.gocache" + +WORKDIR /src +COPY --from=nsmbuild /build/target/release/libnsm.a /opt/nsm/libnsm.a +COPY --from=nsmbuild /build/target/release/nsm.h /opt/nsm/nsm.h + +CMD ["/bin/bash"] + +FROM builder AS build + +COPY . /src +RUN cd /src && make clean && make -j16 all enclave_releaser + +FROM base AS runner + +RUN apt-get update && apt-get install -y \ + libsgx-dcap-default-qpl=1.16.100.2-focal1 \ + libsgx-dcap-default-qpl-dev=1.16.100.2-focal1 +COPY docker/sgx_default_qcnl_azure.conf /etc/sgx_default_qcnl.conf +COPY --from=build /src/host/main /bin/svr2 +COPY --from=build /src/enclave/releases /enclaves +COPY --from=build /src/host/cmd/control/control /bin/svr2control + +ENTRYPOINT ["/bin/svr2"] diff --git a/docker/apt.conf b/docker/apt.conf new file mode 100644 index 0000000..8dc2c18 --- /dev/null +++ b/docker/apt.conf @@ -0,0 +1,15 @@ +Apt { + Architecture "amd64"; + Architectures "amd64"; +}; + +Acquire::Check-Valid-Until "false"; +Acquire::Languages "none"; +Binary::apt-get::Acquire::AllowInsecureRepositories "false"; + +APT::Install-Recommends "false"; + +// go easy on snapshot.debian.org +Acquire::http::Dl-Limit "10000"; +Acquire::https::Dl-Limit "10000"; +Acquire::Retries "5"; diff --git a/docker/aws-nitro-enclaves-nsm-api b/docker/aws-nitro-enclaves-nsm-api new file mode 160000 index 0000000..944562d --- /dev/null +++ b/docker/aws-nitro-enclaves-nsm-api @@ -0,0 +1 @@ +Subproject commit 944562dacce23dc947bea1df60b5dd3a51fb8c4f diff --git a/docker/aws-nitro.Cargo.lock b/docker/aws-nitro.Cargo.lock new file mode 100644 index 0000000..183c524 --- /dev/null +++ b/docker/aws-nitro.Cargo.lock @@ -0,0 +1,561 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "aws-nitro-enclaves-nsm-api" +version = "0.2.1" +dependencies = [ + "libc", + "log", + "nix 0.20.2", + "serde", + "serde_bytes", + "serde_cbor", +] + +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" + +[[package]] +name = "cbindgen" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6358dedf60f4d9b8db43ad187391afe959746101346fe51bb978126bec61dfb" +dependencies = [ + "heck", + "indexmap", + "log", + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn 1.0.109", + "tempfile", + "toml", +] + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "errno" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.45.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +dependencies = [ + "hermit-abi 0.3.1", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "itoa" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" + +[[package]] +name = "libc" +version = "0.2.141" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" + +[[package]] +name = "linux-raw-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "nix" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e06129fb611568ef4e868c14b326274959aa70ff7776e9d55323531c374945" +dependencies = [ + "bitflags", + "cc", + "cfg-if", + "libc", + "memoffset", +] + +[[package]] +name = "nix" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +dependencies = [ + "bitflags", + "cfg-if", + "libc", + "memoffset", +] + +[[package]] +name = "nsm-lib" +version = "0.2.1" +dependencies = [ + "aws-nitro-enclaves-nsm-api", + "cbindgen", + "serde_bytes", +] + +[[package]] +name = "nsm-test" +version = "0.2.1" +dependencies = [ + "aws-nitro-enclaves-nsm-api", + "nix 0.20.2", + "nsm-lib", + "serde_bytes", + "serde_cbor", + "signal-hook", + "threadpool", + "vsock", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi 0.2.6", + "libc", +] + +[[package]] +name = "proc-macro2" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + +[[package]] +name = "rustix" +version = "0.37.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aef160324be24d31a62147fae491c14d2204a3865c7ca8c3b0d7f7bcb3ea635" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "ryu" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" + +[[package]] +name = "serde" +version = "1.0.159" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_bytes" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_cbor" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" +dependencies = [ + "half", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.159" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.13", +] + +[[package]] +name = "serde_json" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "signal-hook" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys 0.45.0", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "unicode-ident" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" + +[[package]] +name = "vsock" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8e1df0bf1e1b28095c24564d1b90acae64ca69b097ed73896e342fa6649c57" +dependencies = [ + "libc", + "nix 0.24.3", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" diff --git a/docker/check_hash.sh b/docker/check_hash.sh new file mode 100755 index 0000000..a971bdc --- /dev/null +++ b/docker/check_hash.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e +EXPECTED_HASH="$(cat sha256."$(basename "$1")")" +ACTUAL_HASH="$(sha256sum "$1")" +echo "Checking hash for '$1'" +echo "Expected: '$EXPECTED_HASH'" +echo "Actual: '$ACTUAL_HASH'" +exec [ "$EXPECTED_HASH" == "$ACTUAL_HASH" ] diff --git a/docker/ms.sources.list b/docker/ms.sources.list new file mode 100644 index 0000000..920de69 --- /dev/null +++ b/docker/ms.sources.list @@ -0,0 +1 @@ +deb [arch=amd64] https://packages.microsoft.com/ubuntu/20.04/prod focal main diff --git a/docker/sgx.sources.list b/docker/sgx.sources.list new file mode 100644 index 0000000..89649f4 --- /dev/null +++ b/docker/sgx.sources.list @@ -0,0 +1 @@ +deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main diff --git a/docker/sgx_default_qcnl_azure.conf b/docker/sgx_default_qcnl_azure.conf new file mode 100644 index 0000000..a91c6eb --- /dev/null +++ b/docker/sgx_default_qcnl_azure.conf @@ -0,0 +1,29 @@ +{ + "pccs_url": "https://global.acccache.azure.net/sgx/certification/v3/", + + "use_secure_cert": false, + + "collateral_service": "https://pccs/sgx/certification/v3/", + + "pccs_api_version": "3.1", + + "retry_times": 6, + + "retry_delay": 5, + + "local_pck_url": "http://169.254.169.254/metadata/THIM/sgx/certification/v3/", + + "pck_cache_expire_hours": 48, + + "custom_request_options" : { + "get_cert" : { + "headers": { + "metadata": "true" + }, + "params": { + "api-version": "2021-07-22-preview" + } + } + } +} + diff --git a/docker/sha256.go1.20.2.linux-amd64.tar.gz b/docker/sha256.go1.20.2.linux-amd64.tar.gz new file mode 100644 index 0000000..9693c1b --- /dev/null +++ b/docker/sha256.go1.20.2.linux-amd64.tar.gz @@ -0,0 +1 @@ +4eaea32f59cde4dc635fbc42161031d13e1c780b87097f4b4234cfce671f1768 go1.20.2.linux-amd64.tar.gz diff --git a/docker/sha256.libnsm.a b/docker/sha256.libnsm.a new file mode 100644 index 0000000..4f17459 --- /dev/null +++ b/docker/sha256.libnsm.a @@ -0,0 +1 @@ +350d5fde8e139301aaf39a47509aa0fa0c9ced472d4ae30c45c5504b1ef45490 target/release/libnsm.a diff --git a/docker/sha256.protoc-21.8-linux-x86_64.zip b/docker/sha256.protoc-21.8-linux-x86_64.zip new file mode 100644 index 0000000..22c3202 --- /dev/null +++ b/docker/sha256.protoc-21.8-linux-x86_64.zip @@ -0,0 +1 @@ +f90d0dd59065fef94374745627336d622702b67f0319f96cee894d41a974d47a protoc-21.8-linux-x86_64.zip diff --git a/docker/sources.list b/docker/sources.list new file mode 100644 index 0000000..337ccde --- /dev/null +++ b/docker/sources.list @@ -0,0 +1,5 @@ +deb http://snapshot.debian.org/archive/debian/20220912T000000Z/ bullseye main +deb http://snapshot.debian.org/archive/debian/20220912T000000Z/ bullseye-updates main + +deb http://snapshot.debian.org/archive/debian/20220912T000000Z/ buster main +deb http://snapshot.debian.org/archive/debian/20220912T000000Z/ buster-updates main diff --git a/docs/Healing.md b/docs/Healing.md new file mode 100644 index 0000000..73ffb7a --- /dev/null +++ b/docs/Healing.md @@ -0,0 +1,98 @@ +# Healing + +When we talk about "healing" in SVR2, we're currently talking about membership +change in the Raft replica group. In SVR2, we break healing down into +the following sub-problems: + +- Remove old nodes when they're unable to serve (rebooted, etc) +- Add new nodes to replace removed nodes + +Removing of nodes is currently unimplemented, more on that later. + +## Adding new nodes + +A new SVR2 node that wants to become a replica within the Raft cluster +currently goes through the following state transitions to get it to a +serving state. These are currently driven by host-side requests, but +in near-future we hope to make the decision to promote replicas to +voting status an in-enclave decision. + +In short, a node starts up without any Raft state. It then decides +to follow one of two paths: + +- Start a new Raft group as the sole replica/leader. +- Join an existing Raft group by talking to some replica in that group. + +Starting a new Raft group is out of scope of this doc: it just does :). +Joining an existing group, though, is the primary mechanism by which new +nodes are added. We assume that we're running in an environment where +broken nodes are replaced (by shutting down the old node and starting up +a new one) as K8S and most other cloud provider workflows allow. In this +case, "adding a new node" is actually "starting a new node, and having +it request to join the group". + +Breaking this down in more detail, a node that wants to join a group +goes through a set of state transitions by talking to other nodes: + +1. Host tells the enclave about a single peer ID +1. Get information about the Raft group (group ID, other replicas, etc) +1. Replicate existing state (logs/database) up to a recent commit +1. Send a `request_membership` request to the leader +1. Send a `request_vote` request to the leader + +These steps are accomplished by calling enclave-to-enclave (e2e) +transactions (protos in `enclave/proto/e2e.proto`). + +### Host join request + +The host starts the join by sending a `HostToEnclaveRuequst.join_raft` call +to the enclave, with a PeerID it knows about that's part of the existing group. + +### Get information about Raft group + +The enclave calls the `e2e::TransactionRequest.get_raft` transaction on the one +peer ID it knows about (the one passed in by `join_raft`). This gives it the +`RaftGroupConfig` (immutable Raft configuration) and `raft.ReplicaGroup` +(current membership in the group). It then transitions to the next state. + +### Replicate existing state + +The enclave picks a random peer from among those in the `ReplicaGroup` +(it will eventually make a more interesting decision about which peer to talk +to), then makes a series of `e2e::TransactionRequest.replicate_state` +requests against that peer. These requests first pull in all logs from +the remote peer until the new node reaches the responder's commit index. +At this point, the new node will start to request and receive a combination +of any new logs committed since that first commit point and database state. +When it's read in the full keyspace of the database (applying as it goes +any newly-committed logs it recieves), it will be at a point where it has +all logs and all database state up to the latest committed index of the +responder. It then transitions to the next state. + +### Request join + +The enclave then requests to join the group as a non-voting member. +It sends an `e2e::TransactionRequest.request_raft_membership` to the +leader of the group (it actually sends it to all members, but should be +changed in the near future to target just the suspected leader). +If this request succeeds, it is now in a ReplicaGroup config on a +non-committed leader log. The leader will begin to treat it as a normal +non-voting member initially, including replicating to it via AppendEntries +any uncommitted logs and telling it when those logs commits. The node +stays in this state, watching its raft log, until it sees that a +ReplicaGroup log containing its PeerID has been committed. At this point, +it knows that it is now a member, and transitions its local state to +act as such. + +### Request vote + +This is another mechanism that's currently driven by the host, but should +probably become an automatic enclave function. After an enclave becomes +a non-voting member of the Raft group, the host can send a +`HostToEnclaveRuequst.request_voting` request to the enclave. This +instructs the enclave to send an `e2e::TransactionRequest.request_raft_voting` +call to its current leader. On success, the leader switches the replica's +voting status from non-voting to voting by writing a new ReplicaGroup with +the associated changes to its log. The requesting node (and all other +nodes in the Raft group) hear about this change via normal mechanisms for +ReplicaGroup change. diff --git a/docs/Messages.md b/docs/Messages.md new file mode 100644 index 0000000..ade0e1d --- /dev/null +++ b/docs/Messages.md @@ -0,0 +1,176 @@ +# Enclave Messages: The Enclave's Logical Interface +The SVR2 enclave interface defined in [svr2.edl](../../shared/svr2.edl) is +generic. It provides initialization and message passing functions that are +independent of the application logic. The _logical_ interface of the enclave +is defined by these messages and how the enclave responds to them. In what +follows we will think of the different messages that can be sent to the enclave +as RPCs and refer to them as "calls" or "commands". + +## Three Interfaces: Host, Peer, and Client +SVR2 enclaves interact with three different types of entities: the _host_ that +makes ECALLs and receives OCALLs from the enclave, other _peer_ enclaves, and +_clients_ that are using the service to store and recover secure values. + +The host interface includes a number of administrative commands (create or join +a replica group, get enclave status, tick the Raft timer, etc.). It also has +commands to forward wrapped peer or client requests. + +The peer interface includes Raft protocol messages, attestation updates, and as +a number of other "Enclave to Enclave [E2E] transactions" used to get +information about a replica group, transfer database state, and join a replica +group. + +The client interface is the raison d'être for SVR2. It allows clients to backup, +restore, or delete a secure value. Everything else in this system is here to +ensure that this is done securely and reliably. + +We will use this abstraction to organize this document, but it does *not* align +perfectly with the organization of the code. The code organization reflects +important implementation details as follows: + +* All messages to the enclave are sent in an `UntrustedMessage` + ([shared/proto/msgs.proto](../../shared/proto/msgs.proto)). These + may be direct commands or forwarded messages from peers or clients. +* Host calls that will not trigger response messages are sent as a simple + `UntrustedMessage`. + We will call these _synchronous host calls_. +* Host calls that MAY trigger response messages are sent as a + `HostToEnclaveRequest` inside an `UntrustedMessage`. It is important to note + that *all* client requests are sent this way. +* `HostToEnclaveRequest`s are further subdivided into administrative requests + and requests on behalf of clients. Client requests may be Noise encrypted + (backup, restore, delete) or unencrypted (create new client, create backup). + Encrypted client messages are defined in + ([shared/proto/msgs.proto](../../shared/proto/msgs.proto)). Unencrypted ones + are defined as submessages of `HostToEnclaveRequest` in + ([shared/proto/msgs.proto](../../shared/proto/msgs.proto)). +* Peer calls are all sent as `PeerMessage` messages inside an + `UntrustedMessage`. These messages contain raw bytes that either hold handshake + information or a Noise encrypted `EnclaveToEnclaveMessage`. These messages + are defined in [enclave/proto/e2e.proto](../proto/e2e.proto) + +There is another important property that we will note on all of the calls we +describe: some calls require that a new Raft log entry be accepted and committed +by this node's replica group in order to complete, others do not. We will say that +the calls that succeed or fail based on whether a log entry was successfully +committed "require Raft consensus". + +## The Host Interface + +### Synchronous Calls +There are two messages the host can send to the enclave that act as +synchronous calls - once the ECALL returns the action is complete. No messages +will be sent from the enclave in response to these calls. None of these require Raft +consensus. They are: + +1. `TimerTick` passes a unix timestamp that causes the enclave's to update its + internal time (which is used to obtain a consensus `group_time` with its peers), + then perform a `RaftStep`. +1. `ResetPeer` lets this Raft instance know that the given peer ID + may have lost some of the messages we sent to it previously. + +### Asynchronous Calls +All other calls from the host may cause the enclave to send response messages +that must be handled asynchronously. These are all sent as a +`HostToEnclaveRequest` inside an `UntrustedMessage`. These calls include: + +1. **Reconfigure** (`enclaveconfig.EnclaveConfig`) Reconfigure the replica with + new host-supplied configuration. +1. **GetEnclaveStatus** (`bool`) Retrieves basic + information about the status of a replica. Has more detail if the + replica is a leader. +1. **DeleteBackup** (`DeleteBackupRequest` - _requires consensus_) Used by host + to delete a backup, e.g., when the account is deleted. +1. **CreateNewRaftGroup** (`RaftConfig`) Request that we create a new raft group + from scratch, setting ourselves as the sole member and leader. This should be + done to seed a new Raft, after which we should requst `JoinRaft` instead. +1. **JoinRaft** (`JoinRaftRequest` - _requires consensus_) This tells the + enclave to join a particular Replica group. This call requires that the + target raft group be up and running. Raft joining is a + multi-step process described in detail in [Healing.md](./Healing.md). In + this process there will be an enclave-to-enclave call that creates a new + Raft configuration. This change must requires consensus of the existing + voting members. If successful the enclave will be a non-voting, + up-to-date member of the specified Raft. +1. **PingPeer** (`EnclavePeer`) Tells an enclave to check connectivity with + another peer. +1. **RequestVoting** (`bool` - _requires consensus_) Tells an enclave that + is already a member of a replica group to request voting status. This + requires a new Raft configuration to be accepted by a majority of the + voting members of the *new* configuration. +1. **RequestMetrics** Get all metrics and gauges collected by the enclave. +1. **RefreshAttestation** Refresh attestations for peer and client connections. +1. **SetLogLevel** Sets the enclave's logging level with an `::svr2::EnclaveLogLevel` + enum. These enum values match Open Enclave's [oe_log_level_t](https://github.com/openenclave/openenclave/blob/master/include/openenclave/log.h). +1. **RelinquishLeadership** (`bool` - _requires consensus_) If we are the Raft + leader, give it up and attempt to pass leadership to an up-to-date peer without + waiting for the election timers. +1. **RequestRemoval** (`bool`- _requires consensus_) Request that this replica be removed from the Raft + group. +1. **Hashes** (`bool`)Compute and return to the host a hash of the current DB. + +## The Peer Interface +Peer to peer calls fall into three categories: +1. Raft messages +1. Connectivity messages +1. E2E Transactions + +### Raft Messages +The Raft protocol messages defined in [enclave/raft.proto](../proto/raft.proto) +closely follow the Raft protocol defined in +[Ongaro's thesis](https://web.stanford.edu/~ouster/cgi-bin/papers/OngaroPhD.pdf). + +### Connectivity Messages +These messages are defined in [enclave/proto/e2e.proto](../proto/e2e.proto). +1. **Connect** (`e2e.ConnectRequest`) Sends attestation and handshake + information to initiate a connection with a peer. The response to this + call contains attestation and handshake information for the called + enclave. +1. **AttestationUpdate** (`Attestation`) sends a new attestation to a peer so + that peers can ensure their long-term connection with another enclave is + still secure. + +### Enclave to Enclave (E2E) Transactions + +These messages are defined in [enclave/proto/e2e.proto](../proto/e2e.proto). + +1. **GetRaft** (`e2e.GetRaftRequest`) Gets Raft membership information so that + the enclave can initiate the joining process. +1. **ReplicateState** (`e2e.ReplicateStateRequest`) Requests a chunk of + database state from a peer. This can include log messages and database rows. +1. **ReplicateStatePush** (`e2e.ReplicateStatePush`) +1. **RaftMembershipRequest** (`bool` - _requires consensus_) Request + to become a non-voting member of a replica group by setting this `true`. + Assumes that the calling peer is loaded and up to date. +1. **RaftVotingRequest** (`bool` - _requires consensus_) Request + to become a voting member of a replica group by setting this `true`. + assumes that the calling peer is a non-voting member of the group. +1. **RaftWrite** (`bytes` - _requires consensus_) Forward a log entry to + Raft leader to be added to the log. +1. **Ping** (`bool`) Request from a peer for simple acknowledgement to confirm + the connection to the requesting peer's host. +1. **NewTimestampUnixSecs** (`uint64`) Contains the sending peers timestamp. + Recipient will update peer and group times. +1. **RaftRemovalRequest** (`bool`) Creates a new replica group configuration without + the requesting peer in it, and submits this change to the new voting peers + for committment. + + +## The Client Interface +The `client.*` messages are defined in +[client.proto](../../shared/proto/client.proto). These are sent over the Noise +encrypted channel between the client and the enclave, wrapped in an +`ExistingClientRequest` submessage of a `HostToEnclaveRequest`. + + +1. **NewClient** (`NewClientRequest`) +1. **CreateBackup** (`CreateBackupRequest` - _requires consensus_) Creates an + empty backup row in the database. +1. **Backup** (`client.BackupRequest` - _requires consensus_) Stores a new value + and resets the number of allowed tries for a given backup ID. +1. **RestoreBackup** (`client.RestoreRequest` - _requires consensus_) Presents an + authorization token/PIN for a backup ID. If the token is correct, the secure + value is retrieved from the database and sent to the client over the Noise + connection. If it is incorrect the number of allowed tries is decremented. + If no more tries remain, the database row is deleted. +1. **DeleteBackup - client request** (`client.DeleteRequest` - _requires consensus_) diff --git a/docs/svr3spec/.gitignore b/docs/svr3spec/.gitignore new file mode 100644 index 0000000..7537d53 --- /dev/null +++ b/docs/svr3spec/.gitignore @@ -0,0 +1,5 @@ +svr3.aux +svr3.bbl +svr3.blg +svr3.log +svr3.out \ No newline at end of file diff --git a/docs/svr3spec/README.md b/docs/svr3spec/README.md new file mode 100644 index 0000000..7a5303a --- /dev/null +++ b/docs/svr3spec/README.md @@ -0,0 +1,11 @@ +## Building the PDF + +To build the pdf from source, you will need to install pdflatex and bibtex - the [TeXLive](https://www.tug.org/texlive/) distribution is probably the simplest way to do this. Alternatively tou can use an online system like [OVerleaf](https://overleaf.com) that will take care of most of the LaTeX related headaches for you. + +With these installed, run the following commands: +``` +pdflatex svr3.tex # produces initial pdf and computes references needed in svr3.aux +bibtex svr3 # builds bibliography +pdflatex svr3.tex # incorporates bilbiography into the pdf +``` +If prompted for input during the last run of pdflatex, press "enter" to continue. diff --git a/docs/svr3spec/svr3.bib b/docs/svr3spec/svr3.bib new file mode 100644 index 0000000..38bf07f --- /dev/null +++ b/docs/svr3spec/svr3.bib @@ -0,0 +1,40 @@ + +@misc{jkkx, + author = {Stanislaw Jarecki and Aggelos Kiayias and Hugo Krawczyk and Jiayu Xu}, + title = {Highly-Efficient and Composable Password-Protected Secret Sharing (Or: How to Protect Your Bitcoin Wallet Online)}, + howpublished = {Cryptology ePrint Archive, Paper 2016/144}, + year = {2016}, + note = {\url{https://eprint.iacr.org/2016/144}}, + url = {https://eprint.iacr.org/2016/144} +} + +@misc{poprf, + author = {Nirvan Tyagi and Sofı́a Celi and Thomas Ristenpart and Nick Sullivan and Stefano Tessaro and Christopher A. Wood}, + title = {A Fast and Simple Partially Oblivious PRF, with Applications}, + howpublished = {Cryptology ePrint Archive, Paper 2021/864}, + year = {2021}, + note = {\url{https://eprint.iacr.org/2021/864}}, + url = {https://eprint.iacr.org/2021/864} +} + +@book{bonehshoup, + author = {Dan Boneh and Victor Shoup}, + title = {A Graduate Course in Applied Cryptography}, + note = {\url{https://toc.cryptobook.us/book.pdf}}, + url = {https://toc.cryptobook.us/book.pdf} +} +@misc{2hashdh, + author = {Stanislaw Jarecki and Aggelos Kiayias and Hugo Krawczyk}, + title = {Round-Optimal Password-Protected Secret Sharing and T-PAKE in the Password-Only Model}, + howpublished = {Cryptology ePrint Archive, Paper 2014/650}, + year = {2014}, + note = {\url{https://eprint.iacr.org/2014/650}}, + url = {https://eprint.iacr.org/2014/650} +} + +@misc {ietf-oprf, + author = {A. Davidson, A. Faz-Hernandez, N. Sullivan, C. A. Wood}, + title = {Oblivious Pseudorandom Functions (OPRFs) using Prime-Order Groups}, + url = {https://www.ietf.org/id/draft-irtf-cfrg-voprf-21.html#name-informative-references-7}, + note = {\url{https://www.ietf.org/id/draft-irtf-cfrg-voprf-21.html}} +} \ No newline at end of file diff --git a/docs/svr3spec/svr3.pdf b/docs/svr3spec/svr3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b8d92634ab9f5b25be277f7a9df9420a00c8cbe9 GIT binary patch literal 330906 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

@Y=gA6$^K&Y2HviTf}b< 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�dw*1gZ%1?4eE{EvUL2~$kY3Q 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

Pu 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∾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 m5{iRpNk%=je-~8 t \\ +pairs \leftarrow \{\} \\ +\pcfor \server \in \mathcal{R}: \\ +\t \oprfinput \leftarrow \context \concat \server.id \concat pwd \\ +\t x \leftarrow \HashToField(\server.id) \\ +\t (\blind, \blindedElement) \leftarrow \Blind(\oprfinput) \\ +\t (\evaluatedElement, \pk) \leftarrow +\server.\BlindEvaluateForClient(\clientstate.id, \blindedElement) \\ +\t r \leftarrow \Finalize(\oprfinput, \blind, \evaluatedElement,\blindedElement) \\ +\t y \leftarrow \clientstate.\mathbf{m}[x] - r \\ +\t \mathbf{s}[x] \leftarrow y \\ +\t pairs \leftarrow pairs \cup \{(x,y)\} \\ +(f_{t}, \ldots, f_0) \leftarrow \pcalgostyle{Interpolate}_{\FF}(pairs) \\ +s \leftarrow f_{t} \\ +r \concat K \leftarrow \hash(\context \concat ``keygen", s) \\ +C \leftarrow \hash(\context\concat ``commitment", pwd, \clientstate.\mathbf{e}, \mathbf{s}, r) \\ +\pcif C \neq \clientstate.C: \\ +\t \pcreturn \perp \\ +\pcelse \\ +\t \PPSSStore(\clientstate, servers,t,pwd, f_{t}) \pccomment{store the secret again +to reset keys, counters, and shares} \\ +\t \pcreturn K } + +\subsection{Usage Limits on the $\OPRF$ lead to Guess Limits on the PPSS} +Now we can see how the usage limit we enforce on the $\OPRF$ naturally creates a +guess limit on the PPSS that provides protection against online dictionary +attacks. Consider the scenario where a client has constructed a $(t,N)$-sharing +scheme to protect a secret $s$ with password $pwd$ using $\PPSSStore$. Now an +attacker trying to guess the password and recover the secret faces the following +fact: each password guess requires using $t+1$ $\OPRF$ calls, and only +$\maxuses$ are possible on each of the $N$ servers. Thus the attacker has no +more than $\lfloor\frac{N}{t+1}\maxuses\rfloor$ guesses before the secret +becomes unrecoverable. + +\subsection{Deleting Keys} +\label{sec:deleting} +A client can protect themselves from future server compromise by deleting keys +from the server. This can be done by simply calling $\ServerCreateOPRFVersion$ +with arbitrary $\oprfinput$ and discarding the result. For the user to have +confidence that the keys were in fact deleted - now and during each $\PPSSStore$ +call - server functions can be executed in an attested, confidential TEE. + +Additionally, in the case that a TEE based server is being retired it can +produce an attested certificate of secret deletion. If a client has confidence +that their secrets have, in fact, been deleted from a server then they know that +their $(t,N)$ threshold scheme has become a $(t,N-1)$ scheme and they can safely +add a new server. + +\section{Robustness} +\label{sec:robustness} +Unlike \cite{jkkx} we do not store the commitment, $C$, and the masked shares, +$\mathbf{e}$, on each server. Instead we will have clients store $\clientstate$, +which includes both both these values, in a reliable place as suggested in \cite{2hashdh}. +We then rely on subset testing or follow-up $\VOPRF$ calls to +detect incorrect servers. + +The sole reason the server $\pk$ values are stored by the client in the protocol +above is to allow follow-up $\nizk$ proof verification if the $\VOPRF$ mode +is used for robustness. If only subset testing will be used (e.g. for small +values of $N$) then these public keys do not need to be stored. + +\section{Acknowledgements} +We would like to thank Mark Johnson for helping to develop an earlier version of +this protocol and Trevor Perrin for important feedback and pointers to the +literature. We also thank Emma Dautermann, Vivian Fang, and Raluca Ada Popa for +discussion that led to significant design decisions and simplifications of this +protocol. + +\bibliographystyle{alpha} +\bibliography{svr3} + +\end{document} \ No newline at end of file diff --git a/enclave/.gitignore b/enclave/.gitignore new file mode 100644 index 0000000..bdd1406 --- /dev/null +++ b/enclave/.gitignore @@ -0,0 +1,4 @@ +build/ +.testdepends +*.pem +noise-c/ diff --git a/enclave/Makefile b/enclave/Makefile new file mode 100644 index 0000000..7f24f05 --- /dev/null +++ b/enclave/Makefile @@ -0,0 +1,232 @@ +all: test build sign + +MAKEFILTER=| (grep --line-buffered -v '^make\[' || true) + +include Makefile.base + +.PHONY: all build sign clean sign protos validate generatem + +build: build/enclave.bin build/enclave.nsm + +sign: build/enclave.signed build/enclave.test build/enclave.small + +PROTO_FILES= \ + $(patsubst ../shared/proto/%.proto,build/proto/%.pb.cc,$(wildcard ../shared/proto/*.proto)) \ + $(patsubst ../shared/proto/%.proto,build/proto/%.pb.h,$(wildcard ../shared/proto/*.proto)) \ + $(patsubst proto/%.proto,build/proto/%.pb.cc,$(wildcard proto/*.proto)) \ + $(patsubst proto/%.proto,build/proto/%.pb.h,$(wildcard proto/*.proto)) \ +## PROTO_FILES +protos: $(PROTO_FILES) + +build/proto: + $(QUIET) echo -e "MKDIR $@" + $(QUIET) mkdir -p $@ +build/proto/%.pb.h build/proto/%.pb.cc: proto/%.proto | build/proto + $(QUIET) echo -e "PROTO\t$^" + $(QUIET) protoc --proto_path=../shared/proto --proto_path=proto --cpp_out=build/proto $^ +build/proto/%.pb.h build/proto/%.pb.cc: ../shared/proto/%.proto | build/proto + $(QUIET) echo -e "PROTO\t$^" + $(QUIET) protoc --proto_path=../shared/proto --cpp_out=build/proto $^ + +build/gtest/TEST.a: + $(QUIET) $(MAKE) -f Makefile.subdir DIR=gtest ENV=TEST ADDITIONAL_CFLAGS="-I$(CURDIR)/googletest/googletest" $(MAKEFILTER) + +build/noise-c/TEST.a: build/libsodium/TEST.a + $(QUIET) echo -e "BUILD\t$@" + $(QUIET) mkdir -p $(@D) + $(QUIET) (cd noise-c && \ + ./autogen.sh && \ + libsodium_CFLAGS=-I$$PWD/../build/libsodium/TEST.a.dir/include/ libsodium_LIBS=$$PWD/../build/libsodium/TEST.a \ + CC=$(CC) CFLAGS="$(TEST_CFLAGS) -I$(shell ./find_header.sh $(CC) immintrin.h)" ./configure --with-libsodium && \ + $(MAKE) clean && \ + $(MAKE)) $(QUIET_OUT) + $(QUIET) cp noise-c/src/protocol/libnoiseprotocol.a $@ + $(QUIET) echo -e "BUILT\t$@" +build/noise-c/SGX.a: build/libsodium/SGX.a | build/noise-c/TEST.a + $(QUIET) echo -e "BUILD\t$@" + $(QUIET) mkdir -p $(@D) + $(QUIET) (cd noise-c && \ + ./autogen.sh && \ + libsodium_CFLAGS=-I$$PWD/../build/libsodium/SGX.a.dir/include/ libsodium_LIBS=$$PWD/../build/libsodium/SGX.a \ + CC=$(CC) CFLAGS="$(SGX_CFLAGS) -I$(shell ./find_header.sh $(CC) immintrin.h)" ./configure --with-libsodium && \ + $(MAKE) clean && \ + $(MAKE)) $(QUIET_OUT) + $(QUIET) cp noise-c/src/protocol/libnoiseprotocol.a $@ + $(QUIET) echo -e "BUILT\t$@" +build/noise-c/NSM.a: build/libsodium/NSM.a | build/noise-c/SGX.a + $(QUIET) echo -e "BUILD\t$@" + $(QUIET) mkdir -p $(@D) + $(QUIET) (cd noise-c && \ + ./autogen.sh && \ + libsodium_CFLAGS=-I$$PWD/../build/libsodium/NSM.a.dir/include/ libsodium_LIBS=$$PWD/../build/libsodium/NSM.a \ + CC=$(CC) CFLAGS="$(NSM_CFLAGS) -I$(shell ./find_header.sh $(CC) immintrin.h)" ./configure --with-libsodium && \ + $(MAKE) clean && \ + $(MAKE)) $(QUIET_OUT) + $(QUIET) cp noise-c/src/protocol/libnoiseprotocol.a $@ + $(QUIET) echo -e "BUILT\t$@" + +# libsodium's ./configure script incorrectly detects that mmap, mlock, madvise, mprotect, +# and raise are all available, when in fact they are not in the enclave. This set of flags +# allows us to undo that. +LIBSODIUM_UNDEFS=-UHAVE_MMAP -UHAVE_MLOCK -UHAVE_MADVISE -UHAVE_MPROTECT -UHAVE_RAISE +##LIBSODIUM_UNDEFS +build/libsodium/TEST.a: + $(QUIET) echo -e "BUILD\t$@" + $(QUIET) mkdir -p $@.dir $(@D) + $(QUIET) (cd libsodium && (git clean -fx || true) && ./configure \ + CFLAGS="$(TEST_CFLAGS)" \ + CXXFLAGS="$(TEST_CXXFLAGS)" \ + CC=$(CC) CXX=$(CXX) --prefix=$$PWD/../$@.dir && $(MAKE) clean && $(MAKE) install) $(QUIET_OUT) + $(QUIET) ln -s $$PWD/$@.dir/lib/libsodium.a $@ + $(QUIET) echo -e "BUILT\t$@" +build/libsodium/SGX.a: | build/libsodium/TEST.a + $(QUIET) echo -e "BUILD\t$@" + $(QUIET) mkdir -p $@.dir $(@D) + $(QUIET) (cd libsodium && (git clean -fx || true) && ./configure \ + CFLAGS="$(SGX_CFLAGS) $(LIBSODIUM_UNDEFS)" \ + CXXFLAGS="$(SGX_CXXFLAGS) $(LIBSODIUM_UNDEFS)" \ + CC=$(CC) CXX=$(CXX) --prefix=$$PWD/../$@.dir && $(MAKE) clean && $(MAKE) install) $(QUIET_OUT) + $(QUIET) ln -s $$PWD/$@.dir/lib/libsodium.a $@ + $(QUIET) echo -e "BUILT\t$@" +build/libsodium/NSM.a: | build/libsodium/SGX.a + $(QUIET) echo -e "BUILD\t$@" + $(QUIET) mkdir -p $@.dir $(@D) + $(QUIET) (cd libsodium && (git clean -fx || true) && ./configure \ + CFLAGS="$(NSM_CFLAGS) $(LIBSODIUM_UNDEFS)" \ + CXXFLAGS="$(NSM_CXXFLAGS) $(LIBSODIUM_UNDEFS)" \ + CC=$(CC) CXX=$(CXX) --prefix=$$PWD/../$@.dir && $(MAKE) clean && $(MAKE) install) $(QUIET_OUT) + $(QUIET) ln -s $$PWD/$@.dir/lib/libsodium.a $@ + $(QUIET) echo -e "BUILT\t$@" + +EDGER8R_FILES=build/svr2/svr2_t.h build/svr2/svr2_t.c build/svr2/svr2_args.h +# This $(firstword) trick allows for grouped targets. +$(filter-out $(firstword $(EDGER8R_FILES)),$(EDGER8R_FILES)): $(firstword $(EDGER8R_FILES)) +$(firstword $(EDGER8R_FILES)): ../shared/svr2.edl + $(QUIET) echo -e "EDGER8\t$(EDGER8R_FILES)" + $(QUIET) mkdir -p $(@D) + $(QUIET) $(OE_EDGER8R) $< --trusted \ + --trusted-dir build/svr2 \ + --search-path $(OE_INCDIR) \ + --search-path $(OE_INCDIR)/openenclave/edl/sgx $(QUIET_OUT) + +generated: $(EDGER8R_FILES) $(PROTO_FILES) +build/%/SGX.a: generated + $(QUIET) $(MAKE) -f Makefile.subdir DIR=$* ENV=SGX $(MAKEFILTER) +build/%/NSM.a: generated + $(QUIET) $(MAKE) -f Makefile.subdir DIR=$* ENV=NSM $(MAKEFILTER) +build/%/TEST.a: generated + $(QUIET) $(MAKE) -f Makefile.subdir DIR=$* ENV=TEST $(MAKEFILTER) +build/%/HOST.a: generated + $(QUIET) $(MAKE) -f Makefile.subdir DIR=$* ENV=HOST $(MAKEFILTER) +.PHONY: build/%/SGX.a build/%/TEST.a build/%/HOST.a build/%/NSM.a + +# All libraries which will become part of enclave.bin. If A depends on B, then A should be added before B. +SGX_LIBRARIES = \ + svr2 \ + ecalls \ + core \ + timeout \ + client \ + db \ + raft \ + groupclock \ + peers \ + peerid \ + sender \ + util \ + context \ + hmac \ + noise \ + noise-c \ + noisewrap \ + env \ + env/sgx \ + sip \ + attestation \ + metrics \ + proto \ + protobuf-lite \ + libsodium \ +## SGX_LIBRARIES + +build/enclave.bin: $(patsubst %,build/%/SGX.a,$(SGX_LIBRARIES)) + $(QUIET) echo -e "BUILD\t$@" + $(QUIET) $(CXX) -o $@ $(SGX_LDFLAGS) $^ $(SGX_LDFLAGS) + +build/enclave.signed: build/enclave.bin build/public.pem build/private.pem svr2.conf + $(QUIET) echo -e "SIGN\t$@" + $(QUIET) $(OE_DIR)/bin/oesign sign -e $< -c svr2.conf -k build/private.pem -o $@ $(QUIET_OUT) + +build/enclave.small: build/enclave.bin build/public.pem build/private.pem svr2_small.conf + $(QUIET) echo -e "SIGN\t$@" + $(QUIET) $(OE_DIR)/bin/oesign sign -e $< -c svr2_small.conf -k build/private.pem -o $@ $(QUIET_OUT) + +build/enclave.test: build/enclave.bin build/public.pem build/private.pem svr2_test.conf + $(QUIET) echo -e "SIGN\t$@" + $(QUIET) $(OE_DIR)/bin/oesign sign -e $< -c svr2_test.conf -k build/private.pem -o $@ $(QUIET_OUT) + +NSM_LIBRARIES = \ + nitromain \ + core \ + timeout \ + client \ + db \ + raft \ + groupclock \ + peers \ + peerid \ + sender \ + util \ + hmac \ + noise \ + noise-c \ + noisewrap \ + env \ + env/nsm \ + sip \ + socketwrap \ + context \ + metrics \ + proto \ + protobuf-lite \ + libsodium \ +## NSM_LIBRARIES + +build/enclave.nsm: $(patsubst %,build/%/NSM.a,$(NSM_LIBRARIES)) + $(QUIET) echo -e "BUILD\t$@" + $(QUIET) $(CXX) -o $@ $(NSM_LDFLAGS) $^ $(NSM_LDFLAGS) + +clean: + $(QUIET) (cd protobuf ; make clean ; git clean -fx ; true) $(QUIET_OUT) + $(QUIET) (cd noise-c ; make clean ; git clean -fx ; true) $(QUIET_OUT) + $(QUIET) (cd SipHash ; make clean ; git clean -fx ; true) $(QUIET_OUT) + $(QUIET) rm -vfr build $(QUIET_OUT) + $(QUIET) rm -vf .testdepends $(QUIET_OUT) + +build/private.pem: + $(QUIET) echo -e "KEY\t$@" + $(QUIET) mkdir -p $(@D) + $(QUIET) openssl genrsa -out $@ -3 3072 $(QUIET_OUT) +build/public.pem: build/private.pem + $(QUIET) echo -e "KEY\t$@" + $(QUIET) openssl rsa -in $< -pubout -out $@ $(QUIET_OUT) + +%.test.out: %.test + $(QUIET) echo -e "TEST\t$<" + $(QUIET) ./$^ --gtest_color=yes &>$@ || (cat $@; false) + $(QUIET) echo -e "TEST\xE2\x9c\x85\t$<" + +build/testhost/libsvr2.a: + $(QUIET) mkdir -p $(@D) + $(CC) -c -o build/testhost/svr2.o $(HOST_CFLAGS) ../host/enclave/c/svr2_u.c + ar rcs $@ build/testhost/svr2.o + +build/testhost.bin: testhost/testhost.cc build/testhost/libsvr2.a build/attestation/HOST.a build/metrics/HOST.a build/proto/HOST.a build/protobuf-lite/HOST.a + $(CXX) -o $@ $(HOST_CXXFLAGS) $(HOST_LDFLAGS) $^ $(HOST_LDFLAGS) + +.testdepends: $(shell find ./ -type f | grep /tests/ | grep cc$) + $(QUIET) ./test_deps.sh $(QUIET_OUT) +include .testdepends + +test: +validate: diff --git a/enclave/Makefile.HOST b/enclave/Makefile.HOST new file mode 100644 index 0000000..a7973f5 --- /dev/null +++ b/enclave/Makefile.HOST @@ -0,0 +1,4 @@ +include Makefile.base + +CFLAGS ?= $(HOST_CFLAGS) +CXXFLAGS ?= $(HOST_CXXFLAGS) diff --git a/enclave/Makefile.NSM b/enclave/Makefile.NSM new file mode 100644 index 0000000..33c2e3c --- /dev/null +++ b/enclave/Makefile.NSM @@ -0,0 +1,4 @@ +include Makefile.base + +CFLAGS ?= $(NSM_CFLAGS) +CXXFLAGS ?= $(NSM_CXXFLAGS) diff --git a/enclave/Makefile.SGX b/enclave/Makefile.SGX new file mode 100644 index 0000000..3ec361e --- /dev/null +++ b/enclave/Makefile.SGX @@ -0,0 +1,4 @@ +include Makefile.base + +CFLAGS ?= $(SGX_CFLAGS) +CXXFLAGS ?= $(SGX_CXXFLAGS) diff --git a/enclave/Makefile.TEST b/enclave/Makefile.TEST new file mode 100644 index 0000000..230f21e --- /dev/null +++ b/enclave/Makefile.TEST @@ -0,0 +1,4 @@ +include Makefile.base + +CFLAGS ?= $(TEST_CFLAGS) +CXXFLAGS ?= $(TEST_CXXFLAGS) diff --git a/enclave/Makefile.base b/enclave/Makefile.base new file mode 100644 index 0000000..3f05361 --- /dev/null +++ b/enclave/Makefile.base @@ -0,0 +1,164 @@ +SHELL=/bin/bash -o pipefail # needed for pipefail +CXX=clang++-11 +CC=clang-11 +OE_DIR ?= /opt/openenclave +OE_EDGER8R = $(OE_DIR)/bin/oeedger8r +ADDITIONAL_CFLAGS ?= +ifeq ($(V),) + QUIET=@ + QUIET_OUT=&>/dev/null +else + QUIET= + QUIET_OUT= +endif + +SECURITY_CFLAGS = \ + -fstack-protector-strong \ + -fstack-clash-protection \ + -mshstk \ + -D_FORTIFY_SOURCE=3 \ + -fsanitize=bounds \ + -fsanitize-undefined-trap-on-error \ +## SECURITY_CFLAGS +BASE_CFLAGS = \ + -fPIC \ + -iquote $(CURDIR) \ + -iquote $(CURDIR)/build \ + -g \ + -DOE_API_VERSION=2 \ + -Wthread-safety \ + -O2 \ + $(SECURITY_CFLAGS) \ + $(ADDITIONAL_CFLAGS) \ +## BASE_CFLAGS +BASE_CXXFLAGS = \ + $(BASE_CFLAGS) \ + -std=c++17 \ +## BASE_CXXFLAGS + +BASE_LDFLAGS = \ + -Wl,-wrap=noise_rand_bytes \ + -Wl,-z,relro \ + -Wl,-z,now \ + -Wl,-z,noexecstack \ + -Wl,-z,separate-code \ +## BASE_LDFLAGS + +LIBRARY_CFLAGS = \ + -I$(CURDIR)/protobuf/src \ + -I$(CURDIR)/noise-c/include \ + -I$(CURDIR)/googletest/googletest/include \ + -I$(CURDIR)/libsodium/src/libsodium/include \ +## LIBRARY_CFLAGS + +TEST_CFLAGS ?= \ + $(BASE_CFLAGS) \ + $(LIBRARY_CFLAGS) \ + -DIS_TEST \ +## TEST_CFLAGS +TEST_CXXFLAGS ?= \ + $(BASE_CXXFLAGS) \ + $(LIBRARY_CFLAGS) \ + -DIS_TEST \ +## TEST_CXXFLAGS +TEST_LDFLAGS ?= \ + $(BASE_LDFLAGS) \ + -lpthread \ +## TEST_LDFLAGS + +OE_CFLAGS ?= $(shell pkg-config oeenclave-clang --cflags) +SGX_CFLAGS ?= \ + $(BASE_CFLAGS) \ + $(OE_CFLAGS) \ + $(LIBRARY_CFLAGS) \ +## SGX_CFLAGS +OE_CXXFLAGS ?= $(shell pkg-config oeenclave-clang++ --cflags) +SGX_CXXFLAGS ?= \ + $(BASE_CXXFLAGS) \ + $(OE_CXXFLAGS) \ + $(LIBRARY_CFLAGS) \ +## SGX_CXXFLAGS +OE_LDFLAGS ?= $(shell pkg-config oeenclave-clang++ --libs) +OE_MBEDTLS_LDFLAGS ?= $(shell pkg-config oeenclave-clang++ --variable=mbedtlslibs) +SGX_LDFLAGS ?= \ + $(BASE_LDFLAGS) \ + $(OE_LDFLAGS) \ + $(OE_MBEDTLS_LDFLAGS) \ +## SGX_LDFLAGS + +NSM_CFLAGS ?= \ + $(BASE_CFLAGS) \ + $(LIBRARY_CFLAGS) \ + -I/opt/nsm \ + -mllvm -x86-speculative-load-hardening \ +## NSM_CFLAGS +NSM_CXXFLAGS ?= \ + $(BASE_CXXFLAGS) \ + $(LIBRARY_CFLAGS) \ + -I/opt/nsm \ +## NSM_CXXFLAGS +NSM_LDFLAGS ?= \ + $(BASE_LDFLAGS) \ + /opt/nsm/libnsm.a \ + -lpthread \ + -lrt \ + -ldl \ +## NSM_LDFLAGS + +OE_INCDIR = $(shell pkg-config oeenclave-clang++ --variable=includedir) + +OE_HOST_CFLAGS ?= $(shell pkg-config oehost-clang --cflags) +OE_HOST_CXXFLAGS ?= $(shell pkg-config oehost-clang++ --cflags) +OE_HOST_LDFLAGS ?= $(shell pkg-config oehost-clang++ --libs) +OE_HOST_MBEDTLS_LDFLAGS ?= $(shell pkg-config oehost-clang++ --variable=mbedtlslibs) +HOST_CFLAGS ?= \ + $(BASE_CFLAGS) \ + $(OE_HOST_CFLAGS) \ + $(LIBRARY_CFLAGS) \ +## HOST_CFLAGS +HOST_CXXFLAGS ?= \ + $(BASE_CXXFLAGS) \ + $(OE_HOST_CXXFLAGS) \ + $(LIBRARY_CFLAGS) \ +## HOST_CXXFLAGS +HOST_LDFLAGS ?= \ + $(BASE_LDFLAGS) \ + $(OE_HOST_LDFLAGS) \ + $(OE_HOST_MBEDTLS_LDFLAGS) \ +## HOST_LDFLAGS + +WARNING_CFLAGS ?= \ + -Werror \ + -Wall \ + -Wextra \ + -Wpedantic \ + -Walloca \ + -Wcast-qual \ + -Wformat=2 \ + -Wformat-security \ + -Wnull-dereference \ + -Wstack-protector \ + -Wvla \ + -Warray-bounds \ + -Warray-bounds-pointer-arithmetic \ + -Wassign-enum \ + -Wbad-function-cast \ + -Wfloat-equal \ + -Wformat-type-confusion \ + -Widiomatic-parentheses \ + -Wimplicit-fallthrough \ + -Wloop-analysis \ + -Wpointer-arith \ + -Wshift-sign-overflow \ + -Wtautological-constant-in-range-compare \ + -Wunreachable-code-aggressive \ + -Wthread-safety \ + -Wthread-safety-beta \ + -Wcomma \ + -Wno-unused-parameter \ + -Wno-bitwise-op-parentheses \ + -Wno-shift-op-parentheses \ + -Wno-c++20-designator \ + -Wno-zero-length-array \ + -Wno-c99-extensions \ +##WARNING_CFLAGS diff --git a/enclave/Makefile.subdir b/enclave/Makefile.subdir new file mode 100644 index 0000000..028a1d4 --- /dev/null +++ b/enclave/Makefile.subdir @@ -0,0 +1,41 @@ +include Makefile.$(ENV) + +all: +.PHONY: all + +BUILD = build/$(DIR) +$(BUILD): + $(QUIET) echo -e "MKDIR\t$@" + $(QUIET) mkdir -p $(BUILD) + +# We use WARNING_CFLAGS only when the file exists, is not a symlink, +# and isn't generated code (IE: it's not in build/...) +NO_WARNINGS=-w + +OBJECTS=$(patsubst %,build/%.$(ENV).o,$(wildcard $(DIR)/*.c) $(wildcard $(DIR)/*.cc)) $(patsubst %,%.$(ENV).o,$(wildcard $(BUILD)/*.c) $(wildcard $(BUILD)/*.cc)) + +$(BUILD)/%.cc.$(ENV).d $(BUILD)/%.cc.$(ENV).o: $(BUILD)/%.cc | $(BUILD) + $(QUIET) echo -e "CXX\t$<.$(ENV)" + $(QUIET) $(CXX) -c -o $(BUILD)/$*.cc.$(ENV).o $(CXXFLAGS) -MF $(BUILD)/$*.cc.$(ENV).d -MMD $< $(NO_WARNINGS) + +$(BUILD)/%.c.$(ENV).d $(BUILD)/%.c.$(ENV).o: $(BUILD)/%.c | $(BUILD) + $(QUIET) echo -e "CC\t$<.$(ENV)" + $(QUIET) $(CC) -c -o $(BUILD)/$*.c.$(ENV).o $(CFLAGS) -MF $(BUILD)/$*.c.$(ENV).d -MMD $< $(NO_WARNINGS) + +$(BUILD)/%.cc.$(ENV).d $(BUILD)/%.cc.$(ENV).o: $(DIR)/%.cc | $(BUILD) + $(QUIET) echo -e "CXX\t$<.$(ENV)" + $(QUIET) $(CXX) -c -o $(BUILD)/$*.cc.$(ENV).o $(CXXFLAGS) -MF $(BUILD)/$*.cc.$(ENV).d -MMD $< \ + $(shell if [ ! -L $(DIR)/$*.cc ]; then echo $(WARNING_CFLAGS); else echo $(NO_WARNINGS); fi) + +$(BUILD)/%.c.$(ENV).d $(BUILD)/%.c.$(ENV).o: $(DIR)/%.c | $(BUILD) + $(QUIET) echo -e "CC\t$<.$(ENV)" + $(QUIET) $(CC) -c -o $(BUILD)/$*.c.$(ENV).o $(CFLAGS) -MF $(BUILD)/$*.c.$(ENV).d -MMD $< \ + $(shell if [ ! -L $(DIR)/$*.c ]; then echo $(WARNING_CFLAGS); else echo $(NO_WARNINGS); fi) + +$(BUILD)/$(ENV).a: $(OBJECTS) | $(BUILD) + $(QUIET) echo -e "AR\t$@" + $(QUIET) ar rcs $@ $^ + +$(foreach f,$(patsubst %.o,%.d,$(OBJECTS)),$(eval include $f)) + +all: $(BUILD)/$(ENV).a diff --git a/enclave/README.md b/enclave/README.md new file mode 100644 index 0000000..b24ca86 --- /dev/null +++ b/enclave/README.md @@ -0,0 +1,159 @@ +# SVR2 Enclave Code + +SVR2 uses C++ as its language for building an in-enclave binary, with the +OpenEnclave (hereafter 'OE') SDK. The binary, `enclave.bin` is then signed via +OE's `oesign`, which doesn't matter to us because we don't trust the signature, +just the unique ID (SGX "mrenclave") of the resulting signed config. However, +the `oesign` process does one important thing: it binds a config (either +`svr2_test.conf` or `svr2.conf` to the resulting object. Once this process +is complete, the resulting `enclave.signed` file is ready to be loaded into a +DCAP-based SGX enclave. + +# Host/enclave communication + +Most (all?) host/enclave communication happens through a single ocall/ecall +combination, defined in `../shared/svr2.edl`: + +- `svr2_input_message`: Enclave receives a message (a serialized + `HostToEnclaveMessage` protobuf) from the host. +- `svr2_output_message`: Enclave sends a message (a serialized + `EnclaveToHostMessage` protobuf) to the host. + +The enclave expects (and enforces, via locking) that the `svr2_input_message` +function is called sequentially. It also guarantees that it will call the +`svr2_output_message` function only during such a call, and sequentially. + +Thus, you might get the following control flow: + +``` +svr2_input_message(HostToEnclaveMessage1) + svr2_output_message(EnclaveToHostMessage1.1) + svr2_output_message(EnclaveToHostMessage1.2) + svr2_output_message(EnclaveToHostMessage1.3) +svr2_input_message(HostToEnclaveMessage2) + svr2_output_message(EnclaveToHostMessage2.1) + svr2_output_message(EnclaveToHostMessage2.2) +svr2_input_message(HostToEnclaveMessage3) +svr2_input_message(HostToEnclaveMessage4) + svr2_output_message(HostToEnclaveMessage4.1) +``` + +In such a flow, we can reason that input message 1 has output messages +1.1, 1.2, and 1.3, etc. Note that each input can have an arbitrary number of +outputs, including zero (e.g. message 3). In other words, the enclave can +be treated as a function: + +``` +func CallEnclave(HostToEnclaveMessage) []EnclaveToHostMessage +``` + +taking in a single HostToEnclaveMessage and returning a list of zero or more +EnclaveToHostMessages. + +Certain messages are 'transactions', or messages with a `Request` that want +a specific `Reply`. It is important to note that if a request is +passed in via a message, the response associated with it may not be part of +the returned list. IE: the host may pass in a transaction request, above, +via `EnclaveToHostMessage1`, but may not get back the reply until +`HostToEnclaveMessage4.1`. Transactions have associated transaction IDs, +which allow for disambiguating requests and their associated responses. +Hosts may send transactions to enclaves and enclaves to hosts. Each direction +maintains a unique keyspace for transaction IDs (so HostToEnclave transaction 1 +and EnclaveToHost transaction 1 are distinct), and each is responsible for +making sure that transaction requests that they pass are uniquely identified. + +## Code Layout + +Code is broken into a set of modules, where each module is a one-level-deep +subdirectory within the top-level `enclave` directory. Each module is +independently compiled, then all modules are combined in a final linking step +to form the resulting binary. Modules are listed as `LIBRARIES` within +`Makefile`, and must form a DAG of dependencies. Within the `LIBRARIES` list, +higher libraries may depend on lower libraries, but not vice versa. + +Code roughly follows the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html). + +# Concurrency in SVR2 Enclave + +With SVR2, we're aiming to utilize a single replica group to serve all traffic. +This, of course, brings up issues around scalability. We can of course add +new replicas to the replica group, but with a strong consensus model relying +on agreement between a quorum (in our case, a simple majority) of voting +replicas, additional replicas have the potential to add load rather than shed +it. + +To handle this, SVR2 is built to, as much as possible, utilize the resources +of non-leader and non-voting replicas. While we're unable to shed or reduce +load on RAM with added members (each replica needs to store the entire +database), we can shed load in the form of CPU and network resources. + +## Utilizing multiple cores + +Even without considering excess replicas, we aim to utilize the resources +of each replica to the fullest extent. To do this, the SVR2 enclave binary +is built as a true multi-threaded process, with targetted locking of code +subsections allowing parallel processing as much as possible. + +One of the most CPU-intensive tasks that SVR2 partakes in is encryption +and decryption. This takes place when replicas communicate with each +other ("peer communication") and when they accept and service connections +from clients ("client communication"). When establishing these secure +connections, the initial handshake is more CPU-intensive, followed +by less intensive block cipher encryption/decryption. Peer communication +uses long-lived sessions that amortize handshake cost over a long period +of time, while client communication requires a new handshake, a small +amount of communication, and a subsequent closing of the connection. + +For both peer and client communication, we aim to be highly parallel on +a single machine: handshaking and block-cipher encryption/decryption +are done with client- and peer-level locks, rather than global ones. +This approach, though, lays some requirements on the host side, as +for both cases, reordering of messages breaks the block-cipher +assumptions of the clients/peers. Internally, SVR2 maintains correct +order of messages it outputs to peers and clients: if message A +to a peer or client happens before message B, then `svr2_output_message(A)` +will be called and allowed to complete before `svr2_output_message(B)`. +However, on the host side, care must be taken to respect this +ordering: when messages are forwarded externally or received from external +hosts, their calls to `svr2_input_message` should follow the same pattern: +if A is received before B in either a peer or client stream, then +`svr2_input_message(A)` should be called and allowed to complete before +`svr2_input_message(B)` is called. + +Some global locks are of course still required, in particular around Raft +and its associated logs/database. However, these locked sections are kept +at a minimimum, with as much work done as possible before/after the locks +are acquired. + +## Utilizing multiple machines + +The primary means to scale SVR2 is the addition of replicas. However, +as mentioned, this has the potential to hinder scaling, especially if +the leader alone is allowed to perform CPU-intensive tasks like servicing +client requests. For this reason, SVR2 is built to allow any replica to +service requests from any client. + +When a client connects to SVR2 in a non-leader replica, it will perform +the client handshake and receive/decrypt the client's request entirely +on its own. Once it has done so, it will forward the request to the current +leader as an enclave-to-enclave transaction, receiving in response either +a failure or a log location (an `(index, term)` pair) associated with the +write. Failures are immediately returned to the client. A success, though, +creates a watch-point in the non-leader replica's raft log at `index`. +The replica will wait until `index` is a committed part of its own log (via +normal Raft `AppendEntries` mechanisms), then will check the `term` of the +committed log. If that matches the `term` returned from its write request, +by definition the log at `index` contains the client's request, and when +applying that request to its local database, it can safely return the +response to that client over its still-open channel. + +By this mechanism, load (especially client handshake and communication +load) can be shared across all replicas. Crucially, this includes +non-voting replicas, which can be added with minimal increase to the +load on the voting replicas. As non-voting replicas still receive +Raft logs and their commitments, they can happily service client +requests. + +## More topics +- [Raft healing](../docs/Healing.md) +- [Enclave messages](../docs/Messages.md) diff --git a/enclave/SipHash b/enclave/SipHash new file mode 160000 index 0000000..eee7d0d --- /dev/null +++ b/enclave/SipHash @@ -0,0 +1 @@ +Subproject commit eee7d0d84dc7731df2359b243aa5e75d85f6eaef diff --git a/enclave/attestation/attestation.cc b/enclave/attestation/attestation.cc new file mode 100644 index 0000000..2f6a683 --- /dev/null +++ b/enclave/attestation/attestation.cc @@ -0,0 +1,90 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "attestation/attestation.h" + +#include +#include +#include + + +#include + +#include "noise/noise.h" +#include "metrics/metrics.h" +#include "proto/error.pb.h" +#include "util/macros.h" + +namespace svr2::attestation { +const oe_uuid_t sgx_remote_uuid = {OE_FORMAT_UUID_SGX_ECDSA}; + +/** + * Helper function used to make the claim-finding process more convenient. Given + * the claim name, claim list, and its size, returns the claim with that claim + * name in the list. + */ +const oe_claim_t* FindClaim(const oe_claim_t* claims, size_t claims_size, + const char* name) { + for (size_t i = 0; i < claims_size; i++) { + if (strcmp(claims[i].name, name) == 0) return &(claims[i]); + } + return nullptr; +} + +error::Error ReadKeyFromVerifiedClaims(oe_claim_t* claims, size_t claims_length, + std::array& out) { + const oe_claim_t* claim; + oe_claim_t* custom_claims = nullptr; + size_t custom_claims_length = 0; + + // read the custom claims + if ((claim = FindClaim(claims, claims_length, + OE_CLAIM_CUSTOM_CLAIMS_BUFFER)) == nullptr) { + return COUNTED_ERROR(Env_CustomClaimsMissing); + } + + // deserialize custom claims + if (oe_deserialize_custom_claims(claim->value, claim->value_size, + &custom_claims, + &custom_claims_length) != OE_OK) { + return COUNTED_ERROR(Env_CustomClaimsDeserialize); + } + + auto free_custom_claims_known_size = [custom_claims_length](oe_claim_t* ptr) { + return oe_free_custom_claims(ptr, custom_claims_length); + }; + std::unique_ptr + free_custom_claims(custom_claims, free_custom_claims_known_size); + + // There is one custom claim with name "pk". The value is the key we will + // return. + if (strcmp(custom_claims[0].name, "pk") != 0) { + return COUNTED_ERROR(Env_AttestationPubkeyMissing); + } + + if (custom_claims[0].value_size != out.size()) { + return COUNTED_ERROR(Env_AttestationPubkeyInvalidSize); + } + + std::copy(custom_claims[0].value, + custom_claims[0].value + custom_claims[0].value_size, out.begin()); + return error::OK; +} + +std::pair VerifyAndReadClaims( + const std::string& evidence, const std::string& endorsements) { + const uint8_t* evidence_data = + reinterpret_cast(evidence.data()); + const uint8_t* endorsements_data = + reinterpret_cast(endorsements.data()); + oe_claim_t* claims = nullptr; + size_t claims_length = 0; + CHECK(OE_OK == oe_verify_evidence(&sgx_remote_uuid, evidence_data, + evidence.size(), endorsements_data, + endorsements.size(), nullptr, 0, &claims, + &claims_length)); + + return std::make_pair(claims, claims_length); +} + +}; // namespace svr2::attestation diff --git a/enclave/attestation/attestation.h b/enclave/attestation/attestation.h new file mode 100644 index 0000000..9348475 --- /dev/null +++ b/enclave/attestation/attestation.h @@ -0,0 +1,51 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_ATTESTATION_ATTESTATION_H__ +#define __SVR2_ATTESTATION_ATTESTATION_H__ + +#include + +#include +#include + +#include "proto/error.pb.h" + + +namespace svr2::attestation { + +extern const oe_uuid_t sgx_remote_uuid; + +/** + * Helper function used to make the claim-finding process more convenient. Given + * the claim name, claim list, and its size, returns the claim with that claim + * name in the list. + */ +const oe_claim_t* FindClaim(const oe_claim_t* claims, size_t claims_size, + const char* name); +/** + * Deserializes Open Enclave format custom claims then finds, validates, + * and returns the public key claim. + * + * claims serialized OpenEnclave claims + * claims_length number of claims + * out: array where public key will be written + * returns Env_CustomClaimsMissing, Env_CustomClaimsDeserialize, + * Env_AttestationPubkeyMissing, Env_AttestationPubkeyInvalidSize + */ +error::Error ReadKeyFromVerifiedClaims(oe_claim_t* claims, size_t claims_length, + std::array& out); + +/** + * Verifies evidence and endorsements and returns the parsed array + * of claims in Open Enclave format. + * + * The returned pointer most be freed with `oe_free_claims` + */ +std::pair VerifyAndReadClaims( + const std::string& evidence, const std::string& endorsements); + +}; // namespace svr2::attestation + + +#endif // __SVR2_ATTESTATION_ATTESTATION_H__ diff --git a/enclave/client/client.cc b/enclave/client/client.cc new file mode 100644 index 0000000..dc45a96 --- /dev/null +++ b/enclave/client/client.cc @@ -0,0 +1,225 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "client/client.h" + +#include + +#include "env/env.h" +#include "util/log.h" +#include "metrics/metrics.h" + +namespace svr2::client { + +static std::atomic id_gen{1}; + +const NoiseProtocolId client_protocol = { + .prefix_id = NOISE_PREFIX_STANDARD, + .pattern_id = NOISE_PATTERN_NK, + .dh_id = NOISE_DH_CURVE25519, + .cipher_id = NOISE_CIPHER_CHACHAPOLY, + .hash_id = NOISE_HASH_SHA256, + .hybrid_id = 0, +}; + +Client::Client(const std::string& authenticated_id) + : hs_(noise::WrapHandshakeState(nullptr)), + tx_(noise::WrapCipherState(nullptr)), + rx_(noise::WrapCipherState(nullptr)), + id_(id_gen.fetch_add(1)), + authenticated_id_(authenticated_id) { +} + +Client::~Client() { +} + +error::Error Client::Init(const noise::DHState& dhstate, const e2e::Attestation& attestation) { + util::unique_lock lock(mu_); + NoiseHandshakeState* hs; + if (NOISE_ERROR_NONE != noise_handshakestate_new_by_id(&hs, &client_protocol, NOISE_ROLE_RESPONDER)) { + return COUNTED_ERROR(Client_HandshakeState); + } + auto hs_wrap = noise::WrapHandshakeState(hs); + if (NOISE_ERROR_NONE != noise_dhstate_copy( + noise_handshakestate_get_local_keypair_dh(hs), + dhstate.get())) { + return COUNTED_ERROR(Client_CopyDHState); + } + if (NOISE_ERROR_NONE != noise_handshakestate_start(hs)) { + return COUNTED_ERROR(Client_HandshakeStart); + } + hs_start_.mutable_test_only_pubkey()->resize(32, '\0'); + if (NOISE_ERROR_NONE != noise_dhstate_get_public_key( + dhstate.get(), + noise::StrU8Ptr(hs_start_.mutable_test_only_pubkey()), + hs_start_.mutable_test_only_pubkey()->size())) { + return COUNTED_ERROR(Client_ExtractPublicKey); + } + *hs_start_.mutable_evidence() = attestation.evidence(); + *hs_start_.mutable_endorsement() = attestation.endorsements(); + hs_.swap(hs_wrap); + return error::OK; +} + +std::pair Client::FinishHandshake(context::Context* ctx, const std::string& data) { + ACQUIRE_LOCK(mu_, ctx, lock_client); + MEASURE_CPU(ctx, cpu_client_hs_finish); + if (!hs_.get() || tx_.get() || rx_.get() + || noise_handshakestate_get_action(hs_.get()) != NOISE_ACTION_READ_MESSAGE) { + return std::make_pair("", COUNTED_ERROR(Client_HandshakeState)); + } + std::string buffer = data; + NoiseBuffer read_buf = noise::BufferInputFromString(&buffer); + if (NOISE_ERROR_NONE != noise_handshakestate_read_message(hs_.get(), &read_buf, nullptr)) { + return std::make_pair("", COUNTED_ERROR(Client_FinishReadHandshake)); + } + if (NOISE_ACTION_WRITE_MESSAGE != noise_handshakestate_get_action(hs_.get())) { + return std::make_pair("", COUNTED_ERROR(Client_HandshakeState)); + } + buffer.resize(noise::HANDSHAKE_INIT_SIZE, '\0'); + NoiseBuffer write_buf = noise::BufferOutputFromString(&buffer); + if (NOISE_ERROR_NONE != noise_handshakestate_write_message(hs_.get(), &write_buf, nullptr)) { + return std::make_pair("", COUNTED_ERROR(Client_FinishWriteHandshake)); + } + buffer.resize(write_buf.size); + if (NOISE_ACTION_SPLIT != noise_handshakestate_get_action(hs_.get())) { + return std::make_pair("", COUNTED_ERROR(Client_HandshakeState)); + } + NoiseCipherState* tx; + NoiseCipherState* rx; + if (NOISE_ERROR_NONE != noise_handshakestate_split(hs_.get(), &tx, &rx)) { + return std::make_pair("", COUNTED_ERROR(Client_FinishSplit)); + } + tx_.reset(tx); + rx_.reset(rx); + hs_.reset(nullptr); + return std::make_pair(buffer, error::OK); +} + +error::Error Client::DecryptRequest(context::Context* ctx, const std::string& data, google::protobuf::MessageLite* request) { + ACQUIRE_LOCK(mu_, ctx, lock_client); + MEASURE_CPU(ctx, cpu_client_decrypt); + if (hs_.get() || !tx_.get() || !rx_.get()) { + return COUNTED_ERROR(Client_DecryptState); + } + auto [plaintext, err] = noise::Decrypt(rx_.get(), data); + if (err != error::OK) { + return err; + } + if (!request->ParseFromString(plaintext)) { + return COUNTED_ERROR(Client_DecryptParse); + } + return error::OK; +} + +std::pair Client::EncryptResponse(context::Context* ctx, const google::protobuf::MessageLite& response) { + ACQUIRE_LOCK(mu_, ctx, lock_client); + MEASURE_CPU(ctx, cpu_client_encrypt); + if (hs_.get() || !tx_.get() || !rx_.get()) { + return std::make_pair("", COUNTED_ERROR(Client_EncryptState)); + } + std::string plaintext; + if (!response.SerializeToString(&plaintext)) { + return std::make_pair("", COUNTED_ERROR(Client_EncryptSerialize)); + } + return noise::Encrypt(tx_.get(), plaintext); +} + +std::pair ClientManager::NewClient(context::Context* ctx, const std::string& authenticated_id) { + ACQUIRE_LOCK(mu_, ctx, lock_clientmanager); + MEASURE_CPU(ctx, cpu_client_hs_start); + std::unique_ptr c(new Client(authenticated_id)); + error::Error err = c->Init(dhstate_, attestation_); + if (err != error::OK) { + return std::make_pair(nullptr, err); + } + Client* ptr = c.get(); + clients_[ptr->ID()] = std::move(c); + GAUGE(client, clients)->Set(clients_.size()); + COUNTER(client, created)->Increment(); + return std::make_pair(ptr, error::OK); +} + +Client* ClientManager::GetClient(context::Context* ctx, ClientID id) const { + ACQUIRE_LOCK(mu_, ctx, lock_clientmanager); + auto find = clients_.find(id); + if (find == clients_.end()) { return nullptr; } + return find->second.get(); +} + +bool ClientManager::RemoveClient(context::Context* ctx, ClientID id) { + ACQUIRE_LOCK(mu_, ctx, lock_clientmanager); + auto find = clients_.find(id); + if (find == clients_.end()) { return false; } + clients_.erase(find); + GAUGE(client, clients)->Set(clients_.size()); + COUNTER(client, closed)->Increment(); + return true; +} + +noise::DHState ClientManager::NewDHState() { + COUNTER(client, new_dh_state)->Increment(); + noise::DHState out = noise::WrapDHState(nullptr); + NoiseDHState* dhstate; + if (NOISE_ERROR_NONE != noise_dhstate_new_by_id(&dhstate, client::client_protocol.dh_id)) { + return out; + } + noise::DHState client_dh = noise::WrapDHState(dhstate); + if (NOISE_ERROR_NONE != noise_dhstate_generate_keypair(dhstate)) { + return out; + } + client_dh.swap(out); + return out; +} + +error::Error ClientManager::RotateKeyAndRefreshAttestation(context::Context* ctx, const enclaveconfig::RaftGroupConfig& config) { + auto dhstate = NewDHState(); + auto [attestation, err] = GetAttestation(dhstate, config); + if (err != error::OK) { + COUNTER(client, key_rotate_failure)->Increment(); + return err; + } + ACQUIRE_LOCK(mu_, ctx, lock_clientmanager); + dhstate_.swap(dhstate); + attestation_.CopyFrom(attestation); + COUNTER(client, key_rotate_success)->Increment(); + return error::OK; +} + +error::Error ClientManager::RefreshAttestation(context::Context* ctx, const enclaveconfig::RaftGroupConfig& config) { + auto dhstate = DHState(ctx); + auto [attestation, err] = GetAttestation(DHState(ctx), config); + if (err != error::OK) { + COUNTER(client, attestation_refresh_failure)->Increment(); + return err; + } + ACQUIRE_LOCK(mu_, ctx, lock_clientmanager); + attestation_.CopyFrom(attestation); + // There's a chance that a RotateKeyAndRefreshAttestation call + // could have happened between when we got dhstate and when we're + // setting attestation here... reset to the one we received just + // in case. + dhstate_.swap(dhstate); + COUNTER(client, attestation_refresh_success)->Increment(); + return error::OK; +} + +std::pair ClientManager::GetAttestation(const noise::DHState& dhstate, const enclaveconfig::RaftGroupConfig& config) { + e2e::Attestation attestation; + // get attestation for its public key + uint8_t public_key[32]; + if (NOISE_ERROR_NONE != noise_dhstate_get_public_key(dhstate.get(), public_key, sizeof(public_key))) { + return std::make_pair(attestation, error::Peers_NewKeyPublic); + } + + env::PublicKey public_key_array {}; + std::copy(std::begin(public_key), std::end(public_key), std::begin(public_key_array)); + return env::environment->Evidence(public_key_array, config); +} + +noise::DHState ClientManager::DHState(context::Context* ctx) const { + ACQUIRE_LOCK(mu_, ctx, lock_clientmanager); + return noise::CloneDHState(dhstate_); +} + +} // namespace svr2::client diff --git a/enclave/client/client.h b/enclave/client/client.h new file mode 100644 index 0000000..7762cc5 --- /dev/null +++ b/enclave/client/client.h @@ -0,0 +1,86 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_CLIENT_CLIENT_H__ +#define __SVR2_CLIENT_CLIENT_H__ + +#include +#include "proto/error.pb.h" +#include "proto/e2e.pb.h" +#include "noise/noise.h" +#include "sip/hasher.h" +#include "util/endian.h" +#include "util/mutex.h" +#include "context/context.h" + +namespace svr2::client { + +class ClientManager; +typedef uint64_t ClientID; +extern const NoiseProtocolId client_protocol; + +class Client { + public: + ClientID ID() const { return id_; } + // Returns ClientHandshakeStart, with std::move semantics, so this + // function should be used only once. + ClientHandshakeStart MovedHandshakeStart() EXCLUDES(mu_) { + util::unique_lock lock(mu_); + return std::move(hs_start_); + } + + bool Handshaking() const { + util::unique_lock lock(mu_); + return hs_.get() != nullptr; + } + std::pair FinishHandshake(context::Context* ctx, const std::string& data) EXCLUDES(mu_); + + error::Error DecryptRequest(context::Context* ctx, const std::string& data, google::protobuf::MessageLite* request) EXCLUDES(mu_); + std::pair EncryptResponse(context::Context* ctx, const google::protobuf::MessageLite& response) EXCLUDES(mu_); + + const std::string& authenticated_id() const { return authenticated_id_; } + + private: + ~Client(); + explicit Client(const std::string& authenticated_id); + error::Error Init(const noise::DHState& dhstate, const e2e::Attestation& attestation) EXCLUDES(mu_); + friend class ClientManager; + friend std::unique_ptr::deleter_type; + + mutable util::mutex mu_; + ClientHandshakeStart hs_start_ GUARDED_BY(mu_); + noise::HandshakeState hs_ GUARDED_BY(mu_); + noise::CipherState tx_ GUARDED_BY(mu_); + noise::CipherState rx_ GUARDED_BY(mu_); + const size_t id_; + const std::string authenticated_id_; +}; + +class ClientManager { + public: + ClientManager(noise::DHState dhstate) : dhstate_(std::move(dhstate)) {} + error::Error RefreshAttestation(context::Context* ctx, const enclaveconfig::RaftGroupConfig& config) EXCLUDES(mu_); + error::Error RotateKeyAndRefreshAttestation(context::Context* ctx, const enclaveconfig::RaftGroupConfig& config) EXCLUDES(mu_); + static noise::DHState NewDHState(); + + std::pair NewClient(context::Context* ctx, const std::string& authenticated_id) EXCLUDES(mu_); + Client* GetClient(context::Context* ctx, ClientID id) const EXCLUDES(mu_); + // Deallocate and remove a client by its ID. + // Client pointers are owned by the ClientManager and can only be deallocated + // via a call to RemoveClient. + bool RemoveClient(context::Context* ctx, ClientID id) EXCLUDES(mu_); + + private: + noise::DHState DHState(context::Context* ctx) const EXCLUDES(mu_); + static std::pair GetAttestation(const noise::DHState& dhstate, const enclaveconfig::RaftGroupConfig& config); + + mutable util::mutex mu_; + noise::DHState dhstate_ GUARDED_BY(mu_); + e2e::Attestation attestation_ GUARDED_BY(mu_); + std::unordered_map> clients_ GUARDED_BY(mu_); + +}; + +} // namespace svr2::client + +#endif // __SVR2_CLIENT_CLIENT_H__ diff --git a/enclave/context/context.cc b/enclave/context/context.cc new file mode 100644 index 0000000..087a460 --- /dev/null +++ b/enclave/context/context.cc @@ -0,0 +1,47 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "context/context.h" +#include "metrics/metrics.h" +#include "util/cpu.h" + +namespace svr2::context { + +Context::Context() : cpu_current_(nullptr), cpu_top_(nullptr, COUNTER(context, cpu_uncategorized)) { + cpu_top_.SetContext(this); +} + +CPUMeasurement::CPUMeasurement(Context* ctx, metrics::Counter* counter) + : ctx_(nullptr), counter_(counter), ticks_(util::asm_rdtsc()) { + if (ctx != nullptr) { + SetContext(ctx); + } +} + +CPUMeasurement::~CPUMeasurement() { + uint64_t ticks = util::asm_rdtsc(); + counter_->IncrementBy(ticks - ticks_); + if (parent_ != nullptr) { + parent_->ticks_ = ticks; + } + ctx_->cpu_current_ = parent_; +} + +void CPUMeasurement::SetContext(Context* ctx) { + CHECK(ctx_ == nullptr); + ctx_ = ctx; + parent_ = ctx_->cpu_current_; + ctx_->cpu_current_ = this; + if (parent_ != nullptr) { + // If there's a parent CPUMeasurement, increment its ticks-so-far. + // When we're destroyed, we'll push parent_->ticks_ forward so ticks + // during our lifetime are not double-counted. + parent_->counter_->IncrementBy(ticks_ - parent_->ticks_); + } +} + +CPUMeasurement Context::MeasureCPU(metrics::Counter* counter) { + return CPUMeasurement(this, counter); +} + +} // namespace svr2::context diff --git a/enclave/context/context.h b/enclave/context/context.h new file mode 100644 index 0000000..3ab7b59 --- /dev/null +++ b/enclave/context/context.h @@ -0,0 +1,101 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_CONTEXT_CONTEXT_H__ +#define __SVR2_CONTEXT_CONTEXT_H__ + +#include +#include + +#include "util/macros.h" +#include "metrics/metrics.h" +#include "util/mutex.h" + +namespace svr2::context { + +class Context; + +// Class CPUMeasurement allows for counting of CPU ticks used in parts of code. +// On creation, it records the number of CPU ticks, and on destruction it adds +// those ticks to a counter. It's not stand-alone - use Context.MeasureCPU or +// better-yet use the MEASURE_CPU macro. +// +// Usage: +// +// void Foo(ctx) { +// MEASURE_CPU(ctx, cpu_foo); +// ... stuff #1 ... +// Bar(ctx) +// ... stuff #2 ... +// } +// void Bar(ctx) { +// MEASURE_CPU(ctx, cpu_bar); // turns off cpu_foo ticking, then back on when destroyed +// ... stuff #3 ... +// } +// +// This will count CPU ticks of stuff#1 and stuff#2 (but NOT stuff#3) in +// COUNTER(context, cpu_foo), and measure stuff#3 in COUNTER(context, cpu_bar). +class CPUMeasurement { + public: + ~CPUMeasurement(); + private: + friend class Context; + CPUMeasurement(Context* ctx, metrics::Counter* counter); + void SetContext(Context* ctx); + + Context* ctx_; + metrics::Counter* counter_; + CPUMeasurement* parent_; // Provides a singly-linked list back to parent CPUMeasurements. + uint64_t ticks_; +}; + +class Context { + public: + DELETE_COPY_AND_ASSIGN(Context); + Context(); + + // Protobuf creates a protobuf of type that has a lifetime tied + // to the lifetime of this Context (IE: when this context falls out of scope, + // it will be cleaned up) using a protobuf Arena. This optimization allows + // for much faster creation and deletion of intermediate protobufs. However, + // care should be taken to not store the output of this function long-term + // in a class that will live beyond the scope of this Context, as the pointer + // will be invalidated at that time. + template + T* Protobuf() { + return google::protobuf::Arena::CreateMessage(&arena_); + } + + CPUMeasurement MeasureCPU(metrics::Counter* counter); + + // All protobufs returned by Protobuf() are no longer valid after this call. + void GarbageCollectProtobufs() { arena_.Reset(); } + + private: + friend class CPUMeasurement; + google::protobuf::Arena arena_; + CPUMeasurement* cpu_current_; + CPUMeasurement cpu_top_; +}; + +} // namespace svr2::context + +#define MEASURE_CPU(ctx, name) \ + ::svr2::context::CPUMeasurement __cpumeasure_ ## __COUNTER__ = (ctx)->MeasureCPU(COUNTER(context, name)) + +// Creates an RAII util::unique_lock named `lockname`. Use this +// if you need to do things with the lock after you create it (e.g., explicitly +// calling `unlock()`). +#define ACQUIRE_NAMED_LOCK(lockname, mu, ctx, name) \ + util::unique_lock lockname(mu, std::defer_lock); \ + { \ + MEASURE_CPU(ctx, name); \ + lockname.lock(); \ + } +// Creates an RAII util::unique_lock on the given mu with an arbitrary +// name, for when you need `mu` locked but you're not doing anything +// tricky with it like manually unlocking it after. This is more like +// std::lock_guard. +#define ACQUIRE_LOCK(mu, ctx, name) ACQUIRE_NAMED_LOCK(__lock_ ## __COUNTER__, mu, ctx, name) + +#endif // __SVR2_CONTEXT_CONTEXT_H__ diff --git a/enclave/context/tests/acquire_lock.cc b/enclave/context/tests/acquire_lock.cc new file mode 100644 index 0000000..526378f --- /dev/null +++ b/enclave/context/tests/acquire_lock.cc @@ -0,0 +1,69 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP context +//TESTDEP metrics +//TESTDEP proto +//TESTDEP protobuf-lite +#include +#include "context/context.h" +#include "util/macros.h" +#include "util/mutex.h" +#include +#include +#include + +namespace svr2::util { + +class AcquireLockTest : public ::testing::Test { + public: + util::mutex mu; + int in_use GUARDED_BY(mu) = 0; + + static void* AcquireAndSleep(void* in) { + auto t = (AcquireLockTest*) in; + context::Context ctx; + ACQUIRE_LOCK(t->mu, &ctx, lock_test); + t->in_use++; + for (int i = 0; i < 10; i++) { + usleep(100000); + CHECK(t->in_use == 1); + } + t->in_use--; + CHECK(t->in_use == 0); + return NULL; + } + + static void* AcquireNamedAndSleep(void* in) { + auto t = (AcquireLockTest*) in; + context::Context ctx; + ACQUIRE_NAMED_LOCK(lock, t->mu, &ctx, lock_test); + t->in_use++; + for (int i = 0; i < 10; i++) { + usleep(100000); + CHECK(t->in_use == 1); + } + t->in_use--; + CHECK(t->in_use == 0); + return NULL; + } +}; + +TEST_F(AcquireLockTest, Unnamed) { + pthread_t t1, t2, t3, t4; + auto start = time(NULL); + CHECK(0 == pthread_create(&t1, NULL, &AcquireLockTest::AcquireAndSleep, this)); + CHECK(0 == pthread_create(&t2, NULL, &AcquireLockTest::AcquireNamedAndSleep, this)); + CHECK(0 == pthread_create(&t3, NULL, &AcquireLockTest::AcquireAndSleep, this)); + CHECK(0 == pthread_create(&t4, NULL, &AcquireLockTest::AcquireNamedAndSleep, this)); + CHECK(0 == pthread_join(t1, NULL)); + CHECK(0 == pthread_join(t2, NULL)); + CHECK(0 == pthread_join(t3, NULL)); + CHECK(0 == pthread_join(t4, NULL)); + auto diff = time(NULL) - start; + ASSERT_GE(diff, 3); + ASSERT_LE(diff, 5); +} + +} // namespace svr2::util diff --git a/enclave/core/core.cc b/enclave/core/core.cc new file mode 100644 index 0000000..9345227 --- /dev/null +++ b/enclave/core/core.cc @@ -0,0 +1,1689 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "core/core.h" + +#include + +#include "proto/enclaveconfig.pb.h" +#include "util/macros.h" +#include "env/env.h" +#include "sender/sender.h" +#include "context/context.h" +#include "util/log.h" +#include "util/bytes.h" +#include "util/constant.h" +#include "util/endian.h" +#include "core/internal.h" +#include "metrics/metrics.h" +#include "hmac/hmac.h" +#include "util/hex.h" + +#define IDLOG(x) LOG(x) << "(" << ID().DebugString() << ") " + +namespace svr2::core { + +namespace { + +void LogRaftGroupConfig(const std::string& name, const enclaveconfig::RaftGroupConfig& c) { + LOG(INFO) << "RaftGroupConfig(" << name << "):" + << " min_voting_replicas:" << c.min_voting_replicas() + << " max_voting_replicas:" << c.max_voting_replicas() + << " super_majority:" << c.super_majority() + << " attestation_timeout:" << c.attestation_timeout() + << " db_version:" << c.db_version() + << " simulated:" << c.simulated(); +} + +bool RaftGroupConfigsEqualExceptForGroupID(const enclaveconfig::RaftGroupConfig& a, const enclaveconfig::RaftGroupConfig& b) { + LOG(INFO) << "Comparing group configs:"; + LogRaftGroupConfig("a", a); + LogRaftGroupConfig("b", b); + return + a.min_voting_replicas() == b.min_voting_replicas() && + a.max_voting_replicas() == b.max_voting_replicas() && + a.super_majority() == b.super_majority() && + a.db_version() == b.db_version() && + a.attestation_timeout() == b.attestation_timeout() && + a.simulated() == b.simulated(); +} + +error::Error ValidateRaftGroupConfig(const enclaveconfig::RaftGroupConfig& c) { + if (c.min_voting_replicas() > c.max_voting_replicas()) { return COUNTED_ERROR(Core_RaftGroupConfigMinReplicasGreaterThanMaxReplicas); } + if (c.min_voting_replicas() < 1) { return COUNTED_ERROR(Core_RaftGroupConfigMinReplicasTooSmall); } + if (c.attestation_timeout() < 1) { return COUNTED_ERROR(Core_RaftGroupConfigAttestationTimeoutTooSmall); } + auto d = db::DB::New(c.db_version()); + if (d.get() == nullptr) { return COUNTED_ERROR(Core_DBVersionInvalid); } + return error::OK; +} + +enclaveconfig::EnclaveConfig DefaultEnclaveConfig() { + enclaveconfig::EnclaveConfig def; + def.set_e2e_txn_timeout_ticks(60); + auto raft = def.mutable_raft(); + raft->set_election_ticks(32); + raft->set_heartbeat_ticks(15); + raft->set_replication_chunk_bytes(1<<20); + raft->set_replica_voting_timeout_ticks(60); + raft->set_replica_membership_timeout_ticks(300); + raft->set_log_max_bytes(1<<30); + raft->set_replication_pipeline(4); + return def; +} + +void ReplyWithError(context::Context* ctx, internal::TransactionID tx, error::Error err) { + EnclaveMessage* out = ctx->Protobuf(); + auto resp = out->mutable_h2e_response(); + resp->set_request_id(tx); + resp->set_status(err); + if (err != error::OK) { + LOG(WARNING) << "Responding to host request " << tx << " with error: " << err; + } + sender::Send(*out); +} + +static bool ContainsMe(const peerid::PeerID& me, const raft::ReplicaGroup& group) { + std::string me_str; + me.ToString(&me_str); + for (int i = 0; i < group.replicas_size(); i++) { + auto replica = group.replicas(i); + if (replica.peer_id() == me_str) return true; + } + return false; +} + +} // namespace + +Core::Core(const enclaveconfig::RaftGroupConfig& group_config) : raft_config_template_(group_config), db_version_(group_config.db_version()), db_protocol_(db::DB::New(group_config.db_version())->P()), e2e_txn_id_(0) { +} + +std::pair, error::Error> Core::Create( + context::Context* ctx, + const enclaveconfig::InitConfig& provided_config) { + LOG(INFO) << "Creating core"; + auto config = DefaultEnclaveConfig(); + config.MergeFrom(provided_config.enclave_config()); + error::Error err = error::OK; + LOG(INFO) << "Validating"; + if (error::OK != (err = Core::ValidateConfig(config))) { + LOG(INFO) << "Validation error: " << err; + return std::make_pair(nullptr, err); + } + if (error::OK != (err = ValidateRaftGroupConfig(provided_config.group_config()))) { + LOG(INFO) << "Raft group config validation error: " << err; + return std::make_pair(nullptr, err); + } + LOG(INFO) << "Initializing"; + std::unique_ptr core(new Core(provided_config.group_config())); + if (error::OK != (err = core->Init(ctx, config, provided_config.initial_timestamp_unix_secs()))) { + return std::make_pair(nullptr, err); + } + return std::make_pair(std::move(core), error::OK); +} + +error::Error Core::Init(context::Context* ctx, const enclaveconfig::EnclaveConfig& config, util::UnixSecs initial_timestamp_unix_secs) { + RETURN_IF_ERROR(Core::ValidateConfig(config)); + + // The ClientManager will obtain evidence and endorsements as needed. + LOG(INFO) << "Setting up client DHState"; + auto client_dh = client::ClientManager::NewDHState(); + if (client_dh.get() == nullptr) { + return COUNTED_ERROR(Core_InitClientDHState); + } + + // The PeerManager will create a key pair, set the public key as its ID, and obtain attestation + // evidence and endorsements as needed. + LOG(INFO) << "Setting up peer DHState"; + auto peer_manager = std::make_unique(); + RETURN_IF_ERROR(peer_manager->Init(ctx)); + + LOG(INFO) << "Setting up remaining core"; + { + ACQUIRE_LOCK(config_mu_, ctx, lock_core_config); + enclave_config_ = config; + } + peer_manager_ = std::move(peer_manager); + client_manager_ = std::make_unique(std::move(client_dh)); + clock_.SetLocalTime(initial_timestamp_unix_secs); + peer_manager_->SetPeerAttestationTimestamp(ctx, initial_timestamp_unix_secs, raft_config_template_.attestation_timeout()); + + SendTimestampToAll(ctx); + + return error::OK; +} + +error::Error Core::ValidateConfig(const enclaveconfig::EnclaveConfig& config) { + auto raft = config.raft(); + if (raft.election_ticks() == 0) { return COUNTED_ERROR(Config_ElectionTicks); } + if (raft.heartbeat_ticks() >= raft.election_ticks()) { return COUNTED_ERROR(Config_HeartbeatVsElectionTicks); } + if (raft.replication_chunk_bytes() < (1024)) { return COUNTED_ERROR(Config_ReplicationChunk); } + if (raft.replica_voting_timeout_ticks() <= raft.election_ticks()) { return COUNTED_ERROR(Config_ReplicaTimeout); } + if (raft.replica_membership_timeout_ticks() <= raft.replica_voting_timeout_ticks()) { return COUNTED_ERROR(Config_ReplicaTimeout); } + if (raft.log_max_bytes() < 1024) { return COUNTED_ERROR(Config_LogMaxBytes); } + if (raft.replication_pipeline() <= 0 || raft.replication_pipeline() >= UINT32_MAX) { return COUNTED_ERROR(Config_ReplicationPipeline); } + if (config.e2e_txn_timeout_ticks() < 1) { return COUNTED_ERROR(Config_E2ETransactionTimeout); } + return error::OK; +} + +error::Error Core::ValidateConfigChange(const enclaveconfig::EnclaveConfig& old_config, const enclaveconfig::EnclaveConfig& new_config) { + RETURN_IF_ERROR(ValidateConfig(new_config)); + return error::OK; +} + +enclaveconfig::EnclaveConfig* Core::enclave_config(context::Context* ctx) const { + ACQUIRE_LOCK(config_mu_, ctx, lock_core_config); + auto cfg = ctx->Protobuf(); + cfg->MergeFrom(enclave_config_); + return cfg; +} + +error::Error Core::Receive(context::Context* ctx, const UntrustedMessage& msg) { + switch (msg.inner_case()) { + case UntrustedMessage::kH2ERequest: { + MEASURE_CPU(ctx, cpu_core_host_msg); + COUNTER(core, host_requests_received)->Increment(); + return HandleHostToEnclave(ctx, msg.h2e_request()); + } + case UntrustedMessage::kTimerTick: + COUNTER(core, timer_ticks_received)->Increment(); + HandleTimerTick(ctx, msg.timer_tick()); + return error::OK; + case UntrustedMessage::kResetPeer:{ + peerid::PeerID peer_id; + RETURN_IF_ERROR(peer_id.FromString(msg.reset_peer().peer_id())); + return peer_manager_->ResetPeer(ctx, peer_id); + } + case UntrustedMessage::kPeerMessage: { + MEASURE_CPU(ctx, cpu_core_peer_msg); + COUNTER(core, peer_msgs_received)->Increment(); + return HandlePeerMessage(ctx, msg); + } + default: + COUNTER(core, invalid_msgs_received)->Increment(); + return error::General_Unimplemented; + } +} + +error::Error Core::HandleHostToEnclave(context::Context* ctx, const HostToEnclaveRequest& msg) { + internal::TransactionID tx = msg.request_id(); + if (tx == 0) { + return COUNTED_ERROR(Core_HostToEnclaveTransactionID); + } + IDLOG(DEBUG) << "request " << tx << " is " << msg.inner_case(); + switch (msg.inner_case()) { + case HostToEnclaveRequest::kNewClient: { + MEASURE_CPU(ctx, cpu_core_client_msg); + HandleNewClient(ctx, msg.new_client(), tx); + } return error::OK; + case HostToEnclaveRequest::kExistingClient: { + MEASURE_CPU(ctx, cpu_core_client_msg); + error::Error err = HandleExistingClient(ctx, msg.existing_client(), tx); + // We never let client errors get us down, but we do close down clients + // with abandon if they encounter errors. + if (err != error::OK) { + client_manager_->RemoveClient(ctx, msg.existing_client().client_id()); + ReplyWithError(ctx, tx, err); + } + } return error::OK; // return OK, even if we closed the client. + case HostToEnclaveRequest::kCloseClient: { + MEASURE_CPU(ctx, cpu_core_client_msg); + client_manager_->RemoveClient(ctx, msg.close_client().client_id()); + ReplyWithError(ctx, tx, error::OK); + } return error::OK; + case HostToEnclaveRequest::kCreateNewRaftGroup: { + HandleCreateNewRaftGroupRequest(ctx, tx); + } return error::OK; + case HostToEnclaveRequest::kJoinRaft: { + HandleJoinRaft(ctx, msg.join_raft(), tx); + } return error::OK; + case HostToEnclaveRequest::kPingPeer: { + peerid::PeerID peer_id; + error::Error peer_id_err = peer_id.FromString(msg.ping_peer().peer_id()); + if (peer_id_err != error::OK) { + ReplyWithError(ctx, tx, peer_id_err); + return error::OK; + } + auto req = ctx->Protobuf(); + req->set_ping(true); + SendE2ETransaction(ctx, peer_id, *req, true, + [tx](context::Context* ctx, error::Error err, const e2e::TransactionResponse* resp) { + ReplyWithError(ctx, tx, err); + }); + } return error::OK; + case HostToEnclaveRequest::kRefreshAttestation: { + error::Error peer_err = peer_manager_->RefreshAttestation(ctx); + error::Error client_err = HandleRefreshAttestation(ctx, msg.refresh_attestation().rotate_client_key()); + ReplyWithError(ctx, tx, peer_err != error::OK ? peer_err : client_err); + } return error::OK; + case HostToEnclaveRequest::kRequestVoting: { + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state != svr2::RAFTSTATE_LOADED_PART_OF_GROUP) { + ReplyWithError(ctx, tx, COUNTED_ERROR(Core_RaftState)); + } else if (raft_.loaded.raft->voting()) { + ReplyWithError(ctx, tx, COUNTED_ERROR(Core_VotingRequestedForVotingMember)); + } else if (!raft_.loaded.raft->leader().has_value()) { + ReplyWithError(ctx, tx, COUNTED_ERROR(Core_LeaderUnknown)); + } else { + auto txn_req = ctx->Protobuf(); + txn_req->set_raft_voting_request(true); + SendE2ETransaction(ctx, *raft_.loaded.raft->leader(), *txn_req, true, + [tx](context::Context* ctx, error::Error err, const e2e::TransactionResponse* resp) { + ReplyWithError(ctx, tx, err); + }); + } + } return error::OK; + case HostToEnclaveRequest::kGetEnclaveStatus: { + auto out = ctx->Protobuf(); + auto resp = out->mutable_h2e_response(); + resp->set_request_id(tx); + auto [replica_status, err] = HandleGetEnclaveStatus(ctx); + if (err != error::OK) { + ReplyWithError(ctx, tx, err); + } else { + resp->mutable_get_enclave_status_reply()->MergeFrom(replica_status); + sender::Send(*out); + } + } return error::OK; + case HostToEnclaveRequest::kRequestMetrics: { + env::environment->UpdateEnvStats(); + EnclaveMessage* out = ctx->Protobuf(); + auto resp = out->mutable_h2e_response(); + resp->set_request_id(tx); + *resp->mutable_metrics_reply() = metrics::AllAsPB(); + sender::Send(*out); + } return error::OK; + case HostToEnclaveRequest::kDatabaseRequest: + return HandleHostDatabaseRequest(ctx, tx, msg.database_request()); + case HostToEnclaveRequest::kReconfigure: { + auto err = HandleReconfigure(ctx, tx, msg.reconfigure()); + ReplyWithError(ctx, tx, err); + } return error::OK; + case HostToEnclaveRequest::kSetLogLevel: { + if (msg.set_log_level() >= ::svr2::enclaveconfig::LOG_LEVEL_MAX) { + ReplyWithError(ctx, tx, error::Core_InvalidLogLevel); + } else { + util::SetLogLevel(msg.set_log_level()); + ReplyWithError(ctx, tx, error::OK); + } + } return error::OK; + case HostToEnclaveRequest::kRelinquishLeadership: { + HandleRelinquishLeadership(ctx, tx); + } return error::OK; + case HostToEnclaveRequest::kRequestRemoval: { + HandleHostRequestedRaftRemoval(ctx, tx); + } return error::OK; + case HostToEnclaveRequest::kHashes: { + auto err = HandleHostHashes(ctx, tx); + if (err != error::OK) { ReplyWithError(ctx, tx, err); } + } return error::OK; + default: + return error::General_Unimplemented; + } +} + +void Core::HandleNewClient(context::Context* ctx, const NewClientRequest& msg, internal::TransactionID tx) { + auto [client, err] = client_manager_->NewClient(ctx, msg.client_authenticated_id()); + if (err != error::OK) { + ReplyWithError(ctx, tx, err); + COUNTER(core, new_client_failure)->Increment(); + return; + } + auto out = ctx->Protobuf(); + auto resp = out->mutable_h2e_response(); + resp->set_request_id(tx); + auto new_client = resp->mutable_new_client_reply(); + new_client->set_client_id(client->ID()); + *new_client->mutable_handshake_start() = client->MovedHandshakeStart(); + sender::Send(*out); + COUNTER(core, new_client_success)->Increment(); +} + +error::Error Core::HandleExistingClient(context::Context* ctx, const ExistingClientRequest& msg, internal::TransactionID tx) { + client::ClientID client_id = msg.client_id(); + client::Client* c = client_manager_->GetClient(ctx, client_id); + if (c == nullptr) { + return COUNTED_ERROR(Core_ClientNotFound); + } + if (c->Handshaking()) { + auto [handshake, err] = c->FinishHandshake(ctx, msg.data()); + RETURN_IF_ERROR(err); + auto out = ctx->Protobuf(); + auto resp = out->mutable_h2e_response(); + resp->set_request_id(tx); + resp->mutable_existing_client_reply()->set_data(handshake); + sender::Send(*out); + return error::OK; + } + auto request = db_protocol_->RequestPB(ctx); + RETURN_IF_ERROR(c->DecryptRequest(ctx, msg.data(), request)); + auto [log, err] = db_protocol_->LogPBFromRequest(ctx, std::move(*request), c->authenticated_id()); + RETURN_IF_ERROR(err); + RETURN_IF_ERROR(db_protocol_->ValidateClientLog(*log)); + std::string serialized; + if (!log->SerializeToString(&serialized)) { + return COUNTED_ERROR(Core_SerializeClientLog); + } + return RaftWriteLogTransaction(ctx, serialized, ClientLogTransaction(ctx, client_id, tx)); +} + +void Core::HandleCreateNewRaftGroupRequest(context::Context* ctx, internal::TransactionID tx) { + LOG(INFO) << "Attempting to create new raft group"; + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state != svr2::RAFTSTATE_NO_STATE) { + ReplyWithError(ctx, tx, COUNTED_ERROR(Core_RaftState)); + } + enclaveconfig::RaftGroupConfig cfg = raft_config_template_; + uint8_t group_id_bytes[8]; + error::Error gid_err = env::environment->RandomBytes(group_id_bytes, sizeof(group_id_bytes)); + if (gid_err != error::OK) { + ReplyWithError(ctx, tx, gid_err); + } + raft::GroupId group_id = util::BigEndian64FromBytes(group_id_bytes); + cfg.set_group_id(group_id); + cfg.set_db_version(db_version_); + + raft_.state = svr2::RAFTSTATE_LOADED_PART_OF_GROUP; + enclaveconfig::RaftConfig raft_config = enclave_config(ctx)->raft(); + raft_.loaded = { + .group_config = cfg, + .raft = std::make_unique( + group_id, + peer_manager_->ID(), + raft::Membership::First(peer_manager_->ID()), + std::make_unique(raft_config.log_max_bytes()), + raft_config, + false, + cfg.super_majority()), // committed_log + .db = db::DB::New(db_version_), + .db_last_applied_log = 0, + }; + GAUGE(core, last_index_applied_to_db)->Set(0); + RaftStep(ctx); + ReplyWithError(ctx, tx, error::OK); +} + +void Core::HandleJoinRaft(context::Context* ctx, const JoinRaftRequest& msg, internal::TransactionID tx) { + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state == svr2::RAFTSTATE_LOADED_PART_OF_GROUP) { + ReplyWithError(ctx, tx, COUNTED_ERROR(Core_RaftState)); + return; + } + peerid::PeerID peer; + error::Error peer_err = peer.FromString(msg.peer_id()); + if (peer_err != error::OK) { + ReplyWithError(ctx, tx, COUNTED_ERROR(Core_RaftState)); + return; + } + raft_.ClearState(); + raft_.state = svr2::RAFTSTATE_WAITING_FOR_FIRST_CONNECTION; + raft_.waiting_for_first_connection = { + .peer = peer, + .join_tx = tx, + }; + + switch (peer_manager_->PeerState(ctx, peer)) { + case PEER_CONNECTED: + JoinRaftFromFirstPeer(ctx); + break; + case PEER_CONNECTING: + break; + default: + peer_manager_->ConnectToPeer(ctx, peer); + break; + } +} + +void Core::JoinRaftFromFirstPeer(context::Context* ctx) { + CHECK(raft_.state == svr2::RAFTSTATE_WAITING_FOR_FIRST_CONNECTION); + internal::TransactionID tx = raft_.waiting_for_first_connection.join_tx; + peerid::PeerID peer = raft_.waiting_for_first_connection.peer; + IDLOG(VERBOSE) << "requesting to join raft from peer " << peer << " tx=" << tx; + auto req = ctx->Protobuf(); + req->set_get_raft(true); + SendE2ETransaction( + ctx, peer, *req, true, + [this, tx, peer](context::Context* ctx, error::Error err, const e2e::TransactionResponse* resp){ + if (err != error::OK) { + ReplyWithError(ctx, tx, err); + return; + } + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + + // We cleared the RaftState before sending this request and we will only proceed with this + // callback if no intermediate action has changed the state. + if (raft_.state != svr2::RAFTSTATE_WAITING_FOR_FIRST_CONNECTION) { + ReplyWithError(ctx, tx, COUNTED_ERROR(Core_RaftState)); + return; + } + // Since the state is NO_STATE we are guaranteed that the raft_ has default values (no + // actions change raft_ with out changing raft_state). + + auto got = resp->get_raft(); + enclaveconfig::RaftGroupConfig group_config_equality_check = got.group_config(); + group_config_equality_check.clear_group_id(); + if (!RaftGroupConfigsEqualExceptForGroupID(raft_config_template_, group_config_equality_check)) { + ReplyWithError(ctx, tx, COUNTED_ERROR(Core_GroupConfigMismath)); + return; + } + if (got.replica_group().replicas_size() == 0) { + ReplyWithError(ctx, tx, COUNTED_ERROR(Core_ReceivedEmptyReplicaGroup)); + return; + } + auto [mem, mem_err] = raft::Membership::FromProto(got.replica_group()); + if (mem_err != error::OK) { + ReplyWithError(ctx, tx, mem_err); + return; + } + for (int i = 0; i < got.replica_group().replicas_size(); i++) { + peerid::PeerID p; + const auto& replica = got.replica_group().replicas(i); + err = p.FromString(replica.peer_id()); + if (err != error::OK) { + ReplyWithError(ctx, tx, err); + return; + } + err = peer_manager_->MaybeConnectToPeer(ctx, p); + if (err != error::OK) { + ReplyWithError(ctx, tx, err); + return; + } + } + + LOG(INFO) << "received raft information, switching to loading state and starting replication"; + raft_.ClearState(); + raft_.state = svr2::RAFTSTATE_LOADING; + raft_.loading = { + .group_config = got.group_config(), + .replica_group = got.replica_group(), + .log = std::make_unique(enclave_config(ctx)->raft().log_max_bytes()), + .db = db::DB::New(db_version_), + .mem = std::move(mem), + .load_from = peer, + .join_tx = tx, + }; + + // Reset client attestation based on new group config. + if (error::OK != (err = client_manager_->RefreshAttestation(ctx, raft_.loading.group_config))) { + ReplyWithError(ctx, tx, err); + return; + } + + RequestRaftReplication(ctx); + }); +} + +void Core::RequestRaftReplication(context::Context* ctx) { + if (raft_.state != svr2::RAFTSTATE_LOADING) { + IDLOG(WARNING) << "RequestRaftReplication called while state is " << raft_.state; + return; + } + if (!raft_.loading.started) { + size_t connected = 0; + const auto& voting_replicas = raft_.loading.mem->voting_replicas(); + for (auto peer : peer_manager_->ConnectedPeers(ctx)) { + if (voting_replicas.count(peer)) { + connected++; + } + } + size_t quorum = raft::Raft::quorum_size( + voting_replicas.size(), raft_.loading.group_config.super_majority()); + if (connected < quorum) { + IDLOG(VERBOSE) << "Still waiting for peer connections before starting load, have " << connected << ", need " << quorum; + return; + } + raft_.loading.started = true; + } + uint8_t repl_id[8]; + env::environment->RandomBytes(repl_id, sizeof(repl_id)); + raft_.loading.replication_id = util::BigEndian64FromBytes(repl_id); + internal::TransactionID tx = raft_.loading.join_tx; + const peerid::PeerID& from = raft_.loading.load_from; + + auto req = ctx->Protobuf(); + auto repl = req->mutable_replicate_state(); + repl->set_group_id(raft_.loading.group_config.group_id()); + repl->set_replication_id(raft_.loading.replication_id); + + IDLOG(VERBOSE) << "requesting replication from " << from; + SendE2ETransaction(ctx, from, *req, false /* no timeout */, + [this, from, tx](context::Context* ctx, error::Error err, const e2e::TransactionResponse* resp) { + if (err != error::OK) { + // We've failed to replicate state. For now, revert back to no state. + LOG(ERROR) << "failed to replicate state from " << from << ": " << err; + ReplyWithError(ctx, tx, err); + return; + } + IDLOG(INFO) << "finished replicating database, fully loaded"; + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + PromoteRaftToLoaded(ctx); + }); +} + +void Core::PromoteRaftToLoaded(context::Context* ctx) { + internal::Loading loading = std::move(raft_.loading); + raft_.ClearState(); + raft_.state = svr2::RAFTSTATE_LOADED_REQUESTING_MEMBERSHIP; + raft::LogIdx db_last_applied_log = loading.log->last_idx(); + raft_.loaded = { + .group_config = loading.group_config, + .raft = std::make_unique( + loading.group_config.group_id(), + peer_manager_->ID(), + std::move(loading.mem), + std::move(loading.log), + enclave_config(ctx)->raft(), + true, + loading.group_config.super_majority()), // committed_log + .db = std::move(loading.db), + .db_last_applied_log = db_last_applied_log, + }; + GAUGE(core, last_index_applied_to_db)->Set(db_last_applied_log); + RaftRequestMembership(ctx, loading.join_tx); +} + +void Core::RaftRequestMembership(context::Context* ctx, internal::TransactionID tx) { + // Never request membership unless in the correct state. + CHECK(raft_.state == svr2::RAFTSTATE_LOADED_REQUESTING_MEMBERSHIP); + // We could be tricky and try to find out who the leader is. Instead, we'll + // just send our request to every member. Note that this will cause error + // Raft_AppendEntryNotLeader (5004) to appear in the logs + auto req = ctx->Protobuf(); + req->set_raft_membership_request(true); + // Set a timeout for if we fail to do this. + timeout::Cancel cancel = timeout_.SetTimeout(ctx, enclave_config(ctx)->e2e_txn_timeout_ticks(), [this, tx](context::Context* ctx) { + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state == svr2::RAFTSTATE_LOADED_REQUESTING_MEMBERSHIP) { + RaftRequestMembership(ctx, tx); + } + }); + + for (const auto& peer : raft_.loaded.raft->peers()) { + IDLOG(VERBOSE) << "requesting raft membership from " << peer; + SendE2ETransaction(ctx, peer, *req, true, + [this, tx, cancel](context::Context* ctx, error::Error err, const e2e::TransactionResponse* resp) { + if (err != error::OK) { + LOG(WARNING) << "Error requesting raft membership: " << err; + return; + } + AddLogTransaction(ctx, resp->raft_membership_response(), [this, tx, cancel]( + context::Context* ctx, + error::Error err, + const raft::LogEntry* entry, + const db::DB::Response* response) { + // HandleRaftMembershipChange does the actual state changes, this + // just tells our requester that we've succeeded. + if (err == error::OK) { + timeout_.CancelTimeout(ctx, cancel); + } + ReplyWithError(ctx, tx, err); + }); + }); + } +} + +error::Error Core::HandleRefreshAttestation(context::Context* ctx, bool rotate_key) { + enclaveconfig::RaftGroupConfig config; + { // Copy current config out of Raft state. + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + switch (raft_.state) { + case svr2::RAFTSTATE_LOADING: + config.MergeFrom(raft_.loading.group_config); + break; + case svr2::RAFTSTATE_LOADED_REQUESTING_MEMBERSHIP: + case svr2::RAFTSTATE_LOADED_PART_OF_GROUP: + config.MergeFrom(raft_.loaded.group_config); + break; + default: + return COUNTED_ERROR(Core_RefreshClientAttestationWithoutRaftConfig); + } + } + return rotate_key + ? client_manager_->RotateKeyAndRefreshAttestation(ctx, config) + : client_manager_->RefreshAttestation(ctx, config); +} + +std::pair Core::HandleGetEnclaveStatus(context::Context* ctx) const { + EnclaveReplicaStatus result; + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + result.set_raft_state(raft_.state); + + auto peers = peer_manager_->AllPeers(ctx); + peers.insert(ID()); + peerid::PeerID leader; + std::set all_replicas; + std::set voting_replicas; + if(raft_.state == svr2::RAFTSTATE_LOADED_PART_OF_GROUP) { + leader = raft_.loaded.raft->leader().value_or(peerid::PeerID()); + auto& membership = raft_.loaded.raft->membership(); + all_replicas = membership.all_replicas(); + voting_replicas = membership.voting_replicas(); + } + for (auto peer_id : peers) { + auto peer_status = result.add_peers(); + peer_status->set_peer_id(peer_id.AsString()); + peer_status->set_in_raft(all_replicas.count(peer_id)); + peer_status->set_is_voting(voting_replicas.count(peer_id) > 0); + peer_status->set_is_leader(peer_id == leader); + peer_manager_->PeerStatus(ctx, peer_id, peer_status->mutable_connection_status()); + peer_status->set_me(peer_id == ID()); + + if (leader == ID() && peer_id != ID()) { + auto err = raft_.loaded.raft->FollowerReplicationStatus(peer_id, peer_status->mutable_replication_status()); + if(err != error::OK) { + return std::make_pair(result, err); + } + } + } + return std::make_pair(result, error::OK); +} + +error::Error Core::HandleHostDatabaseRequest(context::Context* ctx, internal::TransactionID tx, const DatabaseRequest& req) { + auto cli_req = db_protocol_->RequestPB(ctx); + if (!cli_req->ParseFromString(req.request())) { + return COUNTED_ERROR(Core_DeserializeHostDatabaseRequest); + } + auto [log, err] = db_protocol_->LogPBFromRequest(ctx, std::move(*cli_req), req.authenticated_id()); + RETURN_IF_ERROR(err); + std::string serialized; + if (!log->SerializeToString(&serialized)) { + return COUNTED_ERROR(Core_SerializeClientLog); + } + return RaftWriteLogTransaction(ctx, serialized, [tx]( + context::Context* ctx, + error::Error err, + const raft::LogEntry* entry, + const db::DB::Response* resp) { + if (err == error::OK) { + COUNTER(core, host_delete_success)->Increment(); + } else { + COUNTER(core, host_delete_failure)->Increment(); + } + ReplyWithError(ctx, tx, err); + }); +} + +error::Error Core::HandleReconfigure(context::Context* ctx, internal::TransactionID tx, const enclaveconfig::EnclaveConfig& req) { + auto new_config = DefaultEnclaveConfig(); + new_config.MergeFrom(req); + { + ACQUIRE_LOCK(config_mu_, ctx, lock_core_config); + RETURN_IF_ERROR(ValidateConfigChange(enclave_config_, new_config)); + enclave_config_ = new_config; + } + { + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state == svr2::RAFTSTATE_LOADED_PART_OF_GROUP + || raft_.state == svr2::RAFTSTATE_LOADED_REQUESTING_MEMBERSHIP) { + raft_.loaded.raft->Reconfigure(new_config.raft()); + } + } + return error::OK; +} + +void Core::HandleRelinquishLeadership(context::Context* ctx, internal::TransactionID tx) { + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state != RAFTSTATE_LOADED_PART_OF_GROUP || !raft_.loaded.raft->is_leader()) { + // We're already not the leader. + ReplyWithError(ctx, tx, error::OK); + return; + } + raft_.loaded.raft->RelinquishLeadership(ctx); + // If we succeed in relinquishing leadership, then the log that's one past the + // last one we have will have a term one greater than the most recent term. + // Set up a watcher for that. + raft::LogLocation loc; + loc.set_idx(raft_.loaded.raft->log().next_idx()); + loc.set_term(raft_.loaded.raft->log().last_term() + 1); + AddLogTransaction(ctx, loc, [tx]( + context::Context* ctx, + error::Error err, + const raft::LogEntry* entry, + const db::DB::Response* resp) { + ReplyWithError(ctx, tx, err); + }); + RaftStep(ctx); +} + +void Core::HandleHostRequestedRaftRemoval(context::Context* ctx, internal::TransactionID tx) { + LOG(VERBOSE) << "HandleHostRequestedRaftRemoval"; + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state != RAFTSTATE_LOADED_PART_OF_GROUP) { + ReplyWithError(ctx, tx, COUNTED_ERROR(Core_RaftState)); + } else if (raft_.loaded.raft->is_leader()) { + ReplyWithError(ctx, tx, COUNTED_ERROR(Core_LeaderRemovingSelf)); + } else if (!raft_.loaded.raft->leader().has_value()) { + ReplyWithError(ctx, tx, COUNTED_ERROR(Core_LeaderUnknown)); + } else { + auto req = ctx->Protobuf(); + req->set_raft_removal_request(true); + auto peer = *raft_.loaded.raft->leader(); + SendE2ETransaction(ctx, peer, *req, true, [peer, tx](context::Context* ctx, error::Error err, const e2e::TransactionResponse* resp) { + LOG(INFO) << "RaftRemovalRequest to " << peer << ": " << err; + ReplyWithError(ctx, tx, err); + }); + } +} + +error::Error Core::HandleHostHashes(context::Context* ctx, internal::TransactionID tx) { + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state != RAFTSTATE_LOADED_PART_OF_GROUP && + raft_.state != RAFTSTATE_LOADED_REQUESTING_MEMBERSHIP) { + return COUNTED_ERROR(Core_RaftState); + } + auto db_hash = raft_.loaded.db->Hash(ctx); + auto out = ctx->Protobuf(); + auto resp = out->mutable_h2e_response(); + resp->set_request_id(tx); + auto hashes = resp->mutable_hashes(); + hashes->mutable_db_hash()->resize(32, ' '); + std::copy(db_hash.begin(), db_hash.end(), hashes->mutable_db_hash()->data()); + hashes->set_commit_idx(raft_.loaded.db_last_applied_log); + auto log = raft_.loaded.raft->log().At(raft_.loaded.db_last_applied_log).Entry(); + if (log == nullptr) { + return COUNTED_ERROR(Core_LogNotFoundAtCommitIndex); + } + hashes->set_commit_hash_chain(log->hash_chain()); + sender::Send(*out); + return error::OK; +} + +void Core::HandleTimerTick(context::Context* ctx, const TimerTick& tick) { + MEASURE_CPU(ctx, cpu_core_timer_tick); + auto time = tick.new_timestamp_unix_secs(); + clock_.SetLocalTime(time); + GAUGE(core, current_local_time)->Set(time); + MaybeUpdateGroupTime(ctx); + timeout_.TimerTick(ctx); + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state == svr2::RAFTSTATE_LOADED_PART_OF_GROUP) { + ConnectToRaftMembers(ctx); + raft_.loaded.raft->TimerTick(ctx); + if (raft_.loaded.raft->is_leader()) { + raft::ReplicaGroup* next = NextReplicaGroup(ctx); + if (next != nullptr) { + auto [loc, err] = raft_.loaded.raft->ReplicaGroupChange(ctx, *next); + // We expect errors to occur here, in cases where for example an existing + // replica group change is already in progress, etc. + LOG(INFO) << "attempt to change replica group returned " << err; + } + } + RaftStep(ctx); + } +} + +void Core::MaybeUpdateGroupTime(context::Context* ctx) { + std::set peers = peer_manager_->ConnectedPeers(ctx); + { + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + switch (raft_.state) { + case RAFTSTATE_LOADED_PART_OF_GROUP: + case RAFTSTATE_LOADED_REQUESTING_MEMBERSHIP: + peers = raft_.loaded.raft->membership().voting_replicas(); + break; + case RAFTSTATE_LOADING: + peers = raft_.loading.mem->voting_replicas(); + break; + default: + break; + } + } + auto ts = clock_.GetTime(ctx, peers); + GAUGE(core, current_groupclock_time)->Set(ts); + peer_manager_->SetPeerAttestationTimestamp(ctx, ts, raft_config_template_.attestation_timeout()); +} + +void Core::ConnectToRaftMembers(context::Context* ctx) { + const auto& membership = raft_.loaded.raft->membership(); + for (auto peer : membership.all_replicas()) { + if (peer == ID() || peer < ID()) { + continue; + } + auto err = peer_manager_->MaybeConnectToPeer(ctx, peer); + if (err != error::OK) { + IDLOG(INFO) << "Requesting connection to detected disconnected peer " << peer << " failed: " << err; + } + } +} + +raft::ReplicaGroup* Core::NextReplicaGroup(context::Context* ctx) { + if (raft_.state != svr2::RAFTSTATE_LOADED_PART_OF_GROUP) { return nullptr; } + raft::Raft* r = raft_.loaded.raft.get(); + if (!r->leader()) { return nullptr; } + // See if we can add a voting member to increase our total. + const raft::Membership& m = r->membership(); + auto out = ctx->Protobuf(); + *out = m.AsProto(); + // Look for an existing replica to promote to voting. + if (m.voting_replicas().size() < raft_.loaded.group_config.max_voting_replicas() && + m.all_replicas().size() > m.voting_replicas().size()) { + std::string peer_id = ""; + util::Ticks min = util::InvalidTicks; + for (const auto& peer : m.all_replicas()) { + util::Ticks last_seen = r->last_seen_ticks(peer); + if (last_seen < min && m.voting_replicas().count(peer) == 0) { + peer_id = peer.AsString(); + min = last_seen; + } + } + if (peer_id != "" && min < r->config().election_ticks()) { + // We've found a peer that's non-voting and that's responded within the last + // election timeout. Promote them. + for (int i = 0; i < out->replicas_size(); i++) { + if (out->replicas(i).peer_id() == peer_id) { + out->mutable_replicas(i)->set_voting(true); + return out; + } + } + } + } + // Look for an existing voting replica to demote. + if (m.voting_replicas().size() > raft_.loaded.group_config.min_voting_replicas()) { + for (const auto& peer : m.voting_replicas()) { + util::Ticks last_seen = r->last_seen_ticks(peer); + if (last_seen != util::InvalidTicks && last_seen > r->config().replica_voting_timeout_ticks()) { + std::string peer_id = peer.AsString(); + for (int i = 0; i < out->replicas_size(); i++) { + if (out->replicas(i).peer_id() == peer_id) { + out->mutable_replicas(i)->set_voting(false); + return out; + } + } + } + } + } + // Look for non-voting replicas to remove. + if (m.all_replicas().size() > m.voting_replicas().size()) { + for (const auto& peer : m.all_replicas()) { + if (m.voting_replicas().count(peer)) { continue; } + util::Ticks last_seen = r->last_seen_ticks(peer); + if (last_seen != util::InvalidTicks && last_seen > r->config().replica_membership_timeout_ticks()) { + const std::string peer_id = peer.AsString(); + auto it = std::find_if(out->replicas().begin(), out->replicas().end(), [&peer_id](auto& replica) { + return replica.peer_id() == peer_id; + }); + if (it != out->replicas().end()) { + out->mutable_replicas()->erase(it); + return out; + } + } + } + } + return nullptr; +} + +error::Error Core::HandlePeerMessage(context::Context* ctx, const UntrustedMessage& msg) { + const auto remote_msg = msg.peer_message(); + // Parsing the peer ID should always succeed, because the peer manager already did it once. + peerid::PeerID from; + CHECK(error::OK == from.FromString(remote_msg.peer_id())); + // If these are created, they will be so within the arena, so they'll + // be cleaned up when it falls out of scope. + e2e::EnclaveToEnclaveMessage* decoded = nullptr; + auto err = peer_manager_->RecvFromPeer(ctx, remote_msg, &decoded); + if (err != error::OK) { + LOG(WARNING) << "Failed to receive message from " << from << " of type " << remote_msg.inner_case() << ": " << err; + return err; + } + if (decoded == nullptr) { + return error::OK; + } + return HandleE2E(ctx, from, *decoded); +} + +error::Error Core::HandleE2E(context::Context* ctx, const peerid::PeerID& from, const e2e::EnclaveToEnclaveMessage& msg) { + switch (msg.inner_case()) { + case e2e::EnclaveToEnclaveMessage::kConnected: + HandlePeerConnect(ctx, from); + return error::OK; + case e2e::EnclaveToEnclaveMessage::kRaftMessage: { + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + MEASURE_CPU(ctx, cpu_core_raft_msg); + if (raft_.state != svr2::RAFTSTATE_LOADED_PART_OF_GROUP && + raft_.state != svr2::RAFTSTATE_LOADED_REQUESTING_MEMBERSHIP) { + return COUNTED_ERROR(Core_RaftState); + } + raft_.loaded.raft->Receive(ctx, msg.raft_message(), from); + RaftStep(ctx); + } return error::OK; + case e2e::EnclaveToEnclaveMessage::kTransactionRequest: { + MEASURE_CPU(ctx, cpu_core_e2e_txn_req); + return Core::HandleE2ETransaction(ctx, from, msg.transaction_request()); + } + case e2e::EnclaveToEnclaveMessage::kTransactionResponse: { + MEASURE_CPU(ctx, cpu_core_e2e_txn_resp); + const auto& txn_resp = msg.transaction_response(); + ACQUIRE_NAMED_LOCK(lock, e2e_txn_mu_, ctx, lock_core_e2e_txns); + auto f = outstanding_e2e_transactions_.find(txn_resp.request_id()); + if (f == outstanding_e2e_transactions_.end()) { + LOG(VERBOSE) << "received response to e2e transaction that has no callback " << txn_resp.request_id(); + return error::OK; + } + auto callback = std::move(f->second); + IDLOG(VERBOSE) << "received response to e2e transaction " << f->first << ": error=" << msg.transaction_response().status(); + outstanding_e2e_transactions_.erase(f); + timeout_.CancelTimeout(ctx, callback.timeout_cancel); + lock.unlock(); + callback.callback(ctx, msg.transaction_response().status(), &msg.transaction_response()); + } return error::OK; + default: + return error::General_Unimplemented; + } +} + +void Core::HandlePeerConnect(context::Context* ctx, const peerid::PeerID& from) { + IDLOG(INFO) << "successfully established connection to " << from; + + // On each connect, immediately send our most current (local) timestamp. + SendTimestamp(ctx, from, clock_.GetLocalTime()); + + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + switch (raft_.state) { + case svr2::RAFTSTATE_LOADING: + if (!raft_.loading.started) { + // If we don't have an in-flight request to load stuff and we've connected + // to a new peer, see if the connection to that new peer is enough to get + // us started. + RequestRaftReplication(ctx); + } + break; + case svr2::RAFTSTATE_WAITING_FOR_FIRST_CONNECTION: + if (from == raft_.waiting_for_first_connection.peer) { + JoinRaftFromFirstPeer(ctx); + } + break; + case svr2::RAFTSTATE_LOADED_REQUESTING_MEMBERSHIP: + case svr2::RAFTSTATE_LOADED_PART_OF_GROUP: + raft_.loaded.raft->ResetPeer(ctx, from); + break; + default: + break; + } +} + +error::Error Core::HandleE2ETransaction(context::Context* ctx, const peerid::PeerID& from, const e2e::TransactionRequest& msg) { + auto e2e_resp = ctx->Protobuf(); + auto txn_resp = e2e_resp->mutable_transaction_response(); + txn_resp->set_request_id(msg.request_id()); + error::Error err = error::OK; + switch (msg.inner_case()) { + case e2e::TransactionRequest::kPing: + txn_resp->set_status(error::OK); + break; + case e2e::TransactionRequest::kGetRaft: { + LOG(VERBOSE) << "GetRaft"; + auto out = txn_resp->mutable_get_raft(); + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state != svr2::RAFTSTATE_LOADED_PART_OF_GROUP) { + err = COUNTED_ERROR(Core_RaftState); + break; + } + *out->mutable_group_config() = raft_.loaded.group_config; + *out->mutable_replica_group() = raft_.loaded.raft->membership().AsProto(); + } break; + case e2e::TransactionRequest::kReplicateState: + // The response to ReplicateStateRequest will be sent async, not within this transaction call. + return HandleReplicateStateRequest(ctx, from, msg); + case e2e::TransactionRequest::kReplicateStatePush: { + err = HandleReplicateStatePush(ctx, msg.replicate_state_push()); + } break; + case e2e::TransactionRequest::kRaftMembershipRequest: { + err = HandleRequestRaftMembership(ctx, from, txn_resp); + } break; + case e2e::TransactionRequest::kRaftVotingRequest: { + err = HandleRequestRaftVoting(ctx, from, txn_resp); + } break; + case e2e::TransactionRequest::kRaftWrite: { + err = HandleRaftWrite(ctx, msg.raft_write(), txn_resp); + } break; + case e2e::TransactionRequest::kNewTimestampUnixSecs: { + HandleNewTimestamp(ctx, from, msg.new_timestamp_unix_secs()); + } break; + case e2e::TransactionRequest::kRaftRemovalRequest: + // The response to RaftRemovalRequest will be sent async. + return HandlePeerRequestedRaftRemoval(ctx, from, msg.request_id()); + default: + LOG(WARNING) << "unknown e2e transaction type " << msg.inner_case(); + err = error::General_Unimplemented; + break; + } + if (err != error::OK || txn_resp->inner_case() == e2e::TransactionResponse::INNER_NOT_SET) { + return SendE2EError(ctx, from, msg.request_id(), err); + } + return peer_manager_->SendToPeer(ctx, from, *e2e_resp); +} + +error::Error Core::HandleReplicateStateRequest(context::Context* ctx, const peerid::PeerID& target, const e2e::TransactionRequest& req) { + const e2e::ReplicateStateRequest& msg = req.replicate_state(); + LOG(VERBOSE) << "HandleReplicateStateRequest"; + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state != svr2::RAFTSTATE_LOADED_PART_OF_GROUP) { + return SendE2EError(ctx, target, req.request_id(), COUNTED_ERROR(Replicate_RaftState)); + } + if (msg.group_id() != raft_.loaded.raft->group_id()) { + return SendE2EError(ctx, target, req.request_id(), COUNTED_ERROR(Replicate_GroupMismatch)); + } + // push_state will live for the duration of this replication. + auto push_state = std::make_shared( + raft_.loaded.raft->log().oldest_stored_idx(), target, req); + + // `target` has requested replication from us, so now we need to ship data + // down to it. We do so by sending some number of E2E transactions to `target`, + // each containing a subset of the data. Each call to SendNextReplicationState + // will send one such E2E transaction, wait for it to complete, then send + // another. So, by starting multiple here, we allow ourselves to send many + // at once over the network without waiting for a response from `target`. + // The multiple requests use (a shared pointer to) a single push_state to + // coordinate which data has been sent already, which should be sent in the + // next call to SendNextReplicationState (either here or on a callback to a + // previous one), coordinating when we're done, and remembering which transaction + // to complete when we are. + auto pipeline = enclave_config(ctx)->raft().replication_pipeline(); + for (uint32_t i = 0; i < pipeline && !push_state->finished_sending; i++) { + SendNextReplicationState(ctx, push_state); + } + return error::OK; +} + +void Core::SendNextReplicationState(context::Context* ctx, std::shared_ptr push_state) { + MEASURE_CPU(ctx, cpu_core_repl_send); + CHECK(!push_state->finished_sending); + auto push = ctx->Protobuf(); + auto out = push->mutable_replicate_state_push(); + out->set_replication_id(push_state->replication_id); + out->set_replication_sequence(push_state->replication_sequence++); + out->set_first_log_idx(push_state->logs_from_idx_inclusive); + size_t size = 0; + bool at_commit_idx = false; + auto replication_chunk_bytes = enclave_config(ctx)->raft().replication_chunk_bytes(); + for (auto iter = raft_.loaded.raft->log().At(push_state->logs_from_idx_inclusive); ; iter.Next()) { + if (!iter.Valid() || iter.Index() > raft_.loaded.db_last_applied_log) { + LOG(VERBOSE) << "surpassed commit idx " << raft_.loaded.db_last_applied_log; + at_commit_idx = true; + break; + } + *out->add_entries() = *iter.Entry(); + size += iter.SerializedSize(); + if (size >= replication_chunk_bytes) { break; } + } + + // our db rows represent the state at `raft_.loaded.db_commit`, so we can + // only send them if after this message the requester will be at `raft_.loaded.db_commit` + if (at_commit_idx) { + size_t rows_to_send = + (replication_chunk_bytes - out->ByteSizeLong()) + / db_protocol_->MaxRowSerializedSize(); + if (rows_to_send) { // if we've got space + auto [row_id, err] = raft_.loaded.db->RowsAsProtos(ctx, push_state->db_from_key_exclusive, rows_to_send, out->mutable_rows()); + if (err != error::OK) { + LOG(WARNING) << "Error getting rows as protos: " << err; + if (!push_state->sent_response.exchange(true)) { + SendE2EError(ctx, push_state->target, push_state->tx, err); + } + return; + } + push_state->db_from_key_exclusive = row_id; + if ((size_t) out->rows_size() < rows_to_send) { + out->set_db_to_end(true); + push_state->finished_sending = true; + LOG(INFO) << "Final data being sent"; + } + } + } + *out->mutable_committed_membership() = raft_.loaded.raft->committed_membership().AsProto(); + IDLOG(INFO) << "Replication: sending " << out->entries_size() << " entries (from " + << push_state->logs_from_idx_inclusive << ") and " << out->rows_size() << " rows to " + << push_state->target; + + // Update push state based on our output. + push_state->logs_from_idx_inclusive += out->entries_size(); + bool last_sent_transaction = push_state->finished_sending; + SendE2ETransaction(ctx, push_state->target, *push, true, + [this, push_state, last_sent_transaction](context::Context* ctx, error::Error err, const e2e::TransactionResponse* resp) { + if (push_state->sent_response.load()) { + return; + } else if (err != error::OK && !push_state->sent_response.exchange(true)) { + SendE2EError(ctx, push_state->target, push_state->tx, err); + return; + } + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + // `last_sent_transaction` will be set if this is the last transaction we send. + // `push_state->finished_sending` will be set if we've sent that transaction, + // whether this is it or not. + if (last_sent_transaction && !push_state->sent_response.exchange(true)) { + LOG(INFO) << "All replication state pushes complete, returning success for replication"; + SendE2EError(ctx, push_state->target, push_state->tx, error::OK); + } else if (!push_state->finished_sending) { + SendNextReplicationState(ctx, push_state); + } + }); +} + +error::Error Core::HandleReplicateStatePush(context::Context* ctx, const e2e::ReplicateStatePush& repl) { + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + MEASURE_CPU(ctx, cpu_core_repl_recv); + if (raft_.state != svr2::RAFTSTATE_LOADING) { + LOG(ERROR) << "Running RequestRaftReplication callback while not loading"; + return COUNTED_ERROR(Core_RaftState); + } + if (raft_.loading.log->next_idx() > 1 && repl.first_log_idx() != raft_.loading.log->next_idx()) { + LOG(ERROR) << "log index mismatch: log.next=" << raft_.loading.log->next_idx() + << " repl.first=" << repl.first_log_idx(); + return COUNTED_ERROR(Replicate_LogIndexMismatch); + } else if (!repl.has_committed_membership()) { + return COUNTED_ERROR(Replicate_MissingCommittedMembership); + } else if (repl.replication_id() != raft_.loading.replication_id) { + return COUNTED_ERROR(Replicate_ReplicationID); + } else if (repl.replication_sequence() != raft_.loading.replication_sequence++) { + return COUNTED_ERROR(Replicate_ReplicationSequence); + } + error::Error err; + std::tie(raft_.loading.mem, err) = raft::Membership::FromProto(repl.committed_membership()); + RETURN_IF_ERROR(err); + LOG(INFO) << "received " << repl.entries_size() << " logs starting at " << repl.first_log_idx() + << " and " << repl.rows_size() << " database rows (have " << raft_.loading.db->row_count() << " rows)"; + + raft::Log* log = raft_.loading.log.get(); + // We could be receiving the first set of entries from a replica's truncated set of + // logs. In that case, if we were to append the first entry as log index 1, we'd have + // a mismatch between our log index and theirs. So, when our log is empty, use their + // first log index to set what our next index will be. + if (log->empty()) { + log->SetNextIdx(repl.first_log_idx()); + } + // The `ReplicateStateResponse` we are processing contains log entries that have been + // committed by the sender and db rows that reflect the state up to the last log sent. + // This leaves us with three possible scenarios for each log entry we in this response: + // + // 1. The log entry affects a row that is also sent in this response. In this case the sender + // has already applied this log entry and we MUST NOT apply it again. + // 2. The log entry affects a row out side the range of rows that has been sent. In this case + // the sender will send that row with this log applied in a later message. We MUST NOT + // apply this log. + // 3. The log entry affects a row in the range that had been sent before this request (less + // than or equal to the current max key of the loading database). The sender will not + // send this row again and we MUST apply the log. + // + // At this point, before we add the new rows to the loading database, if a log entry has + // a backup_id greater than the current max key of the loading database then we are + // in situation (1) or (2) and MUST NOT apply the log. Otherwise we are in situation (3) and + // MUST apply the log. + // + // `MaybeApplyLogToReplicatingDatabase` will apply logs according to this rule. Once + // these logs are selectively applied we can add the rows to the loading database. + for (int i = 0; i < repl.entries_size(); i++) { + const auto& entry = repl.entries(i); + // All of our logs are committed logs, so we allow truncation up to the point where + // we only have our most recent entry in the log. + RETURN_IF_ERROR(log->Append(entry, log->last_idx())); + RETURN_IF_ERROR(MaybeApplyLogToReplicatingDatabase(ctx, entry)); + } + LOG(VERBOSE) << "Now have logs in [" << log->oldest_stored_idx() << ", " << log->last_idx() << "]"; + if (repl.rows_size()) { + + // Ensure that rows are provided in order. We use a pointer to avoid excess + // string copies. By the end of this block, *order will point to the largest + // backup ID, which we can use to set `lexigraphically_largest_row_loaded_into_db`. + auto [last, err] = raft_.loading.db->LoadRowsFromProtos(ctx, repl.rows()); + if (last <= raft_.loading.lexigraphically_largest_row_loaded_into_db) { + return COUNTED_ERROR(Core_ReplicationOutOfOrder); + } + raft_.loading.lexigraphically_largest_row_loaded_into_db = last; + } + return error::OK; +} + +// Apply log entries to the loading database if they are in the database's currently loaded range. +error::Error Core::MaybeApplyLogToReplicatingDatabase(context::Context* ctx, const raft::LogEntry& entry) { + if (raft_.state != svr2::RAFTSTATE_LOADING || + raft_.loading.db.get() == nullptr) { + return COUNTED_ERROR(Core_RaftState); + } else if (raft_.loading.lexigraphically_largest_row_loaded_into_db.empty() || entry.data().size() == 0) { + // We don't want to apply this log to the database, since either we have no rows in the database or this is not a client log. + return error::OK; + } + auto clog = db_protocol_->LogPB(ctx); + if (!clog->ParseFromString(entry.data())) { + return COUNTED_ERROR(Core_ReplicatedLogSerialization); + } + if (raft_.loading.lexigraphically_largest_row_loaded_into_db < db_protocol_->LogKey(*clog)) { + return error::OK; + } + RETURN_IF_ERROR(db_protocol_->ValidateClientLog(*clog)); + raft_.loading.db->Run(ctx, *clog); + return error::OK; +} + +error::Error Core::HandleRequestRaftMembership(context::Context* ctx, const peerid::PeerID& from, e2e::TransactionResponse* resp) { + IDLOG(VERBOSE) << "HandleRequestRaftMembership " << from; + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state != svr2::RAFTSTATE_LOADED_PART_OF_GROUP) { + return COUNTED_ERROR(Core_RaftState); + } + std::string peer_string = from.AsString(); + raft::ReplicaGroup g = raft_.loaded.raft->membership().AsProto(); + for (int i = 0; i < g.replicas_size(); i++) { + if (g.replicas(i).peer_id() == peer_string) { + return COUNTED_ERROR(Core_DuplicateMembershipPeer); + } + } + g.add_replicas()->set_peer_id(peer_string); + auto [loc, err] = raft_.loaded.raft->ReplicaGroupChange(ctx, g); + if (err == error::OK) { + RaftStep(ctx); + resp->mutable_raft_membership_response()->MergeFrom(loc); + } + return err; +} + +error::Error Core::HandleRequestRaftVoting(context::Context* ctx, const peerid::PeerID& from, e2e::TransactionResponse* resp) { + IDLOG(VERBOSE) << "HandleRequestRaftVoting " << from; + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state != svr2::RAFTSTATE_LOADED_PART_OF_GROUP) { + return COUNTED_ERROR(Core_RaftState); + } + if (raft_.loaded.raft->membership().all_replicas().count(from) != 1) { + return COUNTED_ERROR(Core_VotingRequestedForNonMember); + } else if (raft_.loaded.raft->membership().voting_replicas().count(from) != 0) { + return COUNTED_ERROR(Core_VotingRequestedForVotingMember); + } + + // This does not respect the max_voting attribute of the RaftConfig. That's + // fine, though, because the leader will enforce that before accepting this + // change. + raft::ReplicaGroup g = raft_.loaded.raft->membership().AsProto(); + for (int i = 0; i < g.replicas_size(); i++) { + if (g.replicas(i).peer_id() == from.AsString()) { + g.mutable_replicas(i)->set_voting(true); + break; + } + } + auto [loc, err] = raft_.loaded.raft->ReplicaGroupChange(ctx, g); + if (err == error::OK) { + RaftStep(ctx); + resp->mutable_raft_voting_response()->MergeFrom(loc); + } + return err; +} + +error::Error Core::HandleRaftWrite(context::Context* ctx, const std::string& data, e2e::TransactionResponse* resp) { + LOG(VERBOSE) << "HandleRaftWrite"; + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state != svr2::RAFTSTATE_LOADED_PART_OF_GROUP) { + return COUNTED_ERROR(Core_RaftState); + } + if (raft_.loaded.raft->membership().voting_replicas().size() < raft_.loaded.group_config.min_voting_replicas()) { + return COUNTED_ERROR(Core_NotEnoughVotingReplicas); + } + auto [loc, err] = raft_.loaded.raft->ClientRequest(ctx, data); + if (err == error::OK) { + RaftStep(ctx); + resp->mutable_raft_write()->MergeFrom(loc); + } + return err; +} + +void Core::HandleNewTimestamp(context::Context* ctx, const peerid::PeerID& from, uint64_t unix_secs) { + clock_.SetRemoteTime(ctx, from, unix_secs); + MaybeUpdateGroupTime(ctx); +} + +error::Error Core::HandlePeerRequestedRaftRemoval(context::Context* ctx, const peerid::PeerID& from, internal::TransactionID tx) { + IDLOG(VERBOSE) << "HandlePeerRequestedRaftRemoval " << from; + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state != svr2::RAFTSTATE_LOADED_PART_OF_GROUP) { + SendE2EError(ctx, from, tx, COUNTED_ERROR(Core_RaftState)); + return error::OK; + } + std::string peer_string = from.AsString(); + raft::ReplicaGroup g = raft_.loaded.raft->membership().AsProto(); + raft::ReplicaGroup next = g; + next.clear_replicas(); + bool found_peer = false; + for (int i = 0; i < g.replicas_size(); i++) { + if (g.replicas(i).peer_id() == peer_string) { + found_peer = true; + } else { + *next.add_replicas() = g.replicas(i); + } + } + if (!found_peer) { + SendE2EError(ctx, from, tx, COUNTED_ERROR(Core_RemoveNonexistentMember)); + return error::OK; + } + auto [loc, err] = raft_.loaded.raft->ReplicaGroupChange(ctx, next); + if (err != error::OK) { + SendE2EError(ctx, from, tx, err); + return error::OK; + } + peerid::PeerID from_copy = from; + AddLogTransaction(ctx, loc, [this, f = std::move(from_copy), tx]( + context::Context* ctx, + error::Error err, + const raft::LogEntry* entry, + const db::DB::Response* resp) { + SendE2EError(ctx, f, tx, err); + }); + RaftStep(ctx); + return error::OK; +} + +void Core::RaftStep(context::Context* ctx) { + CHECK(raft_.state == svr2::RAFTSTATE_LOADED_PART_OF_GROUP + || raft_.state == svr2::RAFTSTATE_LOADED_REQUESTING_MEMBERSHIP); + RaftSendMessages(ctx); + RaftHandleCommittedLogs(ctx); +} + +void Core::RaftSendMessages(context::Context* ctx) { + // Send out any messages that Raft has for us. + std::vector messages = raft_.loaded.raft->SendableMessages(); + for (size_t i = 0; i < messages.size(); i++) { + std::set send_to; + if (messages[i].to().has_value()) { + send_to.insert(*messages[i].to()); + } else { + send_to = raft_.loaded.raft->peers(); + } + const raft::RaftMessage& raft_msg = messages[i].message(); + for (const auto& peer : send_to) { + auto e2e_msg = ctx->Protobuf(); + e2e_msg->mutable_raft_message()->MergeFrom(raft_msg); + error::Error peer_err = peer_manager_->SendToPeer(ctx, peer, *e2e_msg); + if (peer_err != error::OK) { + // If we've failed here, our peer is probably in a DISCONNECTED state. + // This will be handled eventually by having the peers reset themselves, + // at which point we'll get a new `connected` e2e message, which will + // call Raft's ResetPeer() and restart sends of messages to this peer. + LOG(WARNING) << "failed to generate peer raft message to " << peer << ": " << peer_err; + continue; + } + } + } +} + +void Core::AddLogTransaction(context::Context* ctx, const raft::LogLocation& loc, LogTransactionCallback cb) { + ACQUIRE_LOCK(outstanding_log_transactions_mu_, ctx, lock_core_log_txns); + LogTransaction log_tx = { + .term = loc.term(), + .cb = cb, + .expected_hash_chain = loc.hash_chain(), + }; + outstanding_log_transactions_.emplace(loc.idx(), std::move(log_tx)); +} + +Core::LogTransactionCallback Core::ClientLogTransaction(context::Context* ctx, client::ClientID client_id, internal::TransactionID tx) { + // Record information about this ClientLog message so we can respond to the client later. + return [this, client_id, tx]( + context::Context* ctx, + error::Error err, + const raft::LogEntry* entry, + const db::DB::Response* response) { + if (err == error::Core_LogTransactionCancelled) { + COUNTER(core, client_transaction_cancelled)->Increment(); + LOG(VERBOSE) << "- client " << client_id << " - cancelled"; + ReplyWithError(ctx, tx, COUNTED_ERROR(Client_TransactionCancelled)); + client_manager_->RemoveClient(ctx, client_id); + } else if (err != error::OK) { + COUNTER(core, client_transaction_error)->Increment(); + LOG(VERBOSE) << "- client " << client_id << " - error"; + ReplyWithError(ctx, tx, err); + client_manager_->RemoveClient(ctx, client_id); + } else if (response == nullptr) { + COUNTER(core, client_transaction_invalid)->Increment(); + LOG(VERBOSE) << "- client " << client_id << " - invalid"; + ReplyWithError(ctx, tx, COUNTED_ERROR(Client_TransactionInvalid)); + client_manager_->RemoveClient(ctx, client_id); + } else if ( + client::Client* client = client_manager_->GetClient(ctx, client_id); + client == nullptr) { + COUNTER(core, client_transaction_dne)->Increment(); + LOG(VERBOSE) << "- client " << client_id << " - does_not_exist"; + ReplyWithError(ctx, tx, COUNTED_ERROR(Client_AlreadyClosed)); + client_manager_->RemoveClient(ctx, client_id); + } else if ( + auto [ciphertext, encrypt_err] = client->EncryptResponse(ctx, *response); + encrypt_err != error::OK) { + COUNTER(core, client_transaction_encrypterr)->Increment(); + LOG(VERBOSE) << "- client " << client_id << " - encrypt_fail:" << encrypt_err; + ReplyWithError(ctx, tx, encrypt_err); + client_manager_->RemoveClient(ctx, client_id); + } else { + COUNTER(core, client_transaction_success)->Increment(); + LOG(VERBOSE) << "- client " << client_id << " - success"; + auto enclave_msg = ctx->Protobuf(); + auto resp = enclave_msg->mutable_h2e_response(); + resp->set_request_id(tx); + auto existing_client = resp->mutable_existing_client_reply(); + *existing_client->mutable_data() = std::move(ciphertext); + sender::Send(*enclave_msg); + } + }; +} + +error::Error Core::RaftWriteLogTransaction(context::Context* ctx, const std::string& data, Core::LogTransactionCallback cb) { + ACQUIRE_LOCK(raft_.mu, ctx, lock_core_raft); + if (raft_.state != svr2::RAFTSTATE_LOADED_PART_OF_GROUP) { + return COUNTED_ERROR(Core_RaftState); + } + if (raft_.loaded.raft->is_leader()) { + if (raft_.loaded.raft->membership().voting_replicas().size() < raft_.loaded.group_config.min_voting_replicas()) { + return COUNTED_ERROR(Core_NotEnoughVotingReplicas); + } + // Add the ClientLog message to the Raft log + auto [loc, raft_err] = raft_.loaded.raft->ClientRequest(ctx, data); + if (raft_err != error::OK) { + return raft_err; + } + AddLogTransaction(ctx, loc, cb); + RaftStep(ctx); + } else if (raft_.loaded.raft->leader().has_value()) { + // Forward this ClientLog to the leader to be added to the log + auto txn = ctx->Protobuf(); + txn->set_raft_write(data); + SendE2ETransaction(ctx, *raft_.loaded.raft->leader(), *txn, true, + [this, cb](context::Context* ctx, error::Error err, const e2e::TransactionResponse* resp) { + if (err == error::OK && resp->inner_case() == e2e::TransactionResponse::kStatus) { + err = resp->status(); + } + if (err != error::OK) { + cb(ctx, err, nullptr, nullptr); + return; + } + // Record information about this ClientLog message so we can respond to the client later. + // This replica is responsible for responding to the client (and is the only replica with + // the Noise state that is needed to do that). + if (resp->inner_case() != e2e::TransactionResponse::kRaftWrite) { + cb(ctx, COUNTED_ERROR(Core_IncorrectE2EResponseType), nullptr, nullptr); + return; + } + AddLogTransaction(ctx, resp->raft_write(), cb); + }); + } else { + return COUNTED_ERROR(Core_LeaderUnknown); + } + return error::OK; +} + +void Core::SendTimestamp(context::Context* ctx, peerid::PeerID to, uint64_t unix_secs) { + auto req = ctx->Protobuf(); + req->set_new_timestamp_unix_secs(unix_secs); + SendE2ETransaction( + ctx, to, *req, true, + [unix_secs, to](context::Context* ctx, error::Error err, const e2e::TransactionResponse* resp) { + // Ignore, but log error. + if (err != error::OK) { + LOG(INFO) << "Failed to send timestamp (" << unix_secs << ") to " << to << ": " << err; + } + }); +} + +void Core::SendTimestampToAll(context::Context* ctx) { + auto peers = peer_manager_->ConnectedPeers(ctx); + for (auto peer : peers) { + SendTimestamp(ctx, std::move(peer), clock_.GetLocalTime()); + } + util::Ticks next = std::max(1U, enclave_config(ctx)->send_timestamp_ticks()); + timeout_.SetTimeout(ctx, next, [this](context::Context* ctx) { + SendTimestampToAll(ctx); + }); +} + +error::Error Core::SendE2EError(context::Context* ctx, const peerid::PeerID& from, internal::TransactionID id, error::Error err) { + auto e2e = ctx->Protobuf(); + auto out = e2e->mutable_transaction_response(); + out->set_request_id(id); + out->set_status(err); + if (out->status() != error::OK) { + IDLOG(VERBOSE) << "request " << id << " from " << from << " error: " << err; + } + return peer_manager_->SendToPeer(ctx, from, *e2e); +} + +void Core::RaftHandleCommittedLogs(context::Context* ctx) { + // See if Raft has any committed logs for us. + MEASURE_CPU(ctx, cpu_core_committed_logs); + while (true) { + auto [idx, entry] = raft_.loaded.raft->TakeCommittedLog(); + if (idx == 0) { + // There's no additional logs, we're done! + return; + } + raft_.loaded.db_last_applied_log = idx; + LOG(VERBOSE) << "at db_last_applied_log " << idx; + GAUGE(core, last_index_applied_to_db)->Set(idx); + if (entry.has_membership_change()) { + HandleRaftMembershipChange(ctx, idx, entry.term(), entry.membership_change()); + } + db::DB::Response* response = RaftApplyLogToDatabase(ctx, idx, entry); + // Unless this log contained a valid client transaction, + // [response] will be null at this point. + HandleLogTransactionsForRaftLog(ctx, idx, entry, response); + COUNTER(core, raft_log_applied)->Increment(); + } +} + +void Core::HandleRaftMembershipChange( + context::Context* ctx, + raft::LogIdx idx, + raft::TermId term, + const raft::ReplicaGroup& membership_change) { + switch (raft_.state) { + case svr2::RAFTSTATE_LOADED_PART_OF_GROUP: { + if (!ContainsMe(raft_.loaded.raft->me(), membership_change)) { + LOG(WARNING) << "I've been removed from Raft at index " << idx; + raft_.state = svr2::RAFTSTATE_LOADED_REQUESTING_MEMBERSHIP; + ACQUIRE_LOCK(outstanding_log_transactions_mu_, ctx, lock_core_log_txns); + for (auto iter = outstanding_log_transactions_.begin(); + iter != outstanding_log_transactions_.end(); + iter = outstanding_log_transactions_.erase(iter)) { + const auto& log_tx = iter->second; + log_tx.cb(ctx, COUNTED_ERROR(Core_RemovedFromRaft), nullptr, nullptr); + } + } + } break; + case svr2::RAFTSTATE_LOADED_REQUESTING_MEMBERSHIP: { + if (ContainsMe(raft_.loaded.raft->me(), membership_change)) { + LOG(INFO) << "I've been added to Raft at index " << idx; + raft_.state = svr2::RAFTSTATE_LOADED_PART_OF_GROUP; + } + } break; + default: + CHECK(nullptr == "in HandleRaftMembershipChange but not part of group or requesting membership"); + break; + } +} + +db::DB::Response* Core::RaftApplyLogToDatabase( + context::Context* ctx, + raft::LogIdx idx, + const raft::LogEntry& committed_entry) { + if (committed_entry.data().size() == 0) { + // This is an internal-to-Raft log, we don't need to care. + // These are generated on leader election, and will eventually + // be used for membership changes as well. + return nullptr; + } + auto client_log = db_protocol_->LogPB(ctx); + if (!client_log->ParseFromString(committed_entry.data())) { + LOG(ERROR) << "raft log message does not parse: " << idx; + return nullptr; + } + error::Error validate_err = db_protocol_->ValidateClientLog(*client_log); + if (validate_err != error::OK) { + LOG(ERROR) << "raft log message invalid: " << idx << " - " << validate_err; + return nullptr; + } + return raft_.loaded.db->Run(ctx, *client_log); +} + +void Core::HandleLogTransactionsForRaftLog(context::Context* ctx, raft::LogIdx idx, const raft::LogEntry& entry, const db::DB::Response* response) { + // See if this is a log we should handle. + const char* type = + entry.data().size() == 0 + ? "raft_internal" + : response != nullptr + ? "valid_client" + : "invalid"; + LOG(VERBOSE) << "raft log " << idx << " at term " << entry.term() << " - " << type;; + ACQUIRE_LOCK(outstanding_log_transactions_mu_, ctx, lock_core_log_txns); + auto [iter, upper] = outstanding_log_transactions_.equal_range(idx); + for (; iter != upper; iter = outstanding_log_transactions_.erase(iter)) { + const LogTransaction& log_tx = iter->second; + if (log_tx.term != entry.term()) { + COUNTER(core, log_transactions_cancelled)->Increment(); + log_tx.cb(ctx, COUNTED_ERROR(Core_LogTransactionCancelled), nullptr, nullptr); + } else if (log_tx.expected_hash_chain.size() > 0 // ignore hash chain if length is 0 + && !util::ConstantTimeEquals(log_tx.expected_hash_chain, entry.hash_chain())) { + log_tx.cb(ctx, COUNTED_ERROR(Core_InvalidLogTransactionHashChain), nullptr, nullptr); + } else { + COUNTER(core, log_transactions_success)->Increment(); + log_tx.cb(ctx, error::OK, &entry, response); + } + } +} + +void Core::SendE2ETransaction( + context::Context* ctx, + const peerid::PeerID& to, + const e2e::TransactionRequest& req, + bool with_timeout, + E2ECallback callback) { + ACQUIRE_NAMED_LOCK(lock, e2e_txn_mu_, ctx, lock_core_e2e_txns); + internal::TransactionID tx = ++e2e_txn_id_; + auto e2e = ctx->Protobuf(); + e2e->mutable_transaction_request()->MergeFrom(req); + e2e->mutable_transaction_request()->set_request_id(tx); + error::Error err = peer_manager_->SendToPeer(ctx, to, *e2e); + if (err != error::OK) { + IDLOG(VERBOSE) << "failed to start transaction " << tx << " to " << to << ": " << err; + lock.unlock(); + // This is a problematic codepath right now, as we call the callback inline. + // Sometimes, the callback has to acquire a lock that's already acquired + // by SendE2ETransaction's caller. The optimal approach would be to defer + // this callback to some time when the caller has returned. + callback(ctx, err, nullptr); + return; + } + LOG(VERBOSE) << "successfully started transaction " << tx << " to " << to; + timeout::Cancel tc; + if (with_timeout) { + tc = timeout_.SetTimeout(ctx, enclave_config(ctx)->e2e_txn_timeout_ticks(), + [this, tx, to](context::Context* ctx) { + ACQUIRE_NAMED_LOCK(lock, e2e_txn_mu_, ctx, lock_core_e2e_txns); + auto f = outstanding_e2e_transactions_.find(tx); + if (f == outstanding_e2e_transactions_.end()) return; + LOG(INFO) << "e2e transaction " << tx << "to " << to << " timed out"; + E2ECallback cb = std::move(f->second.callback); + outstanding_e2e_transactions_.erase(f); + lock.unlock(); + cb(ctx, error::Core_E2ETransactionTimeout, nullptr); + }); + } + outstanding_e2e_transactions_[tx] = { + .callback = callback, + .timeout_cancel = tc, + }; +} + +} // namespace svr2::core + diff --git a/enclave/core/core.h b/enclave/core/core.h new file mode 100644 index 0000000..74238f0 --- /dev/null +++ b/enclave/core/core.h @@ -0,0 +1,311 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_CORE_CORE_H__ +#define __SVR2_CORE_CORE_H__ + +#include +#include +#include +#include "proto/enclaveconfig.pb.h" +#include "proto/error.pb.h" +#include "proto/msgs.pb.h" +#include "util/macros.h" +#include "peerid/peerid.h" +#include "peers/peers.h" +#include "context/context.h" +#include "raft/log.h" +#include "raft/raft.h" +#include "client/client.h" +#include "sip/hasher.h" +#include "db/db.h" +#include "core/internal.h" +#include "util/macros.h" +#include "util/ticks.h" +#include "timeout/timeout.h" +#include "groupclock/groupclock.h" + +namespace svr2::core { + +// Core is the core singleton of a running enclave. Each running enclave +// should have exactly one of these, created on initialization. +class Core { + public: + DELETE_COPY_AND_ASSIGN(Core); + + // Receive a message from the host. + error::Error Receive(context::Context* ctx, const UntrustedMessage& msg); + + // Peer ID for this core. + const peerid::PeerID& ID() const { return peer_manager_->ID(); } + + // Create a core from a given config. + static std::pair, error::Error> Create( + context::Context* ctx, + const enclaveconfig::InitConfig& config); + +#ifdef IS_TEST + bool serving() const { + util::unique_lock lock(raft_.mu); + return raft_.state == svr2::RAFTSTATE_LOADED_PART_OF_GROUP; + } + bool leader() const { + util::unique_lock lock(raft_.mu); + return raft_.state == svr2::RAFTSTATE_LOADED_PART_OF_GROUP && raft_.loaded.raft->is_leader(); + } + bool voting() const { + util::unique_lock lock(raft_.mu); + return raft_.state == svr2::RAFTSTATE_LOADED_PART_OF_GROUP && raft_.loaded.raft->voting(); + } + size_t num_voting() const { + util::unique_lock lock(raft_.mu); + return raft_.loaded.raft->membership().voting_replicas().size(); + } + size_t num_members() const { + util::unique_lock lock(raft_.mu); + return raft_.loaded.raft->membership().all_replicas().size(); + } + std::set all_replicas() const { + util::unique_lock lock(raft_.mu); + return raft_.loaded.raft->membership().all_replicas(); + } +#endif + + private: + struct ReplicationPushState { + ReplicationPushState(raft::LogIdx idx, const peerid::PeerID& to, const e2e::TransactionRequest& req) + : logs_from_idx_inclusive(idx), + db_from_key_exclusive(""), + finished_sending(false), + target(to), + tx(req.request_id()), + replication_id(req.replicate_state().replication_id()), + replication_sequence(0), + sent_response(false) {} + + raft::LogIdx logs_from_idx_inclusive; // GUARDED_BY(raft_.mu) + std::string db_from_key_exclusive; // GUARDED_BY(raft_.mu) + bool finished_sending; // GUARDED_BY(raft_.mu) + const peerid::PeerID target; + const internal::TransactionID tx; + const uint64_t replication_id; + uint64_t replication_sequence; // GUARDED_BY(raft_mu) + std::atomic sent_response; + }; + + Core(const enclaveconfig::RaftGroupConfig& group_config); + // Init this core object. This function should be + // called exactly once for each Core object, and sould be the first function + // called subsequent to construction. + error::Error Init( + context::Context* ctx, + const enclaveconfig::EnclaveConfig& config, + util::UnixSecs initial_timestamp_unix_secs); + + //// Top-level callers, called by Receive(), and their subfunctions. + + // Handle a request from the host + error::Error HandleHostToEnclave(context::Context* ctx, const HostToEnclaveRequest& msg); + // Handle a request for a new client + void HandleNewClient(context::Context* ctx, const NewClientRequest& msg, internal::TransactionID tx); + // Handle a message being passed through the host to an existing client + error::Error HandleExistingClient(context::Context* ctx, const ExistingClientRequest& msg, internal::TransactionID tx); + // Request that we create a new raft group from scratch, setting ourselves + // as the sole member and leader. This should be done to seed a new + // Raft, after which we should requst JoinRaft instead. + void HandleCreateNewRaftGroupRequest(context::Context* ctx, internal::TransactionID tx) EXCLUDES(raft_.mu); + // Creates a test account within the Raft DB. + error::Error AddTestAccount(context::Context* ctx, uint32_t i); + // Join an existing Raft group. + void HandleJoinRaft(context::Context* ctx, const JoinRaftRequest& msg, internal::TransactionID tx) EXCLUDES(raft_.mu); + // Given a single seed peer, connect to it and get the existing configs. + void JoinRaftFromFirstPeer(context::Context* ctx) REQUIRES(raft_.mu); + // Replicate all data from our existing peer(s) until we've got a full set of data. + void RequestRaftReplication(context::Context* ctx) REQUIRES(raft_.mu); + // Now that we've got a full set of Raft data (logs+db), set up our local Raft objects. + void PromoteRaftToLoaded(context::Context* ctx) REQUIRES(raft_.mu); + // Request to become a (nonvoting) member of the Raft group we have data for. + void RaftRequestMembership(context::Context* ctx, internal::TransactionID tx) REQUIRES(raft_.mu); + // Refresh attestations for peer and client connections. + error::Error HandleRefreshAttestation(context::Context* ctx, bool rotate_key) EXCLUDES(raft_.mu); + // Get the current status of this replica to be returned to the host. + std::pair HandleGetEnclaveStatus(context::Context* ctx) const EXCLUDES(raft_.mu); + // Handle a host-requested delete of a backup ID. + error::Error HandleHostDatabaseRequest(context::Context* ctx, internal::TransactionID tx, const DatabaseRequest& req); + // Reconfigure the replica with new host-supplied configuration. + error::Error HandleReconfigure(context::Context* ctx, internal::TransactionID tx, const enclaveconfig::EnclaveConfig& req) EXCLUDES(raft_.mu); + // If we're the raft leader, give it up. + void HandleRelinquishLeadership(context::Context* ctx, internal::TransactionID tx) EXCLUDES(raft_.mu); + // Request that this replica be removed from the Raft group. + void HandleHostRequestedRaftRemoval(context::Context* ctx, internal::TransactionID tx) EXCLUDES(raft_.mu); + // Compute and return to the host a hash of the current DB. + error::Error HandleHostHashes(context::Context* ctx, internal::TransactionID tx) EXCLUDES(raft_.mu); + + // Handle the inevitable march of time. + void HandleTimerTick(context::Context* ctx, const TimerTick& tick); + // Update our group-based concept of time. + void MaybeUpdateGroupTime(context::Context* ctx) EXCLUDES(raft_.mu); + // If we're in Raft with some other replicas but don't yet have peer connections + // to them, try to establish them. + void ConnectToRaftMembers(context::Context* ctx) REQUIRES(raft_.mu); + // Return either a nullptr, or a replica config (in scope [ctx]) that + // this instance believes should be the next config for this raft group. + raft::ReplicaGroup* NextReplicaGroup(context::Context* ctx) REQUIRES(raft_.mu); + + // Decode a new message proxied from a peer replica through our host. + error::Error HandlePeerMessage(context::Context* ctx, const UntrustedMessage& msg); + // Handle an EnclaveToEnclaveMessage decoded from the peer message + error::Error HandleE2E(context::Context* ctx, const peerid::PeerID& from, const e2e::EnclaveToEnclaveMessage& msg); + // Handle the case where we've just successfully established a connection to the peer `from` + void HandlePeerConnect(context::Context* ctx, const peerid::PeerID& from); + // Handle an enclave-to-enclave transaction requested by a remote peer client. + error::Error HandleE2ETransaction(context::Context* ctx, const peerid::PeerID& from, const e2e::TransactionRequest& msg); + // Handle a request to replicate our state (Raft DB and logs) to `from` + error::Error HandleReplicateStateRequest(context::Context* ctx, const peerid::PeerID& from, const e2e::TransactionRequest& req) EXCLUDES(raft_.mu); + // Send the next set of replicating state to `from`, in the form of a ReplicateStatePush E2E transaction. + void SendNextReplicationState(context::Context* ctx, std::shared_ptr push_state) REQUIRES(raft_.mu); + // Handle receipt of the next piece of state from a server that's replicating their state to us. + error::Error HandleReplicateStatePush(context::Context* ctx, const e2e::ReplicateStatePush& push) EXCLUDES(raft_.mu); + // Handle applying replicated state to an as-yet-unfinished Raft database (in raft_.loading.db) + error::Error MaybeApplyLogToReplicatingDatabase(context::Context* ctx, const raft::LogEntry& entry) REQUIRES(raft_.mu); + // Handle a request to join our Raft group. + error::Error HandleRequestRaftMembership(context::Context* ctx, const peerid::PeerID& from, e2e::TransactionResponse* resp) EXCLUDES(raft_.mu); + // Handle a request to become a voting member of our Raft group. + error::Error HandleRequestRaftVoting(context::Context* ctx, const peerid::PeerID& from, e2e::TransactionResponse* resp) EXCLUDES(raft_.mu); + // Handle a request to write a client log into our Raft group. + error::Error HandleRaftWrite(context::Context* ctx, const std::string& data, e2e::TransactionResponse* resp) EXCLUDES(raft_.mu); + // Handle receipt of a new timestamp supplied by `from`. + void HandleNewTimestamp(context::Context* ctx, const peerid::PeerID& from, uint64_t unix_secs); + // Handle a request to remove the sender from Raft. + error::Error HandlePeerRequestedRaftRemoval(context::Context* ctx, const peerid::PeerID& from, internal::TransactionID tx) EXCLUDES(raft_.mu); + + //// Common or utility functions called by multiple handlers. + + // RaftStep handles sending any outstanding raft messages and applying + // any committed transactions. It should be called after any change to + // Raft state, including receiving a raft message, requesting a client + // log, etc. + void RaftStep(context::Context* ctx) REQUIRES(raft_.mu); + // Send any messages buffered by raft to our peers. + void RaftSendMessages(context::Context* ctx) REQUIRES(raft_.mu); + // See if any logs have been committed since last we looked, and apply them to our + // internal state if there are some. + void RaftHandleCommittedLogs(context::Context* ctx) REQUIRES(raft_.mu); + // Handle a Raft log that changes group membership, which may either + // add us to a group or remove us from our group. + void HandleRaftMembershipChange( + context::Context* ctx, + raft::LogIdx idx, + raft::TermId term, + const raft::ReplicaGroup& membership_change) REQUIRES(raft_.mu); + // Attempt to apply the committed log entry to the db::DB. On success, + // return a db::DB::Response (owned by [ctx]). On failure, return + // nullptr. Regardless, [committed_entry] is considered to be successfully + // committed to the database after this call. + db::DB::Response* RaftApplyLogToDatabase( + context::Context* ctx, + raft::LogIdx idx, + const raft::LogEntry& committed_entry) REQUIRES(raft_.mu); + // HandleLogTransactionsForRaftLog handles any queued log + // transactions in outstanding_log_transactions_ associated with the given + // log entry. + void HandleLogTransactionsForRaftLog( + context::Context* ctx, + raft::LogIdx idx, + const raft::LogEntry& entry, + // response may be null in the case where we failed to parse it from the Raft log. + const db::DB::Response* response) REQUIRES(raft_.mu); + + // Send a local timestamp to remote peer `to`. + void SendTimestamp(context::Context* ctx, peerid::PeerID to, uint64_t unix_seconds); + // Send our local timestamp to all connected peers. + void SendTimestampToAll(context::Context* ctx); + + static error::Error ValidateConfig(const enclaveconfig::EnclaveConfig& config); + static error::Error ValidateConfigChange(const enclaveconfig::EnclaveConfig& old_config, const enclaveconfig::EnclaveConfig& new_config); + + mutable util::mutex config_mu_; + enclaveconfig::EnclaveConfig enclave_config_ GUARDED_BY(config_mu_); + const enclaveconfig::RaftGroupConfig raft_config_template_; + + enclaveconfig::EnclaveConfig* enclave_config(context::Context* ctx) const EXCLUDES(config_mu_); + + std::unique_ptr peer_manager_; + std::unique_ptr client_manager_; + + internal::Raft raft_; + const enclaveconfig::DatabaseVersion db_version_; + const db::DB::Protocol* const db_protocol_; + groupclock::Clock clock_; + + // Handle timeouts. + timeout::Timeout timeout_; + + typedef std::function LogTransactionCallback; + // When we submit a transaction to the log, we get back the idx/term + // at which it should be committed. Later, we see that LogIdx go by, and + // if the term matches, we're in business and can execute the transaction. + // If the term does _not_ match, then this transaction was overridden or + // cancelled by a Raft election. + struct LogTransaction { + raft::TermId term; + LogTransactionCallback cb; + // If the expected_hash_chain is the empty string it is ignored. Otherwise + // if the hash_chain for this long index does not match the + // expected_hash_chain the transaction is aborted. + std::string expected_hash_chain; + }; + // This is a multimap because, if the leader changes, we could possibly + // have multiple transactions mapped to the same log index (with different + // terms). + util::mutex outstanding_log_transactions_mu_; + std::unordered_multimap outstanding_log_transactions_ GUARDED_BY(outstanding_log_transactions_mu_); + // Adds a callback to be run when the log at the given location has been commited. + // NOTE: when cb is called, raft_.mu will be locked already. + void AddLogTransaction(context::Context* ctx, const raft::LogLocation& loc, LogTransactionCallback cb) EXCLUDES(outstanding_log_transactions_mu_); + error::Error RaftWriteLogTransaction(context::Context* ctx, const std::string& data, LogTransactionCallback cb) EXCLUDES(raft_.mu); + LogTransactionCallback ClientLogTransaction(context::Context* ctx, client::ClientID client_id, internal::TransactionID tx); + + // State for transactions that this enclave sends to other enclaves. + // Transactions are kept locally as a map of callbacks (of type + // E2ECallback). On receipt of a response, we look for the appropriate + // callback in the outstanding_e2e_transactions_ map and call it. + util::mutex e2e_txn_mu_ ACQUIRED_AFTER(raft_.mu); + internal::TransactionID e2e_txn_id_ GUARDED_BY(e2e_txn_mu_); + typedef std::function E2ECallback; + struct E2ECall { + E2ECallback callback; + timeout::Cancel timeout_cancel; + }; + std::unordered_map outstanding_e2e_transactions_ GUARDED_BY(e2e_txn_mu_); + // Send an Enclave-to-enclave transaction. + void SendE2ETransaction( + context::Context* ctx, + const peerid::PeerID& to, + const e2e::TransactionRequest& req, + bool with_timeout, // If false, allow to run forever. + E2ECallback callback) EXCLUDES(e2e_txn_mu_); + error::Error SendE2EError(context::Context* ctx, const peerid::PeerID& from, internal::TransactionID id, error::Error err); +}; + +} // namespace svr2::core + +#endif // __SVR2_CORE_CORE_H__ diff --git a/enclave/core/coretest/replicagroup.cc b/enclave/core/coretest/replicagroup.cc new file mode 100644 index 0000000..7ee02d7 --- /dev/null +++ b/enclave/core/coretest/replicagroup.cc @@ -0,0 +1,145 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "replicagroup.h" + +#include + +namespace svr2::core::test { + +bool ReplicaGroup::IsQuiet() const { + for (const auto& [peer_id, core] : peers_by_id_) { + if (core->active() && core->input_messages().size() > 0) return false; + } + return true; +} + +error::Error ReplicaGroup::SendMessage(peerid::PeerID to, PeerMessage msg) { + peerid::PeerID from; + from.FromString(msg.peer_id()); + PartitionID to_partition = partition_[to]; + PartitionID from_partition = partition_[from]; + + if (to_partition == from_partition) { + LOG(VERBOSE) << "#####################################################"; + LOG(VERBOSE) << "# peer message to " << to << " from " << from; + RETURN_IF_ERROR(peers_by_id_[to]->AddPeerMessage(std::move(msg))); + } else { + LOG(VERBOSE) << "#---------------------------------------------------#"; + LOG(VERBOSE) << "# BLOCKED peer message to " << to << " from " << from; + blocked_peer_messages_[to].emplace_back(std::move(msg)); + } + return error::OK; +} + +error::Error ReplicaGroup::PassMessagesUntilQuiet(PartitionID pid) { + error::Error err = error::OK; + while (!IsQuiet()) { + for (auto& core : peers_) { + if (pid == FULL_GROUP_PARTITION_ID || + partition_.find(core->ID())->second == pid) { + RETURN_IF_ERROR(core->ProcessIncomingMessage()); + RETURN_IF_ERROR(core->ForwardOutgoingMessages()); + } + } + } + return err; +} + +error::Error ReplicaGroup::ProcessAllH2EResponses(PartitionID pid) { + for (auto& core : peers_) { + if (pid == FULL_GROUP_PARTITION_ID || + partition_.find(core->ID())->second == pid) { + RETURN_IF_ERROR(core->ProcessAllH2EResponses()); + } + } + return error::OK; +} + +error::Error ReplicaGroup::TickAllTimers(PartitionID pid) { + for (auto& [peer_id, core] : peers_by_id_) { + if (pid == FULL_GROUP_PARTITION_ID || + partition_.find(peer_id)->second == pid) { + RETURN_IF_ERROR(core->TimerTick()); + RETURN_IF_ERROR(core->ProcessIncomingMessage()); + } + } + + for (auto& [peer_id, core] : peers_by_id_) { + if (pid == FULL_GROUP_PARTITION_ID || + partition_.find(peer_id)->second == pid) { + RETURN_IF_ERROR(core->ForwardOutgoingMessages()); + } + } + return error::OK; +} + +void ReplicaGroup::TickTock(bool ignore_h2e_errors) { + TickTock(FULL_GROUP_PARTITION_ID, ignore_h2e_errors); +} + +void ReplicaGroup::TickTock(PartitionID pid, bool ignore_h2e_errors) { + ASSERT_EQ(error::OK, TickAllTimers(pid)); + ASSERT_EQ(error::OK, PassMessagesUntilQuiet()); + auto err = ProcessAllH2EResponses(); + if (!ignore_h2e_errors) ASSERT_EQ(error::OK, err); +} + +void ReplicaGroup::add_peer() { + peers_.emplace_back(std::make_unique(*this)); + auto peer = peers_.rbegin()->get(); + peers_by_id_[peer->ID()] = peer; +} + +void ReplicaGroup::Init(enclaveconfig::InitConfig cfg, + size_t initial_voting, + size_t initial_nonvoting, size_t initial_nonmember) { + init_config_ = cfg; + enclave_config_ = cfg.enclave_config(); + size_t num_cores = initial_voting + initial_nonvoting + initial_nonmember; + LOG(INFO) << "ADDING " << num_cores << " PEERS"; + for (size_t i = 0; i < num_cores; ++i) { + add_peer(); + } + + LOG(INFO) << "CREATING RAFT"; + ASSERT_EQ(error::OK, peers_[0]->CreateNewRaftGroup()); + ASSERT_EQ(error::OK, PassMessagesUntilQuiet()); + for (size_t i = 1; i < initial_voting + initial_nonvoting; ++i) { + LOG(INFO) << "JOINING " << i << " of " << (initial_nonvoting + initial_voting); + // request to join raft from the previous peer (so not always the leader) + ASSERT_EQ(error::OK, peers_[i]->JoinRaft(peers_[i - 1]->ID())); + ASSERT_EQ(error::OK, PassMessagesUntilQuiet()); + CHECK(peers_[i]->serving()); + } + + for (size_t i = 1; i < initial_voting; ++i) { + LOG(INFO) << "VOTING " << i << " of " << initial_voting; + ASSERT_EQ(error::OK, peers_[i]->RequestVoting()); + ASSERT_EQ(error::OK, PassMessagesUntilQuiet()); + } + + std::vector partition_members; + for (const auto& peer : peers_) { + auto peer_id = peer->ID(); + partition_[peer_id] = 1; + partition_members.emplace_back(std::move(peer_id)); + } + partition_members_.emplace(std::make_pair(1, partition_members)); + + ASSERT_EQ(error::OK, PassMessagesUntilQuiet()); +} +void ReplicaGroup::ForwardBlockedMessages() { + for (auto&& [peer_id, msgs] : blocked_peer_messages_) { + for (auto&& msg : msgs) { + peerid::PeerID from; + from.FromString(msg.peer_id()); + LOG(VERBOSE) << "#******************************************#"; + LOG(VERBOSE) << "# Forwarding blocked peer message to " << peer_id + << " from " << from; + peers_by_id_[peer_id]->AddPeerMessage(std::move(msg)); + } + } +} + +}; // namespace svr2::core::test diff --git a/enclave/core/coretest/replicagroup.h b/enclave/core/coretest/replicagroup.h new file mode 100644 index 0000000..ec20286 --- /dev/null +++ b/enclave/core/coretest/replicagroup.h @@ -0,0 +1,249 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_CORE_CORETEST_REPLICAGROUP_H__ +#define __SVR2_CORE_CORETEST_REPLICAGROUP_H__ + +#include +#include +#include + +#include "core/core.h" +#include "peerid/peerid.h" +#include "testingcore.h" +#include "util/macros.h" + +namespace svr2::core::test { +using PartitionID = uint32_t; +using TestingCoreMap = std::map; +using PartitionMap = std::map; +using ReversePartitionMap = std::map>; + +template +std::pair LargestPartition( + const std::map &partition) { + std::map counts; + + size_t max_count{0}; + PartitionID largest_partition{0}; + for (const auto &[key, val] : partition) { + counts[val]++; + if (counts[val] > max_count) { + max_count = counts[val]; + largest_partition = val; + } + } + return std::make_pair(largest_partition, max_count); +} + +class ReplicaGroup { + // This PartitionID represents the full replica group and is used + // internally to override an existing partition. + static const PartitionID FULL_GROUP_PARTITION_ID = UINT32_MAX; + + public: + ReplicaGroup() {} + // This is not copyable because `peers_` is not copyable + DELETE_COPY_AND_ASSIGN(ReplicaGroup); + + const TestingCore *get_core(size_t i) const { + CHECK(i < peers_.size()); + return peers_[i].get(); + } + + TestingCore *get_core(size_t i) { + CHECK(i < peers_.size()); + return peers_[i].get(); + } + + TestingCore *get_leader_core() { return get_core(GroupLeaderIndex()); } + const TestingCore *get_leader_core() const { + return get_core(GroupLeaderIndex()); + } + TestingCore *get_voting_nonleader_core() { + auto peer = std::find_if(peers_.cbegin(), peers_.cend(), [](const auto &p) { + return p->voting() && !p->leader(); + }); + return peer != peers_.cend() ? peer->get() : nullptr; + } + + size_t partition_size(size_t i) const { + auto id = peers_[i]->ID(); + PartitionID part_id = partition_.find(id)->second; + return partition_members_.find(part_id)->second.size(); + } + + enclaveconfig::EnclaveConfig get_enclave_config() const { + return enclave_config_; + } + enclaveconfig::InitConfig get_init_config() const { + return init_config_; + } + + size_t num_voting() const { return get_leader_core()->num_voting(); } + + size_t num_serving() const { return get_leader_core()->num_serving(); } + + /*** + * Creates and initializes TestingCores with given configuration. The first + * `initial_voting` items in the returned vector will be accepted voting + * members, the next `initial_nonvoting` will be up-to-date non-voting + * members, and the rest will be connected non-members + */ + void Init(enclaveconfig::InitConfig cfg, + size_t initial_voting, + size_t initial_nonvoting, size_t initial_nonmember); + /** + * @brief Check whether any replicas have messages to process + * + * @return true Some replica has a message to process + * @return false No messages to process + */ + bool IsQuiet() const; + + /** + * @brief Get the ID of the group leader if a quorum with a leader exists. + * + * @return peerid::PeerID A valid ID if a quorum is possible and a leader + * exists + */ + peerid::PeerID GroupLeader() const { + auto index = GroupLeaderIndex(); + return index < peers_.size() ? peers_[index]->ID() : peerid::PeerID(); + } + + /** + * @brief Get the index of the group leader if a quorum with a leader exists. + * + * @return size_t SIZE_MAX if no leader is possible, index of the leader + * otherwise. + */ + size_t GroupLeaderIndex() const { + auto [largest_partition, partition_size] = LargestPartition(partition_); + auto found = std::find_if( + peers_.cbegin(), peers_.cend(), + [this, largest_partition = largest_partition](const auto &p) { + return p->leader() && p->active() && + partition_.find(p->ID())->second == largest_partition; + }); + return found - peers_.cbegin(); + } + /** + * @brief Find ID of group leader in a peer's partition + * + * @param peer_id ID of peer looking for reachable leader + * @return peerid::PeerID ID of a replica that (1) believes it is leader and + * (2) is in same partition as peer_id OR, if not found, returns invalid + * PeerID. + */ + peerid::PeerID GroupLeaderInPartition(peerid::PeerID peer_id) const { + auto found = std::find_if(peers_.cbegin(), peers_.cend(), + [this, peer_id](const auto &p) { + return p->leader() && p->active() && + partition_.find(p->ID())->second == + partition_.find(peer_id)->second; + }); + return found == peers_.cend() ? peerid::PeerID() : (*found)->ID(); + } + /** + * @brief Find index of group leader in a peer's partition + * + * @param peer_id ID of peer looking for reachable leader + * @return size_t of a replica that (1) believes it is leader and (2) is + * in same partition as peer_id OR, if not found, returns peers_.size(). + */ + size_t GroupLeaderIndexInPartition(peerid::PeerID peer_id) const { + auto found = std::find_if(peers_.cbegin(), peers_.cend(), + [this, peer_id](const auto &p) { + return p->leader() && p->active() && + partition_.find(p->ID())->second == + partition_.find(peer_id)->second; + }); + return found - peers_.cbegin(); + } + + /** + * @brief Send a message (through the `replica_group_` fabric) to a peer. + * + * @param to Recipient ID + * @param msg + * @return error::Error Error from `TestingCore::AddPeerMessage` or + * `error::OK`. + */ + error::Error SendMessage(peerid::PeerID to, PeerMessage msg); + /** + * @brief All peers in a partition process incoming messages then forward + * resulting outgoing messages until there are no more incoming messages to + * process + * + * @param pid Optional partition ID. If not provided then partitioning is + * ignored and it applies to full group + * @return error::Error + */ + error::Error PassMessagesUntilQuiet( + PartitionID pid = FULL_GROUP_PARTITION_ID); + /** + * @brief All peers in a partition process all responses from enclaves to + * hosts. + * + * @param pid Optional partition ID. If not provided then partitioning is + * ignored and it applies to full group + * @return error::Error returns any error from a HostToEnclaveResponse + */ + error::Error ProcessAllH2EResponses( + PartitionID pid = FULL_GROUP_PARTITION_ID); + /** + * @brief All peers in a partition get a timer tick, process it, then forward + * any outgoung messages + * + * @param pid + * @return error::Error + */ + error::Error TickAllTimers(PartitionID pid = FULL_GROUP_PARTITION_ID); + /** + * @brief Tick all timers, pass messages until quiet, and then optionally + * check to see if any errors came back in the HostToEnclaveResponses + * + * @param ignore_h2e_errors + */ + void TickTock(bool ignore_h2e_errors); + void TickTock(PartitionID pid, bool ignore_h2e_errors); + + void CreatePartition(std::map partition) { + partition_.clear(); + partition_members_.clear(); + + // map the array indices to PeerIDs + for (auto [idx, partition_id] : partition) { + auto peer_id = get_core(idx)->ID(); + partition_[peer_id] = partition_id; + partition_members_[partition_id].emplace_back(peer_id); + } + } + + void ClearPartition() { + partition_.clear(); + partition_members_.clear(); + for (const auto &peer : peers_) { + partition_[peer->ID()] = 1; + partition_members_[1].emplace_back(peer->ID()); + } + } + + void ForwardBlockedMessages(); + void ClearBlockedMessages() { blocked_peer_messages_.clear(); } + + private: + void add_peer(); + enclaveconfig::EnclaveConfig enclave_config_; + enclaveconfig::InitConfig init_config_; + std::vector> peers_; + + TestingCoreMap peers_by_id_; + PartitionMap partition_; + ReversePartitionMap partition_members_; + std::map> blocked_peer_messages_; +}; + +}; // namespace svr2::core::test +#endif // __SVR2_CORE_CORETEST_REPLICAGROUP_H__ diff --git a/enclave/core/coretest/testingclient.cc b/enclave/core/coretest/testingclient.cc new file mode 100644 index 0000000..f14dcf2 --- /dev/null +++ b/enclave/core/coretest/testingclient.cc @@ -0,0 +1,184 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "testingclient.h" + +#include +#include + +#include "testingcore.h" +#include "util/bytes.h" + +#define NOISE_OK(x) \ + do { \ + int out = (x); \ + if (out != NOISE_ERROR_NONE) { \ + char buf[64]; \ + noise_strerror(out, buf, sizeof(buf)); \ + ASSERT_EQ(out, NOISE_ERROR_NONE) << "Noise error: " << buf; \ + } \ + } while (0) + +namespace svr2::core::test { + +using svr2::util::ByteArrayToString; + +TestingClient::TestingClient(TestingCore& core, const std::string& authenticated_id) + : core_(core), + client_authenticated_id_(authenticated_id), + hs_(noise::WrapHandshakeState(nullptr)), + tx_(noise::WrapCipherState(nullptr)), + rx_(noise::WrapCipherState(nullptr)) {} + +void TestingClient::RequestHandshake() { + state_ = State::HANDSHAKING; + ASSERT_EQ(error::OK, core_.NewClientRequest(this, client_authenticated_id_)); + NoiseHandshakeState* hsp; + NOISE_OK(noise_handshakestate_new_by_id(&hsp, &client::client_protocol, + NOISE_ROLE_INITIATOR)); + hs_ = noise::WrapHandshakeState(hsp); +} + +void TestingClient::RequestBackup(SecretData data, PIN pin, uint32_t tries) { + LOG(INFO) << "sending backup request"; + + client::Request req; + auto b = req.mutable_backup(); + b->set_data(ByteArrayToString(data)); + b->set_pin(ByteArrayToString(pin)); + b->set_max_tries(tries); + + // serialize and encrypt + std::string req_str; + ASSERT_TRUE(req.SerializeToString(&req_str)); + auto [ciphertext, encrypt_err] = noise::Encrypt(tx_.get(), req_str); + ASSERT_EQ(error::OK, encrypt_err); + ASSERT_EQ(error::OK, + core_.ExistingClientRequest(this, client_id_, ciphertext)); + state_ = State::AWAITING_BACKUP; +} + +void TestingClient::RequestExpose(SecretData data) { + LOG(INFO) << "sending expose request"; + + client::Request req; + auto b = req.mutable_expose(); + b->set_data(ByteArrayToString(data)); + + // serialize and encrypt + std::string req_str; + ASSERT_TRUE(req.SerializeToString(&req_str)); + auto [ciphertext, encrypt_err] = noise::Encrypt(tx_.get(), req_str); + ASSERT_EQ(error::OK, encrypt_err); + ASSERT_EQ(error::OK, + core_.ExistingClientRequest(this, client_id_, ciphertext)); + state_ = State::AWAITING_AVAILABLE; +} + +void TestingClient::RequestRestore(PIN pin) { + LOG(INFO) << "sending restore request"; + + client::Request req; + auto b = req.mutable_restore(); + b->set_pin(ByteArrayToString(pin)); + + // serialize and encrypt + std::string req_str; + ASSERT_TRUE(req.SerializeToString(&req_str)); + auto [ciphertext, encrypt_err] = noise::Encrypt(tx_.get(), req_str); + ASSERT_EQ(error::OK, encrypt_err); + ASSERT_EQ(error::OK, + core_.ExistingClientRequest(this, client_id_, ciphertext)); + state_ = State::AWAITING_RESTORE; +} + +void TestingClient::HandleNewClientReply(NewClientReply ncr) { + client_id_ = ncr.client_id(); + ASSERT_GT(client_id_, 0ul); + LOG(VERBOSE) << "new client " << client_id_; + + auto hsp = hs_.get(); + auto hs_msg = ncr.handshake_start(); + NOISE_OK(noise_dhstate_set_public_key( + noise_handshakestate_get_remote_public_key_dh(hsp), + noise::StrU8Ptr(hs_msg.test_only_pubkey()), + hs_msg.test_only_pubkey().size())); + + NOISE_OK(noise_handshakestate_start(hsp)); + ASSERT_EQ(NOISE_ACTION_WRITE_MESSAGE, noise_handshakestate_get_action(hsp)); + + // Now pass a message to complete the handshake + std::string data; + data.resize(noise::HANDSHAKE_INIT_SIZE, '\0'); + NoiseBuffer write_buf = noise::BufferOutputFromString(&data); + NOISE_OK(noise_handshakestate_write_message(hsp, &write_buf, nullptr)); + data.resize(write_buf.size, '\0'); + + core_.ExistingClientRequest(this, client_id_, data); + // now we wait for the existing client reply to finish the handshake +} + +void TestingClient::FinishHandshake(ExistingClientReply ecr) { + LOG(VERBOSE) << "finish handshake client: " << client_id_; + auto hsp = hs_.get(); + NoiseCipherState* txp; + NoiseCipherState* rxp; + + ASSERT_EQ(NOISE_ACTION_READ_MESSAGE, noise_handshakestate_get_action(hsp)); + NoiseBuffer read_buf = noise::BufferInputFromString(ecr.mutable_data()); + NOISE_OK(noise_handshakestate_read_message(hsp, &read_buf, nullptr)); + ASSERT_EQ(NOISE_ACTION_SPLIT, noise_handshakestate_get_action(hsp)); + NOISE_OK(noise_handshakestate_split(hsp, &txp, &rxp)); + + tx_ = noise::WrapCipherState(txp); + rx_ = noise::WrapCipherState(rxp); + state_ = State::READY; +} + +void TestingClient::DecryptClientReply(ExistingClientReply ecr, + client::Response* rsp) { + auto [plaintext, decrypt_err] = noise::Decrypt(rx_.get(), ecr.data()); + ASSERT_EQ(error::OK, decrypt_err); + + ASSERT_TRUE(rsp->ParseFromString(plaintext)); +} + +void TestingClient::HandleBackupResponse(ExistingClientReply ecr) { + client::Response response; + DecryptClientReply(ecr, &response); + ASSERT_EQ(response.inner_case(), client::Response::kBackup); + backup_response_ = response.backup(); + state_ = State::BACKUP_READY; +} +void TestingClient::HandleExposeResponse(ExistingClientReply ecr) { + client::Response response; + DecryptClientReply(ecr, &response); + ASSERT_EQ(response.inner_case(), client::Response::kExpose); + expose_response_ = response.expose(); + state_ = State::AVAILABLE_READY; +} +void TestingClient::HandleRestoreResponse(ExistingClientReply ecr) { + client::Response response; + DecryptClientReply(ecr, &response); + ASSERT_EQ(response.inner_case(), client::Response::kRestore); + restore_response_ = response.restore(); + state_ = State::RESTORE_READY; +} + +void TestingClient::HandleExistingClientReply(ExistingClientReply ecr) { + LOG(VERBOSE) << "state_: " + << static_cast::type>(state_); + switch (state_) { + case State::HANDSHAKING: + return FinishHandshake(ecr); + case State::AWAITING_BACKUP: + return HandleBackupResponse(ecr); + case State::AWAITING_RESTORE: + return HandleRestoreResponse(ecr); + case State::AWAITING_AVAILABLE: + return HandleExposeResponse(ecr); + default: + CHECK(false); + } +} +}; // namespace svr2::core::test diff --git a/enclave/core/coretest/testingclient.h b/enclave/core/coretest/testingclient.h new file mode 100644 index 0000000..a7a2294 --- /dev/null +++ b/enclave/core/coretest/testingclient.h @@ -0,0 +1,81 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_CORE_CORETEST_CLIENT_H__ +#define __SVR2_CORE_CORETEST_CLIENT_H__ + +#include +#include + +#include "db/db.h" // for BACKUP_ID_SIZE +#include "noise/noise.h" +#include "proto/client.pb.h" + +namespace svr2::core::test { +class TestingCore; + +class TestingClient { + public: + using PIN = std::array; + using SecretData = std::array; + + client::BackupResponse* get_backup_response() { + return state_ == State::BACKUP_READY ? &backup_response_ : nullptr; + } + + client::RestoreResponse* get_restore_response() { + return state_ == State::RESTORE_READY ? &restore_response_ : nullptr; + } + + client::ExposeResponse* get_expose_response() { + return state_ == State::AVAILABLE_READY ? &expose_response_ : nullptr; + } + + // These functions return void so that we can use gtest assertions inside + // them. (gtest asertions that generate a fatal failure can only be used with + // void-returning functions: + // https://chromium.googlesource.com/external/github.com/google/googletest/+/HEAD/docs/advanced.md#assertion-placement) + void RequestHandshake(); + void RequestBackup(SecretData data, PIN pin, uint32_t tries); + void RequestExpose(SecretData data); + void RequestRestore(PIN pin); + + void HandleNewClientReply(NewClientReply ncr); + void HandleExistingClientReply(ExistingClientReply ecr); + + TestingClient(TestingCore& core, const std::string& authenticated_id); + + private: + enum class State { + NO_HANDSHAKE, + HANDSHAKING, + READY, + AWAITING_BACKUP, + AWAITING_RESTORE, + AWAITING_AVAILABLE, + BACKUP_READY, + RESTORE_READY, + AVAILABLE_READY + }; + void FinishHandshake(ExistingClientReply ecr); + void HandleBackupResponse(ExistingClientReply ecr); + void HandleExposeResponse(ExistingClientReply ecr); + void HandleRestoreResponse(ExistingClientReply ecr); + void DecryptClientReply(ExistingClientReply ecr, client::Response* rsp); + + TestingCore& core_; + std::string client_authenticated_id_; + uint64_t client_id_{0}; + State state_{State::NO_HANDSHAKE}; + noise::HandshakeState hs_; + noise::CipherState tx_; + noise::CipherState rx_; + + client::BackupResponse backup_response_; + client::RestoreResponse restore_response_; + client::ExposeResponse expose_response_; +}; + +}; // namespace svr2::core::test + +#endif // __SVR2_CORE_CORETEST_CLIENT_H__ diff --git a/enclave/core/coretest/testingcore.cc b/enclave/core/coretest/testingcore.cc new file mode 100644 index 0000000..414fd1b --- /dev/null +++ b/enclave/core/coretest/testingcore.cc @@ -0,0 +1,290 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "testingcore.h" + +#include + +#include "util/bytes.h" + +#include "replicagroup.h" +#include "testingclient.h" + +namespace svr2::core::test { + +TestingCore::TestingCore(ReplicaGroup& replica_group) + : replica_group_(replica_group) { + context::Context ctx; + enclaveconfig::InitConfig cfg = replica_group.get_init_config(); + cfg.set_initial_timestamp_unix_secs(timer_secs_); + auto [core, err] = Core::Create(&ctx, cfg); + if (err != error::OK) { + LOG(ERROR) << "Could not create core: " << err; + CHECK(false); + } + core_ = std::move(core); +} + +error::Error TestingCore::ProcessIncomingMessage() { + error::Error result = error::OK; + if (!active() || input_messages_.empty()) { + return result; + } + + // send the commands and other messages to the enclave + LOG(VERBOSE) << "Core " << ID() << " processing first of " + << input_messages_.size() << " messages"; + context::Context ctx; + + // take the input message + auto msg = std::move(input_messages_.front()); + input_messages_.pop_front(); + auto err = core_->Receive(&ctx, msg); + if (err != error::OK) { + // clear the messages and return error + env::test::SentMessages(); + return err; + } + + // get the responses + auto response_msgs = env::test::SentMessages(); + + // process according to type + peerid::PeerID to; + PeerMessage peer_msg; + for (auto& response : response_msgs) { + switch (response.inner_case()) { + case EnclaveMessage::kPeerMessage: + peer_msg = std::move(*response.mutable_peer_message()); + + // read who this message is *to* + to.FromString(peer_msg.peer_id()); + + // Now reset the peer_id in the message to our ID so the + // recipient knows who it is *from* + ID().ToString(peer_msg.mutable_peer_id()); + peer_messages_out_[to].emplace_back(std::move(peer_msg)); + break; + case EnclaveMessage::kH2EResponse: + h2e_responses_out_.emplace_back(response.h2e_response()); + break; + default: + CHECK(false); + } + } + return error::OK; +} + +error::Error TestingCore::ProcessAllIncomingMessages() { + while (!input_messages_.empty()) { + RETURN_IF_ERROR(ProcessIncomingMessage()); + } + return error::OK; +} + +error::Error TestingCore::ProcessNextH2EResponse() { + auto h2e_response = std::move(h2e_responses_out_.front()); + h2e_responses_out_.pop_front(); + auto request_id = h2e_response.request_id(); + auto cl = open_client_requests_[request_id]; + switch (h2e_response.inner_case()) { + case HostToEnclaveResponse::kStatus: + if (error::OK != h2e_response.status()) { + LOG(DEBUG) << ID() << " response for request " << request_id << " error: " << h2e_response.status(); + return h2e_response.status(); + } + break; + case HostToEnclaveResponse::kNewClientReply: + cl->HandleNewClientReply(h2e_response.new_client_reply()); + break; + case HostToEnclaveResponse::kExistingClientReply: + cl->HandleExistingClientReply(h2e_response.existing_client_reply()); + break; + case HostToEnclaveResponse::kGetEnclaveStatusReply: + break; + default: + CHECK(false); + } + return error::OK; +} + +error::Error TestingCore::ProcessAllH2EResponses() { + while (!h2e_responses_out_.empty()) { + RETURN_IF_ERROR(ProcessNextH2EResponse()); + } + return error::OK; +} + +error::Error TestingCore::AddPeerMessage(PeerMessage&& peer_message) { + if (state_ == State::ACTIVE || state_ == State::PAUSED_SAVE_MSGS) { + peerid::PeerID other_id; + other_id.FromString(peer_message.peer_id()); + LOG(VERBOSE) << " core " << ID() << " receiving message from " << other_id; + ::svr2::UntrustedMessage req; + *req.mutable_peer_message() = std::move(peer_message); + input_messages_.emplace_back(std::move(req)); + } + return error::OK; +} + +error::Error TestingCore::ForwardOutgoingMessages() { + for (auto& [to, msgs] : peer_messages_out_) { + for (auto& msg : msgs) { + RETURN_IF_ERROR(replica_group_.SendMessage(to, msg)); + } + } + peer_messages_out_.clear(); + return error::OK; +} + +error::Error TestingCore::ResetPeer(peerid::PeerID peer_id) { + LOG(VERBOSE) << "resetpeerreq " << core_->ID() << " -> " << peer_id; + UntrustedMessage msg; + auto reset_req = msg.mutable_reset_peer(); + peer_id.ToString(reset_req->mutable_peer_id()); + input_messages_.emplace_back(std::move(msg)); + return error::OK; +} + +error::Error TestingCore::PingPeer(peerid::PeerID peer_id) { + LOG(VERBOSE) << "pingreq " << core_->ID() << " -> " << peer_id; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(next_request_id()); + peer_id.ToString(host->mutable_ping_peer()->mutable_peer_id()); + input_messages_.emplace_back(std::move(msg)); + return error::OK; +} + +error::Error TestingCore::GetEnclaveStatus() { + LOG(VERBOSE) << "getenclavestatus " << core_->ID(); + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(next_request_id()); + + host->set_get_enclave_status(true); + input_messages_.emplace_back(std::move(msg)); + return error::OK; +} + +error::Error TestingCore::TimerTick() { + ++timer_secs_; + LOG(VERBOSE) << "timertick " << core_->ID() << " secs: " << timer_secs_; + UntrustedMessage msg; + msg.mutable_timer_tick()->set_new_timestamp_unix_secs(timer_secs_); + input_messages_.emplace_back(std::move(msg)); + return error::OK; +} + +error::Error TestingCore::CreateNewRaftGroup() { + LOG(VERBOSE) << "createnewraftgroup " << core_->ID(); + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(next_request_id()); + host->set_create_new_raft_group(true); + input_messages_.emplace_back(std::move(msg)); + return error::OK; +} + +error::Error TestingCore::JoinRaft(peerid::PeerID peer_id) { + if (!peer_id.Valid()) { + return error::Peers_InvalidID; + } + LOG(VERBOSE) << "joinraftreq " << core_->ID() << " -> " << peer_id; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(next_request_id()); + auto req = host->mutable_join_raft(); + peer_id.ToString(req->mutable_peer_id()); + input_messages_.emplace_back(std::move(msg)); + return error::OK; +} +error::Error TestingCore::RequestVoting() { + LOG(VERBOSE) << "requestvoting " << core_->ID(); + + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(next_request_id()); + host->set_request_voting(true); + input_messages_.emplace_back(std::move(msg)); + return error::OK; +} + +error::Error TestingCore::Reconfigure(const enclaveconfig::EnclaveConfig& config) { + LOG(VERBOSE) << "reconfigure " << core_->ID(); + config_ = config; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(next_request_id()); + host->mutable_reconfigure()->MergeFrom(config); + input_messages_.emplace_back(std::move(msg)); + return error::OK; +} + +error::Error TestingCore::RaftRemoval() { + LOG(VERBOSE) << "raft_removal " << core_->ID(); + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(next_request_id()); + host->set_request_removal(true); + input_messages_.emplace_back(std::move(msg)); + return error::OK; +} + +error::Error TestingCore::DeleteBackup(const std::string& client_authenticated_id) { + LOG(VERBOSE) << "deletebackup " << core_->ID(); + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(next_request_id()); + client::Request delete_; + delete_.mutable_delete_(); + CHECK(delete_.SerializeToString(host->mutable_database_request()->mutable_request())); + host->mutable_database_request()->set_authenticated_id(client_authenticated_id); + input_messages_.emplace_back(std::move(msg)); + return error::OK; +} + +error::Error TestingCore::NewClientRequest( + TestingClient* client, std::string client_authenticated_id) { + LOG(VERBOSE) << "newclient " << core_->ID(); + + UntrustedMessage msg; + auto h2e_req = msg.mutable_h2e_request(); + auto new_client_req = h2e_req->mutable_new_client(); + auto request_id = next_request_id(); + open_client_requests_[request_id] = client; + h2e_req->set_request_id(request_id); + + new_client_req->set_client_authenticated_id(client_authenticated_id); + input_messages_.emplace_back(std::move(msg)); + return error::OK; +} + +// Backup or Restore +error::Error TestingCore::ExistingClientRequest(TestingClient* client, + uint64_t client_id, + std::string data) { + LOG(VERBOSE) << "existingclient " << core_->ID(); + + UntrustedMessage msg; + auto h2e_req = msg.mutable_h2e_request(); + auto existing_client_req = h2e_req->mutable_existing_client(); + auto request_id = next_request_id(); + open_client_requests_[request_id] = client; + h2e_req->set_request_id(request_id); + + existing_client_req->set_client_id(client_id); + existing_client_req->set_data(data); + input_messages_.emplace_back(std::move(msg)); + return error::OK; +} + +EnclaveReplicaStatus TestingCore::TakeExpectedEnclaveStatusReply() { + auto& h2e_response = h2e_responses_out_[0]; + EXPECT_EQ(h2e_response.inner_case(), HostToEnclaveResponse::kGetEnclaveStatusReply); + auto result = std::move(h2e_response.get_enclave_status_reply()); + h2e_responses_out_.pop_front(); + return result; +} + +}; // namespace svr2::core::test diff --git a/enclave/core/coretest/testingcore.h b/enclave/core/coretest/testingcore.h new file mode 100644 index 0000000..90ba2b0 --- /dev/null +++ b/enclave/core/coretest/testingcore.h @@ -0,0 +1,124 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + + +#ifndef __SVR2_CORE_CORETEST_TESTINGCORE_H__ +#define __SVR2_CORE_CORETEST_TESTINGCORE_H__ + +#include +#include +#include +#include +#include + +#include "core/core.h" +#include "env/test/test.h" +#include "proto/enclaveconfig.pb.h" +#include "proto/error.pb.h" +#include "proto/msgs.pb.h" +#include "util/log.h" +#include "proto/client.pb.h" + +namespace svr2::core::test { +class TestingCore; +class ReplicaGroup; +class TestingClient; +using RequestID = uint64_t; +using TestingCoreMap = std::map; +using PeerMessageMap = std::map>; +using OpenClientRequests = std::map; + +/* +This class wraps the basic actions of a `Core` and plays much +of the role the host plays in a real deployment - wrapping requests, +forwarding messages to peers and clients, etc. +*/ +class TestingCore { + enum class State { ACTIVE, PAUSED_SAVE_MSGS, PAUSED_DROP_MSGS, STOPPED }; + + public: + TestingCore(ReplicaGroup& replica_group); + + error::Error Init() { return error::OK; } + + uint64_t next_request_id() { return ++(next_request_id_); } + peerid::PeerID ID() const { return core_->ID(); } + const std::map>& peer_messages_out() + const { + return peer_messages_out_; + } + + const std::deque& host_to_enclave_responses() const { + return h2e_responses_out_; + } + + std::deque take_host_to_enclave_responses() { + return std::move(h2e_responses_out_); + } + const std::deque& input_messages() const { + return input_messages_; + } + + bool leader() const { return core_->leader() && active(); } + bool serving() const { return core_->serving() && active(); } + bool voting() const { return core_->voting() && active(); } + bool active() const { return state_ == State::ACTIVE; } + size_t num_voting() const { return core_->num_voting(); } + size_t num_serving() const { return core_->num_members(); } + std::set all_replicas() const { return core_->all_replicas(); } + + void Stop() { state_ = State::STOPPED; } + void Pause(bool drop_msgs) { + state_ = drop_msgs ? State::PAUSED_DROP_MSGS : State::PAUSED_SAVE_MSGS; + } + void Reactivate() { state_ = State::ACTIVE; } + + error::Error ProcessIncomingMessage(); + error::Error ProcessAllIncomingMessages(); + error::Error ForwardOutgoingMessages(); + error::Error ProcessNextH2EResponse(); + error::Error ProcessAllH2EResponses(); + + // Host to Enclave commands + error::Error ResetPeer(peerid::PeerID peer_id); + error::Error PingPeer(peerid::PeerID peer_id); + error::Error GetEnclaveStatus(); + error::Error TimerTick(); + error::Error CreateNewRaftGroup(); + error::Error JoinRaft(peerid::PeerID peer_id); + error::Error RequestVoting(); + error::Error Reconfigure(const enclaveconfig::EnclaveConfig& config); + error::Error DeleteBackup(const std::string& client_authenticated_id); + error::Error RaftRemoval(); + + // Peer communication + error::Error AddPeerMessage(PeerMessage&& peer_message); + + // Client communication + // handshake + error::Error NewClientRequest(TestingClient* client, + std::string client_authenticated_id); + + // Backup or Restore + error::Error ExistingClientRequest(TestingClient* client, uint64_t client_id, + std::string data); + + EnclaveReplicaStatus TakeExpectedEnclaveStatusReply(); + private: + std::unique_ptr core_; + ReplicaGroup& replica_group_; + enclaveconfig::EnclaveConfig config_; + + std::deque input_messages_; + std::deque h2e_responses_out_; + PeerMessageMap peer_messages_out_; + OpenClientRequests open_client_requests_; + + uint64_t next_request_id_{0}; + uint64_t timer_secs_{1}; + State state_{State::ACTIVE}; +}; + +}; // namespace svr2::core::test + +#endif // __SVR2_CORE_CORETEST_TESTINGCORE_H__ diff --git a/enclave/core/internal.h b/enclave/core/internal.h new file mode 100644 index 0000000..3c98e9f --- /dev/null +++ b/enclave/core/internal.h @@ -0,0 +1,76 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_CORE_INTERNAL_H__ +#define __SVR2_CORE_INTERNAL_H__ + +#include + +#include "raft/log.h" +#include "raft/raft.h" +#include "db/db.h" +#include "proto/e2e.pb.h" +#include "proto/msgs.pb.h" +#include "proto/raft.pb.h" + +namespace svr2::core::internal { + +typedef uint64_t TransactionID; + +struct WaitingForFirstConnection { + peerid::PeerID peer; + TransactionID join_tx; +}; +struct Loading { + enclaveconfig::RaftGroupConfig group_config; + raft::ReplicaGroup replica_group; + std::unique_ptr log; + std::unique_ptr db; + std::unique_ptr mem; + peerid::PeerID load_from; + TransactionID join_tx; + bool started; + uint64_t replication_id; + uint64_t replication_sequence; + std::string lexigraphically_largest_row_loaded_into_db; +}; +struct Loaded { + enclaveconfig::RaftGroupConfig group_config; + std::unique_ptr raft; + std::unique_ptr db; + raft::LogIdx db_last_applied_log; +}; +struct Raft { + Raft() { ClearState(); } + void ClearState() REQUIRES(mu) { + state = svr2::RAFTSTATE_NO_STATE; + waiting_for_first_connection = { + .peer = peerid::PeerID(), + .join_tx = 0, + }; + loading = { + .group_config = enclaveconfig::RaftGroupConfig(), + .replica_group = raft::ReplicaGroup(), + .log = nullptr, + .db = nullptr, + .join_tx = 0, + .started = false, + .replication_sequence = 0, + .lexigraphically_largest_row_loaded_into_db = "", + }; + loaded = { + .group_config = enclaveconfig::RaftGroupConfig(), + .raft = nullptr, + .db = nullptr, + .db_last_applied_log = 0, + }; + } + mutable util::mutex mu; // protects everything else in this struct. + RaftState state GUARDED_BY(mu); + WaitingForFirstConnection waiting_for_first_connection GUARDED_BY(mu); + Loading loading GUARDED_BY(mu); + Loaded loaded GUARDED_BY(mu); +}; + +} // namespace svr2::core::internal +#endif // __SVR2_CORE_INTERNAL_H__ diff --git a/enclave/core/tests/core.cc b/enclave/core/tests/core.cc new file mode 100644 index 0000000..e061487 --- /dev/null +++ b/enclave/core/tests/core.cc @@ -0,0 +1,2306 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP core/coretest +//TESTDEP core +//TESTDEP groupclock +//TESTDEP timeout +//TESTDEP client +//TESTDEP db +//TESTDEP raft +//TESTDEP peers +//TESTDEP peerid +//TESTDEP sender +//TESTDEP util +//TESTDEP context +//TESTDEP hmac +//TESTDEP noise +//TESTDEP noise-c +//TESTDEP noisewrap +//TESTDEP env +//TESTDEP env/test +//TESTDEP sip +//TESTDEP metrics +//TESTDEP proto +//TESTDEP protobuf-lite +//TESTDEP libsodium + +#include +#include +#include +#include +#include + +#include +#include + +#include "core/core.h" +#include "env/env.h" +#include "util/log.h" +#include "proto/enclaveconfig.pb.h" +#include "proto/e2e.pb.h" +#include "proto/client3.pb.h" +#include "noise/noise.h" +#include "env/test/test.h" +#include "util/bytes.h" +#include "db/db3.h" +#include "core/coretest/testingcore.h" +#include "core/coretest/replicagroup.h" +#include "core/coretest/testingclient.h" + +// This test is pretty large and contains a lot of code which should maybe be +// moved into some coretest library at a later date. There's a few very +// important functions in the CoreTest fixture: +// +// - PassMessages - pass a series of messages between multiple cores +// - ClientRequest - issue a client request and get back a response +// +// Both PassMessages and ClientRequest rely on a "CoreSet" of a group of cores +// that can pass messages to each other, and a "first" core, a core to which +// a starting message has just been sent and which should have put a first +// set of messages into env::test::SentMessages. +// +// Tests are then built on top of these functions. + +#define NOISE_OK(x) do { \ + int out = (x); \ + if (out != NOISE_ERROR_NONE) { \ + char buf[64]; \ + noise_strerror(out, buf, sizeof(buf)); \ + ASSERT_EQ(out, NOISE_ERROR_NONE) << "Noise error: " << buf; \ + } \ +} while (0) + +namespace svr2::core { +using svr2::core::test::TestingCore; +using svr2::core::test::ReplicaGroup; +using svr2::core::test::TestingClient; + +namespace { +struct ReplicaGroupConfig { + enclaveconfig::EnclaveConfig ecfg; + uint32_t min_voting; + uint32_t max_voting; + size_t initial_voting; + size_t initial_nonvoting; + size_t initial_nonmember; + + enclaveconfig::InitConfig init_config() const { + enclaveconfig::InitConfig cfg; + cfg.mutable_enclave_config()->MergeFrom(ecfg); + cfg.mutable_group_config()->set_db_version(enclaveconfig::DATABASE_VERSION_SVR2); + cfg.mutable_group_config()->set_min_voting_replicas(min_voting); + cfg.mutable_group_config()->set_max_voting_replicas(max_voting); + cfg.mutable_group_config()->set_attestation_timeout(3600); + return cfg; + } +}; + +enum class CoreRole { + Leader, + VotingNonLeader, + NonVoting +}; +}; + +class CoreTest : public ::testing::Test { + protected: + static void SetUpTestCase() { + env::Init(); + } + + HostToEnclaveResponse Response(std::vector msgs) { + CHECK(msgs.size() == 1); + CHECK(msgs[0].inner_case() == EnclaveMessage::kH2EResponse); + return std::move(*msgs[0].mutable_h2e_response()); + } + + std::vector SentMessages() { + return env::test::SentMessages(); + } + + void SetUp() { + ctx = &ctx_; + // clear sent messages. + SentMessages(); + valid_enclave_config.Clear(); + auto raft_config = valid_enclave_config.mutable_raft(); + raft_config->set_election_ticks(4); + raft_config->set_heartbeat_ticks(2); + raft_config->set_replication_chunk_bytes(1<<20); + raft_config->set_replica_voting_timeout_ticks(16); + raft_config->set_replica_membership_timeout_ticks(32); + raft_config->set_log_max_bytes(1<<20); + valid_enclave_config.set_e2e_txn_timeout_ticks(30); + valid_enclave_config.set_send_timestamp_ticks(10); + client_request = 10000; + valid_init_config.Clear(); + valid_init_config.mutable_enclave_config()->CopyFrom(valid_enclave_config); + valid_init_config.set_initial_timestamp_unix_secs(1); + valid_init_config.mutable_group_config()->set_db_version(enclaveconfig::DATABASE_VERSION_SVR2); + valid_init_config.mutable_group_config()->set_min_voting_replicas(1); + valid_init_config.mutable_group_config()->set_max_voting_replicas(5); + valid_init_config.mutable_group_config()->set_attestation_timeout(3600); + valid_init_config.mutable_group_config()->set_simulated(true); + } + + typedef std::map CoreMap; + typedef std::map> PassMessagesOut; + + // Passes back and forth all PeerMessage messages, and returns all non-PeerMessage + // messages, until there are no more messages to pass. The messages in SentMessages + // are considered to be from [first]. + PassMessagesOut PassMessages(const CoreMap& cores, Core* first) { + PassMessagesOut out; + bool quiescent = false; + std::map> to_send; + auto first_msgs = env::test::SentMessages(); + LOG(INFO) << "### starting message passing from " << first->ID() << " with " << first_msgs.size() << " messages"; + std::move(std::begin(first_msgs), std::end(first_msgs), std::back_inserter(to_send[first->ID()])); + while (to_send.size()) { + auto i = to_send.begin(); + const peerid::PeerID& from = i->first; + std::deque* msgs = &i->second; + if (msgs->size() == 0) { + to_send.erase(from); + continue; + } + EnclaveMessage msg = std::move(msgs->front()); + msgs->pop_front(); + if (msg.inner_case() != EnclaveMessage::kPeerMessage) { + LOG(INFO) << "# non-peer message from " << from; + out[from].push_back(std::move(msg)); + continue; + } + UntrustedMessage req; + *req.mutable_peer_message() = std::move(*msg.mutable_peer_message()); + peerid::PeerID to; + to.FromString(req.peer_message().peer_id()); + from.ToString(req.mutable_peer_message()->mutable_peer_id()); + context::Context ctx; + auto find = cores.find(to); + if (find == cores.end()) { + LOG(INFO) << "# offline recipient " << to; + out[from].push_back(std::move(msg)); + continue; + } + LOG(INFO) << "#####################################################"; + LOG(INFO) << "# peer message to " << to << " from " << from; + find->second->Receive(&ctx, req); + auto out_msgs = env::test::SentMessages(); + LOG(INFO) << "# yielded " << out_msgs.size(); + std::move(std::begin(out_msgs), std::end(out_msgs), std::back_inserter(to_send[to])); + } + LOG(INFO) << "### message passing complete"; + return out; + } + + uint64_t client_request; + + void ClientRequest(const CoreMap& cores, Core* core, const google::protobuf::MessageLite& req, google::protobuf::MessageLite* cli_resp, const std::string auth_id) { + // Set up client handshake. + NoiseHandshakeState* hsp; + NOISE_OK(noise_handshakestate_new_by_id(&hsp, &client::client_protocol, NOISE_ROLE_INITIATOR)); + noise::HandshakeState hs = noise::WrapHandshakeState(hsp); + + uint64_t client_id = 0; + { // Create new client + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(++client_request); + auto newc = host->mutable_new_client(); + newc->set_client_authenticated_id(auth_id); + context::Context ctx; + ASSERT_EQ(error::OK, core->Receive(&ctx, msg)); + auto out = PassMessages(cores, core); + ASSERT_EQ(out[core->ID()].size(), 1); + auto resp = out[core->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), client_request); + client_id = resp.new_client_reply().client_id(); + ASSERT_GT(client_id, 0); + + auto hs_msg = resp.new_client_reply().handshake_start(); + NOISE_OK(noise_dhstate_set_public_key( + noise_handshakestate_get_remote_public_key_dh(hsp), + noise::StrU8Ptr(hs_msg.test_only_pubkey()), + hs_msg.test_only_pubkey().size())); + } + NOISE_OK(noise_handshakestate_start(hsp)); + ASSERT_EQ(NOISE_ACTION_WRITE_MESSAGE, noise_handshakestate_get_action(hsp)); + + NoiseCipherState* txp; + NoiseCipherState* rxp; + { // Finish client handshake + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(++client_request); + auto ec = host->mutable_existing_client(); + ec->mutable_data()->resize(noise::HANDSHAKE_INIT_SIZE, '\0'); + NoiseBuffer write_buf = noise::BufferOutputFromString(ec->mutable_data()); + NOISE_OK(noise_handshakestate_write_message(hsp, &write_buf, nullptr)); + ec->mutable_data()->resize(write_buf.size, '\0'); + ec->set_client_id(client_id); + context::Context ctx; + ASSERT_EQ(error::OK, core->Receive(&ctx, msg)); + auto out = PassMessages(cores, core); + ASSERT_EQ(out[core->ID()].size(), 1); + auto resp = out[core->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), client_request); + ASSERT_EQ(NOISE_ACTION_READ_MESSAGE, noise_handshakestate_get_action(hsp)); + ASSERT_EQ(resp.status(), error::OK); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kExistingClientReply); + auto crep = resp.mutable_existing_client_reply(); + NoiseBuffer read_buf = noise::BufferInputFromString(crep->mutable_data()); + NOISE_OK(noise_handshakestate_read_message(hsp, &read_buf, nullptr)); + ASSERT_EQ(NOISE_ACTION_SPLIT, noise_handshakestate_get_action(hsp)); + NOISE_OK(noise_handshakestate_split(hsp, &txp, &rxp)); + } + noise::CipherState tx = noise::WrapCipherState(txp); + noise::CipherState rx = noise::WrapCipherState(rxp); + { // send the request, parse response. + std::string req_str; + ASSERT_TRUE(req.SerializeToString(&req_str)); + auto [ciphertext, encrypt_err] = noise::Encrypt(txp, req_str); + ASSERT_EQ(error::OK, encrypt_err); + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(++client_request); + auto ec = host->mutable_existing_client(); + ec->set_client_id(client_id); + ec->set_data(ciphertext); + context::Context ctx; + ASSERT_EQ(error::OK, core->Receive(&ctx, msg)); + auto out = PassMessages(cores, core); + ASSERT_EQ(out[core->ID()].size(), 1); + auto resp = out[core->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), client_request); + ASSERT_EQ(resp.status(), error::OK); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kExistingClientReply); + auto ec2 = resp.existing_client_reply(); + auto [plaintext, decrypt_err] = noise::Decrypt(rxp, ec2.data()); + ASSERT_EQ(error::OK, decrypt_err); + ASSERT_TRUE(cli_resp->ParseFromString(plaintext)); + } + } + + UntrustedMessage PeerMessage(const peerid::PeerID& from, const peerid::PeerID& to, EnclaveMessage msg) { + CHECK(msg.inner_case() == EnclaveMessage::kPeerMessage); + if (msg.peer_message().peer_id() != to.AsString()) { + peerid::PeerID id; + CHECK(error::OK == id.FromString(msg.peer_message().peer_id())); + LOG(ERROR) << "unexpected peer ID: " << id; + CHECK(false); + } + UntrustedMessage req; + *req.mutable_peer_message() = std::move(*msg.mutable_peer_message()); + from.ToString(req.mutable_peer_message()->mutable_peer_id()); + return req; + } + + enclaveconfig::EnclaveConfig valid_enclave_config; + enclaveconfig::InitConfig valid_init_config; + context::Context ctx_; + context::Context* ctx; +}; + +static void BackupRestoreTest(ReplicaGroupConfig cfg, CoreRole connect_to, bool drop_leader, std::map& partition) { + ReplicaGroup replica_group{}; + replica_group.Init(cfg.init_config(), cfg.initial_voting, cfg.initial_nonvoting, cfg.initial_nonmember); + + // tik tok + replica_group.TickTock(false); + replica_group.TickTock(false); + + auto [pin, e1] = util::StringToByteArray<32>("PIN45678901234567890123456789012"); + auto [secret, e2] = util::StringToByteArray<48>("SECRET78901234567890123456789012"); + ASSERT_TRUE(e1 == error::OK && e2 == error::OK); + + size_t core_num = 0; + switch(connect_to) { + case CoreRole::Leader: + core_num = 0; + break; + case CoreRole::VotingNonLeader: + ASSERT_TRUE(cfg.initial_voting > 1); + core_num = 1; + break; + case CoreRole::NonVoting: + ASSERT_TRUE(cfg.initial_nonvoting > 1); + core_num = cfg.initial_voting; + break; + } + + auto client_core = replica_group.get_core(core_num); + + // Block 1: Client requests backup + { + TestingClient cl(*client_core, "authenticated_id"); + + cl.RequestHandshake(); + replica_group.TickTock(false); + replica_group.TickTock(false); + + cl.RequestBackup(secret, pin, 10); + replica_group.TickTock(false); + + auto backup_response = cl.get_backup_response(); + ASSERT_NE(backup_response, nullptr); + LOG(INFO) << "created backup"; + ASSERT_EQ(backup_response->status(), client::BackupResponse::OK); + } + { + TestingClient cl(*client_core, "authenticated_id"); + cl.RequestHandshake(); + replica_group.TickTock(false); + replica_group.TickTock(false); + + cl.RequestExpose(secret); + replica_group.TickTock(false); + auto expose_response = cl.get_expose_response(); + ASSERT_NE(expose_response, nullptr); + LOG(INFO) << "backup expose"; + ASSERT_EQ(expose_response->status(), client::ExposeResponse::OK); + } + + // Now introduce problems if requested + if(drop_leader) { + auto leader = replica_group.get_core(replica_group.GroupLeaderIndex()); + leader->Pause(false); + } + replica_group.CreatePartition(partition); + + // run long enough to elect a new leader + for(size_t i = 0; i < 4*cfg.ecfg.raft().election_ticks(); ++i) { + replica_group.TickTock(false); + } + + // Block 2: Client requests restore + { + auto [main_partition, partition_size] = test::LargestPartition(partition); + switch(connect_to) { + case CoreRole::Leader: + core_num = replica_group.GroupLeaderIndex(); + break; + case CoreRole::VotingNonLeader: { + // Can't capture main_partition until C++20, need to assign it + auto maybe_it = std::find_if(partition.begin(), partition.end(), + [mp = main_partition, &replica_group, cfg](auto it) { + auto c = replica_group.get_core(it.first); + return it.second == mp + && !c->leader() + && c->voting();}); + // Make sure you put some voting members in the big partition or this + // will fail + ASSERT_NE(maybe_it, partition.end()); + core_num = maybe_it->first; + break; + } + case CoreRole::NonVoting: { + auto maybe_it = std::find_if(partition.begin(), partition.end(), + [mp = main_partition, &replica_group, cfg](auto it) { + auto c = replica_group.get_core(it.first); + return it.second == mp + && !c->voting() + && c->serving();}); + // Make sure you put some non-voting members in the big partition or + // this will fail! + ASSERT_NE(maybe_it, partition.end()); + core_num = maybe_it->first; + break; + } + } + + client_core = replica_group.get_core(core_num); + TestingClient cl(*client_core, "authenticated_id"); + + cl.RequestHandshake(); + replica_group.TickTock(false); + replica_group.TickTock(false); + + LOG(INFO) << "About to restore with core " << core_num << " (CoreRole: " << (int)connect_to << ")"; + cl.RequestRestore(pin); + replica_group.TickTock(false); + + auto restore_response = cl.get_restore_response(); + ASSERT_NE(restore_response, nullptr); + LOG(INFO) << "Super Secret: " << restore_response->data(); + ASSERT_EQ(util::ByteArrayToString(secret), restore_response->data()); + } +} + +static void WrongPINTest(ReplicaGroupConfig cfg, CoreRole connect_to, bool drop_leader, std::map& partition) { + + ReplicaGroup replica_group{}; + replica_group.Init(cfg.init_config(), cfg.initial_voting, cfg.initial_nonvoting, cfg.initial_nonmember); + + // tik tok + replica_group.TickTock(false); + replica_group.TickTock(false); + + auto [pin, e1] = util::StringToByteArray<32>("PIN45678901234567890123456789012"); + auto [wrong_pin, e2] = util::StringToByteArray<32>("SIN45678901234567890123456789012"); + auto [secret, e3] = util::StringToByteArray<48>("SECRET78901234567890123456789012"); + ASSERT_TRUE(e1 == error::OK && e2 == error::OK && e3 == error::OK); + size_t num_tries = 3; + + size_t core_num = 0; + switch(connect_to) { + case CoreRole::Leader: + core_num = 0; + break; + case CoreRole::VotingNonLeader: + ASSERT_TRUE(cfg.initial_voting > 1); + core_num = 1; + break; + case CoreRole::NonVoting: + ASSERT_TRUE(cfg.initial_nonvoting > 1); + core_num = cfg.initial_voting; + break; + } + + auto client_core = replica_group.get_core(core_num); + + // Block 1: Client requests backup + { + TestingClient cl(*client_core, "authenticated_id"); + + cl.RequestHandshake(); + replica_group.TickTock(false); + replica_group.TickTock(false); + + cl.RequestBackup(secret, pin, num_tries); + replica_group.TickTock(false); + + auto backup_response = cl.get_backup_response(); + ASSERT_NE(backup_response, nullptr); + LOG(INFO) << "created backup"; + } + { + TestingClient cl(*client_core, "authenticated_id"); + + cl.RequestHandshake(); + replica_group.TickTock(false); + replica_group.TickTock(false); + + cl.RequestExpose(secret); + replica_group.TickTock(false); + + auto expose_response = cl.get_expose_response(); + ASSERT_NE(expose_response, nullptr); + LOG(INFO) << "created backup"; + } + + // Now introduce problems if requested + if(drop_leader) { + auto leader = replica_group.get_core(replica_group.GroupLeaderIndex()); + leader->Pause(false); + } + replica_group.CreatePartition(partition); + + // run long enough to elect a new leader + for(size_t i = 0; i < 4*cfg.ecfg.raft().election_ticks(); ++i) { + replica_group.TickTock(false); + } + + // Block 2: Client requests restore with wrong pin + { + + auto [main_partition, partition_size] = test::LargestPartition(partition); + switch(connect_to) { + case CoreRole::Leader: + core_num = replica_group.GroupLeaderIndex(); + break; + case CoreRole::VotingNonLeader: { + // Can't capture main_partition until C++20, need to assign it + auto maybe_it = std::find_if(partition.begin(), partition.end(), + [mp = main_partition, &replica_group, cfg](auto it) { + auto c = replica_group.get_core(it.first); + return it.second == mp + && !c->leader() + && c->voting();}); + // Make sure you put some voting members in the big partition or this + // will fail + ASSERT_NE(maybe_it, partition.end()); + core_num = maybe_it->first; + break; + } + case CoreRole::NonVoting: { + auto maybe_it = std::find_if(partition.begin(), partition.end(), + [mp = main_partition, &replica_group, cfg](auto it) { + auto c = replica_group.get_core(it.first); + return it.second == mp + && !c->voting() + && c->serving();}); + // Make sure you put some non-voting members in the big partition or + // this will fail! + ASSERT_NE(maybe_it, partition.end()); + core_num = maybe_it->first; + break; + } + } + + client_core = replica_group.get_core(core_num); + TestingClient cl(*client_core, "authenticated_id"); + cl.RequestHandshake(); + replica_group.TickTock(false); + replica_group.TickTock(false); + + for(size_t i = 0; i < num_tries; ++i) { + cl.RequestRestore(wrong_pin); + replica_group.TickTock(false); + + auto restore_response = cl.get_restore_response(); + ASSERT_NE(restore_response, nullptr); + LOG(INFO) << "tries remaining: " << restore_response->tries() << " data: " << restore_response->data(); + ASSERT_NE(util::ByteArrayToString(secret), restore_response->data()); + } + + // now try correct PIN and confirm it is gone + cl.RequestRestore(pin); + replica_group.TickTock(false); + + auto restore_response = cl.get_restore_response(); + ASSERT_NE(restore_response, nullptr); + LOG(INFO) << "correct PIN tries remaining: " << restore_response->tries() << " data: " << restore_response->data(); + ASSERT_NE(util::ByteArrayToString(secret), restore_response->data()); + } +} + +void ConfirmWillNotServeClientRequests(ReplicaGroup& replica_group) { + auto leader = replica_group.get_leader_core(); + auto [pin, e1] = util::StringToByteArray<32>("PIN45678901234567890123456789012"); + auto [wrong_pin, e2] = util::StringToByteArray<32>("SIN45678901234567890123456789012"); + auto [secret, e3] = util::StringToByteArray<48>("SECRET78901234567890123456789012"); + ASSERT_TRUE(e1 == error::OK && e2 == error::OK && e3 == error::OK); + size_t num_tries = 3; + + //Client requests backup + TestingClient cl(*leader, "authenticated_id"); + + cl.RequestHandshake(); + // start the handshake + ASSERT_EQ(error::OK, leader->ProcessAllIncomingMessages()); + ASSERT_EQ(error::OK, leader->ProcessAllH2EResponses()); + //finish the handshake + ASSERT_EQ(error::OK, leader->ProcessAllIncomingMessages()); + ASSERT_EQ(error::OK, leader->ProcessAllH2EResponses()); + + cl.RequestBackup(secret, pin, num_tries); + ASSERT_EQ(error::OK, leader->ProcessAllIncomingMessages()); + + auto h2e_msgs = leader->take_host_to_enclave_responses(); + auto& h2e_response = h2e_msgs[0]; + ASSERT_EQ(h2e_response.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(h2e_response.status(), error::Core_NotEnoughVotingReplicas); +} + +void SelfHealingTest(ReplicaGroupConfig cfg) { + ReplicaGroup replica_group{}; + replica_group.Init(cfg.init_config(), cfg.initial_voting, cfg.initial_nonvoting, cfg.initial_nonmember); + + size_t initial_members = cfg.initial_nonvoting + cfg.initial_voting; + ASSERT_EQ(replica_group.num_voting(), 1); + + for(size_t i = 0; i < initial_members; ++i) { + if (replica_group.num_voting() < cfg.min_voting) { + ConfirmWillNotServeClientRequests(replica_group); + } + + replica_group.TickTock(false); + ASSERT_EQ(replica_group.num_voting(), std::min(2+i, initial_members)); + } + size_t num_voting = replica_group.num_voting(); + + // remove two voting non-leader + LOG(INFO) << "Removing two non-leader voting members"; + auto leader_core = replica_group.get_leader_core(); + TestingCore* non_leader_core = replica_group.get_voting_nonleader_core(); + if(non_leader_core != nullptr) { + LOG(INFO) << "STOPPING peer " << non_leader_core->ID() + << "(leader: " << leader_core->ID() << ")"; + non_leader_core->Pause(false); + } + non_leader_core = replica_group.get_voting_nonleader_core(); + if(non_leader_core != nullptr) { + LOG(INFO) << "STOPPING peer " << non_leader_core->ID() + << "(leader: " << leader_core->ID() << ")"; + non_leader_core->Pause(false); + } + + // even though we stopped them the replica group counts them as voting + ASSERT_EQ(replica_group.num_voting(), num_voting); + + // replica_membership_timeout_ticks is time to kick out a member + // replica_voting_timeout_ticks is time to demote from voting + // tick until it is demoted + auto voting_timeout_ticks = cfg.ecfg.raft().replica_voting_timeout_ticks(); + for(size_t i = 0; i < voting_timeout_ticks; ++i) { + LOG(INFO) << "\nTICK " << i << "\n"; + replica_group.TickTock(false); + } + LOG(INFO) << "NUM_VOTING before demotion: " << num_voting << " after demotion: " + << replica_group.num_voting(); + ASSERT_EQ(replica_group.num_voting(), num_voting - 1); + + // Tick again and eliminate the second core + replica_group.TickTock(false); + LOG(INFO) << "NUM_VOTING before demotion: " << num_voting << " after demotion: " + << replica_group.num_voting(); + ASSERT_EQ(replica_group.num_voting(), num_voting - 2); +} + +TEST_F(CoreTest, SelfHealingGrowthTest) { + ReplicaGroupConfig cfg = { + .ecfg = valid_enclave_config, + .min_voting = 5, + .max_voting = 9, + .initial_voting = 1, + .initial_nonvoting = 7, + .initial_nonmember = 2 + }; + SelfHealingTest(cfg); +} + +TEST_F(CoreTest, CreateReplicaGroup) { + ReplicaGroup replica_group{}; + ReplicaGroupConfig cfg{ + .ecfg = valid_enclave_config, + .min_voting = 1, + .max_voting = 1, + }; + replica_group.Init(cfg.init_config(), 5, 3, 2); + + // tik tok + replica_group.TickTock(false); + replica_group.TickTock(false); + + ASSERT_TRUE(replica_group.get_core(0)->leader()); + ASSERT_TRUE(replica_group.get_core(0)->serving()); + for(size_t i = 1; i < 8; ++i) { + ASSERT_FALSE(replica_group.get_core(i)->leader()); + ASSERT_TRUE(replica_group.get_core(i)->serving()); + } + + ASSERT_FALSE(replica_group.get_core(8)->leader()); + ASSERT_FALSE(replica_group.get_core(8)->serving()); + ASSERT_FALSE(replica_group.get_core(9)->leader()); + ASSERT_FALSE(replica_group.get_core(9)->serving()); + + replica_group.TickTock(false); + LOG(INFO) << "\nREMOVING LEADER\n" << " current leader: " << replica_group.GroupLeaderIndex() << "\n"; + + // Now take out the leader + replica_group.get_core(0)->Pause(false); + // tik tok until election should have happened + for(size_t i = 0; i < 4*valid_enclave_config.raft().election_ticks(); ++i) { + replica_group.TickTock(false); + } + ASSERT_TRUE( + replica_group.get_core(1)->leader() || + replica_group.get_core(2)->leader() || + replica_group.get_core(3)->leader() || + replica_group.get_core(4)->leader()); + + LOG(INFO) << "\nNEW LEADER\n" << " current leader: " << replica_group.GroupLeaderIndex() + << " (" << replica_group.GroupLeader() << ")\n"; +} + +TEST_F(CoreTest, TestPartition) { + ReplicaGroup replica_group{}; + ReplicaGroupConfig cfg{ + .ecfg = valid_enclave_config, + .min_voting = 1, + .max_voting = 1, + }; + replica_group.Init(cfg.init_config(), 5, 3, 2); + + // tik tok + replica_group.TickTock(false); + replica_group.TickTock(false); + + LOG(INFO) << "\nCREATE PARTITION\n" << " current leader: " << replica_group.GroupLeaderIndex() << "\n"; + replica_group.CreatePartition(std::map{ + {0,1}, {1,1}, {5,1}, {6,1}, // has leader but only one other voting member + {2,2}, {3,2}, {4,2}, {7,2}, {8,2}, {9,2} // no leader, but quorum of voting members. Should take over + }); + + // tik tok until election should have happened and completed (it might go through more than one cycle) + for(size_t i = 0; i < 4*valid_enclave_config.raft().election_ticks(); ++i) { + replica_group.TickTock(false); + } + + // add a voting member during the outage + LOG(INFO) << "Core 8 Joining"; + auto peer3_id = replica_group.get_core(3)->ID(); + ASSERT_EQ(error::OK, replica_group.get_core(8)->JoinRaft(peer3_id)); + replica_group.TickTock(false); + replica_group.TickTock(false); + + LOG(INFO) << "Request voting for core " << replica_group.get_core(8)->ID(); + ASSERT_EQ(error::OK, replica_group.get_core(8)->RequestVoting()); + // ignore errors because raft joing might have failed if, e.g., the + // load request was sent to a disconnected peer + replica_group.TickTock(true); + + LOG(INFO) << "\nCLEAR PARTITION\n"; + replica_group.ClearPartition(); + replica_group.ForwardBlockedMessages(); + replica_group.TickTock(true); + // replica_group.ClearBlockedMessages(); // This will drop all messages and leave replicas stuck in-flight until self-healing + replica_group.PassMessagesUntilQuiet(); + + // for(size_t i = 0; i < 2*valid_enclave_config.raft().election_ticks(); ++i) { + // replica_group.TickTock(false); + // } + + LOG(INFO) << "\nNEW LEADER\n" << " current leader: " << replica_group.GroupLeaderIndex() + << " (" << replica_group.GroupLeader() << ")\n"; + for(size_t i = 0; i < 10; ++i) { + LOG(INFO) << "replica " << i << " (" << replica_group.get_core(i)->ID() + << ") is_leader: " << replica_group.get_core(i)->leader() + << ") serving: " << replica_group.get_core(i)->serving(); + } + + ASSERT_TRUE( + replica_group.get_core(2)->leader() || + replica_group.get_core(3)->leader() || + replica_group.get_core(4)->leader()); +} + +TEST_F(CoreTest, BackupRestorePartitionNetworkTest) { + ReplicaGroupConfig cfg = { + .ecfg = valid_enclave_config, + .min_voting = 1, + .max_voting = 1, + .initial_voting = 5, + .initial_nonvoting = 3, + .initial_nonmember = 2 + }; + std::map partition = { + {0,1}, {1,1}, {5,1}, {6,1}, // has leader but only one other voting member + {2,2}, {3,2}, {4,2}, {7,2}, {8,2}, {9,2} // no leader, but quorum of voting members. Should take over + }; + BackupRestoreTest(cfg, CoreRole::Leader, false, partition); + BackupRestoreTest(cfg, CoreRole::VotingNonLeader, false, partition); + BackupRestoreTest(cfg, CoreRole::NonVoting, false, partition); +} + +TEST_F(CoreTest, WrongPINPartitionNetworkTest) { + ReplicaGroupConfig cfg = { + .ecfg = valid_enclave_config, + .min_voting = 1, + .max_voting = 1, + .initial_voting = 5, + .initial_nonvoting = 3, + .initial_nonmember = 2 + }; + std::map partition = { + {0,1}, {1,1}, {5,1}, {6,1}, // has leader but only one other voting member + {2,2}, {3,2}, {4,2}, {7,2}, {8,2}, {9,2} // no leader, but quorum of voting members. Should take over + }; + + // TODO: Consider parameterized tests (http://google.github.io/googletest/reference/testing.html#TEST_P) + WrongPINTest(cfg, CoreRole::Leader, false, partition); + WrongPINTest(cfg, CoreRole::VotingNonLeader, false, partition); + WrongPINTest(cfg, CoreRole::NonVoting, false, partition); +} + +TEST_F(CoreTest, BackupRestoreHealthyNetworkTest) { + ReplicaGroupConfig cfg = { + .ecfg = valid_enclave_config, + .min_voting = 1, + .max_voting = 1, + .initial_voting = 5, + .initial_nonvoting = 3, + .initial_nonmember = 2 + }; + // no partition in network + std::map partition = { + {0,1}, {1,1}, {5,1}, {6,1}, {9,1}, + {2,1}, {3,1}, {4,1}, {7,1}, {8,1} + }; + BackupRestoreTest(cfg, CoreRole::Leader, false, partition); + BackupRestoreTest(cfg, CoreRole::VotingNonLeader, false, partition); + BackupRestoreTest(cfg, CoreRole::NonVoting, false, partition); +} + +TEST_F(CoreTest, WrongPINHealthyNetworkTest) { + ReplicaGroupConfig cfg = { + .ecfg = valid_enclave_config, + .min_voting = 1, + .max_voting = 1, + .initial_voting = 5, + .initial_nonvoting = 3, + .initial_nonmember = 2 + }; + // no partition in network + std::map partition = { + {0,1}, {1,1}, {5,1}, {6,1}, {9,1}, + {2,1}, {3,1}, {4,1}, {7,1}, {8,1} + }; + WrongPINTest(cfg, CoreRole::Leader, false, partition); + WrongPINTest(cfg, CoreRole::VotingNonLeader, false, partition); + WrongPINTest(cfg, CoreRole::NonVoting, false, partition); +} + +TEST_F(CoreTest, BackupRestoreDropLeaderTest) { + ReplicaGroupConfig cfg = { + .ecfg = valid_enclave_config, + .min_voting = 1, + .max_voting = 1, + .initial_voting = 5, + .initial_nonvoting = 3, + .initial_nonmember = 2 + }; + // no partition in network + std::map partition = { + {0,1}, {1,1}, {5,1}, {6,1}, {9,1}, + {2,1}, {3,1}, {4,1}, {7,1}, {8,1} + }; + BackupRestoreTest(cfg, CoreRole::Leader, true, partition); + BackupRestoreTest(cfg, CoreRole::VotingNonLeader, true, partition); + BackupRestoreTest(cfg, CoreRole::NonVoting, true, partition); +} + +TEST_F(CoreTest, WrongPINDropLeaderTest) { + ReplicaGroupConfig cfg = { + .ecfg = valid_enclave_config, + .min_voting = 1, + .max_voting = 1, + .initial_voting = 5, + .initial_nonvoting = 3, + .initial_nonmember = 2 + }; + // no partition in network + std::map partition = { + {0,1}, {1,1}, {5,1}, {6,1}, {9,1}, + {2,1}, {3,1}, {4,1}, {7,1}, {8,1} + }; + WrongPINTest(cfg, CoreRole::Leader, true, partition); + WrongPINTest(cfg, CoreRole::VotingNonLeader, true, partition); + WrongPINTest(cfg, CoreRole::NonVoting, true, partition); +} + +TEST_F(CoreTest, EnclaveStatus) { + ReplicaGroup replica_group{}; + ReplicaGroupConfig cfg{ + .ecfg = valid_enclave_config, + .min_voting = 1, + .max_voting = 1, + }; + replica_group.Init(cfg.init_config(), 5, 2, 0); + + // get status from leader and follower + auto leader = replica_group.get_core(0); + auto follower = replica_group.get_core(1); + ASSERT_EQ(error::OK, leader->ProcessAllH2EResponses()); + ASSERT_EQ(error::OK, follower->ProcessAllH2EResponses()); + leader->GetEnclaveStatus(); + follower->GetEnclaveStatus(); + + replica_group.PassMessagesUntilQuiet(); + auto leader_status = leader->TakeExpectedEnclaveStatusReply(); + auto follower_status = follower->TakeExpectedEnclaveStatusReply(); + + // drop the leader, have a new election, and try again + leader->Pause(false); + + // run long enough to elect a new leader + for(size_t i = 0; i < 4*valid_enclave_config.raft().election_ticks(); ++i) { + replica_group.TickTock(false); + } + + leader = replica_group.get_core(replica_group.GroupLeaderIndex()); + if(follower->leader()) { + follower = replica_group.get_core(2); + } + + ASSERT_EQ(error::OK, leader->ProcessAllH2EResponses()); + ASSERT_EQ(error::OK, follower->ProcessAllH2EResponses()); + leader->GetEnclaveStatus(); + follower->GetEnclaveStatus(); + + replica_group.PassMessagesUntilQuiet(); + leader_status = leader->TakeExpectedEnclaveStatusReply(); + follower_status = follower->TakeExpectedEnclaveStatusReply(); +} + +TEST_F(CoreTest, ClientRequests) { + auto [core, err] = Core::Create(ctx, valid_init_config); + ASSERT_TRUE(core->ID().Valid()); + CoreMap cores; + cores[core->ID()] = core.get(); + + { // Set up as one-replica Raft + UntrustedMessage msg; + + auto host = msg.mutable_h2e_request(); + host->set_request_id(999); + host->set_create_new_raft_group(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core->Receive(&ctx, msg)); + auto resp = Response(env::test::SentMessages()); + ASSERT_EQ(resp.request_id(), 999); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + LOG(INFO) << "sending backup request"; + + client::Request req; + auto b = req.mutable_backup(); + b->set_data("12345678901234567890123456789012"); + b->set_pin("12345678901234567890123456789012"); + b->set_max_tries(10); + client::Response resp; + ClientRequest(cores, core.get(), req, &resp, "backup7890123456"); + ASSERT_EQ(client::Response::kBackup, resp.inner_case()); + ASSERT_EQ(client::BackupResponse::OK, resp.backup().status()); + + LOG(INFO) << "sending expose request"; + + client::Request req2; + auto a = req2.mutable_expose(); + a->set_data("12345678901234567890123456789012"); + client::Response resp2; + ClientRequest(cores, core.get(), req2, &resp2, "backup7890123456"); + ASSERT_EQ(client::Response::kExpose, resp2.inner_case()); + ASSERT_EQ(client::ExposeResponse::OK, resp2.expose().status()); + + LOG(INFO) << "sending restore request"; + + client::Request req3; + auto r = req3.mutable_restore(); + r->set_pin("12345678901234567890123456789012"); + client::Response resp3; + ClientRequest(cores, core.get(), req3, &resp3, "backup7890123456"); + ASSERT_EQ(client::Response::kRestore, resp3.inner_case()); + ASSERT_EQ(client::RestoreResponse::OK, resp3.restore().status()); +} + +TEST_F(CoreTest, RestoreWithoutExpose) { + auto [core, err] = Core::Create(ctx, valid_init_config); + ASSERT_TRUE(core->ID().Valid()); + CoreMap cores; + cores[core->ID()] = core.get(); + + { // Set up as one-replica Raft + UntrustedMessage msg; + + auto host = msg.mutable_h2e_request(); + host->set_request_id(999); + host->set_create_new_raft_group(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core->Receive(&ctx, msg)); + auto resp = Response(env::test::SentMessages()); + ASSERT_EQ(resp.request_id(), 999); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + LOG(INFO) << "sending backup request"; + + client::Request req; + auto b = req.mutable_backup(); + b->set_data("12345678901234567890123456789012"); + b->set_pin("12345678901234567890123456789012"); + b->set_max_tries(10); + client::Response resp; + ClientRequest(cores, core.get(), req, &resp, "backup7890123456"); + ASSERT_EQ(client::Response::kBackup, resp.inner_case()); + ASSERT_EQ(client::BackupResponse::OK, resp.backup().status()); + + LOG(INFO) << "sending restore request"; + + client::Request req3; + auto r = req3.mutable_restore(); + r->set_pin("12345678901234567890123456789012"); + client::Response resp3; + ClientRequest(cores, core.get(), req3, &resp3, "backup7890123456"); + ASSERT_EQ(client::Response::kRestore, resp3.inner_case()); + ASSERT_EQ(client::RestoreResponse::MISSING, resp3.restore().status()); +} + +TEST_F(CoreTest, MultiNodeRaft) { + auto [core1, err1] = Core::Create(ctx, valid_init_config); + ASSERT_EQ(err1, error::OK); + auto [core2, err2] = Core::Create(ctx, valid_init_config); + ASSERT_EQ(err2, error::OK); + auto [core3, err3] = Core::Create(ctx, valid_init_config); + ASSERT_EQ(err3, error::OK); + LOG(INFO) << "core1=" << core1->ID() << ", core2=" << core2->ID() << ", core3=" << core3->ID(); + + // Create cores map for PassMessages + CoreMap cores; + cores[core1->ID()] = core1.get(); + cores[core2->ID()] = core2.get(); + cores[core3->ID()] = core3.get(); + + { + LOG(INFO) << "\n\nSet up as one-replica Raft on core 1"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1000); + host->set_create_new_raft_group(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core1->Receive(&ctx, msg)); + auto out = env::test::SentMessages(); + ASSERT_EQ(1, out.size()); + auto resp = out[0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1000); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + { + LOG(INFO) << "\n\nRequest join on core 2"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1001); + auto req = host->mutable_join_raft(); + core1->ID().ToString(req->mutable_peer_id()); + + context::Context ctx; + ASSERT_EQ(error::OK, core2->Receive(&ctx, msg)); + auto out = PassMessages(cores, core2.get()); + ASSERT_EQ(1, out[core2->ID()].size()); + auto resp = out[core2->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1001); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + { + LOG(INFO) << "\n\nRequest core2 vote"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1002); + host->set_request_voting(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core2->Receive(&ctx, msg)); + auto out = PassMessages(cores, core2.get()); + ASSERT_EQ(1, out[core2->ID()].size()); + auto resp = out[core2->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1002); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + { + LOG(INFO) << "\n\nRequest join on core 3"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1003); + auto req = host->mutable_join_raft(); + core1->ID().ToString(req->mutable_peer_id()); + + context::Context ctx; + ASSERT_EQ(error::OK, core3->Receive(&ctx, msg)); + auto out = PassMessages(cores, core3.get()); + ASSERT_EQ(1, out[core3->ID()].size()); + auto resp = out[core3->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1003); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + { + LOG(INFO) << "\n\nRequest core3 vote"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1004); + host->set_request_voting(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core3->Receive(&ctx, msg)); + auto out = PassMessages(cores, core3.get()); + ASSERT_EQ(1, out[core3->ID()].size()); + auto resp = out[core3->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1004); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + EXPECT_TRUE(core1->serving()); + EXPECT_TRUE(core1->leader()); + EXPECT_TRUE(core2->serving()); + EXPECT_FALSE(core2->leader()); + EXPECT_TRUE(core3->serving()); + EXPECT_FALSE(core3->leader()); + + LOG(INFO) << "\n\nRequest to leader core1"; + client::Request req; + auto b = req.mutable_backup(); + b->set_data("12345678901234567890123456789012"); + b->set_pin("12345678901234567890123456789012"); + b->set_max_tries(10); + client::Response resp; + ClientRequest(cores, core1.get(), req, &resp, "backup7890123456"); + ASSERT_EQ(client::Response::kBackup, resp.inner_case()); + ASSERT_EQ(client::BackupResponse::OK, resp.backup().status()); + + LOG(INFO) << "\n\nElecting next leader"; + const int max_attempts = 100; + cores.erase(core1->ID()); // core1 goes offline + for (int i = 0; i < max_attempts && !core2->leader(); i++) { + LOG(INFO) << "core2 tick"; + UntrustedMessage msg; + msg.mutable_timer_tick()->set_new_timestamp_unix_secs(i); + + context::Context ctx; + ASSERT_EQ(error::OK, core2->Receive(&ctx, msg)); + PassMessages(cores, core2.get()); + } + EXPECT_TRUE(core2->serving()); + EXPECT_TRUE(core2->leader()); + EXPECT_TRUE(core3->serving()); + EXPECT_FALSE(core3->leader()); + + LOG(INFO) << "\n\nRequest to leader core2"; + + client::Request req2; + auto r = req2.mutable_expose(); + r->set_data("12345678901234567890123456789012"); + client::Response resp2; + ClientRequest(cores, core2.get(), req2, &resp2, "backup7890123456"); + ASSERT_EQ(client::Response::kExpose, resp2.inner_case()); + ASSERT_EQ(client::ExposeResponse::OK, resp2.expose().status()); + + LOG(INFO) << "\n\nRequest to non-leader core3"; + + client::Request req3; + auto r3 = req3.mutable_restore(); + r3->set_pin("12345678901234567890123456789012"); + client::Response resp3; + ClientRequest(cores, core3.get(), req3, &resp3, "backup7890123456"); + ASSERT_EQ(client::Response::kRestore, resp3.inner_case()); + ASSERT_EQ(client::RestoreResponse::OK, resp3.restore().status()); +} + +TEST_F(CoreTest, RejectsUnsetHostTransactionID) { + auto [core, err] = Core::Create(ctx, valid_init_config); + ASSERT_EQ(err, error::OK); + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + // host->set_request_id(1004); // Not set, should error out. + host->set_get_enclave_status(true); + context::Context ctx; + err = core->Receive(&ctx, msg); + ASSERT_EQ(err, error::Core_HostToEnclaveTransactionID); +} + +TEST_F(CoreTest, MultiJoinCausesDisconnectedPeersWhichThenConnect) { + ReplicaGroup replica_group; + ReplicaGroupConfig cfg = { + .ecfg = valid_enclave_config, + .min_voting = 2, + .max_voting = 3, + }; + replica_group.Init( + cfg.init_config(), + 1, // initial_voting + 0, // initial_nonvoting + 2); // initial_nonmember + // By issuing two relatively simultaneous JoinRaft connections, we + // achieve a state where, during the raft Joining protocol, both cores + // 1 and 2 create peer connections to core 0, but they do not establish + // a peer connection to each other. + LOG(INFO) << "Sending joins"; + replica_group.get_core(1)->JoinRaft(replica_group.get_core(0)->ID()); + replica_group.get_core(2)->JoinRaft(replica_group.get_core(0)->ID()); + LOG(INFO) << "Processing messages"; + ASSERT_EQ(error::OK, replica_group.PassMessagesUntilQuiet()); + LOG(INFO) << "Requesting voting"; + replica_group.get_core(1)->RequestVoting(); + ASSERT_EQ(error::OK, replica_group.PassMessagesUntilQuiet()); + replica_group.get_core(2)->RequestVoting(); + ASSERT_EQ(error::OK, replica_group.PassMessagesUntilQuiet()); + LOG(INFO) << "Partitioning"; + replica_group.CreatePartition(std::map{ + {0,1}, + {1,2}, {2,2}, + }); + // What should happen now is that, as part of one of these ticks, + // nodes 1 and 2 should detect that they're not connected to each + // other and establish a connection. In doing so, they make it possible + // for themselves to run a leader election, and one of them should + // be elected leader. + for (int i = 0; i < valid_enclave_config.raft().election_ticks() * 4; i++) { + LOG(INFO) << "Tick " << i; + replica_group.TickTock(2, false); + } + EXPECT_TRUE(replica_group.get_core(1)->leader() || replica_group.get_core(2)->leader()); +} + +TEST_F(CoreTest, SetLogLevel) { + auto old_log_level = ::svr2::util::log_level_to_write; + auto [core, err] = Core::Create(ctx, valid_init_config); + ASSERT_EQ(err, error::OK); + + { + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(100); + host->set_set_log_level(::svr2::enclaveconfig::LOG_LEVEL_MAX); + context::Context ctx; + ASSERT_EQ(error::OK, core->Receive(&ctx, msg)); + auto resp = Response(env::test::SentMessages()); + ASSERT_EQ(resp.request_id(), 100); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::Core_InvalidLogLevel); + } + { + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(101); + host->set_set_log_level(::svr2::enclaveconfig::LOG_LEVEL_WARNING); + context::Context ctx; + ASSERT_EQ(error::OK, core->Receive(&ctx, msg)); + auto resp = Response(env::test::SentMessages()); + ASSERT_EQ(resp.request_id(), 101); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + ASSERT_EQ(::svr2::util::log_level_to_write, ::svr2::enclaveconfig::LOG_LEVEL_WARNING); + util::SetLogLevel(old_log_level); + ASSERT_EQ(::svr2::util::log_level_to_write, old_log_level); + } +} + +TEST_F(CoreTest, ResetPeer){ + ReplicaGroup replica_group{}; + size_t initial_voting = 4; + size_t initial_nonvoting = 0; + size_t initial_nonmember = 0; + ReplicaGroupConfig cfg = { + .ecfg = valid_enclave_config, + .min_voting = 2, + .max_voting = 3, + }; + replica_group.Init( + cfg.init_config(), + initial_voting, + initial_nonvoting, + initial_nonmember); + + // get status from leader and follower + auto leader = replica_group.get_core(0); + auto follower = replica_group.get_core(1); + ASSERT_EQ(error::OK, leader->ResetPeer(follower->ID())); + replica_group.PassMessagesUntilQuiet(); + LOG(INFO) << "Reset peer"; + + ASSERT_EQ(error::OK, leader->ProcessAllH2EResponses()); + ASSERT_EQ(error::OK, follower->ProcessAllH2EResponses()); + leader->GetEnclaveStatus(); + follower->GetEnclaveStatus(); + + replica_group.PassMessagesUntilQuiet(); + auto leader_status = leader->TakeExpectedEnclaveStatusReply(); + auto follower_status = follower->TakeExpectedEnclaveStatusReply(); + + for(size_t i = 0; i < leader_status.peers_size(); ++i) { + auto peer_status = leader_status.peers(i); + peerid::PeerID pid; + ASSERT_EQ(error::OK, pid.FromString(peer_status.peer_id())); + if(pid == follower->ID()) { + ASSERT_EQ(PEER_DISCONNECTED, peer_status.connection_status().state()); + } + } + + replica_group.TickTock(false); + replica_group.TickTock(false); + + ASSERT_EQ(error::OK, leader->ProcessAllH2EResponses()); + ASSERT_EQ(error::OK, follower->ProcessAllH2EResponses()); + leader->GetEnclaveStatus(); + follower->GetEnclaveStatus(); + + replica_group.PassMessagesUntilQuiet(); + leader_status = leader->TakeExpectedEnclaveStatusReply(); + follower_status = follower->TakeExpectedEnclaveStatusReply(); + + for(size_t i = 0; i < leader_status.peers_size(); ++i) { + auto peer_status = leader_status.peers(i); + peerid::PeerID pid; + ASSERT_EQ(error::OK, pid.FromString(peer_status.peer_id())); + if(pid == follower->ID()) { + ASSERT_EQ(PEER_CONNECTED, peer_status.connection_status().state()); + } + } +} + +TEST_F(CoreTest, ReplicatingRowsWithMultiplePackets) { + enclaveconfig::InitConfig config = valid_init_config; + config.mutable_enclave_config()->mutable_raft()->set_replication_chunk_bytes(10 * 1024); // holds ~17 logs + auto [core1, err1] = Core::Create(ctx, config); + ASSERT_EQ(err1, error::OK); + auto [core2, err2] = Core::Create(ctx, config); + ASSERT_EQ(err2, error::OK); + LOG(INFO) << "core1=" << core1->ID() << ", core2=" << core2->ID(); + + // Create cores map for PassMessages + CoreMap cores; + cores[core1->ID()] = core1.get(); + cores[core2->ID()] = core2.get(); + + { + LOG(INFO) << "\n\nSet up as one-replica Raft on core 1"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1000); + host->set_create_new_raft_group(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core1->Receive(&ctx, msg)); + auto out = env::test::SentMessages(); + ASSERT_EQ(1, out.size()); + auto resp = out[0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1000); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + for (uint64_t i = 0; i < 100; i++) { // more logs than fit in replication_chunk_bytes + LOG(INFO) << "\n\nRequest to leader core1"; + client::Request req; + std::array backup_id = {0}; + util::BigEndian64Bytes(i, backup_id.data()); + + auto b = req.mutable_backup(); + b->set_data("12345678901234567890123456789012"); + b->set_pin("12345678901234567890123456789012"); + b->set_max_tries(10); + client::Response resp; + ClientRequest(cores, core1.get(), req, &resp, util::ByteArrayToString(backup_id)); + ASSERT_EQ(client::Response::kBackup, resp.inner_case()); + ASSERT_EQ(client::BackupResponse::OK, resp.backup().status()); + } + + { + LOG(INFO) << "\n\nRequest join on core 2"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1001); + auto req = host->mutable_join_raft(); + core1->ID().ToString(req->mutable_peer_id()); + + context::Context ctx; + ASSERT_EQ(error::OK, core2->Receive(&ctx, msg)); + auto out = PassMessages(cores, core2.get()); + ASSERT_EQ(1, out[core2->ID()].size()); + auto resp = out[core2->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1001); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + { + LOG(INFO) << "\n\nRequest core2 vote"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1002); + host->set_request_voting(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core2->Receive(&ctx, msg)); + auto out = PassMessages(cores, core2.get()); + ASSERT_EQ(1, out[core2->ID()].size()); + auto resp = out[core2->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1002); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + EXPECT_TRUE(core1->serving()); + EXPECT_TRUE(core1->leader()); + EXPECT_TRUE(core2->serving()); + EXPECT_FALSE(core2->leader()); +} + +TEST_F(CoreTest, ReplicatingRowsWithTruncatedLog) { + enclaveconfig::InitConfig config = valid_init_config; + config.mutable_enclave_config()->mutable_raft()->set_log_max_bytes(10240); // truncate log quickly + auto [core1, err1] = Core::Create(ctx, config); + ASSERT_EQ(err1, error::OK); + auto [core2, err2] = Core::Create(ctx, config); + ASSERT_EQ(err2, error::OK); + LOG(INFO) << "core1=" << core1->ID() << ", core2=" << core2->ID(); + + // Create cores map for PassMessages + CoreMap cores; + cores[core1->ID()] = core1.get(); + cores[core2->ID()] = core2.get(); + + { + LOG(INFO) << "\n\nSet up as one-replica Raft on core 1"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1000); + host->set_create_new_raft_group(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core1->Receive(&ctx, msg)); + auto out = env::test::SentMessages(); + ASSERT_EQ(1, out.size()); + auto resp = out[0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1000); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + for (uint64_t i = 0; i < 100; i++) { // more logs than fit in replication_chunk_bytes + LOG(INFO) << "\n\nRequest to leader core1"; + client::Request req; + std::array backup_id = {0}; + util::BigEndian64Bytes(i, backup_id.data()); + + auto b = req.mutable_backup(); + b->set_data("12345678901234567890123456789012"); + b->set_pin("12345678901234567890123456789012"); + b->set_max_tries(10); + client::Response resp; + ClientRequest(cores, core1.get(), req, &resp, util::ByteArrayToString(backup_id)); + ASSERT_EQ(client::Response::kBackup, resp.inner_case()); + ASSERT_EQ(client::BackupResponse::OK, resp.backup().status()); + } + + { + LOG(INFO) << "\n\nRequest join on core 2"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1001); + auto req = host->mutable_join_raft(); + core1->ID().ToString(req->mutable_peer_id()); + + context::Context ctx; + ASSERT_EQ(error::OK, core2->Receive(&ctx, msg)); + auto out = PassMessages(cores, core2.get()); + ASSERT_EQ(1, out[core2->ID()].size()); + auto resp = out[core2->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1001); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + { + LOG(INFO) << "\n\nRequest core2 vote"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1002); + host->set_request_voting(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core2->Receive(&ctx, msg)); + auto out = PassMessages(cores, core2.get()); + ASSERT_EQ(1, out[core2->ID()].size()); + auto resp = out[core2->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1002); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + EXPECT_TRUE(core1->serving()); + EXPECT_TRUE(core1->leader()); + EXPECT_TRUE(core2->serving()); + EXPECT_FALSE(core2->leader()); +} + +TEST_F(CoreTest, RaftRemoval) { + ReplicaGroupConfig cfg = { + .ecfg = valid_enclave_config, + .min_voting = 2, + .max_voting = 3, + .initial_voting = 3, + .initial_nonvoting = 0, + .initial_nonmember = 0, + }; + ReplicaGroup replica_group{}; + replica_group.Init(cfg.init_config(), cfg.initial_voting, cfg.initial_nonvoting, cfg.initial_nonmember); + EXPECT_TRUE(replica_group.get_core(0)->leader()); + EXPECT_TRUE(replica_group.get_core(1)->active()); + EXPECT_TRUE(replica_group.get_core(1)->voting()); + + LOG(INFO) << "================================== REMOVING " << replica_group.get_core(1)->ID(); + replica_group.get_core(1)->RaftRemoval(); + replica_group.PassMessagesUntilQuiet(); + EXPECT_TRUE(replica_group.get_core(0)->leader()); + EXPECT_EQ(0, replica_group.get_core(0)->all_replicas().count(replica_group.get_core(1)->ID())); + EXPECT_EQ(0, replica_group.get_core(2)->all_replicas().count(replica_group.get_core(1)->ID())); + // Keeping these tests in here for illustrative purposes: + // Core 1 has been removed from Raft by this point, but it doesn't KNOW that it + // has, because part of being removed is that it no longer receives Raft logs. + EXPECT_TRUE(replica_group.get_core(1)->active()); + EXPECT_TRUE(replica_group.get_core(1)->voting()); +} + +TEST_F(CoreTest, RaftRemovalOfLeaderFails) { + ReplicaGroupConfig cfg = { + .ecfg = valid_enclave_config, + .min_voting = 2, + .max_voting = 3, + .initial_voting = 3, + .initial_nonvoting = 0, + .initial_nonmember = 0, + }; + ReplicaGroup replica_group{}; + replica_group.Init(cfg.init_config(), cfg.initial_voting, cfg.initial_nonvoting, cfg.initial_nonmember); + EXPECT_TRUE(replica_group.get_core(0)->leader()); + EXPECT_TRUE(replica_group.get_core(1)->active()); + EXPECT_TRUE(replica_group.get_core(1)->voting()); + replica_group.get_core(0)->RaftRemoval(); + replica_group.PassMessagesUntilQuiet(); + EXPECT_TRUE(replica_group.get_core(0)->leader()); + EXPECT_EQ(1, replica_group.get_core(0)->all_replicas().count(replica_group.get_core(1)->ID())); + EXPECT_EQ(error::Core_LeaderRemovingSelf, replica_group.ProcessAllH2EResponses()); +} + +TEST_F(CoreTest, Hashes2) { + auto [core, err] = Core::Create(ctx, valid_init_config); + ASSERT_TRUE(core->ID().Valid()); + CoreMap cores; + cores[core->ID()] = core.get(); + + { // Set up as one-replica Raft + UntrustedMessage msg; + + auto host = msg.mutable_h2e_request(); + host->set_request_id(999); + host->set_create_new_raft_group(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core->Receive(&ctx, msg)); + auto resp = Response(env::test::SentMessages()); + ASSERT_EQ(resp.request_id(), 999); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + LOG(INFO) << "sending backup request"; + + client::Request req; + auto b = req.mutable_backup(); + b->set_data("12345678901234567890123456789012"); + b->set_pin("12345678901234567890123456789012"); + b->set_max_tries(10); + client::Response resp; + ClientRequest(cores, core.get(), req, &resp, "backup7890123456"); + ASSERT_EQ(client::Response::kBackup, resp.inner_case()); + ASSERT_EQ(client::BackupResponse::OK, resp.backup().status()); + + LOG(INFO) << "sending expose request"; + + client::Request req2; + auto a = req2.mutable_expose(); + a->set_data("12345678901234567890123456789012"); + client::Response resp2; + ClientRequest(cores, core.get(), req2, &resp2, "backup7890123456"); + ASSERT_EQ(client::Response::kExpose, resp2.inner_case()); + ASSERT_EQ(client::ExposeResponse::OK, resp2.expose().status()); + + LOG(INFO) << "sending restore request"; + + client::Request req3; + auto r = req3.mutable_restore(); + r->set_pin("12345678901234567890123456789012"); + client::Response resp3; + ClientRequest(cores, core.get(), req3, &resp3, "backup7890123456"); + ASSERT_EQ(client::Response::kRestore, resp3.inner_case()); + ASSERT_EQ(client::RestoreResponse::OK, resp3.restore().status()); + + { + UntrustedMessage msg; + + auto host = msg.mutable_h2e_request(); + host->set_request_id(10101); + host->set_hashes(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core->Receive(&ctx, msg)); + auto resp = Response(env::test::SentMessages()); + ASSERT_EQ(resp.request_id(), 10101); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kHashes); + ASSERT_EQ(resp.status(), error::OK); + EXPECT_EQ(util::BigEndian64FromBytes(reinterpret_cast(resp.hashes().db_hash().data())), + 5883775926529965153ULL); + EXPECT_EQ(resp.hashes().commit_idx(), 4); + EXPECT_EQ(util::BigEndian64FromBytes(reinterpret_cast(resp.hashes().commit_hash_chain().data())), + 8788200018387288622ULL); + } +} + +TEST_F(CoreTest, ReplicationRandom) { + for (int test_i = 0; test_i < 10; test_i++) { + enclaveconfig::InitConfig config = valid_init_config; + config.mutable_enclave_config()->mutable_raft()->set_log_max_bytes(10240); + auto [core1, err1] = Core::Create(ctx, config); + ASSERT_EQ(err1, error::OK); + auto [core2, err2] = Core::Create(ctx, config); + ASSERT_EQ(err2, error::OK); + LOG(INFO) << "core1=" << core1->ID() << ", core2=" << core2->ID(); + + // Create cores map for PassMessages + CoreMap cores; + cores[core1->ID()] = core1.get(); + cores[core2->ID()] = core2.get(); + + { + LOG(INFO) << "\n\nSet up as one-replica Raft on core 1"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1000); + host->set_create_new_raft_group(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core1->Receive(&ctx, msg)); + auto out = env::test::SentMessages(); + ASSERT_EQ(1, out.size()); + auto resp = out[0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1000); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + for (uint64_t i = 0; i < 100; i++) { // more logs than fit in replication_chunk_bytes + LOG(INFO) << "\n\nRequest to leader core1"; + client::Request req; + std::array backup_id = {0}; + // Randomly order inserts + util::BigEndian64Bytes(rand(), backup_id.data()); + + auto b = req.mutable_backup(); + b->set_data("12345678901234567890123456789012"); + b->set_pin("12345678901234567890123456789012"); + b->set_max_tries(10); + client::Response resp; + ClientRequest(cores, core1.get(), req, &resp, util::ByteArrayToString(backup_id)); + ASSERT_EQ(client::Response::kBackup, resp.inner_case()); + ASSERT_EQ(client::BackupResponse::OK, resp.backup().status()); + } + + { + LOG(INFO) << "\n\nRequest join on core 2"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1001); + auto req = host->mutable_join_raft(); + core1->ID().ToString(req->mutable_peer_id()); + + context::Context ctx; + ASSERT_EQ(error::OK, core2->Receive(&ctx, msg)); + auto out = PassMessages(cores, core2.get()); + ASSERT_EQ(1, out[core2->ID()].size()); + auto resp = out[core2->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1001); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + { + LOG(INFO) << "\n\nRequest hashes"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1099); + host->set_hashes(true); + context::Context ctx; + + ASSERT_EQ(error::OK, core1->Receive(&ctx, msg)); + auto resp1 = Response(env::test::SentMessages()); + ASSERT_EQ(resp1.inner_case(), HostToEnclaveResponse::kHashes); + ASSERT_EQ(resp1.status(), error::OK); + + ASSERT_EQ(error::OK, core2->Receive(&ctx, msg)); + auto resp2 = Response(env::test::SentMessages()); + ASSERT_EQ(resp2.inner_case(), HostToEnclaveResponse::kHashes); + ASSERT_EQ(resp2.status(), error::OK); + + EXPECT_EQ(resp1.hashes().db_hash(), resp2.hashes().db_hash()); + EXPECT_EQ(resp1.hashes().commit_idx(), resp2.hashes().commit_idx()); + EXPECT_EQ(resp1.hashes().commit_hash_chain(), resp2.hashes().commit_hash_chain()); + } + } +} + +static e2e::ReplicateStatePush MakeReplicateStatePush( + uint64_t repl_id, + uint64_t seq, + uint64_t first_log, + size_t logs, + bool db_to_end, + size_t rows) { + e2e::ReplicateStatePush p; + p.set_replication_id(repl_id); + p.set_replication_sequence(seq); + p.set_first_log_idx(first_log); + for (size_t i = 0; i < logs; i++) { + p.add_entries(); + } + p.set_db_to_end(db_to_end); + for (size_t i = 0; i < rows; i++) { + p.add_rows(); + } + return p; +} + +static void ReplicateStatePushMatches(const e2e::ReplicateStatePush& a, const e2e::ReplicateStatePush& b) { + LOG(INFO) << "Testing replication ID " << a.replication_id() << "/" << b.replication_id() << " seq " << a.replication_sequence() << "/" << b.replication_sequence(); + EXPECT_EQ(a.replication_id(), b.replication_id()); + EXPECT_EQ(a.replication_sequence(), b.replication_sequence()); + EXPECT_EQ(a.first_log_idx(), b.first_log_idx()); + EXPECT_EQ(a.entries_size(), b.entries_size()); + EXPECT_EQ(a.db_to_end(), b.db_to_end()); + EXPECT_EQ(a.rows_size(), b.rows_size()); +} + +TEST_F(CoreTest, Replicator) { + enclaveconfig::InitConfig cfg = valid_init_config; + cfg.mutable_enclave_config()->mutable_raft()->set_replication_chunk_bytes(10240); + cfg.mutable_enclave_config()->mutable_raft()->set_replication_pipeline(3); + auto [core, err] = Core::Create(ctx, cfg); + ASSERT_TRUE(core->ID().Valid()); + CoreMap cores; + cores[core->ID()] = core.get(); + peers::PeerManager pm; + ASSERT_EQ(error::OK, pm.Init(ctx)); + + LOG(INFO) << "\n\nCreating Raft group"; + { + UntrustedMessage msg; + + auto host = msg.mutable_h2e_request(); + host->set_request_id(999); + host->set_create_new_raft_group(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core->Receive(&ctx, msg)); + auto resp = Response(env::test::SentMessages()); + ASSERT_EQ(resp.request_id(), 999); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + LOG(INFO) << "\n\nAdding initial rows"; + for (uint8_t i = 0; i < 200; i++) { + client::Request req; + std::array backup_id = {i, 0}; + + auto b = req.mutable_backup(); + b->set_data("12345678901234567890123456789012"); + b->set_pin("12345678901234567890123456789012"); + b->set_max_tries(10); + client::Response resp; + ClientRequest(cores, core.get(), req, &resp, util::ByteArrayToString(backup_id)); + ASSERT_EQ(client::Response::kBackup, resp.inner_case()); + ASSERT_EQ(client::BackupResponse::OK, resp.backup().status()); + } + + LOG(INFO) << "\n\nConnecting Core to PeerManager"; + { + ASSERT_EQ(error::OK, pm.ConnectToPeer(ctx, core->ID())); + auto msgs = env::test::SentMessages(); + ASSERT_EQ(1, msgs.size()); + ASSERT_EQ(error::OK, core->Receive(ctx, PeerMessage(pm.ID(), core->ID(), msgs[0]))); + msgs = env::test::SentMessages(); + ASSERT_EQ(2, msgs.size()); // synack + timestamp + e2e::EnclaveToEnclaveMessage* e2e; + ASSERT_EQ(error::OK, pm.RecvFromPeer(ctx, PeerMessage(core->ID(), pm.ID(), msgs[0]).peer_message(), &e2e)); + ASSERT_NE(e2e, nullptr); + ASSERT_EQ(e2e->inner_case(), e2e::EnclaveToEnclaveMessage::kConnected); + ASSERT_EQ(error::OK, pm.RecvFromPeer(ctx, PeerMessage(core->ID(), pm.ID(), msgs[1]).peer_message(), &e2e)); + ASSERT_NE(e2e, nullptr); + ASSERT_EQ(e2e->inner_case(), e2e::EnclaveToEnclaveMessage::kTransactionRequest); + } + + LOG(INFO) << "\n\nGetRaft"; + uint64_t group_id; + uint64_t repl_id = 1; + { + e2e::EnclaveToEnclaveMessage msg; + auto txn = msg.mutable_transaction_request(); + txn->set_request_id(1); + txn->set_get_raft(true); + ASSERT_EQ(error::OK, pm.SendToPeer(ctx, core->ID(), msg)); + auto msgs = env::test::SentMessages(); + ASSERT_EQ(1, msgs.size()); + ASSERT_EQ(error::OK, core->Receive(ctx, PeerMessage(pm.ID(), core->ID(), msgs[0]))); + msgs = env::test::SentMessages(); + ASSERT_EQ(1, msgs.size()); // synack + timestamp + e2e::EnclaveToEnclaveMessage* e2e; + ASSERT_EQ(error::OK, pm.RecvFromPeer(ctx, PeerMessage(core->ID(), pm.ID(), msgs[0]).peer_message(), &e2e)); + ASSERT_NE(e2e, nullptr); + ASSERT_EQ(e2e->inner_case(), e2e::EnclaveToEnclaveMessage::kTransactionResponse); + ASSERT_EQ(e2e->transaction_response().inner_case(), e2e::TransactionResponse::kGetRaft); + group_id = e2e->transaction_response().get_raft().group_config().group_id(); + ASSERT_NE(group_id, 0); + } + LOG(INFO) << "\n\nReplicateReq"; + std::string last_backup_id = ""; + std::deque txns; + { + e2e::EnclaveToEnclaveMessage msg; + auto txn = msg.mutable_transaction_request(); + txn->set_request_id(12345); + txn->mutable_replicate_state()->set_group_id(group_id); + txn->mutable_replicate_state()->set_replication_id(repl_id); + ASSERT_EQ(error::OK, pm.SendToPeer(ctx, core->ID(), msg)); + auto msgs = env::test::SentMessages(); + ASSERT_EQ(1, msgs.size()); + ASSERT_EQ(error::OK, core->Receive(ctx, PeerMessage(pm.ID(), core->ID(), msgs[0]))); + msgs = env::test::SentMessages(); + std::vector expected_pipeline = { + MakeReplicateStatePush(repl_id, 0, 1, 80, false, 0), + MakeReplicateStatePush(repl_id, 1, 81, 79, false, 0), + MakeReplicateStatePush(repl_id, 2, 160, 42, false, 44), + }; + ASSERT_EQ(expected_pipeline.size(), msgs.size()); // pipelining + for (size_t i = 0; i < expected_pipeline.size(); i++) { + e2e::EnclaveToEnclaveMessage* e2e; + ASSERT_EQ(error::OK, pm.RecvFromPeer(ctx, PeerMessage(core->ID(), pm.ID(), msgs[i]).peer_message(), &e2e)); + ASSERT_NE(e2e, nullptr); + ASSERT_EQ(e2e->inner_case(), e2e::EnclaveToEnclaveMessage::kTransactionRequest); + ASSERT_EQ(e2e->transaction_request().inner_case(), e2e::TransactionRequest::kReplicateStatePush); + ReplicateStatePushMatches( + e2e->transaction_request().replicate_state_push(), + expected_pipeline[i]); + txns.push_back(e2e->transaction_request().request_id()); + for (const auto& row : e2e->transaction_request().replicate_state_push().rows()) { + e2e::DB2RowState rs; + ASSERT_TRUE(rs.ParseFromString(row)); + ASSERT_LT(last_backup_id, rs.backup_id()); + last_backup_id = rs.backup_id(); + } + } + } + LOG(INFO) << "\n\nAdding intermediate rows"; + for (uint8_t i = 0; i < 200; i++) { + client::Request req; + std::array backup_id = {i, 1}; + + auto b = req.mutable_backup(); + b->set_data("12345678901234567890123456789012"); + b->set_pin("12345678901234567890123456789012"); + b->set_max_tries(10); + client::Response resp; + ClientRequest(cores, core.get(), req, &resp, util::ByteArrayToString(backup_id)); + ASSERT_EQ(client::Response::kBackup, resp.inner_case()); + ASSERT_EQ(client::BackupResponse::OK, resp.backup().status()); + } + std::deque expected_pushes = { + MakeReplicateStatePush(repl_id, 3, 202, 79, false, 0), + MakeReplicateStatePush(repl_id, 4, 281, 79, false, 0), + MakeReplicateStatePush(repl_id, 5, 360, 42, false, 44), + MakeReplicateStatePush(repl_id, 6, 402, 0, false, 97), + MakeReplicateStatePush(repl_id, 7, 402, 0, false, 97), + MakeReplicateStatePush(repl_id, 8, 402, 0, true, 75), + }; + while (expected_pushes.size()) { + e2e::EnclaveToEnclaveMessage msg; + auto txn = msg.mutable_transaction_response(); + ASSERT_GT(txns.size(), 0); + txn->set_request_id(txns.front()); + txns.pop_front(); + txn->set_status(error::OK); + ASSERT_EQ(error::OK, pm.SendToPeer(ctx, core->ID(), msg)); + auto msgs = env::test::SentMessages(); + ASSERT_EQ(1, msgs.size()); + ASSERT_EQ(error::OK, core->Receive(ctx, PeerMessage(pm.ID(), core->ID(), msgs[0]))); + msgs = env::test::SentMessages(); + ASSERT_EQ(msgs.size(), 1); + e2e::EnclaveToEnclaveMessage* e2e; + ASSERT_EQ(error::OK, pm.RecvFromPeer(ctx, PeerMessage(core->ID(), pm.ID(), msgs[0]).peer_message(), &e2e)); + ASSERT_NE(e2e, nullptr); + ASSERT_EQ(e2e->inner_case(), e2e::EnclaveToEnclaveMessage::kTransactionRequest); + ASSERT_EQ(e2e->transaction_request().inner_case(), e2e::TransactionRequest::kReplicateStatePush); + ReplicateStatePushMatches( + e2e->transaction_request().replicate_state_push(), + expected_pushes.front()); + expected_pushes.pop_front(); + txns.push_back(e2e->transaction_request().request_id()); + for (const auto& row : e2e->transaction_request().replicate_state_push().rows()) { + e2e::DB2RowState rs; + ASSERT_TRUE(rs.ParseFromString(row)); + ASSERT_LT(last_backup_id, rs.backup_id()); + last_backup_id = rs.backup_id(); + } + } + while (txns.size() > 1) { + e2e::EnclaveToEnclaveMessage msg; + auto txn = msg.mutable_transaction_response(); + txn->set_request_id(txns.front()); + txns.pop_front(); + txn->set_status(error::OK); + ASSERT_EQ(error::OK, pm.SendToPeer(ctx, core->ID(), msg)); + auto msgs = env::test::SentMessages(); + ASSERT_EQ(1, msgs.size()); + ASSERT_EQ(error::OK, core->Receive(ctx, PeerMessage(pm.ID(), core->ID(), msgs[0]))); + msgs = env::test::SentMessages(); + ASSERT_EQ(msgs.size(), 0); + } + { + e2e::EnclaveToEnclaveMessage msg; + auto txn = msg.mutable_transaction_response(); + ASSERT_EQ(txns.size(), 1); + txn->set_request_id(txns.front()); + txns.pop_front(); + txn->set_status(error::OK); + ASSERT_EQ(error::OK, pm.SendToPeer(ctx, core->ID(), msg)); + auto msgs = env::test::SentMessages(); + ASSERT_EQ(1, msgs.size()); + ASSERT_EQ(error::OK, core->Receive(ctx, PeerMessage(pm.ID(), core->ID(), msgs[0]))); + msgs = env::test::SentMessages(); + ASSERT_EQ(msgs.size(), 1); + e2e::EnclaveToEnclaveMessage* e2e; + ASSERT_EQ(error::OK, pm.RecvFromPeer(ctx, PeerMessage(core->ID(), pm.ID(), msgs[0]).peer_message(), &e2e)); + ASSERT_NE(e2e, nullptr); + ASSERT_EQ(e2e->inner_case(), e2e::EnclaveToEnclaveMessage::kTransactionResponse); + ASSERT_EQ(e2e->transaction_response().inner_case(), e2e::TransactionResponse::kStatus); + ASSERT_EQ(e2e->transaction_response().status(), error::OK); + ASSERT_EQ(e2e->transaction_response().request_id(), 12345); + } +} + + +TEST_F(CoreTest, BackupResetsNumTries) { + + ReplicaGroupConfig cfg = { + .ecfg = valid_enclave_config, + .min_voting = 1, + .max_voting = 1, + .initial_voting = 3, + .initial_nonvoting = 0, + .initial_nonmember = 0 + }; + ReplicaGroup replica_group{}; + replica_group.Init(cfg.init_config(), cfg.initial_voting, cfg.initial_nonvoting, cfg.initial_nonmember); + + // tik tok + replica_group.TickTock(false); + replica_group.TickTock(false); + + auto [pin, e1] = util::StringToByteArray<32>("PIN45678901234567890123456789012"); + auto [wrong_pin, e2] = util::StringToByteArray<32>("SIN45678901234567890123456789012"); + auto [secret, e3] = util::StringToByteArray<48>("SECRET78901234567890123456789012"); + ASSERT_TRUE(e1 == error::OK && e2 == error::OK && e3 == error::OK); + size_t num_tries = 3; + + size_t core_num = 0; // connect to the leader + auto client_core = replica_group.get_core(core_num); + + // Client requests backup + { + TestingClient cl(*client_core, "authenticated_id"); + + cl.RequestHandshake(); + replica_group.TickTock(false); + replica_group.TickTock(false); + + cl.RequestBackup(secret, pin, num_tries); + replica_group.TickTock(false); + + auto backup_response = cl.get_backup_response(); + ASSERT_NE(backup_response, nullptr); + LOG(INFO) << "created backup"; + } + + // Client requests expose + { + TestingClient cl(*client_core, "authenticated_id"); + + cl.RequestHandshake(); + replica_group.TickTock(false); + replica_group.TickTock(false); + + cl.RequestExpose(secret); + replica_group.TickTock(false); + + auto expose_response = cl.get_expose_response(); + ASSERT_NE(expose_response, nullptr); + LOG(INFO) << "created expose"; + } + + // Client requests restore with wrong pin + { + client_core = replica_group.get_core(core_num); + TestingClient cl(*client_core, "authenticated_id"); + cl.RequestHandshake(); + replica_group.TickTock(false); + replica_group.TickTock(false); + cl.RequestRestore(wrong_pin); + replica_group.TickTock(false); + + auto restore_response = cl.get_restore_response(); + ASSERT_NE(restore_response, nullptr); + ASSERT_EQ(restore_response->tries(), num_tries - 1); + ASSERT_NE(util::ByteArrayToString(secret), restore_response->data()); + + } + + + // Client requests backup again + { + TestingClient cl(*client_core, "authenticated_id"); + + cl.RequestHandshake(); + replica_group.TickTock(false); + replica_group.TickTock(false); + + cl.RequestBackup(secret, pin, num_tries); + replica_group.TickTock(false); + + auto backup_response = cl.get_backup_response(); + ASSERT_NE(backup_response, nullptr); + LOG(INFO) << "created backup"; + } + + // Client requests expose again + { + TestingClient cl(*client_core, "authenticated_id"); + + cl.RequestHandshake(); + replica_group.TickTock(false); + replica_group.TickTock(false); + + cl.RequestExpose(secret); + replica_group.TickTock(false); + + auto expose_response = cl.get_expose_response(); + ASSERT_NE(expose_response, nullptr); + LOG(INFO) << "created expose"; + } + + // Client requests restore again and checks that the number of tries is correct + { + client_core = replica_group.get_core(core_num); + TestingClient cl(*client_core, "authenticated_id"); + cl.RequestHandshake(); + replica_group.TickTock(false); + replica_group.TickTock(false); + cl.RequestRestore(pin); + replica_group.TickTock(false); + + auto restore_response = cl.get_restore_response(); + ASSERT_NE(restore_response, nullptr); + ASSERT_EQ(restore_response->tries(), num_tries); + ASSERT_EQ(util::ByteArrayToString(secret), restore_response->data()); + + } +} + +TEST_F(CoreTest, MultiNodeRaftSVR3) { + enclaveconfig::InitConfig config = valid_init_config; + config.mutable_group_config()->set_db_version(enclaveconfig::DATABASE_VERSION_SVR3); + auto [core1, err1] = Core::Create(ctx, config); + ASSERT_EQ(err1, error::OK); + auto [core2, err2] = Core::Create(ctx, config); + ASSERT_EQ(err2, error::OK); + auto [core3, err3] = Core::Create(ctx, config); + ASSERT_EQ(err3, error::OK); + LOG(INFO) << "core1=" << core1->ID() << ", core2=" << core2->ID() << ", core3=" << core3->ID(); + + // Create cores map for PassMessages + CoreMap cores; + cores[core1->ID()] = core1.get(); + cores[core2->ID()] = core2.get(); + cores[core3->ID()] = core3.get(); + + { + LOG(INFO) << "\n\nSet up as one-replica Raft on core 1"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1000); + host->set_create_new_raft_group(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core1->Receive(&ctx, msg)); + auto out = env::test::SentMessages(); + ASSERT_EQ(1, out.size()); + auto resp = out[0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1000); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + { + LOG(INFO) << "\n\nRequest join on core 2"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1001); + auto req = host->mutable_join_raft(); + core1->ID().ToString(req->mutable_peer_id()); + + context::Context ctx; + ASSERT_EQ(error::OK, core2->Receive(&ctx, msg)); + auto out = PassMessages(cores, core2.get()); + ASSERT_EQ(1, out[core2->ID()].size()); + auto resp = out[core2->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1001); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + { + LOG(INFO) << "\n\nRequest core2 vote"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1002); + host->set_request_voting(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core2->Receive(&ctx, msg)); + auto out = PassMessages(cores, core2.get()); + ASSERT_EQ(1, out[core2->ID()].size()); + auto resp = out[core2->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1002); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + { + LOG(INFO) << "\n\nRequest join on core 3"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1003); + auto req = host->mutable_join_raft(); + core1->ID().ToString(req->mutable_peer_id()); + + context::Context ctx; + ASSERT_EQ(error::OK, core3->Receive(&ctx, msg)); + auto out = PassMessages(cores, core3.get()); + ASSERT_EQ(1, out[core3->ID()].size()); + auto resp = out[core3->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1003); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + { + LOG(INFO) << "\n\nRequest core3 vote"; + UntrustedMessage msg; + auto host = msg.mutable_h2e_request(); + host->set_request_id(1004); + host->set_request_voting(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core3->Receive(&ctx, msg)); + auto out = PassMessages(cores, core3.get()); + ASSERT_EQ(1, out[core3->ID()].size()); + auto resp = out[core3->ID()][0].h2e_response(); + ASSERT_EQ(resp.request_id(), 1004); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + EXPECT_TRUE(core1->serving()); + EXPECT_TRUE(core1->leader()); + EXPECT_TRUE(core2->serving()); + EXPECT_FALSE(core2->leader()); + EXPECT_TRUE(core3->serving()); + EXPECT_FALSE(core3->leader()); + + LOG(INFO) << "\n\nRequest to leader core1"; + client::Request3 req; + auto b = req.mutable_create(); + b->set_max_tries(10); + b->mutable_blinded_element()->resize(db::DB3::ELEMENT_SIZE); + crypto_core_ristretto255_random( + reinterpret_cast(b->mutable_blinded_element()->data())); + + client::Response3 resp; + ClientRequest(cores, core1.get(), req, &resp, "backup7890123456"); + ASSERT_EQ(client::Response3::kCreate, resp.inner_case()); + ASSERT_EQ(client::CreateResponse::OK, resp.create().status()); + + LOG(INFO) << "\n\nElecting next leader"; + const int max_attempts = 100; + cores.erase(core1->ID()); // core1 goes offline + for (int i = 0; i < max_attempts && !core2->leader(); i++) { + LOG(INFO) << "core2 tick"; + UntrustedMessage msg; + msg.mutable_timer_tick()->set_new_timestamp_unix_secs(i); + + context::Context ctx; + ASSERT_EQ(error::OK, core2->Receive(&ctx, msg)); + PassMessages(cores, core2.get()); + } + EXPECT_TRUE(core2->serving()); + EXPECT_TRUE(core2->leader()); + EXPECT_TRUE(core3->serving()); + EXPECT_FALSE(core3->leader()); + + LOG(INFO) << "\n\nRequest to leader core2"; + + client::Request3 req2; + auto r = req2.mutable_evaluate(); + r->set_blinded_element(req.create().blinded_element()); + client::Response3 resp2; + ClientRequest(cores, core2.get(), req2, &resp2, "backup7890123456"); + ASSERT_EQ(client::Response3::kEvaluate, resp2.inner_case()); + ASSERT_EQ(client::EvaluateResponse::OK, resp2.evaluate().status()); + ASSERT_EQ(resp.create().evaluated_element(), resp2.evaluate().evaluated_element()); +} + +TEST_F(CoreTest, Hashes3) { + enclaveconfig::InitConfig config = valid_init_config; + config.mutable_group_config()->set_db_version(enclaveconfig::DATABASE_VERSION_SVR3); + auto [core, err] = Core::Create(ctx, config); + ASSERT_TRUE(core->ID().Valid()); + CoreMap cores; + cores[core->ID()] = core.get(); + + std::string blinded; + blinded.resize(db::DB3::ELEMENT_SIZE); + crypto_core_ristretto255_random( + reinterpret_cast(blinded.data())); + + { // Set up as one-replica Raft + UntrustedMessage msg; + + auto host = msg.mutable_h2e_request(); + host->set_request_id(999); + host->set_create_new_raft_group(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core->Receive(&ctx, msg)); + auto resp = Response(env::test::SentMessages()); + ASSERT_EQ(resp.request_id(), 999); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kStatus); + ASSERT_EQ(resp.status(), error::OK); + } + + LOG(INFO) << "sending backup request"; + + client::Request3 req; + auto b = req.mutable_create(); + b->set_blinded_element(blinded); + b->set_max_tries(10); + client::Response3 resp; + ClientRequest(cores, core.get(), req, &resp, "backup7890123456"); + ASSERT_EQ(client::Response3::kCreate, resp.inner_case()); + ASSERT_EQ(client::CreateResponse::OK, resp.create().status()); + + { + UntrustedMessage msg; + + auto host = msg.mutable_h2e_request(); + host->set_request_id(10101); + host->set_hashes(true); + + context::Context ctx; + ASSERT_EQ(error::OK, core->Receive(&ctx, msg)); + auto resp = Response(env::test::SentMessages()); + ASSERT_EQ(resp.request_id(), 10101); + ASSERT_EQ(resp.inner_case(), HostToEnclaveResponse::kHashes); + ASSERT_EQ(resp.status(), error::OK); + EXPECT_EQ(util::BigEndian64FromBytes(reinterpret_cast(resp.hashes().db_hash().data())), + 11717402061570123096ULL); + EXPECT_EQ(resp.hashes().commit_idx(), 2); + EXPECT_EQ(util::BigEndian64FromBytes(reinterpret_cast(resp.hashes().commit_hash_chain().data())), + 9806922570174040741ULL); + } +} + +} // namespace svr2::core diff --git a/enclave/db/db.cc b/enclave/db/db.cc new file mode 100644 index 0000000..5c300df --- /dev/null +++ b/enclave/db/db.cc @@ -0,0 +1,27 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "db/db.h" +#include "db/db2.h" +#include "db/db3.h" + +#include + +namespace svr2::db { + +std::unique_ptr DB::New(enclaveconfig::DatabaseVersion version) { + std::unique_ptr out; + switch (version) { + case enclaveconfig::DATABASE_VERSION_SVR2: + out.reset(new db::DB2()); + break; + case enclaveconfig::DATABASE_VERSION_SVR3: + out.reset(new db::DB3()); + break; + default: + return nullptr; + } + return out; +} + +} // namespace svr2::db diff --git a/enclave/db/db.h b/enclave/db/db.h new file mode 100644 index 0000000..1ca769a --- /dev/null +++ b/enclave/db/db.h @@ -0,0 +1,122 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_DB_DB_H__ +#define __SVR2_DB_DB_H__ + +#include +#include +#include + +#include "proto/error.pb.h" +#include "proto/e2e.pb.h" +#include "proto/msgs.pb.h" +#include "sip/hasher.h" +#include "context/context.h" +#include "util/log.h" + +namespace svr2::db { + +// DB provides a generic interface for databases, which can be used by both +// SVR2 (db2.*) and SVR3 (db3.*). These two databases take in different +// requests and return different responses, which are packaged in the +// DB::Protocol interface and implemented per-database. +// +// A database uses three objects during its lifecycle: +// - Request: a protobuf created and provided by a (remote) client +// - Log: generated from a `Request` and contains the operation to be performed +// - Respose: returned to the (remote) client detailing the output of the operation +// +// In many cases, the Request and Log will be similar, and often the Request +// is simply embedded into the Log. However, the Log generally contains a +// few other key pieces of information: +// - the database key associated with the request/authenticated_id, if there is one +// - any information (entropy, timestamps, etc) which could differ if recomputed +// across different replicas. +// +// Generally, the lifecycle of a request is: +// - the Request is received by one replica +// - that replica uses it to generate a Log +// - that Log is submitted to Raft for ordering and persistence +// - Raft commits the Log +// - the Log is then applied to the database via the Run method +// - the Run method generates a Response +// - on the replica that received the Request, the Response is returned to the client +class DB { + public: + DELETE_COPY_AND_ASSIGN(DB); + DB() {} + virtual ~DB() {} + + // Returns a database based on the passed-in version number. + static std::unique_ptr New(enclaveconfig::DatabaseVersion version); + + typedef google::protobuf::MessageLite Request; + typedef google::protobuf::MessageLite Log; + typedef google::protobuf::MessageLite Response; + + // Protocol encapsulates typing requests and responses for clients. + class Protocol { + public: + // RequestPB creates a new request protobuf in the scope of `ctx` + virtual Request* RequestPB(context::Context* ctx) const = 0; + // LogPB creates a new log protobuf in the scope of `ctx` + virtual Log* LogPB(context::Context* ctx) const = 0; + // Given a request, creates a log. Note that this potentially std::move's + // the request into the log, so care should be taken to not use the request + // after calling LogPBFromRequest. + virtual std::pair LogPBFromRequest( + context::Context* ctx, + Request&& request, + const std::string& authenticated_id) const = 0; + // LogKey returns the database key associated with the given request proto. + virtual const std::string& LogKey(const Log& r) const = 0; + // Validate that a log has the right shape, size, etc. + virtual error::Error ValidateClientLog(const Log& log) const = 0; + // Returns the maximum size of a database row when serialized. + virtual size_t MaxRowSerializedSize() const = 0; + }; + // P() returns a pointer to a _static_ Protocol object, + // which will outlast the DB object. + virtual const Protocol* P() const = 0; + + // Run a client log request and yield a response. + // The client log should already have been checked with ValidateClientLog; + // failing to do so will CHECK-fail. + // It's assumed that validation happens on Raft log insert, so that + // outputs from the Raft log are already validated. + // + // Output response is valid within the passed-in context. + virtual Response* Run(context::Context* ctx, const Log& log) = 0; + + // Get rows from this database in range (exclusive_start, ...], returning + // no more than [size] rows. If it returns <[size] rows, the end of the database + // has been reached. Pass in empty string to start with the first key in + // the database. Returns the key of the largest returned row. + virtual std::pair RowsAsProtos( + context::Context* ctx, + const std::string& exclusive_start, + size_t size, + google::protobuf::RepeatedPtrField* out) const = 0; + // Update this database using the given database row states. + // This will return an error if any of the DatabaseRowStates contain + // rows that already exist within the database. Rows must be lexigraphically + // larger than any existing row in the database. Returns the row key + // of the last row inserted into the database, on success. + virtual std::pair LoadRowsFromProtos( + context::Context* ctx, + const google::protobuf::RepeatedPtrField& rows) = 0; + + // Compute a hash of the entire database. This is not designed to + // be useful for security-focussed integrity checking, but should be + // sufficient to verify that replicated data matches up between source + // and destination. + virtual std::array Hash(context::Context* ctx) const = 0; + + // Get the number of backups stored in the database + virtual size_t row_count() const = 0; +}; + +} // namespace svr2::db + +#endif // __SVR2_DB_DB_H__ diff --git a/enclave/db/db2.cc b/enclave/db/db2.cc new file mode 100644 index 0000000..82b4181 --- /dev/null +++ b/enclave/db/db2.cc @@ -0,0 +1,342 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "db/db2.h" + +#include +#include + +#include "util/log.h" +#include "util/bytes.h" +#include "util/hex.h" +#include "util/constant.h" +#include "util/endian.h" +#include "context/context.h" +#include "metrics/metrics.h" +#include "proto/clientlog.pb.h" + +namespace svr2::db { + +template +static void CopyArrayToString(const T& array, std::string* out) { + CHECK(array.size() == 0 || sizeof(array[0]) == 1); + out->resize(array.size()); + std::copy(array.cbegin(), array.cend(), out->begin()); +} + +static size_t SMALL_BYTES_FIELD_EXTRA_PROTO_METADATA = 2; +static size_t U16_AS_VARINT_MAX_SIZE = 3; +size_t DB2::Protocol::MaxRowSerializedSize() const { + return + BACKUP_ID_SIZE + SMALL_BYTES_FIELD_EXTRA_PROTO_METADATA + + MAX_DATA_SIZE + SMALL_BYTES_FIELD_EXTRA_PROTO_METADATA + + PIN_SIZE + SMALL_BYTES_FIELD_EXTRA_PROTO_METADATA + + U16_AS_VARINT_MAX_SIZE; // max bytes for TRIES +} + +DB::Request* DB2::Protocol::RequestPB(context::Context* ctx) const { + return ctx->Protobuf(); +} + +DB::Log* DB2::Protocol::LogPB(context::Context* ctx) const { + return ctx->Protobuf(); +} + +std::pair DB2::Protocol::LogPBFromRequest( + context::Context* ctx, + Request&& request, + const std::string& authenticated_id) const { + auto r = dynamic_cast(&request); + if (r == nullptr) { + return std::make_pair(nullptr, COUNTED_ERROR(DB2_InvalidRequestType)); + } + auto log = ctx->Protobuf(); + if (authenticated_id.size() != BACKUP_ID_SIZE) { + return std::make_pair(nullptr, COUNTED_ERROR(DB2_ClientBackupIDSize)); + } + log->set_backup_id(authenticated_id); + *log->mutable_req() = std::move(*r); + return std::make_pair(log, error::OK); +} + +const std::string& DB2::Protocol::LogKey(const DB::Log& req) const { + auto r = dynamic_cast(&req); + CHECK(r != nullptr); + return r->backup_id(); +} + +error::Error DB2::Protocol::ValidateClientLog(const DB::Log& req_pb) const { + auto log = dynamic_cast(&req_pb); + if (log == nullptr) { return COUNTED_ERROR(DB2_InvalidRequestType); } + auto req = log->req(); + + if (log->backup_id().size() != BACKUP_ID_SIZE) { return COUNTED_ERROR(DB2_ClientBackupIDSize); } + switch (req.inner_case()) { + case client::Request::kBackup: { + auto r = req.backup(); + if (r.pin().size() != PIN_SIZE) { return COUNTED_ERROR(DB2_ClientPinSize); } + if (r.data().size() > MAX_DATA_SIZE) { return COUNTED_ERROR(DB2_ClientDataSize); } + if (r.data().size() < MIN_DATA_SIZE) { return COUNTED_ERROR(DB2_ClientDataSize); } + if (r.max_tries() > MAX_ALLOWED_MAX_TRIES) { return COUNTED_ERROR(DB2_ClientTriesTooHigh); } + if (r.max_tries() < MIN_ALLOWED_MAX_TRIES) { return COUNTED_ERROR(DB2_ClientTriesZero); } + } break; + case client::Request::kRestore: { + auto r = req.restore(); + if (r.pin().size() != PIN_SIZE) { return COUNTED_ERROR(DB2_ClientPinSize); } + } break; + case client::Request::kDelete: { + auto r = req.delete_(); + } break; + case client::Request::kExpose: { + auto r = req.expose(); + if (r.data().size() > MAX_DATA_SIZE) { return COUNTED_ERROR(DB2_ClientDataSize); } + if (r.data().size() < MIN_DATA_SIZE) { return COUNTED_ERROR(DB2_ClientDataSize); } + } break; + default: + return COUNTED_ERROR(DB2_ClientRequestCase); + } + return error::OK; +} + +const DB::Protocol* DB2::P() const { + static DB2::Protocol rr; + return &rr; +} + +DB::Response* DB2::Run(context::Context* ctx, const DB::Log& log_pb) { + // We CHECK here because this should have already been validated when it + // was added to the Raft log. + MEASURE_CPU(ctx, cpu_db_client_request); + CHECK(error::OK == P()->ValidateClientLog(log_pb)); + auto log = reinterpret_cast(log_pb); // dynamic_cast checked in ValidateClientLog. + BackupID id; + CHECK(log.backup_id().size() == id.size()); + std::copy(log.backup_id().begin(), log.backup_id().end(), id.begin()); + auto resp = ctx->Protobuf(); + switch (log.req().inner_case()) { + case client::Request::kBackup: + Backup(id, log.req().backup(), resp->mutable_backup()); + break; + case client::Request::kRestore: + Restore(id, log.req().restore(), resp->mutable_restore()); + break; + case client::Request::kDelete: + Delete(id, log.req().delete_(), resp->mutable_delete_()); + break; + case client::Request::kExpose: + Expose(id, log.req().expose(), resp->mutable_expose()); + break; + default: + LOG(WARNING) << "unsupported request case, returning empty response"; + break; + } + return resp; +} + +void DB2::Row::Clear(e2e::DB2RowState::State s) { + memset(data.begin(), 0, data.size()); + memset(pin.begin(), 0, pin.size()); + tries = 0; + data_size = 0; + state = s; +} + +void DB2::Backup(const BackupID& id, const client::BackupRequest& req, client::BackupResponse* resp) { + std::map, Row>::iterator find = rows_.find(id); + if (find == rows_.end()) { + auto e = rows_.emplace( + std::piecewise_construct, + std::forward_as_tuple(std::move(id)), + std::forward_as_tuple()); + find = e.first; + GAUGE(db, rows)->Set(rows_.size()); + } + Row* row = &find->second; + row->Clear(e2e::DB2RowState::POPULATED); + std::copy(req.data().begin(), req.data().end(), row->data.begin()); + row->data_size = req.data().size(); + row->tries = req.max_tries(); + std::copy(req.pin().begin(), req.pin().end(), row->pin.begin()); + resp->set_status(client::BackupResponse::OK); +} + +void DB2::Restore(const BackupID& id, const client::RestoreRequest& req, client::RestoreResponse* resp) { + auto find = rows_.find(id); + if (find == rows_.end() || find->second.state != e2e::DB2RowState::AVAILABLE) { + resp->set_status(client::RestoreResponse::MISSING); + return; + } + Row* row = &find->second; + if (util::ConstantTimeEquals(req.pin(), row->pin)) { + resp->set_status(client::RestoreResponse::OK); + resp->set_tries(row->tries); + *resp->mutable_data() = std::string(row->data.begin(), row->data.begin() + row->data_size); + return; + } + if (--row->tries == 0) { + // We Clear before erasing because erasing just removes the entry from the log, and + // we want to actually zero out the secret wherever it is in memory. + row->Clear(e2e::DB2RowState::UNINITIATED); + rows_.erase(find); + resp->set_status(client::RestoreResponse::MISSING); + GAUGE(db, rows)->Set(rows_.size()); + return; + } + resp->set_status(client::RestoreResponse::PIN_MISMATCH); + resp->set_tries(row->tries); +} + +void DB2::Delete(const BackupID& id, const client::DeleteRequest& req, client::DeleteResponse* resp) { + auto find = rows_.find(id); + if (find == rows_.end()) { return; } + // We Clear before erasing because erasing just removes the entry from the log, and + // we want to actually zero out the secret wherever it is in memory. + find->second.Clear(e2e::DB2RowState::UNINITIATED); + rows_.erase(find); + GAUGE(db, rows)->Set(rows_.size()); +} + +void DB2::Expose(const BackupID& id, const client::ExposeRequest& req, client::ExposeResponse* resp) { + // Expose provides a 2-phase commit of backups, to avoid client backup + // retries from allowing server operators infinite guesses against the pin. + // Without Expose, the following attack is possible: + // 1. client sends BackupRequest + // 2. server processes BackupRequest + // 3. server operator drops connection to client before BackupResponse is sent + // 4. server operator makes max_tries guesses against backup + // 5. client retries BackupRequest (goto 1) + // + // The Expose proto must contain the secret to make sure that only someone + // that already knows the secret (IE: the client) can expose the backup for + // restores. Otherwise, the following attack is possible: + // 1. client sends BackupRequest + // 2. server processes BackupRequest + // 3. server operator drops connection to client before BackupResponse is sent + // 4. server operator sends ExposeRequest to enclave, which processes it + // 5. server operator makes max_tries guesses against backup + // 6. client retries BackupRequest (goto 1) + auto find = rows_.find(id); + if (find == rows_.end()) { + resp->set_status(client::ExposeResponse::ERROR); + return; + } + Row* row = &find->second; + if (!util::ConstantTimeEqualsPrefix(row->data, req.data(), row->data_size)) { + resp->set_status(client::ExposeResponse::ERROR); + return; + } + switch (row->state) { + case e2e::DB2RowState::POPULATED: + case e2e::DB2RowState::AVAILABLE: + row->state = e2e::DB2RowState::AVAILABLE; + resp->set_status(client::ExposeResponse::OK); + return; + default: + resp->set_status(client::ExposeResponse::ERROR); + return; + } +} + +std::pair DB2::RowsAsProtos(context::Context* ctx, const std::string& exclusive_start, size_t size, google::protobuf::RepeatedPtrField* out) const { + MEASURE_CPU(ctx, cpu_db_repl_send); + auto iter = rows_.begin(); + if (!exclusive_start.empty()) { + auto [id, err] = BackupIDFromString(exclusive_start); + if (err != error::OK) { + return std::make_pair("", err); + } + iter = rows_.upper_bound(id); + } + auto row = ctx->Protobuf(); + std::string last_id; + for (size_t i = 0; i < size && iter != rows_.end(); i++, ++iter) { + row->Clear(); + CopyArrayToString(iter->first, row->mutable_backup_id()); + CopyArrayToString(iter->second.data, row->mutable_data()); + row->mutable_data()->resize(iter->second.data_size); + CopyArrayToString(iter->second.pin, row->mutable_pin()); + row->set_tries(iter->second.tries); + row->set_state(iter->second.state); + if (!row->SerializeToString(out->Add())) { + return std::make_pair("", COUNTED_ERROR(DB2_ReplicationInvalidRow)); + } + last_id = row->backup_id(); + } + LOG(DEBUG) << "DB sending rows in (" << util::PrefixToHex(exclusive_start, 8) << ", " << util::PrefixToHex(last_id, 8) << "]"; + return std::make_pair(last_id, error::OK); +} + +DB2::Row::Row() : state(e2e::DB2RowState::UNINITIATED), tries(0), data_size(0), data{0}, pin{0} {} + +std::pair DB2::LoadRowsFromProtos(context::Context* ctx, const google::protobuf::RepeatedPtrField& rows) { + MEASURE_CPU(ctx, cpu_db_repl_recv); + CHECK(rows.size()); + size_t initial_rows = rows_.size(); + auto row = ctx->Protobuf(); + for (int i = 0; i < rows.size(); i++) { + row->Clear(); + if (!row->ParseFromString(rows.Get(i))) { + return std::make_pair("", COUNTED_ERROR(DB2_ReplicationInvalidRow)); + } + if (row->tries() > MAX_ALLOWED_MAX_TRIES || + row->pin().size() != PIN_SIZE || + row->data().size() < MIN_DATA_SIZE || + row->data().size() > MAX_DATA_SIZE) { + return std::make_pair("", COUNTED_ERROR(DB2_ReplicationInvalidRow)); + } + auto [key, err] = BackupIDFromString(row->backup_id()); + if (err != error::OK) { + return std::make_pair("", err); + } + if (rows_.size() && key <= rows_.rbegin()->first) { + return std::make_pair("", COUNTED_ERROR(DB2_ReplicationOutOfOrder)); + } + + Row r; + r.state = row->state(); + std::copy(row->pin().begin(), row->pin().end(), r.pin.begin()); + std::copy(row->data().begin(), row->data().end(), r.data.begin()); + r.data_size = row->data().size(); + r.tries = row->tries(); + rows_.emplace_hint(rows_.end(), key, std::move(r)); + GAUGE(db, rows)->Set(rows_.size()); + } + if (rows_.size() != initial_rows + rows.size()) { + // This ensures that we didn't accidentally attempt to load rows that + // already exist within the DB. + return std::make_pair("", COUNTED_ERROR(DB2_LoadedRowsAlreadyInDB)); + } + return std::make_pair(row->backup_id(), error::OK); +} + +std::pair DB2::BackupIDFromString(const std::string& s) { + DB2::BackupID out; + if (s.size() != BACKUP_ID_SIZE) { + return std::make_pair(std::move(out), COUNTED_ERROR(DB2_BackupIDSize)); + } + std::copy(s.begin(), s.end(), out.data()); + return std::make_pair(std::move(out), error::OK); +} + +std::array DB2::Hash(context::Context* ctx) const { + MEASURE_CPU(ctx, cpu_db_hash); + crypto_hash_sha256_state sha; + crypto_hash_sha256_init(&sha); + uint8_t num[8]; + util::BigEndian64Bytes(rows_.size(), num); + crypto_hash_sha256_update(&sha, num, sizeof(num)); + for (auto iter = rows_.cbegin(); iter != rows_.cend(); ++iter) { + util::BigEndian64Bytes(iter->second.state, num); + crypto_hash_sha256_update(&sha, num, sizeof(num)); + crypto_hash_sha256_update(&sha, iter->first.data(), iter->first.size()); + util::BigEndian64Bytes(iter->second.tries, num); + crypto_hash_sha256_update(&sha, num, sizeof(num)); + crypto_hash_sha256_update(&sha, iter->second.data.data(), iter->second.data_size); + crypto_hash_sha256_update(&sha, iter->second.pin.data(), iter->second.pin.size()); + } + std::array out; + crypto_hash_sha256_final(&sha, out.data()); + return out; +} + +} // namespace svr2::db diff --git a/enclave/db/db2.h b/enclave/db/db2.h new file mode 100644 index 0000000..ae34a8f --- /dev/null +++ b/enclave/db/db2.h @@ -0,0 +1,113 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_DB_DB2_H__ +#define __SVR2_DB_DB2_H__ + +#include +#include +#include "proto/error.pb.h" +#include "proto/e2e.pb.h" +#include "sip/hasher.h" +#include "context/context.h" +#include "util/log.h" +#include "db/db.h" +#include "proto/client.pb.h" + +namespace svr2::db { + +// DB2 implements the DB interface for SVR2. +// DB is a database meant to be driven by a Raft log. +// Raft stores an ordered, consistent list of committed client::Request requests. +// This DB executes those requests as CRUD operations on an underlying ordered map, +// and returns their respective responses. +class DB2 : public DB { + public: + DELETE_COPY_AND_ASSIGN(DB2); + DB2() {} + virtual ~DB2() {} + + class Protocol : public DB::Protocol { + public: + virtual Request* RequestPB(context::Context* ctx) const; + virtual Log* LogPB(context::Context* ctx) const; + virtual std::pair LogPBFromRequest( + context::Context* ctx, + Request&& request, + const std::string& authenticated_id) const; + virtual const std::string& LogKey(const Log& r) const; + virtual error::Error ValidateClientLog(const Log& log) const; + virtual size_t MaxRowSerializedSize() const; + }; + virtual const DB::Protocol* P() const; + + // Run a client log request and yield a response. + // The client log should already have been checked with ValidateClientLog; + // failing to do so will CHECK-fail. + // It's assumed that validation happens on Raft log insert, so that + // outputs from the Raft log are already validated. + // + // Output response is valid within the passed-in context. + virtual Response* Run(context::Context* ctx, const Log& request); + + // Limits on sizes/etc for validation. + static const size_t BACKUP_ID_SIZE = 16; + static const size_t MIN_DATA_SIZE = 16; + static const size_t MAX_DATA_SIZE = 48; + static const size_t PIN_SIZE = 32; + static const uint16_t MAX_ALLOWED_MAX_TRIES = 255; + static const uint16_t MIN_ALLOWED_MAX_TRIES = 1; + + // Get rows from this database in range (exclusive_start, ...], returning + // no more than [size] rows. If it returns <[size] rows, the end of the database + // has been reached. Pass in DB::Beginning to start with the first key in + // the database. + virtual std::pair RowsAsProtos(context::Context* ctx, const std::string& exclusive_start, size_t size, google::protobuf::RepeatedPtrField* out) const; + // Update this database using the given database row states. + // This will return an error if any of the DB2RowStates contain + // rows that already exist within the database. Rows must be lexigraphically + // larger than any existing row in the database. Returns the row key + // of the last row inserted into the database, on success. + virtual std::pair LoadRowsFromProtos(context::Context* ctx, const google::protobuf::RepeatedPtrField& rows); + + // Compute a hash of the entire database. This is not designed to + // be useful for security-focussed integrity checking, but should be + // sufficient to verify that replicated data matches up between source + // and destination. + virtual std::array Hash(context::Context* ctx) const; + + // Get the number of backups stored in the database + virtual size_t row_count() const { return rows_.size(); } + private: + typedef std::array BackupID; + + static std::pair BackupIDFromString(const std::string& s); + struct Row { + Row(); + e2e::DB2RowState::State state; + uint8_t tries; + uint8_t data_size; // should be MIN_DATA_SIZE <= data_size <= MAX_DATA_SIZE, or 0 if unset + // We use std::array here to avoid lots of extra heap allocations. + // We store slightly more data than necessary if client data is + // smaller than MAX_DATA_SIZE, but we make up for it in at least + // three 64-bit pointers if these were std::string. + std::array data; + std::array pin; + + void Clear(e2e::DB2RowState::State s); + }; + + // Execute each of the three request types. + void Backup(const BackupID& id, const client::BackupRequest& request, client::BackupResponse* resp); + void Restore(const BackupID& id, const client::RestoreRequest& request, client::RestoreResponse* resp); + void Delete(const BackupID& id, const client::DeleteRequest& request, client::DeleteResponse* resp); + void Expose(const BackupID& id, const client::ExposeRequest& request, client::ExposeResponse* resp); + // We use std::map over std::unordered_map because order matters to us. + // We need a consistently ordered keyspace for data transfers between + // replicas. + std::map rows_; +}; + +} // namespace svr2::db + +#endif // __SVR2_DB_DB2_H__ diff --git a/enclave/db/db3.cc b/enclave/db/db3.cc new file mode 100644 index 0000000..e843ef5 --- /dev/null +++ b/enclave/db/db3.cc @@ -0,0 +1,298 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "db/db3.h" + +#include +#include +#include + +#include "util/log.h" +#include "util/bytes.h" +#include "util/hex.h" +#include "util/constant.h" +#include "util/endian.h" +#include "context/context.h" +#include "metrics/metrics.h" +#include "proto/clientlog.pb.h" + +namespace svr2::db { + +DB::Request* DB3::Protocol::RequestPB(context::Context* ctx) const { + return ctx->Protobuf(); +} + +DB::Log* DB3::Protocol::LogPB(context::Context* ctx) const { + return ctx->Protobuf(); +} + +std::pair DB3::Protocol::LogPBFromRequest( + context::Context* ctx, + Request&& request, + const std::string& authenticated_id) const { + auto r = dynamic_cast(&request); + if (r == nullptr) { + return std::make_pair(nullptr, COUNTED_ERROR(DB3_RequestInvalid)); + } + if (authenticated_id.size() != BACKUP_ID_SIZE) { + return std::make_pair(nullptr, COUNTED_ERROR(DB3_BackupIDSize)); + } + auto log = ctx->Protobuf(); + log->set_backup_id(authenticated_id); + *log->mutable_req() = std::move(*r); + if (log->req().inner_case() == client::Request3::kCreate) { + auto [priv, pub] = NewKeys(); + log->set_create_privkey(util::ByteArrayToString(priv)); + log->set_create_pubkey(util::ByteArrayToString(pub)); + } + return std::make_pair(log, error::OK); +} + +const std::string& DB3::Protocol::LogKey(const DB::Log& req) const { + auto r = dynamic_cast(&req); + CHECK(r != nullptr); + return r->backup_id(); +} + +error::Error DB3::Protocol::ValidateClientLog(const DB::Log& log_pb) const { + auto log = dynamic_cast(&log_pb); + if (log == nullptr) { return COUNTED_ERROR(DB3_RequestInvalid); } + if (log->backup_id().size() != BACKUP_ID_SIZE) { return COUNTED_ERROR(DB3_BackupIDSize); } + switch (log->req().inner_case()) { + case client::Request3::kCreate: { + auto r = log->req().create(); + if (r.max_tries() < 1 || r.max_tries() > 255) { return COUNTED_ERROR(DB3_MaxTriesOutOfRange); } + if (r.blinded_element().size() != ELEMENT_SIZE) { return COUNTED_ERROR(DB3_BlindedElementSize); } + if (log->create_privkey().size() != sizeof(PrivateKey)) { return COUNTED_ERROR(DB3_LogPrivateKeyInvalid); } + if (log->create_pubkey().size() != sizeof(PublicKey)) { return COUNTED_ERROR(DB3_LogPublicKeyInvalid); } + } break; + case client::Request3::kEvaluate: { + auto r = log->req().evaluate(); + if (r.blinded_element().size() != ELEMENT_SIZE) { return COUNTED_ERROR(DB3_BlindedElementSize); } + } break; + case client::Request3::kRemove: { + // nothing to do + } break; + default: + return COUNTED_ERROR(DB3_ToplevelRequestType); + } + return error::OK; +} + +const DB::Protocol* DB3::P() const { + static DB3::Protocol rr; + return &rr; +} + +size_t DB3::Protocol::MaxRowSerializedSize() const { + const size_t PROTOBUF_SMALL_STRING_EXTRA = 2; // additional bytes for serializing string + const size_t PROTOBUF_SMALL_INT = 2; // bytes for serializing a small integer + return BACKUP_ID_SIZE + PROTOBUF_SMALL_STRING_EXTRA + // backup ID + SCALAR_SIZE + PROTOBUF_SMALL_STRING_EXTRA + // priv key + PROTOBUF_SMALL_INT; // tries +} + +DB::Response* DB3::Run(context::Context* ctx, const DB::Log& log_pb) { + MEASURE_CPU(ctx, cpu_db_client_request); + CHECK(P()->ValidateClientLog(log_pb) == error::OK); + auto log = dynamic_cast(&log_pb); + CHECK(log != nullptr); + auto out = ctx->Protobuf(); + auto [id, err] = util::StringToByteArray(log->backup_id()); + CHECK(err == error::OK); + switch (log->req().inner_case()) { + case client::Request3::kCreate: { + Create(ctx, id, log->create_privkey(), log->create_pubkey(), log->req().create(), out->mutable_create()); + } break; + case client::Request3::kEvaluate: { + Evaluate(ctx, id, log->req().evaluate(), out->mutable_evaluate()); + } break; + case client::Request3::kRemove: { + Remove(ctx, id, log->req().remove(), out->mutable_remove()); + } break; + default: CHECK(nullptr == "should never reach here, client log already validated"); + } + return out; +} + +std::pair DB3::RowsAsProtos(context::Context* ctx, const std::string& exclusive_start, size_t size, google::protobuf::RepeatedPtrField* out) const { + MEASURE_CPU(ctx, cpu_db_repl_send); + auto iter = rows_.begin(); + if (!exclusive_start.empty()) { + auto [id, err] = util::StringToByteArray(exclusive_start); + if (err != error::OK) { + return std::make_pair("", err); + } + iter = rows_.upper_bound(id); + } + auto row = ctx->Protobuf(); + for (size_t i = 0; i < size && iter != rows_.end(); i++, ++iter) { + row->Clear(); + row->set_backup_id(util::ByteArrayToString(iter->first)); + row->set_priv(util::ByteArrayToString(iter->second.priv)); + row->set_tries(iter->second.tries); + if (!row->SerializeToString(out->Add())) { + return std::make_pair("", COUNTED_ERROR(DB3_ReplicationInvalidRow)); + } + } + LOG(DEBUG) << "DB sending rows in (" << util::PrefixToHex(exclusive_start, 8) << ", " << util::PrefixToHex(row->backup_id(), 8) << "]"; + return std::make_pair(row->backup_id(), error::OK); +} + +std::pair DB3::LoadRowsFromProtos(context::Context* ctx, const google::protobuf::RepeatedPtrField& rows) { + MEASURE_CPU(ctx, cpu_db_repl_recv); + size_t initial_rows = rows_.size(); + auto row = ctx->Protobuf(); + for (int i = 0; i < rows.size(); i++) { + row->Clear(); + if (!row->ParseFromString(rows.Get(i))) { + return std::make_pair("", COUNTED_ERROR(DB3_ReplicationInvalidRow)); + } + if (row->tries() > MAX_ALLOWED_MAX_TRIES || + row->tries() < MIN_ALLOWED_MAX_TRIES) { + return std::make_pair("", COUNTED_ERROR(DB3_ReplicationInvalidRow)); + } + auto [key, err1] = util::StringToByteArray(row->backup_id()); + if (err1 != error::OK) { + return std::make_pair("", err1); + } + if (rows_.size() && key <= rows_.rbegin()->first) { + return std::make_pair("", COUNTED_ERROR(DB3_ReplicationOutOfOrder)); + } + auto [priv, err2] = util::StringToByteArray(row->priv()); + if (err2 != error::OK) { + return std::make_pair("", err2); + } + + Row r; + r.tries = row->tries(); + r.priv = priv; + rows_.emplace_hint(rows_.end(), key, std::move(r)); + GAUGE(db, rows)->Set(rows_.size()); + } + if (rows_.size() != initial_rows + rows.size()) { + // This ensures that we didn't accidentally attempt to load rows that + // already exist within the DB. + return std::make_pair("", COUNTED_ERROR(DB3_LoadedRowsAlreadyInDB)); + } + return std::make_pair(row->backup_id(), error::OK); +} + +std::array DB3::Hash(context::Context* ctx) const { + MEASURE_CPU(ctx, cpu_db_hash); + crypto_hash_sha256_state sha; + crypto_hash_sha256_init(&sha); + uint8_t num[8]; + util::BigEndian64Bytes(rows_.size(), num); + crypto_hash_sha256_update(&sha, num, sizeof(num)); + for (auto iter = rows_.cbegin(); iter != rows_.cend(); ++iter) { + crypto_hash_sha256_update(&sha, iter->first.data(), iter->first.size()); + util::BigEndian64Bytes(iter->second.tries, num); + crypto_hash_sha256_update(&sha, num, sizeof(num)); + crypto_hash_sha256_update(&sha, iter->second.priv.data(), iter->second.priv.size()); + } + std::array out; + crypto_hash_sha256_final(&sha, out.data()); + return out; +} + +std::pair DB3::BlindEvaluate(const DB3::PrivateKey& key, const DB3::Element& blinded_element) { + Element out{0}; + int ret = 0; + if (0 != (ret = crypto_scalarmult_ristretto255(out.data(), key.data(), blinded_element.data()))) { + LOG(WARNING) << "crypto_scalarmult_ristretto255 error: " << ret; + return std::make_pair(out, COUNTED_ERROR(DB3_ScalarMultFailure)); + } + return std::make_pair(out, error::OK); +} + +std::pair DB3::Protocol::NewKeys() { + PrivateKey priv{0}; + PublicKey pub{0}; + crypto_core_ristretto255_scalar_random(priv.data()); + // This will only return non-zero if `priv == 0`, which should never happen. + // TODO: Consider using either a protocol specific or a server specific base point. + CHECK(0 == crypto_scalarmult_ristretto255_base(pub.data(), priv.data())); + return std::make_pair(priv, pub); +} + +void DB3::Create( + context::Context* ctx, + const DB3::BackupID& id, + const std::string& privkey, + const std::string& pubkey, + const client::CreateRequest& req, + client::CreateResponse* resp) { + auto [elt, err1] = util::StringToByteArray(req.blinded_element()); + if (err1 != error::OK) { + resp->set_status(client::CreateResponse::INVALID_REQUEST); + return; + } + auto [priv, err2] = util::StringToByteArray(privkey); + if (err2 != error::OK) { + resp->set_status(client::CreateResponse::ERROR); + return; + } + auto [pub, err3] = util::StringToByteArray(pubkey); + if (err3 != error::OK) { + resp->set_status(client::CreateResponse::ERROR); + return; + } + auto [evaluated, err4] = BlindEvaluate(priv, elt); + if (err4 != error::OK) { + resp->set_status(client::CreateResponse::ERROR); + return; + } + rows_[id] = { + .priv = priv, + .tries = (uint8_t) req.max_tries(), + }; + GAUGE(db, rows)->Set(rows_.size()); + resp->set_evaluated_element(util::ByteArrayToString(evaluated)); + resp->set_public_key(util::ByteArrayToString(pub)); + resp->set_status(client::CreateResponse::OK); +} + +void DB3::Evaluate( + context::Context* ctx, + const DB3::BackupID& id, + const client::EvaluateRequest& req, + client::EvaluateResponse* resp) { + auto [elt, err1] = util::StringToByteArray(req.blinded_element()); + if (err1 != error::OK) { + resp->set_status(client::EvaluateResponse::INVALID_REQUEST); + return; + } + auto find = rows_.find(id); + if (find == rows_.end()) { + resp->set_status(client::EvaluateResponse::MISSING); + return; + } + auto [evaluated, err2] = BlindEvaluate(find->second.priv, elt); + if (err2 != error::OK) { + resp->set_status(client::EvaluateResponse::ERROR); + return; + } + find->second.tries--; + resp->set_tries_remaining(find->second.tries); + if (find->second.tries == 0) { + rows_.erase(find); + GAUGE(db, rows)->Set(rows_.size()); + } + resp->set_evaluated_element(util::ByteArrayToString(evaluated)); + resp->set_status(client::EvaluateResponse::OK); +} + +void DB3::Remove( + context::Context* ctx, + const DB3::BackupID& id, + const client::RemoveRequest& req, + client::RemoveResponse* resp) { + auto find = rows_.find(id); + if (find != rows_.end()) { + rows_.erase(find); + GAUGE(db, rows)->Set(rows_.size()); + } +} + +} // namespace svr2::db diff --git a/enclave/db/db3.h b/enclave/db/db3.h new file mode 100644 index 0000000..ea9fb34 --- /dev/null +++ b/enclave/db/db3.h @@ -0,0 +1,124 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_DB_DB3_H__ +#define __SVR2_DB_DB3_H__ + +#include +#include +#include "proto/error.pb.h" +#include "proto/e2e.pb.h" +#include "proto/msgs.pb.h" +#include "sip/hasher.h" +#include "context/context.h" +#include "util/log.h" +#include "db/db.h" +#include "proto/client3.pb.h" +#include +#include + +namespace svr2::db { + +class DB3 : public DB { + public: + DELETE_COPY_AND_ASSIGN(DB3); + DB3() {} + virtual ~DB3() {} + + static const size_t BACKUP_ID_SIZE = 16; + static const size_t SCALAR_SIZE = crypto_scalarmult_ristretto255_SCALARBYTES; + static const size_t ELEMENT_SIZE = crypto_scalarmult_ristretto255_BYTES; + typedef std::array BackupID; + typedef std::array Scalar; + typedef std::array Element; + typedef Scalar PrivateKey; + typedef Element PublicKey; + static const uint16_t MAX_ALLOWED_MAX_TRIES = 255; + static const uint16_t MIN_ALLOWED_MAX_TRIES = 1; + + // Protocol encapsulates typing requests and responses for clients. + class Protocol : public DB::Protocol { + public: + virtual DB::Request* RequestPB(context::Context* ctx) const; + virtual DB::Log* LogPB(context::Context* ctx) const; + virtual std::pair LogPBFromRequest( + context::Context* ctx, + Request&& request, + const std::string& authenticated_id) const; + virtual const std::string& LogKey(const DB::Log& r) const; + virtual error::Error ValidateClientLog(const DB::Log& log) const; + virtual size_t MaxRowSerializedSize() const; + public_for_test: + static std::pair NewKeys(); + }; + // P() returns a pointer to a _static_ Protocol object, + // which will outlast the DB object. + virtual const DB::Protocol* P() const; + + // Run a client log request and yield a response. + // The client log should already have been checked with ValidateClientLog; + // failing to do so will CHECK-fail. + // It's assumed that validation happens on Raft log insert, so that + // outputs from the Raft log are already validated. + // + // Output response is valid within the passed-in context. + virtual DB::Response* Run(context::Context* ctx, const DB::Log& request); + + // Get rows from this database in range (exclusive_start, ...], returning + // no more than [size] rows. If it returns <[size] rows, the end of the database + // has been reached. Pass in empty string to start with the first key in + // the database. Returns the key of the largest returned row. + virtual std::pair RowsAsProtos( + context::Context* ctx, + const std::string& exclusive_start, + size_t size, + google::protobuf::RepeatedPtrField* out) const; + // Update this database using the given database row states. + // This will return an error if any of the DatabaseRowStates contain + // rows that already exist within the database. Rows must be lexigraphically + // larger than any existing row in the database. Returns the row key + // of the last row inserted into the database, on success. + virtual std::pair LoadRowsFromProtos( + context::Context* ctx, + const google::protobuf::RepeatedPtrField& rows); + + // Compute a hash of the entire database. This is not designed to + // be useful for security-focussed integrity checking, but should be + // sufficient to verify that replicated data matches up between source + // and destination. + virtual std::array Hash(context::Context* ctx) const; + + // Get the number of backups stored in the database + virtual size_t row_count() const { return rows_.size(); } + + private: + static std::pair BlindEvaluate(const PrivateKey& key, const Element& blinded_element); + + struct Row { + PrivateKey priv; + uint8_t tries; + }; + std::map rows_; + + void Create( + context::Context* ctx, + const BackupID& id, + const std::string& privkey, + const std::string& pubkey, + const client::CreateRequest& req, + client::CreateResponse* resp); + void Evaluate( + context::Context* ctx, + const BackupID& id, + const client::EvaluateRequest& req, + client::EvaluateResponse* resp); + void Remove( + context::Context* ctx, + const BackupID& id, + const client::RemoveRequest& req, + client::RemoveResponse* resp); +}; + +} // namespace svr2::db + +#endif // __SVR2_DB_DB3_H__ diff --git a/enclave/db/tests/db2.cc b/enclave/db/tests/db2.cc new file mode 100644 index 0000000..43dfaf4 --- /dev/null +++ b/enclave/db/tests/db2.cc @@ -0,0 +1,247 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP context +//TESTDEP env +//TESTDEP env/test +//TESTDEP env +//TESTDEP util +//TESTDEP metrics +//TESTDEP proto +//TESTDEP protobuf-lite +//TESTDEP libsodium + +#include +#include "db/db2.h" +#include "env/env.h" +#include "util/log.h" +#include "util/endian.h" +#include "proto/client.pb.h" +#include "proto/clientlog.pb.h" +#include + +namespace svr2::db { + +class DB2Test : public ::testing::Test { + protected: + static void SetUpTestCase() { + env::Init(); + } + + context::Context ctx; + DB2 db; +}; + +TEST_F(DB2Test, SingleBackupLifecycle) { + { + client::Log2 log; + auto b = log.mutable_req()->mutable_backup(); + log.set_backup_id("BACKUP7890123456"); + b->set_data("DATA56789012345678901234567890123456789012345678"); + b->set_pin("PIN45678901234567890123456789012"); + b->set_max_tries(2); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::BackupResponse::OK, resp->backup().status()); + } + { + client::Log2 log; + auto b = log.mutable_req()->mutable_expose(); + log.set_backup_id("BACKUP7890123456"); + b->set_data("DATA56789012345678901234567890123456789012345678"); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::ExposeResponse::OK, resp->expose().status()); + } + { + client::Log2 log; + auto r = log.mutable_req()->mutable_restore(); + log.set_backup_id("BACKUP7890123456"); + r->set_pin("PIN45678901234567890123456789012"); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::RestoreResponse::OK, resp->restore().status()); + ASSERT_EQ("DATA56789012345678901234567890123456789012345678", resp->restore().data()); + ASSERT_EQ(2, resp->restore().tries()); + } + { + client::Log2 log; + auto r = log.mutable_req()->mutable_restore(); + log.set_backup_id("BACKUP7890123456"); + r->set_pin("PIN............................2"); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::RestoreResponse::PIN_MISMATCH, resp->restore().status()); + ASSERT_EQ("", resp->restore().data()); + ASSERT_EQ(1, resp->restore().tries()); + } + { + client::Log2 log; + auto r = log.mutable_req()->mutable_restore(); + log.set_backup_id("BACKUP7890123456"); + r->set_pin("PIN............................2"); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::RestoreResponse::MISSING, resp->restore().status()); + } +} + +TEST_F(DB2Test, SmallerData) { + { + client::Log2 log; + auto b = log.mutable_req()->mutable_backup(); + log.set_backup_id("BACKUP7890123456"); + b->set_data("DATA5678901234567890123456789012"); // 32 bytes + b->set_pin("PIN45678901234567890123456789012"); + b->set_max_tries(2); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::BackupResponse::OK, resp->backup().status()); + } + { + client::Log2 log; + auto b = log.mutable_req()->mutable_expose(); + log.set_backup_id("BACKUP7890123456"); + b->set_data("DATA5678901234567890123456789012"); // 32 bytes + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::ExposeResponse::OK, resp->expose().status()); + } + { + client::Log2 log; + auto r = log.mutable_req()->mutable_restore(); + log.set_backup_id("BACKUP7890123456"); + r->set_pin("PIN45678901234567890123456789012"); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::RestoreResponse::OK, resp->restore().status()); + ASSERT_EQ("DATA5678901234567890123456789012", resp->restore().data()); + } +} + +TEST_F(DB2Test, Delete) { + { + client::Log2 log; + auto b = log.mutable_req()->mutable_backup(); + log.set_backup_id("BACKUP7890123456"); + b->set_data("DATA5678901234567890123456789012"); // 32 bytes + b->set_pin("PIN45678901234567890123456789012"); + b->set_max_tries(2); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::BackupResponse::OK, resp->backup().status()); + } + { + client::Log2 log; + auto b = log.mutable_req()->mutable_expose(); + log.set_backup_id("BACKUP7890123456"); + b->set_data("DATA5678901234567890123456789012"); // 32 bytes + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::ExposeResponse::OK, resp->expose().status()); + } + { + client::Log2 log; + auto d = log.mutable_req()->mutable_delete_(); + log.set_backup_id("BACKUP7890123456"); + auto resp = dynamic_cast(db.Run(&ctx, log)); + } + { + client::Log2 log; + auto r = log.mutable_req()->mutable_restore(); + log.set_backup_id("BACKUP7890123456"); + r->set_pin("PIN45678901234567890123456789012"); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::RestoreResponse::MISSING, resp->restore().status()); + } +} + +TEST_F(DB2Test, MultipleRows) { + std::string backup_id("BACKUP789012345."); + std::string data("DATA567890123456789012345678901."); + for (int i = 0; i < 256; i++) { + backup_id[DB2::BACKUP_ID_SIZE-1] = i; + data[31] = i; + { + client::Log2 log; + auto b = log.mutable_req()->mutable_backup(); + log.set_backup_id(backup_id); + b->set_data(data); // 32 bytes + b->set_pin("PIN45678901234567890123456789012"); + b->set_max_tries(2); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::BackupResponse::OK, resp->backup().status()); + } + { + client::Log2 log; + auto b = log.mutable_req()->mutable_expose(); + log.set_backup_id(backup_id); + b->set_data(data); // 32 bytes + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::ExposeResponse::OK, resp->expose().status()); + } + } + for (int i = 0; i < 256; i++) { + client::Log2 log; + auto r = log.mutable_req()->mutable_restore(); + backup_id[DB2::BACKUP_ID_SIZE-1] = i; + data[31] = i; + log.set_backup_id(backup_id); + r->set_pin("PIN45678901234567890123456789012"); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::RestoreResponse::OK, resp->restore().status()); + ASSERT_EQ(data, resp->restore().data()); + } +} + +TEST_F(DB2Test, HashMatch) { + std::string backup_id("BACKUP789012345."); + std::string data("DATA567890123456789012345678901."); + uint64_t hash = 0; + for (int i = 0; i < 256; i++) { + client::Log2 log; + auto b = log.mutable_req()->mutable_backup(); + backup_id[DB2::BACKUP_ID_SIZE-1] = i; + data[31] = i; + log.set_backup_id(backup_id); + b->set_data(data); // 32 bytes + b->set_pin("PIN45678901234567890123456789012"); + b->set_max_tries(2); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::BackupResponse::OK, resp->backup().status()); + uint64_t new_hash = util::BigEndian64FromBytes(db.Hash(&ctx).data()); + ASSERT_NE(hash, new_hash); // hash changes with every database change. + hash = new_hash; + } + ASSERT_EQ(hash, 784802678439774802ULL); +} + +TEST_F(DB2Test, HashMatchBackwards) { + // Make sure that even if we construct the same DB in a different way + // (in this case, by inserting back IDs in reverse of HashMatch), we + // get the same result. + std::string backup_id("BACKUP789012345."); + std::string data("DATA567890123456789012345678901."); + for (int i = 255; i >= 0; i--) { + client::Log2 log; + auto b = log.mutable_req()->mutable_backup(); + backup_id[DB2::BACKUP_ID_SIZE-1] = i; + data[31] = i; + log.set_backup_id(backup_id); + b->set_data(data); // 32 bytes + b->set_pin("PIN45678901234567890123456789012"); + b->set_max_tries(2); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + ASSERT_EQ(client::BackupResponse::OK, resp->backup().status()); + } + ASSERT_EQ(util::BigEndian64FromBytes(db.Hash(&ctx).data()), 784802678439774802ULL); +} + +} // namespace svr2::db diff --git a/enclave/db/tests/db3.cc b/enclave/db/tests/db3.cc new file mode 100644 index 0000000..5a7ba84 --- /dev/null +++ b/enclave/db/tests/db3.cc @@ -0,0 +1,373 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP context +//TESTDEP env +//TESTDEP env/test +//TESTDEP env +//TESTDEP util +//TESTDEP metrics +//TESTDEP proto +//TESTDEP protobuf-lite +//TESTDEP libsodium + +#include +#include "db/db3.h" +#include "env/env.h" +#include "util/log.h" +#include "util/endian.h" +#include "util/bytes.h" +#include "util/hex.h" +#include "proto/client3.pb.h" +#include "proto/clientlog.pb.h" +#include +#include +#include + +namespace svr2::db { + +class DB3Test : public ::testing::Test { + protected: + static void SetUpTestCase() { + env::Init(); + } + + context::Context ctx; + DB3 db; + static std::string backup_id; +}; + +std::string DB3Test::backup_id("BACKUP7890123456"); + +TEST_F(DB3Test, SingleBackupLifecycle) { + std::string blinded_element; + blinded_element.resize(DB3::ELEMENT_SIZE); + crypto_core_ristretto255_random( + reinterpret_cast(blinded_element.data())); + std::string evaluated_element; + int tries = 3; + { + client::Log3 log; + log.set_backup_id(backup_id); + auto b = log.mutable_req()->mutable_create(); + b->set_max_tries(3); + b->set_blinded_element(blinded_element); + auto [priv, pub] = DB3::Protocol::NewKeys(); + log.set_create_privkey(util::ByteArrayToString(priv)); + log.set_create_pubkey(util::ByteArrayToString(pub)); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + auto r = resp->create(); + ASSERT_EQ(client::CreateResponse::OK, r.status()); + evaluated_element = r.evaluated_element(); + } + for (int i = 0; i < tries; i++) { + client::Log3 log; + log.set_backup_id(backup_id); + auto b = log.mutable_req()->mutable_evaluate(); + b->set_blinded_element(blinded_element); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + auto r = resp->evaluate(); + ASSERT_EQ(client::EvaluateResponse::OK, r.status()); + EXPECT_EQ(r.tries_remaining(), tries - i - 1); + EXPECT_EQ(r.evaluated_element(), evaluated_element); + } + { + client::Log3 log; + log.set_backup_id(backup_id); + auto b = log.mutable_req()->mutable_evaluate(); + b->set_blinded_element(blinded_element); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + auto r = resp->evaluate(); + ASSERT_EQ(client::EvaluateResponse::MISSING, r.status()); + } +} + +TEST_F(DB3Test, Remove) { + std::string blinded_element; + blinded_element.resize(DB3::ELEMENT_SIZE); + crypto_core_ristretto255_random( + reinterpret_cast(blinded_element.data())); + std::string evaluated_element; + int tries = 3; + { + client::Log3 log; + log.set_backup_id(backup_id); + auto b = log.mutable_req()->mutable_create(); + b->set_max_tries(3); + b->set_blinded_element(blinded_element); + auto [priv, pub] = DB3::Protocol::NewKeys(); + log.set_create_privkey(util::ByteArrayToString(priv)); + log.set_create_pubkey(util::ByteArrayToString(pub)); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + auto r = resp->create(); + ASSERT_EQ(client::CreateResponse::OK, r.status()); + evaluated_element = r.evaluated_element(); + } + { + client::Log3 log; + log.set_backup_id(backup_id); + auto b = log.mutable_req()->mutable_remove(); + + db.Run(&ctx, log); + } + { + client::Log3 log; + log.set_backup_id(backup_id); + auto b = log.mutable_req()->mutable_evaluate(); + b->set_blinded_element(blinded_element); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + auto r = resp->evaluate(); + ASSERT_EQ(client::EvaluateResponse::MISSING, r.status()); + } +} + +// IETF VOPRF v21 test vectors (https://www.ietf.org/archive/id/draft-irtf-cfrg-voprf-21.html) + +const std::string context_string_prefix{"OPRFV1-"}; +const std::string ciphersuite_identifier{"ristretto255-SHA512"}; + +static const size_t PRIVATE_KEY_SIZE = 32; +static const size_t PUBLIC_KEY_SIZE = 32; +static const size_t SHA512_BLOCK_BYTES = 128; +static const size_t SHA512_OUTPUT_BYTES = 64; + +// https://www.rfc-editor.org/rfc/rfc8017 +std::string I2OSP(uint64_t x, size_t n) { + std::string X; + X.resize(n); + for(size_t i = 0; i < n; ++i) { + X[n-1-i] = x%256; + x /= 256; + } + return X; +} + +/* +def CreateContextString(mode, identifier): + return "OPRFV1-" || I2OSP(mode, 1) || "-" || identifier +*/ +std::string context_string() { + auto mode = I2OSP(0x00, 1); + return context_string_prefix + mode + "-" + ciphersuite_identifier; +} + +std::string sha512_hash(std::string s) { + crypto_hash_sha512_state sha; + crypto_hash_sha512_init(&sha); + crypto_hash_sha512_update(&sha, reinterpret_cast(s.data()), s.size()); + std::array out; + crypto_hash_sha512_final(&sha, out.data()); + return util::ByteArrayToString(out); +} + +std::string strxor(const std::string& lhs, const std::string& rhs) { + CHECK(lhs.size() == rhs.size()); + std::string result; + result.resize(rhs.size()); + for(size_t i = 0; i < lhs.size(); ++i) { + result[i] = lhs[i] ^ rhs[i]; + } + return result; +} + +template +bool is_zero(const std::array& arr) { + bool result = true; + for(size_t i = 0; i < N; ++i) { + result = result && (arr[i] == 0); + } + return result; +} + +// https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-12#name-expand_message_xmd +template +std::array ExpandMessageXMD_SHA512(std::string msg, std::string dst) { + auto ell = N / SHA512_OUTPUT_BYTES + ((N%SHA512_OUTPUT_BYTES == 0) ? 0 : 1); + CHECK(ell <= 255); + LOG(DEBUG) << "expand_message_xmd blocks: " << ell; + std::array result{0}; + + auto dst_prime = dst + I2OSP(dst.size(),1); + auto z_pad = I2OSP(0, SHA512_BLOCK_BYTES); + auto l_i_b_str = I2OSP(N,2); + auto msg_prime = z_pad + msg + l_i_b_str + I2OSP(0,1) + dst_prime; + auto b_0 = sha512_hash(msg_prime); + auto b_1 = sha512_hash(b_0 + I2OSP(1,1) + dst_prime); + auto bytes_to_copy = std::min(b_1.size(), N); + std::copy(b_1.data(), b_1.data()+ bytes_to_copy, result.data()); + auto b_last = b_1; + for(size_t i = 2; i <= ell; ++i) { + auto b_next = sha512_hash( + strxor(b_0, b_last) + + I2OSP(i,1) + + dst_prime + ); + auto bytes_to_copy = std::min(SHA512_OUTPUT_BYTES, N - (i-1)*SHA512_OUTPUT_BYTES); + LOG(DEBUG) << "copying " << bytes_to_copy << " bytes"; + std::copy(b_next.data(), b_next.data() + bytes_to_copy, result.data() + (i-1)*SHA512_OUTPUT_BYTES); + b_last = b_next; + } + return result; +} + +std::array HashToScalar(const std::string& data) { + std::string dst = std::string{"HashToScalar-"} + context_string(); + auto uniform_bytes = ExpandMessageXMD_SHA512<64>(data, dst); + std::array s; + // TODO: verify that this interprets numbers in little-endian order + crypto_core_ristretto255_scalar_reduce(s.data(), uniform_bytes.data()); + return s; +} + +std::pair, std::array> +DeriveKeyPair(std::string seed, std::string info) { + std::string derive_input = seed + I2OSP(info.size(),2) + info; + size_t counter = 0; + std::array sk{0}; + std::array pk{0}; + + std::string dst = std::string{"DeriveKeyPair"} + context_string(); + while(is_zero(sk)) { + LOG(DEBUG) << "derive key pair attempt " << counter; + CHECK(counter < 255); + auto uniform_bytes = + ExpandMessageXMD_SHA512<64>(derive_input + I2OSP(counter,1), dst); + crypto_core_ristretto255_scalar_reduce(sk.data(), uniform_bytes.data()); + counter += 1; + } + CHECK(0 == crypto_scalarmult_ristretto255_base(pk.data(), sk.data())); + + return std::make_pair(pk, sk); +} + +std::array HashToGroup(std::string input) { + std::string dst = std::string{"HashToGroup-"} + context_string(); + auto uniform_bytes = ExpandMessageXMD_SHA512<64>(input, dst); + std::array result{}; + crypto_core_ristretto255_from_hash(result.data(), uniform_bytes.data()); + return result; +} + +TEST_F(DB3Test, IETF_A_1_1) { + auto seed = util::HexToBytes("a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3"); + auto key_info = util::HexToBytes("74657374206b6579"); + auto sk_expected = "5ebcea5ee37023ccb9fc2d2019f9d7737be85591ae8652ffa9ef0f4d37063b0e"; + + auto cs = context_string(); + for(size_t i = 0; i < cs.size(); ++i) { + LOG(DEBUG) << " (" << static_cast(cs[i]) << ") " << cs[i] ; + } + LOG(DEBUG) << cs; + + auto [pk, sk] = DeriveKeyPair(seed, key_info); + auto sk_hex = util::BytesToHex(sk.data(), PRIVATE_KEY_SIZE); + EXPECT_EQ(sk_hex, sk_expected); +} + +TEST_F(DB3Test, EXPAND_MESSAGE_XMD_1) { + std::string dst{"QUUX-V01-CS02-with-expander-SHA512-256"}; + std::string msg{"abc"}; + size_t len_in_bytes = 0x80; + auto uniform_bytes = ExpandMessageXMD_SHA512<0x80>(msg, dst); + LOG(DEBUG) << "here"; + auto hex = util::BytesToHex(uniform_bytes.data(), uniform_bytes.size()); + LOG(DEBUG) << hex; + LOG(DEBUG) << "there"; + + EXPECT_EQ(util::BytesToHex(uniform_bytes.data(), uniform_bytes.size()), "7f1dddd13c08b543f2e2037b14cefb255b44c83cc397c1786d975653e36a6b11bdd7732d8b38adb4a0edc26a0cef4bb45217135456e58fbca1703cd6032cb1347ee720b87972d63fbf232587043ed2901bce7f22610c0419751c065922b488431851041310ad659e4b23520e1772ab29dcdeb2002222a363f0c2b1c972b3efe1"); +} + +TEST_F(DB3Test, EXPAND_MESSAGE_XMD_2) { + std::string dst{"QUUX-V01-CS02-with-expander-SHA512-256"}; + std::string msg{"abcdef0123456789"}; + size_t len_in_bytes = 0x20; + auto uniform_bytes = ExpandMessageXMD_SHA512<0x20>(msg, dst); + LOG(DEBUG) << util::BytesToHex(uniform_bytes.data(), uniform_bytes.size()); + + EXPECT_EQ(util::BytesToHex(uniform_bytes.data(), uniform_bytes.size()), "087e45a86e2939ee8b91100af1583c4938e0f5fc6c9db4b107b83346bc967f58"); +} + +TEST_F(DB3Test, IETF_A_1_1_1) { + auto sk = util::HexToBytes("5ebcea5ee37023ccb9fc2d2019f9d7737be85591ae8652ffa9ef0f4d37063b0e"); + auto input = util::HexToBytes("00"); + auto blind = util::HexToBytes("64d37aed22a27f5191de1c1d69fadb899d8862b58eb4220029e036ec4c1f6706"); + auto blinded_element_expected = util::HexToBytes("609a0ae68c15a3cf6903766461307e5c8bb2f95e7e6550e1ffa2dc99e412803c"); + std::string evaluation_element_hex = "7ec6578ae5120958eb2db1745758ff379e77cb64fe77b0b2d8cc917ea0869c7e"; + std::string output_hex = "527759c3d9366f277d8c6020418d96bb393ba2afb20ff90df23fb7708264e2f3ab9135e3bd69955851de4b1f9fe8a0973396719b7912ba9ee8aa7d0b5e24bcf6"; + + // Compute blinded element + std::array blinded_element; + std::array elt = HashToGroup(input); + auto ret = crypto_scalarmult_ristretto255(blinded_element.data(), reinterpret_cast(blind.data()), elt.data()); + EXPECT_EQ(util::BytesToHex(blinded_element.data(), PUBLIC_KEY_SIZE), "609a0ae68c15a3cf6903766461307e5c8bb2f95e7e6550e1ffa2dc99e412803c"); + + // send to server to evaluate + std::string evaluated_element; + int tries = 3; + { + client::Log3 log; + log.set_backup_id(backup_id); + auto b = log.mutable_req()->mutable_create(); + b->set_max_tries(3); + b->set_blinded_element(util::ByteArrayToString(blinded_element)); + std::array pk{}; + CHECK(0 == crypto_scalarmult_ristretto255_base(pk.data(), reinterpret_cast(sk.data()))); + log.set_create_privkey(sk); + log.set_create_pubkey(util::ByteArrayToString(pk)); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + auto r = resp->create(); + ASSERT_EQ(client::CreateResponse::OK, r.status()); + evaluated_element = r.evaluated_element(); + auto [ee_data, err] = util::StringToByteArray(evaluated_element); + EXPECT_EQ(util::BytesToHex(ee_data.data(), ee_data.size()), evaluation_element_hex); + } +} + + +TEST_F(DB3Test, IETF_A_1_1_2) { + auto seed = util::HexToBytes("a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3"); + auto key_info = util::HexToBytes("74657374206b6579"); + auto sk = util::HexToBytes("5ebcea5ee37023ccb9fc2d2019f9d7737be85591ae8652ffa9ef0f4d37063b0e"); + auto input = util::HexToBytes("5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a"); + auto blind = util::HexToBytes("64d37aed22a27f5191de1c1d69fadb899d8862b58eb4220029e036ec4c1f6706"); + auto blinded_element_expected = util::HexToBytes("da27ef466870f5f15296299850aa088629945a17d1f5b7f5ff043f76b3c06418"); + auto evaluation_element_hex = "b4cbf5a4f1eeda5a63ce7b77c7d23f461db3fcab0dd28e4e17cecb5c90d02c25"; + auto output_hex = "f4a74c9c592497375e796aa837e907b1a045d34306a749db9f34221f7e750cb4f2a6413a6bf6fa5e19ba6348eb673934a722a7ede2e7621306d18951e7cf2c73"; + + // Compute blinded element + std::array blinded_element; + std::array elt = HashToGroup(input); + auto ret = crypto_scalarmult_ristretto255(blinded_element.data(), reinterpret_cast(blind.data()), elt.data()); + EXPECT_EQ(util::BytesToHex(blinded_element.data(), PUBLIC_KEY_SIZE), "da27ef466870f5f15296299850aa088629945a17d1f5b7f5ff043f76b3c06418"); + + // send to server to evaluate + std::string evaluated_element; + int tries = 3; + { + client::Log3 log; + log.set_backup_id(backup_id); + auto b = log.mutable_req()->mutable_create(); + b->set_max_tries(3); + b->set_blinded_element(util::ByteArrayToString(blinded_element)); + std::array pk{}; + CHECK(0 == crypto_scalarmult_ristretto255_base(pk.data(), reinterpret_cast(sk.data()))); + log.set_create_privkey(sk); + log.set_create_pubkey(util::ByteArrayToString(pk)); + + auto resp = dynamic_cast(db.Run(&ctx, log)); + auto r = resp->create(); + ASSERT_EQ(client::CreateResponse::OK, r.status()); + evaluated_element = r.evaluated_element(); + auto [ee_data, err] = util::StringToByteArray(evaluated_element); + EXPECT_EQ(util::BytesToHex(ee_data.data(), ee_data.size()), evaluation_element_hex); + } +} + +} // namespace svr2::db diff --git a/enclave/ecalls/ecalls.cc b/enclave/ecalls/ecalls.cc new file mode 100644 index 0000000..e83a607 --- /dev/null +++ b/enclave/ecalls/ecalls.cc @@ -0,0 +1,97 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include +#include +#include +#include +#include +#include "svr2/svr2_t.h" +#include "core/core.h" +#include "proto/error.pb.h" +#include "proto/enclaveconfig.pb.h" +#include "env/env.h" +#include "context/context.h" +#include "util/endian.h" +#include "util/log.h" +#include "metrics/metrics.h" + +namespace svr2::ecalls { +namespace { + +void SeedWeakRandom() { + LOG(INFO) << "Seeding weak randomness with strong"; + // Best-effort seeding of weak randomness from strong. + uint8_t bytes[8]; + env::environment->RandomBytes(bytes, sizeof(bytes)); + srand(util::BigEndian64FromBytes(bytes)); +} +std::unique_ptr global_core; +// Sadly, we don't appear to have access to std::shared_mutex, so we use +// the next best thing. +enum class GlobalCoreState { + UNINITIATED = 0, + INITIATING = 1, + INITIATED = 2, +}; +std::atomic global_core_state(GlobalCoreState::UNINITIATED); + +} // namespace + +extern "C" { + +int svr2_init( + size_t config_size, + unsigned char* config, + unsigned char* peer_id) { + context::Context ctx; + COUNTER(ecalls, init_calls)->Increment(); + GlobalCoreState state_expected = GlobalCoreState::UNINITIATED; + GlobalCoreState state_requested = GlobalCoreState::INITIATING; + if (!global_core_state.compare_exchange_strong(state_expected, state_requested)) { + return COUNTED_ERROR(Core_ReInit); + } + + enclaveconfig::InitConfig config_pb; + if (!config_pb.ParseFromArray(config, config_size)) { + global_core_state.store(GlobalCoreState::UNINITIATED); + return COUNTED_ERROR(Core_ConfigProtobufParse); + } + if (config_pb.initial_log_level() != enclaveconfig::LOG_LEVEL_NONE) { + util::SetLogLevel(config_pb.initial_log_level()); + } + + env::Init(config_pb.group_config().simulated()); // Can be called more than once, but never concurrently. + SeedWeakRandom(); + + LOG(INFO) << "Creating core"; + auto [core, err] = core::Core::Create(&ctx, config_pb); + if (err != error::OK) { + global_core_state.store(GlobalCoreState::UNINITIATED); + return err; + } + global_core = std::move(core); + const auto peer_id_array = global_core->ID().Get(); + std::copy(peer_id_array.begin(), peer_id_array.end(), peer_id); + global_core_state.store(GlobalCoreState::INITIATED); + return error::OK; +} + +int svr2_input_message( + size_t msg_size, + unsigned char* msg) { + context::Context ctx; + COUNTER(ecalls, host_messages_received)->Increment(); + COUNTER(ecalls, host_bytes_received)->IncrementBy(msg_size); + if (global_core_state.load() != GlobalCoreState::INITIATED) { + return COUNTED_ERROR(Core_NoInit); + } + UntrustedMessage* msg_pb = ctx.Protobuf(); + if (!msg_pb->ParseFromArray(msg, msg_size)) { + return COUNTED_ERROR(Core_ReceiveProtobufParse); + } + return global_core->Receive(&ctx, *msg_pb); +} + +} // extern "C" +} // namespace svr2::ecalls diff --git a/enclave/env/env.cc b/enclave/env/env.cc new file mode 100644 index 0000000..3d25943 --- /dev/null +++ b/enclave/env/env.cc @@ -0,0 +1,80 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "env/env.h" +#include "util/macros.h" +#include +#include + +namespace svr2::env { + +namespace { + +class UnsetEnvironment : public Environment { + public: + virtual ~UnsetEnvironment() {} + virtual std::pair Evidence(const PublicKey& key, const enclaveconfig::RaftGroupConfig& config) const { + CHECK(nullptr == "env::Init not called, environment not initiated"); + + return std::make_pair(e2e::Attestation(), error::General_Unimplemented); + } + // Given evidence and endorsements, extract the key. + virtual std::pair Attest( + util::UnixSecs now, + const std::string& evidence, + const std::string& endorsements) const { + CHECK(nullptr == "env::Init not called, environment not initiated"); + std::array out = {0}; + return std::make_pair(out, error::General_Unimplemented); + } + // Given a string of size N, rewrite all bytes in that string with + // random bytes. + virtual error::Error RandomBytes(void* bytes, size_t size) const { + CHECK(nullptr == "env::Init not called, environment not initiated"); + return error::General_Unimplemented; + } + + virtual error::Error SendMessage(const std::string& msg) const { + CHECK(nullptr == "env::Init not called, environment not initiated"); + return error::General_Unimplemented; + } + + virtual void Log(int level, const std::string& msg) const { + CHECK(nullptr == "env::Init not called, environment not initiated"); + } + + virtual error::Error UpdateEnvStats() const { + CHECK(nullptr == "env::Init not called, environment not initiated"); + return error::General_Unimplemented; + } +}; + +const char* env_randombytes_name() { return "env"; } +uint32_t env_randombytes_uint32() { + uint32_t out; + CHECK(error::OK == environment->RandomBytes(&out, sizeof(out))); + return out; +} +void env_randombytes_bytes(void* const buf, const size_t size) { + CHECK(error::OK == environment->RandomBytes(buf, size)); +} +randombytes_implementation sodium_randombytes_impl = { + .implementation_name = env_randombytes_name, + .random = env_randombytes_uint32, + .buf = env_randombytes_bytes, +}; + +} // namespace + +std::unique_ptr environment(new UnsetEnvironment()); + +Environment::Environment() { +} + +void Environment::Init() { + // sodium_init returns 0 or 1 on success, -1 on failure. + CHECK(0 == randombytes_set_implementation(&sodium_randombytes_impl)); + CHECK(sodium_init() >= 0); +} + +} // namespace svr2::env diff --git a/enclave/env/env.h b/enclave/env/env.h new file mode 100644 index 0000000..7d9344b --- /dev/null +++ b/enclave/env/env.h @@ -0,0 +1,50 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_ENV_ENV_H__ +#define __SVR2_ENV_ENV_H__ + +#include +#include +#include "proto/error.pb.h" +#include "proto/e2e.pb.h" +#include "proto/msgs.pb.h" +#include "util/macros.h" +#include "util/ticks.h" + +namespace svr2::env { + +typedef std::array PublicKey; + +class Environment { + public: + DELETE_COPY_AND_ASSIGN(Environment); + Environment(); + virtual ~Environment() {} + virtual void Init(); + // Given a 32-byte key, return evidence of that key (an OpenEnclave report). + virtual std::pair Evidence(const PublicKey& key, const enclaveconfig::RaftGroupConfig& config) const = 0; + // Given evidence and endorsements, extract the key. + virtual std::pair Attest( + util::UnixSecs now, + const std::string& evidence, + const std::string& endorsements) const = 0; + // Given a string of size N, rewrite all bytes in that string with + // random bytes. + virtual error::Error RandomBytes(void* bytes, size_t size) const = 0; + // Send a message from enclave to host. [msg] should be a serialized + // EnclaveMessage. + virtual error::Error SendMessage(const std::string& msg) const = 0; + // Log a message to a logging framework. + virtual void Log(int level, const std::string& msg) const = 0; + // Update env-specific statistics. + virtual error::Error UpdateEnvStats() const = 0; +}; + +extern std::unique_ptr environment; + +void Init(bool is_simulated = true); + +} // namespace svr2::env + +#endif // __SVR2_ENV_ENV_H__ diff --git a/enclave/env/nsm/nsm.cc b/enclave/env/nsm/nsm.cc new file mode 100644 index 0000000..a314713 --- /dev/null +++ b/enclave/env/nsm/nsm.cc @@ -0,0 +1,114 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include +#include +#include + +#include "env/env.h" +#include "util/macros.h" +#include "context/context.h" +#include "socketwrap/socket.h" +#include "proto/nitro.pb.h" +#include "queue/queue.h" + +namespace svr2::env { +namespace nsm { +namespace { + +static queue::Queue output_messages(100); + +class Environment : public ::svr2::env::Environment { + public: + DELETE_COPY_AND_ASSIGN(Environment); + Environment() { + nsm_fd_ = nsm_lib_init(); + } + virtual ~Environment() { + nsm_lib_exit(nsm_fd_); + } + virtual std::pair Evidence(const PublicKey& key, const enclaveconfig::RaftGroupConfig& config) const { + e2e::Attestation out; + out.mutable_evidence()->resize(4096); + uint32_t evidence_len = out.evidence().size(); + std::string config_serialized; + if (!config.SerializeToString(&config_serialized)) { + return std::make_pair(out, error::Env_SerializeCustomClaims); + } + if (ERROR_CODE_SUCCESS != nsm_get_attestation_doc( + nsm_fd_, + reinterpret_cast(config_serialized.data()), + config_serialized.size(), + nullptr, + 0, + key.data(), + key.size(), + reinterpret_cast(out.mutable_evidence()->data()), + &evidence_len)) { + return std::make_pair(out, error::Env_AttestationFailure); + } + out.mutable_evidence()->resize(evidence_len); + return std::make_pair(out, error::OK); + } + + // Given evidence and endorsements, extract the key. + virtual std::pair Attest( + util::UnixSecs now, + const std::string& evidence, + const std::string& endorsements) const { + std::array out = {0}; + return std::make_pair(out, error::General_Unimplemented); + } + + // Given a string of size N, rewrite all bytes in that string with + // random bytes. + virtual error::Error RandomBytes(void* bytes, size_t size) const { + uintptr_t received; + uint8_t* u8ptr = reinterpret_cast(bytes); + while (size) { + received = size; + if (ERROR_CODE_SUCCESS != nsm_get_random(nsm_fd_, u8ptr, &received)) { + return error::Env_RandomBytes; + } + size -= received; + u8ptr += received; + } + return error::OK; + } + + virtual error::Error SendMessage(const std::string& msg) const { + output_messages.Push(msg); + return error::OK; + } + + virtual void Log(int level, const std::string& msg) const { + } + + virtual error::Error UpdateEnvStats() const { + return error::General_Unimplemented; + } + + private: + int32_t nsm_fd_; +}; + +} // namespace + +error::Error SendNsmMessages(socketwrap::Socket* sock) { + while (true) { + context::Context ctx; + for (int i = 0; i < 100; i++) { + auto out = ctx.Protobuf(); + *out->mutable_out() = output_messages.Pop(); + RETURN_IF_ERROR(sock->WritePB(&ctx, *out)); + } + } +} + +} // namespace nsm + +void Init(bool is_simulated) { + environment = std::make_unique<::svr2::env::nsm::Environment>(); +} + +} // namespace svr2::env diff --git a/enclave/env/nsm/nsm.h b/enclave/env/nsm/nsm.h new file mode 100644 index 0000000..cc35e3d --- /dev/null +++ b/enclave/env/nsm/nsm.h @@ -0,0 +1,17 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_ENV_NSM_NSM_H__ +#define __SVR2_ENV_NSM_NSM_H__ + +#include "socketwrap/socket.h" +#include "proto/error.pb.h" + +namespace svr2::env::nsm { + +// Send all outstanding messages, in order, up to the host. +error::Error SendNsmMessages(socketwrap::Socket* sock); + +} // namespace svr2::env::nsm + +#endif // __SVR2_ENV_NSM_NSM_H__ diff --git a/enclave/env/sgx/sgx.cc b/enclave/env/sgx/sgx.cc new file mode 100644 index 0000000..4384830 --- /dev/null +++ b/enclave/env/sgx/sgx.cc @@ -0,0 +1,272 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "attestation/attestation.h" +#include "env/env.h" +#include "metrics/metrics.h" +#include "svr2/svr2_t.h" +#include "util/constant.h" +#include "util/log.h" + +namespace svr2::env { +namespace sgx { + +static const char* unattested_evidence_prefix = "UNATTESTED EVIDENCE:"; +static const char* custom_claim_pk = "pk"; +static const char* custom_claim_config = "config"; +class Environment : public ::svr2::env::Environment { + public: + DELETE_COPY_AND_ASSIGN(Environment); + Environment(bool simulated) : ::svr2::env::Environment(), simulated_(simulated) { + if (!simulated_) { + CHECK(OE_OK == oe_attester_initialize()); + CHECK(OE_OK == oe_verifier_initialize()); + CHECK(error::OK == GetMRENCLAVE()); + } + } + + virtual ~Environment() { + if (!simulated_) { + oe_attester_shutdown(); + oe_verifier_shutdown(); + } + } + + virtual std::pair Evidence( + const PublicKey& key, const enclaveconfig::RaftGroupConfig& config) const { + e2e::Attestation attestation; + if (simulated_) { + attestation.set_evidence( + unattested_evidence_prefix + + std::string(reinterpret_cast(key.data()), key.size())); + return std::make_pair(attestation, error::OK); + } + std::string serialized_config; + if (!config.SerializeToString(&serialized_config)) { + return std::make_pair(e2e::Attestation(), COUNTED_ERROR(Env_SerializeConfigForEvidence)); + } + + uint8_t* custom_claims_buffer = NULL; + size_t custom_claims_buffer_size = 0; + oe_claim_t custom_claims[] = { + { + .name = const_cast(custom_claim_pk), + .value = const_cast(key.data()), + .value_size = key.size(), + }, + { + .name = const_cast(custom_claim_config), + .value = reinterpret_cast(serialized_config.data()), + .value_size = serialized_config.size(), + }, + }; + if (OE_OK != oe_serialize_custom_claims(custom_claims, sizeof(custom_claims) / sizeof(custom_claims[0]), + &custom_claims_buffer, + &custom_claims_buffer_size)) { + return std::make_pair(e2e::Attestation(), + COUNTED_ERROR(Env_SerializeCustomClaims)); + } + std::unique_ptr free_cc( + custom_claims_buffer, oe_free_serialized_custom_claims); + + uint8_t* evidence_buffer = NULL; + size_t evidence_buffer_size = 0; + uint8_t* endorsements_buffer = NULL; + size_t endorsements_buffer_size = 0; + if (OE_OK != oe_get_evidence(&attestation::sgx_remote_uuid, 0, custom_claims_buffer, + custom_claims_buffer_size, NULL, 0, + &evidence_buffer, &evidence_buffer_size, + &endorsements_buffer, + &endorsements_buffer_size)) { + return std::make_pair(e2e::Attestation(), error::Env_GetEvidence); + } + + std::unique_ptr free_evidence( + evidence_buffer, oe_free_evidence); + std::unique_ptr free_endorsements( + endorsements_buffer, oe_free_endorsements); + + std::string evidence((char*)evidence_buffer, evidence_buffer_size); + std::string endorsements((char*)endorsements_buffer, + endorsements_buffer_size); + + attestation.set_evidence(evidence); + attestation.set_endorsements(endorsements); + return std::make_pair(attestation, error::OK); + } + + virtual error::Error RandomBytes(void* bytes, size_t size) const { + CHECK(size > 0); + if (OE_OK != oe_random(bytes, size)) { + return COUNTED_ERROR(Env_RandomBytes); + } + return error::OK; + } + + virtual std::pair Attest( + util::UnixSecs now, + const std::string& evidence, + const std::string& endorsements) const { + PublicKey out = {0}; + + if (simulated_) { + if (evidence.size() != strlen(unattested_evidence_prefix) + out.size() || + evidence.substr(0, strlen(unattested_evidence_prefix)) != + unattested_evidence_prefix) { + return std::make_pair(out, error::Env_AttestationFailure); + } + memcpy(out.data(), evidence.data() + strlen(unattested_evidence_prefix), + out.size()); + return std::make_pair(out, error::OK); + } + const uint8_t* evidence_data = + reinterpret_cast(evidence.data()); + const uint8_t* endorsements_data = + reinterpret_cast(endorsements.data()); + + oe_claim_t* claims = nullptr; + size_t claims_length = 0; + + oe_datetime_t now_datetime; + SecsToOEDatetime(now, &now_datetime); + oe_policy_t policy = { + .type = OE_POLICY_ENDORSEMENTS_TIME, + .policy = &now_datetime, + .policy_size = sizeof(now_datetime), + }; + auto verify_err = oe_verify_evidence( + &attestation::sgx_remote_uuid, evidence_data, evidence.size(), endorsements_data, + endorsements.size(), &policy, 1, &claims, &claims_length); + if (OE_OK != verify_err) { + LOG(ERROR) << "oe_verify_evidence failed with code " << verify_err; + return std::make_pair(out, error::Env_AttestationFailure); + } + + auto free_claims_known_size = [claims_length](oe_claim_t* ptr) { + return oe_free_claims(ptr, claims_length); + }; + std::unique_ptr free_claims( + claims, free_claims_known_size); + + // evidence is verified, now check individual fields + error::Error err = ValidateStandardClaims(claims, claims_length); + if (error::OK != err) { + return std::make_pair(out, err); + } + + err = attestation::ReadKeyFromVerifiedClaims(claims, claims_length, out); + + return std::make_pair(out, err); + } + + virtual error::Error SendMessage(const std::string& msg) const { + if (OE_OK != + svr2_output_message( + msg.size(), const_cast( + reinterpret_cast(msg.data())))) { + return COUNTED_ERROR(Env_SendMessage); + } + return error::OK; + } + + virtual void Log(int level, const std::string& msg) const { + oe_log_ocall(level, msg.c_str()); + } + + virtual error::Error UpdateEnvStats() const { + oe_mallinfo_t info; + if (OE_OK != oe_allocator_mallinfo(&info)) { + return COUNTED_ERROR(Env_MallinfoFailure); + } + GAUGE(env, total_heap_size)->Set(info.max_total_heap_size); + GAUGE(env, allocated_heap_size)->Set(info.current_allocated_heap_size); + GAUGE(env, peak_heap_size)->Set(info.peak_allocated_heap_size); + return error::OK; + } + + private: + bool simulated_; + std::string expected_mrenclave_; + error::Error GetMRENCLAVE() { + auto [attestation, err] = Evidence(PublicKey{0}, enclaveconfig::RaftGroupConfig()); + if (err != error::OK) { + return err; + } + + auto [claims, claims_length] = attestation::VerifyAndReadClaims( + attestation.evidence(), attestation.endorsements()); + + auto free_claims_known_size = [claims_length=claims_length](oe_claim_t* ptr) { + return oe_free_claims(ptr, claims_length); + }; + std::unique_ptr free_claims( + claims, free_claims_known_size); + + // read the MRENCLAVE - this is our MRENCLAVE and we expect all peers to + // have the same value OE_CLAIM_UNIQUE_ID retrieves MRENCLAVE on SGX + const oe_claim_t* claim; + if ((claim = attestation::FindClaim(claims, claims_length, + OE_CLAIM_UNIQUE_ID)) == nullptr) { + return COUNTED_ERROR(Env_AttestationFailure); + } + expected_mrenclave_ = std::string( + reinterpret_cast(claim->value), claim->value_size); + return error::OK; + } + + error::Error ValidateStandardClaims(oe_claim_t* claims, + size_t claims_length) const { + const oe_claim_t* claim; + + // OE_CLAIM_UNIQUE_ID is MRENCLAVE for SGX + if ((claim = attestation::FindClaim(claims, claims_length, + OE_CLAIM_UNIQUE_ID)) == nullptr) { + return COUNTED_ERROR(Env_MissingMRENCLAVE); + } + auto actual_mrenclave = std::string( + reinterpret_cast(claim->value), claim->value_size); + + // Don't need constant time, but we have it so we use it. + if (!util::ConstantTimeEquals(actual_mrenclave, expected_mrenclave_)) { + return COUNTED_ERROR(Env_WrongMRENCLAVE); + } + + return error::OK; + } + + static void SecsToOEDatetime(util::UnixSecs secs, oe_datetime_t* dt) { + // Mostly copied from oe_datetime_now in OpenEnclave's common/datetime.c. + // Unfortunately, they expose the ability to get from "now", but not + // from an arbitrary timestamp. + CHECK(dt != nullptr); + struct tm timeinfo; + + gmtime_r(&secs, &timeinfo); + + dt->year = (uint32_t)timeinfo.tm_year + 1900; + dt->month = (uint32_t)timeinfo.tm_mon + 1; + dt->day = (uint32_t)timeinfo.tm_mday; + dt->hours = (uint32_t)timeinfo.tm_hour; + dt->minutes = (uint32_t)timeinfo.tm_min; + dt->seconds = (uint32_t)timeinfo.tm_sec; + } +}; + +} // namespace sgx + +void Init(bool is_simulated) { + environment = std::make_unique<::svr2::env::sgx::Environment>(is_simulated); + environment->Init(); +} + +} // namespace svr2::env diff --git a/enclave/env/test/test.cc b/enclave/env/test/test.cc new file mode 100644 index 0000000..8ef5a15 --- /dev/null +++ b/enclave/env/test/test.cc @@ -0,0 +1,94 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "env/test/test.h" +#include "env/env.h" +#include "util/mutex.h" +#include +#include +#include +#include + +namespace svr2::env { +namespace test { + +static const char* evidence_prefix = "EVIDENCE:"; +static volatile std::atomic random_gen; + +class Environment : public ::svr2::env::Environment { + public: + DELETE_COPY_AND_ASSIGN(Environment); + Environment() : ::svr2::env::Environment() {} + virtual ~Environment() {} + virtual std::pair Evidence(const PublicKey& key, const enclaveconfig::RaftGroupConfig& config) const { + e2e::Attestation attestation; + attestation.set_evidence(evidence_prefix + std::string(reinterpret_cast(key.data()), key.size())); + return std::make_pair(attestation, error::OK); + } + + virtual error::Error RandomBytes(void* bytes, size_t size) const { + // We could do this reading in a while loop, but we expect it should be fine. + // Rewrite this if tests fail because of it. + CHECK(size > 0); + uint8_t* ptr = reinterpret_cast(bytes); + for (size_t i = 0; i < size; i++) { + uint32_t next = std::atomic_fetch_add(&random_gen, 1U); + // This keeps the sequence of bytes relatively non-repeating for the first 4GB. + *ptr++ = (uint8_t)(next ^ (next >> 8) ^ (next >> 16) ^ (next >> 24)); + } + return error::OK; + } + + virtual std::pair Attest( + util::UnixSecs now, + const std::string& evidence, + const std::string& endorsements) const { + PublicKey out = {0}; + if (evidence.size() != strlen(evidence_prefix) + out.size() + || evidence.substr(0, strlen(evidence_prefix)) != evidence_prefix) { + return std::make_pair(out, error::Env_AttestationFailure); + } + memcpy(out.data(), evidence.data() + strlen(evidence_prefix), out.size()); + return std::make_pair(out, error::OK); + } + + virtual error::Error SendMessage(const std::string& msg) const { + util::unique_lock ul(mu_); + EnclaveMessage m; + CHECK(m.ParseFromString(msg)); + sent_messages_.push_back(std::move(m)); + return error::OK; + } + + virtual void Log(int level, const std::string& msg) const { + fprintf(stderr, "%s\n", msg.c_str()); + } + + std::vector SentMessages() { + util::unique_lock ul(mu_); + return std::move(sent_messages_); + } + + virtual error::Error UpdateEnvStats() const { + return error::OK; + } + + private: + mutable util::mutex mu_; + mutable std::vector sent_messages_ GUARDED_BY(mu_); +}; + +std::vector SentMessages() { + Environment* e = dynamic_cast(::svr2::env::environment.get()); + CHECK(e != nullptr); + return e->SentMessages(); +} + +} // namespace test + +void Init(bool is_simulated) { + environment = std::make_unique<::svr2::env::test::Environment>(); + environment->Init(); +} + +} // namespace svr2::env diff --git a/enclave/env/test/test.h b/enclave/env/test/test.h new file mode 100644 index 0000000..e28844f --- /dev/null +++ b/enclave/env/test/test.h @@ -0,0 +1,17 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_ENV_TEST_TEST_H__ +#define __SVR2_ENV_TEST_TEST_H__ + +#include +#include +#include "proto/msgs.pb.h" + +namespace svr2::env::test { + +std::vector SentMessages(); + +} // namespace svr2::env::test + +#endif // __SVR2_ENV_TEST_TEST_H__ diff --git a/enclave/env/test/tests/testrand.cc b/enclave/env/test/tests/testrand.cc new file mode 100644 index 0000000..ce4fb6e --- /dev/null +++ b/enclave/env/test/tests/testrand.cc @@ -0,0 +1,28 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP util +//TESTDEP env +//TESTDEP env/test +//TESTDEP proto +//TESTDEP protobuf-lite +//TESTDEP libsodium + +#include +#include "env/env.h" +#include "util/log.h" +#include "util/hex.h" + +namespace svr2::env { + +TEST(EnvTest, Random) { + Init(); + uint8_t got[260]; + ASSERT_EQ(error::OK, environment->RandomBytes(got, sizeof(got))); + LOG(INFO) << "Bytes: " << util::BytesToHex(got, 8); + uint8_t expect_first[] = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17}; + ASSERT_EQ(0, memcmp(got, expect_first, sizeof(expect_first))); +} + +} // namespace svr2::env diff --git a/enclave/find_header.sh b/enclave/find_header.sh new file mode 100755 index 0000000..23e206c --- /dev/null +++ b/enclave/find_header.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# +# Given a compiler and a header file, return what directory that header is located in. +# +set -e +if [[ $# != 2 ]]; then + echo 1>&2 "Usage: $0

" + exit 1 +fi +COMPILER=$1 +HEADER=$2 +LISTING="" +"$COMPILER" -E -x c++ - -v &1 | while read line +do + if [[ $line == "#include <...> search starts here:" ]]; then + LISTING=1 + elif [[ $line == "End of search list." ]]; then + exit 1 + elif [[ $LISTING != "" ]]; then + if ls "$line/$HEADER" >/dev/null 2>/dev/null; then + echo "$line" + exit 0 + fi + fi +done diff --git a/enclave/googletest b/enclave/googletest new file mode 160000 index 0000000..3026483 --- /dev/null +++ b/enclave/googletest @@ -0,0 +1 @@ +Subproject commit 3026483ae575e2de942db5e760cf95e973308dd5 diff --git a/enclave/groupclock/groupclock.cc b/enclave/groupclock/groupclock.cc new file mode 100644 index 0000000..863d359 --- /dev/null +++ b/enclave/groupclock/groupclock.cc @@ -0,0 +1,52 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "groupclock/groupclock.h" + +#include +#include +#include "util/log.h" + +namespace svr2::groupclock { + +void Clock::SetLocalTime(util::UnixSecs secs) { + local_.store(secs); +} + +void Clock::SetRemoteTime(context::Context* ctx, const peerid::PeerID& peer, util::UnixSecs secs) { + ACQUIRE_LOCK(mu_, ctx, lock_groupclock); + remotes_[peer] = secs; +} + +util::UnixSecs Clock::GetTime(context::Context* ctx, const std::set& remotes) const { + std::vector secs(1 /* local_ */ + remotes.size()); + ACQUIRE_LOCK(mu_, ctx, lock_groupclock); + auto set_iter = remotes.begin(); + auto map_iter = remotes_.begin(); + secs[0] = local_.load(); + size_t secs_size = 1; + while (set_iter != remotes.end() && map_iter != remotes_.end()) { + const peerid::PeerID& set_peer = *set_iter; + const peerid::PeerID& map_peer = map_iter->first; + if (set_peer < map_peer) { + ++set_iter; + } else if (map_peer < set_peer) { + ++map_iter; + } else { + secs[secs_size++] = map_iter->second; + ++set_iter; + ++map_iter; + } + } + secs.resize(secs_size); + // `secs` now contains a list of my timestamp and the timestamps of all + // peers in `remotes` that we've received a timestamp from. Get the median. + std::sort(secs.begin(), secs.end()); + return secs[secs.size()/2]; +} + +util::UnixSecs Clock::GetLocalTime() const { + return local_.load(); +} + +} // namespace svr2::groupclock diff --git a/enclave/groupclock/groupclock.h b/enclave/groupclock/groupclock.h new file mode 100644 index 0000000..edb635c --- /dev/null +++ b/enclave/groupclock/groupclock.h @@ -0,0 +1,37 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_GROUPCLOCK_GROUPCLOCK_H__ +#define __SVR2_GROUPCLOCK_GROUPCLOCK_H__ + +#include +#include +#include +#include "util/macros.h" +#include "util/mutex.h" +#include "util/ticks.h" +#include "peerid/peerid.h" +#include "context/context.h" + +namespace svr2::groupclock { + +// Clock that returns time based on times reported from a group of +// peers. The reported time will be the median of all reported times. +class Clock { + public: + DELETE_COPY_AND_ASSIGN(Clock); + Clock() : local_(0) {}; + void SetLocalTime(util::UnixSecs secs); + void SetRemoteTime(context::Context* ctx, const peerid::PeerID& peer, util::UnixSecs secs) EXCLUDES(mu_); + util::UnixSecs GetTime(context::Context* ctx, const std::set& remotes) const EXCLUDES(mu_); + util::UnixSecs GetLocalTime() const; + + private: + mutable util::mutex mu_; + std::atomic local_; + std::map remotes_ GUARDED_BY(mu_); +}; + +} // namespace svr2::groupclock + +#endif diff --git a/enclave/groupclock/tests/groupclock.cc b/enclave/groupclock/tests/groupclock.cc new file mode 100644 index 0000000..6b8246c --- /dev/null +++ b/enclave/groupclock/tests/groupclock.cc @@ -0,0 +1,55 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP peerid +//TESTDEP sip +//TESTDEP sender +//TESTDEP context +//TESTDEP env +//TESTDEP env/test +//TESTDEP util +//TESTDEP metrics +//TESTDEP proto +//TESTDEP protobuf-lite +//TESTDEP libsodium + +#include +#include "groupclock/groupclock.h" +#include "env/env.h" +#include "context/context.h" + +namespace svr2::groupclock { + +class ClockTest : public ::testing::Test { + protected: + static void SetUpTestCase() { + env::Init(); + } + context::Context ctx; +}; + +TEST_F(ClockTest, BasicUsage) { + Clock c; + EXPECT_EQ(0, c.GetTime(&ctx, std::set{})); + c.SetLocalTime(1000); + EXPECT_EQ(1000, c.GetTime(&ctx, std::set{})); + peerid::PeerID p1((uint8_t[32]){1}); + peerid::PeerID p2((uint8_t[32]){2}); + peerid::PeerID p3((uint8_t[32]){3}); + peerid::PeerID p4((uint8_t[32]){4}); + c.SetRemoteTime(&ctx, p1, 1001); + c.SetRemoteTime(&ctx, p2, 1002); + c.SetRemoteTime(&ctx, p3, 1003); + c.SetRemoteTime(&ctx, p4, 1004); + EXPECT_EQ(1001, c.GetTime(&ctx, std::set{p1})); + EXPECT_EQ(1001, c.GetTime(&ctx, std::set{p1, p2})); + EXPECT_EQ(1002, c.GetTime(&ctx, std::set{p1, p2, p3})); + EXPECT_EQ(1002, c.GetTime(&ctx, std::set{p1, p2, p3, p4})); + c.SetLocalTime(1005); + EXPECT_EQ(1003, c.GetTime(&ctx, std::set{p1, p2, p3, p4})); + c.SetRemoteTime(&ctx, p1, 1004); + EXPECT_EQ(1004, c.GetTime(&ctx, std::set{p1, p2, p3, p4})); +} + +} // namespace svr2::groupclock diff --git a/enclave/gtest/gtest-all.cc b/enclave/gtest/gtest-all.cc new file mode 120000 index 0000000..1d935ef --- /dev/null +++ b/enclave/gtest/gtest-all.cc @@ -0,0 +1 @@ +../googletest/googletest/src/gtest-all.cc \ No newline at end of file diff --git a/enclave/gtest/gtest_main.cc b/enclave/gtest/gtest_main.cc new file mode 120000 index 0000000..6ed8d70 --- /dev/null +++ b/enclave/gtest/gtest_main.cc @@ -0,0 +1 @@ +../googletest/googletest/src/gtest_main.cc \ No newline at end of file diff --git a/enclave/hmac/hmac.cc b/enclave/hmac/hmac.cc new file mode 100644 index 0000000..c89c519 --- /dev/null +++ b/enclave/hmac/hmac.cc @@ -0,0 +1,25 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "hmac/hmac.h" +#include +#include + +namespace svr2::hmac { + +std::array Sha256(const std::string& input) { + crypto_hash_sha256_state sha; + crypto_hash_sha256_init(&sha); + crypto_hash_sha256_update(&sha, reinterpret_cast(input.data()), input.size()); + std::array out; + crypto_hash_sha256_final(&sha, out.data()); + return out; +} + +std::array HmacSha256(const std::array& key, const std::string& input) { + std::array out; + crypto_auth_hmacsha256(out.data(), reinterpret_cast(input.data()), input.size(), key.data()); + return out; +} + +} // namespace svr2::hmac diff --git a/enclave/hmac/hmac.h b/enclave/hmac/hmac.h new file mode 100644 index 0000000..1b5c67e --- /dev/null +++ b/enclave/hmac/hmac.h @@ -0,0 +1,17 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_HMAC_HMAC_H__ +#define __SVR2_HMAC_HMAC_H__ + +#include +#include + +namespace svr2::hmac { + +std::array Sha256(const std::string& input); +std::array HmacSha256(const std::array& key, const std::string& input); + +} // namespace svr2::hmac + +#endif // __SVR2_HMAC_HMAC_H__ diff --git a/enclave/hmac/tests/hmac.cc b/enclave/hmac/tests/hmac.cc new file mode 100644 index 0000000..04561f8 --- /dev/null +++ b/enclave/hmac/tests/hmac.cc @@ -0,0 +1,44 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP hmac +//TESTDEP noise-c +//TESTDEP libsodium + +#include +#include + +#include + +#include "hmac/hmac.h" + +namespace svr2::hmac { + +class HmacTest : public ::testing::Test { +}; + +TEST_F(HmacTest, BasicUsage) { + std::array key = { + '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', + '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', + '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', + '1', '2'}; + std::array out = HmacSha256(key, "abc"); + + // Python3: + // >>> import base64 + // >>> import hmac + // >>> import hashlib + // >>> base64.b16encode(hmac.digest(b'12345678901234567890123456789012', b'abc', hashlib.sha256)) + // b'26B7F4C64769835D3F654DC635D5362988C270883270E1EFD65372B5F3100BAF' + std::array expected = { + 0x26, 0xB7, 0xF4, 0xC6, 0x47, 0x69, 0x83, 0x5D, + 0x3F, 0x65, 0x4D, 0xC6, 0x35, 0xD5, 0x36, 0x29, + 0x88, 0xC2, 0x70, 0x88, 0x32, 0x70, 0xE1, 0xEF, + 0xD6, 0x53, 0x72, 0xB5, 0xF3, 0x10, 0x0B, 0xAF, + }; + EXPECT_EQ(out, expected); +} + +} // namespace svr2::hmac diff --git a/enclave/libsodium b/enclave/libsodium new file mode 160000 index 0000000..fd5cbe9 --- /dev/null +++ b/enclave/libsodium @@ -0,0 +1 @@ +Subproject commit fd5cbe9e696c1b886e45f3111dd099d51b12de6e diff --git a/enclave/metrics/counters.h b/enclave/metrics/counters.h new file mode 100644 index 0000000..a7f6c6f --- /dev/null +++ b/enclave/metrics/counters.h @@ -0,0 +1,114 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +// This file contains all counter metrics used within SVR2. +// +// They're created with the macro CREATE_COUNTER, which takes arguments: +// * ns - namespace of the counter (generally, module name) +// * varname - name of the variable used to reference this counter, must be +// unique within the namespace (ns) +// * name - name of the exported variable (actually, "ns.name") +// * tags - set of tags associated with this variable, either empty `({})`, or +// an initializer list `({{"foo", "bar"}, {"baz", "blah"}})` for tags +// foo=bar, baz=blah. Must be wrapped in parens. +// +// Once these counters are created here, they're used with the incantation: +// COUNTER(ns, varname)->CounterFunction(); +// IE: +// COUNTER(sender, enclave_messages_sent)->IncrementBy(3); +// +// All counters created here will be exported to the host, even if they are +// zero. This differs from error counts, which are exported only if non-zero. + +CREATE_COUNTER(ecalls, host_messages_received, host_messages_received, ({})) +CREATE_COUNTER(ecalls, host_bytes_received, host_bytes_received, ({})) +CREATE_COUNTER(ecalls, init_calls, init_calls, ({})) + +CREATE_COUNTER(sender, enclave_messages_sent, enclave_messages_sent, ({})) +CREATE_COUNTER(sender, enclave_bytes_sent, enclave_bytes_sent, ({})) + +CREATE_COUNTER(core, host_requests_received, msgs_received, ({{"type", "host_request"}})) +CREATE_COUNTER(core, peer_msgs_received, msgs_received, ({{"type", "peer_message"}})) +CREATE_COUNTER(core, timer_ticks_received, msgs_received, ({{"type", "timer_tick"}})) +CREATE_COUNTER(core, invalid_msgs_received, msgs_received, ({{"type", "invalid"}})) +CREATE_COUNTER(core, new_client_success, new_clients, ({{"outcome", "success"}})) +CREATE_COUNTER(core, new_client_failure, new_clients, ({{"outcome", "failure"}})) +CREATE_COUNTER(core, log_transactions_success, log_transactions, ({{"outcome", "success"}})) +CREATE_COUNTER(core, log_transactions_cancelled, log_transactions, ({{"outcome", "cancelled"}})) +CREATE_COUNTER(core, host_delete_success, host_delete, ({{"outcome", "success"}})) +CREATE_COUNTER(core, host_delete_failure, host_delete, ({{"outcome", "failure"}})) +CREATE_COUNTER(core, client_transaction_success, client_transaction, ({{"outcome", "success"}})) +CREATE_COUNTER(core, client_transaction_cancelled, client_transaction, ({{"outcome", "cancelled"}})) +CREATE_COUNTER(core, client_transaction_error, client_transaction, ({{"outcome", "error"}})) +CREATE_COUNTER(core, client_transaction_invalid, client_transaction, ({{"outcome", "invalid"}})) +CREATE_COUNTER(core, client_transaction_dne, client_transaction, ({{"outcome", "dne"}})) +CREATE_COUNTER(core, client_transaction_encrypterr, client_transaction, ({{"outcome", "encrypterr"}})) +CREATE_COUNTER(core, raft_log_applied, raft_log_applied, ({})) + +CREATE_COUNTER(client, created, created, ({})) +CREATE_COUNTER(client, closed, closed, ({})) +CREATE_COUNTER(client, new_dh_state, new_dh_state, ({})) +CREATE_COUNTER(client, key_rotate_success, key_rotate, ({{"outcome", "success"}})) +CREATE_COUNTER(client, key_rotate_failure, key_rotate, ({{"outcome", "failure"}})) +CREATE_COUNTER(client, attestation_refresh_success, attestation_refresh, ({{"outcome", "success"}})) +CREATE_COUNTER(client, attestation_refresh_failure, attestation_refresh, ({{"outcome", "failure"}})) + +CREATE_COUNTER(peers, attestation_refresh_success, attestation_refresh, ({{"outcome", "success"}})) +CREATE_COUNTER(peers, attestation_refresh_failure, attestation_refresh, ({{"outcome", "failure"}})) + +CREATE_COUNTER(raft, logs_committed, logs_committed, ({})) +CREATE_COUNTER(raft, logs_promised, logs_promised, ({})) +CREATE_COUNTER(raft, vote_requests_received, msgs_received, ({{"type", "vote_request"}})) +CREATE_COUNTER(raft, vote_responses_received, msgs_received, ({{"type", "vote_response"}})) +CREATE_COUNTER(raft, append_requests_received, msgs_received, ({{"type", "append_request"}})) +CREATE_COUNTER(raft, append_responses_received, msgs_received, ({{"type", "append_response"}})) +CREATE_COUNTER(raft, timeout_nows_received, msgs_received, ({{"type", "timeout_now"}})) +CREATE_COUNTER(raft, invalid_requests_received, msgs_received, ({{"type", "invalid"}})) +CREATE_COUNTER(raft, term_updated, term_updated, ({})) +CREATE_COUNTER(raft, term_increments, term_increments, ({})) +CREATE_COUNTER(raft, logs_append_success, logs_appended, ({{"outcome", "success"}})) +CREATE_COUNTER(raft, logs_append_failure, logs_appended, ({{"outcome", "failure"}})) +CREATE_COUNTER(raft, election_timeouts, election_timeouts, ({})) + +CREATE_COUNTER(timeout, timeouts_created, timeouts_created, ({})) +CREATE_COUNTER(timeout, timeouts_run, timeouts_completed, ({{"outcome", "run"}})) +CREATE_COUNTER(timeout, timeouts_cancelled, timeouts_completed, ({{"outcome", "cancelled"}})) + +CREATE_COUNTER(context, cpu_uncategorized, cpu, ({{"in", "uncategorized"}, {"action", "uncategorized"}})) +CREATE_COUNTER(context, cpu_client_encrypt, cpu, ({{"in", "client"}, {"action", "encrypt"}})) +CREATE_COUNTER(context, cpu_client_decrypt, cpu, ({{"in", "client"}, {"action", "decrypt"}})) +CREATE_COUNTER(context, cpu_client_hs_start, cpu, ({{"in", "client"}, {"action", "hs_start"}})) +CREATE_COUNTER(context, cpu_client_hs_finish, cpu, ({{"in", "client"}, {"action", "hs_finish"}})) +CREATE_COUNTER(context, cpu_peer_encrypt, cpu, ({{"in", "peer"}, {"action", "encrypt"}})) +CREATE_COUNTER(context, cpu_peer_decrypt, cpu, ({{"in", "peer"}, {"action", "decrypt"}})) +CREATE_COUNTER(context, cpu_peer_connect, cpu, ({{"in", "peer"}, {"action", "connect"}})) +CREATE_COUNTER(context, cpu_peer_connect2, cpu, ({{"in", "peer"}, {"action", "connect2"}})) +CREATE_COUNTER(context, cpu_peer_accept, cpu, ({{"in", "peer"}, {"action", "accept"}})) +CREATE_COUNTER(context, cpu_db_client_request, cpu, ({{"in", "db"}, {"action", "client_request"}})) +CREATE_COUNTER(context, cpu_db_repl_send, cpu, ({{"in", "db"}, {"action", "repl_send"}})) +CREATE_COUNTER(context, cpu_db_repl_recv, cpu, ({{"in", "db"}, {"action", "repl_recv"}})) +CREATE_COUNTER(context, cpu_db_hash, cpu, ({{"in", "db"}, {"action", "hash"}})) +CREATE_COUNTER(context, cpu_core_client_msg, cpu, ({{"in", "core"}, {"action", "client_msg"}})) +CREATE_COUNTER(context, cpu_core_peer_msg, cpu, ({{"in", "core"}, {"action", "peer_msg"}})) +CREATE_COUNTER(context, cpu_core_host_msg, cpu, ({{"in", "core"}, {"action", "host_msg"}})) +CREATE_COUNTER(context, cpu_core_raft_msg, cpu, ({{"in", "core"}, {"action", "raft_msg"}})) +CREATE_COUNTER(context, cpu_core_e2e_txn_req, cpu, ({{"in", "core"}, {"action", "e2e_txn_req"}})) +CREATE_COUNTER(context, cpu_core_e2e_txn_resp, cpu, ({{"in", "core"}, {"action", "e2e_txn_resp"}})) +CREATE_COUNTER(context, cpu_core_repl_send, cpu, ({{"in", "core"}, {"action", "repl_send"}})) +CREATE_COUNTER(context, cpu_core_repl_recv, cpu, ({{"in", "core"}, {"action", "repl_recv"}})) +CREATE_COUNTER(context, cpu_core_committed_logs, cpu, ({{"in", "core"}, {"action", "committed_logs"}})) +CREATE_COUNTER(context, cpu_core_timer_tick, cpu, ({{"in", "core"}, {"action", "timer_tick"}})) +CREATE_COUNTER(context, cpu_test_database_entries, cpu, ({{"in", "core"}, {"action", "test_database_entries"}})) +CREATE_COUNTER(context, lock_core_raft, cpu, ({{"in", "core"}, {"action", "lock"}, {"lock", "core_raft"}})) +CREATE_COUNTER(context, lock_core_log_txns, cpu, ({{"in", "core"}, {"action", "lock"}, {"lock", "core_log_txns"}})) +CREATE_COUNTER(context, lock_core_e2e_txns, cpu, ({{"in", "core"}, {"action", "lock"}, {"lock", "core_e2e_txns"}})) +CREATE_COUNTER(context, lock_core_config, cpu, ({{"in", "core"}, {"action", "lock"}, {"lock", "core_config"}})) +CREATE_COUNTER(context, lock_groupclock, cpu, ({{"in", "groupclock"}, {"action", "lock"}, {"lock", "groupclock"}})) +CREATE_COUNTER(context, lock_timeout, cpu, ({{"in", "timeout"}, {"action", "lock"}, {"lock", "timeout"}})) +CREATE_COUNTER(context, lock_peermanager, cpu, ({{"in", "peer"}, {"action", "lock"}, {"lock", "peermanager"}})) +CREATE_COUNTER(context, lock_peer, cpu, ({{"in", "peer"}, {"action", "lock"}, {"lock", "peer"}})) +CREATE_COUNTER(context, lock_clientmanager, cpu, ({{"in", "client"}, {"action", "lock"}, {"lock", "clientmanager"}})) +CREATE_COUNTER(context, lock_client, cpu, ({{"in", "client"}, {"action", "lock"}, {"lock", "client"}})) +CREATE_COUNTER(context, lock_test, cpu, ({{"in", "test"}})) +CREATE_COUNTER(context, lock_socket_read, socket, ({{"in", "socket"}, {"action", "lock"}, {"lock", "read"}})) +CREATE_COUNTER(context, lock_socket_write, socket, ({{"in", "socket"}, {"action", "lock"}, {"lock", "write"}})) diff --git a/enclave/metrics/gauges.h b/enclave/metrics/gauges.h new file mode 100644 index 0000000..e1cfb6e --- /dev/null +++ b/enclave/metrics/gauges.h @@ -0,0 +1,51 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +// This file contains all gauge metrics used within SVR2. +// +// They're created with the macro CREATE_GAUGE, which takes arguments: +// * ns - namespace of the gauge (generally, module name) +// * varname - name of the variable used to reference this gauge, must be +// unique within the namespace (ns). Also the exported name. +// +// Once these gauges are created here, they're used with the incantation: +// GAUGE(ns, varname)->GaugeFunction(); +// IE: +// GAUGE(sender, enclave_messages_sent)->Set(12); +// +// Gauges are only exported after their first Set call, to avoid sending up +// spurious invalid values to metrics. If Clear is called, they will no longer +// be exported. + +CREATE_GAUGE(raft, role) +CREATE_GAUGE(raft, is_voting) +CREATE_GAUGE(raft, current_term) +CREATE_GAUGE(raft, commit_index) +CREATE_GAUGE(raft, promise_index) +CREATE_GAUGE(raft, log_oldest_stored_log_index) +CREATE_GAUGE(raft, log_last_log_term) +CREATE_GAUGE(raft, log_last_log_index) +CREATE_GAUGE(raft, log_size) +CREATE_GAUGE(raft, log_total_size) +CREATE_GAUGE(raft, log_entries) + +CREATE_GAUGE(core, raft_state) +CREATE_GAUGE(core, last_index_applied_to_db) +CREATE_GAUGE(core, current_local_time) +CREATE_GAUGE(core, current_groupclock_time) + + +CREATE_GAUGE(peers, peers) + +CREATE_GAUGE(client, clients) + +CREATE_GAUGE(db, rows) + +CREATE_GAUGE(timeout, timeouts) + +CREATE_GAUGE(test, test1) +CREATE_GAUGE(test, test2) + +CREATE_GAUGE(env, total_heap_size) +CREATE_GAUGE(env, allocated_heap_size) +CREATE_GAUGE(env, peak_heap_size) diff --git a/enclave/metrics/metrics.cc b/enclave/metrics/metrics.cc new file mode 100644 index 0000000..745bb2d --- /dev/null +++ b/enclave/metrics/metrics.cc @@ -0,0 +1,100 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "metrics/metrics.h" + +namespace svr2::metrics { + +namespace { +static std::atomic recorded_errors[error::Error_ARRAYSIZE] = {0}; +} // namespace + +MetricsPB AllAsPB() { + MetricsPB out; + for (int i = 0; i < error::Error_ARRAYSIZE; i++) { + if (error::Error_IsValid(i)) { + uint64_t v = recorded_errors[i].load(); + if (v > 0) { + U64PB* counter = out.add_counters(); + counter->set_name("errors"); + (*counter->mutable_tags())["error"] = error::Error_Name(i); + counter->set_v(v); + } + } + } + for (int i = 0; i < COUNTERS_ARRAY_SIZE; i++) { + internal::counters[i].AddToMetrics(&out); + } + for (int i = 0; i < GAUGES_ARRAY_SIZE; i++) { + internal::gauges[i].AddToMetrics(&out); + } + return out; +} + +void ClearAllForTest() { + for (int i = 0; i < error::Error_ARRAYSIZE; i++) { + recorded_errors[i].store(0); + } + for (int i = 0; i < COUNTERS_ARRAY_SIZE; i++) { + internal::counters[i].Clear(); + } +} + +Counter::Counter(const std::string& name, std::map&& tags) + : name_(name), tags_(tags) {} + +void Counter::IncrementBy(uint64_t v) { + v_.fetch_add(v); +} + +void Counter::AddToMetrics(MetricsPB* pb) { + auto c = pb->add_counters(); + c->set_name(name_); + c->set_v(v_.load()); + for (auto iter = tags_.cbegin(); iter != tags_.cend(); ++iter) { + (*c->mutable_tags())[iter->first] = iter->second; + } +} + +void Counter::Clear() { + v_.store(0); +} + +Gauge::Gauge(const std::string& name) + : v_(UINT64_MAX), name_(name) {} + +void Gauge::Set(uint64_t v) { + v_.store(v); +} + +void Gauge::AddToMetrics(MetricsPB* pb) { + uint64_t v = v_.load(); + if (v == UINT64_MAX) { return; } + auto c = pb->add_gauges(); + c->set_name(name_); + c->set_v(v); +} + +void Gauge::Clear() { + v_.store(UINT64_MAX); +} + +namespace internal { +error::Error RecordError(error::Error e) { + recorded_errors[e].fetch_add(1); + return e; +} + +Counter counters[COUNTERS_ARRAY_SIZE] = { +#define CREATE_COUNTER(ns, varname, name, tags) Counter(#ns "." #name, std::maptags), +#include "counters.h" +#undef CREATE_COUNTER +}; +Gauge gauges[GAUGES_ARRAY_SIZE] = { +#define CREATE_GAUGE(ns, name) Gauge(#ns "." #name), +#include "gauges.h" +#undef CREATE_GAUGE +}; +} // namespace internal + +} // namespace svr2::metrics diff --git a/enclave/metrics/metrics.h b/enclave/metrics/metrics.h new file mode 100644 index 0000000..a11affd --- /dev/null +++ b/enclave/metrics/metrics.h @@ -0,0 +1,92 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_METRICS_METRICS_H__ +#define __SVR2_METRICS_METRICS_H__ + +#include +#include + +#include "proto/metrics.pb.h" +#include "proto/error.pb.h" + +namespace svr2::metrics { + +// Export all global metrics as a single protobuf. +MetricsPB AllAsPB(); + +// Return all global metrics to an initial state. For testing only. +void ClearAllForTest(); + +// A counter provides a simple, atomic counter object that monotonically increases. +// We do not protect against overflows, but given that this is a 64-bit value, they +// would be pretty impressive. +class Counter { + public: + Counter(const std::string& name, std::map&& tags); + void IncrementBy(uint64_t v); + inline void Increment() { IncrementBy(1); } + private: + friend MetricsPB AllAsPB(); + friend void ClearAllForTest(); + void AddToMetrics(MetricsPB* pb); + void Clear(); + std::atomic v_; + const std::string name_; + const std::map tags_; +}; + +// A gauge provides a simple, atomic gauge object that can be set to arbitrary +// values. We save UINT64_MAX as a special invalid value. +class Gauge { + public: + Gauge(const std::string& name); + void Set(uint64_t v); + void Clear(); + private: + friend MetricsPB AllAsPB(); + friend void ClearAllForTest(); + void AddToMetrics(MetricsPB* pb); + std::atomic v_; + const std::string name_; +}; + +// We use the somewhat tricky counters.h/gauges.h file to generate a set of metricss +// that are both accessible to the rest of the code and iterable by this code. +// In short, we use a CREATE_COUNTER/CREATE_GAUGE macros, which we define/include/undef, +// both here and in metrics.cc, to generate the header and source parts of the metrics. +enum Counters { +#define CREATE_COUNTER(ns, varname, name, tags) CTR__##ns##__##varname, +#include "counters.h" +#undef CREATE_COUNTER + COUNTERS_ARRAY_SIZE, +}; +enum Gauges { +#define CREATE_GAUGE(ns, name) GAG__##ns##__##name, +#include "gauges.h" +#undef CREATE_GAUGE + GAUGES_ARRAY_SIZE, +}; + +namespace internal { +error::Error RecordError(error::Error); +extern Counter counters[COUNTERS_ARRAY_SIZE]; +extern Gauge gauges[GAUGES_ARRAY_SIZE]; +} // namespace internal + +} // namespace svr2::metrics + +// COUNTER(ns, name) returns a pointer to a metrics::Counter based on the +// counter namespace/name as created in counters.h. +#define COUNTER(ns, name) (&::svr2::metrics::internal::counters[::svr2::metrics::CTR__##ns##__##name]) + +// GAUGE(ns, name) returns a pointer to a metrics::Gauge based on the +// gauge namespace/name as created in gauges.h. +#define GAUGE(ns, name) (&::svr2::metrics::internal::gauges[::svr2::metrics::GAG__##ns##__##name]) + +// COUNTED_ERROR counts an error within metrics, returning that same error. +// It's generally used like: +// return COUNTED_ERROR(Foo_Bar); +#define COUNTED_ERROR(x) ::svr2::metrics::internal::RecordError(error::x) + +#endif // __SVR2_METRICS_METRICS_H__ diff --git a/enclave/metrics/tests/metrics.cc b/enclave/metrics/tests/metrics.cc new file mode 100644 index 0000000..9c24278 --- /dev/null +++ b/enclave/metrics/tests/metrics.cc @@ -0,0 +1,122 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP metrics +//TESTDEP proto +//TESTDEP protobuf-lite + +#include +#include "proto/error.pb.h" +#include "metrics/metrics.h" + +namespace svr2::metrics { + +class MetricsTest : public ::testing::Test { + protected: + void SetUp() { + ClearAllForTest(); + } + + const int FindCounter(const MetricsPB& pb, const std::string& name, const std::map& tags) { + for (int i = 0; i < pb.counters_size(); i++) { + auto c = pb.counters(i); + if (name != c.name() || tags.size() != c.tags().size()) { + continue; + } + bool tags_equal = true; + for (auto iter = tags.cbegin(); iter != tags.cend() && tags_equal; ++iter) { + if (c.tags().count(iter->first) == 0 || + c.tags().at(iter->first) != iter->second) { + tags_equal = false; + break; + } + } + if (!tags_equal) { continue; } + return i; + } + return -1; + } + const int FindGauge(const MetricsPB& pb, const std::string& name) { + for (int i = 0; i < pb.gauges_size(); i++) { + auto c = pb.gauges(i); + if (name == c.name()) { return i; } + } + return -1; + } +}; + +error::Error ReturnsGeneralUnimplemented() { + return COUNTED_ERROR(General_Unimplemented); +} + +error::Error ReturnsCoreReInit() { + return COUNTED_ERROR(Core_ReInit); +} + +TEST_F(MetricsTest, CountsReturnedErrors) { + for (int i = 0; i < 3; i++) { + ReturnsGeneralUnimplemented(); + } + MetricsPB got = AllAsPB(); + ASSERT_EQ(got.counters_size(), 1 + COUNTERS_ARRAY_SIZE); + auto c = got.counters(0); + ASSERT_EQ(c.v(), 3); + ASSERT_EQ(c.tags().at("error"), "General_Unimplemented"); + for (int i = 0; i < 5; i++) { + ReturnsCoreReInit(); + } + got = AllAsPB(); + ASSERT_EQ(got.counters_size(), 2 + COUNTERS_ARRAY_SIZE); + c = got.counters(0); + ASSERT_EQ(c.v(), 3); + ASSERT_EQ(c.tags().at("error"), "General_Unimplemented"); + c = got.counters(1); + ASSERT_EQ(c.v(), 5); + ASSERT_EQ(c.tags().at("error"), "Core_ReInit"); +} + +TEST_F(MetricsTest, Counters) { + COUNTER(core, peer_msgs_received)->Increment(); + COUNTER(core, peer_msgs_received)->Increment(); + COUNTER(core, peer_msgs_received)->Increment(); + MetricsPB got = AllAsPB(); + int i = FindCounter(got, "core.msgs_received", {{"type", "peer_message"}}); + ASSERT_GE(i, 0); + auto c = got.counters(i); + ASSERT_EQ(c.name(), "core.msgs_received"); + ASSERT_EQ(c.tags().size(), 1); + ASSERT_EQ(c.tags().at("type"), "peer_message"); + ASSERT_EQ(c.v(), 3); +} + +TEST_F(MetricsTest, Gauges) { + MetricsPB got = AllAsPB(); + ASSERT_EQ(got.gauges_size(), 0); + GAUGE(test, test1)->Set(123); + got = AllAsPB(); + ASSERT_EQ(got.gauges_size(), 1); + EXPECT_EQ(got.gauges(0).name(), "test.test1"); + EXPECT_EQ(got.gauges(0).v(), 123); + GAUGE(test, test2)->Set(234); + GAUGE(test, test1)->Set(345); + got = AllAsPB(); + ASSERT_EQ(got.gauges_size(), 2); + int t1 = FindGauge(got, "test.test1"); + int t2 = FindGauge(got, "test.test2"); + ASSERT_GE(t1, 0); + ASSERT_GE(t2, 0); + auto g1 = got.gauges(t1); + auto g2 = got.gauges(t2); + EXPECT_EQ(g1.name(), "test.test1"); + EXPECT_EQ(g1.v(), 345); + EXPECT_EQ(g2.name(), "test.test2"); + EXPECT_EQ(g2.v(), 234); + GAUGE(test, test1)->Clear(); + got = AllAsPB(); + ASSERT_EQ(got.gauges_size(), 1); + EXPECT_EQ(got.gauges(0).name(), "test.test2"); + EXPECT_EQ(got.gauges(0).v(), 234); +} + +} // namespace svr2::metrics diff --git a/enclave/nitromain/nitromain.cc b/enclave/nitromain/nitromain.cc new file mode 100644 index 0000000..2424446 --- /dev/null +++ b/enclave/nitromain/nitromain.cc @@ -0,0 +1,144 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include +#include +#include +#include +#include + +#include "env/env.h" +#include "core/core.h" +#include "context/context.h" +#include "proto/enclaveconfig.pb.h" +#include "util/log.h" +#include "util/bytes.h" +#include "proto/nitro.pb.h" +#include "socketwrap/socket.h" +#include "env/nsm/nsm.h" +#include "queue/queue.h" + +namespace svr2 { + +#define RETURN_ERRNO_ERROR_IF(x, err) do { \ + if ((x)) { \ + int e = errno; \ + LOG(ERROR) << "(" << #x << ") evaluated to false, errno(" << e << "): " << strerror(e); \ + return COUNTED_ERROR(err); \ + } \ +} while (0) + +// To simplify our server, this function creates the appropriate +// AF_VSOCK, binds it, listens, accepts, then returns the accepted +// file descriptor, closing the listener. We know that if this +// socket dies, we stop serving, so there's no need to create an +// accept loop. +error::Error AcceptSocket(int* afd) { + int fd; + RETURN_ERRNO_ERROR_IF( + 0 >= (fd = socket(AF_VSOCK, SOCK_STREAM, 0)), + Nitro_SocketCreation); + + struct sockaddr_vm my_addr; + memset(&my_addr, 0, sizeof(my_addr)); + my_addr.svm_family = AF_VSOCK; + my_addr.svm_port = VMADDR_PORT_ANY; + my_addr.svm_cid = VMADDR_CID_ANY; + RETURN_ERRNO_ERROR_IF( + 0 != bind(fd, (struct sockaddr *) &my_addr, sizeof(my_addr)), + Nitro_SocketBind); + RETURN_ERRNO_ERROR_IF( + 0 != listen(fd, 2), + Nitro_SocketListen); + + *afd = 0; + while (*afd <= 0) { + struct sockaddr_vm remote_addr; + socklen_t remote_len = sizeof(remote_addr); + *afd = accept4(fd, reinterpret_cast(&remote_addr), &remote_len, SOCK_CLOEXEC); + RETURN_ERRNO_ERROR_IF( + *afd <= 0 && errno != EINTR && errno != ECONNABORTED, + Nitro_SocketAccept); + } + shutdown(fd, SHUT_RDWR); + close(fd); + return error::OK; +} + +error::Error RunServerThread(core::Core* core, socketwrap::Socket* sock) { + while (true) { + context::Context ctx; + auto in = ctx.Protobuf(); + RETURN_IF_ERROR(sock->ReadPB(&ctx, in)); + if (in->inner_case() != nitro::InboundMessage::kMsg) { + return COUNTED_ERROR(Nitro_InboundNotMessage); + } + auto msg = ctx.Protobuf(); + if (!msg->ParseFromString(in->mutable_msg()->data())) { + return COUNTED_ERROR(Nitro_InboundMessageParse); + } + auto status = core->Receive(&ctx, *msg); + auto out = ctx.Protobuf(); + auto out_msg = out->mutable_msg(); + out_msg->set_id(in->msg().id()); + out_msg->set_status(status); + RETURN_IF_ERROR(sock->WritePB(&ctx, *out)); + } +} + +// Read an init message from a socket and use it to create a new core object. +std::pair, error::Error> InitCore(socketwrap::Socket* sock) { + context::Context ctx; + auto init = ctx.Protobuf(); + if (error::Error err = sock->ReadPB(&ctx, init); err != error::OK) { + return std::make_pair(nullptr, err); + } + if (init->inner_case() != nitro::InboundMessage::kInit) { + return std::make_pair(nullptr, COUNTED_ERROR(Nitro_InboundNotInit)); + } + auto [core_ptr, err] = core::Core::Create( + &ctx, + init->init()); + if (err == error::OK) { + auto out = ctx.Protobuf(); + core_ptr->ID().ToString(out->mutable_init()->mutable_peer_id()); + err = sock->WritePB(&ctx, *out); + } + return std::make_pair(std::move(core_ptr), err); +} + +// Run a server, returning an error when it dies. +error::Error RunServer() { + int fd; + RETURN_IF_ERROR(AcceptSocket(&fd)); + socketwrap::Socket sock(fd); + auto sockp = &sock; + std::vector threads; + threads.emplace_back([sockp]{ + LOG(FATAL) << env::nsm::SendNsmMessages(sockp); + }); + auto [c, err] = InitCore(&sock); + RETURN_IF_ERROR(err); + auto cp = c.get(); + for (size_t i = 0; i < 32 /* chosen by random dice roll */; i++) { + threads.emplace_back([cp, sockp]{ + LOG(FATAL) << RunServerThread(cp, sockp); + }); + } + for (size_t i = 0; i < threads.size(); i++) { + threads[i].join(); + } + return error::OK; // unreachable +} + +error::Error Run() { + env::Init(); + return RunServer(); +} + +} // namespace svr2 + +int main(int argc, char** argv) { + LOG(FATAL) << svr2::Run(); + return -1; +} diff --git a/enclave/noise-c b/enclave/noise-c new file mode 160000 index 0000000..3541938 --- /dev/null +++ b/enclave/noise-c @@ -0,0 +1 @@ +Subproject commit 354193847d04475e474a89dbb11b6434e1d9cbca diff --git a/enclave/noise/noise.cc b/enclave/noise/noise.cc new file mode 100644 index 0000000..0290f76 --- /dev/null +++ b/enclave/noise/noise.cc @@ -0,0 +1,73 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "noise/noise.h" +#include +#include "util/log.h" +#include "metrics/metrics.h" + +namespace svr2::noise { + +static size_t max_message_size = 65535; + +std::pair Encrypt(NoiseCipherState* cs, const std::string& plaintext) { + std::string ciphertext; + size_t mac_size = noise_cipherstate_get_mac_length(cs); + size_t max_encrypt_size = max_message_size - mac_size; + size_t orig_size = plaintext.size(); + // We need to fit our plaintext into some number of Noise output packets. + // Each of those packets cannot be larger than max_message_size, and must + // contain some amount of ciphertext along with Noise's added MAC. + // Thus, we have to add some amount of size equivilent to a multiple of + // mac_size to the size of plaintext to get the final size of *ciphertext. + // Examples of input sizes and output sizes, around the max_message_size + // boundary, are: + // size == 1 : add mac_size * 1 -> [cleartext(1B)][mac] + // size == max_message_size - mac_size : add mac_size * 1 -> [cleartext(max_msg_sizeB)][mac] + // size == max_message_size - mac_size + 1 : add mac_size * 2 -> [cleartext(max_msg_sizeB)][mac1][cleartext(1B)][mac2] + size_t num_macs = orig_size / max_encrypt_size + 1; + if (orig_size % max_encrypt_size == 0 && num_macs > 1) num_macs--; + size_t macs_size = mac_size * num_macs; + size_t final_size = orig_size + macs_size; + ciphertext.resize(final_size, 0); + size_t plaintext_start = 0; + for (size_t start = 0; start < final_size; start += max_message_size) { + size_t plaintext_size = std::min(max_encrypt_size, plaintext.size() - plaintext_start); + memcpy(StrU8Ptr(&ciphertext) + start, StrU8Ptr(plaintext) + plaintext_start, plaintext_size); + plaintext_start += plaintext_size; + NoiseBuffer buf; + noise_buffer_set_inout(buf, StrU8Ptr(&ciphertext) + start, plaintext_size, plaintext_size + mac_size); + if (NOISE_ERROR_NONE != noise_cipherstate_encrypt(cs, &buf)) { + return std::make_pair("", COUNTED_ERROR(Peers_Encrypt)); + } + } + return std::make_pair(ciphertext, error::OK); +} + +std::pair Decrypt(NoiseCipherState* cs, const std::string& ciphertext) { + std::string plaintext(ciphertext.size(), 0); + size_t plaintext_start = 0; + // Data comes in as [ciphertext][mac][ciphertext][mac]. + for (size_t start = 0; start < ciphertext.size(); start += max_message_size) { + size_t size = std::min(max_message_size, ciphertext.size() - start); + memcpy(StrU8Ptr(&plaintext) + plaintext_start, StrU8Ptr(ciphertext) + start, size); + NoiseBuffer buf; + noise_buffer_set_inout(buf, StrU8Ptr(&plaintext) + plaintext_start, size, size); + if (NOISE_ERROR_NONE != noise_cipherstate_decrypt(cs, &buf)) { + return std::make_pair("", COUNTED_ERROR(Peers_Decrypt)); + } + plaintext_start += buf.size; + } + plaintext.resize(plaintext_start, 0); + return std::make_pair(plaintext, error::OK); +} + +DHState CloneDHState(const DHState& s) { + NoiseDHState* sp = nullptr; + auto dh_id = noise_dhstate_get_dh_id(s.get()); + CHECK(NOISE_ERROR_NONE == noise_dhstate_new_by_id(&sp, dh_id)); + CHECK(NOISE_ERROR_NONE == noise_dhstate_copy(sp, s.get())); + return WrapDHState(sp); +} + +} // namespace svr2::noise diff --git a/enclave/noise/noise.h b/enclave/noise/noise.h new file mode 100644 index 0000000..c4a43c4 --- /dev/null +++ b/enclave/noise/noise.h @@ -0,0 +1,76 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_NOISE_NOISE_H__ +#define __SVR2_NOISE_NOISE_H__ + +#include +#include +#include +#include +#include +#include +#include "proto/error.pb.h" + +// This module provides simple RAII wrappers around noise-c pointers. +// The pointers are exposed publicly as .state, allowing use of noise_* functions +// directly on them, but with the guarantee that when the *State objects fall +// out of scope, the correct noise_*_free function will be called on them. + +#include "util/macros.h" + +namespace svr2::noise { + +const size_t HANDSHAKE_INIT_SIZE = 64; + +inline uint8_t* StrU8Ptr(std::string* s) { + return reinterpret_cast(s->data()); +} +inline const uint8_t* StrU8Ptr(const std::string& s) { + return reinterpret_cast(s.data()); +} + +inline NoiseBuffer BufferOutputFromString(std::string* s) { + NoiseBuffer b; + noise_buffer_set_output(b, StrU8Ptr(s), s->size()); + return b; +} + +inline NoiseBuffer BufferInputFromString(std::string* s) { + NoiseBuffer b; + noise_buffer_set_input(b, StrU8Ptr(s), s->size()); + return b; +} + +inline NoiseBuffer BufferInoutFromString(std::string* s, size_t substr) { + CHECK(substr <= s->size()); + NoiseBuffer b; + noise_buffer_set_inout(b, StrU8Ptr(s), substr, s->size()); + return b; +} + +typedef std::unique_ptr HandshakeState; +inline HandshakeState WrapHandshakeState(NoiseHandshakeState* s) { + return HandshakeState(s, noise_handshakestate_free); +} + +typedef std::unique_ptr DHState; +inline DHState WrapDHState(NoiseDHState* s) { + return DHState(s, noise_dhstate_free); +} + +DHState CloneDHState(const DHState& s); + +typedef std::unique_ptr CipherState; +inline CipherState WrapCipherState(NoiseCipherState* s) { + return CipherState(s, noise_cipherstate_free); +} + +// Encrypt the given string. +std::pair Encrypt(NoiseCipherState* cs, const std::string& plaintext); +// Decrypt the given string. +std::pair Decrypt(NoiseCipherState* cs, const std::string& ciphertext); + +} // namespace svr2::noise + +#endif // __SVR2_NOISE_NOISE_H__ diff --git a/enclave/noise/tests/encrypt_decrypt.cc b/enclave/noise/tests/encrypt_decrypt.cc new file mode 100644 index 0000000..95524de --- /dev/null +++ b/enclave/noise/tests/encrypt_decrypt.cc @@ -0,0 +1,100 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP noise +//TESTDEP noise-c +//TESTDEP noisewrap +//TESTDEP env +//TESTDEP util +//TESTDEP env/test +//TESTDEP env +//TESTDEP metrics +//TESTDEP proto +//TESTDEP protobuf-lite +//TESTDEP libsodium + +#include +#include +#include "noise/noise.h" +#include "env/env.h" +#include "util/log.h" +#include "proto/error.pb.h" +#include "util/cpu.h" + +namespace svr2::noise { + +class CipherStateTest : public ::testing::Test { + protected: + static void SetUpTestCase() { + env::Init(); + } + + void EncryptDecrypt(const std::string& plaintext, std::string* ciphertext_out, int type) { + std::array key = {1}; + NoiseCipherState* s1n; + NoiseCipherState* s2n; + ASSERT_EQ(NOISE_ERROR_NONE, noise_cipherstate_new_by_id(&s1n, type)); + ASSERT_EQ(NOISE_ERROR_NONE, noise_cipherstate_init_key(s1n, key.data(), key.size())); + ASSERT_EQ(NOISE_ERROR_NONE, noise_cipherstate_new_by_id(&s2n, type)); + ASSERT_EQ(NOISE_ERROR_NONE, noise_cipherstate_init_key(s2n, key.data(), key.size())); + noise::CipherState s1 = noise::WrapCipherState(s1n); + noise::CipherState s2 = noise::WrapCipherState(s2n); + auto [ciphertext, enc_err] = noise::Encrypt(s1n, plaintext); + ASSERT_EQ(error::OK, enc_err); + auto [computed_plaintext, dec_err] = noise::Decrypt(s2n, ciphertext); + ASSERT_EQ(error::OK, dec_err); + ASSERT_EQ(plaintext, computed_plaintext); + ciphertext_out->swap(ciphertext); + } +}; + +TEST_F(CipherStateTest, EncryptDecrypt) { + std::string ciphertext; + EncryptDecrypt("", &ciphertext, NOISE_CIPHER_CHACHAPOLY); + ASSERT_EQ(16, ciphertext.size()); + EncryptDecrypt("a", &ciphertext, NOISE_CIPHER_CHACHAPOLY); + ASSERT_EQ(17, ciphertext.size()); + + EncryptDecrypt("this is a test of the emergency broadcast system", &ciphertext, NOISE_CIPHER_CHACHAPOLY); + + std::string s; + + s.resize(65535-16, 'a'); + EncryptDecrypt(s, &ciphertext, NOISE_CIPHER_CHACHAPOLY); + ASSERT_EQ(ciphertext.size(), 65535); + + s.resize(65535-15, 'a'); + EncryptDecrypt(s, &ciphertext, NOISE_CIPHER_CHACHAPOLY); + ASSERT_EQ(ciphertext.size(), 65535-15+32); + + s.resize((65535-16)*10, 'a'); + EncryptDecrypt(s, &ciphertext, NOISE_CIPHER_CHACHAPOLY); + ASSERT_EQ(ciphertext.size(), 65535*10); +} + +TEST_F(CipherStateTest, BenchmarkChaChaPoly) { + std::string plaintext; + std::string ciphertext; + plaintext.resize(1 << 20, 'a'); + auto start = util::asm_rdtsc(); + int times = 100; + for (int i = 0; i < times; i++) { + EncryptDecrypt(plaintext, &ciphertext, NOISE_CIPHER_CHACHAPOLY); + } + LOG(INFO) << "took " << ((util::asm_rdtsc() - start) * 1.0 / (times * plaintext.size())) << " cycles/byte"; +} + +TEST_F(CipherStateTest, BenchmarkAesGcm) { + std::string plaintext; + std::string ciphertext; + plaintext.resize(1 << 20, 'a'); + auto start = util::asm_rdtsc(); + int times = 100; + for (int i = 0; i < times; i++) { + EncryptDecrypt(plaintext, &ciphertext, NOISE_CIPHER_AESGCM); + } + LOG(INFO) << "took " << ((util::asm_rdtsc() - start) * 1.0 / (times * plaintext.size())) << " cycles/byte"; +} + +} // namespace svr2::noise diff --git a/enclave/noisewrap/tests/noisewrap.cc b/enclave/noisewrap/tests/noisewrap.cc new file mode 100644 index 0000000..270d681 --- /dev/null +++ b/enclave/noisewrap/tests/noisewrap.cc @@ -0,0 +1,33 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP noise-c +//TESTDEP noisewrap +//TESTDEP util +//TESTDEP env +//TESTDEP env/test +//TESTDEP proto +//TESTDEP protobuf-lite +//TESTDEP libsodium + +#include +#include +#include "env/env.h" +#include "util/log.h" +#include +#include +#include "util/hex.h" + +namespace svr2 { + +TEST(NoiseWrap, RandomnessIsWrappedDeterministically) { + svr2::env::Init(); + std::array out; + ASSERT_EQ(NOISE_ERROR_NONE, noise_randstate_generate_simple(out.data(), out.size())); + LOG(INFO) << "RAND: " << util::ToHex(out); + uint8_t expect[8] = {0x4f, 0x6f, 0xa8, 0x48, 0x32, 0xaa, 0x7d, 0x32}; + ASSERT_EQ(0, memcmp(out.data(), expect, 8)); +} + +} // namespace svr2 diff --git a/enclave/noisewrap/wrap.cc b/enclave/noisewrap/wrap.cc new file mode 100644 index 0000000..2b56fa0 --- /dev/null +++ b/enclave/noisewrap/wrap.cc @@ -0,0 +1,15 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "env/env.h" +#include "proto/error.pb.h" +#include "util/macros.h" + +extern "C" { + +// Wrap Noise's call to get randomness so it uses our enclave's random generator. +void __wrap_noise_rand_bytes(void* bytes, size_t size) { + CHECK(::svr2::error::OK == ::svr2::env::environment->RandomBytes(bytes, size)); +} + +} // extern "C" diff --git a/enclave/peerid/peerid.cc b/enclave/peerid/peerid.cc new file mode 100644 index 0000000..321cdd2 --- /dev/null +++ b/enclave/peerid/peerid.cc @@ -0,0 +1,49 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include +#include + +#include "peerid/peerid.h" +#include "sip/halfsiphash.h" +#include "util/log.h" +#include "metrics/metrics.h" +#include "util/hex.h" + +namespace svr2::peerid { + +static std::array zero_id = {0}; + +size_t PeerIDHasher::operator()(const PeerID& id) const { + return Hash(id.id_.data(), id.id_.size()); +} + +PeerID::PeerID(const uint8_t array[32]) { + std::copy(array, array+32, id_.begin()); +} +PeerID::PeerID() : id_({0}) {} +error::Error PeerID::FromString(const std::string& s) { + if (s.size() != id_.size()) { + return COUNTED_ERROR(Peers_InvalidID); + } + std::copy(s.begin(), s.end(), id_.begin()); + return error::OK; +} +bool PeerID::Valid() const { + // https://cr.yp.to/ecdh.html#validate + return id_ != zero_id; +} +void PeerID::ToString(std::string* s) const { + s->resize(32, 0); + std::copy(id_.begin(), id_.end(), s->begin()); +} +std::string PeerID::DebugString() const { + return util::PrefixToHex(id_, 4); +} + +std::ostream& operator<<(std::ostream& os, const PeerID& peer_id) { + os << peer_id.DebugString(); + return os; +} + +} // namespace svr2::peerid diff --git a/enclave/peerid/peerid.h b/enclave/peerid/peerid.h new file mode 100644 index 0000000..4741d5f --- /dev/null +++ b/enclave/peerid/peerid.h @@ -0,0 +1,54 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_PEERID_PEERID_H__ +#define __SVR2_PEERID_PEERID_H__ + +#include +#include +#include + +#include "context/context.h" +#include "proto/error.pb.h" +#include "sip/hasher.h" + +namespace svr2::peerid { + +class PeerID; + +class PeerIDHasher : public sip::Hasher { + public: + size_t operator()(const PeerID& id) const; +}; + +class PeerID { + public: + PeerID(PeerID&& moved) = default; + PeerID(const PeerID& copied) = default; + PeerID& operator=(const PeerID& other) = default; + PeerID(); // all zeros, invalid + PeerID(const uint8_t array[32]); + error::Error FromString(const std::string& s); + void ToString(std::string* s) const; + const std::array& Get() const { return id_; } + bool Valid() const; + bool operator==(const PeerID& other) const { return id_ == other.id_; } + bool operator!=(const PeerID& other) const { return id_ != other.id_; } + bool operator<(const PeerID& other) const { return id_ < other.id_; } + std::string DebugString() const; + std::string AsString() const { std::string out; ToString(&out); return out; } + + // Prints DebugString() to an ostream. Overload is acceptable because + // PeerID represents a value and DebugString() does not expose any implementation + // details of the object (https://google.github.io/styleguide/cppguide.html#Streams) + friend std::ostream& operator<<(std::ostream& os, const PeerID& peer_id); + + + private: + std::array id_; + friend class PeerIDHasher; +}; + +} // namespace svr2::peerid + +#endif // __SVR2_PEERID_PEERID_H__ diff --git a/enclave/peerid/tests/peerid.cc b/enclave/peerid/tests/peerid.cc new file mode 100644 index 0000000..1a3e0db --- /dev/null +++ b/enclave/peerid/tests/peerid.cc @@ -0,0 +1,107 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP sip +//TESTDEP sender +//TESTDEP env +//TESTDEP env/test +//TESTDEP util +//TESTDEP context +//TESTDEP metrics +//TESTDEP proto +//TESTDEP protobuf-lite +//TESTDEP libsodium + +#include +#include "peers/peers.h" +#include "env/env.h" +#include "util/log.h" +#include "proto/e2e.pb.h" +#include +#include +#include + +namespace svr2::peerid { + +class PeerIDTest : public ::testing::Test { + protected: + static void SetUpTestCase() { + env::Init(); + } +}; + +TEST_F(PeerIDTest, Valid) { + PeerID id; + ASSERT_FALSE(id.Valid()); + std::string more_valid = "12345678901234567890123456789012"; + ASSERT_EQ(error::OK, id.FromString(more_valid)); + ASSERT_TRUE(id.Valid()); +} + +TEST_F(PeerIDTest, FromString) { + PeerID id; + std::string valid = "12345678901234567890123456789012"; + ASSERT_EQ(error::OK, id.FromString(valid)); + std::array expected = { + '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', + '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', + }; + ASSERT_EQ(expected, id.Get()); + ASSERT_NE(error::OK, id.FromString("badstring")); + // We can set the string to invalid (all zeros), and FromString will still succeed. + ASSERT_EQ(error::OK, id.FromString(std::string("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 32))); +} + +TEST_F(PeerIDTest, FromArray) { + uint8_t in[32] = {1}; + PeerID id(in); + std::array expected = { + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + }; + ASSERT_EQ(expected, id.Get()); +} + +TEST_F(PeerIDTest, Equality) { + PeerID id1, id2; + std::string valid = "12345678901234567890123456789012"; + std::string valid2 = "00045678901234567890123456789012"; + ASSERT_EQ(error::OK, id1.FromString(valid)); + ASSERT_EQ(error::OK, id2.FromString(valid)); + ASSERT_TRUE(id1 == id2); + ASSERT_EQ(error::OK, id2.FromString(valid2)); + ASSERT_FALSE(id1 == id2); + ASSERT_EQ(error::OK, id1.FromString(valid2)); + ASSERT_TRUE(id1 == id2); +} + +TEST_F(PeerIDTest, DebugString) { + PeerID id; + ASSERT_EQ(id.DebugString(), "00000000"); + uint8_t in[32] = {1, 2, 3}; + id = PeerID(in); + ASSERT_EQ(id.DebugString(), "01020300"); +} + +TEST_F(PeerIDTest, Copy) { + PeerID id1; + std::string valid = "12345678901234567890123456789012"; + ASSERT_EQ(error::OK, id1.FromString(valid)); + PeerID id2 = id1; + ASSERT_TRUE(id1 == id2); +} + +TEST_F(PeerIDTest, Mapping) { + std::unordered_map map; + for (uint8_t i = 1; i <= 10; i++) { + uint8_t in[32] = {i}; + map[PeerID(in)] = i; + } + for (uint8_t i = 1; i <= 10; i++) { + uint8_t in[32] = {i}; + ASSERT_EQ(map[PeerID(in)], i); + } +} + +} // namespace svr2::peerid diff --git a/enclave/peers/peers.cc b/enclave/peers/peers.cc new file mode 100644 index 0000000..1e10003 --- /dev/null +++ b/enclave/peers/peers.cc @@ -0,0 +1,691 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include +#include +#include + +#include +#include + +#include "peers/peers.h" +#include "util/macros.h" +#include "env/env.h" +#include "sip/halfsiphash.h" +#include "util/endian.h" +#include "util/log.h" +#include "util/constant.h" +#include "sender/sender.h" +#include "metrics/metrics.h" + +// There's some mildly complicated locking going on between Peer and PeerManager +// objects to maintain the necessary invariants for smooth operation. +// In a multi-threaded environment, we want encryption/decryption operations to +// be able to utilize multiple cores. However, peer connections are by their +// nature serial, as each connection uses a serialized set of noise state for +// {en,de}cryption purposes. We've striven to make this locking as simple as +// possible, and we've come up with this: +// +// * The peer manager's lock protects its map (peers_) of peers. Peer objects +// may be added to this list, but are never removed. This is because... +// * Each Peer object contains a lock of its own, which serializes communication +// across that peer's established connection. +// +// In short, the PeerManager lock is simply for lookup, while the Peer lock +// is used for all encryption/decryption/etc. associated with a peer. This +// means that each peer/peer connection is effectively single-threaded, but +// if multiple messages are received from multiple peers, the enclave can +// process their encryption in parallel. + +namespace svr2::peers { + +static NoiseProtocolId peer_to_peer_protocol = { + .prefix_id = NOISE_PREFIX_STANDARD, + .pattern_id = NOISE_PATTERN_KK, + .dh_id = NOISE_DH_CURVE25519, + // We use ChaChaPoly for client communication, because it's easier on clients + // and the vast majority of client interaction is dominated by the DH key exchange, + // rather than the actual stream cipher. However, for peer-to-peer communication, + // we establish connections infrequently and then use the stream cipher a LOT. + // This is especially true during initial replication, when the entire database + // state needs to be encrypted/decrypted. Since we use a libsodium backend, we + // have access to hardware-accelerated AES, so we use that. + .cipher_id = NOISE_CIPHER_AESGCM, + .hash_id = NOISE_HASH_SHA256, + .hybrid_id = 0, +}; + +Peer::Peer(const peerid::PeerID& id, PeerManager* parent) + : id_(id), + handshake_(noise::WrapHandshakeState(nullptr)), + tx_(noise::WrapCipherState(nullptr)), + rx_(noise::WrapCipherState(nullptr)), + parent_(parent), + last_attestation_(0) {} + +error::Error Peer::Send( + context::Context* ctx, + const e2e::EnclaveToEnclaveMessage& msg) { + ACQUIRE_LOCK(mu_, ctx, lock_peer); + MEASURE_CPU(ctx, cpu_peer_encrypt); + if (InternalCurrentState() != PEER_CONNECTED) { + return COUNTED_ERROR(Peers_SendBeforeConnect); + } + auto enclave_message = ctx->Protobuf(); + auto send = enclave_message->mutable_peer_message(); + std::string serialized; + if (!msg.SerializeToString(&serialized)) { + return COUNTED_ERROR(Peers_EncryptSerialize); + } + auto [ciphertext, err] = noise::Encrypt(tx_.get(), serialized); + if (err != error::OK) { + // An encryption error probably means bad noise state, which is unrecoverable. + InternalDisconnect(); + SendRst(ctx, id_); + return err; + } + send->mutable_data()->swap(ciphertext); + id_.ToString(send->mutable_peer_id()); + sender::Send(*enclave_message); + return error::OK; +} + +error::Error Peer::Recv( + context::Context* ctx, + const PeerMessage& msg, + e2e::EnclaveToEnclaveMessage** decoded) { + ACQUIRE_LOCK(mu_, ctx, lock_peer); + switch (msg.inner_case()) { + case PeerMessage::kSynack: { + MEASURE_CPU(ctx, cpu_peer_connect2); + if (InternalCurrentState() != PEER_CONNECTING) { + InternalDisconnect(); + SendRst(ctx, id_); + return COUNTED_ERROR(Peers_SynAckNotConnecting); + } + error::Error err = FinishConnection(ctx, msg.synack(), decoded); + if (err != error::OK) { + InternalDisconnect(); + SendRst(ctx, id_); + return err; + } + } return error::OK; + case PeerMessage::kData: { + MEASURE_CPU(ctx, cpu_peer_decrypt); + if (InternalCurrentState() != PEER_CONNECTED) { + return COUNTED_ERROR(Peers_DataNotConnected); + } + auto [plaintext, err] = noise::Decrypt(rx_.get(), msg.data()); + if (err != error::OK) { + // A decryption error probably means bad noise state, which is unrecoverable. + InternalDisconnect(); + SendRst(ctx, id_); + return err; + } + auto e2e_message = ctx->Protobuf(); + if (!e2e_message->ParseFromString(plaintext)) { + return COUNTED_ERROR(Peers_DecryptParse); + } + if (e2e_message->inner_case() == e2e::EnclaveToEnclaveMessage::kAttestationUpdate) { + auto err = CheckNextAttestation(e2e_message->attestation_update()); + if (err != error::OK) { + LOG(WARNING) << "Peer " << id_ << " attestation update failure: " << err; + InternalDisconnect(); + SendRst(ctx, id_); + } + return err; + } + *decoded = e2e_message; + } return error::OK; + case PeerMessage::kRst: + LOG(INFO) << "Received RST from " << id_; + InternalDisconnect(); + return error::OK; + case PeerMessage::kSyn: + CHECK(nullptr == "PeerManager.RecvFromPeer should have called Accept, not Recv"); + default: + return COUNTED_ERROR(Peers_InvalidMsg); + } +} + +error::Error Peer::FinishConnection( + context::Context* ctx, + const std::string& synack, + e2e::EnclaveToEnclaveMessage** decoded) { + if (NOISE_ACTION_READ_MESSAGE != noise_handshakestate_get_action(handshake_.get())) { + return COUNTED_ERROR(Peers_HandshakeState); + } + + noise::HandshakeState local_handshake = noise::WrapHandshakeState(nullptr); + local_handshake.swap(handshake_); + + e2e::ConnectRequest* conn = ctx->Protobuf(); + if (!conn->ParseFromString(synack)) { + return COUNTED_ERROR(Peers_FinishParseHandshake); + } + auto remote_attestation = conn->attestation(); + auto ts = parent_->CurrentTime(); + auto [att_key, att_err] = env::environment->Attest( + ts, + remote_attestation.evidence(), + remote_attestation.endorsements()); + if(att_err != error::OK) { + return att_err; + } + if(!util::ConstantTimeEquals(att_key, this->ID().Get())) { + return error::Peers_FinishIDMismatch; + } + + NoiseBuffer buf = noise::BufferInputFromString(conn->mutable_handshake()); + if (NOISE_ERROR_NONE != noise_handshakestate_read_message(local_handshake.get(), &buf, nullptr)) { + return COUNTED_ERROR(Peers_FinishReadHandshake); + } + if (NOISE_ACTION_SPLIT != noise_handshakestate_get_action(local_handshake.get())) { + return COUNTED_ERROR(Peers_HandshakeState); + } + NoiseCipherState* tx; + NoiseCipherState* rx; + if (NOISE_ERROR_NONE != noise_handshakestate_split(local_handshake.get(), &tx, &rx)) { + return COUNTED_ERROR(Peers_FinishSplit); + } + + tx_.reset(tx); + rx_.reset(rx); + auto e2e_message = ctx->Protobuf(); + e2e_message->set_connected(true); + *decoded = e2e_message; + last_attestation_ = ts; + return error::OK; +} + +error::Error Peer::Connect( + context::Context* ctx, + const noise::DHState& priv, + const e2e::Attestation& attestation) { + ACQUIRE_LOCK(mu_, ctx, lock_peer); + return Peer::InternalConnect(ctx, priv, attestation); +} + +std::pair Peer::MaybeConnect( + context::Context* ctx, + const noise::DHState& priv, + const e2e::Attestation& attestation) { + ACQUIRE_LOCK(mu_, ctx, lock_peer); + switch (InternalCurrentState()) { + case PEER_CONNECTING: + case PEER_CONNECTED: + return std::make_pair(false, error::OK); + case PEER_DISCONNECTED: + default: + return std::make_pair(true, InternalConnect(ctx, priv, attestation)); + } +} + +error::Error Peer::InternalConnect( + context::Context* ctx, + const noise::DHState& priv, + const e2e::Attestation& attestation) { + MEASURE_CPU(ctx, cpu_peer_connect); + RETURN_IF_ERROR(Reset(priv, NOISE_ROLE_INITIATOR)); + CHECK(handshake_.get()); + + // Take away our class state for the duration of this call, so that if something goes + // wrong we don't have a misbehaving handshake lying around. + noise::HandshakeState local_handshake = noise::WrapHandshakeState(nullptr); + local_handshake.swap(handshake_); + if (NOISE_ACTION_WRITE_MESSAGE != noise_handshakestate_get_action(local_handshake.get())) { + return COUNTED_ERROR(Peers_HandshakeState); + } + + e2e::ConnectRequest* conn = ctx->Protobuf(); + conn->mutable_attestation()->CopyFrom(attestation); + + // Create the initial Noise initiator handshake request buffer in [conn->handshake]. + conn->mutable_handshake()->resize(noise::HANDSHAKE_INIT_SIZE, '\0'); + NoiseBuffer buf; + noise_buffer_set_output( + buf, + reinterpret_cast(const_cast(conn->mutable_handshake()->data())), + conn->mutable_handshake()->size()); + if (NOISE_ERROR_NONE != noise_handshakestate_write_message(local_handshake.get(), &buf, nullptr)) { + return COUNTED_ERROR(Peers_ConnectWriteHandshake); + } + conn->mutable_handshake()->resize(buf.size); + + // Create the [encoded] output message by serializing [conn]. + auto enclave_message = ctx->Protobuf(); + auto send = enclave_message->mutable_peer_message(); + id_.ToString(send->mutable_peer_id()); + if (!conn->SerializeToString(send->mutable_syn())) { + return COUNTED_ERROR(Peers_ConnectSerializeHandshake); + } + + // Give back the (well-behaved) handshake state. + local_handshake.swap(handshake_); + + sender::Send(*enclave_message); + return error::OK; +} + +error::Error Peer::Accept( + context::Context* ctx, + const noise::DHState& priv, + const e2e::Attestation& attestation, + const std::string& syn, + e2e::EnclaveToEnclaveMessage** decoded) { + ACQUIRE_LOCK(mu_, ctx, lock_peer); + MEASURE_CPU(ctx, cpu_peer_accept); + RETURN_IF_ERROR(Reset(priv, NOISE_ROLE_RESPONDER)); + CHECK(handshake_.get()); + + // Take away our class state for the duration of this call, so that if something goes + // wrong we don't have a misbehaving handshake lying around. + noise::HandshakeState local_handshake = noise::WrapHandshakeState(nullptr); + local_handshake.swap(handshake_); + + if (NOISE_ACTION_READ_MESSAGE != noise_handshakestate_get_action(local_handshake.get())) { + return COUNTED_ERROR(Peers_HandshakeState); + } + + e2e::ConnectRequest* conn_request = ctx->Protobuf(); + if (!conn_request->ParseFromString(syn)) { + return COUNTED_ERROR(Peers_AcceptParseHandshake); + } + + // validate the attestation + auto remote_attestation = conn_request->attestation(); + auto ts = parent_->CurrentTime(); + auto [att_key, att_err] = env::environment->Attest( + ts, + remote_attestation.evidence(), + remote_attestation.endorsements()); + if(att_err != error::OK) { + return att_err; + } + if(!util::ConstantTimeEquals(att_key, this->ID().Get())) { + return error::Peers_AcceptIDMismatch; + } + + NoiseBuffer read_buf = noise::BufferInputFromString(conn_request->mutable_handshake()); + int err = 0; + if (NOISE_ERROR_NONE != (err = noise_handshakestate_read_message(local_handshake.get(), &read_buf, nullptr))) { + return COUNTED_ERROR(Peers_AcceptReadHandshake); + } + if (NOISE_ACTION_WRITE_MESSAGE != noise_handshakestate_get_action(local_handshake.get())) { + return COUNTED_ERROR(Peers_HandshakeState); + } + auto conn_response = ctx->Protobuf(); + conn_response->mutable_attestation()->CopyFrom(attestation); + conn_response->mutable_handshake()->resize(noise::HANDSHAKE_INIT_SIZE, '\0'); + NoiseBuffer write_buf = noise::BufferOutputFromString(conn_response->mutable_handshake()); + if (NOISE_ERROR_NONE != noise_handshakestate_write_message(local_handshake.get(), &write_buf, nullptr)) { + return COUNTED_ERROR(Peers_AcceptWriteHandshake); + } + conn_response->mutable_handshake()->resize(write_buf.size, 0); + auto enclave_message = ctx->Protobuf(); + auto send = enclave_message->mutable_peer_message(); + id_.ToString(send->mutable_peer_id()); + if (!conn_response->SerializeToString(send->mutable_synack())) { + return COUNTED_ERROR(Peers_AcceptSerializeHandshake); + } + if (NOISE_ACTION_SPLIT != noise_handshakestate_get_action(local_handshake.get())) { + return COUNTED_ERROR(Peers_HandshakeState); + } + + NoiseCipherState* tx; + NoiseCipherState* rx; + if (NOISE_ERROR_NONE != noise_handshakestate_split(local_handshake.get(), &tx, &rx)) { + return COUNTED_ERROR(Peers_AcceptSplit); + } + tx_.reset(tx); + rx_.reset(rx); + + auto e2e_message = ctx->Protobuf(); + e2e_message->set_connected(true); + *decoded = e2e_message; + last_attestation_ = ts; + sender::Send(*enclave_message); + return error::OK; +} + +void Peer::Disconnect(context::Context* ctx) { + ACQUIRE_LOCK(mu_, ctx, lock_peer); + InternalDisconnect(); + Peer::SendRst(ctx, id_); +} + +PeerState Peer::CurrentState(context::Context* ctx) const { + ACQUIRE_LOCK(mu_, ctx, lock_peer); + return InternalCurrentState(); +} + +PeerState Peer::InternalCurrentState() const { + if (handshake_.get() != nullptr) { + return PEER_CONNECTING; + } + if (tx_.get() != nullptr && rx_.get() != nullptr) { + return PEER_CONNECTED; + } + return PEER_DISCONNECTED; +} + +void Peer::InternalDisconnect() { + handshake_.reset(nullptr); + tx_.reset(nullptr); + rx_.reset(nullptr); + last_attestation_ = 0; +} + +void Peer::SendRst(context::Context* ctx, const peerid::PeerID& id) { + auto enclave_message = ctx->Protobuf(); + auto send = enclave_message->mutable_peer_message(); + id.ToString(send->mutable_peer_id()); + send->set_rst(true); + sender::Send(*enclave_message); +} + +error::Error Peer::Reset(const noise::DHState& priv, int noise_role) { + InternalDisconnect(); + NoiseHandshakeState* hsp; + if (NOISE_ERROR_NONE != noise_handshakestate_new_by_id(&hsp, &peer_to_peer_protocol, noise_role)) { + return COUNTED_ERROR(Peers_HandshakeState); + } + noise::HandshakeState hs = noise::WrapHandshakeState(hsp); + + if (NOISE_ERROR_NONE != noise_dhstate_copy( + noise_handshakestate_get_local_keypair_dh(hsp), + priv.get())) { + return COUNTED_ERROR(Peers_CopyDHState); + } + if (NOISE_ERROR_NONE != noise_dhstate_set_public_key( + noise_handshakestate_get_remote_public_key_dh(hsp), + id_.Get().data(), + id_.Get().size())) { + return COUNTED_ERROR(Peers_SetRemotePublicKey); + } + if (NOISE_ERROR_NONE != noise_handshakestate_start(hsp)) { + return COUNTED_ERROR(Peers_HandshakeStart); + } + + handshake_.swap(hs); + return error::OK; +} + +error::Error Peer::CheckNextAttestation(const e2e::Attestation& a) { + auto now = parent_->CurrentTime(); + auto [key, err] = env::environment->Attest(now, a.evidence(), a.endorsements()); + RETURN_IF_ERROR(err); + if (!util::ConstantTimeEquals(key, id_.Get())) { + LOG(ERROR) << "Peer " << id_ << " sent attestation with incorrect key"; + return COUNTED_ERROR(Peers_AttestationKeyChanged); + } + LOG(DEBUG) << "Peer " << id_ << " re-attested at " << now; + last_attestation_ = now; + return error::OK; +} + +void Peer::MaybeDisconnectIfAttestationTooOld(context::Context* ctx, util::UnixSecs now, util::UnixSecs attestation_timeout) { + ACQUIRE_LOCK(mu_, ctx, lock_peer); + auto state = InternalCurrentState(); + if (// If we're already disconnected ... + state == PEER_DISCONNECTED || + // ... or our attestation timestamp is in a good range ... + (now <= last_attestation_ + attestation_timeout && now >= last_attestation_ - attestation_timeout) || + // ... or we're connecting and we haven't yet received a synack with an attestation ... + (state == PEER_CONNECTING && last_attestation_ == 0)) { + // ... then there's no need for us to disconnect due to attestation timestamp. + return; + } + LOG(WARNING) << "Attestation for " << id_ << " too old (ts=" << last_attestation_ << ", now=" << now << "), disconnecting"; + InternalDisconnect(); + SendRst(ctx, id_); +} + +void Peer::PopulateConnectionStatus(context::Context* ctx, ConnectionStatus* status) const { + ACQUIRE_LOCK(mu_, ctx, lock_peer); + status->set_state(InternalCurrentState()); + status->set_last_attestation_unix_secs(last_attestation_); +} + +PeerManager::PeerManager() + : dhstate_(noise::WrapDHState(nullptr)), + init_success_(false), + time_(0) {} +PeerManager::~PeerManager() {} + +PeerState PeerManager::PeerState(context::Context* ctx, const peerid::PeerID& id) const { + ACQUIRE_LOCK(mu_, ctx, lock_peermanager); + auto finder = peers_.find(id); + if (finder == peers_.end()) { + return PEER_DISCONNECTED; + } + return finder->second->CurrentState(ctx); +} + +error::Error PeerManager::Init(context::Context* ctx) { + NoiseDHState* dhstate; + if (NOISE_ERROR_NONE != noise_dhstate_new_by_id(&dhstate, peer_to_peer_protocol.dh_id)) { + return COUNTED_ERROR(Peers_NewKey); + } + noise::DHState dh = noise::WrapDHState(dhstate); + if (NOISE_ERROR_NONE != noise_dhstate_generate_keypair(dhstate)) { + return COUNTED_ERROR(Peers_NewKeyGenerate); + } + env::PublicKey public_key{}; + if (NOISE_ERROR_NONE != noise_dhstate_get_public_key(dhstate, public_key.data(), sizeof(public_key))) { + return COUNTED_ERROR(Peers_NewKeyPublic); + } + + auto [evidence_and_endorsements, err] = env::environment->Evidence(public_key, enclaveconfig::RaftGroupConfig()); + RETURN_IF_ERROR(err); + + ACQUIRE_LOCK(mu_, ctx, lock_peermanager); + if (init_success_.exchange(true)) { + return COUNTED_ERROR(Peers_ReInit); + } + dhstate_.swap(dh); + id_ = peerid::PeerID(public_key.data()); + most_recent_attestation_.CopyFrom(evidence_and_endorsements); + return error::OK; +} + +static peerid::PeerID invalid_id; + +const peerid::PeerID& PeerManager::ID() const { + if (!init_success_.load()) { return invalid_id; } + return id_; +} + +error::Error PeerManager::RefreshAttestation(context::Context* ctx) { + auto [evidence_and_endorsements, err] = env::environment->Evidence(ID().Get(), enclaveconfig::RaftGroupConfig()); + if (err != error::OK) { + COUNTER(peers, attestation_refresh_failure)->Increment(); + return err; + } + + ACQUIRE_LOCK(mu_, ctx, lock_peermanager); + COUNTER(peers, attestation_refresh_success)->Increment(); + most_recent_attestation_ = evidence_and_endorsements; + auto msg = ctx->Protobuf(); + *msg->mutable_attestation_update() = most_recent_attestation_; + + LOG(DEBUG) << "Sending refreshed attestation to peers"; + for (auto iter = peers_.begin(); iter != peers_.end(); ++iter) { + if (iter->second->CurrentState(ctx) == PEER_CONNECTED) { + auto err = iter->second->Send(ctx, *msg); + LOG(VERBOSE) << "Sent refreshed attestation to " << iter->first << ": " << err; + if (err != error::OK) { + LOG(WARNING) << "Sending most recent attestation to " << iter->first << " failed: " << err; + } + } + } + return error::OK; +} + +Peer* PeerManager::CreatePeer(context::Context* ctx, const peerid::PeerID& id) { + ACQUIRE_LOCK(mu_, ctx, lock_peermanager); + auto finder = peers_.find(id); + if (finder != peers_.end()) { + return finder->second.get(); + } + auto [iter, _] = peers_.emplace(id, std::make_unique(id, this)); + GAUGE(peers, peers)->Set(peers_.size()); + return iter->second.get(); +} + +Peer* PeerManager::GetPeer(context::Context* ctx, const peerid::PeerID& id) const { + ACQUIRE_LOCK(mu_, ctx, lock_peermanager); + auto finder = peers_.find(id); + if (finder != peers_.end()) { + return finder->second.get(); + } + return nullptr; +} + +Peer* PeerManager::GetPeerOrRst(context::Context* ctx, const peerid::PeerID& id) const { + ACQUIRE_LOCK(mu_, ctx, lock_peermanager); + auto finder = peers_.find(id); + if (finder != peers_.end()) { + return finder->second.get(); + } + Peer::SendRst(ctx, id); + return nullptr; +} + + +std::pair PeerManager::ConnectionArgs(context::Context* ctx) { + CHECK(init_success_.load()); + ACQUIRE_LOCK(mu_, ctx, lock_peermanager); + auto att = ctx->Protobuf(); + *att = most_recent_attestation_; + return std::make_pair(noise::CloneDHState(dhstate_), att); +} + +error::Error PeerManager::ConnectToPeer( + context::Context* ctx, + const peerid::PeerID& to) { + if (!init_success_.load()) { + return COUNTED_ERROR(Peers_NoInit); + } + Peer* peer = CreatePeer(ctx, to); + auto [dhstate, most_recent_attestation] = ConnectionArgs(ctx); + RETURN_IF_ERROR(peer->Connect(ctx, dhstate, *most_recent_attestation)); + LOG(INFO) << ID() << " connecting to new peer " << to; + return error::OK; +} + +error::Error PeerManager::MaybeConnectToPeer( + context::Context* ctx, + const peerid::PeerID& to) { + if (!init_success_.load()) { + return COUNTED_ERROR(Peers_NoInit); + } + Peer* peer = CreatePeer(ctx, to); + auto [dhstate, most_recent_attestation] = ConnectionArgs(ctx); + auto [started_connection, err] = peer->MaybeConnect(ctx, dhstate, *most_recent_attestation); + RETURN_IF_ERROR(err); + if (started_connection) { + LOG(INFO) << ID() << " connecting to new peer " << to; + } + return error::OK; +} + +error::Error PeerManager::ResetPeer( + context::Context* ctx, + const peerid::PeerID& to) { + if (!init_success_.load()) { + return COUNTED_ERROR(Peers_NoInit); + } + Peer* peer = GetPeerOrRst(ctx, to); + if (peer == nullptr) { + return COUNTED_ERROR(Peers_ResetMissingPeer); + } + peer->Disconnect(ctx); + return error::OK; +} + +error::Error PeerManager::SendToPeer( + context::Context* ctx, + const peerid::PeerID& to, + const e2e::EnclaveToEnclaveMessage& msg) { + if (!init_success_.load()) { + return COUNTED_ERROR(Peers_NoInit); + } + if (msg.connected()) { + return COUNTED_ERROR(Peers_SendConnect); + } + Peer* peer = GetPeerOrRst(ctx, to); + if (peer == nullptr) { + return COUNTED_ERROR(Peers_SendBeforeConnect); + } + return peer->Send(ctx, msg); +} + +error::Error PeerManager::RecvFromPeer( + context::Context* ctx, + const PeerMessage& msg, + e2e::EnclaveToEnclaveMessage** decoded) { + if (!init_success_.load()) { + return COUNTED_ERROR(Peers_NoInit); + } + *decoded = nullptr; + peerid::PeerID from; + RETURN_IF_ERROR(from.FromString(msg.peer_id())); + if (msg.inner_case() == PeerMessage::kSyn) { + Peer* peer = CreatePeer(ctx, from); + auto [dhstate, most_recent_attestation] = ConnectionArgs(ctx); + RETURN_IF_ERROR(peer->Accept(ctx, dhstate, *most_recent_attestation, msg.syn(), decoded)); + LOG(INFO) << ID() << " accepted new peer " << from; + return error::OK; + } + + Peer* peer = msg.inner_case() == PeerMessage::kRst + ? GetPeer(ctx, from) + : GetPeerOrRst(ctx, from); + + if (peer == nullptr) { + return COUNTED_ERROR(Peers_RecvBeforeConnect); + } + return peer->Recv(ctx, msg, decoded); +} + +std::set PeerManager::ConnectedPeers(context::Context* ctx) const { + ACQUIRE_LOCK(mu_, ctx, lock_peermanager); + std::set out; + for (auto iter = peers_.cbegin(); iter != peers_.cend(); ++iter) { + if (iter->second->CurrentState(ctx) == PEER_CONNECTED) { + out.insert(iter->first); + } + } + return out; +} + +std::set PeerManager::AllPeers(context::Context* ctx) const { + ACQUIRE_LOCK(mu_, ctx, lock_peermanager); + std::set out; + for (auto iter = peers_.cbegin(); iter != peers_.cend(); ++iter) { + out.insert(iter->first); + } + return out; +} + +void PeerManager::SetPeerAttestationTimestamp(context::Context* ctx, util::UnixSecs secs, util::UnixSecs attestation_timeout) { + auto old_secs = time_.exchange(secs); + if (old_secs == secs) { + return; + } else if (old_secs > secs) { + LOG(WARNING) << "PeerManager timestamp went backwards: " << old_secs << " -> " << secs; + } + ACQUIRE_LOCK(mu_, ctx, lock_peermanager); + for (auto iter = peers_.begin(); iter != peers_.end(); ++iter) { + iter->second->MaybeDisconnectIfAttestationTooOld(ctx, secs, attestation_timeout); + } +} + +void PeerManager::PeerStatus(context::Context* ctx, const peerid::PeerID& id, ConnectionStatus* status) const { + auto peer = GetPeer(ctx, id); + if (peer == nullptr) { return; } + peer->PopulateConnectionStatus(ctx, status); +} + +} // namespace svr2::remote diff --git a/enclave/peers/peers.h b/enclave/peers/peers.h new file mode 100644 index 0000000..040f455 --- /dev/null +++ b/enclave/peers/peers.h @@ -0,0 +1,261 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_PEERS_PEERS_H__ +#define __SVR2_PEERS_PEERS_H__ + +#include +#include +#include +#include +#include +#include + +#include "context/context.h" +#include "util/macros.h" +#include "proto/error.pb.h" +#include "proto/msgs.pb.h" +#include "proto/e2e.pb.h" +#include "sip/hasher.h" +#include "noise/noise.h" +#include "peerid/peerid.h" +#include "groupclock/groupclock.h" +#include "util/mutex.h" + +// Within the peer manager, peers can make the following state transitions. The normal +// transition paths are: +// +// Connect: DISCONNECTED -> CONNECTING -> CONNECTED +// Accept: DISCONNECTED -> CONNECTED +// +// Nowever, note that: +// +// - From the CONNECTING/CONNECTED states, one can enter the DISCONNECTED +// state should an error be encountered +// - From any state, one can enter CONNECTED by receiving a SYN and sending +// a SYN/ACK. +// - From DISCONNECTED, one can enter CONNECTING by sending a SYN. +// +// By utilizing these mechanisms, we should be able to re-establish good connections +// should any connection state become invalid. +// +// ┌────────────────┐ error / recv:RST ┌────────────────┐ +// │ │◄────────────────────┤ │ +// │ DISCONNECTED │ │ CONNECTING │ +// │ ├────────────────────►│ │ +// └───────────┬────┘ send:SYN └────┬────────┬──┘ +// ▲ │ │ │ +// │ │ │recv: │recv:SYN +// │ │ │SYNACK │send:SYNACK +// │ │ │ │ +// │ │ recv:SYN ▼ ▼ +// │ │ send:SYNACK ┌────────────────┐ +// │ └─────────────────────────►│ │ +// │ │ CONNECTED │ +// └────────────────────────────────┤ │ +// error / recv:RST └────────────────┘ +// +// (made with asciiflow) + +namespace svr2::peers { + +class PeerManager; + +// Encapsulates the state for a single remote peer. +class Peer { + public: + DELETE_COPY_AND_ASSIGN(Peer); + Peer(const peerid::PeerID& id, PeerManager* parent); + + const peerid::PeerID& ID() const { return id_; } + error::Error Send( + context::Context* ctx, + const e2e::EnclaveToEnclaveMessage& msg) EXCLUDES(mu_); + error::Error Recv( + context::Context* ctx, + const PeerMessage& msg, + e2e::EnclaveToEnclaveMessage** decoded) EXCLUDES(mu_); + + // Connect is called on a newly created peer to request establishment of a new + // connection to that remote party. + error::Error Connect( + context::Context* ctx, + const noise::DHState& priv, + const e2e::Attestation& attestation) EXCLUDES(mu_); + // MaybeConnect is called when we're not sure if we're connected already + // or not. It won't disrupt an existing connection, but it will establish + // a new one. Returns a bool that says whether we attempted to start + // the connection or not. + std::pair MaybeConnect( + context::Context* ctx, + const noise::DHState& priv, + const e2e::Attestation& attestation) EXCLUDES(mu_); + // Accept is called on a newly created peer to request establishment of a + // remote-requested connection to that remote party. + error::Error Accept( + context::Context* ctx, + const noise::DHState& priv, + const e2e::Attestation& attestation, + const std::string& syn, + e2e::EnclaveToEnclaveMessage** decoded) EXCLUDES(mu_); + // Disconnect the peer. + void Disconnect(context::Context* ctx) EXCLUDES(mu_); + // Disconnect the peer if its attestation timestamp is out of date. + void MaybeDisconnectIfAttestationTooOld(context::Context* ctx, util::UnixSecs now, util::UnixSecs attestation_timeout) EXCLUDES(mu_); + + PeerState CurrentState(context::Context* ctx) const EXCLUDES(mu_); + void PopulateConnectionStatus(context::Context* ctx, ConnectionStatus* status) const EXCLUDES(mu_); + + // Send a `rst` to the given peer ID. + static void SendRst(context::Context* ctx, const peerid::PeerID& id) EXCLUDES(mu_); + + private: + // Resets state to DISCONNECTED. + void InternalDisconnect() REQUIRES(mu_); + PeerState InternalCurrentState() const REQUIRES(mu_); + + // Connect is called on a newly created peer to request establishment of a new + // connection to that remote party. + error::Error InternalConnect( + context::Context* ctx, + const noise::DHState& priv, + const e2e::Attestation& attestation) REQUIRES(mu_); + + // FinishConnection is called by Recv when [state==CONNECTING] to complete the handshake. + error::Error FinishConnection( + context::Context* ctx, + const std::string& synack, + e2e::EnclaveToEnclaveMessage** decoded) REQUIRES(mu_); + + // Reset to a state where we have a valid handshake_. + error::Error Reset( + const noise::DHState& priv, + int noise_role) REQUIRES(mu_); + + error::Error CheckNextAttestation(const e2e::Attestation& a) REQUIRES(mu_); + + const peerid::PeerID id_; + mutable util::mutex mu_; + noise::HandshakeState handshake_ GUARDED_BY(mu_); + noise::CipherState tx_ GUARDED_BY(mu_); + noise::CipherState rx_ GUARDED_BY(mu_); + const PeerManager* const parent_; + util::UnixSecs last_attestation_ GUARDED_BY(mu_); +}; + +// PeerManager allows messages to be sent to and received from peers. +// +// Connecting to a new peer: +// +// Connector Accepter +// ---------------------------------------------------------- +// ConnectToPeer(accepter) +// - encoded = handshake request -> RecvFromPeer(connector, msg.syn) +// - decoded = e2e.connect +// RecvFromPeer(accepter, msg) <- - encoded = handshake response +// - decoded = e2e.connect +// - encoded = NULL +// +// The connector's first message contains the most recent attestation proof +// for the connector's communication public key, along with a Noise handshake +// for that key. +// +// The accepter's first message contains its attestation proof for its +// communication public key, as well as the noise handshake completion for +// this session. The [decoded] message that comes out will have the +// [e2e.connect] flag set when the handshake is complete and the session +// is considered usable. +// +// After a client has connected, this manager can handle received messages +// by passing them to RecvFromPeer and handling the resulting [decoded] +// message, and can send messages by passing them through SendToPeer, then +// sending the resulting EnclaveMessage up to the host for processing. +class PeerManager { + public: + DELETE_COPY_AND_ASSIGN(PeerManager); + PeerManager(); + ~PeerManager(); + + error::Error Init(context::Context* ctx) EXCLUDES(mu_); + + error::Error RefreshAttestation(context::Context* ctx); + + // ConnectToPeer requests that a new connection be established to the given + // PeerID. This will replace any existing connections that might exist + // with that peer with a new connection. + error::Error ConnectToPeer( + context::Context* ctx, + const peerid::PeerID& to); + + // Try to establish a connection to [to] if one doesn't already exist. + // If we're already connected or already attempting to connect, does nothing + // and returns success. + error::Error MaybeConnectToPeer( + context::Context* ctx, + const peerid::PeerID& to); + + // ResetPeer disconnects a peer and sends it an RST. + error::Error ResetPeer( + context::Context* ctx, + const peerid::PeerID& to); + + // SendToPeer takes in a serialized protobuf to send to [to]. If + // [msg.connect] is set, then this is requesting a new connection to [to] + // rather than sending on an existing channel. + // Note: does not actually send the message in question, just encodes it. + error::Error SendToPeer( + context::Context* ctx, + const peerid::PeerID& to, + const e2e::EnclaveToEnclaveMessage& msg); + + // RecvFromPeer takes in a PeerMessage and decodes it. If that + // message contains a EnclaveToEnclaveMessage, that message is instantiated + // in the provided [arena] and returned as [*decoded]. If not, [*decoded] + // will be NULL. If [*encoded] is not null, it should be sent up to the + // host. + // If this message establishes a connection, [*decoded.connect] will be set. + error::Error RecvFromPeer( + context::Context* ctx, + const PeerMessage& msg, + e2e::EnclaveToEnclaveMessage** decoded); + + // Returns the local identifier (public key) that remote peers use to connect + // to this peer manager. + const peerid::PeerID& ID() const NO_THREAD_SAFETY_ANALYSIS; + + // Get the current state of a peer ID. + PeerState PeerState(context::Context* ctx, const peerid::PeerID& id) const; + + std::set ConnectedPeers(context::Context* ctx) const; + std::set AllPeers(context::Context* ctx) const; + void PeerStatus(context::Context* ctx, const peerid::PeerID& id, ConnectionStatus* status) const; + + void SetPeerAttestationTimestamp(context::Context* ctx, util::UnixSecs secs, util::UnixSecs attestation_timeout) EXCLUDES(mu_); + + util::UnixSecs CurrentTime() const { return time_.load(); } + + private: + std::pair ConnectionArgs(context::Context* ctx) EXCLUDES(mu_); + + // CreatePeer returns a peer for the given ID, creating it if necessary. + Peer* CreatePeer(context::Context* ctx, const peerid::PeerID& id) EXCLUDES(mu_); + // GetPeer returns the peer associated with the given ID + Peer* GetPeer(context::Context* ctx, const peerid::PeerID& id) const EXCLUDES(mu_); + // GetPeerOrRst returns the peer associated with the given ID, sending + // a RST to that peer if it doesn't exist. + Peer* GetPeerOrRst(context::Context* ctx, const peerid::PeerID& id) const EXCLUDES(mu_); + + mutable util::mutex mu_; + // To simplify multi-threaded logic, a peer once added to `peers_` will + // never be removed. + std::unordered_map, peerid::PeerIDHasher> peers_ GUARDED_BY(mu_); + noise::DHState dhstate_ GUARDED_BY(mu_); + peerid::PeerID id_ GUARDED_BY(mu_); + e2e::Attestation most_recent_attestation_ GUARDED_BY(mu_); + std::atomic init_success_; + std::atomic time_; +}; + +} // namespace svr2::peers + +#endif // __SVR2_PEERS_PEERS_H__ diff --git a/enclave/peers/tests/peermanager.cc b/enclave/peers/tests/peermanager.cc new file mode 100644 index 0000000..fd60cd4 --- /dev/null +++ b/enclave/peers/tests/peermanager.cc @@ -0,0 +1,207 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP context +//TESTDEP noise +//TESTDEP noise-c +//TESTDEP noisewrap +//TESTDEP peerid +//TESTDEP sip +//TESTDEP sender +//TESTDEP env +//TESTDEP env/test +//TESTDEP util +//TESTDEP metrics +//TESTDEP proto +//TESTDEP protobuf-lite +//TESTDEP libsodium + +#include +#include "peers/peers.h" +#include "env/env.h" +#include "env/test/test.h" +#include "util/log.h" +#include "proto/e2e.pb.h" +#include +#include + +namespace svr2::peers { + +#define ATTESTATION_TIMEOUT 3600 + +class PeerManagerTest : public ::testing::Test { + protected: + static void SetUpTestCase() { + env::Init(); + } + + e2e::Attestation attestation; + context::Context ctx; + + PeerMessage* FromEnclaveMessage(const EnclaveMessage& msg, const peerid::PeerID& from) { + auto out = ctx.Protobuf(); + out->MergeFrom(msg.peer_message()); + from.ToString(out->mutable_peer_id()); + return out; + } + + void SetUp() { + mgr1 = std::make_unique(); + mgr2 = std::make_unique(); + ASSERT_EQ(error::OK, mgr1->Init(&ctx)); + ASSERT_EQ(error::OK, mgr2->Init(&ctx)); + mgr1->SetPeerAttestationTimestamp(&ctx, now, ATTESTATION_TIMEOUT); + mgr2->SetPeerAttestationTimestamp(&ctx, now, ATTESTATION_TIMEOUT); + env::test::SentMessages(); // clear sent messages from previous tests + } + + EnclaveMessage Sent() { + auto msgs = env::test::SentMessages(); + CHECK(msgs.size() == 1); + return std::move(msgs[0]); + } + + void Connect1To2() { + e2e::EnclaveToEnclaveMessage* e2e; + ASSERT_EQ(error::OK, mgr1->ConnectToPeer(&ctx, mgr2->ID())); + EnclaveMessage em = Sent(); + ASSERT_EQ(em.inner_case(), EnclaveMessage::kPeerMessage); + ASSERT_EQ(error::OK, mgr2->RecvFromPeer(&ctx, *FromEnclaveMessage(em, mgr1->ID()), &e2e)); + ASSERT_NE(e2e, nullptr); + ASSERT_TRUE(e2e->connected()); + em = Sent(); + ASSERT_EQ(error::OK, mgr1->RecvFromPeer(&ctx, *FromEnclaveMessage(em, mgr2->ID()), &e2e)); + ASSERT_NE(e2e, nullptr); + ASSERT_TRUE(e2e->connected()); + } + + google::protobuf::Arena arena; + std::unique_ptr mgr1; + std::unique_ptr mgr2; + util::UnixSecs now = 1000; +}; + +TEST_F(PeerManagerTest, SuccessfulCommunicationAcrossManagers) { + Connect1To2(); + e2e::EnclaveToEnclaveMessage* e2e; + e2e::EnclaveToEnclaveMessage send; + send.mutable_raft_message()->set_term(123); + ASSERT_EQ(error::OK, mgr1->SendToPeer(&ctx, mgr2->ID(), send)); + EnclaveMessage em = Sent(); + ASSERT_EQ(error::OK, mgr2->RecvFromPeer(&ctx, *FromEnclaveMessage(em, mgr1->ID()), &e2e)); + ASSERT_NE(e2e, nullptr); + ASSERT_EQ(e2e->raft_message().term(), 123); +} + +TEST_F(PeerManagerTest, SendConnected) { + Connect1To2(); + e2e::EnclaveToEnclaveMessage send; + send.set_connected(true); + ASSERT_EQ(error::Peers_SendConnect, mgr1->SendToPeer(&ctx, mgr2->ID(), send)); +} + +TEST_F(PeerManagerTest, AcceptUnparsable) { + PeerMessage msg; + msg.set_syn("this is not parsable protobuf serialized data"); + mgr1->ID().ToString(msg.mutable_peer_id()); + e2e::EnclaveToEnclaveMessage* e2e; + ASSERT_EQ(error::Peers_AcceptParseHandshake, mgr2->RecvFromPeer(&ctx, msg, &e2e)); + ASSERT_EQ(PEER_DISCONNECTED, mgr2->PeerState(&ctx, mgr1->ID())); +} + +TEST_F(PeerManagerTest, RecvConnectToConnected) { + ASSERT_EQ(error::OK, mgr2->ConnectToPeer(&ctx, mgr1->ID())); + Sent(); + Connect1To2(); +} + +TEST_F(PeerManagerTest, FinishConnectUnparsable) { + PeerMessage msg; + msg.set_synack("this is not parsable protobuf serialized data"); + mgr1->ID().ToString(msg.mutable_peer_id()); + e2e::EnclaveToEnclaveMessage* e2e; + ASSERT_EQ(error::OK, mgr2->ConnectToPeer(&ctx, mgr1->ID())); + ASSERT_EQ(error::Peers_FinishParseHandshake, mgr2->RecvFromPeer(&ctx, msg, &e2e)); + ASSERT_EQ(PEER_DISCONNECTED, mgr2->PeerState(&ctx, mgr1->ID())); +} + +TEST_F(PeerManagerTest, ConnectToConnected) { + Connect1To2(); + Connect1To2(); +} + +TEST_F(PeerManagerTest, ReInit) { + ASSERT_EQ(error::Peers_ReInit, mgr1->Init(&ctx)); +} + +TEST_F(PeerManagerTest, NoInit) { + mgr1 = std::make_unique(); + e2e::EnclaveToEnclaveMessage* e2e; + ASSERT_EQ(error::Peers_NoInit, mgr1->ConnectToPeer(&ctx, mgr2->ID())); + PeerMessage msg; + ASSERT_EQ(error::Peers_NoInit, mgr1->RecvFromPeer(&ctx, msg, &e2e)); + e2e::EnclaveToEnclaveMessage send; + ASSERT_EQ(error::Peers_NoInit, mgr1->SendToPeer(&ctx, mgr2->ID(), send)); + ASSERT_FALSE(mgr1->ID().Valid()); +} + +TEST_F(PeerManagerTest, PeerState) { + e2e::EnclaveToEnclaveMessage* e2e; + ASSERT_EQ(PEER_DISCONNECTED, mgr1->PeerState(&ctx, mgr2->ID())); + ASSERT_EQ(error::OK, mgr1->ConnectToPeer(&ctx, mgr2->ID())); + ASSERT_EQ(PEER_CONNECTING, mgr1->PeerState(&ctx, mgr2->ID())); + EnclaveMessage em = Sent(); + ASSERT_EQ(em.inner_case(), EnclaveMessage::kPeerMessage); + ASSERT_EQ(PEER_DISCONNECTED, mgr2->PeerState(&ctx, mgr1->ID())); + ASSERT_EQ(error::OK, mgr2->RecvFromPeer(&ctx, *FromEnclaveMessage(em, mgr1->ID()), &e2e)); + ASSERT_NE(e2e, nullptr); + ASSERT_TRUE(e2e->connected()); + ASSERT_EQ(PEER_CONNECTED, mgr2->PeerState(&ctx, mgr1->ID())); + em = Sent(); + ASSERT_EQ(error::OK, mgr1->RecvFromPeer(&ctx, *FromEnclaveMessage(em, mgr2->ID()), &e2e)); + ASSERT_NE(e2e, nullptr); + ASSERT_TRUE(e2e->connected()); + ASSERT_EQ(PEER_CONNECTED, mgr1->PeerState(&ctx, mgr2->ID())); +} + +TEST_F(PeerManagerTest, TimeoutAttestation) { + Connect1To2(); + ASSERT_EQ(PEER_CONNECTED, mgr1->PeerState(&ctx, mgr2->ID())); + mgr1->SetPeerAttestationTimestamp(&ctx, now, ATTESTATION_TIMEOUT); + ASSERT_EQ(PEER_CONNECTED, mgr1->PeerState(&ctx, mgr2->ID())); + // Go up to but not over threshold. + mgr1->SetPeerAttestationTimestamp(&ctx, now + ATTESTATION_TIMEOUT, ATTESTATION_TIMEOUT); + ASSERT_EQ(PEER_CONNECTED, mgr1->PeerState(&ctx, mgr2->ID())); + // Actually go over threshold. + mgr1->SetPeerAttestationTimestamp(&ctx, now + ATTESTATION_TIMEOUT + 1, ATTESTATION_TIMEOUT); + ASSERT_EQ(PEER_DISCONNECTED, mgr1->PeerState(&ctx, mgr2->ID())); + // Confirm that RST was sent. + EnclaveMessage em = Sent(); + ASSERT_EQ(em.peer_message().inner_case(), PeerMessage::kRst); + ASSERT_EQ(em.peer_message().peer_id(), mgr2->ID().AsString()); +} + +TEST_F(PeerManagerTest, AttestationRefreshStallsTimeout) { + Connect1To2(); + ASSERT_EQ(PEER_CONNECTED, mgr1->PeerState(&ctx, mgr2->ID())); + mgr1->SetPeerAttestationTimestamp(&ctx, now, ATTESTATION_TIMEOUT); + ASSERT_EQ(PEER_CONNECTED, mgr1->PeerState(&ctx, mgr2->ID())); + // Go up to but not over threshold. + mgr1->SetPeerAttestationTimestamp(&ctx, now + ATTESTATION_TIMEOUT, ATTESTATION_TIMEOUT); + mgr2->SetPeerAttestationTimestamp(&ctx, now + ATTESTATION_TIMEOUT, ATTESTATION_TIMEOUT); + ASSERT_EQ(PEER_CONNECTED, mgr1->PeerState(&ctx, mgr2->ID())); + ASSERT_EQ(PEER_CONNECTED, mgr2->PeerState(&ctx, mgr1->ID())); + + ASSERT_EQ(error::OK, mgr2->RefreshAttestation(&ctx)); + EnclaveMessage em = Sent(); + + e2e::EnclaveToEnclaveMessage* e2e; + ASSERT_EQ(error::OK, mgr1->RecvFromPeer(&ctx, *FromEnclaveMessage(em, mgr2->ID()), &e2e)); + ASSERT_TRUE(e2e == nullptr); + + mgr1->SetPeerAttestationTimestamp(&ctx, now + ATTESTATION_TIMEOUT + ATTESTATION_TIMEOUT, ATTESTATION_TIMEOUT); + ASSERT_EQ(PEER_CONNECTED, mgr1->PeerState(&ctx, mgr2->ID())); +} + +} // namespace svr2::peers diff --git a/enclave/proto/clientlog.proto b/enclave/proto/clientlog.proto new file mode 100644 index 0000000..5fb04d2 --- /dev/null +++ b/enclave/proto/clientlog.proto @@ -0,0 +1,26 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +syntax = "proto3"; + +package svr2.client; +option optimize_for = LITE_RUNTIME; + +import "client.proto"; +import "client3.proto"; + +// Log2 is the logged message used by the SVR2 (db2) database. +message Log2 { + bytes backup_id = 1; + client.Request req = 2; +} + +// Log3 is the logged message used by the SVR3 (db3) database. +message Log3 { + bytes backup_id = 1; + client.Request3 req = 2; + // If req.create(), then we need to generate new keys. + // These fields will be filled in with the generated keys. + bytes create_privkey = 3; + bytes create_pubkey = 4; +} diff --git a/enclave/proto/e2e.proto b/enclave/proto/e2e.proto new file mode 100644 index 0000000..73d570a --- /dev/null +++ b/enclave/proto/e2e.proto @@ -0,0 +1,156 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +// Contains messages for enclave-to-enclave (e2e) communication over a peer connection. +syntax = "proto3"; + +package svr2.e2e; +option optimize_for = LITE_RUNTIME; + +import "msgs.proto"; +import "raft.proto"; +import "error.proto"; +import "enclaveconfig.proto"; + +// +// transactions +// + +// +// enclave-to-enclave requests +// + +message Attestation { + bytes evidence = 1; + bytes endorsements = 2; +} + +// +// replica to replica +// + +message EnclaveToEnclaveMessage { + oneof inner { + bool connected = 1; + raft.RaftMessage raft_message = 2; + // attestation_update messages are sent within an EnclaveToEnclaveMessage + // regularly across peer-to-peer links, to keep the remote party happy that the + // local party is still able to attest. It's up to the local party to send these + // regularly; not doing so can shut down a connection. + Attestation attestation_update = 3; + + // Enclave-to-enclave transactions, requests and repsonses + TransactionRequest transaction_request = 4; + TransactionResponse transaction_response = 5; + }; +} + +message ConnectRequest { + Attestation attestation = 1; + bytes handshake = 2; +} + +message TransactionRequest { + uint64 request_id = 1; + oneof inner { + bool ping = 2; // should return status=OK + bool get_raft = 3; + ReplicateStateRequest replicate_state = 4; + ReplicateStatePush replicate_state_push = 5; + bool raft_membership_request = 6; + bool raft_voting_request = 7; + bytes raft_write = 8; + uint64 new_timestamp_unix_secs = 9; + bool raft_removal_request = 10; + } +} + +message TransactionResponse { + uint64 request_id = 1; + oneof inner { + error.Error status = 2; + GetRaftResponse get_raft = 3; + raft.LogLocation raft_membership_response = 4; + raft.LogLocation raft_voting_response = 5; + raft.LogLocation raft_write = 6; + } +} + +message GetRaftResponse { + enclaveconfig.RaftGroupConfig group_config = 1; + raft.ReplicaGroup replica_group = 2; +} + +message DB2RowState { + bytes backup_id = 1; + uint32 tries = 2; + bytes data = 3; + bytes pin = 4; + enum State { + UNINITIATED = 0; + POPULATED = 1; + AVAILABLE = 2; + } + State state = 5; +} + +message DB3RowState { + bytes backup_id = 1; + bytes priv = 2; + uint32 tries = 3; +} + +// --- Replication of State --- +// +// ReplicateStateRequest and ReplicateStatePush allow a new and not-yet-part-of-Raft +// replica to get state from an existing, part-of-Raft replica. By sending a number of +// ..Requests and getting associated ..Responses, the requester will get its Raft log and +// database to a state up to the responder's last committed index. It can then join the +// Raft group with this log/db and become a contributing member. +// +// Requesters move chunk by chunk through the Raft log and the db simultaneously. To do +// this, requesters track cursos pointing to their current location in the raft log +// and db (both initially unset) and provide them on every request. +// +// Responders must ensure +// 1. No uncommitted log entries are returned +// 2. Returned rows will be in the range (req.db_from_key_exclusive, rows[-1]], +// and must reflect the state of the db in that range at the time of the last +// returned log index (resp.entries[-1]) +// +// If a responder has many committed log entries that have already been applied to their db, +// they may have to return no db rows in a response in order to ensure property 2 is met. +// +// Request{} -> +// <- Push{first=oldest responder has, entries=[...], rows=[]} +// <- Push{first=logs_from_idx_inclusive, entries=[...]} +// ... the pusher reaches their commit index, and can now return DB state +// <- Push{first=logs_from_idx_inclusive, entries=[...], rows=[...]} +// <- Push{first=logs_from_idx_inclusive, entries=[...], rows=[...]} +// ... +// <- Push{first=logs_from_idx_inclusive, entries=[...], rows=[...], db_to_end=true} +// <- status=OK +// +// At this time, the requester has all database and log state and may request +// entry into the Raft group. +message ReplicateStateRequest { + uint64 group_id = 1; + uint64 replication_id = 2; +} +message ReplicateStatePush { + uint64 replication_id = 1; + uint64 replication_sequence = 2; + + // Log replication, only committed logs will be returned. + uint64 first_log_idx = 3; + repeated raft.LogEntry entries = 4; + + // Database replication (all rows as of commitment of last row in [entries]) + bool db_to_end = 5; // true if the database range is ..., end_of_db] + repeated bytes rows = 6; // Rows are serialized protos in a database-specific format. + + // Raft membership at the commit index of the source. + // This may be set even if this response doesn't contain + // logs up to the point of the commit idx. + raft.ReplicaGroup committed_membership = 7; +} diff --git a/enclave/proto/raft.proto b/enclave/proto/raft.proto new file mode 100644 index 0000000..5853675 --- /dev/null +++ b/enclave/proto/raft.proto @@ -0,0 +1,76 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +syntax = "proto3"; + +package svr2.raft; +option optimize_for = LITE_RUNTIME; + +message Replica { + bytes peer_id = 1; + bool voting = 2; +} + +// ReplicaGroup contains information on the current configuration (set of +// replicas) for Raft. Importantly, for a particular raft.pb.cc instantiation, +// it must have a deterministic serialization. This means that, while +// serialization might change were the underlying protobuf library version +// to be bumped, the generated code for a static version of the protobuf +// library should be deterministic. In particular, `map` fields should not +// be present in this proto or its children. This determinism is necessary +// since the log's hash chain is updated based on the serialization of this +// proto. +message ReplicaGroup { + repeated Replica replicas = 1; +} + +message RaftMessage { + uint64 group = 1; + uint64 term = 2; + oneof inner { + VoteRequest vote_request = 3; + VoteResponse vote_response = 4; + AppendRequest append_request = 5; + AppendResponse append_response = 6; + bool timeout_now = 7; // force an election timeout on the recipient + }; +} + +message VoteRequest { + uint64 last_log_idx = 1; + uint64 last_log_term = 2; +} + +message VoteResponse { + bool vote_granted = 1; +} + +message AppendRequest { + uint64 prev_log_idx = 1; + uint64 prev_log_term = 2; + uint64 leader_commit = 3; + repeated LogEntry entries = 4; + uint64 leader_promise = 5; +} + +message AppendResponse { + bool success = 1; + uint64 match_idx = 2; + uint64 last_log_idx = 3; + uint64 promise_idx = 4; +} + +message LogEntry { + uint64 term = 1; + oneof inner { + bytes data = 2; + ReplicaGroup membership_change = 3; + } + bytes hash_chain = 4; +} + +message LogLocation { + uint64 term = 1; + uint64 idx = 2; + bytes hash_chain = 3; +} diff --git a/enclave/proto/tests.proto b/enclave/proto/tests.proto new file mode 100644 index 0000000..3c0d8e8 --- /dev/null +++ b/enclave/proto/tests.proto @@ -0,0 +1,11 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +syntax = "proto3"; + +package svr2.tests; +option optimize_for = LITE_RUNTIME; + +message SimplePB { + string str = 1; +} diff --git a/enclave/protobuf b/enclave/protobuf new file mode 160000 index 0000000..dab4d24 --- /dev/null +++ b/enclave/protobuf @@ -0,0 +1 @@ +Subproject commit dab4d24d44eea0f21d6a21a548ee2b8c22b37f4f diff --git a/enclave/protobuf-lite/README.md b/enclave/protobuf-lite/README.md new file mode 100644 index 0000000..1d73705 --- /dev/null +++ b/enclave/protobuf-lite/README.md @@ -0,0 +1,20 @@ +# Compilation of libprotobuf-lite.a + +Rather than rely on libprotobuf to build libprotobuf-lite.a, we just +symlink all necessary files here, then build with our typical +`Makefile.subdir` approach. This makes absolutely sure that we're +only linking to and compiling with the normal mechanisms. + +## Which files? + +If you're a future person that's looking to update the protobuf dependency, +this list of symlinks was found by doing: + +``` +cd ../protobuf +autoreconf -i +./configure +(cd src && make libprotobuf-lite.la) +``` + +and looking at the `CXX` rules that were executed. diff --git a/enclave/protobuf-lite/any_lite.cc b/enclave/protobuf-lite/any_lite.cc new file mode 120000 index 0000000..c498683 --- /dev/null +++ b/enclave/protobuf-lite/any_lite.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/any_lite.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/arena.cc b/enclave/protobuf-lite/arena.cc new file mode 120000 index 0000000..e784660 --- /dev/null +++ b/enclave/protobuf-lite/arena.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/arena.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/arenastring.cc b/enclave/protobuf-lite/arenastring.cc new file mode 120000 index 0000000..1117180 --- /dev/null +++ b/enclave/protobuf-lite/arenastring.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/arenastring.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/arenaz_sampler.cc b/enclave/protobuf-lite/arenaz_sampler.cc new file mode 120000 index 0000000..98358e9 --- /dev/null +++ b/enclave/protobuf-lite/arenaz_sampler.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/arenaz_sampler.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/bytestream.cc b/enclave/protobuf-lite/bytestream.cc new file mode 120000 index 0000000..16a17fa --- /dev/null +++ b/enclave/protobuf-lite/bytestream.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/stubs/bytestream.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/coded_stream.cc b/enclave/protobuf-lite/coded_stream.cc new file mode 120000 index 0000000..98d7f65 --- /dev/null +++ b/enclave/protobuf-lite/coded_stream.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/io/coded_stream.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/common.cc b/enclave/protobuf-lite/common.cc new file mode 120000 index 0000000..554f98d --- /dev/null +++ b/enclave/protobuf-lite/common.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/stubs/common.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/extension_set.cc b/enclave/protobuf-lite/extension_set.cc new file mode 120000 index 0000000..ad3e2fd --- /dev/null +++ b/enclave/protobuf-lite/extension_set.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/extension_set.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/generated_enum_util.cc b/enclave/protobuf-lite/generated_enum_util.cc new file mode 120000 index 0000000..23937b0 --- /dev/null +++ b/enclave/protobuf-lite/generated_enum_util.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/generated_enum_util.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/generated_message_tctable_lite.cc b/enclave/protobuf-lite/generated_message_tctable_lite.cc new file mode 120000 index 0000000..e3a0eaf --- /dev/null +++ b/enclave/protobuf-lite/generated_message_tctable_lite.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/generated_message_tctable_lite.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/generated_message_util.cc b/enclave/protobuf-lite/generated_message_util.cc new file mode 120000 index 0000000..1a5c72f --- /dev/null +++ b/enclave/protobuf-lite/generated_message_util.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/generated_message_util.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/implicit_weak_message.cc b/enclave/protobuf-lite/implicit_weak_message.cc new file mode 120000 index 0000000..1d9800d --- /dev/null +++ b/enclave/protobuf-lite/implicit_weak_message.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/implicit_weak_message.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/inlined_string_field.cc b/enclave/protobuf-lite/inlined_string_field.cc new file mode 120000 index 0000000..a492d64 --- /dev/null +++ b/enclave/protobuf-lite/inlined_string_field.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/inlined_string_field.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/int128.cc b/enclave/protobuf-lite/int128.cc new file mode 120000 index 0000000..f5b767a --- /dev/null +++ b/enclave/protobuf-lite/int128.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/stubs/int128.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/io_win32.cc b/enclave/protobuf-lite/io_win32.cc new file mode 120000 index 0000000..d2edc16 --- /dev/null +++ b/enclave/protobuf-lite/io_win32.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/io/io_win32.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/map.cc b/enclave/protobuf-lite/map.cc new file mode 120000 index 0000000..d390fe8 --- /dev/null +++ b/enclave/protobuf-lite/map.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/map.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/message_lite.cc b/enclave/protobuf-lite/message_lite.cc new file mode 120000 index 0000000..a514c3f --- /dev/null +++ b/enclave/protobuf-lite/message_lite.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/message_lite.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/parse_context.cc b/enclave/protobuf-lite/parse_context.cc new file mode 120000 index 0000000..c4e676d --- /dev/null +++ b/enclave/protobuf-lite/parse_context.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/parse_context.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/repeated_field.cc b/enclave/protobuf-lite/repeated_field.cc new file mode 120000 index 0000000..c3bc781 --- /dev/null +++ b/enclave/protobuf-lite/repeated_field.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/repeated_field.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/repeated_ptr_field.cc b/enclave/protobuf-lite/repeated_ptr_field.cc new file mode 120000 index 0000000..35022e6 --- /dev/null +++ b/enclave/protobuf-lite/repeated_ptr_field.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/repeated_ptr_field.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/status.cc b/enclave/protobuf-lite/status.cc new file mode 120000 index 0000000..a6b2e9d --- /dev/null +++ b/enclave/protobuf-lite/status.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/stubs/status.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/statusor.cc b/enclave/protobuf-lite/statusor.cc new file mode 120000 index 0000000..00c079c --- /dev/null +++ b/enclave/protobuf-lite/statusor.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/stubs/statusor.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/stringpiece.cc b/enclave/protobuf-lite/stringpiece.cc new file mode 120000 index 0000000..40e9110 --- /dev/null +++ b/enclave/protobuf-lite/stringpiece.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/stubs/stringpiece.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/stringprintf.cc b/enclave/protobuf-lite/stringprintf.cc new file mode 120000 index 0000000..e00714f --- /dev/null +++ b/enclave/protobuf-lite/stringprintf.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/stubs/stringprintf.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/strtod.cc b/enclave/protobuf-lite/strtod.cc new file mode 120000 index 0000000..f80909e --- /dev/null +++ b/enclave/protobuf-lite/strtod.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/io/strtod.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/structurally_valid.cc b/enclave/protobuf-lite/structurally_valid.cc new file mode 120000 index 0000000..743040c --- /dev/null +++ b/enclave/protobuf-lite/structurally_valid.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/stubs/structurally_valid.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/strutil.cc b/enclave/protobuf-lite/strutil.cc new file mode 120000 index 0000000..18ef580 --- /dev/null +++ b/enclave/protobuf-lite/strutil.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/stubs/strutil.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/time.cc b/enclave/protobuf-lite/time.cc new file mode 120000 index 0000000..166ce3e --- /dev/null +++ b/enclave/protobuf-lite/time.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/stubs/time.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/wire_format_lite.cc b/enclave/protobuf-lite/wire_format_lite.cc new file mode 120000 index 0000000..f05c70e --- /dev/null +++ b/enclave/protobuf-lite/wire_format_lite.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/wire_format_lite.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/zero_copy_stream.cc b/enclave/protobuf-lite/zero_copy_stream.cc new file mode 120000 index 0000000..3bf66c7 --- /dev/null +++ b/enclave/protobuf-lite/zero_copy_stream.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/io/zero_copy_stream.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/zero_copy_stream_impl.cc b/enclave/protobuf-lite/zero_copy_stream_impl.cc new file mode 120000 index 0000000..003cd3e --- /dev/null +++ b/enclave/protobuf-lite/zero_copy_stream_impl.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc \ No newline at end of file diff --git a/enclave/protobuf-lite/zero_copy_stream_impl_lite.cc b/enclave/protobuf-lite/zero_copy_stream_impl_lite.cc new file mode 120000 index 0000000..e4456fe --- /dev/null +++ b/enclave/protobuf-lite/zero_copy_stream_impl_lite.cc @@ -0,0 +1 @@ +../protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc \ No newline at end of file diff --git a/enclave/queue/queue.h b/enclave/queue/queue.h new file mode 100644 index 0000000..e526e4a --- /dev/null +++ b/enclave/queue/queue.h @@ -0,0 +1,47 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_QUEUE_QUEUE_H__ +#define __SVR2_QUEUE_QUEUE_H__ + +#include +#include +#include +#include "util/macros.h" + +namespace svr2::queue { + +template +class Queue { + public: + Queue(size_t max_size) : max_size_(max_size) {} + + void Push(T val) { + std::unique_lock lock(mu_); + notfull_.wait(lock, [this]{ return d_.size() < max_size_; }); + d_.emplace_back(std::move(val)); + lock.unlock(); + full_.notify_one(); + } + + T Pop() { + std::unique_lock lock(mu_); + full_.wait(lock, [this]{ return d_.size() > 0; }); + T out = std::move(d_.front()); + d_.pop_front(); + lock.unlock(); + notfull_.notify_one(); + return out; + } + + private: + std::mutex mu_; + std::condition_variable full_; + std::condition_variable notfull_; + std::deque d_; + size_t max_size_; +}; + +} // namespace svr2::queue + +#endif // __SVR2_QUEUE_QUEUE_H__ diff --git a/enclave/queue/tests/queue.cc b/enclave/queue/tests/queue.cc new file mode 100644 index 0000000..8a385b0 --- /dev/null +++ b/enclave/queue/tests/queue.cc @@ -0,0 +1,44 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +#include +#include +#include +#include "queue/queue.h" +#include + +namespace svr2::queue { + +class QueueTest : public ::testing::Test {}; + +void QueueReadThread(Queue* q, int n) { + int sum = 0; + for (int i = 0; i < n; i++) { + sum += q->Pop(); + } + ASSERT_EQ(sum, n); +} + +void QueueWriteThread(Queue* q, int n) { + for (int i = 0; i < n; i++) { + q->Push(1); + } +} + +TEST_F(QueueTest, BasicUsage) { + std::vector threads; + Queue q(16); + for (int i = 0; i < 10; i++) { + threads.emplace_back(QueueReadThread, &q, 1000); + } + sleep(1); + for (int i = 0; i < 5; i++) { + threads.emplace_back(QueueWriteThread, &q, 2000); + } + for (int i = 0; i < threads.size(); i++) { + threads[i].join(); + } +} + +} // namespace svr2::queue diff --git a/enclave/raft/internal.h b/enclave/raft/internal.h new file mode 100644 index 0000000..6eb3c9b --- /dev/null +++ b/enclave/raft/internal.h @@ -0,0 +1,84 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_RAFT_INTERNAL_H__ +#define __SVR2_RAFT_INTERNAL_H__ + +#include +#include +#include +#include "peerid/peerid.h" +#include "raft/types.h" +#include "raft/log.h" +#include "raft/membership.h" +#include "util/ticks.h" + +namespace svr2::raft { + +class Raft; // forward declaration + +namespace internal { + +struct ReplicationState { + // \* The next entry to send to each follower. + // VARIABLE nextIndex + LogIdx next_idx; + + // \* The latest entry that each follower has acknowledged is the same as the + // \* leader's. This is used to calculate promiseIndex on the leader. + // VARIABLE matchIndex + LogIdx match_idx; + // The latest entry that each follower has promised. This is used + // to calculate commitIndex on the leader. + LogIdx promise_idx; + + // inflight - this field is very interesting, and is not part of the generic + // Raft protocol. As long as this is set to some LogIdx, we won't send + // additional AppendRequests to this replica. In generic Raft, this would + // not work at all, as a single dropped message would break our ability to + // ever append to its destination replica. However, given that our host-side + // message passing is in-order and lossless (the host will store-and-forward + // our messages, never dropping them, until a message has been received and + // acknowledged), this saves us sending duplicate logs over the network. + // A crucial concern here, though, is that if for some reason a message is + // dropped and we notice it, we must clear this value so that our next + // AppendEntries will go through. + std::optional inflight; + + // send_probe requests that the next AppendEntries request to this peer + // not contain any actual entries, just the log index we think they're + // at. This allows them to correct us without over-sending logs. + bool send_probe; + bool send_heartbeat; + + // the number of ticks since we last got a Raft message from this replica. + util::Ticks last_seen_ticks; +}; + +enum class Role { + FOLLOWER = 1, + CANDIDATE = 2, + LEADER = 3, +}; + +struct FollowerState { + std::optional leader; + util::Ticks election; +}; +struct CandidateState { + // \* The latest entry that each follower has acknowledged is the same as the + // \* leader's. This is used to calculate commitIndex on the leader. + // VARIABLE votesGranted + std::set votes_granted; + util::Ticks election; +}; +struct LeaderState { + std::map followers; + util::Ticks heartbeat; + bool relinquishing; // if true, this leader is trying to become a follower +}; + +} // namespace internal +} // namespace svr2::raft + +#endif // __SVR2_RAFT_INTERNAL_H__ diff --git a/enclave/raft/log.cc b/enclave/raft/log.cc new file mode 100644 index 0000000..31e9018 --- /dev/null +++ b/enclave/raft/log.cc @@ -0,0 +1,178 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "raft/log.h" +#include "peerid/peerid.h" +#include +#include "util/log.h" +#include "metrics/metrics.h" + +namespace svr2::raft { + +// Guess the size of the logentry in bytes in memory, including the +// container (map node and key) holding it. +size_t Log::logentry_bytes_in_log(const LogEntry& e) { + // Estimate size of membership change proto. + size_t mem_change = 0; + if (e.has_membership_change()) { + mem_change += + sizeof(ReplicaGroup) + + // for each replica: + e.membership_change().replicas_size() * ( + // each replica should point to a string of this size + sizeof(peerid::PeerID) + + // plus the size of the replica object itself + sizeof(Replica)); + } + if (e.hash_chain().size()) { + mem_change += e.hash_chain().size() + + sizeof(std::string); + } + return mem_change + + // Size of the value + sizeof(LogEntry) + + // Size of the data on the heap, which should be at least a length and the actual bytes + sizeof(std::string) + e.data().size(); +} + +Log::Log(size_t max_bytes) : oldest_stored_idx_(1), curr_bytes_(0), max_bytes_(max_bytes) { + GAUGE(raft, log_total_size)->Set(max_bytes_); + UpdateMetrics(); +} + +error::Error Log::CancelFrom(LogIdx from_log_idx) { + if (from_log_idx < oldest_stored_idx_) { + return COUNTED_ERROR(Raft_CancelingBeforeFirst); + } + size_t index = from_log_idx - oldest_stored_idx_; + entries_.resize(index); + return error::OK; +} + +Log::Iterator Log::At(LogIdx idx) const { + size_t di = idx < oldest_stored_idx_ ? entries_.size() : idx - oldest_stored_idx_; + return Iterator(this, di); +} + +LogIdx Log::Iterator::Index() const { + if (!Valid()) return 0; + return log_->oldest_stored_idx_ + deque_index_; +} + +bool Log::Iterator::Valid() const { + return deque_index_ < log_->entries_.size(); +} + +const LogEntry* Log::Iterator::Entry() const { + if (!Valid()) return nullptr; + return &log_->entries_[deque_index_]; +} + +TermId Log::Iterator::Term() const { + if (!Valid()) return 0; + return Entry()->term(); +} + +size_t Log::Iterator::SerializedSize() const { + if (!Valid()) return 0; + // We called ByteSizeLong when we appended this log entry, and its + // size can't have changed since, so GetCachedSize will give us the + // correct value. Guaranteed to be >= 1 since we check that term() + // is nonzero. Must return a value <= INT_MAX, since GetCachedSize + // returns an int. + return (size_t) Entry()->GetCachedSize(); +} + +size_t Log::Iterator::MemSize() const { + if (!Valid()) return 0; + return logentry_bytes_in_log(*Entry()); +} + +void Log::Iterator::Next() { + if (Valid()) { ++deque_index_; } +} + +void Log::Iterator::Prev() { + if (Valid()) { --deque_index_; } +} + +LogIdx Log::oldest_stored_idx() const { + if (entries_.size() == 0) { return 0; } + return oldest_stored_idx_; +} + +LogIdx Log::last_idx() const { + if (entries_.size() == 0) { return 0; } + return oldest_stored_idx_ + entries_.size() - 1; +} + +LogIdx Log::last_term() const { + if (entries_.size() == 0) { return 0; } + return At(last_idx()).Term(); +} + +error::Error Log::Append(const LogEntry& log, LogIdx maybe_truncate_to) { + if (log.term() == 0) { + return COUNTED_ERROR(Raft_AppendWithoutTerm); + } + if (log.hash_chain().size() != 32) { + return COUNTED_ERROR(Raft_NoHashChainInAppend); + } + size_t mem = logentry_bytes_in_log(log); + while (curr_bytes_ + mem > max_bytes_) { + if (!RemoveOldestLogOlderThan(maybe_truncate_to)) { + return COUNTED_ERROR(Raft_LogOutOfSpace); + } + } + // Don't allow larger than 2G, since that'll mess up our call to GetCachedSize + // which returns an int. + if (log.ByteSizeLong() > INT_MAX) { + return COUNTED_ERROR(Raft_LogEntryTooLarge); + } + // This creates a copy of the log, which is important since the + // original log we got the reference from may fall out of scope before + // we do. + entries_.emplace_back(log); + // Re-compute byte size, in the new location. + entries_.rbegin()->ByteSizeLong(); + curr_bytes_ += mem; + UpdateMetrics(); + return error::OK; +} + +bool Log::RemoveOldestLogOlderThan(LogIdx truncate_to) { + if (oldest_stored_idx_ >= truncate_to) return false; + size_t mem = logentry_bytes_in_log(entries_.front()); + entries_.pop_front(); + oldest_stored_idx_++; + curr_bytes_ -= mem; + return true; +} + +void Log::UpdateMetrics() { + GAUGE(raft, log_oldest_stored_log_index)->Set(oldest_stored_idx()); + GAUGE(raft, log_last_log_index)->Set(last_idx()); + GAUGE(raft, log_last_log_term)->Set(last_term()); + GAUGE(raft, log_size)->Set(curr_bytes_); + GAUGE(raft, log_entries)->Set(entries_.size()); +} + +bool Log::MostRecentHash(std::array* out) { + for (auto iter = At(last_idx()); iter.Valid(); iter.Prev()) { + if (iter.Entry()->hash_chain().size() == out->size()) { + std::copy(iter.Entry()->hash_chain().cbegin(), iter.Entry()->hash_chain().cend(), out->begin()); + return true; + } + } + return false; +} + +error::Error Log::SetNextIdx(LogIdx idx) { + if (entries_.size()) { + return COUNTED_ERROR(Raft_SetNextOnNonemptyLog); + } + oldest_stored_idx_ = idx; + return error::OK; +} + +} // namespace svr2::raft diff --git a/enclave/raft/log.h b/enclave/raft/log.h new file mode 100644 index 0000000..5209f8a --- /dev/null +++ b/enclave/raft/log.h @@ -0,0 +1,112 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_RAFT_LOG_H__ +#define __SVR2_RAFT_LOG_H__ + +#include +#include +#include "raft/types.h" +#include "proto/error.pb.h" +#include "proto/raft.pb.h" +#include "util/macros.h" + +namespace svr2::raft { + +// Raft log storage. +class Log { + public: + Log(size_t max_bytes); + + class Iterator { + public: + // Returns true if this iterator points to a valid entry. If !Valid, + // other functions will all return default zero-values. + bool Valid() const; + // Which index we point to. + LogIdx Index() const; + // Return the log entry at this index, nullptr if !Valid. + const LogEntry* Entry() const; + // Return the term ID at this index. + TermId Term() const; + // Estimated serialized size of the LogEntry proto. + size_t SerializedSize() const; + // Estimated in-memory size of this log entry. + size_t MemSize() const; + // Move the iterator forward, may invalidate if we're at the end of the log. + // Typical usage: + // + // for (auto iter = log->At(123); iter.Valid(); iter.Next()) { ... } + void Next(); + // Move the iterator backwards, may invalidate if we're at the beginning of the log. + // Typical usage: + // + // for (auto iter = log->At(123); iter.Valid(); iter.Prev()) { ... } + void Prev(); + private: + friend class Log; + Iterator(const Log* log, size_t di) : log_(log), deque_index_(di) {} + const Log* log_; + size_t deque_index_; + }; + // Returns a new iterator. Any change to the log (Append, RemoveOldestLogOlderThan, + // CancelFrom) may invalidate this iterator. + Iterator At(LogIdx idx) const; + + // oldest_stored_idx returns the index of the least recent entry this log stores. + // It's incremented by a successful call to RemoveOldestLogOlderThan. + LogIdx oldest_stored_idx() const; + // last_idx returns the index of the most recent entry this log stores. + // It's incremented by a successful call to Append. + LogIdx last_idx() const; + // next_idx returns the index that a successfully Append'd entry will have. + LogIdx next_idx() const { return last_idx() + 1; } + TermId last_term() const; + size_t log_data_length_bytes() const { return curr_bytes_; } + + // Append a log to the Log. May return one of the following: + // - Raft_LogOutOfSpace: The log is currently full + // - Raft_LogEntryTooLarge: Rejecting the log entry because it's HUGE + // - various other errors? + // While appending this log, we're allowed to truncate old logs up to (but + // not including) `maybe_truncate_to` if we run out of space. We'll only + // return Raft_LogOutOfSpace if this fails to make enough space for the new + // log entry. + error::Error Append(const LogEntry& log, LogIdx maybe_truncate_to); + + // CancelFrom cancels (removes) all logs from the given log index on, + // leaving only entries of [start,from_log_idx) remaining in the log. + // This is necessary in cases where an old leader's uncommitted logs are + // overridden by a new leader. + error::Error CancelFrom(LogIdx from_log_idx); + + // Get the most recent hash chain value from the log. + bool MostRecentHash(std::array* out); + + // If this log is empty, set what the next index will be. This is useful + // in cases where we're replicating an already-truncated log. + error::Error SetNextIdx(LogIdx idx); + + // Return true if there are no log entries in this log. + bool empty() const { return entries_.size() == 0; } + + public_for_test: + static size_t logentry_bytes_in_log(const LogEntry& e); + + private: + // RemoveOldestLogOlderThan removes the oldest log from the Log and returns + // true. It will return false if there is no log older than [truncate_to]. + bool RemoveOldestLogOlderThan(LogIdx truncate_to); + + friend class Iterator; + void UpdateMetrics(); + + std::deque entries_; + LogIdx oldest_stored_idx_; + size_t curr_bytes_; + size_t max_bytes_; +}; + +} // namespace svr2::raft + +#endif // __SVR2_RAFT_LOG_H__ diff --git a/enclave/raft/membership.cc b/enclave/raft/membership.cc new file mode 100644 index 0000000..371a971 --- /dev/null +++ b/enclave/raft/membership.cc @@ -0,0 +1,118 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "raft/membership.h" +#include "util/log.h" +#include "metrics/metrics.h" +#include + +namespace svr2::raft { + +std::pair, error::Error> Membership::FromProto(const ReplicaGroup& group) { + std::unique_ptr out(new Membership()); + + for (const auto& replica : group.replicas()) { + peerid::PeerID p; + error::Error peer_err = p.FromString(replica.peer_id()); + if (peer_err != error::OK) { + return std::make_pair(nullptr, peer_err); + } + if (out->all_replicas_.count(p)) { + return std::make_pair(nullptr, COUNTED_ERROR(Membership_DuplicateReplicaInReplicaGroup)); + } + out->all_replicas_.insert(p); + if (replica.voting()) { out->voting_replicas_.insert(p); } + } + return std::make_pair(std::move(out), error::OK); +} + +std::unique_ptr Membership::First(const peerid::PeerID& me) { + std::unique_ptr out(new Membership()); + out->voting_replicas_.insert(me); + out->all_replicas_.insert(me); + return out; +} + +// Returns the size of the set [a-b], IE: set a with all elements of set b removed from it. +size_t SetDiffSize(const std::set& a, const std::set& b) { + auto a_iter = a.cbegin(); + auto b_iter = b.cbegin(); + size_t out = 0; + while (a_iter != a.cend()) { + if (b_iter == b.cend()) { + ++out; + ++a_iter; + } else if (*a_iter < *b_iter) { + ++a_iter; + ++out; + } else if (*b_iter < *a_iter) { + ++b_iter; + } else { // *a_iter == *b_iter + ++a_iter; + ++b_iter; + } + } + return out; +} + +error::Error Membership::ValidProgressionForLeader( + const peerid::PeerID& leader, + const Membership& from, + const Membership& to, + size_t super_majority) { + if (from.voting_replicas_.size() > super_majority && to.voting_replicas_.size() <= super_majority) { + return COUNTED_ERROR(Membership_SuperMajorityLost); + } + size_t voting_additions = SetDiffSize(to.voting_replicas_, from.voting_replicas_); + std::vector voting_removals; + std::set_difference( + from.voting_replicas_.begin(), from.voting_replicas_.end(), + to.voting_replicas_.begin(), to.voting_replicas_.end(), + std::back_inserter(voting_removals)); + size_t all_additions = SetDiffSize(to.all_replicas_, from.all_replicas_); + std::vector all_removals; + std::set_difference( + from.all_replicas_.begin(), from.all_replicas_.end(), + to.all_replicas_.begin(), to.all_replicas_.end(), + std::back_inserter(all_removals)); + size_t all_changes = voting_additions + voting_removals.size() + all_additions + all_removals.size(); + if (to.voting_replicas_.size() == 0 || to.all_replicas_.size() == 0) { + return COUNTED_ERROR(Membership_EmptySet); + } + if (all_changes == 2 && voting_removals.size() == 1 && all_removals.size() == 1 && voting_removals[0] == all_removals[0]) { + // We allow there to be exactly two changes in the case where they are: + // * remove peer X from voting replicas + // * remove the same peer X from all replicas + // We allow this so that, on shutdown, a replica can request to be fully + // removed from the Raft group in a single step. + } else if (all_changes > 1) { + return COUNTED_ERROR(Membership_TooManyMembershipChanges); + } + if (all_changes == 0) { + return COUNTED_ERROR(Membership_NoMembershipChanges); + } + if (!to.voting_replicas_.count(leader)) { + return COUNTED_ERROR(Membership_LeaderRemovedFromVoting); + } + if (!to.all_replicas_.count(leader)) { + return COUNTED_ERROR(Membership_LeaderRemovedFromAll); + } + if (SetDiffSize(to.all_replicas_, to.voting_replicas_) != to.all_replicas_.size() - to.voting_replicas_.size()) { + return COUNTED_ERROR(Membership_VotingNotSubset); + } + return error::OK; +} + +ReplicaGroup Membership::AsProto() const { + ReplicaGroup g; + for (auto peer : all_replicas_) { + auto r = g.add_replicas(); + peer.ToString(r->mutable_peer_id()); + if (voting_replicas_.count(peer)) { + r->set_voting(true); + } + } + return g; +} + +} // namespace svr2::raft diff --git a/enclave/raft/membership.h b/enclave/raft/membership.h new file mode 100644 index 0000000..6fd5863 --- /dev/null +++ b/enclave/raft/membership.h @@ -0,0 +1,52 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_RAFT_MEMBERSHIP_H__ +#define __SVR2_RAFT_MEMBERSHIP_H__ + +#include +#include "peerid/peerid.h" +#include "proto/error.pb.h" +#include "proto/raft.pb.h" + +namespace svr2::raft { + +size_t SetDiffSize(const std::set& a, const std::set& b); + +class Membership { + public: + DELETE_ASSIGN(Membership); + // First returns a membership from a proto, considering this to be + // the first membership of Raft. + static std::unique_ptr First(const peerid::PeerID& me); + // FromProto does minimal error checking and returns the membership as + // ReplicaGroup describes it. + static std::pair, error::Error> FromProto(const ReplicaGroup& group); + + const std::set& all_replicas() const { return all_replicas_; } + const std::set& voting_replicas() const { return voting_replicas_; } + + // ValidProgressionForLeader checks if a change in membership from [from] to + // [to] should be accepted by raft leader [leader]. If so, returns error::OK. + // If not, returns an error explaining the issue. + static error::Error ValidProgressionForLeader( + const peerid::PeerID& leader, + const Membership& from, + const Membership& to, + size_t super_majority); + + ReplicaGroup AsProto() const; + + public_for_test: + Membership(const Membership& other) = default; // allow copy + private: + Membership() = default; + // all_replicas includes all peers, including me. + std::set all_replicas_; + // voting_replicas includes all replicas that can vote. + std::set voting_replicas_; +}; + +} // namespace svr2::raft + +#endif // __SVR2_RAFT_MEMBERSHIP_H__ diff --git a/enclave/raft/raft.cc b/enclave/raft/raft.cc new file mode 100644 index 0000000..370b06a --- /dev/null +++ b/enclave/raft/raft.cc @@ -0,0 +1,1147 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#include "raft/raft.h" +#include +#include "util/log.h" +#include +#include "metrics/metrics.h" +#include "hmac/hmac.h" +#include "util/constant.h" +#include "util/bytes.h" + +#define MELOG(x) LOG(x) << "(" << me().DebugString() << ") " + +namespace svr2::raft { + +Raft::Raft( + GroupId group, + const peerid::PeerID& me, + std::unique_ptr mem, + std::unique_ptr log, + const enclaveconfig::RaftConfig& config, + bool committed_log, + size_t super_majority) + : group_(group), + me_(me), + membership_(std::move(mem)), + config_(config), + last_applied_(committed_log ? log->last_idx() : 0), + current_term_(0), + log_(std::move(log)), + commit_idx_(committed_log ? log_->last_idx() : 0), + promise_idx_(committed_log ? log_->last_idx() : 0), + super_majority_(super_majority) { + SetRole(internal::Role::FOLLOWER); + follower_.election = RandomElectionTimeout(); + GAUGE(raft, commit_index)->Set(commit_idx_); + GAUGE(raft, promise_index)->Set(promise_idx_); + if (voting() && membership().voting_replicas().size() == 1) { + // This is a one-instance replica and I'm voting, become leader. + context::Context ctx; + ElectionTimeout(&ctx); + MaybeChangeStateAndSendMessages(&ctx); + CHECK(sendable_messages_.size() == 0); + } +} + +size_t Raft::membership_quorum_size() const { + return quorum_size(membership().voting_replicas().size(), super_majority_); +} + +size_t Raft::quorum_size(size_t voting_replicas, size_t super_majority) { + return std::min( + voting_replicas, + (voting_replicas - super_majority) / 2 + 1 + super_majority); +} + +static const char* RoleName(internal::Role r) { + switch (r) { + case internal::Role::LEADER: return "LEADER"; + case internal::Role::CANDIDATE: return "CANDIDATE"; + case internal::Role::FOLLOWER: return "FOLLOWER"; + } + return "UNKNOWN_ROLE"; +} + +void Raft::SetRole(internal::Role r) { + MELOG(INFO) << "Raft switching to role " << RoleName(r) << " at term " << current_term_; + role_ = r; + leader_ = {}; + follower_ = {}; + candidate_ = {}; + GAUGE(raft, role)->Set(static_cast(r)); +} + +std::pair Raft::TakeCommittedLog() { + if (last_applied_ >= commit_idx_) { + return std::make_pair(0, LogEntry()); + } + last_applied_++; + // If it's committed, we should have it. + auto iter = log_->At(last_applied_); + CHECK(iter.Valid()); + LogEntry out(*iter.Entry()); + return std::make_pair(last_applied_, std::move(out)); +} + +std::optional Raft::leader() const { + switch (role_) { + case internal::Role::FOLLOWER: return follower_.leader; + case internal::Role::CANDIDATE: return std::optional(); + case internal::Role::LEADER: return std::optional(me_); + default: CHECK(nullptr == "Raft state without valid role"); + } +} +void Raft::set_election_timeout(util::Ticks t) { + config_.set_election_ticks(t); + follower_.election = std::min(t, follower_.election); + candidate_.election = std::min(t, candidate_.election); +} +void Raft::set_heartbeat_timeout(util::Ticks t) { + config_.set_heartbeat_ticks(t); + leader_.heartbeat = t; +} +void Raft::TimerTick(context::Context* ctx) { + switch (role_) { + case internal::Role::FOLLOWER: + if (0 >= --follower_.election) { + LOG(INFO) << "follower election timeout"; + ElectionTimeout(ctx); + } + break; + case internal::Role::CANDIDATE: + if (0 >= --candidate_.election) { + LOG(INFO) << "candidate election timeout"; + ElectionTimeout(ctx); + } + break; + case internal::Role::LEADER: + for (auto i = leader_.followers.begin(); i != leader_.followers.end(); ++i) { + if (i->second.last_seen_ticks != util::InvalidTicks) { + i->second.last_seen_ticks++; + } + } + if (0 >= --leader_.heartbeat) { + LOG(VERBOSE) << "leader sending heartbeat"; + for (auto i = leader_.followers.begin(); i != leader_.followers.end(); ++i) { + i->second.send_heartbeat = true; + } + leader_.heartbeat = config_.heartbeat_ticks(); + } + break; + } + MaybeChangeStateAndSendMessages(ctx); +} + +void Raft::ResetPeer(context::Context* ctx, const peerid::PeerID& id) { + if (!membership().all_replicas().count(id)) { + // Don't bother doing anything if this isn't one of our Raft peers. + return; + } + switch (role_) { + case internal::Role::FOLLOWER: + return; + case internal::Role::CANDIDATE: + // Since this peer may have lost messages, it may have lost our + // request for a vote, so resend it. + AddSendableMessage(SendableRaftMessage::Reply(id, RequestVoteMessage(ctx))); + return; + case internal::Role::LEADER: { + auto finder = leader_.followers.find(id); + if (finder == leader_.followers.end()) { return; } + internal::ReplicationState& state = finder->second; + state.next_idx = log_->last_idx() + 1; + state.send_probe = true; + state.send_heartbeat = true; + state.inflight.reset(); + // We don't reset last_seen_ticks yet, because we haven't gotten + // a RAFT message from them. But the above means that we will + // send them a message, so we should reset it soon when we get our reply. + } return; + } +} +void Raft::Reconfigure(const enclaveconfig::RaftConfig& config) { + MELOG(INFO) << "reconfiguring raft"; + config_ = config; + set_election_timeout(config_.election_ticks()); + set_heartbeat_timeout(config.heartbeat_ticks()); +} + +void Raft::RelinquishLeadership(context::Context* ctx) { + if (role_ != internal::Role::LEADER || leader_.relinquishing) { return; } + + // Append a noop to the end of the log. Since we then wait for the first + // replica that reaches the end of our log, this makes sure that we find a replica + // that is up and running at the time of this call. Otherwise, it's possible that + // we could have a quiescent Raft group and the replica we choose may no longer + // be responding. + ClientRequestInternal(ctx->Protobuf()); + + leader_.relinquishing = true; + MaybeChangeStateAndSendMessages(ctx); +} + +std::pair Raft::LogAppend(const LogEntry& entry) { + error::Error err = error::OK; + std::unique_ptr new_uncommitted_membership; + if (entry.has_membership_change()) { + auto [mem, err] = Membership::FromProto(entry.membership_change()); + if (err != error::OK) { + COUNTER(raft, logs_append_failure)->Increment(); + LOG(ERROR) << "failing to append invalid membership change in Raft uncommitted log at idx=" + << log_->next_idx() << ", error=" << err; + return std::make_pair(LogLocation(), err); + } + new_uncommitted_membership = std::move(mem); + } + if (error::OK != (err = log_->Append(entry, last_applied_))) { + // Some unhandleable Raft error occurred. + COUNTER(raft, logs_append_failure)->Increment(); + return std::make_pair(LogLocation(), err); + } + LogLocation loc; + loc.set_term(current_term_); + loc.set_idx(log_->last_idx()); + loc.set_hash_chain(entry.hash_chain()); + if (new_uncommitted_membership.get() != nullptr) { + AddUncommittedMembership(loc.idx(), std::move(new_uncommitted_membership)); + } + COUNTER(raft, logs_append_success)->Increment(); + return std::make_pair(loc, error::OK); +} + +// +// -- raft TLA+ parallel code -- +// the code below is so similar to Raft's TLA+ code that the TLA+ is provided +// in the right-hand column for sections which correspond almost exactly. code +// is provided in the same order as the TLA+ so that the reader can follow. +// + +// +// \* Define state transitions +// + +// \* Server i times out and starts a new election. +void Raft::ElectionTimeout(context::Context* ctx) { + if (!voting()) { + LOG(WARNING) << "not a voting member, skipping election request"; + // If we're a non-voting follower, reset our election ticks. + follower_.election = RandomElectionTimeout(); + return; + } + COUNTER(raft, election_timeouts)->Increment(); + switch (role_) { + case internal::Role::CANDIDATE: + case internal::Role::FOLLOWER: { + // /\ state[i] \in {Follower, Candidate} + // /\ currentTerm' = [currentTerm EXCEPT ![i] = currentTerm[i] + 1] + // \* Most implementations would probably just set the local vote + // \* atomically, but messaging localhost for it is weaker. + current_term_++; + GAUGE(raft, current_term)->Set(current_term_); + // /\ votedFor' = [votedFor EXCEPT ![i] = Nil] + voted_for_ = me_; + // /\ votesGranted' = [votesGranted EXCEPT ![i] = {}] + std::set votes_granted; + votes_granted.insert(me_); + + // /\ state' = [state EXCEPT ![i] = Candidate] + SetRole(internal::Role::CANDIDATE); + candidate_ = { + .votes_granted = std::move(votes_granted), + .election = RandomElectionTimeout(), + }; + + MELOG(INFO) << "became candidate at term " << current_term_; + AddSendableMessage(SendableRaftMessage::Broadcast(RequestVoteMessage(ctx))); + break; + } + default: + break; + } +} + +// \* Candidate i sends j a RequestVote request. +RaftMessage* Raft::RequestVoteMessage(context::Context* ctx) { + // RequestVote(i,j) == + // /\ state[i] = Candidate + CHECK(role_ == internal::Role::CANDIDATE); + // /\ Send([ + auto msg = ctx->Protobuf(); + msg->set_group(group_); + // mterm |-> currentTerm[i], + msg->set_term(current_term_); + // mtype |-> RequestVoteRequest, + auto vote_req = msg->mutable_vote_request(); + // mlastLogTerm |-> LastTerm(log[i]), + vote_req->set_last_log_term(log_->last_term()); + // mlastLogIndex |-> Len(log[i]), + vote_req->set_last_log_idx(log_->last_idx()); + return msg; +} + +// \* Leader i sends j an AppendEntries request containing up to 1 entry. +// \* While implementations may want to send more than 1 at a time, this spec uses +// \* just 1 because it minimizes atomic regions without loss of generality. +void Raft::AppendEntries(context::Context* ctx, const peerid::PeerID& peer) { + // AppendEntries(i, j) == + // /\ state[i] = Leader + if (role_ != internal::Role::LEADER) { return; } + // /\ i /= j + if (0 == leader_.followers.count(peer)) { return; } + internal::ReplicationState& replication = leader_.followers[peer]; + uint64_t last_log_idx = log_->last_idx(); + uint64_t next_idx = replication.next_idx; + bool send_entries = last_log_idx >= next_idx && !replication.send_probe; + if (!send_entries && !replication.send_heartbeat && !replication.send_probe) { return; } + if (replication.inflight.has_value()) { return; } + MELOG(VERBOSE) << "sending appendentries to " << peer; + + // /\ LET prevLogIndex == nextIndex[i][j] - 1 + LogIdx prev_log_idx = next_idx - 1; + // prevLogTerm == IF prevLogIndex > 0 THEN + // log[i][prevLogIndex].term + // ELSE + // 0 + uint64_t prev_log_term = prev_log_idx == 0 ? 0 : log_->At(prev_log_idx).Term(); + if (prev_log_term == 0 && prev_log_idx != 0) { + LOG(ERROR) << "missing log " << prev_log_idx << " to send to " << peer; + return; + } + std::vector entries; + LogIdx last_entry = prev_log_idx; + // \* Send up to 1 entry, constrained by the end of the log. + if (send_entries) { + size_t max_entries_size = config_.replication_chunk_bytes(); + uint64_t start_entry = next_idx; + uint64_t limit_entry = std::min(last_log_idx + 1, start_entry+max_entries_size); + // entries == SubSeq(log[i], nextIndex[i][j], lastEntry) + for (uint64_t entry_idx = start_entry; entry_idx < limit_entry; entry_idx++) { + const LogEntry* e = log_->At(entry_idx).Entry(); + if (e == nullptr) { + LOG(ERROR) << "error fetching raft log " << entry_idx << " to send to " << peer; + break; + } + entries.emplace_back(*e); + } + // lastEntry == Min({Len(log[i]), nextIndex[i][j]}) + last_entry = prev_log_idx + entries.size(); + } + + // IN Send([ + auto msg = ctx->Protobuf(); + msg->set_group(group_); + // mterm |-> currentTerm[i], + msg->set_term(current_term_); + // mtype |-> AppendEntriesRequest, + auto append = msg->mutable_append_request(); + // mprevLogIndex |-> prevLogIndex, + append->set_prev_log_idx(prev_log_idx); + // mprevLogTerm |-> prevLogTerm, + append->set_prev_log_term(prev_log_term); + // mentries |-> entries, + for (size_t i = 0; i < entries.size(); i++) { + *append->add_entries() = std::move(entries[i]); + } + // mcommitIndex |-> Min({commitIndex[i], lastEntry}), + append->set_leader_commit(std::min(commit_idx_, last_entry)); + append->set_leader_promise(std::min(promise_idx_, last_entry)); + + replication.send_heartbeat = false; + replication.inflight = last_entry; + AddSendableMessage(SendableRaftMessage::Reply(peer, msg)); +} + +void Raft::MaybeBecomeLeader(context::Context* ctx) { + // BecomeLeader(i) == + // /\ state[i] = Candidate + if (role_ != internal::Role::CANDIDATE) { return; } + // /\ votesGranted[i] \in Quorum + if (candidate_.votes_granted.size() < membership_quorum_size()) { return; } + LOG(INFO) << "becoming leader at " << current_term_; + SetRole(internal::Role::LEADER); + leader_ = { + .heartbeat = 0, + }; + for (auto peer : membership().all_replicas()) { + if (peer == me_) continue; + leader_.followers[peer] = { + // /\ nextIndex' = [nextIndex EXCEPT ![i] = [j \in Server |-> Len(log[i]) + 1]] + .next_idx = log_->next_idx(), + // /\ matchIndex' = [matchIndex EXCEPT ![i] = [j \in Server |-> 0]] + }; + } + // append a noop in the new term to commit entries from past terms (Raft Section 5.4.2) + ClientRequestInternal(ctx->Protobuf()); +} + +void Raft::AddUncommittedMembership( + LogIdx idx, std::unique_ptr uncommitted_membership) { + // Uncommitted memberships should always be stored in log index order. + CHECK(uncommitted_memberships_.size() == 0 + || uncommitted_memberships_.back().first < idx); + uncommitted_memberships_.emplace_back(idx, std::move(uncommitted_membership)); + HandleMembershipChange(); +} + +void Raft::HandleMembershipChange() { + if (role_ == internal::Role::LEADER) { + // If there's any new followers (voting or not) in the new uncommitted + // membership, add them to the current leader's [followers] map. + for (auto peer : membership().all_replicas()) { + if (peer != me_ && leader_.followers.count(peer) == 0) { + // Same as in MaybeBecomeLeader: + leader_.followers[peer] = { + .next_idx = log_->next_idx(), + .send_probe = true, + .send_heartbeat = true, + // We set this to a number high enough that we won't immediately add + // this replica to the set of voting replicas, and low enough that we + // won't immediately kick them for being unresponsive. + .last_seen_ticks = config_.election_ticks(), + }; + } + } + // We probably don't need to remove followers from this leader, but + // it keeps our followers==all_replicas story intact, so it seems + // safer to do it. + for (auto iter = leader_.followers.begin(); iter != leader_.followers.end(); ) { + if (membership().all_replicas().count(iter->first) == 0) { + iter = leader_.followers.erase(iter); + } else { + ++iter; + } + } + } + LOG(INFO) << "Membership change"; + for (auto peer : membership().all_replicas()) { + LOG(INFO) << "* " << peer << (membership().voting_replicas().count(peer) ? " (voting)" : ""); + } +} + +std::array Raft::NextHash(const LogEntry& next_entry) { + std::array previous_hash = {0}; + log_->MostRecentHash(&previous_hash); + // We add prefixes to each input, so that inputs with the same serialization are distinct. + switch (next_entry.inner_case()) { + case LogEntry::kData: + return hmac::HmacSha256(previous_hash, "\001" + next_entry.data()); + case LogEntry::kMembershipChange: { + std::string serialized = next_entry.membership_change().SerializeAsString(); + return hmac::HmacSha256(previous_hash, "\002" + serialized); + } + case LogEntry::INNER_NOT_SET: + return hmac::HmacSha256(previous_hash, "\003"); + } +} + +// \* Leader i receives a client request to add v to the log. +std::pair Raft::ClientRequestInternal(LogEntry* entry) { + // NON-TLA+: Set up hash chain for entry: + auto new_hash = NextHash(*entry); + entry->set_hash_chain(util::ByteArrayToString(new_hash)); + // ClientRequest(i, v) == + // /\ LET entry == [term |-> currentTerm[i], + entry->set_term(current_term_); + // value |-> v] + // /\ state[i] = Leader + if (role_ != internal::Role::LEADER || leader_.relinquishing) { + return std::make_pair(LogLocation(), COUNTED_ERROR(Raft_AppendEntryNotLeader)); + } + // newLog == Append(log[i], entry) + return LogAppend(*entry); + // IN log' = [log EXCEPT ![i] = newLog] +} + +std::pair Raft::ClientRequest(context::Context* ctx, const std::string& data) { + auto entry = ctx->Protobuf(); + *entry->mutable_data() = data; + auto out = ClientRequestInternal(entry); + MaybeChangeStateAndSendMessages(ctx); + return out; +} + +std::pair Raft::ReplicaGroupChange(context::Context* ctx, const ReplicaGroup& g) { + // We will check role again in ClientRequestInternal, but we + // do some checks here that assume leadership, so check here + // before we do those. + if (role_ != internal::Role::LEADER || leader_.relinquishing) { + MELOG(VERBOSE) << "received ReplicaGroupRequest but not leader"; + return std::make_pair(LogLocation(), COUNTED_ERROR(Raft_AppendEntryNotLeader)); + } + // We allow only one uncommitted membership change within uncommitted + // logs. If we already have one, reject this request. + if (uncommitted_memberships_.size()) { + return std::make_pair(LogLocation(), COUNTED_ERROR(Raft_MembershipAlreadyChanging)); + } + // Is this change actually valid? + auto [next, err] = Membership::FromProto(g); + if (err != error::OK) { + return std::make_pair(LogLocation(), err); + } + // Does this change do anything detrimental, like remove the voting rights + // of the current leader, emptying out all voters, etc? + err = Membership::ValidProgressionForLeader(me_, *membership_, *next, super_majority_); + if (err != error::OK) { + return std::make_pair(LogLocation(), err); + } + // If we're here, we're going to attempt to move forward with this request. + auto entry = ctx->Protobuf(); + *entry->mutable_membership_change() = g; + LOG(VERBOSE) << "Requesting raft membership change"; + auto out = ClientRequestInternal(entry); + MaybeChangeStateAndSendMessages(ctx); + return out; +} + +// \* Leader i advances its commitIndex. +// \* This is done as a separate step from handling AppendEntries responses, +// \* in part to minimize atomic regions, and in part so that leaders of +// \* single-server clusters are able to mark entries committed. +void Raft::MaybeAdvanceCommitIndex() { + // AdvanceCommitIndex(i) == + // /\ state[i] = Leader + if (role_ != internal::Role::LEADER) { return; } + // /\ LET \* The set of servers that agree up through index. + // Agree(index) == {i} \cup {k \in Server : matchIndex[i][k] >= index} + // \* The maximum indexes for which a quorum agrees + // agreeIndexes == {index \in 1..Len(log[i]) : Agree(index) \in Quorum} + // \* New value for commitIndex'[i] + // newCommitIndex == IF /\ agreeIndexes /= {} + // /\ log[i][Max(agreeIndexes)].term = currentTerm[i] + // THEN Max(agreeIndexes) + // ELSE commitIndex[i] + // IN commitIndex' = [commitIndex EXCEPT ![i] = newCommitIndex] + std::vector stored; + std::vector promised; + for (auto [peer, replication_state] : leader_.followers) { + if (membership().voting_replicas().count(peer)) { + stored.push_back(replication_state.match_idx); + promised.push_back(replication_state.promise_idx); + } + } + // Sort descending, so that stored[N-1] contains the highest index + // agreed upon by N replicas. + stored.push_back(log_->last_idx()); + std::sort(stored.begin(), stored.end(), [](uint64_t a, uint64_t b){ return a > b; }); + LogIdx new_promise = stored[membership_quorum_size()-1]; // -1 because zero-indexed + bool changed = false; + if (new_promise > promise_idx_) { + LOG(VERBOSE) << "promising logs " << promise_idx_ << " to " << new_promise; + COUNTER(raft, logs_promised)->IncrementBy(new_promise - promise_idx_); + promise_idx_ = new_promise; + GAUGE(raft, promise_index)->Set(promise_idx_); + changed = true; + } + // Don't push promise_idx_ until here, because we may update it above. + // This matters for size-1 raft groups. + promised.push_back(promise_idx_); + std::sort(promised.begin(), promised.end(), [](uint64_t a, uint64_t b){ return a > b; }); + LogIdx new_commit = promised[membership_quorum_size()-1]; // -1 because zero-indexed + if (new_commit > commit_idx_) { + LOG(VERBOSE) << "committing logs " << commit_idx_ << " to " << new_commit; + COUNTER(raft, logs_committed)->IncrementBy(new_commit - commit_idx_); + commit_idx_ = new_commit; + GAUGE(raft, commit_index)->Set(commit_idx_); + // Committing the log has the potential to commit a previously uncomitted + // membership; check that: + MaybeChangeUncommittedMembershipsBasedOnLog(); + changed = true; + } + if (changed) { + // The following line departs slightly from the Raft protocol, erring + // on sending more remote messages in order to keep Raft followers more + // up to date with the LEADER's commit. In stock Raft, the leader is + // the only member of the replica group whose database commits "matter" + // in terms of latency. For example, in an otherwise quiescent cluster, + // if the leader gets a write, it will send that write to followers, get + // back acknowledgements, then commit it locally. But followers won't + // hear about that commit until the leader's next heartbeat, which for + // us is >= 1 tick and could be ~1s or more. Also for us, commits matter + // to followers, since we serve client requests from all replicas, + // and we serve those requests by watching the commit log. + // In practice in an active cluster, this should actually not send + // any more messages than normal, since our (also non-Raft-standard) + // `inflight` stops us from sending out an additional heartbeat to a + // follower while an existing AppendEntries is in flight, and with cluster + // activity we should expect a new log to appear at or before when we + // would clear `inflight` and actually send this heartbeat. But this + // makes understanding and testing out cluster activity much easier, and + // in cases where we do have lulls in traffic, it should keep client latency + // low. + // + // TLDR: when we update commits, we queue up a send_heartbeat for + // all followers in order to allow them to advance their commits without + // waiting for the next TimerTick. + for (auto iter = leader_.followers.begin(); iter != leader_.followers.end(); ++iter) { + iter->second.send_heartbeat = true; + } + } +} + +// +// \* Message handlers +// \* i = recipient, j = sender, m = message +// + +// \* Server i receives a RequestVote request from server j with +// \* m.mterm <= currentTerm[i]. +void Raft::HandleVoteRequest(context::Context* ctx, const TermId& msg_term, const VoteRequest& msg, const peerid::PeerID& from) { + // HandleRequestVoteRequest(i, j, m) == + LogIdx last_log_idx = log_->last_idx(); + TermId last_log_term = log_->last_term(); + // LET logOk == + // \/ m.mlastLogTerm > LastTerm(log[i]) + // \/ /\ m.mlastLogTerm = LastTerm(log[i]) + // /\ m.mlastLogIndex >= Len(log[i]) + bool log_ok = + msg.last_log_term() > last_log_term || ( + msg.last_log_term() == last_log_term && + msg.last_log_idx() >= last_log_idx); + // LET grant == + // /\ m.mterm = currentTerm[i] + // /\ logOk + // /\ votedFor[i] \in {Nil, j} + bool grant = + msg_term == current_term_ && + log_ok && + (!voted_for_.has_value() || *voted_for_ == from); + // IN /\ m.mterm <= currentTerm[i] + if (msg_term > current_term_) { return; } + // /\ \/ grant /\ votedFor' = [votedFor EXCEPT ![i] = j] + // \/ ~grant /\ UNCHANGED votedFor + if (grant) { + voted_for_ = from; + LOG(INFO) << "granted vote at " << current_term_ << " with " << last_log_idx << " at " << last_log_term << " for node " << from << " with " << msg.last_log_idx() << " at " << msg.last_log_term(); + // if we're a follower, reset our election ticks. + follower_.election = RandomElectionTimeout(); + } else if (msg_term != current_term_) { + LOG(INFO) << "ignored vote request with " << msg_term << " < current " << current_term_; + } else if (voted_for_.has_value()) { + LOG(INFO) << "rejected vote at " << current_term_ << " for node " << from << " as already voted for " << voted_for_->DebugString(); + } else { + LOG(INFO) << "rejected vote at " << current_term_ << " with " << last_log_idx << " at " << last_log_term << " for node " << from << " at " << msg_term << " with " << msg.last_log_idx() << " at " << msg.last_log_term(); + } + // /\ Reply([ + auto resp = ctx->Protobuf(); + resp->set_group(group_); + // mterm |-> currentTerm[i], + resp->set_term(current_term_); + // mtype |-> RequestVoteResponse, + auto vote_resp = resp->mutable_vote_response(); + // mvoteGranted |-> grant, + vote_resp->set_vote_granted(grant); + AddSendableMessage(SendableRaftMessage::Reply(from, resp)); +} + +// \* Server i receives a RequestVote response from server j with +// \* m.mterm = currentTerm[i]. +void Raft::HandleVoteResponse(context::Context* ctx, const TermId& msg_term, const VoteResponse& msg, const peerid::PeerID& from) { + // HandleRequestVoteResponse(i, j, m) == + // /\ m.mterm = currentTerm[i] + if (msg_term != current_term_) { return; } + if (role_ != internal::Role::CANDIDATE) { return; } + if (msg.vote_granted()) { + if (membership().voting_replicas().count(from)) { + // /\ \/ /\ m.mvoteGranted + // /\ votesGranted' = [votesGranted EXCEPT ![i] = votesGranted[i] \cup {j}] + candidate_.votes_granted.insert(from); + MELOG(VERBOSE) << "accepted vote from " << from; + } else { + MELOG(VERBOSE) << "ignored vote from non-voting member " << from; + } + } else { + // \/ /\ ~m.mvoteGranted /\ UNCHANGED <> + MELOG(INFO) << "received vote rejected from " << from << " at " << current_term_; + } +} + +// \* Server i receives an AppendEntries request from server j with +// \* m.mterm <= currentTerm[i]. This just handles m.entries of length 0 or 1, but +// \* implementations could safely accept more by treating them the same as +// \* multiple independent requests of 1 entry. +void Raft::HandleAppendRequest(context::Context* ctx, const TermId& msg_term, const AppendRequest& msg, const peerid::PeerID& from) { + uint64_t prev_log_idx = msg.prev_log_idx(); + uint64_t msg_prev_log_term = msg.prev_log_term(); + uint64_t our_prev_log_term = log_->At(msg.prev_log_idx()).Term(); + // LET logOk == \/ m.mprevLogIndex = 0 + // \/ /\ m.mprevLogIndex > 0 /\ m.mprevLogIndex <= Len(log[i]) /\ m.mprevLogTerm = log[i][m.mprevLogIndex].term + bool log_ok = prev_log_idx == 0 || msg_prev_log_term == our_prev_log_term; + + // IN /\ m.mterm <= currentTerm[i] + // /\ \/ \* return to follower state + if (msg_term > current_term_) { return; } + + if (msg_term == current_term_) { + // /\ m.mterm = currentTerm[i] + switch (role_) { + case internal::Role::CANDIDATE: { + // /\ state[i] = Candidate + // /\ state' = [state EXCEPT ![i] = Follower] + SetRole(internal::Role::FOLLOWER); + follower_ = { + .leader = from, + .election = RandomElectionTimeout(), + }; + MELOG(INFO) << "dropped candidacy, became follower at " << current_term_ << " of " << from; + } break; + case internal::Role::FOLLOWER: + if (!follower_.leader.has_value()) { + MELOG(INFO) << "became follower at " << current_term_ << " of " << from; + } + follower_.leader = from; + follower_.election = RandomElectionTimeout(); + break; + case internal::Role::LEADER: + return; + } + } + // \/ /\ \* reject request + // \/ m.mterm < currentTerm[i] + // \/ /\ m.mterm = currentTerm[i] + // /\ state[i] = Follower + // /\ \lnot logOk + if (msg_term < current_term_ || ( + msg_term == current_term_ && + role_ == internal::Role::FOLLOWER && + !log_ok)) { + LogIdx our_last_idx = log_->last_idx(); + if (msg_term < current_term_) { + LOG(INFO) << "ignored message with " << msg_term << " < current " << current_term_; + } else if (our_prev_log_term > 0) { + LOG(WARNING) << "rejected append from " << from << " with " << prev_log_idx << " at " << msg_prev_log_term << ", we have " << our_prev_log_term; + } else { + LOG(INFO) << "rejected append from " << from << " with " << prev_log_idx << ", we are behind at " << our_last_idx; + } + + // /\ Reply([ + auto out = ctx->Protobuf(); + out->set_group(group_); + // mterm |-> currentTerm[i], + out->set_term(current_term_); + // mtype |-> AppendEntriesResponse, + auto append = out->mutable_append_response(); + // msuccess |-> FALSE, + append->set_success(false); + // mmatchIndex |-> 0, + // We send our commit index as the last index we know we matched. If we committed + // up to a point in time, we know we match with the rest of the Raft group up to + // that index, so this should be safe. + append->set_match_idx(commit_idx_); + append->set_last_log_idx(our_last_idx); + append->set_promise_idx(promise_idx_); + AddSendableMessage(SendableRaftMessage::Reply(from, out)); + return; + } + // \/ \* accept request + // /\ m.mterm = currentTerm[i] + // /\ state[i] = Follower + // /\ logOk + // ... and the TLA+ that follows doesn't correspond to procedural code well + // find point of log conflict + CHECK(msg_term == current_term_); + CHECK(role_ == internal::Role::FOLLOWER); + CHECK(log_ok); + uint64_t last_processed_idx = prev_log_idx; + for (int i = 0; i < msg.entries_size(); i++) { + uint64_t msg_entry_log_idx = prev_log_idx + i + 1; + const LogEntry& msg_entry = msg.entries(i); + TermId our_idx_term = log_->At(msg_entry_log_idx).Term(); + if (our_idx_term != 0 && our_idx_term != msg_entry.term()) { + if (msg_entry_log_idx <= commit_idx_) { + LOG(WARNING) << "mismatch prior to commit: " << msg_entry_log_idx << " <= " << commit_idx_; + break; + } else if (msg_entry_log_idx <= promise_idx_) { + LOG(WARNING) << "mismatch prior to promise: " << msg_entry_log_idx << " <= " << promise_idx_; + break; + } else if (error::OK != log_->CancelFrom(msg_entry_log_idx)) { + LOG(WARNING) << "failed to cancel logs from " << msg_entry_log_idx; + break; + } + // CancelFrom(msg_entry_log_idx) has the potential to chop off an + // uncommitted membership from the end of the log; check that: + MaybeChangeUncommittedMembershipsBasedOnLog(); + // If this succeeds, the next if statement should always be true. + } + LogIdx last = log_->last_idx(); + if (msg_entry_log_idx == last + 1) { + auto next_hash = NextHash(msg_entry); + if (!util::ConstantTimeEquals(next_hash, msg_entry.hash_chain())) { + LOG(WARNING) << "failed to append log: hash chain mismatch at " << msg_entry_log_idx; + break; + } + auto [loc, err] = LogAppend(msg_entry); + if (err != error::OK) { + LOG(WARNING) << "failed to append log " << msg_entry_log_idx; + break; + } else { + LOG(VERBOSE) << "appended log index " << msg_entry_log_idx; + } + } + last_processed_idx = msg_entry_log_idx; + } + + LogIdx leader_commit = std::min(msg.leader_commit(), last_processed_idx); + LogIdx leader_promise = std::min(msg.leader_promise(), last_processed_idx); + LOG(DEBUG) << "commit=" << leader_commit << " lcommit=" << msg.leader_commit() + << " promise=" << leader_promise << " lpromise=" << msg.leader_promise() + << " last=" << last_processed_idx; + // TLA+... and we're back! + // /\ commitIndex' = [commitIndex EXCEPT ![i] = m.mcommitIndex] + if (leader_commit > commit_idx_) { + LOG(VERBOSE) << "committed transactions from " << commit_idx_ << " to " << leader_commit; + COUNTER(raft, logs_committed)->IncrementBy(leader_commit - commit_idx_); + commit_idx_ = leader_commit; + GAUGE(raft, commit_index)->Set(commit_idx_); + // Updating the commit index has the potential to commit an uncommitted + // membership; check that: + MaybeChangeUncommittedMembershipsBasedOnLog(); + } + if (leader_promise > promise_idx_) { + LOG(VERBOSE) << "promised transactions from " << promise_idx_ << " to " << leader_promise; + COUNTER(raft, logs_promised)->IncrementBy(leader_promise - promise_idx_); + promise_idx_ = leader_promise; + GAUGE(raft, promise_index)->Set(promise_idx_); + } + + auto out = ctx->Protobuf(); + // /\ Reply([ + out->set_group(group_); + // mterm |-> currentTerm[i], + out->set_term(current_term_); + // mtype |-> AppendEntriesResponse, + auto append = out->mutable_append_response(); + // msuccess |-> TRUE, + append->set_success(true); + // mmatchIndex |-> m.mprevLogIndex + Len(m.mentries), + append->set_match_idx(last_processed_idx); + append->set_promise_idx(promise_idx_); + append->set_last_log_idx(log_->last_idx()); + AddSendableMessage(SendableRaftMessage::Reply(from, out)); +} + +void Raft::MaybeChangeUncommittedMembershipsBasedOnLog() { + bool changed = false; + // We may have committed some of the previously uncommitted membership + // changes by moving the commit index forward; pop them off the front. + while (uncommitted_memberships_.size() > 0 + && uncommitted_memberships_.front().first <= commit_idx_) { + auto f = uncommitted_memberships_.begin(); + LOG(VERBOSE) << "promoting committed membership at " << f->first; + membership_ = std::move(f->second); + uncommitted_memberships_.pop_front(); + changed = true; + } + // We may have rolled back the log via CancelFrom, chopping some + // uncommitted memberships off the back. Remove them. + while (uncommitted_memberships_.size() > 0 + && uncommitted_memberships_.back().first > log_->last_idx()) { + LOG(VERBOSE) << "discarding Uncommitted membership at " << uncommitted_memberships_.back().first; + uncommitted_memberships_.pop_back(); + changed = true; + } + // If we've changed our uncommitted memberships in any way + // that may have affected the active membership we should use, + // handle those changes. + if (changed) { HandleMembershipChange(); } +} + +// \* Server i receives an AppendEntries response from server j with +// \* m.mterm = currentTerm[i]. +void Raft::HandleAppendResponse(context::Context* ctx, const TermId& msg_term, const AppendResponse& msg, const peerid::PeerID& from) { + // HandleAppendEntriesResponse(i, j, m) == + // /\ m.mterm = currentTerm[i] + if (msg_term != current_term_) { return; } + if (role_ != internal::Role::LEADER) { return; } + if (leader_.followers.count(from) == 0) { return; } + internal::ReplicationState& replication = leader_.followers[from]; + if (msg.success()) { + // /\ \/ /\ m.msuccess \* successful + if (replication.inflight.has_value() && msg.match_idx() >= (*replication.inflight)) { + replication.inflight.reset(); + } + if (msg.match_idx() + 1 > replication.next_idx) { + // /\ nextIndex' = [nextIndex EXCEPT ![i][j] = m.mmatchIndex + 1] + replication.next_idx = msg.match_idx() + 1; + } + if (msg.match_idx() > replication.match_idx) { + // /\ matchIndex' = [matchIndex EXCEPT ![i][j] = m.mmatchIndex] + replication.match_idx = msg.match_idx(); + } + if (msg.promise_idx() > replication.promise_idx) { + replication.promise_idx = msg.promise_idx(); + } + replication.send_probe = false; + return; + } + // \/ /\ \lnot m.msuccess \* not successful + if (replication.send_probe) { + LOG(VERBOSE) << "received probe append rejection at " << replication.next_idx << " from " << from << " having " << msg.last_log_idx(); + } else { + LOG(INFO) << "received append rejection at " << replication.next_idx << " from " << from << " having " << msg.last_log_idx(); + } + // /\ nextIndex' = [nextIndex EXCEPT ![i][j] = Max({nextIndex[i][j] - 1, 1})] + replication.next_idx = std::max( + msg.match_idx() + 1, + std::min( + replication.next_idx - 1, + msg.last_log_idx() + 1)); + replication.send_probe = true; + replication.inflight.reset(); + uint64_t chunk_size_remaining = config_.replication_chunk_bytes(); + const uint64_t overflow = (uint64_t(0)) - 1; + for (uint64_t next_idx = replication.next_idx - 1; next_idx != overflow; next_idx--) { + if (next_idx <= msg.match_idx()) { break; } + size_t log_entry_size = log_->At(replication.next_idx).SerializedSize(); + if (log_entry_size > chunk_size_remaining) { break; } + chunk_size_remaining -= log_entry_size; + replication.next_idx = next_idx; + } +} + +void Raft::AddSendableMessage(SendableRaftMessage msg) { + if (msg.to().has_value()) { + // Make sure we're not looping messages + CHECK(*msg.to() != me_); + } else { + // Don't bother adding a broadcast message if we're the only one in the group. + if (membership().all_replicas().size() == 1 && membership().all_replicas().count(me_)) { + return; + } + } + sendable_messages_.push_back(msg); +} + +// \* Any RPC with a newer term causes the recipient to advance its term first. +void Raft::UpdateTerm(const peerid::PeerID& from, const RaftMessage& msg) { + // UpdateTerm(i, j, m) == + // /\ m.mterm > currentTerm[i] + if (msg.term() <= current_term_) { return; } + LOG(INFO) << "becoming follower at " << msg.term() << " (from " << current_term_ << ") due to message from " << from; + // /\ currentTerm' = [currentTerm EXCEPT ![i] = m.mterm] + COUNTER(raft, term_updated)->Increment(); + COUNTER(raft, term_increments)->IncrementBy(msg.term() - current_term_); + current_term_ = msg.term(); + GAUGE(raft, current_term)->Set(current_term_); + // /\ state' = [state EXCEPT ![i] = Follower] + util::Ticks new_election_ticks; + switch (role_) { + case internal::Role::FOLLOWER: + new_election_ticks = follower_.election; + break; + case internal::Role::CANDIDATE: + new_election_ticks = candidate_.election; + break; + default: // LEADER + new_election_ticks = RandomElectionTimeout(); + } + SetRole(internal::Role::FOLLOWER); + follower_ = { + .election = new_election_ticks, + }; + // /\ votedFor' = [votedFor EXCEPT ![i] = Nil] + voted_for_.reset(); +} + +// \* Responses with stale terms are ignored. +bool Raft::ShouldDropResponseDueToStaleTerm(const peerid::PeerID& from, const RaftMessage& msg) { + // DropStaleResponse(i, j, m) == + // /\ m.mterm < currentTerm[i] + if (msg.term() < current_term_) { + // /\ Discard(m) + LOG(INFO) << "ignoring message with " << msg.term() << " < current " << current_term_ << " from " << from; + return true; + } + return false; +} + +// #* Receive a message. +void Raft::Receive(context::Context* ctx, const RaftMessage& msg, const peerid::PeerID& from) { + // Receive(m) == + if (msg.group() != group_) { + LOG(ERROR) << "received raft message from " << from << " for wrong group " << msg.group(); + return; + } + if (membership().all_replicas().count(from) == 0) { + LOG(ERROR) << "message from non-peer " << from; + return; + } + // IN \* Any RPC with a newer term causes the recipient to advance + // \* its term first. Responses with stale terms are ignored. + // \/ UpdateTerm(i, j, m) + UpdateTerm(from, msg); + if (role_ == internal::Role::LEADER) { + auto f = leader_.followers.find(from); + if (f != leader_.followers.end()) { + f->second.last_seen_ticks = 0; + } + } + switch (msg.inner_case()) { + case RaftMessage::kVoteRequest: + // \/ /\ m.mtype = RequestVoteRequest + // /\ HandleRequestVoteRequest(i, j, m) + COUNTER(raft, vote_requests_received)->Increment(); + LOG(VERBOSE) << "HandleVoteRequest"; + HandleVoteRequest(ctx, msg.term(), msg.vote_request(), from); + break; + case RaftMessage::kVoteResponse: + // \/ /\ m.mtype = RequestVoteResponse + // /\ \/ DropStaleResponse(i, j, m) + COUNTER(raft, vote_responses_received)->Increment(); + if (ShouldDropResponseDueToStaleTerm(from, msg)) { break; } + // \/ HandleRequestVoteResponse(i, j, m) + LOG(VERBOSE) << "HandleVoteResponse"; + HandleVoteResponse(ctx, msg.term(), msg.vote_response(), from); + break; + case RaftMessage::kAppendRequest: + // \/ /\ m.mtype = AppendEntriesRequest + // /\ HandleAppendEntriesRequest(i, j, m) + COUNTER(raft, append_requests_received)->Increment(); + LOG(VERBOSE) << "HandleAppendRequest"; + HandleAppendRequest(ctx, msg.term(), msg.append_request(), from); + break; + case RaftMessage::kAppendResponse: + // \/ /\ m.mtype = AppendEntriesResponse + // /\ \/ DropStaleResponse(i, j, m) + COUNTER(raft, append_responses_received)->Increment(); + if (ShouldDropResponseDueToStaleTerm(from, msg)) { break; } + // \/ HandleAppendEntriesResponse(i, j, m) + LOG(VERBOSE) << "HandleAppendResponse"; + HandleAppendResponse(ctx, msg.term(), msg.append_response(), from); + break; + case RaftMessage::kTimeoutNow: + COUNTER(raft, timeout_nows_received)->Increment(); + if (ShouldDropResponseDueToStaleTerm(from, msg)) { break; } + LOG(VERBOSE) << "TimeoutNow"; + ElectionTimeout(ctx); + break; + case RaftMessage::INNER_NOT_SET: + COUNTER(raft, invalid_requests_received)->Increment(); + LOG(ERROR) << "unhandled message case from " << from; + break; + } + MaybeChangeStateAndSendMessages(ctx); +} + +void Raft::MaybeChangeStateAndSendMessages(context::Context* ctx) { + MaybeBecomeLeader(ctx); + MaybeAdvanceCommitIndex(); + for (auto peer : membership().all_replicas()) { + if (peer == me_) { continue; } + AppendEntries(ctx, peer); + } + if (role_ == internal::Role::LEADER && leader_.relinquishing) { + TryToRelinquishLeadership(ctx); + } +} + +void Raft::TryToRelinquishLeadership(context::Context* ctx) { + bool relinquishing = false; + peerid::PeerID next; + for (auto peer : membership().voting_replicas()) { + if (peer == me_) { continue; } + auto iter = leader_.followers.find(peer); + if (iter == leader_.followers.end()) { continue; } + const internal::ReplicationState& state = iter->second; + if (state.match_idx == log_->last_idx()) { + next = peer; + relinquishing = true; + break; + } + } + if (relinquishing) { + // Finally, a worthy successor. Request that it immediately execute an election timeout to + // become the new leader. + LOG(INFO) << "Relinquishing leadership to " << next; + auto msg = ctx->Protobuf(); + msg->set_group(group_); + msg->set_term(current_term_); + msg->set_timeout_now(true); + AddSendableMessage(SendableRaftMessage::Reply(next, msg)); + // We've relinquished leadership; become a follower at our current term. + SetRole(internal::Role::FOLLOWER); + follower_ = { + .election = RandomElectionTimeout(), + }; + } +} + +util::Ticks Raft::RandomElectionTimeout() const { + return config_.election_ticks() + rand() % config_.election_ticks(); +} + +std::string MsgStr(const RaftMessage& msg) { + std::stringstream ss; + ss << "group:" << msg.group() << " term:" << msg.term(); + switch (msg.inner_case()) { + case RaftMessage::kVoteRequest: { + auto m = msg.vote_request(); + ss << " vote_request:{ last_log_idx:" << m.last_log_idx() << " last_log_term:" << m.last_log_term() << " }"; + } break; + case RaftMessage::kVoteResponse: { + auto m = msg.vote_response(); + ss << " vote_response:{ vote_granted:" << m.vote_granted() << " }"; + } break; + case RaftMessage::kAppendRequest: { + auto m = msg.append_request(); + ss << " append_request:{ prev_log_idx:" << m.prev_log_idx() + << " prev_log_term:" << m.prev_log_term() + << " leader_commit:" << m.leader_commit() + << " leader_promise:" << m.leader_promise(); + for (int i = 0; i < m.entries_size(); i++) { + ss << " entries:{ term=" << m.entries(i).term() << " }"; + } + ss << " }"; + } break; + case RaftMessage::kAppendResponse: { + auto m = msg.append_response(); + ss << " append_response:{ success:" << m.success() + << " match_idx:" << m.match_idx() + << " promise_idx:" << m.promise_idx() + << " last_log_idx:" << m.last_log_idx() << " }"; + } break; + case RaftMessage::kTimeoutNow: { + ss << " timeout_now:" << msg.timeout_now(); + } break; + case RaftMessage::INNER_NOT_SET: + ss << "INNER_NOT_SET"; + break; + } + return ss.str(); +} + +const Membership& Raft::membership() const { + // If we have any uncommitted memberships, use the most recent. + if (uncommitted_memberships_.size()) { + return *uncommitted_memberships_.back().second; + } + // If not, use the canonical last-committed one. + return *membership_; +} + +util::Ticks Raft::last_seen_ticks(const peerid::PeerID& follower) const { + if (role_ != internal::Role::LEADER) { return util::InvalidTicks; } + auto f = leader_.followers.find(follower); + if (f == leader_.followers.end()) { return util::InvalidTicks; } + return f->second.last_seen_ticks; +} + +// Precondition: follower_id is the id of a peer in the list of followers +// and is not this core's id. +error::Error Raft::FollowerReplicationStatus(const peerid::PeerID& follower, EnclavePeerReplicationStatus* status) const { + CHECK(role_ == internal::Role::LEADER); + auto f = leader_.followers.find(follower); + if(f == leader_.followers.end()) { + return error::OK; + } + status->set_next_index(f->second.next_idx); + status->set_match_index(f->second.match_idx); + if(f->second.inflight.has_value()) { + status->set_inflight_index(f->second.inflight.value()); + } + status->set_probing(f->second.send_probe); + return error::OK; +} + +} // namespace svr2::raft diff --git a/enclave/raft/raft.h b/enclave/raft/raft.h new file mode 100644 index 0000000..37c9759 --- /dev/null +++ b/enclave/raft/raft.h @@ -0,0 +1,289 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_RAFT_RAFT_H__ +#define __SVR2_RAFT_RAFT_H__ + +#include +#include +#include +#include +#include "peerid/peerid.h" +#include "proto/error.pb.h" +#include "proto/raft.pb.h" +#include "proto/msgs.pb.h" +#include "util/ticks.h" +#include "raft/types.h" +#include "raft/log.h" +#include "raft/internal.h" +#include "raft/membership.h" +#include "context/context.h" + +namespace svr2::raft { + +// MsgStr returns a debug string of the contents of [msg]. +std::string MsgStr(const RaftMessage& msg); + +// SendableRaftMessage wraps a message that should be sent out to one +// or a set of other Raft instances. Messages are either broadcast, +// which should be sent to all `peers()` of the Raft instance, or +// targetted, which should be sent to a single instance. If targetted, +// `to().has_value()` will be true. +class SendableRaftMessage { + public: + static SendableRaftMessage Broadcast(RaftMessage* msg) { + return SendableRaftMessage(msg, std::optional()); + } + static SendableRaftMessage Reply(const peerid::PeerID& to, RaftMessage* msg) { + return SendableRaftMessage(msg, to); + } + const RaftMessage& message() { return *message_; } + // If `!to().has_value()`, this is a broadcast message and should be + // sent to all `raft.peers()`. + const std::optional& to() { return to_; } + private: + SendableRaftMessage(RaftMessage* msg, std::optional t) + : message_(msg), to_(t) {} + RaftMessage* message_; + // In the original rust Raft code, this was `from`, in a `Reply` enum. + std::optional to_; +}; + +// Raft provides an implementation of the Raft protocol. +// This implementation is not safe for concurrent access. +// +// These are the major functions used to do Raft-y things: +// +// Requesting and receiving actual log entries: +// ClientRequest - request that an entry be added to the log +// TakeCommittedLog - return the next log entry that's been committed +// Internal Raft stuff: +// Receive - receive a message from another Raft +// SendableMessages - get any messages to send to other Raft +// TimerTick - the inevitable march of time +// +// A creator of this class MUST: +// +// - regularly call TimerTick +// - call Receive whenever another Raft sends it a message +// - regularly call TakeCommittedLog and process the output +// - call SendableMessages after each call that takes a context::Context* and +// consume the results before that context falls out of scope. +// +// A creator of this class MAY: +// +// - call ClientRequest to request that entries be appended to the canonical log +class Raft { + public: + DELETE_COPY_AND_ASSIGN(Raft); + Raft( + GroupId group, + const peerid::PeerID& me, + std::unique_ptr membership, + std::unique_ptr log, + const enclaveconfig::RaftConfig& config, + bool committed_log, + size_t super_majority); + + // Simple getters + + // group_id contains a unique group identifier that allows the Raft instance + // to make sure it's not accidentally talking to a different set of raft + // servers than it thinks it is. That way madness lies. + const GroupId& group_id() const { return group_; } + // last_applied returns the log index of the last log that has been requested, + // but which may or may not be committed. + const LogIdx& last_applied() const { return last_applied_; } + // commit_idx returns the log index of the last committed log. This should + // monotonically increase. + const LogIdx& commit_idx() const { return commit_idx_; } + // log returns a const reference to this Raft's underlying Log. Note that Log + // is not safe for concurrent access, so should not be accessed concurretly + // with function calls on this Raft. + const Log& log() const { return *log_; } + // all_replicas returns the set of peer IDs for other members of this Raft's group. + // It not contain the ID for this Raft. + const std::set& all_replicas() const { return membership().all_replicas(); } + const std::set peers() const { + std::set out = membership().all_replicas(); + out.erase(me_); + return out; + } + const Membership& committed_membership() const { return *membership_; } + const peerid::PeerID& me() const { return me_; } + // is_leader returns true when this Raft thinks it is the leader of the + // Raft group. + bool is_leader() const { return role_ == internal::Role::LEADER; } + // leader returns the suspected current leader of this Raft group. + std::optional leader() const; + // current_term returns the current Raft term. + const TermId& current_term() const { return current_term_; } + // quorum_size returns the size of the smallest majority among this + // Raft and its voting peers. + static size_t quorum_size(size_t voting_replicas, size_t super_majority); + size_t membership_quorum_size() const; + // voting() returns true if we believe we are a voting member of the current + // replica group. + bool voting() const { return membership().voting_replicas().count(me_); } + // If this is the leader, return the number of ticks ago when we saw a + // message from the given follower. If not leader or follower not found, + // returns InvalidTicks. + util::Ticks last_seen_ticks(const peerid::PeerID& follower) const; + const enclaveconfig::RaftConfig& config() const { return config_; } + error::Error FollowerReplicationStatus(const peerid::PeerID& follower, EnclavePeerReplicationStatus* status) const; + + // Simple setters + void set_replication_chunk_size(size_t s) { config_.set_replication_chunk_bytes(s); } + + // More complicated functions. For each function that takes a context::Context, + // SendableMessages() must be called after that function completes and before + // that context falls out of scope. + + // Request that a log entry containing the given data be added to the Raft log. + // Requires that `is_leader()` is true. + // + // If successful, this log returns the location where the log _may_ be + // committed. You can tell if the log was successfully added if TakeCommittedLog + // returns a log entry with a matching location (term+idx). + std::pair ClientRequest(context::Context* ctx, const std::string& data); + // Request that a new replica group configuration be adopted by the Raft + // group. Requires that `is_leader()` is true, and that the configuration + // is an acceptable next configuration from the current one. + std::pair ReplicaGroupChange(context::Context* ctx, const ReplicaGroup& g); + // Receive a Raft message from another replica. + // Send messages from SendableMessages after this call. + void Receive(context::Context* ctx, const RaftMessage& msg, const peerid::PeerID& from); + // Tick the timer. This code currently treats each call to this function + // as a single tick. Note that this does not currently correlate at all + // with any real-time measure (it's not a second, per se). + // Send messages from SendableMessages after this call. + void TimerTick(context::Context* ctx); + // ResetPeer lets this Raft instance know that the given peer ID + // may have lost some of the messages we sent to it previously. + void ResetPeer(context::Context* ctx, const peerid::PeerID& id); + // Reconfigure sets the RaftConfig to a new value. + void Reconfigure(const enclaveconfig::RaftConfig& config); + // If I'm the leader, attempt to pawn that responsibility off on someone else. + void RelinquishLeadership(context::Context* ctx); + + // Return the list of messages that should be sent to other peers. + std::vector SendableMessages() { return std::move(sendable_messages_); } + + // Pop the next committed log entry off the list, if there is one. + // On success, LogIdx will be nonzero and LogEntry will be filled in + // If there is no new committed log, LogIdx will be zero and LogEntry + // will be empty. + std::pair TakeCommittedLog(); + + const Membership& membership() const; + + private: + void set_heartbeat_timeout(util::Ticks t); + void set_election_timeout(util::Ticks t); + + // MaybeBecomeLeader sometimes wants to append a log entry. This call + // allows it to do so without recursing MaybeChangeStateAndSendMessages. + std::pair ClientRequestInternal(LogEntry* entry); + // Set role and clear all current role state. + void SetRole(internal::Role r); + // Get the current leader as understood by this Raft, if there is one. + std::optional Leader() const; + // Append the given entry to the log. + std::pair LogAppend(const LogEntry& entry); + // Called by TimerTick() when an election timeout occurs to start a new election. + void ElectionTimeout(context::Context* ctx); + // Returns a new #ticks to wait before the next election, randomly (weak) in range + // [election_timeout_, election_timeout_*2) + util::Ticks RandomElectionTimeout() const; + // Any RPC wiht a newer term causes the recipient to advance its term first. + void UpdateTerm(const peerid::PeerID& peer, const RaftMessage& msg); + // Returns true (and logs) if the given message should be dropped due to its term + // being stale. + bool ShouldDropResponseDueToStaleTerm(const peerid::PeerID& from, const RaftMessage& msg); + // Check for any state changes that may require us to send more messages. + void MaybeChangeStateAndSendMessages(context::Context* ctx); + // Check if, as a candidate, we have enough to become the leader. + // Part of MaybeChangeStateAndSendMessages. + void MaybeBecomeLeader(context::Context* ctx); + // Check if, given the information we have, we can advance the commit index. + // Part of MaybeChangeStateAndSendMessages. + void MaybeAdvanceCommitIndex(); + // Try to find a worthy replica to take over as leader. If one is found, + // send it a timeout_now to become the new leader. + void TryToRelinquishLeadership(context::Context* ctx); + // Set uncommitted membership on leader. + void AddUncommittedMembership(LogIdx idx, std::unique_ptr membership); + void HandleMembershipChange(); + // See if uncommitted membership is now committed, and if so make it the + // canonical one. + void MaybeChangeUncommittedMembershipsBasedOnLog(); + // on uncommitted logs. + // If leader, send message to peer_id requesting that they append entries to + // their log. + // Part of MaybeChangeStateAndSendMessages. + void AppendEntries(context::Context* ctx, const peerid::PeerID& peer); + // Get the next hash for the next log entry. + std::array NextHash(const LogEntry& next_entry); + + // Request handlers + void HandleVoteRequest(context::Context* ctx, const TermId& msg_term, const VoteRequest& msg, const peerid::PeerID& from); + void HandleVoteResponse(context::Context* ctx, const TermId& msg_term, const VoteResponse& msg, const peerid::PeerID& from); + void HandleAppendRequest(context::Context* ctx, const TermId& msg_term, const AppendRequest& msg, const peerid::PeerID& from); + void HandleAppendResponse(context::Context* ctx, const TermId& msg_term, const AppendResponse& msg, const peerid::PeerID& from); + + void AddSendableMessage(SendableRaftMessage msg); + + // Message to request a vote for myself. Requires role==candidate. + RaftMessage* RequestVoteMessage(context::Context* ctx); + + GroupId group_; + peerid::PeerID me_; + std::unique_ptr membership_; + // uncommitted_memberships_ keeps an ordered list of the uncommitted-but- + // active memberships based on the log. We're effectively certain that + // once a full request (AppendEntries, etc) is complete, this should have + // exactly zero or one element in it, and thus can probably be not-a-list. + std::list>> uncommitted_memberships_; + + enclaveconfig::RaftConfig config_; + + LogIdx last_applied_; + + // \* The server's term number. + // VARIABLE currentTerm + TermId current_term_; + + // \* The candidate the server voted for in its current term, or + // \* Nil if it hasn't voted for any. + // VARIABLE votedFor + std::optional voted_for_; + + // \* The server's state (Follower, Candidate, or Leader). + // VARIABLE state + internal::Role role_; + internal::FollowerState follower_; + internal::CandidateState candidate_; + internal::LeaderState leader_; + + // \* A Sequence of log entries. The index into this sequence is the index of the + // \* log entry. Unfortunately, the Sequence module defines Head(s) as the entry + // \* with index 1, so be careful not to use that! + // VARIABLE log + std::unique_ptr log_; + + // \* The index of the latest entry in the log the state machine may apply. + // VARIABLE commitIndex + LogIdx commit_idx_; + // We promise to commit at the given index; we will not truncate our log past + // this point. + LogIdx promise_idx_; + + // The list of messages that are generated to send out based on various actions. + std::vector sendable_messages_; + + size_t super_majority_; +}; + +} // namespace svr2::raft + +#endif // __SVR2_RAFT_RAFT_H__ diff --git a/enclave/raft/tests/log.cc b/enclave/raft/tests/log.cc new file mode 100644 index 0000000..cc29e6f --- /dev/null +++ b/enclave/raft/tests/log.cc @@ -0,0 +1,109 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP peerid +//TESTDEP context +//TESTDEP sip +//TESTDEP sender +//TESTDEP env +//TESTDEP env/test +//TESTDEP env +//TESTDEP util +//TESTDEP metrics +//TESTDEP proto +//TESTDEP protobuf-lite +//TESTDEP libsodium + +#include +#include +#include "raft/log.h" +#include "env/env.h" + +namespace svr2::raft { + +class LogTest : public ::testing::Test { + protected: + static void SetUpTestCase() { + env::Init(); + } +}; + +TEST_F(LogTest, BasicUsage) { + Log log(1<<20); + EXPECT_EQ(0, log.oldest_stored_idx()); + EXPECT_EQ(0, log.last_idx()); + EXPECT_EQ(1, log.next_idx()); + EXPECT_EQ(0, log.last_term()); + + LogEntry e; + e.set_term(1); + e.set_hash_chain("12345678901234567890123456789012"); + ASSERT_EQ(error::OK, log.Append(e, 1)); + EXPECT_EQ(1, log.oldest_stored_idx()); + EXPECT_EQ(1, log.last_idx()); + EXPECT_EQ(2, log.next_idx()); + EXPECT_EQ(1, log.last_term()); + + e.set_term(2); + e.set_hash_chain("12345678901234567890123456789012"); + ASSERT_EQ(error::OK, log.Append(e, 1)); + EXPECT_EQ(1, log.oldest_stored_idx()); + EXPECT_EQ(2, log.last_idx()); + EXPECT_EQ(3, log.next_idx()); + EXPECT_EQ(2, log.last_term()); + + auto i1 = log.At(4); + EXPECT_FALSE(i1.Valid()); + auto i2 = log.At(0); + EXPECT_FALSE(i2.Valid()); + auto i3 = log.At(1); + EXPECT_TRUE(i3.Valid()); + EXPECT_EQ(1, i3.Index()); + EXPECT_EQ(1, i3.Term()); + EXPECT_EQ(36, i3.SerializedSize()); + i3.Next(); + EXPECT_TRUE(i3.Valid()); + EXPECT_EQ(2, i3.Index()); + EXPECT_EQ(2, i3.Term()); + EXPECT_EQ(36, i3.SerializedSize()); + i3.Next(); + EXPECT_FALSE(i3.Valid()); + EXPECT_EQ(0, i3.Index()); + EXPECT_EQ(0, i3.Term()); + EXPECT_EQ(0, i3.SerializedSize()); + + EXPECT_EQ(1, log.oldest_stored_idx()); + EXPECT_EQ(2, log.last_idx()); + EXPECT_EQ(3, log.next_idx()); + EXPECT_EQ(2, log.last_term()); + auto i4 = log.At(2); + EXPECT_TRUE(i4.Valid()); + EXPECT_EQ(2, i4.Index()); + EXPECT_EQ(2, i4.Term()); + EXPECT_EQ(36, i4.SerializedSize()); + i4.Next(); + EXPECT_FALSE(i4.Valid()); + EXPECT_EQ(0, i4.Index()); + EXPECT_EQ(0, i4.Term()); + EXPECT_EQ(0, i4.SerializedSize()); +} + +TEST_F(LogTest, RunningOutOfSpace) { + LogEntry e; + e.set_data("abc"); + e.set_hash_chain("12345678901234567890123456789012"); + e.set_term(1); + size_t s = Log::logentry_bytes_in_log(e); + ASSERT_EQ(s, 147); + Log log(s*3+1); + ASSERT_EQ(error::OK, log.Append(e, 1)); + ASSERT_EQ(error::OK, log.Append(e, 1)); + ASSERT_EQ(error::OK, log.Append(e, 1)); + ASSERT_EQ(error::Raft_LogOutOfSpace, log.Append(e, 1)); + ASSERT_EQ(3, log.last_idx()); + ASSERT_EQ(error::OK, log.Append(e, 2)); + ASSERT_EQ(error::Raft_LogOutOfSpace, log.Append(e, 2)); +} + +} // namespace svr2::raft diff --git a/enclave/raft/tests/membership.cc b/enclave/raft/tests/membership.cc new file mode 100644 index 0000000..2a5543c --- /dev/null +++ b/enclave/raft/tests/membership.cc @@ -0,0 +1,132 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP peerid +//TESTDEP context +//TESTDEP sip +//TESTDEP sender +//TESTDEP env +//TESTDEP env/test +//TESTDEP env +//TESTDEP util +//TESTDEP metrics +//TESTDEP proto +//TESTDEP protobuf-lite +//TESTDEP libsodium + +#include +#include +#include "peerid/peerid.h" +#include "raft/membership.h" +#include "env/env.h" +#include "util/log.h" + +namespace svr2::raft { + +class MembershipTest : public ::testing::Test { + protected: + static void SetUpTestCase() { + env::Init(); + } + + error::Error ValidProgression(const ReplicaGroup& g1, const ReplicaGroup& g2, const std::string& leader, size_t supermajority) { + auto [m1, err1] = Membership::FromProto(g1); + auto [m2, err2] = Membership::FromProto(g2); + CHECK(err1 == error::OK && err2 == error::OK); + peerid::PeerID leader_peer; + CHECK(error::OK == leader_peer.FromString(leader)); + auto err = Membership::ValidProgressionForLeader(leader_peer, *m1, *m2, supermajority); + LOG(INFO) << "ValidProgressionForLeader: " << err; + return err; + } +}; + +TEST_F(MembershipTest, FromProtoBadPeer) { + ReplicaGroup g; + g.add_replicas()->set_peer_id("invalid"); + auto [out, err] = Membership::FromProto(g); + EXPECT_EQ(out.get(), nullptr); + EXPECT_EQ(err, error::Peers_InvalidID); +} + +TEST_F(MembershipTest, FromProtoDuplicatePeer) { + ReplicaGroup g; + g.add_replicas()->set_peer_id("12345678901234567890123456789012"); + g.add_replicas()->set_peer_id("12345678901234567890123456789012"); + auto [out, err] = Membership::FromProto(g); + EXPECT_EQ(out.get(), nullptr); + EXPECT_EQ(err, error::Membership_DuplicateReplicaInReplicaGroup); +} + +TEST_F(MembershipTest, FromProtoSuccess) { + ReplicaGroup g; + g.add_replicas()->set_peer_id("REPLICA........................0"); + g.add_replicas()->set_peer_id("REPLICA........................1"); + g.add_replicas()->set_peer_id("REPLICA........................2"); + g.add_replicas()->set_peer_id("REPLICA........................3"); + g.mutable_replicas(1)->set_voting(true); + g.mutable_replicas(2)->set_voting(true); + auto [out, err] = Membership::FromProto(g); + EXPECT_NE(out.get(), nullptr); + EXPECT_EQ(err, error::OK); + EXPECT_EQ(4, out->all_replicas().size()); + EXPECT_EQ(2, out->voting_replicas().size()); + EXPECT_EQ(1, out->voting_replicas().count(peerid::PeerID(reinterpret_cast("REPLICA........................1")))); + EXPECT_EQ(1, out->voting_replicas().count(peerid::PeerID(reinterpret_cast("REPLICA........................2")))); +} + +TEST_F(MembershipTest, ValidProgressionForLeader) { + ReplicaGroup g1; + g1.add_replicas()->set_peer_id("12345678901234567890123456789012"); + g1.add_replicas()->set_peer_id("22345678901234567890123456789012"); + g1.add_replicas()->set_peer_id("32345678901234567890123456789012"); + g1.add_replicas()->set_peer_id("42345678901234567890123456789012"); + g1.mutable_replicas(0)->set_voting(true); + g1.mutable_replicas(1)->set_voting(true); + g1.mutable_replicas(2)->set_voting(true); + + auto leader = g1.replicas(0).peer_id(); + + ReplicaGroup g2 = g1; + EXPECT_EQ(error::Membership_NoMembershipChanges, ValidProgression(g1, g2, leader, 0)); + + g2 = g1; + g2.mutable_replicas(0)->set_voting(false); + EXPECT_EQ(error::Membership_LeaderRemovedFromVoting, ValidProgression(g1, g2, leader, 0)); + + g2 = g1; + g2.mutable_replicas(1)->set_voting(false); + g2.mutable_replicas(2)->set_voting(false); + EXPECT_EQ(error::Membership_TooManyMembershipChanges, ValidProgression(g1, g2, leader, 0)); + + g2 = g1; + g2.mutable_replicas()->erase(g2.mutable_replicas()->begin()); + EXPECT_EQ(error::Membership_LeaderRemovedFromVoting, ValidProgression(g1, g2, leader, 0)); + + // Delete a voting (non-leader) replica entirely. + g2 = g1; + g2.mutable_replicas()->erase(++g2.mutable_replicas()->begin()); + EXPECT_EQ(error::OK, ValidProgression(g1, g2, leader, 0)); +} + +TEST_F(MembershipTest, MembershipCannotShrinkToOrBelowSupermajority) { + ReplicaGroup g1; + g1.add_replicas()->set_peer_id("12345678901234567890123456789012"); + g1.add_replicas()->set_peer_id("22345678901234567890123456789012"); + g1.add_replicas()->set_peer_id("32345678901234567890123456789012"); + g1.add_replicas()->set_peer_id("42345678901234567890123456789012"); + g1.mutable_replicas(0)->set_voting(true); + g1.mutable_replicas(1)->set_voting(true); + g1.mutable_replicas(2)->set_voting(true); + + auto leader = g1.replicas(0).peer_id(); + + ReplicaGroup g2 = g1; + g2.mutable_replicas(1)->set_voting(false); + EXPECT_EQ(error::Membership_SuperMajorityLost, ValidProgression(g1, g2, leader, 2)); + g2.mutable_replicas(2)->set_voting(false); + EXPECT_EQ(error::Membership_SuperMajorityLost, ValidProgression(g1, g2, leader, 2)); +} + +} // namespace svr2::raft diff --git a/enclave/raft/tests/raft.cc b/enclave/raft/tests/raft.cc new file mode 100644 index 0000000..3428722 --- /dev/null +++ b/enclave/raft/tests/raft.cc @@ -0,0 +1,277 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP peerid +//TESTDEP context +//TESTDEP hmac +//TESTDEP sip +//TESTDEP sender +//TESTDEP env +//TESTDEP env/test +//TESTDEP env +//TESTDEP util +//TESTDEP metrics +//TESTDEP proto +//TESTDEP protobuf-lite +//TESTDEP noise-c +//TESTDEP libsodium + +#include +#include "raft/raft.h" +#include "peerid/peerid.h" +#include "env/env.h" +#include "util/log.h" +#include "proto/e2e.pb.h" +#include + +namespace svr2::raft { + +class RaftTest : public ::testing::Test { + protected: + static void SetUpTestCase() { + env::Init(); + } + + enclaveconfig::RaftConfig DefaultConfig() { + enclaveconfig::RaftConfig config; + config.set_election_ticks(5); + config.set_heartbeat_ticks(1); + config.set_replication_chunk_bytes(1<<20); + config.set_replica_voting_timeout_ticks(15); + config.set_replica_membership_timeout_ticks(30); + return config; + } + + void SetUpRaft(int size, enclaveconfig::RaftConfig config) { + // Create a size-3 raft group + ReplicaGroup g; + std::set peers; + for (int i = 0; i < size; i++) { + uint8_t peer_id[32]; + ASSERT_EQ(error::OK, env::environment->RandomBytes(peer_id, sizeof(peer_id))); + peerid::PeerID p(peer_id); + auto r = g.add_replicas(); + p.ToString(r->mutable_peer_id()); + r->set_voting(true); + peers.insert(p); + } + auto [mem, err] = Membership::FromProto(g); + ASSERT_EQ(error::OK, err); + for (auto peer : peers) { + auto memcpy = std::make_unique(*mem); + auto r = std::make_unique( + 1, // group + peer, + std::move(memcpy), + std::move(std::make_unique(1<<20)), // 1MB log + config, + false, + 0); + group_[peer] = std::move(r); + } + } + + void RouteMessages() { + bool quiescent = false; + int iter = 0; + LOG(INFO) << "--------------------- Message routing"; + while (!quiescent) { + LOG(INFO) << "------------- iteration " << iter++; + quiescent = true; + std::map> send; + for (auto i = group_.begin(); i != group_.end(); ++i) { + send[i->first] = i->second->SendableMessages(); + } + for (auto i = send.begin(); i != send.end(); ++i) { + for (auto msg : i->second) { + quiescent = false; + std::set send_to; + if (msg.to().has_value()) { + send_to.insert(*msg.to()); + } else if (group_.count(i->first)) { + send_to = group_[i->first]->peers(); + } else { + LOG(INFO) << "dropping targetted send to nonexistent peer " << i->first; + continue; + } + for (auto peer : send_to) { + if (group_.count(peer) == 0) { + LOG(INFO) << "dropping broadcast send to nonexistent peer " << peer; + continue; + } + LOG(VERBOSE) << " >>> send from " << i->first << " to " << peer; + LOG(VERBOSE) << " ::: " << MsgStr(msg.message()); + group_[peer]->Receive(&ctx, msg.message(), i->first); + LOG(VERBOSE) << " <<< send complete"; + } + } + } + } + } + + void CommitOnAll(const enclaveconfig::RaftConfig& config) { + bool quiescent = false; + std::map committed; + LOG(INFO) << "Waiting for commits to quiesce on all replicas"; + for (auto i = group_.begin(); i != group_.end(); ++i) { + committed[i->first] = i->second->commit_idx(); + LOG(INFO) << " initial on " << i->first << " : " << i->second->commit_idx(); + } + RouteMessages(); + while (!quiescent) { + LOG(INFO) << "TICK"; + quiescent = true; + for (int i = 0; i < config.heartbeat_ticks(); i++) { + for (auto i = group_.begin(); i != group_.end(); ++i) { + i->second->TimerTick(&ctx); + } + RouteMessages(); + } + for (auto i = group_.begin(); i != group_.end(); ++i) { + if (committed[i->first] != i->second->commit_idx()) { + quiescent = false; + committed[i->first] = i->second->commit_idx(); + LOG(INFO) << " update on " << i->first << " : " << i->second->commit_idx(); + } + } + } + LOG(INFO) << "Commits quiesced"; + } + + peerid::PeerID ElectLeader(const enclaveconfig::RaftConfig& config) { + LOG(INFO) << "Electing leader"; + std::set leaders; + while (leaders.size() == 0) { + RouteMessages(); + for (int i = 0; i < config.election_ticks() * 3; i++) { + for (auto i = group_.begin(); i != group_.end(); ++i) { + if (i->second->is_leader()) { leaders.insert(i->first); } + } + if (leaders.size()) break; + LOG(INFO) << "Tick: " << i; + for (auto i = group_.begin(); i != group_.end(); ++i) { + i->second->TimerTick(&ctx); + } + RouteMessages(); + } + } + CHECK(leaders.size() == 1); + LOG(INFO) << "Elected leader: " << leaders.begin()->DebugString(); + return *leaders.begin(); + } + + std::map> group_; + context::Context ctx; +}; + +TEST_F(RaftTest, CommitOnAll) { + auto config = DefaultConfig(); + SetUpRaft(3, config); + // Get a leader + peerid::PeerID leader = ElectLeader(config); + LOG(INFO) "============== SENDING LOG TO LEADER " << leader; + auto [loc, err] = group_[leader]->ClientRequest(&ctx, "abc"); + ASSERT_EQ(error::OK, err); + EXPECT_GE(loc.term(), 1); // may have been a few terms to elect leader + EXPECT_GE(loc.idx(), 1); // leader election adds entry to log + CommitOnAll(config); + for (auto i = group_.begin(); i != group_.end(); ++i) { + std::string last_log; + LOG(INFO) << "replica logs for " << i->first; + while(true) { + auto [idx, e] = i->second->TakeCommittedLog(); + if (idx == 0) break; + last_log = e.data(); + LOG(INFO) << "\tidx: " << idx << " : " << last_log; + if (last_log == "abc") { + EXPECT_EQ(idx, loc.idx()); + EXPECT_EQ(e.term(), loc.term()); + } + } + ASSERT_EQ(last_log, "abc"); + } +} + +TEST_F(RaftTest, CommitIfOneDown) { + auto config = DefaultConfig(); + SetUpRaft(3, config); + // Remove one of the participants. + group_.erase(group_.begin()); + peerid::PeerID leader = ElectLeader(config); + LOG(INFO) "============== SENDING LOG TO LEADER " << leader; + auto [loc, err] = group_[leader]->ClientRequest(&ctx, "abc"); + ASSERT_EQ(error::OK, err); + EXPECT_GE(loc.term(), 1); // may have been a few terms to elect leader + EXPECT_GE(loc.idx(), 1); // leader election adds entry to log + CommitOnAll(config); + for (auto i = group_.begin(); i != group_.end(); ++i) { + std::string last_log; + LOG(INFO) << "replica logs for " << i->first; + while(true) { + auto [idx, e] = i->second->TakeCommittedLog(); + if (idx == 0) break; + last_log = e.data(); + LOG(INFO) << "\tidx: " << idx << " : " << last_log; + if (last_log == "abc") { + EXPECT_EQ(idx, loc.idx()); + EXPECT_EQ(e.term(), loc.term()); + } + } + ASSERT_EQ(last_log, "abc"); + } +} + +TEST_F(RaftTest, SingleReplicaGroup) { + auto config = DefaultConfig(); + SetUpRaft(1, DefaultConfig()); + peerid::PeerID leader = ElectLeader(config); + LOG(INFO) "============== SENDING LOG TO LEADER " << leader; + auto [loc, err] = group_[leader]->ClientRequest(&ctx, "abc"); + ASSERT_EQ(error::OK, err); + EXPECT_GE(loc.term(), 1); // may have been a few terms to elect leader + EXPECT_GE(loc.idx(), 1); // leader election adds entry to log + CommitOnAll(config); + for (auto i = group_.begin(); i != group_.end(); ++i) { + std::string last_log; + LOG(INFO) << "replica logs for " << i->first; + while(true) { + auto [idx, e] = i->second->TakeCommittedLog(); + if (idx == 0) break; + last_log = e.data(); + LOG(INFO) << "\tidx: " << idx << " : " << last_log; + if (last_log == "abc") { + EXPECT_EQ(idx, loc.idx()); + EXPECT_EQ(e.term(), loc.term()); + } + } + ASSERT_EQ(last_log, "abc"); + } +} + +TEST_F(RaftTest, QuorumSize) { + EXPECT_EQ(Raft::quorum_size(3, 0), 2); + EXPECT_EQ(Raft::quorum_size(4, 0), 3); + EXPECT_EQ(Raft::quorum_size(2, 0), 2); + EXPECT_EQ(Raft::quorum_size(3, 1), 3); + EXPECT_EQ(Raft::quorum_size(4, 1), 3); +} + +TEST_F(RaftTest, RelinquishLeadership) { + auto config = DefaultConfig(); + SetUpRaft(2, DefaultConfig()); + auto leader = ElectLeader(config); + LOG(INFO) << "==================== LEADER " << leader << " calling RelinquishLeadership"; + group_[leader]->RelinquishLeadership(&ctx); + RouteMessages(); + EXPECT_FALSE(group_[leader]->is_leader()); + peerid::PeerID expected_new_leader; + for (auto iter = group_.begin(); iter != group_.end(); ++iter) { + if (iter->first == leader) { continue; } + expected_new_leader = iter->first; + } + EXPECT_TRUE(expected_new_leader.Valid()); + EXPECT_TRUE(group_[expected_new_leader]->is_leader()); +} + +} // namespace svr2::raft diff --git a/enclave/raft/tests/setdiffsize.cc b/enclave/raft/tests/setdiffsize.cc new file mode 100644 index 0000000..cff1fe1 --- /dev/null +++ b/enclave/raft/tests/setdiffsize.cc @@ -0,0 +1,48 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +//TESTDEP gtest +//TESTDEP peerid +//TESTDEP context +//TESTDEP sip +//TESTDEP sender +//TESTDEP env +//TESTDEP env/test +//TESTDEP env +//TESTDEP util +//TESTDEP metrics +//TESTDEP proto +//TESTDEP protobuf-lite +//TESTDEP libsodium + +#include +#include +#include "peerid/peerid.h" +#include "raft/membership.h" + +namespace svr2::raft { + +class SetDiffTest : public ::testing::Test {}; + +TEST_F(SetDiffTest, Basic) { + std::set a; + std::set b; + ASSERT_EQ(0, SetDiffSize(a, b)); + uint8_t p1[32] = {1}; + uint8_t p2[32] = {2}; + uint8_t p3[32] = {3}; + uint8_t p4[32] = {4}; + a.insert(peerid::PeerID(p1)); + ASSERT_EQ(1, SetDiffSize(a, b)); + ASSERT_EQ(0, SetDiffSize(b, a)); + b.insert(peerid::PeerID(p2)); + b.insert(peerid::PeerID(p3)); + b.insert(peerid::PeerID(p4)); + ASSERT_EQ(1, SetDiffSize(a, b)); + ASSERT_EQ(3, SetDiffSize(b, a)); + a.insert(peerid::PeerID(p4)); + ASSERT_EQ(1, SetDiffSize(a, b)); + ASSERT_EQ(2, SetDiffSize(b, a)); +} + +} // namespace svr2::raft diff --git a/enclave/raft/types.h b/enclave/raft/types.h new file mode 100644 index 0000000..8bf52e3 --- /dev/null +++ b/enclave/raft/types.h @@ -0,0 +1,17 @@ +// Copyright 2023 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +#ifndef __SVR2_RAFT_TYPES_H__ +#define __SVR2_RAFT_TYPES_H__ + +#include + +namespace svr2::raft { + +typedef uint64_t LogIdx; +typedef uint64_t TermId; +typedef uint64_t GroupId; + +} // namespace svr2::raft + +#endif // __SVR2_RAFT_TYPES_H__ diff --git a/enclave/releases/.keep b/enclave/releases/.keep new file mode 100644 index 0000000..e69de29 diff --git a/enclave/releases/default.6ee1042f9e20f880326686dd4ba50c25359f01e9f733eeba4382bca001d45094 b/enclave/releases/default.6ee1042f9e20f880326686dd4ba50c25359f01e9f733eeba4382bca001d45094 new file mode 100644 index 0000000000000000000000000000000000000000..36c52cfd5bcda836faf6ee6516559b8b7e4f9bbf GIT binary patch literal 29543104 zcmagG30RC@*gyWvG}W}47AeA%A{B)sMNJDL(Pk$tmZTJ-kW3p%rIgANm8B4}@2M0a zN-A4Yvdb1COZ`8mIrIMJ>w4eoe_z+fz2E0P=XqwDdCnOd#!Vj2X0aGCNio(8(c->I zcbf#%At){VpCAEa!6-5UMwiiHWZ>rj{}U&Ur#zc262zQK?NZ<*uZjBq<=Qk(%*BHf zPV)Xw(xhH7=ZPXoUiXan)c+5+FAu99_cNrqvZ5MONJhC=Syp1St z=YM%}oyh$85M2N|9??ji=}XY7bzA=BWeK7{F&B^LioEW1p>_WM7+n^|jgI$!ttWGk zR-&A?%a{Z#@i8|u30N>BV9ByoVMD?!%!inp4P6;Dba?l?)saT-#R*fUG09!a>ivu} z-}HSIZZ&UXYFkQS>H=9bepGacnLHGYKyYu^fz zE3U^{#9xDb0#JyUtFZ3?p9wAx{~g3W174u!P{if~&yQWy3MunED-fZ^zG3~+|_IfafxYOF`xFX++eC6U&tK%Hk2G0oJj1lvr=oxoVc zAEot9VGJe6Gm%H=3AL|)UJYFzID?%2=uMaU)_~7KUI6M$gnuo36M+Y?2SSgBeKYju zwB|h6hoQzN*!Yky0cNzvR>Yr#Z!P#)YAb|37r2Env{0iTcwb-vV#L%4`##i5gnbUi zyFteyejV8V0t2aS4E!#TmtfpO@UKUX3Xp*@5-{dG_zuw6gNP-R4|`A8ejw*D^e3p- zA3hn_*C8(ed=&I?uq#0JLtH%KdmvU1`fS8(gpJS~*kduCF=BVpaV8_?9ncE<3mWGQ zozN%b5;_6c0UF5jMT{)QYlgfDHRK@sAlDIm1Z@7W?FBC(9Qg|%A4bl4@a?Gaoy-^d zVmg){VwS>Q3C>21Er=uJh`2i<@qhlE48IrRRDqGS|HbecQkev%0IjqJ(PvS)0z3%$ zt1#{l$gkilMxAiz!Qh0}V&0=M?i9qy!M+AI9r%Q>FNU4aK=_6uKM`^n>?Y6)q1Qlv ziJUp$8(=e`YY3Hj2LDO$W`O)Th(WE-s5={SFnX6pd>L}*BIhxD!H6FXnYW717d1yBXFTH7FgBqB(3=tC06q!vd9>Df>VFCT2ABiiJfInIR}tSE zH6KC`g#HY5xXAN_?KpgM5x)$+<-lFY#}V@may#${auVXD5Nig^N4%I$!hZzlg54Q# zrM^kXF^67-{-aP&7Wx##t%N)UF^0yS&}V}eK{r7RArgLUFM3VY7wrH*5yT zU5I)O)L#jG1P}n*a_~pMZXg=^4&*7J#x&G;1)Cdi8#1A9knf;IEn<=o>j#X1ET&C} zTL~MN#uNKSU>N$4q;kZRqE=tj(uTYZI0)SbLHi+_A-@6efIJ(BhVKh75OX9niq69s zbq^u#EY)|yKN9gD)8IzZ-Bf6F~8u`fqVcw8?iIM{~$(^ z3ZV1?dLpj|IfT9;Mh`t$LJvWHGS;F4{54|i!JQE^7Pdm@0_bswUjn2eel={F;Dg{_ zO~)FAu~*Pu?O}I@eJHRCaW4_S1vSL96#g^N`@(k`m=66G_*KLg(Di14r@$72noh89 zLh>l^6R715PN)XHLW#OlVRs|F0{c-j2Khq~&xWpsSW}|Iu8Z6si0uuTd?1eizX|_Z zKppaR@I;^&;+G-h86Cq0I-!TCNhlp?q`i<2*;j#e@Qr}&0nOEc)4vSQVmx9?-Ffe3SG8-)8Vxi1Q=;gF1oNu#bUV8S(XAIkN;5lOV!)}0B2EHZG?I6EL?Q!sjAa4cqLy!qU?WRol`LGWGMnm3B z=bDUwyO5vJ9(0knP@F__>%lXS_YQf9G>?3*sik9hK#l|4P$LVy?grllUl5Jeg>5VH zry+j}YL9?E2l`{601zPl3LXCoa#kWP8}(v<8<551k62as1L(N_V@J$ps+@)Y91w&U zZ`gS7je<_-InWb&FIuw$^^(zxF2-(x+y`+j(2Jp;L##Gxynt;C}P;?ko^&>L3{iLT>vCNw}t&3owpUn8w2?Z9cLlr z2*~n?4FeuP9*cUe$nkIBF0Y z3g1@5bb?C(1*l0V7O_#Nw;jI2(BFbf!)E~bA!K9Z9|jlGWYlef;*FTckZmEafxjR4 zZq#u>Z3n;@K0Vm=VGDxJg3g293}_;9>r2NL z`w1US>vSM?A8J@&tQyoObRY60+CS0DX{;hqK=a}M4&)==US#V2cPHYSV4FdEdQIyQ zXFYs1ut$L_Ay<;DFxGAOz9W7Qb?|5nqPn1eHmzk#=k|;0#n8VX{{w19(mv-Q=K+<~ zB<5j;92Vlzz&n7;h|_~#2C=5Jt|hHY#=VYMTlA4GQG=oKbh@TO#AQq51WCkxqBU31 zUPw({)O$nc)(5e_5tEK_91-&n@-bjAtudM;faXHKAyHRk#oqwfd?oD5kb9guvm~zh zXNef%j)3nx#(RLi6VXcp_&yr*L88|pD(^(yr^pi`uM*q=m<5}drb0*%E8vlIe%~oK z!~9kw{v}fd>ueBwH>Fi3o&*9#v2E_8SQl` zeCsiXT@q`v5HZ#g^~B;72y-Rk3~1dyl#AoUTmiyz+II_TmQr~e`gjTX4`2sG{xA90 zVcRaTo}}hH8rP4mnV)zd@KkEkmFUkAYcq`6Nho<KvtU7a(7TeJ%QEM6WY2o+)C( zCF*Fw_7uKeu-%4i40#b0%B?T_RuP&tLpVJYPfh$TbK zq`EocG@w7Bz2rk*BvI!!dbh-US4oaXW63zJ66;I!D-v;z60)DfTI!>LaJq(k$d71^ z{gCeghKOA)aUHB_omz>$$XH_P3*icKScsc0G0rxL-aJunIr>(Iebrgek}Aiw3iIb zK^ypqUhlwWK<%V%AaXxSto=L*Ul{zJ5;}>W0(~fQ{x2E@tDhMKp~vkRRciC08V zha~h_sAU41heW;k$Q9EW2=RDLCim}B$Cv4`>$I@Ib#uQTjSXzG~V&s8wn1>?a)J|%uLBEabvkCcMX$@i@L~C%ss{uWF z4F}V?&IV6KE}`GlM&zCtgG~VWC>`e(twsEV+-TkmTC)e@Z_=3lG)D%yn<$)VqH!Hm z-vs@R#F)fZr9?!A?nS9&sCy_P>e@tE9U!IB9GX@$v+ZgC^3#9Y8{i%NtkFy z^8Y1_{eL3Uig6BOuF}enM8YZ|7Yy^@P*U4 zkep$N+l81+8s|j$T6$goBHkBqZ1B(EtI*qa#1D4Kf(wY?F49DTi| zLDyj03Y(ZbpqB#`KsEBZ==csaWB&!|%cnTzB+$bacP>R{6cY+yf43wzNz zM9rlAP!}^1xrC;`J|8u*sV=hqzkj7rV>J3OL~TNE!P{u9LOS*b>Kl#N%MxRfcvIA^ zrv55optOh1Z8G#InxlmEB{UN8b#x3{*o=S+h#|un0&X-u7PXH;KZ4j9kZ(dh4-oo{ zU~7!=4Y6S~UgW{&X!xE>*i;c0DRxqRNn$-NqW%Rs2jY%It_o>}Qk#UYh1&L@=kXFT zijYqOrPOv=!uJ&Q7Sr)gVyxp5y^(SP=p}SLveB!N#CUYL|1cXGD`{L#m2C7i3uDhi zogF|U^jy^24Zkz^P0}OAi=Z{)U^|K4>S<5z$oVPJyLb#X;;j&yCN_Yxp-Yl9@=9Pk zfqG?t6~=a=;~b#;?LW0Q(sju}teAwTVFY^vt-q733Hl2W2Y_!tz0>e}Aa10Doro8x zu7DUV)IEaybb!!M#P31gd(`WoW8S4beTAP3Um)^YXul*Uh4$EnxFpEWXvl+zjo=w}V& ziO8v^Hd1c_;+v4Sh1%xB{}Xv%Xm2ED2K*857tuKpo0zme#-ku7;Xqd#}pyJ(-p zc3NT{L?`46TLEIy{_zcgt_k}wa4*CilBjJYF~X0$SvT}Oj`>3B~u)?Ye?xQ>`lMSO3G>)s!+y=iY#QL`Pj3C)*?iALS= z@ZAM&0F}@qCHxu^{Yz6>1u;Kp4+FtN5uXUuVXV{tOK)zlpMkv>?PV0kA!G*|i}rL0 zwm>>Z;`<7FHEbF*=e$JSQxZLqSVH??3kKhaK6*g@K=X)iC9S)P=E+FZB7Qm8r7<2c zH-d*k*F>GYkaxm1g65G}UDWywevH;~Ua<{1ZzbnS?fqb% zP3!Hz*lCalgA+P{_-Wv>;2Nm8o30`84M+ZDI?ig?m(m>KvxDr5ItO4MNBW~abJY1n z$MON+1$?CXWZKUH=C0!cgZB9gmEW3)>rs`4F3rL=RtS4J+iepf(5kMw)Mm zJR^x(B$tp5Z0V>==oV`Al;}f~_ICxg%@X5?qVfC|HJuT&jK*1^j)KIsA#pQMe-6z( z4A~C;r-(O(&xFopAov*gwCUJ=;5$y`c2WeCM(est)Yn1XeB=?b04CC$qjWwT)YYN! zGKiIoCzRfTL# z*E62R`$*Jrq3f~{wl3P!Dewf0Hwie1+(i<7h{q?~g4luKbj|E37sr@Ee&vELOt z!JhyzwDva0ap>hNox2P2vM}~?>R*VSTxqYv5bFg04gXB}+hf@JAXf-(Es_6_I6)eScZSas=nuUN_yajdq6UfUqPpQf^Cmt?BJG4pj5AxJ zzZPmgLK7S$#!x_yyCe#^(%2mI@*2KP;DjTZkhVJ9r$Mee2U0v zgX~G;wqaf`Fg~HJKo{z`Q@sMQFS|Ye{pU2TI~=+4aP^Y7_6f+j3>49RNakbII|qzJ z-qC-0lBMfP;?5ywF1Q!+|E04Mam1&IIu5YqAT|&BPVnBeZ*lG>)bmAe=KthIOY}Ab zc`JZ?aT4Y0khcqV7hpZLeV}}fL_IHwTEt!Qk4|h?5x-WVw^)h%SP~#XJuq%xT$>bn zeY7w>p+nF=ORU{R>KA!M|2AN3Q^Y4AZZPU(!2F!{lP(dTDbdR^^unQIjFISlCu)Si zrwrRW)bRv=0zFr9K*(o-GKu*R_eokuMZzAB@zVe!5&#;29*ohWn3hAXrSZz(4d`hy zdf-XKkk~xf$UW0N1pZNmjX$!N9Gg4Sps<+3;$hRvLPt-EFElM?xj3>dBKZnz_3lx4 z_(ULJ*iE|CI()9ZtF11>8B?e!6=&e;#WG+@xC@22m;#i;LnIc%7BHs;Y!(x@vNXRR z%f-NqW2igKRmfHpI1Fcme1>Dmmut3VT*nDAPY2s77zpDc1stvr2PFo&EO6pXaVU-5 z$yZ_6eA`Gf{=+i41cpC}ch=C%Y;qD$Q^3I(>byusimO@7j|tH$QDMCxUmJ_<_*`$s zi_LIZx-9%2gT)r&d4aku-l*-8)pxTthLq%uXIpwRY+Z84DsSdU0tiKw(V_O{uKAYMhF%$TdPi!l-McExxx zZjLN`pk%u@8L(B@0#k+~$Y$#eU^iUA*jum+)N-R9S`2>5SiaM~;e+G37~{3Tk|Q7GBIGXMvjo~IY*uzLhsjjd=f-e^>bfdAdK^Y&o1F_wT8?Fh zXX|=#7K81$mfUFd7uRs2Mu)@GoyhWKM|0xv7eFY){CkE8g!p{TVX2tP332i!&TD2e z&yHCjz-xrX){A1XIeadkW6Wd988zJP@`YG=PESW6UvJYQX)lH?P(8#{k1u1qvN_4y zcziuZM}e=&INEvPvcxc~D1Mx(F{{`>=)*`y#YNfS{)+2q%HasqxMh(pI+{`wlUcIK zObjkKvpK7l&!no_;kvOldmZFTY4RN7_}BaexpDHt6m+n^Zl}$}37LL;o`9pmQlEIf zi5=vacH99>+UNe~!DNN!?fwmjZBxa>GJ+|0PUFZSd~m&jodhM&clX>kN`eoXQ3 z+2-R%mT@^7O;!0k9$wO?nPR>N8_$?n40nK|<}DW9F*f6M#|VSv*tmr?= zUrU4uTme&&+=ImzDsjgNxpMLhSBp2EVe^FozJQGnw2o+pmnc{u5U`{smgdHA>>Tj) zU5FRBfjZw-jzQDvaT(WoGHeG&+u(9X+hle&QdnpiV{{*a5X2_1^1OV!ex(npIT~_x*ysq4q1Z8w z!#MWSxPo{+e9*`Dx`7YbUTh&ZMP?AQlNY<3&8XrH4DU^h*1ieOY;7*vSK64JE$b-F zmP<0_@dvQkPQt=CPVid=bRy(SeHwR&duXoSvRc-6899SFoJafxECUsW&y!VUyu4Vv z1dh&42KSVZtE$2@-Q($|2>C*WrOI|#y&8`!I4ZdN$c16_3hKHqRWi#AfY&qPZEnLm+zb{N|Zxu6#Y?i7< z@nBYVjHVaEi{$DsmIlemxNC~Zia5q?Qe>|5xQ?U5nL2C%zc-`Eu;chL7K~7Un?i^f zKEqXEb4vucrv!?s3}3iVsD<}pmM;Fprj5>DVLQMFWApiJ&R}!to_vmDAxo%h8^zOP zl85UpaA3UR6jKJs82F~(h@*^<#|YGfe2q9Z+k?l|_hRF2#~(p{qJYOz6)LN;;$<{r z&=)6@nN(vu=F8hfDpoU-QI}!R0?S$`=q<~}-Mhb-Bc&UkoWd9g zf|(vHd1Y=klg5jyE|w8+^#?Pu_hk&;uYu-W&+2 z0^}yb<-TPr@so@;>dEgRo1tId-_L6P`l|U7652yiZfqLK}&;UFGnt z0HLAaCV(km28;wO0P>8TJUSOc~IAvrc6RXYLBfD1srm%0NUz;uAnOv-10 z&jZM3==p#bK**bNA8=nP6Z=BQi-5&|AFvb%00IH>U4Io23akaz0qX%F5D7#BBoC4?@ldjsOKfA#egX3tRv$0fdUci-8iL9H;
i_JQ3eb;yx`{~gDJg=PnEhNK-)IkSX1(%95Z{Et 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[%tr)+O%QsM+9-EErLQ!p3PnMJT4=I53W6kFyoQdhtGuNi959 zX4V%K-Vox@I9fZ!)>{-FtPvY=%l~ZFpV*8u&x$YIwL$um{QEf~00Y%ptmlXIaif}#6_xTviJ=L)ARL{RAIhySLlq=iUe2*&u~?TV%+v?> z+Im_}U#0|Upa-Q%`CN#bfJPK2r5w|^v(%p@O^o>=pfs$!KkFA~KTZ4jKY%RJ$b0R} zuh~pIdE-=C9D7j9=1d|yqd*=Hk?2L0SA)OMIZA32J_xZl#M_Q3LhOg@Uwov`uUT4D zS*Odd;Z*9MaXn8vX*U0wKRywiKOYy1E^7SM@CSw^q78~azHpTas8bkA*6e#=yGBKY zOmNq)7;-CdtDR(?P2(_(Z5@y%zVHBnFNDSf*|HABw#+8?twue_w&5cszEFV%iz6FU z*3eB%H=)_eYJ$;0GP^xc)mwes7l`r(xCAvpb5V#b2GZAZC z!v8U`eus90aD{FzLN$TPQAUiseuqIrIHg!AF4z8(A2$^ zJ@hGxXZs5mw?7?w5mC}r6e!&*`9ghlQo%o82u8pgCzAeMSB}yM#VGDj-d}Qd`EdFo zIzC?{f6XUYsnrYQzLZioHYvo##DuyBkCdte+?D>qY$v8d;^XO z&jJh>4h0xCh6~nn2v`Qw5ducWTXUlS42{b-k)p{y@*)GU;4)?9au-sXT zVY#Zs0Lf(4V!#JSEx+Z1)+Ud@R4n(Y#SrU@6tjidSj#Vt7q--Sn5X5T=p9%}=-O@N zCG=V84Hqw#c9FLpm%XsE0Yw*TVqIz~YeKaN6kS+I!}FntLCp#Y1R+>n6uGD$56l@j zwv&&a2um?Am&%85{F|<)_&1dV#5;~aAin{FC*QQ`zyAF#Zas+o-N$W$9RgLu^mh*) zum}F`5+x#I!*c#Wj_#o+^Pip<(;vIP`?g_e{oVHSJ;?jJ-ThXFK1>Sxj3T=p|js={YE<7{T_`C@cBU60E+@u@-!lHq&y2${Y9Km_>MLP zqV#R$2Z0rvsb(g;4M3a3hSnW*WLA=D&RaFA%=7eP!7Qr$P$K7S%`qgJT#U-M2q=Gy zA4bXw7ISSQ?Lxm-!Cgvha((A!F7RN}3t07SPJBFEp3Q6$Q6EcHl$2h<3HiyauW?MA zngH7HshKBC74x0D%+#E6zWow@aj=$iEmP&eo*Gl7&Qi!Y{^qW~NxbgrSKkk@q21WZ z)UUq2bboAVww)#~bjxphy++7y)N$X~E`P_;UlA|(?6p1dckHvjm%pRu>2hm(o5JEP zZPM7s-?8m4=?r0MVx6${D~)oK>hIXSMR&bT-gnI3krc8a#ow{*cOL$Z2UvX8CH|8|Xjg!iRZBq89&T*nPm1Q+^Nag%0a^2Jb|?5o+BL>wQ11pSz!*_h%Y--?BwJnFztN|$yCKk3Fs7T=Cl zqIj;%c+{WMm)rqNrpO1AIe8-OhrVyY3LLMpLzZ+AlOcOv7A1_)V=_k$^}}RrdmZ9U znfYmlG9L49R^uh#dGqje@lIIF`rvep7SJK_m=5DH065HSiOW!&Qi@k< zg_@s^7C`9QUTX@e!^t@Q# zTWF)4u-nXF_A+p9x2?lhTgXOIyo}xuZlQo}as>W_8=zF|tgxd$3Aa!|Fpgqlgf`Ui zu?Dt*9Y%p|5L2%;G3`?Kn+VwEc(l#qn5rBhO-Vn-*cRt4=6{i^pAqz%_OhAnXf{0)%}{64;mJB#@FshQqCzo&ZoMhZ1poycJ#B{7d4C$(q9# zoIuI%Q1;uMj(_RyVp{y`gZ*9jmpS|O_}6URETZ^468|~_cv{z@rSjSc|5`W9n)p9w z6c%LsJRC^`>Cx`eK4v?g_dgJCsO++xf$zQXZ4U+Uci#{H2k<={TbN272|~O;MT)d) zfr&OI z1#OG=oSYomLw)WDglFd8WM0Tw)4rh_mG{9|+<0b^3;Q>2j(46SeV2_GN-<0mrSoS;N(IVVFqqx8z#G|vc zkH+F3y>}{#D^Fzyii_{OQQTej^ha^K%g!*R`CysmwSwnd=e_l^66B58i?F4RHuDN{-K11Q0D@%{P(;J%_!;e#zQsh3`p}$dEwZhuN-*@H2cGB zX0H;(9Ep~}w-QO0k@}ICR<5MWf%>HwUoIwRR#lv4mQQDiSfps?)Etnf0L|6>mFohk z6f(#h0g4P6Bz`_$eg5L+EJMNhhQM1CVbvc1P2Xgg z*3Lti1dASeUw^59_*z{gQMYZQW{dNnhqnD&Z!WRtm&rF!r`Hy;SDoHM(<)I{wy296g~@78~gX&>VAo>#W* zqNp%y6T1F&?mSr|$-gY^+yr_v#i zB8xLW8<{6?@~HXQvgB881H*Hyq=>jN?l?T0pKU!mL8UxUK>c=pHj^vl$z1I|R6jif z_2UIf-)_vXE?tc6mz&or0reC1kJV=OU;`l_6~lCmn_zw+Yb&TJnX5ZHS=yj;HG3qb zlrGD%{DaK(zO(WBb9K9bKYkwqw=Hvg9S97xV#d2aE7tV9?s@+Mc=s8n?F_to;TkvI zOSyv=fC|IE{axz>xk52nU*dL{`)Io9{2M*LtpgpA*C z(N7c<-)Ga}&_bGcP70rO=%oVx#M_%QD|Gt6!obg|FpZC#08UMY+RB#3U`f_eemDww~x4jA?GsVpLSTMCIguv7yq>GOx;<R-WsUmOg#}sf!K4*_K!Pwf%a~p z@Vhp*XiHjJeDx6wZNzQ@Rw01EqxaHcMB;tJ5HA-Yj1feVE&7J!ESTx*?7z$t{I*m) z)){XSw~7scywaR7T*X7V4V?NW7kSRd<^i6~2}eK#iiY4|L@|2lYe0shF&|mv@$+nL z)Z`10p6lZC7J<*(^Kyar#w+)zzU=C&nk%tiny_Jt{Y~N}YgN2t^YG~CezlETa~ql1 z^dfIpm4MFr9!R^SNo;C#5u1P(osLD}NZc+dJWNEbUm{jGxhm!fT3n#+TDJN)+!Y6J z?T$t7voooFjXASDsd2`B+-61G$j2{`+U8z)i8xkDMZUrHl0)MVv5gBjM7;BJ(vC6^ z@sg*#MVx{*(@JK6j3gO_)F#wU?Y!esCEL3c4QC?RqNltiqf7{CB&#`<;X_ai&!B~6 zhzUaAVXnkC6UN?Rn^L}8Zh%Y;4PPzSAXB@l-~HYBmeoY8RY(1_i!yve<4Mmq6t|mr zd}KeoDXSKaRZcFc9{PL`#}LP(P?J~L`?qqwcNp?~Cnn&8i5};BolI9#^r>e5nhyYL z=y=EZe!rgK<~-kfGd<5|ilTA*d~Y-~hb-~TIG`x*R^*oi)xWGTPmp&?qZNg<4O??p z)^5%T+;KavI^sX}>2)z}6FqLFEDO0Sx2?rjVhy%nY&*(l-ke{W(}|o!;oP;gHx%Of ze=^qv>kAqf$Bt-EJajw_v(L%dQ5r8REJUR&qbL5?x4%oEu3an?wf&RQw~t}UGM?m> zs>*K(-Xl=|AU8~Yd{fCUu+umoMI5Vm&p>@|eov+Nohiku;CvH;+1BixT$`6!6~RM{ zRscQv7e+plBt)mtQabdMA!$1lEoT{YGV9y#6{w4*w*TpIY1>EG?yTfEXXEbo%?Z@c zmz`>CP3e30+yOpB(}1Vd4CfaL&nQtl(v6b>=eIgddX_?^s#uWbwQyeqpHEX7@Yqaqae|E?>`&epJD_>6^`N~}K z{a@GQ!_+Ku$u~Szz8scMyCicVpO~hHrq*vcChZK#L46o&evt=)1NC4C0}#T+1A4_u z<*smoDQt|E9d8<2>BiLjH_xrixQn{Yxg1VPFU+o}WjrZBD{N~+&iV$7B*_72_3n!# zshU*w45jQ^?aG4<5^rZ;B|4DB-gT8gFrD_qe(>FYP*Ytb2(VuH z?(mj4kLNQ9Hf|J%H#I-LXui07<0C?vo5g&;o5jT+YR@?PX7T0<&COyy+XqtpM@4)n ziKqWS{s>C^b+7yOyXVn)d?hYEd_@!fqjzD}Q4inG-jhD-kM7&E&os~DFUbIv(?Rd% zi#0pXK!!dKpQ|~J+smU@ z_}+N(D6aa=F<&hqy1$kqAAk=PR*TQ-1US#*~`{S&;h$Q$$)KK}~wSfA3^1osr{ z)++rc|I*l!ZgrLJhE2|=?e2m4qs10zwf#JQu4p$dXUhm+a2|6YCGCk{{TeO#?X*p$ z@ybFv`$N&uSecG<#W7I8pB=*ec}zOt z#3_{`+&0m+CEUtex*{Bg=T)o2g>e7i&ko^wq!msaQ7OWSi=N$cCv{0U%!Ue=aHXlj zO&U!-=W{@{)3Bn4vUpaXnOggBuI;x%sW$0H9+QGpL~OWLzYl7YVq`QaFm>;<7Ln+8 zao0n?$A+An15St*+G2G4Ay(okGnIH+5DVifaF{aUeiayriRoW3S`eqAbjMa++zoFD7Nac2H? zj0vO3z73DioNm6HzT4YrMEs@X%iGY$0a1vCg&PGuds<6&Ea~i!9!~XY3up<_Sf56pHf&RFn3^oy-ZrdvLui;2*J7 zIas_D^&D~0R@MxnuOvVRUClSK&z+dDMp(eTX8FWD!!^@Z&^IjNmh{Jlci@s$vYS1{ z^Nr=7xHv<0(Lw*{8oTJr7j@+=JjU`LUV^1<$6w37TgMNP2lZ}As^YU!n}ZfsoH64g zi6OQj*%bX0hyHfPFZ)NnoO7N_)rw!%3JrxOA^c-uYc6lFW#Rs!+(A1%e%X{G-2?@N z-{Bj-jQnGvke2ZFQAs<-L8p;I>f;|vX;T3LltGW6_rpsRgmT-<>plw1xE6{}C=kRJ z*N|FRr?MX>)Veg}3UT+;yQ)?S-;DNKx_JIW@4|4pH|{E2_}u1SeM!^$?e+?=)p)B;$;zzCh&U7WL0-dB#)yQ z0@hBGT|*J8JCnt>3c@{p`bSb)PZflg9NsmHmP%FqN2P&#uxu!=@K(|m9+m@0TSon2 z1l=ItY8me^I<0{;m5=t(b%x2XYC&Dd1#1o*V&cZ}LbWzOzT^COmC&@!zwXMKHlDhJ zaRpuZ*Q}_Ge>`5N0y*NjXW(Cr^t)uw$gV*URX}Kba}O5}4cxw#r&L8p=}g!^a#of$ z_sS`qQJIa~O}A30d0eX-a{)SPH+QeT3EhQXdIahk#US8A&p;i8Dx<#`^7e{vyVWeB zM^R)!I-8YdFMaC5ZT+0hBV@Qy6t(Hsu3;euYL zNGO`5P04QZp^TfvdAvo;iIgVk^st-siGN^ANquHwr*_6ZkvUIT=T+Y?cl5;H@CaK8 z^gd0V9SXpFB{sWogaPH6S2Wuc^*hfHSh4zLbBMGKquqo}qhm3g@5@Adq3AB*!#CSe z7)OQzVfmGaG=55zEiIAuoUd%;z6K3do&R*RviWP#%2a=% z9s4``7lD%SgOx&N%W$lx+J#scO@#Wvq&%sQa${g1*;*k^h+WPq}&>f$I?|iY$a`eDHW5KYah36D4nvY zwT{!)I`Rz9TEXIt^wN>J$iy7@*E_Mj->ID&YWx&IC6|(x8;nlI1Q!_%_TqvgVehb= z$gr2Ri7bj%*hyUE%iDs>KIJfyZ9$%f3(;Isq2~y`3ghX%{JSHXn1A=~11|pE2k-41 z{@rUOboU>!mVflwqZFU8^eq0}k;#1Yvd@Jro^s!^?DN~Y#J`(Y;b9NB5t}8QjWZU~ z;`b4O>;d-=BcUnQCffrx>)a#V{?}K`*Eeq41NyTVKIjFZ{=C9)XgN^-z8{p)D%%aK z%nU-*Q`~nNF+tkPXI=#+l7;&BgN@Td{byXACsBX3hKc&qed-CUENTU)KNe!AAy9wM z(zrn>s6Uq$sJ~}v95)K;&!q+G?^znRBn9>7(mK>XXEiN%zwrdXD{n6;*tHw=e-w;( zUo=gk{_ui?l?29L>MsTLhm>m!57hsP_tObSN4N+2>_+_$ez_~cVR#hOpM~>4{o7Wh z6HeSvQhLsf`oHo@SA@fCP*8ss&I9!y%)#3;!l;w8u3GaFqw^08#m9qQrf=FpP zX`=pbe_^-V`*S*EQ_2b`6dQrli0y~^pUIRbzgB*B)PL*|n!AH9>OYJ3dA}*6p#JM$ z)uH|>V#oNun?LI1ul@EQQflNS`h;o3a7)odq)rixjLZuZ^&D{o(LuX|7`g|J+Q1$q zdH8kHaQYSb01MCJ3uB7 z|Mj0#-giiy{g{yHDWf*Wf2U&zQ`m>?%XhN`3?8V*CN3-P<(yZ`aUWOtOhs7Z z+n4X=Hb8y8%BY?1hR6$$iR?vCO*4(B+L@dv_|ODz2Igetu8cG`uIp8rt;SP@Jtp1_ zo(RbkO%PNfpp|>LQ7aVz^^2#vrCW6=?zJM<4U}0H8}=D+Jq037xm=hi!TDvR_iLv? zs-o4u^s1;M{B=>@9b{D!cg?gZuhD()hFRJTEyZ^@pS?(+%s4S@;{%rYKak(%gkQM( zlPxuw=C{e2tx>)^h0(<$zs(-7sQFJY2C<0|AiadW^V@X%pr52Lfia>5%>6n6pdl>{ zdkLRo!p8syVAO1&ff|@CbzEo1TULPoN`9MN3v`>d74J^wi_bxidgix@_1w@xr&ioI z;Y@){I77D@8!X-bOwA~$!@6aIQ1AZXhAfjQlPNP;&~fz{F>lUbfZ@U#R$-=eDz z9zlJ+`X|i@a{GI8%_yZaSqZSeW)8KwV-W35N^mps7wMo?1WJT~LyxDv{QzIt1iqe2$gHwfjV!(;$`ekbO)dGLA0BhRUK z;gP2`?i@U_XaKa^*pM;&qtC7ML&YN>TCp8?WS8^X9D9t1ztA**E3^bRvoXR)hbBBS z=WtU&XMf;JU(lRqZai`|7xr)5#v|`CZ6aP4Ngx3`DZkBlaffllgZ$(sdLuvh0DP=h z=FtK`ejDM^3wm_49K2-Oj{EiMzEPL8h-Ml>#%p)o&bJHZSt7D<=2XO3(3@}_?MujFUYduKGN`%=02jt*T@JTDZrqa_{cuL%>WugVp}K?wjE^kDdzgdaJQ`5h^c7uh94Mxn@?8Tpq+~Rm z>3ZQc(=&YGkFW5&;Tgx`ktz6_dLI+^q%QB@lW}aMB9cKKf6Aq46V?KaX8rf_p;}8n<(}#pwYBpR)gI_{v{RCzr^0ztiOm1;k4&xv~i8& zuv?jJT>H_UEcZ>!9hVD}`Ip4qdvDLy)b^ZadaGO0p^s~~rlU>sx^0g%`PN^BbEoRSb0nf?oc4zHQv!^NX{j*w`V?%cB@0dN8&rUOY9uwOd zbE!MHux9qKOeDsiv|@1Z=GbHe@DPOVo;ZhnccvzkE(*pbgYY6s-|;k+hGyyouR&qy zx%Hn6=vkM|R@lc&U>|27Ko}* zWopLDF!>I(pOx_K8?O8^D2dZ`a3yBi?`vG<4ZVNG=NmM)W5vH>pqOKx{uS5Bzp<`5 zk5vFLTEUk7CDygWzhVG*QgooK|0|7}&#EQFe)fT8Rk6Uv{zWsT-ToB|xUhfgwtvMf zEQim&4qyp}aB}p|ss;ndBl@nn}BzUKTSj zaSg7eSzKmrz+P)=iLaN%ZO777^6hp^da3ojK3!)+qJ7k9bBbuo ztJ+YRu>V>97H>QJE$+I=#Q(kGamFk26s<3@{2Ll!pSRf_zl+Hjbj3bq#@pL|{CvcE z-O{!EEl%le;pgz}C~uH{7q98_k?k0M-s^js;8<4{&Y1~*PW~3TfjcM?1qgSvgKR6n zHju{OVi{cbv9SZ>A4GT1x=n!@S=eTX;QTr^rYvKB+H_2&9wjo9{ucMkiYAk}5PTQP zU_m8pUj*Zy_$sCPm_Yq+WOdcg<46D=mY>HXUeC=B)E9VEEKn|k?@bY;ncFHcI} z3<}f_^QicaS~2KVacH2vheyS@T5%RCh62)=B+R89&LqY1D-7Uk!RTO#N(AZ_AcP0+ z;eO5}cmL#`vTUL-hI{o*Fi?LsH|TWp8Kp}49!qMT8cd0w{*`7=AukjV?;&QY7fQK! zm}!?wOt}aB?pR+etiz7b5R42;bwv5ejEQHhO!1m$@fq%r_MI=&NsCGACGAuE=9U#P zvG3h!q=gpgVZJ%dN7QHOsn&7K9eWsy>UWM)$6{JwruMwP6)+o~W?^Pl9NY)c^}M(g zb4@{wR_jQyt2J=!ZFSpo4vTQ|s4qdk8Bg=`d_6P*Gekr$;iX}m#>1m2eG3bOCeRRsKSMUl4K&a$KbFE>19fBg zp^incSnEhjGmC?*jFsX#1-Pb50wDU42sGyqAe>eJynB}Mo}3_308+9ye&ycL)Ylhd z4yr#n-8_fdMqkfP{JXXlcPAnwR&SQX@eVWChgG*c(S2FQ9?o}=w)i8vBmiP&%|u(S z{h?P{0kCCd8MC-%$mI_849A#MSGC%Y?jGn>vzMxo@}83Xl}nx}pVHQ<>kw@CGT*6i zkRpX7a8EX0v4lT+nYY1u0OD-=9}Sej@{@0+lUOz`F(&Z=aDwdbH#wznrmvgpWkS zH=}4}URYo-M^ynP3P%>eUpQF2Z{YS1v4pDv6|K$Pb7qXp4%TkIWlCOEpb`l<=5SezfY z{SGM_f3O@1&+u)&BT-D@6mNmlGFS-x8`Xxmp~ep2mFbV`0Ww=FuhAOyq* z^fgj&R#ip53Imcl0Lc8i;j&9p@X z>iHNzfa?vP;J2@6EuC4JUzXF-+A@kBS6nDXzm`Q>07(ymMOcc6C6{! zWw+@hC7{K|M6Vem#mv5SOIC?BwT~B5yAFL!z1*nIZ&c~d^ZV8<$^?I(o*`x~;GkV= zj&ODGFWntAMs`%P2hBQ6mmEx&l1_Q|*{%;vS2 zW&DmMo^34xH9$LbR)0wzA-DBMZVOWeZgQ9|Q%i8dVho@UEu8$K0_5dfdqq525LxP{sdXa8WFBb$d8<5@UxX>#J%_4co?@jT*h zKbF5vjCT(rL)5%(2KiOXDjWFMDto@sZeUJ&SR_`w6oLS|;_rDePD6pbkDq6r zpCgf@i6H=d+^!`^dl*@Y7s2$1^=PPV2sP3xyo1HvfB$t~K=gezvyK`)B0 z|1mIUifP=cA+J}w(HHFX3L&Pzh}}j)O&9!Sb3Xg$8$L0@{Ib2yck#TqmWOHa)A*pRRIN1y(?;FHQPJL!eA{Iag|UqTu1Umowq{1-4@4&9A@E9s421NL~gh~(y~`c0nk;~Np!+t=ivvSC`dds1u@ zJ1Ks=C1RV{nbapg@(aQgQl2b;N44OgJ|a$0cQXRxQ`tC5l1icx3GYIcRTHT5h#%i0 zQ^}%1Z)VN^O#FD+|0(g~5AK^`-~YAJ^9|)7`Ldf_`;Fv#2LUF8B3&B&cz_Gl6tM`4QC_|9AGF)#Ux{joTqttWq0NMobIMGEF^b4yJD zoML}DL+_iL89VEBCPn#;qsjrvfL01@sMEL<7f>EcK`YG@XSemvE59IGzTXt{izvOP zj+&@)w=SEiBZb&dk)0RQ7EMB68)&Q14fhp^h$}c%Mg(s z`7DRe%<5G5A%{~Z(0j-v5chtkgFmsg^tr{88L~SQQhbPH+sO>^jKA6UGtCtCWrmD4 zH{z}_LoVHeCXsK4+su$h&+8g9re@t> zO)d%IZ{F>$3v6qRtL|tZcPVv2>p06@7eI3r%0fA|o=XmGDRsfnpujIwPGx9(!*)EA z{gUVPw#NkOKj1#GBZd|NK@%2O`>Bq|oyYT|9ApcGU&Pa~@xg?nk}dAxw(-3m+2XKv z_k3Wb!SIOO8Q!Q_cRJ3*DdGh!&O~j0&u7}432zoc>r&5ZhDYSiKW|7UDn`bOF!3CZ zm`#|NeGNw2Pp87MLqSG82owE%MD>W=xhX9Z1-<7b>Ygr9j{WIr$i6?|WOnH3#Z1lx9t1 zD*xi9VA$M^N4STuy76`@cO!YbmWuI=M>R9hQ(?E7KD3FHM<(VQCktIyDlks%xx6&V}lq^hMgs|NHjjniJS8 zVcU`)kYa@jlwqi_l*b+}9TcUj>n>Z_Td!l6qhOTfv<|@6U%dkx6g>44j zfSjyaOOe$gG>HA&Ef%q1nYMMi#YZ!45xUTO(kg4oC|ZOLptM+(af{G5W_h+Q9!K7_|mpR3l@2lzX;d9>()G$uOJy1JaLUGD0}`DveB zredIR2+iLr$yn#m0JGOZ!f7-nJ$ z@R%B)b&1O+w_;aP8d55{0<^koJ?2x(8KBi&>vHc}BAD6|ymX2Ui@U)#yKw|!oyjfp zfC!nyXPtQ!+pBIWbJ?p#Oy2=})jfZd=WJ|Pev+`EAtn5y&$aYJwO2*&+4=UWNk?a3 zuiA6XelnijA2-l%CA-01brb&zdsV+Q_A1j~BnQ(f6cJhH=VOoG#?CVFO5)n!wR=u2 zVSFzzt^v83^Wv2S{5?lG6a*A9Z7)t94_#z2+!&P%N5XaOw;c7#2Z36Q2h`RQDBcvP z`y4HEE75Z)0QjO{{pxCB>Med7afZd)fNKywO4BuqDG)WA=@5^44f*pu`-EI^UI-He zuE+~VhO)tSaR|=^gw4;rn4c>`42t(yKA=m_{rDn{+vDP@$j!oIc(F9P3yZWBq??v{ zWS;4^#8!*e#KGpIaK1`%fM@A%%zko~7Q5Qw=%hHl>U&5@0J^n zXEUO&JE^04Ow@qP^XX|$C#)W$G|=39TLUuf)h7Q!wXbd&j`_2C7*Eh}3^s7&6URO+ z6F`BCArn9`wL!j6_;pgzQ+85wcY|6@p)i(E;wYJoD8lde4b4HS=hYEFgnLFW6Mg86 zzZgR{6iqe3GEw*lKJgc?|M4e(v{1E^J{!_>D;9-&7^Z2~|mwO(M=Ab&$Wqr?u{TsL8`WLRIW_{uMSkL&)w0AWJ>YC(>RYfNvqkB6tP_VgG zh45=1qY32uSo>v8Jc4!_zo%A#nH9=i1Dn741in{adjah^`X``ZQ)1=ex+kaxE|HZ> zxi>nToB`CqyuvYM>JR0+HvYrvG0P{my{o%Tx(r*G3Sz4*zDhg#=qVY$an^;JJ;y74 z1LEHc>7`L1XTk_Ldbl` zl7*0TmePU)ob|}7b@c0U$G19~ADn4m$$>pQt2>_R0kpq{1SL9Q zB_ym3ELrzg{p=0Y|4KrK#&1jv5!V8hK^<>}`BE_e(?)u$ODqh)R4kN-Jr z^2Nov(?t58yY~a!Z~Wp*=1!p?D)B(wV`64oS$Jq~AC4F6h>jiP8DsKQGiR%Fnuu{$ zV@y`lje?e$*NmQI);k$Rvhj%^0#)m!-y6SI=M8?%G9I+W-Ok5HDi0ua!)LhLWW4`_7c)K*eB-oBCSP;)Rg*74JUa^cU$d6J2Sft7 z7%Nz5hx|{8XNP+@vN*};I6NOe9N4A%X8SX=vHFO*Bk}(CKga97c|biKCBE0xOz)e! ze39XObJ$5;yKnZYl1kM64z=A+g*QBl?dvuXyu4X$6?*EY2qFvBN_(kZ-z!-{0g8V ze=l_S#HaIh$GGcKhzt$lQdkI^iRPW{%hgS%>n?>HpU&cM1z=yX?}Lr|nfF1jcs{jp zE127iVvQ`#K_z_TdFe`u{zvB@r!N^FSpkE&G-E_QrA$;Tdw zP7Ou=&Bw09f1S&0X)sdL5ync@L zEq&JSdyxiMy*()Rtq#BYmdx)w2)Z3iOC30K_o1WFk6+e7*ReqT9C4q7@+t2$RtOP9 z&a?X|ij4y7hmJucna^>uIH-mY`JQ0eX&if2eG_q$`VJeVWvU|L8A($Vs4tSw49tO^ z^?uzuffjXPQ@FQ}3PN@gN+E-kP!koL`;v4xFQVK9wuhCoV)5W)V^&jr>5N|Qq z>n%WmyU16X8mBa~Nt(#OuJ!5RKGHlv3)D3KnSBaU-Ewg#VHys?T_6_B=Acp{v172q z=*NGq=-_qi>FSNWaJf_4_bErM$zqj(-W^HG{C00t9XgHh$8pb}pjCY($D+ zDAbrlco&mpR2msOAc=ssR3kTcRb(MD3TLkXGYN$+q{6VXBAW)lx2l%X$n{0WIed_W zc%dS`1TZ)VcrM78{!7(*$+dVcbrwC;*wfh%HPiEN>6$^!A`U9Clnyl!+M|pIt$q}~ z;h+-O?KoG%Dclvb`SC|``W1U2f1EDv-{L)FCWlM3o2hyK-WLzzofBpXT<7pQ%>J1) z#<)lDy*h%D0A$qh7b1fJy(T*C&pb7S_2v1NnimtAi zL#={@QdE}PfHxjMe-6XHUPh-l5t9jQq9(!DF@sY8B$UA^nm9N`lNp=>30tht6n12a zrsT1p+)!}sI*6K;Md2yt%J39ao}*LP!6}-OYd{HVvV#+3&&$Dzvycz5|O7*EmVMTkh?+vULtEjH1~v(pDtr&ByqICj__?imlH ziQ|Ew%PHtVvlaA!rx;TXn@s=jc|3ox9R}u%McKI=^nm>Rcy`*z2d`cpMlnk{=s{EB zu9JyZqnV&`DjHEN;MD4;Wl){E)c|>u+}SbH$=80a@U?F?eeD~Bul>}aVB^Sl>|{Ut zrbOL8h>ZgQVS^MaNb$38B0u{CH(g~eKe6)6?lH24_uzbXP#{9KKRm^MAyX+Vr+n&D ztcaRJvCXuQnPb@(gkAv*E^EQ})%d;)zUC!4D4iti9v`m32l9)qd7ml`ZlLeWTb6zr zm@_vOc`?)ZP64at6FjpGRP)_KxeH3kxI&mSro%#@Q!r0dBfxH13;m%QzVh@WcI-AE z%OA*!v5IOXxo+uFqckvQS!6|R8~m&{!8N zUYo|x?sZ05gUjlfP62JaS1`LoN>(`_#_}stA z-*iTk2^egni*;g@M!|IZo1PQaH$Lq#X$(v3!D9Fzv2fCaiH9fpn!uc0V5Y?}O>k$s zIHqg%OrC+cflL=dVaNGeMxPPf9+PQh5QiWvp0g1(W*+N@$O{sih8r+n*%A}?k?In& zA%4JFZtg_%1P&g$Gafz8el)Uui$^EfFpRwd_O>Zk6uDgJF=Y2SLjpZ`}ZYjZbww>`WmoI50L@$r1GUT zl{~;gTo_AJk_ALz`F-CwhSf+Kd;a){^CJ?JlD2Ajr=Iw-MsxH{dQyF=b{gAw&7x8b zUem;Qg*)B@U4SE-gYmhLl=*7Sy@~+rzOs;j-OB8E9!3zE-;d`IxzlghpD-C;~g*GcgG*vHGKCdZF%K<**<(% z#4QCMpx&9!wFgd#6nyvk-q5?T{Vw3`*JryX@86jX=622aZgB-oUEd*f;=6z6!v2lh z`0hn%#IW(*#KD@igES5Euo+q;m^ZbBw+FSIjs3v5RO|vK#+x|q1x=KE1Bt26%u4+f{s(&y%vqRyxv7c$fx2 zMI{w{wY@a*Z(9gLaLOWE8jbF?Ti|&ka+8#`*KR>**vHWMbW(xf5~x32>I$XPw*gfx zH#LV8Jo0>o(`1|siAUbCKgr{>;t>;#aBs5c#KVzK2~|Dp5x4vTk30!awMFOtqXQWt z?HQ>52TQBuSF?cL)lygqkuuQx&3;`I>F)pY7KuFAY>_4szlY?>=erh0PK6}zWeJ1r z#`E|^@+qi)%j>rV>Lh8W9fM&alQM8D^oXhk)n9i%ejjKMqyy5m8wyDoFvZB+aKxbT zpYoWeu!28i z?8e|+NN7J`lS5kLUbnRBY$a)d4Hhsqcq(?yl)2CO(ID-wdj(TG%5|22y23}egwWcZQlU`Ls z3(e?p1VYQl_1V710SPK#oqiC8qJv?U4dLScf!mk!5~}DZZSGN+Upk|#P=I7)4+_;b zbxU4~_1BRE&$6O}ammsd;lgZ2Ch50sDAQeHlcB)Kj%0BtFrvfmeCSVzgA#c^ocjTV z&jmhNI%Bs&RLYhJCAFJu=ch3!kU|w&i#`@CO3T@R-@rl$-Y0}$G)bvag~qT!3(FWR z`f%hE8mI|}yH|y4phO=T8^!Iyi)aL4R+?y+O*C2$w2K~a@1uI6(T~RAtfMH&YH0>J z-_F==fNK7<{LTJH^UYk)ao<2ON`g06u%Z&e7+uJE~Trekl3tz7jJBO!UhgP$Zr=tFj+N;@%-t!Dq$0Bskie@!XoC;QisUe5u;YR;qI zl;m;CcmpuQXMKiGszSs@FHo=YgujhaZ;7KGdA>+ILHgSW$4ZC4&0KL`Mjt!x;}nO4 z1a;oW*W35;^>DNDy>xY2_i@3lE$d8Po*Em-jwp1eDL7rTlx$GR<8-w|Sl*O4MERcg z`TMTdPc>u=;d^&^r_n0z^I~#|`~2ZE+;6LnHoa{qGB(f1<&!j|*8I|p-{?6{WX*g7 zF)oRwBWg;5Pu)#AkPMh4(R<1VGVgUi6KZ1joo+HHkkxsM{S=>>oOQ z59Na)0!}sMgHahbmtrCb`iCPQj4$PekWrg-qvV5W;(RcqA9R8LLBV-E#mck9vI6%| zni?V2BqDz#FC?)|CXhy~VkQGw>8vUKPRsuaKV`$dY4|B3Y)peO9`bN?zhwBmJ=Ix=~JXD z4w=P2`ZUrH^?tj0OxpXcTVF5r;KRRNK)bt8DH5+5d-@X0;vvp@_=+4yr5u z0~hvh+`bOIaFkROye{jVRk4XMoUNpUWVJUGWO1~1=t}rvZLoG|RyE9IP?e4)MSy1$ zpVTs*^BmJ!#2LsWkGQeI=$#R9VCzdq4S8?Gm_SKQ`ENyzbRcVB7cer^5C7C&cSM zO~xZvuF`qzaAsb?kHja3n+{ck>(joe72%PIo-`}sB~mLQ0sC46m~>tGFL6|y?o|

9s*;3Z?(mbWk;zP2Hoen)VZ0`j6kh?JA*3@D8va~9llD6CoANxztOLMTwx8M`hU zo-z5ievjQT5U5?v?Ty6!zj_&#;F{!(Z13+(?r!%l>};Lk=#?*oqSFAiS+~b;=hFi7 zJwc(G5gSpswEpfv_h>4XKb(Nggz?ZBL>n)mQtgQqHTo*j;4fmW1E?U6k#)i1?7;1h z@#t63SJ+gh7o*z%mU4d^0@jv&%o@DiSNh z2z~ZXnpY|{%(b~7R(**%u=WO1b8SWgJDZ~NrRQK)u)x8$U7pnOsCLMkFT zJykfu8Tl-oQ3X!Vd@B`pI52Wi@`P|;#3Iw*knzQZ;oMKneAuXxg(_A?Y-%>SiXR3O z))*fdli0CL8S^}3oWL@U&sfG|g^VRwi!I?u=JK88BVSaJ54@<9KKwc4D~}=^Q+aM% zdHtqvWZKej~UI~17@USD>3@m4uCt8+;><9f_e8o_WB zaz`&|NcP}Q7@OR+({H#StGbAay^yWU+TY;ZF=s>(^*GN}u16g)NOVNt&gZxTPUQ}u zOM$ZkeBOUWDV^*-yR_gQK+?CMkK*;ARWa-HE;o&KVDda16$r8D;A@341pd)va1FG#GtyQL8;gw-F!>N08& z#FDoINB!m58PuoU!&v26|L#oc)9N;gVR%Y?{u$}&m(DCJya3tajVplXaF@AKP4@~P zj?RVqx%4YN~r zOD&q&>Y??++~}xv#UYyr&vFy3RO=5H=|GbjH{xoR4euBG{M;;L#k8!I!zd0kiWf#BB}Ykf?^K zyR0=FJDJkCW|a^Ad{p%0qbUNNkU25_Zq2>9)iYQ=_TikW;xF0G(8}4RTWMQQ<`RJ# z*%}6~E{{$b6v}O@f{v1n2oswEcRq}Vjmweh0CtL@Q)eNyZK1Pin#hM!E^vd=BP z)$;DHMlu*m^*#od!iCAb?dE|0kOc4zPRUdq%6>1DJs(q}w0Mmay^hMV=opdF@MG;c z>6f%6$2nFXa*y1C3lGQYqhNZiW|zH>oKOBj(nFj%vhfY+L(H>7qm@An6d9)v;zm7< zfv92?AJetsXLY4`tQ-MKpd5Wa{l*LELN`B%U4i|u52U^+jZ|LjnA|Go8mCAKftGrn z6L({9EU)a>9phv1b$sLf-PniiiywYiV46royuV`(+5!9Gp%bM-9vhZ3lkJOx_(z`$ z>4$1xyy>`|Z(kg@Sc4Im_QelwH|>jAcd>nu@^^nai++WDQJcS;?VIwzAxae`-#v+t z@<18f!TL6=E693_;%}J%_##VDy4j%MsJH{-M7cVKm z!w4|?#jgc>hyYdF0&;T#XME;eXF8L?D zlRElZ_$Wqz78>o1Sw9jdIqaZ5AkU$w&6mW=wh(&}HDOj+@gLG%OrNL#V8 zk3_~4c<&{aKAh%#&gyXW{~b#*cpr6s-yYBCeZG9(oZkiVMS7|)q7Fn?_Lmp1>>c}g zyseA!H#cV_|Ikz)`N4a=6~%Yn~RfPaJVuLS?bG?!ceaqSaJ9iL$2yYWUX5LC%8 z;m^lzQ9iE=+VP2^mHANkL{sDE(SF9|U-BlrrZ?gEGqoPy4%|X6}Y{mFDbSh1MKiYp)@i(mScP0@`2xx7ze3qOG z#sbU;BK2a2x#%E{!0;I9g0RJld@dB)kU+0WPATSVm5&YiJ8IM9mR9^%*$2nx9z*U8 zszcKe>?`EoxE(NOZLUP&|PbqcOk!9-sN!F3jT> zizSy-Gf&+v_mOhyR%vaNamShq-xCYVT%G}F%IHK9P# zoyQDcvn;cCKdFB;jY1&K!&QV7%RwMYGF~ ztVE+LWo5RMYy^RWI)xBV-$SXry!+KGP2}nvV!dP8loc0E3xEWH02M_^cxRTk69g1) zSC@j=)=l3?u@qEH#{5g7;xf&0@QryjUAF@@@tlo-PuZ0C_a@D9P=YN;{Xo?Rpu}O1 zm(E{53@_tZFj1X{jcBEO0OGY zoq=LMxntvY?%4O3SoM$Uu(m1a!fHxJ207$!n3S<<@p0wr(6t?THuv zPhKM|mZ!DS`QA|Vn!2bdj7w({4+wW+EyJcZx-)qtrVt)?NdtvkidHShVqTBM3=ho3 z*tr;ggZ_LTamkhRwms(H@0G1jRbhBtIR{7!h(3Ez-KrR zq=;+`OC7w`iXmuIIChf~4$?}yu)i+e8@asU#@AdL$g9Z1f2ZP3J_^t3E)^y-6fmhl zCPO~fbLlsbthNCtGs+Rua~tVJ?;J>L&c}Gi)*QaAwI*`E(#^h9g)8?xKZT24UhQ2I zZzcUJLx2Ch7f~-O?m&8f|6wDw#3h)SNR{g}w#VQ9{Ts2%I{f|3`|t_6J(T?YH(za5 z6?*Pd-)eSfx4-|so2anQwt?1d2bU$^%N6T&-r-i?bIwLFGhF`uufkE!cWUf3fB(kw zHJhfdzyA+gWLJ6GoPGWM_pZ;-!)nw!n%RrYpziC%{@U_7fB(TRYyADOu%Y&5?DJoK zfGgjcd7ptk2`@zvZ_x5mgwDL12r3(?TI!Mig>NBy7VDOd#y{acllCq)ZV&1);^}_={?Z@eYgRbfA7P*Cu}n4o2tUFf zVF;7WIV1qiD>M7Y6yibwhB5BOFSs89%-kl4%OVlWR#3;ND?lk%sy)p>3#v8I?Z{mX zz6f#8YEPKe8oa6%1nS}c@A0%p&1(PTUn&H^_$-%o1Rj7x0IJj3>I^&(G{1Kc?Uld- zSB-HGghOS()rEtooFUsWcK7Nn5b$A7@sPjVl>Z{H*B%5it6dGs1gB*wm35fBW1Q<% zacH0(nU+1CN8ulNP|xCDh+ypsSs0ixOP0ZT>qu^LoPU-3Jgejz0;uzR$|Igt`WbCJ zcRi~-=~*Suc*wuX-#x4BoxDO9=;1|KNlgU7qOZd&Bc717v(k&-f5ij?-^V zf%*%9_S5n*9_C*FUD9SG;zMjHb5BZjcM$jKu|>v30PGq3wrjqfNzHttD79vNCN=vR zUvSU|hqR+IshMZIoLX~_Olt0J+?ZN(ecGBJs}~q0sWty^WCndZz}SUribyB*f4~qW zPo&Y}L6Vg7V~6U-7|J?12^cfwI1^#W8Bk*awp?!0q?n(^UtklHcZw0?bn1s{&yxPp zNX_AuF9-0HcQTa|u&de8G<=h(m{BV@O5}`D-Js%|F(Ru1BeySq4PrCy?Jd+g>}*0P zilyNc>Ngxp<8(EYhM!PJoB3UcK0X(YN-|!hPd**UlkY9hEK8pJpI4rK-tr8$w1YGB0(O8F!)Dz+pXnlglAS->%>fPPc_NRn=rDvmB+)b=GWT8y)gBvSd~i}*X_ppxd5 z$QnxZv>X(vbjgcoA2RO5j+h!8=AI0y(~e<$;XlocFqe>s|*%PVm?0l4>Wji)Jy00newWlG4R3nTaNXJ5b0Wc?`G+R@k9K*!gPHb54Ji?ZS zT*E*5{F#10WOmy_f8fGC=$ONP@glo8`+&+w>rvs6P%2=~_LXo3}m1wBkk!YyGN;Fgh-i9O5 z5MuHxS8~R2+Y^nwrEczp25z4nb?YdN4()449r}rO{B66(A6Ds*XA8fl`D$_sEJMfU z;bf@4A{1f79=?1D(E)@e=AqdUJn|%rldyh>mfw+aR9Yc)Hw^vPp}%eU`pc4psvP66zacKoWr52cS^#S?D(Voi~ql*WpJ zpQ*8?W`3CASl#s?jg{}9dd8Z{OCMwEL9mFheR&)eD&KR*?Kh_#qyx}2_8VwtLYEXk z*?+-)^W9(_is)y*+0wK6T3Q0g9aW9k`W(19P#=|=G0ZN=8#PUS;_R6)yukUgu7m+- z7=Z=NmE%0;)r=)|+G(A6kt@SGLomCQKZ(m1)%-HGJjEVhdjZ9Ww#p0Cvu+&rLK0HR z1YahKmn79~iMsA?b(XoTf$PE}UbnB|B$XDd}Uy2}N{_!IyfqV~OWvv2BCPaf0##w_7=1Jjn$7%1b6P z;t82l{8q?B_-$*F@bsk^ObM}!>qq9vVKT19gaoMOs@^k$ z>eQn~6IUm1c1os>aL(7~V=|e^)LYE-QV1g<-w}7S?@7QDhG@b_v?|HeZOH(tS>0p2 z)JUKj^S>BRV^Szl%cGTU{~(T^EN(9H{=}=Ge?qK+GqBCK1*6FSDZJ&&_%jU%#0-B% z+KA76rOhwDdXji#ZG#)4r{`PQp4$9#j<-cm@0U@zV01DRd@*nKqDMqV7D#6RzPYjF zsebKkre8Z=)ADOa^!GA5zO%`nOO2QPOdBp%vA%~qjUTKiOFZnNwL1q78#;>dunYJ{ zpS$RXiiiE}TV427=I`tTJnXqMJn*n=C|b1f5`OEeXc8WlA2hE++vqxUgU%h(jfW+< zu#Xn&z{CE`UhjT*7_LKOKBnu?{6O8`S+C$^;zZ5ISre$c-}>%md zNinU!aJ~7owh|yE<{d+4fe-wNoRM+T4FHDIei>g6;=~YR+X}knLUeN%tLhf@30` zG@FiS)?DS9l=B`_)WU!_GrBg&Lf4vtsW&y!h?@`-ubP5fHyID`1i?2Z5_GQRri9wa zR6ZAFYnD@`FgD9jZk${h==R1{n6=uJXnl_cS@&A9;Jd%q+}`j&N2K5;30BeVjSxYs z3mXwMn4GD5BzjUHg683B%!e7x+W#`b`-mzmyCzXNGXuQuv=dCc@6j=g_vHcatK(mR z_t9qBMZE8?EvS@=_njCZHPq+z3Gci1G1QCnj*n!vv+PO4Tt2`WX+*Rz^(ohU66maH zS-`Ba`PBPyvjIt>7U(U}stM1GhBS?NndKF z#!ll?Uwe$^obcsS|E*Ogn=hZbXWn|F)k`J-4@R>1gn{%m3?q>PhS>qUvTU{NabkNj|l3tzbU&Hqv8teCpgleU9W) z2cu+a2t`hX-*iI`u`-Q3+78^LXhe2@4@5ht4M6Ll9KK)oPGE+~Too+eI8@D)dLUCH zNr$Yba-Lu6@_Wa?Tj>p=Ogkzct{KJ+mIg1#tU|3lm$ zlqZ?`2-%LY&P#rfsh^Vgt`pqMH(z^*S2d8SulB6Ahgt1tuWF!D54EeA9BdJmz>J+< z#4Qlw7(~zt7?;|Dji2S3dGKfU*pS3XI0&RP1xsKIxi4&3@EW{V1TA zhOi}CvXCTInKV(rP2^A$N3lqbCU(uFiF|H?toR0{Vsyd3@n2-{B1PQ9ZPdimsZHFS zRtgzCd;m9d5}HY}*^z?2)W42VN~K8WX-^arAbwd6HQIGiq-VJ)(zm!M(gz)((e!M>XHz<=7j5el|6C&kaV1Ogb-@G2SKt9yUmfSFLirRpn>q zFZ=L?54Gg^nfc2FAUt~X&vJ|W`ZM#F3%%v3wd7IpZ;`t3TtLN5Nl zsy>v~07dd{4Ce~7#Tx8cLLTBPv$cW@9Zdqn7x!EO@tOU}AihQYoJWn>ApTqi@iQkC z-|}=CVlBnqpp=p4U^_}>#+Ib3E|;+}+Ov9g2GyAr{FrC;xzJz z@Pj`9;Jkc15pnQbD}U%xkw275asE*Hv&bL1v>KqbL=5S z#}HOBWDNi4b1VH&?I91f{~Y#^M^5svhg9I^LQ3D}H#Kk%*+X&$lF$}E_|iEVw8w1^ zSn|9JE)$CPi-N@`K6FE@LSXG7L*gIClXot@yDp7#Rm}su)lgdA9jZ=&tr#7wO7pCq(LUhUQs*)^(=le3>5{cp~5FViR70HE5DpV7>iiX z$S0-)>p$$#HU()rl?5lnx(`N_%Ws5ca&1oM+WUrDpo$0)Hxn)cK4lUI~#`cx%X z_W48C(B6(ab>)5d$z91${2l`Wsr=*vhR^}z%1_)V51=WpXxDgb$j~Fq1Bg?3u76(k zawg`6vtQ6RZijElV=;VoV=^}!)Jz8X=0IH&0}jMdo(RKfdsY2MDn%JGwkQ6yRAV@m zL&z`l;MKI4{ho@DfcZWo=vy--K@ZhFK|N(MCqW+yqq*_1u$-Hu>BRZ_YR(>C67&Nv zX$QzYd%k)~bN0mTc=B@Z_#yE;pct~clRv>4C}gRCF`2tn&DK}}=7DJW93u%H%ITRwka zTB^1z_{ne63F=A*ZPEAy3>|(M>O}P~9Itxk z*oPk9Kzl6Koo9G8jeTf$(_->p<7-#;(BY#x`%sU-9a+3Xvwi4?qp_{(>_cF1-!1J4 zDua6}HvtAW*3t1G~?!WfMv|R}pK)G)ZtAFSns-&p>^?{cKEG!5+Wfd^QEq zNwG4)I`tvoCd?hhI<<_em=6;fGLd~W)`usfGRRLm4bKMgxXZX+qk6 zwx(-@8mOz|x>$CD*!F{8h61g!I$s8IxqPGUeM~C_h0DhlY|_|UoF51B!OmKo%ZBk8 z=N!df%rGyj%_O9f6?o1bIvv2~ck1};ul|#nyn(vM@W#ZOPUW-%Xdt^N*TM~*A`IvLkRncd8!A*?i z%a7l!JC$W0>j%~e5-;wK&1}iw)yZ?jPc)Bn-%5FBHUIAfDb#+=du9pb<`KZW95PoF zC`swy*4&aE4E(DB!Mz)T9Hv7+*>Hd1;u9*0WO342oy9HOd!E|m=WF;zKfiE7^Zj`TYxt zVHoQ>c?y0&eMU}i5%1!*7j_Pweb)X^8e>DI^N&6+(hn8SUNrybz_Z&5J@D))P|WG- zUG${pLP>b`(0mh4V1EDok5YM`>Ey<->JAUSax}boay)P+~pQIH6E^^844l?Bw@f%hy&PV1i`D+D!39z<23=5lG)x zWrblft*rU>12KZ*U9!H1G_3r#o_&p~Sn?#RWjnAje@|>bQvkmst{Y<&T3K2HA6aX7 zunqWlBb+QS71KFkmHAPsS3maBs8_!5{_&4%C#?-t#O~2REbuVm^CcsGeF5oZ;`*Lg ze|83V^>w?Nc=h!Dj8{`UjZ690tW4r*_~)A}xXzU??y!rfJA4+rnQv0f7xzo;3t0Ik z*I!+Lc4c}nm;y=)%#?A$`^*)M!}338yxm{^8?JTbSDSQU2J#csVh+H>-{=OwlK)YM z{IC(A3ADkUb3%5-KHx9!+G||>{VL+ScB#MToRyKhlZ3poli6jVgt{G`5Q@xJZqH2n zdnn1T+FQOmKLh#I3Y*4dB>zE<{-*h&3U2YeI6vE7xS?78k;rd0&-Hl%HVXCcd*O~~ zeRk@51E5rh4l?t5n4y%MVK_@sIT4{9*Xa zob zs;q6;zfdhudl(-(BikYnr$-5Nq(||vV65NVB&8Q_!->3mOaH8ySvf7i*a69S|E$^B z)kvfOXHt5@$V&K+I@C8*5wD)8zzN0^oR1&UlO zwgxBFWcm6FujJQ%VkD_ueLj1xzugPe1*5cGFr()asDMZRg?>nB^S_dh_Bt%r7!f{l zMzjTb(^AHVn)9St&QHd3MgC>mGbws%L2hIH zfzWSm`L}7QpWnWm(qo=#u?v=<|FNaC)}r5(B!YSxwm=YAh6a=fVW&ysQxS`IVt)xNs;tUX;&f3enoH16P;i2a5U(x_RF$7|Ozhd0z)^ zDSsi5H>QX`7T{!>diH(*ugVGs1@<_zArzq|D3?V2f*OQ3Kw89L;N}K^i`mteV3$OP zkyTr`Xu5#h=I<*|H8?IZh`GBQ8iU)Ko$e0J)&SJ>p7T|Ko}!Q)`@5C9Kzi6U0VC z-w<9;LwPbLi9N+EpZN3lpXwG(%38SV%C4=Q3$^8WC0nPh%*2Tk<0cs3G}F&IpAzrf zp*d>fD!<6Gk1qjsZ`;TB7;W0ez4$-1@jUZ3ksqQ#^x0j&__+zgC;UR6(~VtoFg`L! zdp1GdxvMBVWDQY1h5kVCcHzg2$pcR5yd3)=rmv0puM%4p__wJ~n(@1^EP#qFS7FP| z!|h2T@~<>RPdgXx@3EQ&ae^`r zvT|1+AZA!bw3H^ zieh{P>XypwxONNlo4w>lT{`_ISc!YePnLZUgZ9afvr#U_##Ct^jAC9xo=KOGJbs5N zCDMx0(2&v{4@W*A#i<9Pr14f{y@J%Rm+__rso6w^6pM6i=qwM+IT}gUN;l1i2pfee z#(B#^%RWa?9b+rL;`u|h@d_|DkC3HsC}UBSH-w{CJ~nX{K4sGNs@?)UqV;nH)&6tc!t~pJ?ka+w#S0*t0W(;PZ7k*Syx+nR(9?0#$*NR zH<+D|hxf}})xD~<6h}h8$il|&59+@#IALL^d$Unm5QoJ?fG(A8*43nvLU9Z|L zJpy&Rn$M3`y%3BJmN9e#b-&~1LN1399bGmzj7fs7zR$>D@M|tM$ni83sO*#>(#mk= z{y*y81U{>tlSkVKXn6*TTqV+k%5RFnt`1DRw7X8;$}s<>28tXdZ`ENTFq#AZ63 zO08P7+Lzkp#kRKS+ak8FHGzi)mhM-9P-{(2!ZZr4ZB-s8w@4uf< zB{OsGxzBmdbDs0;4;M!Xq1P&?Aq2Q8i+PM6ZSlfu#op{4yNzD*-4ESfLOSU@31@PQ z#rbUU+%K9H6kL$gE!_i_0DmW3a#aa`aZj%ExC4ojcM4d*YlG2! zkg^62fRu$P#-rjQSFW;14toHAzp$PNN?j@x0Isr)2rHyCMmF^LqW9*{#EDm5Fnr8a z061f8j~dmy%ymBgD)|rXY|#sMf97^`n-5gleK8MAB@k^6L=Oa_U+d*ota56zKelwT zKeGD}Y}?A3OC{Z+JM4-u6>VyryzKCR`6y#DwN?Eczy)Nm-Y&%P6A>#^qKO`5mT>}qkIiR8Hk7Bi$mk`a-lh6EhOhvEn9S1 zhEo2tI0Eoql=0~y>=zfCVXolQwsKc9$pfR-nTp$EvsadRCf;aM=KVAG^CE; z8~dR@TDDC0cTJC-H;RsKJe*5NdJ8NBGwcmQ)sBTKgE8L<0^yP@H=c@fQ0Z0H_<-G( zK)ek6ycVd(<@AhTtZI1`tW=A0aK?QPLekLoB0lURM6J^NM}6C6OX@IpC>KnW`eIT# z_13*)d3dHekiDV20S@$VL3x80|Ktg2?9a=qK$y@Q z%Bz5=Qe0i8O}Oo1u?dfHX-B(rA*1!NiPd;XFh3VNaiYEx*n!e~Xj1rZo_@l~aH4O- z>HLP8#OaQ20Cb{|64ltp85{IpZb+3#EFDV73q=!Zt>Aa`H^hqN$$KRnbQ1P z%lspSaWcx2q)+i*h_l4pUJuX8#?uJ3n;I`zc^8@eX{knjk zC1IjESXih$u@`d&lwzc=49@jdmdNlFT%pvQc>ut~`;!P~EpFu^j^4@{*g6=+)WP_3 z0LBdT%bZc-e#wc%+05*AGUyuQ^=>fxOKMmo9#p9Dv;Xp*Nf{Xnj-t7f@A4asoS87h zY@fB3mr`*OvmW6=3uu%ts&0=bqKLRbX?crV;lGL54gxBbgtC5HIM{RBwCU#*I|vnZav-u zQ1p(q#GMTS3m=7Zv?)2>U^ANCDRF`KIBck$bxKYObn{@k{UNkZTI{5f;uR=SWuw3O z87|xg8yHAfpP;;D%I29q+{9oZps2wt?O#PC5$ys|Z}}^3fDHcuBu;YIjG*G}6jn;; zcAFDjlO*7F=G!gMx^W?`2t-S=ppJou(w4#%odQ;3fh{A)SX( zSNP~|5s!}FR#KI-IRJ74G1khReCGTcLWQ3zkJs>rDH{Tjo-F0@HS*K6=+KKOHW~+| zn=g6Eb)J0Q4UFVZ1u(N#_+v+toj3L{&H>C{7sI4A3u_TN`HlC`BzBvK$G0TGvwT|u zvMiW^`w6~gRspt1l%zSZr*2Rn*aY~$McSxDNOd8_4aor(s|Q`?u|yL4K+q!#}t)Y4I<1gyUJgf z1*xw-81*$PPb46UATF*kp4mo1iMP_1LAmWmBXX=U5ZT~KBHg~YQS!}DMs+gNTRGc< zUj`Uy_KnF)5!2WB7~<}GJbWG?YegG^+3K=D&$8+y*zD{KnoM#_nlaf*Z@@j5nU9b| zxTuCB;;_*R>tYt-`;vok-9ZFNM5`kW9_7u3_|S$(b)Z^3N?CIuLLSLEQ96{Kh&_by zjoSFVp8XN(LbM}3Vq0WgpnA_yp8ELE0g>tf-pWu$&rMAvflt-WtoRx)!CIHQ5TBM$PRomaEGyg2Zg*ka?K9%} z7eGWq4l~TzWzDd91`G3uBPdV!`Nk@4hfSw2kli7c0rG37WsqaBJs4XI#T14KTEz=I zd`7!JHaIvMcGarkbf3^FCh{-Ac5iKF{;_0V#WEhv$5q?{W=QK8Mw7v1g&S#CGK*e; zL_Jh?fRGRcX1}ES=h-$|hQqmUyfU6S5w9Fz9PeDy)yg!@P9NNwd#T*-pYI%)0kIGa zc^2Z*F)Qv(QI~ie(vqO)eags;ZctlAIeP7cd}_xZ)k5eO}6;s zGjd|LViVC%9#;x_Z&8L(9M`kt-G`UE@NRg+updH}uOe9d94xXAG|AT}inEaX^Y48(u9`@l_VnLBjFFYb!e2GF2PS@SS1$)?FTnx&Ne zygBx8UUpM*uo%D3(;aC7H`!@$ll`7%BCi$p(V5brh`spzPu-WuOX8}Bo7G967J4D9 zj?jrap%d40O)?I?Jexs5fIYNq#Cg*-vKcaA=~?uLKQck9nda-YB@7xDu2nwQ z6l!4cU*L<>SW(&;jupjv^jOi~@{*+BvgLi3`&WzSGWp+a;z=Ja%|ige$eV7%KOjRr zp7g>eTml&S(LXKg(-SfOxH0_Cu-oY$@GZT6+9N;jS3K!F64NMJz;HUI+W*m}ii&2| zsSSKAkTMq^S#~zN7gvfE9uWQ0d|0$BllwB69Sr5N*eDE(|GViJ86^L zi_3(dQcHr$-*~X||f0Uo%I1}=ZneH{!p?`@MhN3e#bV2q*m$9Nqgq#Gy# zyZ9LFqLED!6nf2(=QvI{&f#N|&>M?@m}24)bij-0GdXbi3v|iAQ6%Ta8-jwG=uVz2 zug=7CljQc>`|x8^HMT)~vx%I#ejP5%FGMtS@5XO1{TN1Zfn;EK-ivN8Ff*0rFqOb& zl?+=0j*_A;V~reMF_E!_B}=yPY?}+)NKNDgoe3?ed7wJa^WW95ZuDZ3(DK0EY4kdJLc@?@J#jZe#9OXR1;W zAC^O5dFh1?e)$(y!j2DXz7fwwhXkYZMF{BBT>M#pf(K*jrcMT>0G`xzRy`leF<#{n zp0v;P4*vH|0@9K9fR>LU%A!7Qk}fDvYjfgr0*{`vC))U+uP6*HEnekoj=XSuOyD1M zmj$n__tx3#9pY6!&TvI7vjC3VICXmeeD0rw+{Qb^tMsSdK>>t8ppx!8OT5Z?r`yy! zc#$uZ*2E83-gM-6@o|1tyHH@hs7V~);4a5a<-VWfEaeO3dng?0!cI-`DtVgNYnTm9 zcIQz1PFyH3{qIMJM_vXCh#mYzC&zV=akC?N5iOpnNqRZ~aBJdQnlH_E=0I#BN=b2= zznV6D?_z@7!9vy{fD!IO z{92EnnPiEd*?Mjt<7etGAYSWm{3(8>KwcDyU$~Eq_B(DS{Gh6P=46OPbusi*MwOvyrp`5L!Hfywkh`~|@>fXlZU|AHm? z*5Y3n;(S$rA4Y)sl$aT?0L0APDeSLD6fd)TojmjUQp|4k)OeYCEnWs8GPA+qi6e1{ z%xZZzh!B~Vw3|Z2m(;`8vsRBUsYjG=9t8!$R17Z)9O5zf+2CFvnYwYp@nx67G0+iz z$m5MJ$bIZfFbzeCEM=GNRCobPw?c4iPcFEV^!1M9a6{gK9|BPjWzb`E7PDB9SG~P@ z!i)vM7krtty`PE+YuF7%1AqubupZ=MaM{b=bbmw^Gk%rPLA;wnTl|F{P&&tW@;q*^?DQmTvR-&neT4@k zu%+1qmbw6FgG+B0K&VP)(qCA?7_kD;zDhz*Y@DFi<2!VRyaoO>XZH<$99XQ=4FA1p zrEyHB1>VxW!Y>1O$X!BLO!!n@9y7WG@PtdsWc5Yn6ZXdHdOn69Fu9(O}gs#jl)tDotQq{uo`f4!M7 za%h^erXOqciF+1<^)`FKJC>px8O#PHxUK4g@!PU+a)U}yCwfPLRGUi|VU>;3srQq%@GgFY8U5m?3-Znv<{Ku^}gh6&OX zn=j8nHedct*n9y@@^$?@>H8=0sch`Izq=)m?76?1hJRSG*82ZF@b9tbj(-ojYkb^o z{LiqT&_8B-?(Zx5X3y37qj$>OFOAPxt+_2!RFtf_HJUXS`TZmRq;PeBRbqWT!kSCv zkw}?7dM;f?4$?PO2RNxkQ@(p>{KIa^pHv-SB~!JKmph6R zDgQIZ=w0^EJkiK{IQC4JEr1um(Av<4)OoW|OiN~!f7J(;C#+}I zlk1vvi4%WKyXC}J-bB0LU~WsT2l5pUb~>4YJ%|(kD(6W$n72ffZ9>V(fNK&m9+aX_ zm7Hwy=_3a$1ey%dA4gHmHnX{@&vl{KZ|KM26D$p8ny=mYnPEV=_8PatXXvAJKM`(I z?DyyS|2ntyp}X&xKXVF5PJuN)m&-wvcxp>a^r!byFCnKWrC!3Nc`h5O)q5x) zl9tT*l3bT~u|~aKLR}O|)zO*Qu9>-7wS@S{25%m|#Zh7YCF&+v{SUpszkdqgzrh5~ z!qfWzzxja$C-e#a{}zxc1%v+LJ23J!D@wk$GZ9qi#eVP%x%$@??Of(Ok;*N%mc-xHYK>d@j{FuzVJY;j?S^mL+iSfN6&AcyO>}EnX*%KZ8SwEjl+c=owg0s83 zCL`yM*4M=AgKwPfLUHeZ_7bhn)wLvCSG(B$;s$&gBEBU^Bpng)UgwgCc={qYM5OY& z?mO#n=fMwYq90ffG<@}vZ#j?sA`S~Adog>{Nd&sWePs6fWq0HqlBbR-o8hsO51jjl zfA4B+V0`57ufRWGmwG(NnRC8@{_w?{9La;k<;%MpS%1iDqJM^6MgN%fhkF+HNq?}M zFM|=q6b_6H%%gtt&08cV4GnMvibCf9h{TBa&mZ7LD5n?I{t(}Wq7%8owAWPR`3C_+v6Gug+h)IXy8bNv zA>&ydeMi5{QiaiI7{y{ra1~K9KLW;ufo?TSdhkvlzTLLu?5Ll)*dh_fSyqo!q>2N= zFVe28IRWOnc!{Tc+oC-9HrmNx8u{|*aIyM*NVo>C5%%!_9?w%*|WnH*^xCJ7LwK)J(E5B@S^Z zeg}IYLrSLIik$;9GSp+_f+)Uih;QvOf8GF&!-MJ!+Zn~vY{f9_D2G`B4Xfx4myIUj z!08Rhe+b6r)*~ExM84=nx|PLxfONfz)dwF$lH0HSL- ziLf=1zasS=CaBvmb+SmaAu7QZsdn+>duY+VQ6z)e={ovTzLt>ZpP}d%!6E<|pMHfOI*=_LA~ zjug(3cHAlIxi~GfdGz;OX1X*Qb$i;?e702RAKwv%i}tZq$r1EKWL=LpI%_7~uox5V zHrtqlqANIqO@#%F2X7)Gcz2D9qFbxmM* zXMt`t(J2U)StQ$U5aB7v06-!Uazv;b3aX;*LMB5v18qFKMA>keVC>et$rEA4-4#OG z8-58y4kHC%ERL;TnE^kFB?Vx=@}o^WQ*alh03eZpQvgai1t6H6;1mEc*?l-0ZOJTt z1@cC8-Ga;_oHYv!{pb~!On|14=X1_ypgJ(I!B&v~S0>2=cBsJqb%2=>Z#U8)1a6ck zjx+FZsS_F&8fc(v%^nR$o6w+TLTG5{Hlcx8gocJXph2dS5gHE5guIGBxS(MR5+W|P z%2-y1Pl@!jd`vX=+i^}uhLK?=ks5U$;(q)}XjgI?O6-|uxvf95yoyuCv-thW^j)TX zmbndkWbK5LiwHCaV-})MYt&Q@3%M6zPu#vxy;H ze+>0Hm((AxJ-hGvqX{3KW_*BO#fQB;mhhnn&l2plXps2+AZ4GT6;8V$!Ny$BTF(x<90D`BmapIyq49 z$P_(k&{;2yY_ZPK=!lHo2Zs#C)Q(3bLnT zOAAbKMO!nE%OL8uihV{Rx;6#!)l4%$8r36{p6qo7dB@+0fhq4XN3K!}?>wRIQJt6N z>H=sU+WHXya~D2p@e^1Y-OA92D#LkVp;Qoulh!};Pk3}|7MEp51d@gsz`*$r(cSD= zge|1w^%FDRc#7_B+y%e$yB;KAGJ(@!`oBors!5y#uIkL7nWe_dR>*j)I1hHCefBtD z+NlhNodiyc)W`~T2LkcwSbb>Ow7R1GSy*F+{7s{rV2rM8=$}w@DkuXad6uDaQhA7u z;DlG`d!>9iX&pph(Y>}7l9KXwd-k;SLwaLQF-4(DEWBzK$WiAyRS3>J<> zMULh2_u-b`2czmmAp1}tQk0+D6QEpHp+Rx*&daZV-s4Q%fe6ZEWR#MK+>!h?$NNd; zjfgMgaXT1v7LbDunWPd0Uudft1<=O11Ph;brDC*@-|4s__?u5WvIV%9lKHrQkm2?! z`7qA9_N@7!|JMCkI$=~npfyqEK9I_0NaCxAK&(n0L;I(H^#HySN4g~#V}=T0nO7+* z9->$iIGe21gSQe>!&@(XxsNwYd(W{hdfW2!kJU|QR5(v=tS-}ab>7Fm29r?cL;0WDS`CTqUtQG z-cGkF*EGTAfrkAS8lKY1;gj0$iBtaDg_2WaL{>_LBXONqBEg!yl)NA%F+hLdZ2JfN zh0Oq#>l;hY*rOM_kbaHyN1Nn5e*pFbS)d691>-a$?y)F#S5_#yhI-6ZeuU#5Qc!k< zWHHJMLRAAO&t=PlvHMYsU;{^Z7G-2y8N2xl)B&mW1d$XDaXmot1Bm+RFG%!s*hv!C zCrkH6;+&JHxD7@EHvzJ7#D_^)30d}aS`E&wsaasv3 zKr-z$kN|kXm~XkP-oXJHAteBCMm}{ds5U-(rJPxWWKkawddI>^E{6_Jk87o;1x$3J zcNe1A8p zmZeA+F1es@Z;y1iWPF4!+=ql5WR`SHov|lFR2gp~rf^23} zond5>;W!YHaqVERDfSHEn$^BdEPbgTy9pqKBl`{J(2n35WSuj{Z8r`5Q*`H=OuK2s zSQv|mh7w>Ta6y%=<Gv*Ql_z{P|rYR&qN)gJ!XKP!n$ za9c#*<`N3J=iE$Q*tBq^mI78Oc*X2x^3-4Xu$ym_3f+-!a|)X};OHYAqkGwSIN8R_ zui(nN-b1duML;LH!BB_}m2?Bb8N{kVkMM(aqP8$gV7hlD&4bfK4!LL@P};85FNoCS zz$J$LTn0-dTw>%&Cv{JrCGw0RDmKLa1U43vB{VUjEcIQQ4*;7?Uc4lBJ18I8&CjtT zY~oNCEvY@^*+-=?5j?MyFM&})lN_LJ0Sy-;OSYYyVE~=1L44M@zB-i-m6Z*Wbnal~ z5XBi#2Pc;tX;3Ni$gmP0cIH1$L>&Gnq$7$tx0k)=vXTxIViY_@DSt+~KnYc`>#2Ng zJdE8IUY0qF+_o7RLcGoB>#YId2K$E5rMCfQq2IWBt)cC!_|>= zm+CXIRHUSl5_jYkE>)T`c*mE5evl2#^n*%GX2O9Zl^x{oan%kiMki7$;nbK32h@P) zz9b|JJldUb4#95QH*EII>z zuk+EjMA*syZioZmTM>D=wk&36&p_Swh4d8GDGehYIW!E zE70d5GoKi!?BcT5mGZG1b(1j8w5#j*k0O}XdP+Ya-~usBMGDxW0u7X=?W80)-|cnW zQGyD-sH9xWlTUR7u~wMKen@|CiaSmn+fQs>@;%p=@EeF7jX`!zWJaEc4vi^d;-73X zgapBn_CjFt4<-t9275ik3i9=lWeLIod>BUJPH?a56^W(78iNPw{n4o~GH&^o7h9cy zeHeJBw+;v8jCLFhh|y#JYdF*v2p#UPD~E zsD6_pgaCxTBfvc~ANzn%ej%bCK(YviXjHR#mx+S;<6;x>5ak^Etea%2*`sy&jq|0(xN3MH zo~2``A}FF9VtovOL}{a2ax}?ODAWfB(9Pte&xl@FRJCrckPP9Ps!5DvEyL*l1`2+G)I|%w zIAxCuzu=NjAX8=*a1{izJ3*z&F~ln}^D{Ecw^vJe6b_P>;Rs!0j2>JF+5^t9$+a@S zxJVn8IR9yvO@;!m>+hOB@dn;u^fwVHGSaJP)#RJSY3aN`H2yvDMVG4%)^A*2P~T1h zlpRzBJPNFe-7E)9Nwf z{9MfXr)$NmMCj{3a+^;GAS6fZ#dTiE9;ljx@}S$!!^IYe_%d)K`&Lp~5jKB0r5Mr1 zd(5N_!A!JHgs+4Jv;8EPMQU!aNM$7*{IP<* zc#o$`z_E|`82QyrP;#YeKOfDk9r}bQ0nihiKIz&Q9BNZWtttDLEl3 zo3~mS9ja2%b`1_EP_Lxe>C4@Zw_%^t&i6b%-zZ)v1C~-xc41krUT10pNMz1)Y_VG@ zcx{KU*li=B12l8`Im8^(P$Slhr^h|FgCu{LyvS@&lXx=Ug_&*ve#~~&0cX2UZrD}V zas;mv80hMj19^T05e_s=yn?oX12{S~aoA3GY751#fMgJgEr1*cc_K&}@2+XF5uYMN z@jUE88>$$V-b#N2qbLrw9~1{gw2_3U2_tGtQCz>MO&uxt8;vC%MB2Dg9^x^0V0D2owZ-Ml{(oHfDI9QuyI;6^D{DOR8(W} z>U>u97(=f=Yl9)Go=tNN#LQkmg@^$s7$~$p zQ2p`1K%_AXF)m|>?`Yrq>oQyTGZ0BOx!378DnGBStsq0GSjAtW+B|(JBBDqW1?UtG zrHgj!I@}N^AC_7yJqtNgfA$IYXBjszm2FPUb{)vJWF7d7p5TNBa#?HMV!7VK^9b|I zPi%^W(w-D?;Zq7=Kpm>7_(B|X63(-C_@hn1>;wMD#KRfkU-2HoT^WkP5=jrx<-R5P z4legC$tdHJ_!dCFFzRwQZg6tk-mCFNtIr^Lo6`dm93F6V4Igd)fbdEPEYWSbIdS{( zE=KkZGTz6kpUs3RfbHtG(SXp;go;0T3`yj}fGxyFW#+3?-yVqV(ET{^Fyw7Ak%8`8 z6KjcsI$0+mxtCJkQ3~9r_Aijj5$$F?JOO5R8v}*<-{QP>un`d<3<#T}g1|fjELzKn zlZSDqaHx(DJ0?m_zKS`s!*xWC!t=LioSd)u+*4dQd8#`%#)F+FH#oVM!EoT@I$9)g z1NW2j&}n2p#Ag(>p9W^m#n`A?xG8`P@nanS1<8W=Ipo!?%+I0HAR-Kp6dof2-5}>m zetsDnS+7UD*o+*1VWEsXB7Tmi(ZV%S1#!8$G>4~)dBH+j)T3Bx#(+pID)Q?a{UokZ zo4t}<)y!wQB@DNKCa!maNFc7yG%KXKi2C~qmt*MYq5g<7(j9lf5Gf}f=W^N566^rAP(XL1F!qW%t;wnoqQ43vPU0g=erzLe%#u_(z-X!AcCH7W(G ztw}s|q6?L#h7omD#ErTk@aOcBppRXTxC#38~M1M-}Z*;G2p?EmB6V_-N!b{WE-3!B5clXF2p zKq8$dBEV0H(=`6bMIEA6Z>tf)hK}VSK0dJkPSgm5n{O*ceHelRGB|)>0UVvWo~dIo z%G&5Dd@8>e?<_)|qD{n*-ux=D|8W=6b&M4{=TsL_P}Hgs+R$S;E~J}UPe#+<{7k>D z^-H+G3Q~No%JRp&x!5ueFm6@9(Dp6%Ahr~$N(=7PS`puhc(P_0fy|VBU(ANGPnMKj z;Km|}vWL`LD0{{6{h;h2C%B@|q-Rv0>`vLBWe`Kmn-!>o-4qc}(eLNL`?>(PR554? z#FM>i`SjRCm9)Hy9*)jNU$PC5Ef61ExM4m9qUl&0we(U?6e=5j|AJ@?wvFi%CaRqK zfUav-s0SIjQ(9GuhGz<6&$AF$alI935qgZ?;Xfqw-X}?apSa%gC3+hWQ01sq6MFOO zH1zHx#!)!3AL#u95AF-&_%4ItaJ_+XNKv8y_B`{=(C30NPc1!?)3w>2@i|B0{oMWm zA>Esg<7Y$Nk7GH}kg%6hJp}}Aysd}F9Gv7YM8n9d$0$!%K|w9A3Kw$6K~^(JmLqEm z>qmA5Lqx$$9V683mgF#c5Jr2}zMJu^s1Ty*d%C=*<$nawzc@N;IU8(Y*5R^yf$A?O zh2mx1fw*tK45~-M6}m01ggL>~4jT5~Ky))zXB>^?)FVT2AX;+{f}vuy^27!3RiR5# zv;VP!2e5GE$M^9U)0>f;4NKc3zlYis91g`Vei}mxPtVAB^lG$1f^pbC5Lbg=3Do;N zu*AI&FfJY%^n4nq{(vM(WXFY~-N9IBc`$o>V(7^@E)r_2BnC?iL66JzW1x)MSB0AO z2fN63EgyXQ7`F$py$GOdj{068k76*p8M!Jj2VWA*-l42Ht!q8{(IAYjIf%x+q3m~( z$07Jh>@PhPh_<1Pv$7^Dn7tL9HmU1H=?OF(RTuExHggYU8c!aut$PB6?{J|_Wy(9a zk^Irw_};e+zN=^#J=^6&6CAIYWl>HrdnbShU%`)yhIxVb0#9-heGx3YuU?7#3`h?t zQ=3s~Sg-DL=W>1^zQ{vMSjV%;r(veT;uuvx>pRz~JwzEMe9B_ULB;oW1%fb`P)hS? zipAp)L+!p>Eoi*eoE(DiQlOQ8@(X)`KVA%M z`KtWFOCBgZq?A*W6Jr5@pRhhEl)W7h6q)(J$*J^}?6l@JfDZpmyzEI)U z*na4Fgx=Ci5okycVuFeEFL_lptQInoWE(=HrYF6|r1X>eIMK7H*T(ZB-IWnqM>A>t z3u7W@A@+b7uVvTt4X?R06ImI7x8!K!^}K)b`>|D6lJZn_sBqsyvk0Y?DD^O-yP|3l z$i&}FYHw`rYC>WK_4njO#b&Sd$A*9|l{KDKM46DsPK1WVuZukhV&0)1$Daeu$xI?2 z+E&_A5}tz5JaVeWU>AuFj`&{i1mdK5(~hAHSY!;ufAPp%6qgX^0k6QL9-JU$%^1?v zN{5MeJwWeDq8lCUPZ!dSG0iF{8vsfmjw)B6VyCfov7fQ?&~oh^Y`!l8dzV9#1!A*t ztlmxz13%(bA|!5WGEj)SYgQeD41p|hB&BdXx*I?nl zl*gaOo~u*=*!Yd?Vf-|D_VUvH%#&+#VL8^#Uv`z#=3|zf#-TcyrdjNxLxm6){6Ace zfS@cjgO3jNG!tI}uK5ZfoPYfQdrapWN9%Y4My3R9d~|LVe3RYAujr3sIZMaToAtA# z;Zr+5hsF6Z4<)&;E3I~5_=}`Q_P>~=!&C9hpWC6@L@?f zOu^V#9GqY*&%^>RqaQ=Dd#UB%JIPCoHxNDenj>W|WGLlvFjDn23pbVL1vzfGuW+P> ziwmoi@dw8=pQ;m#>GbopiO(18y>z~apDN{Oi-yJEo~rhgo3z*zF+i{HB_7@ab5%|kl~mGif<8+ETo;s_%lc# zd8ToK_&oA8Vv-+lp9>_O$xmtmnK%l`Q;ny!^QQ@XI7%8W^RINmrIj^mxKt|tC)M0Y$)^KycIbeH-x28#<3-$lLM zco(G2v-q{NlTYz$z;&V~Ybfv~#dl5k;Qb87<}sr*?zb<%|1`OSMG!FEXm}N#55~?g zk%PP+;Q}Jz#dx0hL#Pn-OZI5;#wglKzSAxjMZqh z?6v`q_yKS~1o;C5LL-PC?p#hHB^^K9k@7wxAtts1g_S3KUqlo_~Y9^*%@fEWII>h%?(adVkJ{m^4_#?=*Bek2t zc9zqr{TqJj_0&QGR%sw(I}Rp`TP!~8pmD4vS;FdXP8lZI3FG{)!9I0I=3{d~;@x(S#;?uKu{=**EC`7y&-*DX)8^IuJZ`02(dq0VuhD(c%AqGsRCi^s6sh8O#qLxmsBhd4oUHSV2QXf>1l zqHgsyN$l#&{D;3;U5P)8vrYUZ)xI^Jd>7QeL|io7gE<<8MvHJq=!a#igE1wLy$kpv zS(IFwEuq-$2+nV%Y$;!hKqoplQ7jL2$QEOQu?18PN{k61XOZ~-=MdV!{|TQ#@|@uY z;kLdl{M?x|H(da5hk#+7PO}H2je+=so@5?lc`QpGMQqu?O)0D$nT!qR7v2 z$yC{HBdE8PmgX5u(Pl_aIhR(*RNSi6rzj7r z2SPH*x-wi~1gZtq?UE=Vbs^=tqhYH&(XtwLFSf8b1q1-EVz-b!DK`X)$? z{s@rWgmKd@aI-)xRXU$VBF~jmT$b8lEcNDSHKR-}E>>1k(X;qIB-6B1G$@t7=U4iH ze?*hAzYu4eFcQNG!`$EJ^e$6bJ%a{E(iHM_2f>=?b(GWO6JHWzn*^T_Q=!m5K^Wt?oi~HUkA?~l&4=fh zN8#r&8UcWsGRPk}rA0!A3t+q{!d1vSsr;{i<24au180LCj4eVcDFru-H&l}osD@hw zA^^+I!O(;|7v%xrXP6E7;4B0tqhMfWzPGCiGTeQT;jnIuVJ5MKnM6}avnf#S0LyK} zTM@8+3%qKZ#29o=Nwp)u2-wU#6P?>(D})D)o*^P^qPK++H|ayjKiLq7%A26tE0JTE ze5N)fZxp{S0aK~+lx`Ofb99OBNI7&l?Wof_DM{uvK{icFbRGW{KuA6=I2hp|0>Nx> zVKDlwVC+IdM{L&GVC+mYIs_^Lv70F%NiH+U=181GD=I_r}r>rSZ*!Iwa>Pqbs z&K#rbH9K@|ndpwLQq;vPNS6TyH$TExC3Eo{v$YwP06dpD2b}gcBp!3LNBN~gPvMU`JIxY zW`Vy086cwQnUSi2Ny_k-c&nmKs=#4yLXd$7NW*b2FdcURYgO|7Uge+85TbCSo49@` z2fmGgrrisfylDV9N=uAs)0Gcx9Kk#eaIZ( zT!JMK4||ft3mQm-iBO#mY*Paj5u_iN3W|nphMq7oIdN#nH@p@G<~2GYev6JIm{r^>Kdb8{)CGB~wMksfbFC{kw# zBXre(NBA3%TdTGRrr7`n^UzYYMt;%>Zi|>h+&H>(UxbrJE_K0MW1sQ1mKc0wnk0DO z4LpSK2K0fUN;+I+$56ik-Ud42t)3&eEQC1Tz+0if+geTBBD^V)I3FaO*4xBLd0OjT zkXL+3-;hTvwqY?O-2jsr(6frsLs$Zf%}ky|ucQ-Q|_7;zEc~lSzl=@j}6AvK!yS{&JJQFNnJH&}k8(OK;*ieDqfU1~^O#eRc}H ziIu#m#*HN2PxuZM9#A4#IPQLB>LxS-*8Rf-Uwkns-+$*7BMu>*T^C>MwEu!#OY90K z7fqu?|9~Tc7?Mpa6tSKcstUxff_r(^N>u&^PS`$qWvnQ#8xi+cMl+GLHrqEx(fo|p^XV@GujlA^ zJ(uho^a<$GU6TB3tZXIlw}T$^+v4x2i~5AWQZxmnRgzX5s$zR4&98l-+cd+pi75Jo z$Q-B(Flx>uOb4Rd)mO-C z3V3QlC^-?EyEZwLo}j;&oT9@66qwBa_pR>6so_?yo7DH1WT&8G(JD2lY zG=7pTtq6py=!w6EK}F{$ zq$!*D3BOP9lQ(HbaUNhlt08$#)9bq~p!0y(#GsA+tW{U&1wRqf5P|?R%#lh|=uQEk zJ3uis%T4@bTC8Xk_(=vNM$!Ca#~}gQgjW)ug)Qzp-hcXN<|q7ftZX@mfW&7Fe;VT6{I(O~Yz-nvucj#k z-k6`r`5BRtpX{4|H*KQeC)g116PTxf-RS0Yej=VXHbdtpWEi13Ol03g$QDS_-;#t3 z$2PyUf{#!p8q6m|KGET@$F1ZvU;J}0ODU&9V+?MjPU9;py2WAoQYZl}Y9lch-BK^t zQpMLjIe{YUz%M8moloq8s@sWGxvabWTye_AfVD7E&GWIA)|xnDuiJddpaWnuS$sw= zF<`Jvo{;#-+Ym~6)llT2-(omA%)?>YAPhdzjQl(k|m7mE8X)&A!He-m&2^-V7E_G?kZ z#x)@P=PR^;aLyzt*lkYY7Fpx_NF8Y4N(l}o$W-)BbSu+fLGNdK2n=WRe$#mSGiM%2y#37#RT_CD z9n%}nwSOQz-v05nkuFrN=@Mx}f!J=N(# zrKxOl(EBb&z`{2F#@yIpPyeswH}1XW|5AQq&NLU&bP_vg z=rHlqV;Br4O7%em_hz^GDo~P-(i9;7wsP&6NG)_sS+TOG2!UK!QSr=yLRJXc>AwNW z1kc`86!ZAbEy1KMLaD(uRSS1Sk*FIwkdWgjZukb?&(K8g&ytlyiV6$L6x6LnIsSqq z=?SeQVFy!^Yso&V)!I)Hu4zG<8v1O>kx*W(Q*O$$O5w{8mKrP%0sI=7`&>J)1nDecThPHd7n|-5eP*h)_8f4U(c<^y48Q5(S zGO9ysVPyD}YVZ3{<(?d|9Z9?(*iq526l&Itj^us7CSHfE4>$;7q3sn7OOV$;y~7*b zV$|=S_&Fjxro}GqGQ~Yy2Lf{3+zxsrVn0iNSwsgrNei{$2{_$kfUDiZmR=$wd_ zj&1 zvscKPg)KlJ?i`+$QS<^?m^`1{Qtnz%W}PYs1Yqc0=iuNPuO9FD>ok3Ii)_aW5t4x~ZpNrK~SPHpgMg zl7;^5<9mdC!L=TR-F^3Y+(t560h=)~p2}ADD{0({8QOivl3DkTe%yEW>~x>p&>zlV zFr4l?)bY%rGO@y<%CURl;n<>9|JDT3hr`Dvi3pIVUyQTQb+3x(v+Q+5ImnR@xTo{~ z3Rie*AYPWE-7gDXA|Rb!jh@~4k*dSlEs<`pp{Mv5mY@{Hu$z#UF9Vm;{Q|g+m*i5w zU(A=E-4geI9XU8aiHNdOQ|axw+S^-Rb9=jb9&-;ZnwplJGV@`cnJ#G9yDT#=ai5ur z%~`C7t-c>F$@OOGFk|L{N~DpGymjV$_nBMMX12hL$aOC8*-98KFX#D-@ByLgbna=5 zW(2+dsw;vhvxRCjs1Gp;reLDXFuA2$lZdROkC^uZIj=0ZK;I5hD#q{=zE<@j`A2dg zQH{6Gmyg2%$6zJsAjoBVG3$&sMLD9zE{L1F&B%CcNhVV4^NaEJxf z#DGN|M-`%|Nxt!ZZ40!V*Q`x9hp(eo83Kmc=t{5m$Bso68nsXqFxEaU6ntI#Sa1D! zyx{QKtcfX?ABjx)s5?6|WXiWUy2_Mk_9}~i(zRZT9e*EDX~W;=VTXvnuVQ}fAjptD zvo>Ji@3~uPqxxvDjPYRS$qoMQWiXtWtSE!djGN@lR;mCi%JIlzLmVE4kUjiFbY-D0 zn6+9H?|<2M`s$fLCB{dJmrY^~?h|NFnfhCa@vJQTYB zx4Xg{AGe~!LLc3Y{h*I~n%pNh=;I6q!NpZ#S{gy=D)pwWLJrHSaVyBC%+F3YFU zBimo*ZKn10kzc*XgB=g2$^P;a2E&;sxG5_YHIw|RMDi<>xTq*UI1O?HRfK|^HF24n zxG1^~L>A>kSQ(6yNd$sG*j#AqYNaJ(jDGR`@cR(d5Z%~raJY}c{AU|5C*CBy)`eF)pPNNIm0*pR7Td5d|U(G~A zu59b*RM3x6%7w^mA)4oI!gH=fgHlQv>O^PI2P+k)qyY0`ufQNA<0H(Qvav&Z1%~Rf ztAE0OtZUUVgH~SWr2z9vufPl~y*UMt$c?>WWhh`sjW{g_IhGY4=h>GBbE`=BeDf~br`0R87sbc@?h|A968lR)RgB>i_8P;Vyw!g8PC^%% zG2-J6?KFlj|MakJXo$3H)9`0Zz&vIzVsN!OIeV9B_>?)ez$9U6VMtywjqSS4e(X7N zY;Dqj`bNrjaNGbJ;}C^gnvFv&z~ysLmD4s_bSI@k`XDq@PP*f;#vhx6rcLUX-3WSA zinNcFa1xn59xrG@`}G6s#|J1$&Up5)^&<)on}0otvwy{@VR`hNBT>{&-_S=zZNXYM zMa^)*nd(_{Jk(@tlv};`_@EblhZz3o;2>qRh!zqE&W3_RwZA(LQ4%g(fGl^j&82OK zOLs*yQmSItdxtt&9ArcRQBkezT~s}k8upU7B0DkAXr+9;I2s*r{Y(x+UE)s5|F}R@ zyuBLygs{7Fy$hZw;AzEp?NJe$R1B5DQA4DNCj>F+-Amr!!49GgMLez2BA)JNI2?$! zgC(lY$f8p+N}=s*XxmK-IO-oRX9jB@bn4%*4d~-Z<@QbJK1~ZHG*XI09f)S^P?PzT zw1mgdS4J)=S`FWD-Rv*C@8wWToe+6=SXCV3xlF#&zgVdHx2tLr7A=lFjgHg7U zO!2rKRdi#>CL&d(2#mJAaHOHqrvVG&3&H*MsE#tqi(u$@i3jC`79sT7-+`*LGQS|u zp{&WsZi!Y`zdzXP+3bzfEGw^CgqUnU5L-6@!2rq25T?ysq$v6^9f!dqQo~bB-EI-R zu-yOxAk`N|->+5&A~1l%0*+uq!1jpu@ZD5JZaWg{axVy=y*= zEItJs=vg7BfID$T5*7VEwR*1>7c@S}N8Nb;$qy8D0BMo;2S*N~ zWYjMC6+%j?{IRjpw5gN}2_KBgbUhcLrAKs~>>d1HxvBfatz^~z<`-%ljxUD%c9(Ne z=dCNI^km446a;QjUNgi3^&a;(mAlA{KtnA#3Md6ju*rSo=>f*NE zK*fIBfjUQ!jSlLViX#H`xuN!;UX>1NV{31q;u$+o>v=8&OGvi$%wtCc>fRytp#GMr z--6Y%dIc5OvjbHNebGSu-I0Mh)gDw4bpg5o!H~T1p@iHUn?)VPS+d!Owr}-BM9Lu< zeraboL2GiQqJd>b^rHDt2#i9GGI_LQL*|1JPSsQAQqNj zWsg?v<4=T~seL?OxHz?s4g3+J8ssj-MxbeXq^8FgojWrL9*wW-eDzpv2E7Ne!qBq| z=);7ND8bJR8F1qE%eB;<5ZlW5$a9kl^!wC%z4toJUxhma66cNpmAo{%2!1swR&ol( zQ+UGP2W03z#yRxuvFq|^3*I6sMpeoX(lUX#f?2jyC$_Q;wUN9?vF7OplonvwZHOu; z#k}+f*d0|`qz~#|`3K?w!Y$U$A!w9g1Ny4gEhmkQg6@hfYt1517v-I&A3 z=0lG+cDABL)7CxQuD#74yAIK!?;_EXY=eQ=Q9)$QX14_I_#jx=`6$9Jg7PIjDDpwu z_sU3_$;DFPSCe2N6+$b;6SRdqyVbi``V7hE4q$<4@Tq4ZL`TM7k|eL??;Zpti0QG>!>F52=J&&+;1Zc%tl2~-)EvNZX8>seiz3gb&jc+qkil*^bJ8H;AhsMt?4#& zT+gD+a;02|MraNJ%doNr8l5Q31RJWj4jTPi_o{Q8W<~b`L|lDa!;A5pQ@HZ)n21!{r3Z*lkIwFV{G^dGBOp&5r1fNFyHZieKCnsSQ-`#lxRbcUMA( ztb?Fb>=hicF*-9h+8n9J_^NnjRir9VozPz9kImN*6+VvUk4^=5VDi%Bc5VSJ4$4M4 zD3F|i861!y0!}(08v%Q=Mtr6kV~qeOS!u}g(8o!Vr!o>INglfE^RGbli;sNo*Z7B} z_uZoP>(y^jn`%aetE$;q#KW$$^Q&{jQ#=3 z{p&3lL8tZS+g;k4)EV$w;#K+`e?MogjsF+jVHt$(|8Y_8DPARO6alSkHuL`IqTQ#) z-@nI$9TYZ8rpQki3yd&3qmrngqoO;A2vl22$#3omRN_596 zsU74&qwhqyqYm{=K8d!Y2ZqDukzKS|aodr&JRmSx<{f~0&0#dOhy5v|A7rT(E~)ca z5*Ict=}(@%%|-sKf$u^}^)qmSEK>apA=T@a;EF{q@~8AZs#Iv%g4-0`#?PMEk_SP36kC+&`RrOQ-dYWdcla8b-@jEwGD_+7{Fd02f?;kX zd5ewWlHchH`}X-RcVbM zD6JWdo#QH%usN#OMO`=+?2??Lm9@2C6NQe*m{Vxst87O&WlN2rO z9}|2>XwtWMZ=Jn9)x*I|aC73>i~H!|*z%YgO4GOCMc47Bd_}@Pa)&z2__sO^AQE2> zE@VlYdqg|dNSiC)02B(IIPy2&A@LnGMOg?xAiQ(`!{R&oORjP|jkwvrJVg`VVJfak zybR6WWlJ^x66|9j=2L#xvxX`X2hc8&44Tt?oZlAcq+Kv#V}* z@t?(JXm`?pg}`b_t-z|dVe86VpsQsrN_P_Ik<~yD5o_jpKL9&_U8D}t-eUSyylD<9 zU~TM57s$@<2V~KH`~H?Tn0H7wTsL*})gPFt{9pttOzaQ5@*0zXvf+Bo?##Jj= zy0G?3&&2f)ODLHErdVh@RD_hJzw=C`;snb(<9?BcIEY^`)$)R_#jY`Gc>63aG)sQ&*f17=gV(8#m=4QLz~5c&UUOmybw7t|CG%EhWGm<)}15 z9+7q=#X^TM@B$E!0|DZ71mrjyK$5H}^c|2`mp#VI8MguuyoLZ-yU__F2#tH4$53C<=W(5dlYr%ro66K!sp&QOLH|o`F z68Yw?&;qNAOh5uCG6%YeT}Hf0YW|+?4~5|$DO0k`4_IytWgDUV!?UKW832D8v>=p7 zh5wDy+e@bb@0x$??;t4{7v3jqocF#9HsGYJVbcJdc2gkRQ@~ev4bAF}mGCt&fYn#{ zU$2L*&u=GGL)W4l8|@wSoxQw6n{A-xe$6a}R!r{KL3)3UHdU07VDGHveocET@iMux ztNZ%a%LuXbWhxgayU%e56u(rv(QlAx+KHj0_-Sr{u#Vz)Ch&j*@}h` z+#13kn+!D9lfSPB<=kiD!$u4X@1m#1R+>V)4rgzK9=9+Lh;D!; zdIcpu-!bA@ausH8?D+s+k*|h2a}+luAJje$mVXF0B>>Rqb|ZYFas{IIgFp5VU~5bc z=H+bN8~rTJqq$#mY95<1Youy`pUH{6svI!b5G~1*D%)(b6E%=*3fZt2C7$ZJJqEcR z8v6`c)|3*

~CB<3^*Rli9W$JCf0MuQ+_k;>8~b1%&Vxnxa%`rs2p@x2nBoCA9;J`*&p%p{ zVvZt4>=OUn?!p>P@z49gi3lHd@z1jKM0)(QpAbjU##;Py1}B+FaY@H$PF9etD_CpOT>Pjf-7aM>;$uGO6AU1gz3g}l$ z>&Wc&=m}8Gm63(HWVV{XcA5P%=J+miJhH66XEiG}Q!zBVc;wf%yBwWX#3OU9hqPEV zI5dS8p*gT{=~&~{sGy06U55Qr+9xJ?vq6s(uiV4&%B`k&u!w^tF;zT4vVxF)xsCS|h+%UMG0P;Ja43NqDgW!sa(K2tnm0L~3W z8nvjmNI9+Fp?U-Mx{H9j)lodPN$#@=)msE}l9^u+t2dmv)S;r$pMBULSwbOeRj7(s zMc!9-z2<-uZKP~u?fwQcf>ShA=%G<8^w7^{p~r|%a+G&2BS9xV^7l*ek6GUN?743s z?~Frl11ay+XR^GrpZ^(l#-J2=XTqP3K;G%D9ej%ajrj{6y71fA-hH1xI>Y0C+B zK6LHfcie+dgKJBa4Dz9y`r-Cb-Wjm~XfV6q+~u85-f=m^CVA&%W@h&C&MopcvKW~2 zy=G3*gceQSc}vPWyJ5j{xm@GpRt?Y|74pt?DD=>0d8dH~J6_!;d1ooZ;Uw=+dt3Mz zL}F>?T*;Jettt?WCR70N=^0)V|0E&rgJ=Z5NuNZc7r>3x8wF3$rK72zxo}Iz46m{u zxq;^>9X)#jk&PpY`53Zvv}I2Jq@x#I$4mdGE+4_#W|EIyEq3uw;p*4@MT>YZ9iTsw z9Iu~YlO6ht3IEP^Yg8yCVi~M2+Dxa)Q^+Z-Nql#c+tJkXyRMTqSWQNf{++cF9w{$f zKs8ZVUi!p6ziW#(vO$xV?DD&~{P3uDc^Dl0Iq#&(OJ5&diu8#hWK*EJ@iHM8A%jWP zWTpG$SE;g+U^}oiT4W{436f@@Hm#io9?RP>IU|W=sOSt+c4PxYvU~IUn^xjvOI`bk8!Iws!*ajL_+w}Jt>5-k zl4KICZl{QZEPH$E|A|D4q7QqM-ujYg@z)2;PH34=;bgyqxXBUlu+owFZU+(y{1si? z(YXPU@!T99_A+6;BS9J;9v}-DMup#{hhV+K_r8YaJ<6JOPPRK6yO<#&@~mkhBF$-U z7c;f1v&u{M@%TrRMJPVuMoNb7gLGeAb|gZQ`?5AhLr5h3Akj z>>`ZC$K7~;(+u4at#fzvBvUWIcER z=8PiRu_h679c)Na6G9^FN(;vXkvN21ts?Pxo)Dk4(TU96Zg&$gP1;3WStna&ztect#=>^19-QTJQ z6~88lxJdL1FxwY}JS^%R^v}L{b(M>7L-s|gchIUfbBG7q3@P4;;+!bnX{{z7o5c^n z_aCt*4t_gTG#n=~BtOM1mTpgk(U9sNpfq=Rn~)Y;sRDTUO8o<(m!=BV(CS^*gQ^GP z428eV3n%XbMe*`{PBX8_2eiOFEO+}SYP1; zY@b}-rBqTqa@2`veFOhysFVo4T#i2}41ItyrBY*CWCn@`{%VrpR$SFT@W)Y{Q`DM-q8|XB%;7)2MhcvbQM;#1CGXyq_>9gFIGhmRb=4A~H~Pl4Dh*Xq_8ynkw>|P(|1}Je*#j zS%*2nT{jJ^;PGGH zGbtlu0UjuBOTtf&m+5ZvK7_cK0zm?QKSGpzgV2nbgcEb>I}G$DdpuXI@!sZgifOCl zrl^k#P24VXzSD@vFlEkb5gGG$xGQvr)B+YuOy+o-Fbws(Q0O%KhOW<5;mIDBPt5Tc zW_=DDYu4xLHGQt$tk2o2W9uMp75`4_XjNeUhK`HmhD`%~qRK@MgbfKLyYtb^`~6f=5d8cpk)O_>pqX ziSv)GixM9diRbLr!AteDd5*}akCqhZ&IvJrRx?3Q1+Ujq!3ku-D5Zke^)(*j`TJSl zoN!l)zIpXy-$38=VO>Bje4v*X{FC*~nf%YN$LJrkzWMWKd(}71@|hp@BV^eHqF?u` z|Jod6a0fZ;fTGQML;}ee)VQRpraMdr%Rx%!{BKoLPb#_Ck%#zwI8AgGFHjV$Q{0Mj1eb-D+#w62kiB|AI*g{Q0&GvDA<8 z9suj!$*oD~YXY(toSpS%A0hkRx%N0it+?JHyW9*}qu_+pbWNwT zcX)sWvX{ZO`m~$P=h#EG1atO^v)3gsoOvf2+;KZN9WwCA)DzIOt&fmh;sDu)cxkVY zNnKu?fae7Zx8UrT47vqpA9axD(}A6tPrwVK?Qu4(FOdC@1cq={{sw=)3_(q|4sc)saS{$LA^p; z62@4i;#T^;D*gKsd{4a3Aj7oYf8Tnqj~g8-utlc`-v(!<3jQfOZcS`7*{*HvV@D`| zeR!&k{Pijd&(n>$=-yuBugVUK{FS(~AM)2tcezh)$X~}W82@qk>qSAd7WwPW3*Cg2 zzKS|Cm%Ghk6?I0l=qQ3moJF0~en3l_k3_avivskH%s|v~5mspB7B|_(g&zCezwFwR zZRqi7^cf*~Ox*1XZ+u*LtA!qKm_y?o92Tkdpf>Sf2hM1z2lW_(;Y^R=Bhv?@MN{uj z`MOSzOY~@>9T&J!5?ZI_O5=|d%8PR~p*)-_l-HW-nQ*2LVfeRhflVnboBKwoS1=Pb zr10%qj)YQ&Ls;n(rOv&{jZzH(+K3Od)GzBdz5Y7ahF&i|PSET4URc~X|GO4?U3Ggu z==Ee+b6ikj>R+{$*|Iae`e2&)CjIsvjJXk|mA$3dU*T!9YH~7a?vI;}gh~=_@mXem zHt9QVRN}(V`fcARKi-BuP8}iWBi9|?__%@=3w>1H+7J5piU;?FpS{YQ&zU~{P4G~r%8IA7D!mwhTeVyCM=#_u=`+Uqf&gOjlQ=X4*=7-KCJTB`U%lVjh zb3e|vsj6=Z?}4?{CRl8kx=D$cAPkF zfkBl|UgJiUF8sRR_xbi58+!cBNWrh?^}7)F4rCUgaMgH_K7*6!a zdBBNfC<9zdRcKqiwZ%D}{z-u=BYmfrK3?c;>yLy$PPl~t=>vg$|0;I^G5Krzm=E!} zFD2Z~Js+a&*Dk(EQ$EBI^}nH1S&pvK@*yhG>yX6too+k~R)ujZwt^r{i3`Qo6G9y* zGOhm&4|c#lg>WGwRfKTe&u}X!G<@g}_-&`xA{ZbM~PlM@> z*I^s(XXa?%wEs=D3*98LuL0T~b0q}IUb0D-Lu z@m~}VM)j|{(oJ!fX)K%(B2vgY*cO_Uu`{@x-4#QU3)ckBLjMCvqAK52b)9g6sP z-j1waCcEFDo}tJlok(NIxf5-tynv%$kwjCP-!0+=FBidIhY5`6+lKH(@h22$6MeUO z&%nsKp2(Lu$`9URGjvH);EoYb2R+C%Fv=K+as^GxzRE(HT-hfZV8-lHuijn|c&|oskI8JM|wzg`$)V5f) z-daj+tqBQ9z(|5xKnw)X${a=!P!SQ#?_F!}bDeYcOoD#>p6B-m51E;>_gVY4_PV@l zEkaw}a{zr6YdJOgio8@Orc(MV4@$>r zkrl90J9oid_IHl*SQ(`6`h{#|&MmTDiE6DlUR*w6rM`-3C~1j&pjDs5G#0f)*Hvxq zU9|_LJNnCSFqg>7Wu)3br6TG%+EhjkNEzxA0waRek}-B+fC4@@0_mLLIr?LSf_CkL z)3iteLvZW^6mz{Yb$(hs=4X}``IBsItz-;X2J3MBfshTZm!7RfX1iaCdYq4@zBGrz zAYHA`1*X&88l^_F*)8kXe7AYDo{CDf*eA{g$D!1~n$qr(ZtM|_eBm{GEV=EP4p`)3Ld*Bf}!9MrzMF&(w! zd-0(5EEl!cAKz7KYo76xy7atMYEMW@E!eXcwZCR2ZY3Zdip&CCo7;Xq)Lt)q!+c}O zoiMjO-P~e?UexYker{2F>VU3Nd+pQSbNf%>m9mwxL>ttH{je9+uX zCCMpgZ)t!P^5NIfDd6o$CByLcTzwaF zP+LRS%*?UBE}HlA-!!>34g* z|KG;W&FKA_R{bsS1IPOd)4m^)e3srJcaU@ZoqGR47=P;fYq@%dYRMo_Vf@ymnk9Dk?YpNsLQzQ1-&y7i~LQ2O1@_mkMQ=5h7t=~Pb6 z)h}|k6g&5^G;N(bH(RT&2NABr);lfbxKOh6W!zHe)<}^m-hWh@_si@^wV)lxh+eFB zFeb^>&%2MQ=fF9R10~xSMD)#=s%(kHPERHyuaG)V1{Zk#7&pj=Om>{($*#aySd zIdNT7ZQ9Tx13zO-Q;U8M|4~HxR^-8*06@LUlP2?s#O5RZt2yzvpYH7lN&9PvQijEi z_@pwzgvz`C_oF$62T0Xesm{(z7iVP`E-Vh1@i=Xvs%0V`r;X!r z+GIRVnH7#xhG?8+_Gp~8 z>*m4~VV2W`!+~1$3iAVa{yy_VAFX=0xB$_? z!CG~>`2kmxDBnyJfKQI&tC>FF()@}1p#R+b7Ny5d7kEG{A?(>m2V0=s+l$rg67kjU z%6WN|$col8kJgh`(U=RESpu@XIk^Z|MvYUv!Zx`@8#A0-ShwC_S8>W}fhJprpSNe& zAq*Y2xjPgTlCEJb|1+6(2qVTwcZc~rWKsvL4ll^GLzpjjFsu`9bZZS(@|t?A!8rFC zz%KGH+1|AVB=K7W)ojRc%3$TY-Md55(yb0}&a}e=wTJ+-I!1Vw-w3C=M|hAH>7F`6 zMSktCa<_-kvsK1^nlp4LFBut0tO5OYeTFl1u*OA@!KUp?*1-p~q%AZZ8QyY`O1U^| z7LmdX5YV+!lL3~1^+lIfuBa?rcu62wn?N99F>}5JUuTVzafofn9}?%Yv?pO7ujP0| z$^W>a;C~CgHUkpdl56Q@#u?SL$R~W|JBWqE2{{C8TBdz2&YI_*HbgPkq&9rT(QsyA zV{ukxz@XoFXJ0MyP-@eqsZAG}O|dctHic{Xa@1-#nt(@8poE=}D%eG>TE1H3HSQWC zwDL{sf>Kni1V4h79FB6frXL&N13x~GxJJ6$^wEgapm}sQACj&)pJB>a4c;mg&Ehuw zRZa`+56f-%napN>=3|Q3*|xI4J{{rkB)_&Hn|UFN zl>F!Gys7!mpNmoj^gx6BlTY(3Vkq78H+Y-zlN+o*53+hahyN_I&WE0IRP``Ui^ai2 zd>7dj?DehF)vtEfr~cn=e`pSy=^<8&`r8yAYUC5LC$jrmO2yD^YRZo$$vub?%!t0N z3C0K11Q*mrv68{sWUnNm#*14!MDOOXZrEBzYoOWFe7nVi5%pfK+g#2byUTMuTwBqco1b} zY^@rqB6e_53#ByGsvnV`WQA-UQ2~msBkyR{TbVkV9?#%pz0rd>$FM(s46pFFR0rx@ zrLT1g88W5;HhJUkWbaJoK<4N+#$S$VX2#g}7$XtY!SyfA&t@&}cX+Me;UzIhpd)Sk z9k>1tj*=@e87qO@`{Q$i0r+=s7v;_)dqFsL79D@6Mg4ZAT0$ZY z9^v>}FNupz%GZYqJS#e&g7Q?1gz|_X1rPLi zS-k*_v7lIjK%MPzN9B5>!8TD#55f6pK$X??<*aegk#ROaAqjfJwj=tuxw{M}p#^vD8HvTiKVH}V&=603E`zrAUt`}mv zKLizx1{ECNypJl`qR`tbcwELePyU$hgoAu4*#=`5VZS*FTiz|0wuqrbTn`;0Tfm=I zeXOt;*h3?4ITbVDhf1_RICVQs&qiq|G0kUs6Tb(6kPY@5U=_XEgG5=EU63fNwmC=? zvNP;&ysJ2U?zYP^B=N7jf~h1zPBR#<5u=zodDjazB`BjTP43B)#o6tY^{B{@vZH(` zi{U+z+4@uV5pM}hCjw9-BH_MsS%XZiW6lnMImKhOjF(uGyI`C5vhKi3(@<7%4KFh4 zJ^u)drcqj|L53OOn$U$s!T#NQdXC^~w&!Z}pQU{Fg5FBNRt4UwpQi((n?;7Sp&+LTGBQQ;H5W!p3ixtG;Hyo&LC;_zQ8Oycem@mM91 zLgRwr%7vl3M1+|xI$nk1wqLk5Joo;^?|rn9cNCV|mVf3I_`e8VJ#Uzj@c77u&p38e z0={+Sj*H`cd;c z?7SR6(L1;@c3TpaCCGFv!%l&p+rrgOg=7x<5N3oX;i9iG8NSwjxYq!7$+cdHbN2Mb z`B^B;u-)k4>GNd|ybWDdMTu5OmX7$tP6n;+;4FoH^JCxUtrcm*Tj0WK*Rup0HRs^i zhdZ(F1>3;!`=3*k+sE4XFXt=wy;Hv2zy1EjdXN1+x1ZSW3)3*Uk&i-@vvJVfZ2eMj zQ2Tzrfz5%L?Dv68hTnRIV&74G^%8NfAl~1Kub#7$*s@7(-p_cO zzs422*EingGv+ORh#uc~o9x#zjJFw^)wy^ZP5HdZ&wb);25#<~CGrz^=-+15HYpsu zw_PE>cO~AY`$W%p8^pkLG2Z5#nX02|)+31tEGX5Rr#PD$ySP_``|10rFaN9C(K#<|-9!Vq<}-NT<{J@r3u14ljehvir9`YgM6j)jicRd0eSeRtL-VmfW-Ay7=hfD$VXh4ucoRBp!k|c1ha-b{98W5 zZ1~CMxCd-NbW(3b^h8@?_^sZPyNF50st7kQN&gj}q$3r>^8!mxbCG&yvP+~!Zt*5{ zpRnK9NnMdlM=D72BDI!R$ePuGpLU7Vb+f!l6}1^0vwCb=QgLp)NIk(t>WRpC*@X=- z%!kxJvPkS8wR~&3StT%!NBE3n73N;OY)hABwfbhySp`0x?4{V_61O={?p@D}=jUIg zzJh>!VsCG8yZ#IQBLp_>m1SL9_*#92a)Ru4 z9L*nLb_rV=`6pWIUooX-7e!IdalJle$GCf;9;#ob#?kj+u4>nhmLn;Se56G_!nEoU z?%J%LRYT-me64C}42Wr)aK^)~$q>`M!V7PFd{lVdjgO}b&%5za0Gi02%585HjxUbM zr_}MNVpWeSRx>(V#L8J~R-73c(C7E4Bv>;(*rp$aP!=5_9b^tQkfR}r-v+uS3@;e$ zf2Sb8u{j)Fj>@CKQAcR^UIaE!rj;}|bkANmLBdAMv{Im1;flNh*xcsiRQjD^qYEb* zsL_QJyOBTANa0?lO=wOIFVn_1Bfgpf9guK4XPto;U3eg#HPNEfTk->X2LYFg$P?eK z;!Ju|m?I>Dqw=(SzrjAF2MN{%${V`p8q`fOsMG(9JwT(W+6{Cld2Yl9#CYy9KL8y% z8vI@S0(2-9eiI*n4qYZc=!C2ngJgi%!iyLmwr~QE(SV2X7{|~UEm4l;Z{)SNk2leK zVRs&{fezyVuX79-veWt4(==!T$AxoN#wHI9!N~b0-GPuFfR7Es?z3QVHyi?JBakY2 zA?>K?W>kYQrw|g=0q!32xktLHtR9DD+#_VeWjMtS8V7KX5LIkFuK#PMG(sGzboV%p zd!#$cqA`|nj}VeZyL&9)9_cEvdK{ImM*_lO6}VvR;XGvFO2i^iUNJ88MEiz9g9!o` z<{D*M1fU4)9GJUp5I8~_&}tJMB&J0-&{EFKN;6Fafx}kUZw1duZGKX^=6rYv0@tnL zTB1m=<$gdipiUqc^>AsQg<`#egV*9c;puzAqjukUZkZNlN?|w$%!w$SG$#S5zEFY1 zrt2fJ2Ou~ahcxhw-p+Gg)I77XdoFbRx^DV$V1;E`nKfpVHa2HYf4!R>ktFK{IPgeA z!JUMSU*LVn(qYFdrNbi)NYft94@dv@eDisD8M}{aaDY0@`UQet5~irhz!Zh!=hTE2 zG!jH1RQp-4WN+NHO~oTRY@ni^bHi{TH$kx|ZX!+22UOG)^2djS0*$Bv9ncrCgjUj| zKZ!p~O@-hpO)}IyIQSOg^6=oRzscmnq*S|KfqXk?Ci2p--g7>nGr)x$;aK~gKo-q z(R2Gb`B}kHbz1cduwb6*7>aa(2&!m)f$^Q#8Hqzi;u*OsoP>Q$3pZ*fO^pXkrbM=c`qIb-oAnAq*^4 z649%9N$D#S{d5qHlz7TSQ2iQD+4JZ4;**9P2q`e$|C?_35B3EUpR{?ve&Cae#o`k_ zX~}(L8y~rm|LfCtAwJphNhhC{7N2D2|3PR(TyMk>nS-@Xr$VcNAZRlX1aOu1|6(cm zzixU;m^eNY^+t9e-jhW4g?&la^fB)fg5c3=BAVvrGeR8fK9HXGWwy?GBR3qR?tDII z5>A7GOoorXM;=>j0K31mG*_f|GcL5XRl9p?_YGr40x);H&%#=eJ-x>QDh!shwqql{ zf<6V_+k~yvRvi0D9#wg!h#D3}v>HBoOM(}geGjJ_()(%1=9f#NjlL10;`cNp(6?MqhsC|! zri&sMB4IHjMcNXx-p6G5?u)|4(m}#pbAEO(r6soR|=uECRT|=<)kcvmQUV zjZR?7Qt9_tk3VmFyk&#u<17_X*DsB*x}MI5JEiO75J^UN+q1nN@$6SJQXEn+fDI&V z8kLV4T}jqEXzYdHV;+N%z1W?ptratf4bx?XhNZMKVabW;6KFYco#>XYlDKQx1 zV>KJV%#Zzq6k)t1@q<|k`;{Bxg*!`Nyly%`dAkvd5g4!feTORUSWC$veY4Ye2nz2*Y7iL=P{U*1H;kTx!RN(t?z`qVB>@WY;DlOB7q3&V|#`X-)*xWqHlv5 z6H5sQMZ zgEv?F4%=QAg3MGU0ID!{UO`T6bYg)Vq-nBY&Ax$D`ed>7cZkflq+)VLg=RjVCNS}? zCKZelD(k;HFvY+%P}T6NIxG#XaXWz|-(^gPFr0|Ai!#Rn>FoRhnK$TwZ&W*%p>dBcJ2O?f%PNpZff|cGdI7dK>Xn_RWXa#(Vx?J8h!g;W&arW2In3>iXH2~;6}9t3f`E=2zO`l=lOZSXCPu9IHltZ%+^G?+!sXaP zNHAf}DKFOKpJ#~Jh;L9#CNfvJ7i*gGd6)jg_+=%Yi3OVXgHdRV8-*zNu((*s?Eo7# zCK0m>t*HO>#iWo_ED{RIS3)6~&XDG|#8*8OT$S)fOKvk15{CU>hnz8rMRh`&*YU&t zY{`N&KgeXHT#@3!YG-+MBTBuZ?8&_Rtn$NnWF*9H3|5_$RelhCPW}M+ ztMHfQimMO^g>wc;$m&q;R6vk6LsV08uO2{9?POIv(FPo-c{e}v^RMlvL-wRl%_t}9B z#uXT??Q9YGaloY-{L+~(cnzD3mtlcBD3}SG1<7i;O7$F13t@0DDS8M{*?TyV?GV?*Q-m-H!c3wW#4}m!4$ah?{zA!c! zc7k>AuONb9^kMUnw5Du*{MJBWbWYxaJ!GrWswgaq>PrV><*P`dPR^P6AiXbnu(bn2 zS{Q|-1%Hri;eFU5e7WD-bQb7zit4XVa9K~VG!ywHZ+$`)z!uWLsh7|(Z34fXb2fnik9hlTIaBasg>$|RjtXe^Lczm$N~jn&3)2!Bvl*jOn~r zWvX1-m_;-tOT*ExX^4$eGa6!l*$+v6rR%vWJt&rViItq2a4B*V?vz#O*W0lYh0)0c zg|R7@V++XH<=j>$g;7ebB6y;Ua~g^xyR_<;@mhF~TH#Wv z3rA-(h2lknh`-dpeI)%wlpPtYrKTwQEhR@@%tyxO7_`ME4He7uCKeofzX1tg!m;93 zny$xxMV?W?yHiqw)l(8Ec*BZEeJe>V&mp4pIiNbM71zPD(F#7%lvsiPDzC|X|};F9%WtrTu6q{zCKnkTQICxX-AMKTk`P{n$Y zB5O?6ILZ?f)+W>?M~1cWb>jR$HVb3l=lJHwqCS)F^P6JjgWx+BD$mjMMw&$=T)_M$6kLPf z#ctxI!cE)|iuDc;230k|>Fa`{*4{Z*#_hse+#pB>0&pF@>A0!nEyn6WiWjSA^A2$=FzWjI#(IdxQ*c?avnQWEN3R?zw86EeYGY5# zgAVOp9={0qaL}uKWJ@ZxHy6!I1xE_f60> z;v@5aLjU!-fc^sqH{;81$V=9jqk^py^aMxGvmu&;XgBoFE`^+mHJ$~ zXLyrKy;j$Qd0Tax+3LX@#aAhTvBQI~dmJj`74kP0E9$@qu?Ig)tPr6W0=mCz3yUTcyhd z<2{esChQ5W3NQom=(_haD5PqC20{W1+gJO0oV347!T9*ROWo=C%M=&3Z$!$pFXhB~ znn`>kQsz`CjQgH0 z1v7ZKf%;hl&G0YGrA&nH66&fSa#rw3br#?-5}e0K*(PgjV>r5*Y$vYuOj>Ara&`;w(Fc+~iD3qp<&%ZeY)(u`dQ`MWH8~jc7 zNV);a0THrz8IZ*{4(cql*l8vJWs+AuI$6bvti3_{q$w}Rcwxv}xZzfZqF-?wrZj<2 ze%dLp+il(pbyHj14R$bO<0-+stOu}#268S2!paK_x&I=fbUu**m=WEdctbtFVX;{st8YBSkSydxzo9J)hV zxXs~F8}9_PCM;h9DHc1dEitGpAvl23`6%p}>&pUL^y_#NloOpD3{WSpno|=R*vtBmIq_wFgHy}k~i^T z7CunMrHXabXhaQtU%b3^tG0M)3f_v6;*-UNQ$q?wY%V=bcmi>eO{?QxF``7^n}C4WA%yC2TKkB-Tr5G7sW zO^!Vl=6D0c7o_)JV9KBKrjzV4@+tnW&no)QE`KKbbXxu-t^}x8<5H|P?15j8ZRkBD z_(R|M)*7v81>G_nb^j#7BH; zK)b8gpk4Gp!|oaHla-f`FD62Tp9oaQ#C+3Hc13D_y%c}YA>3QW{-6PTo*_?pb7^pb zF8YHm`-o;kc-}C5(jPSKV3qhL=UE&$c6<8xgG%ORC@;;g@0`3;rhMM!4a|90Cb0`c{Q_MbiDBuB0rM;Yd~Nyc+E`YhQm1BB#a(!5;n?IA@+>sarZ{ zekWLqbj~~?Kc$N56NG-lA`X<9mq{?X4kaLcMfJAXNL^1Le(4R;wm1&Sn zO=i54mPIr@!A{bWNLgN?MBR-2PJ593H^=ddiq_lwH=6v)t+ffK5yWwa)@JkH^d9Ru zc%eGM{Ulvf0;5O1I1fL}@h7N{4}4dKA11+nknfWa&Z<(mD5C67;dh}gUjLS-zUYi!^U@caocdyup)Vrv!_pV=!J#iAT!{6>rgZuub`KH<=B$KP zcyK6Zc_D!7?1OHi@Yq#bgOPX2kvq2t+G1^>{CN6H2J*0)YJ9+B74PG?H6@|a!ZOvW z7ix=FMORm?3?NG|k_1=514a3PTZ4h^Qd7k~`Y*ki6l(@Bl8)RIg`>w%?09@2OH@o? zm7P2@h|Sq*g!vfpH^~${4Ewiy_2U(!kj49d*n4>lS#m_wQ%PnIC zrY%vhK_MGce9c)G7z#`WN#KvJRowlQq0^pU?m(Dhd{qc^KL060*{EGlPx^Q#DAWRG z8`_u~w8g!IK@7JJP}pn`tLT@!7@GvO2!zCdJE@31BaI<;)mp-efE$x7R3iS6Uv54$ zBH`^g3_*v=SIg75pRYbi2ru+%s956Fk3le0zFHo~{e1O5#D=6-LuU}L&QJGh%$x%@ zzsv?D7Kv*heH{>x!i|^JuFcw-ql;TBN_oM=>xJ59zxlCvoI39sA)y!_S2{nQE%ZSX z7=L7;LQL=l#$Wt_a$8#Z;PWdL`e40zKBZ2$(PnJGLDZ@@(7X#wIv2yXP{n(j%gsLDS6`S zyfB$hW1)O}l`p=^4@S>7W?@>LrBL|hYjfmFpZib-{_NAn8~*GQVx~X4FaMc=KU?k( z7&a|?6yO!{o_ExdbunXm;6eE$AAS$^z=^G1_P{a}+TquE`b#sm2c9uKLwn#&FL%x! zI7a!r-F|`lzbp9gS%PJ!;KL^%PBsM}eyU7Ryk@oXFd<-dqH&?JMX+?0oMmq#uM;2s zIzOzi2re?t^eiUB=RyTyq34@>q418XFP{!>&|U@?5S$Df%HaP%4r0^tPa5`#Iys(w z-^pSVk7VD2bdvmDX}=6aLQ2DjhReX${eM6BzkaUZ`o{B#L8BF1U%3B~(S`jzhCvmE zkt_bKTo{Y%|FucM^=$&C${x7mXNEn{s<*Sze*VGxI3S@Gg@IXjtJ)N(fa?sFQAqd5 z{EbZX5x%!6OA@Zer6kTL=z(x-HrA?v)(WZXg>h7xmv7&a;aXh)`V@;Ao0tuHV2Wkn zexrzhLPDzL<>Ut=gyufE9h4wpC zp(ztyfbie&9;e{Hrw9w9v6Voe9V!UYO>6=9hr|=O?Tfy60z2N@3s1mVyZ*)rn(eMP zn|;wYzvb86$_r^ozDsCq09syMjcjc?|DKZMEl+=df3P7R%(Usl4gM`<-T{vjAkjYcHq%x+oGz3$ z-2#~t^nxgUB;S)_H~0a`6nT<7v)x_YSG{4i$V8a~O~04_2#GB!^2L3AoSOpso*^3| z^2O!B7KhrG;FU@6bSGHip2JkHH^35;gs_b@9ZP8gC}|aU1bvEd)n-;U{ddCJ*lyyg z9}-qa<5(r`8L8sX#{M$#5Eow*^3AuF7tUdnxI5q4KrAjL1p9B~Tf_BP`6XSSjpdUl znH7>=9h7Ap%8}ZpN1^igL7teDT!7EXmKRaN?wqf z{;J@wglASzfb3Z`<@&Q&eNNP+%zAZJYSybuPfnNh>QwAe{~TAV{|1|!nU9$SP&;fx;W-27M3#>H!f(LOTRUdhJr5~Py!N@Be znSb*6E#3v;DDw|tkwJx7A*A9E`T{w6BqbcwEc!?>bFDPYTy zjvqd>FCh%t68Ei8immaH!LdeDVF%d7k(fTa+MVD2$IH~cTlnE)nGQec-hm%}_G#+W z?@=(%4{C+J>B0}UC8-@K_f$Aj6^ItO1yl-zCw}c3BSQvX#xFZEv&ui(TFUr=S}CtmsNZSkOa&nPxX0}>GA;ex}ebsA$Z>=V1|#mUbk zKC+<8`oYfLs-vpV56(={51hbH)(<)vAG&|~!hOgM?-W|?vY#&=!O|Bj1Tg6gTI3Hb zr#ke8BUn&2va*xd%_?LG1T4Dp1{8}CoZ*ztnuCSHh3R96L-#I*% z$&=C_FZ7Q&{31sd`|0v4xBk)B_@3Magi6JIWW-al{xSDh&lkF-`J-h&97*ZQA#Ern z^QN-0#UdWkc(E8hC(m2{@2TF9TI2>p{$K1N{~zY2*}exH@_$gu|D>5Q0^mwRiYFyV z##PQfKt+wA4%8YgQ{?|TxBUOATmB!cVz8d_KP&<6e9L4bAz`$JPzEIb*N2fISms-% zT?+ZX-X;Gd`cLLtuIGHq^=b1h*K@vQNL1K|O<_{`{PQi>bH3&JkOXLlbCv?24FUv+aXaZG1zCj5CUpSQfipmv8R0A?b-*Btlj+tcjz9)ZB}GCVsL>x0>Huh? zB)C>|qey~VBa`5gIv}ZQ=OnoGiHXN5!W!!-39eKJEXruEjDhKm&r?8SB_@&a^NJN{%OUl1*{o!}VsjfFa{bBt-Rpj~V z54%b;)E`cHq;vYizF(-GSL+Xb=VqustmU=z*&q!KP#?OWJA96Xmh{=<*SoGSEJdaW z4=Gd%g$jM){Qq^KL}L_(zBobaONSN#Jcr|6J-C%(^G5EnEJ!zZv6okWZ8>HX95IE#__~qu_1%M?B0dAA<% z82E8u7tr9-d~!Ry;i>x3r|!FYx6ovV*+2#48-uv$5`LAxwK%ReR0L$~i*Ju0$p`dU81f!F3A=0mzLEl59CqgN1 zZY^v|GDWNnZ;%oGC*JeoCp#t2&)=iuex^LX-Mld%BS+NQ z{Q=FgAoSc<=^XnAR1|S|)=9L6mf`;67nHZLQ=b2y7uCI6-D*sSpF9sCeb;lILi$(l zN^&v~(yc_NoQTvHCDe!;CbSEe}pUF$`5kO4N^WQx(s^>>}l|yVUuA4!OXR1*ZAx}MIV%f zua&5=X?5UkwYEIT)AWV!Ir*_&-nQd+%q+)n(DlO-`-<~+`p8jjh0!&Z#7aU{VO2-AR{fAT*=@yCjR(>($=Pj1(XWl1Ah*k}+|p=) z@x4PD#X2uV@-L$1xom|riUI*Ly6kk>Pja$F9m~@g|8NpJs&~ypO1xkj)cLHeB*c~w zev#P&R|IP}_cmo#vU#`Jvj>Kvb8a{u&m)$0x6^iM)KZ6gyifn3_K2aq6S{v`b_AxyWKAeWo?3z5^G z=KhI(3LZoDWK%vRe2brb8`e}$`*tlB;=gC#rXp_Ni@|x(L+K69G$ncuEUGYuchcaz zE_?qB&XZxWaN$qPWE5;~7I>rqV3j~_+7i(9q;h7#+C;BpFYweAgb=Y=e(5WF<`2=_ zEh*AdocV)(wrBou;3s|Knf5%x^5N{qT=Lzj}B}6I8ln*gi=IeNo5gC4P38|6@^-7hmzj zKEjy@8nRVNzK#p|P9wbZax;57W^yqcI2L;XiuB@I-X-F zi|>*e=n#>wV}J@P0n)5|9q;@>O@@`PV=8P{3fZ!%PUP!gAa>$p<-?X_mU$MAMYtaI z9|@Cy5$Th7_CUqO=f>ZgSvWTQUO5sAe?RiqUBTZEgXzd7|6Y}$efq4s6;wI$aU86E zvhxU-Q-CM3#4+1>FycM!_Uz8d*E>H_$v%*;38~hmA0w>SBr`*nFQz;jKG+tvr+zQ; z^dG;X1@M#eQsij}&9!=WPO%~F)opCA&K2CCt+28K_G*H$lRTJeuYOtnLiZNN!}jVP zbBP3>LyoeqwiFwTS$XzrH_5_Y?UB!d=n?oC4_c)1FQi_X?qeRXE}fwz&zlwlKO;1b zLwL{*jU!8b<<>Z;7BuY*r~TWeah$o=bMV6cZD|~o6`jTD*d=Brz|V|KfER66Z%-{U zO$y)oLPO{lXqI9Y*D2JO!7WP->0PX54T`r z-aqzJxBm0T{m_3RXIlCX^bD9-U*`Y%Y@+`h`p-W*t^W|Ocj4U&ptuY>pA;9uyZ5EM zhYh9Zc)#)P*G66Hj2iF$#D@w-x}W*7v&v{9?e^`;LrFq!OZ@6Fx?g;asqv9hbB(3~ zSkenHRNouZjd#C|ANKFvvTqM#I(!%cq6BUEvj1|cyb{@@jr^@~BXd8l5{k7=J|y%v z7vB97B_IUix~p1}VcmvK=W7c0#JhjqL9RK!QTtiLPx+0USWip6uQj~n1ll%!FSF@Z z^Kb2(K3S%GUdqotc=xL>&QKpHn621;UCEbS3fz+ozi7Yjg?!(YeA)fpR~=0$-?!`k zjeOZ_IEceXp8sFXmmS|BkEPS&-IaXVo3EEgAw8mHGdXVV`PB2(ZjgvNU-l_$)QfD| z&oj!GeRrFxH$yD`-t%Su=o=L)va7>3|E(L}@g3#Men54KRPyov0eSU{9p8n#dOZwA z)|{L2>i@U-vR{v}{5ZYZB|qN!#D2(+GlrY;V=$ZL$65SepQq_RyZrc%SHCOyu}AUu zAU{5SccV=*{;TpzO_*wOxLSfhO5u3hLv0*=n@F*UWA8o!8;psxqwO06ZddY{ZSP*}138KX1#|*L8fvX)TJ&T7{3O{;%UB)@+jd z-jup*_~VT55%9md@ewks2+V$EHTIe*!woB@A3h?w#Z3*HYTee#b7VisORd|mi}(n_ z^g8en64UFAkqEu5UT7_Hh%|BP=kXs7jKl{U+@rJ4wLpI`rWdJukQ?MkPn^WecT^-8 zg5fiUr8Na7F~^OQm|>V~$tVkrzG8=h*VJ1RF7mb6&X2D>lwf|lE9d2Aaq?3ez;@J} znF3(jJG*dUDd4q@CcJikWH!KQo%q@d9Qazs1-0DbUJKh!BVn@eepG%`18jFIOQZx6 z=|sK)Hfq}dwp2mX1+bl4?$Afca$*(R&=#XUN&seb9Nh{0!bYe6Ja+zooLal1 ztdSjM6di%tKvJ=bV4QVS!1%546V+c>C_h-)#mA^myd zrEYpSOBH$d%c;@@X{Fm}h$=CZ-cZW^B9?X{;CCEy}AKxf{ zqx->*KfdZrLr6B_2~R#u$k$&*h|l>>V0`3~J#@w_L3k!gQ)g_SeV-rp@7?P5XH18m zeU@V|Hdf6WkX1eyn}!opaUJ-!L<0i_d>h7lj+yT%nE#NWBYwiKQ!pQnU6_fr_NTa2 z^|08)#`B5dt&027x4Plo)pD9UXRUoy%TP9Nxx90-`IE}$O@EGQuWfPQH(vRn%3do@ zU1IMZ#aZr(t@bf2v2}n`ZusJ>#9PsZ+>UR(-?2$Y??X!)(!F$6tK6 z`3O&1?Uq|?GGwRn5gs7&5sF}^s@n!2-?q#=ZR8r%hl1T$gQ82B^NUb^`gXHjH!X6i z$+9>{p^l)SERx4%JRh>C(N%z|ie`OvVd|!=7fub~W9~^2&vzXsgSOkNS#HxWFd9NY z;Jc$O@xX4yerqgjEE#|{S)tf@xL9k0QB)J&vKJZpwFq2E;?9*D_cf%5cVb>_vLYtJ zClTR6t?s1~q>79#29rZB*0#i^uhNl9X(>EN?VztoJdmU=3U-Oqt6MxtbsNAXN(2QX zJy0U2)Tj@Q7HI^}psk~CmVZc8592_7x=hvF&}%*s$_k_kbzKIE)T!6mFAD>o&H9vy_dx0N4DuDy`ZZyOIcx1oTFAMWYBO!2 z@cSpu+f0&n3Q8@BbnYq7UUMxS|CDD%eOF~>!y?XXn3AawC{wPb*7;0@7Q46ZQ(yeX z*(3qS`yXOLMsaU_`PFyU%GoBG(NPtpdW2VcU zF?Qi7#HY5zAv+YeS$$z+F_MVUZC2*KcwwNW+pONW&DIqvZZnYA7>X7H0gF*=r%{;6 z(l8Psh&;_yJBXXJJsoi%!izYOBETZJN_OfeIdJd>v^K62b|5%(qyZPbBAQv&<*Y_Nd=o4+H)Agt86;Skgx}P)5U-~p6 zs%8Gt*;ijT;(mfV>jdMHmZ0I`QsLD zC7x_4_Gipea5Oib>p6bdXC*1*!YqhzCDY-v!3m^QLYEGT;<`XurN5HocEInZGA(zW%spJNDqL`%W5PE?m*!gK+0`{^ym?tNd}br+WJ18cRib z(N2dgufnQX@`jY3yRN@K^P1}DDDneMOvw-AR0Y2OdIO~mk|lfj<2t3^oAm~8r?0Di zM_c#~Uxr57&`-Vq%lC6It!BM2XwVM&)f+i@m zpkANN>WI883wID=>Uu%n1<1p0kGMj=;;n${ut-oZb^fD4d|1E!E z>CVUeTg5UBeT?OG-}q~!7cI)E!Ob_6LXB3tovW09M_UX@1dC zzp(IJld#-{69PdeW!Eufpsys8w5OwpH0#99e6SPrbtOJri%=Q_S5i{_LH^F2mvq6! zX~M({#nS1QVFRV6H65R>IntWa4C{a8=9F@^lTqg7E4GMKuDE(bRLRW5eA56at!aY0 zF7ruix_xrM$Y*NvzjiXdeEQrxWEQ2e69a`yc4Z)l(w;%o_C(^MP>`#8a%sMJl-vHu-mp}JKl_vhXa>w-T2 zC3~f1yyZ7zEeX%BzUJvjP84RC7+H!t{)H<)>+g%C_}j$DVINtG^!c^xiD*-wKWl~* z>AaA}ZhiiFe%QbB`A->&@6}9(kMs-m4q7h?Wr7hNK)NB-!Qr%I(DaM*a@HE(7e-6+ z#P^|Cg*l3P=+)MQRv*w ziC&*)sGW=%*E#K^kMen2{I!vfzzI(QBQO&iVIQUBBiM(V89O*7A3^^-a-~m096Xy9 z1ba9UdJP#Eo|~!ImZTkD|AAl+(jalf)pCx#*aIoY(06Gj8)zmU;D>$oJSoS5CXg{+ zNk%As7pmn7v~1HD{whv|ks7q>dayw-la^5I3fxj}1tT9Y7(=+Z#Ztd@Bnd^n z1X_pknS2SN@!VQ?L%z=&p4+A{&Iu{&P`=g5mr!`D;cvIq zD|GIEB*ZdzLAM{O2r}J@T-lI{m-pv`0R;u3N*>LV4b5{}FsA|Ei`s@_v((XM0g_K3 zjpWw)v*xXgu-vczJrdh@*yqAg#p^-G<1{JDrn>q&^R9(p2nQ>>i1L z3p@n@HHDf2Ez;IQP-CWq(-!`M$75J{Uc#r8hIv}#cc~2@bu=V5OiIIij6by@90=I6 z#vA{}pGt&P=v98&VHJ8(e&x0b4Ku#CNu-V{Ft;GlopY7N+z@^~h0=anq{cwzh;+E% zS6a0Isi5Fjx!3T9Ymu02WSh|0j^RN#PJP?iTI53OZMfJ(iOxCP5^wt_|KVRK^Jol# zXV7M&0=<;lc}UvE$M`oc(2)QKJ^Q~Im392yJXjykjR}Q_{EW~wkmV2Xm__ge{*#-@ z6yh*F%@~eZahyP>#g5Q1C;<+`9Yb?IzEC5kjMzm(G>xor(i%lS{MCe^TC{tjJeLsdz3&Ep)6=7v(6LjfQz zR$fA%W0QyGtfQ%Z6Gtd39Ni?LN$bCGZ$#tVgCmcl9tquqw^BLH_3Wib5J-VQ_}YR% z25R>TW+^hQ=eaVi8x040HC({wOf<~*X*k5I;RCjY1wIW=&MJrM;7ACs-3vz*1}5G( z+-!)+t2i);T&ox{<`D_rc^>6$P(D`7;{Z925Tb1J_{ise^XQns{mD45MFuh1j;I*@ zIR4I+cs>+;FYy|y3-*I*tZX>CSrUcx^96{GIhT*QM;|w5*2iGLkP zua7OP0H+?J+_tAw^`iK8T4N%*wi&D+DNFR?>`tfm2fSP4*w&Bx;y6|aaFS6I$ z1v1UFP?7!^LW(N!d#DzfPGtS9aL!t7F%0VKsP5Pauz=%!UmaYvjn4duaILJx_u`LW zY+N>;P98_!24l1EfjC3OI%-rrVmbX#ytZ|#ws>hu0p4)@pxjVZEfVtg95Elzl~Ija zHSI&u)!aPM6<3Nw*Cn8bO`1%Am8td6n&5(^B30|wUP+B!r~e)Yi2fMy4%(p~Zg(vA z>zUy-7+A`cn&~z9oq0SyzFRo@elTZ8m24mG`i%E1;Wy)eRH)zW}DN?J4$)(FZ)y+kJuh_+&Gv^Q$vJ!;ShZ9;)nL@8D%6fYFx{F=rI zW>s5x+hB;gle%Hdt-<)M-70SzLgU{VL~(`6+fJ5c6>gDb75ELMLqjCs<+M$s>UL|5 zWKnXL<9Tg zV`P34{nzIL`p@D2xb=U<|IyvU|8e*c5QiZ~H33KOYm8z4N4+p`N<8CPVS3)jW}V{y z;D>!IEe<^6)l3Gswx=Hg-V9Xwfb$|}gSNOAv=h{G1l$|mh*b&5ZWaB=y$#5mR9zs= z0qzJliJ{8isBC6cra~wMNT^8`QxX2U_;7h0d%haHY{onimX>MNQ~Ca+ev2V65f9R; zAH{hS@45@$0f^qgM*Ftpg+!l8fvHR(J3Yxsrne;Tc!gRb5RWB!)(f$jdVw4`3%48e z&qR+ZWMDCbk`!9;U3yyKy>igHH$OeC`Jh$45VRgJ*GcP;k312N62%x~cq)sGNOq5u zj}0XS;BY)$@+Sy|#!rJ?KSAs>ej4KX34)#R)5-FuOdVuRun73iuHEk3T2X3SSYdaz zBPOvu`vI7vR|*{jA6WtfFi6|L2Tpz} z@mfJlOeorEf9$h}?oIK>ol{0K@ zyzM_!Zaj0pW#GRZim>ckP5&*WmEX6I!nMhNOM4~7f17Fj(4l9$+_~y}jC~$bsN=SH z->%?yXMKZ_u=miw@7^yj@ZRStW}G~fP5&~Q3J>9&B5L4sV%+#$ogenO!5#SBCqs%Y zNci1*3x!kKh2OpJ21$;m>(IV+*H&~Lzx(q)D|WLle)lcr7nmwf+I;c5AHAEQhy194 zo%4_<^HtBQ@VkNTp7>pDN)67*5%`yzd0L(RH&TX*B2n+z9&eM!Qg&DTQ=9Ko9UX;# zYCSs=OxrYW-T!U;?tPqv({69D8#(>zd6GY>yLR6}EMc)fYT{QorYe6_widY~)nU=V zJsAENgmw%0)n45*$I+e?{*)KzY7sIf zLO!xLg#E+z;>-Ax^d+t1ryaheM){T7mn39*1;Y3QL?`p*7#_4cNJf#kVcjBnOvLR1 z*}wiD7U})nDCT(4zyKKoE}XBwkfz}Q#&~TFrRS$0d8^6?aoBC6k5sG2#$BOx>A zvpnGRIULQt3Y*X2Aj5efHPz-nCj51QMhl+?`KI&rtj1td{`cxxmBOg!S!U}$*u#RX z|03E`Sk>A3xUlI1JBb`Ltl5ffd(PcpRpl z%pd1Ey+GTr(HX{N)af-0%Jlwd=}=TM92U%ZkE;)WShMqA zezh00`O=ddfthM})862hU#JE!;)7sxYBpXpb|5L^xxq%%66V*jS}#cz@(lUE#C-YF zyLJfZC48PSe_OuEfL?opk3Y|d-rgp?G*}XeXUu>x6m^lMMS@9BIlt-XA5QdBj|TlG zWkSEb!HJpC|7N~1-??~OmdCUUJbaq{@#tU|y>s_uFyD51=j_aAzV8$C8g$0{@0zZj zZkfM44gK2-K)?OG{q5@v=(jgmydxv}$C~p^gU5Ue5NW*ssm3^>lN?z-q`a4g{vgqB z-@ae%&VYV)Lb^fjLXA(@q$x2A23LJj}@P(761*iX~TfQTq}ANJ?4VT=i6sL zv;A__i5L&9oWWljcd5qX!Ot7EsmL|?`7lAObzV!Z`Yz7vk`r9((K{3R?bF>WGy1n2 z!~5Mjr}thd>8EoVo#dQ*%U+h|yyg=9_TyLjWd`$aZ&31SM)UuqpkHnlkJFmjewjDO zMenb^=p?1d z(l|~eCyn>NaGD40ryBN|O!#GioBqQ)OaEb+(ZA+s2Y)xtt?;g}ER&Hu@ZfQ-{c_#T z4CdRuzh`dEXuh8m^jiDmf@Lz_35azL{`kio8PIRvFMrT8qJN4(zYurh z{ZBOL_oUs7r%%IQ#u5G0rNQ5~Y|nsxdxMV?8PTr^`WwdOV!xwy7`@RhvK#(`H1sZl zSmc=RGc%#rKHq0#M(>&d#{L!)?jSaE{UX;*?|q+TFu!(s@7LMro$0oZ{HmTLHp;|tj~6TCE-^JmH3s&u6Zyz1>5xHSaY~qkd>|f zFUESnSI7WL@Ri$!kpIKSUrunkN6?yBuY}X-aF_X7OWbg}%TG{uZoyajF&Tb%5XM<; zFBLyysEa&(UkRueFCHCo$7cVK5mcNahGKXumVPG>UwMpw9C zAIzrOY+&#wv=v1Y2q;DJ1Ymjr#x1JN2BJWQiH|O8t;mPAWnisRAY0?xGzR1tNW1V) z75*1rEY`g+)AABKK?KQR9A6)d)&*<7hEI})$M<9667L4VQLP}hnV*UxCb~KC!cj^L zjhU~&s8`N-Eu)@;D|1Fs?7Hkw4$4t~H19TY29uwwdIZ)Tc0Tw>=RX*Z-JBcBSzkP2 zmwCTTjNSQVHlkYt1SXU|s;PAfgkO8vs4o~E*`BP!SP+I&{Ge1{jT1(pnWvpYd$0l% z!l|7_L_XzirW1DfNs2v4c$YiTTI@m2k#-;aAHFAy;4Y7f8RdxlJ^ZlG9wfL6XcA`E zm*Jf7MO?MpVJod%lG>P{luc%Z6nz>~Y%e!P#oR3?F(JMrGppf=xa$bTZfP{`D>r`( zMUg+XBh=W5d@HlhrscayF5hQj`G(2mo0^7)jhyw2v3y7^TAye-R?hfU*z1u`wQ5mxqo}P68Ad6RI|Ot;@5_#&=r-DrCq5*1f)~612;lRH z`xM0j#V41d)3vfO+`-}K&Z4MJU390(@rCadcfXmbiQb$|4l^*aqEQ9&wUAZ@_EwNY zMwsF@a>#^T2|P0d`pt0JjpCU z^Uc`8QBA>UMbrEl;pmJSOh9`$HVjNDG`%Jm?}3T}#Y>`P?-fRyiwD<(QHiO>Hfl@k zfCR)d?6pYXLuE_OjrQ0QG{ONxUH39$9|(5h3mT_T){(u)?t!H9-V&$I9M| zEWc|DE>9$AdmFD}d39p!oG-u%&y69ylh`Hn>d6otd>6N!URgHkOU8tPj*6z_-310YYiDEBMi(I_ux-g0P8Yk*yD1U>t z_+aGWr}PsDpF>`jRXU|ixQO2pn}{G}e?>{duyLRD3*wC43Ol>yI7KK-`vk{L2oV_&p1g?q@va|4&-1FT$Ob$|xQXZYE zx@_Cky9(jb9+$efqdE5oCs=AuWFM;7{*BZHy^3yr1YF}z&;I%|6~-e)zcAuksy-RV zr)970v{<)L6rnirp3Qw}t$T;#C><3mr6_O2Q4sq;cE*i+lR#IB%Sh&i8grcz&jO#a z$VYn=O9|ffYp#&LajZlg3(B`}i$7eYVDWCrLS!hyR($(t6?wks*N+!vh<-hKmujo09*s}GR6Q^CJu`n! zJ9I+2g6Nn}(*tXBWxiRqH!&NuT-vtGIZeElKHIOMVL~2OtQHsguEOj})*;g-D9ZdyZ_IwHdq^l99&2_&JD?n`< z@VnwAsWomM1kkMsQF-5OeVfvoN4FA>E;6DmOp+N;sxQJ@tqYjzQ+nsu{WX(k zfOcQTC%(^#|FYh77Zd3~zXByMR54fm956reJ>99CXz0UXj!Y^iA^V9!@&O`~c{9Xv z?njj=cOKQwZ2x;IdNt1zN!sU9^(NIKQ(%{&J*Pjze}sgRL>FOO;z^DR08=$5*}g9X zYM1e#c|?C?9N;O*>3oBUoDoOC2*6jHSm+w+^QbFT6d4H3zZ)%6vO+vBk*{V}h~MxR zmI^oIE)}C?|AJTj%V4lN}$=n4kq39#R9=lUpJQ*!G0-fYNd}rbZlan0vIzOhhI`&&BHk<3u zhfE}1p}_!umxmz!E3xqW3S@{y_d$^WC=}}z9t>jEhNtfdkJ^1FiW!6@iCe^ z6n~GWlLN(vS@=K+WGmKDqY=B3$I<`Z;rB=@izr!GV;E<*BABzM@^)NTjI+B{25wX9 zXz2jvXF1I*`YyNO?3zrR-EsqGw_M=tngq_ySN`;luRh>l2tM)tcN~cSa807Z--zX; z6fQk>Kk#sR0jTH*sorp4RY?_;))Deb|*QQxxA zYnV)7JB;@~`YjKWDMd372|qfN*sqT~K?dP@_Yu*iL3k}J$t)9kNwaQy$3z%rRh?Vr zssNMWBcj4c@g2oiFA+=Qh_9Z!P99|M_-Yy03+7`4Kjw8ZME8WVT%a;X zeXCXflxAP(_@n^aq}rWHS_7Y5*yxmM%ZGsV2t8j&wuwP!C|Xr-p2u}+KNO9BBHbJ)eQvJ6}EC@p%WXx#^P z{*p~^h<+Z5LP=kSE!M$!+Q!ms?kC>o*>3a>EgZjFyaTqr#?pNLv8sV{drGg-Ysi`A zOYO44#-c%jv>4S1vrIV4xC+s-Q2fq8DK?yqrz_TYnVcrEhGtMZ-F3oNk}S6V4pCe? zvKM!-+34*gZKt>8dL?pNiE^Ka%D15^U)7t|M^t$UVKY%fE)3h8mY@D^VW`ZomXt^Z%pe9WP^Cm*Rp8AZ3Y>2zUUV&p-t)o z_1>R+(aD}-(w+IDKZVWScfM`;bqzC`Prm5Yk7j5O=<~5+89Yp7>;I#A-mY(FRNpyv zJ`T(KsIfrCFfI%FFzZCHj!~kIWjKe}$z;45TF3q=7)osZsh8x1KNm5bzGo9`b>vwK zj0>OLGFy7dS@yc{-Qn1m_EvXpnXhu044(_Xojt%CalRlh&dbj#Ka594SMkPR)md5P z2hr!`4{%wwlUWc`z(d_a63ti?4!&P2)+robGhy*E znuGC-qxxfpxfYgkNLQTIByt_pHT@)UV;j#Wo}Q(+v1uLlh5M+(_JyrhN>mFotW`$2QexY9D)G zr~fQ|^ga(_BNIGt<1ck~1iF;pI6?gK;v_u!ceU#X}*L zqOY)zotKGy4EK0(jbSIVCfKl#4TI}27%vSJSARMW2PxQ|oGIdyM67OB&e~{g?WW#^ zfwv2*mQ_~Q%$%n#9L%fZpd-0^p<#99hV7ncpF#2zc05XacR_!}LtENIO zbo$tX8HB-xKET;nwW)X2*FCiAk@72dEcJ)d3PdWQWlj1FxdD&{k`Dj-SG%dPY2{!m z(wekg_M;=4OO`1QF(av}!Tu?33de3*f_pwde*>YBPplW-AH*|L64l8FLt7V&Zh-PT z`mp(^omkc$zco-8os+j<4}m+hD#UbSP!qri%2$DJZ%ED&_O|4~)_jov4&^JsDNMeg zKPBZ4Z*I%n0K;W4z>7wWO>^d*V@3Fyk>hrY%yE0b@1i* zpj2urMisu zyN6ZH4ZGN9vI|^?<^6b_s+M&WM{gW7Nq^OC7<-z(7~jqS8gup!yg|j4Q}8N)(SI0> zUebyjLqQ{^@td(lNLN~zv!R$$JpUOJ2?Gai?fFeOa%8x!DIS3dtHcjkCTc;9v?%&5 z&D9xq69>ahaGp#Fpm}Y5E)z z^tIym$$HLZe(;ygcE&&P?V7+laM9TlSn${!wlnn7TG5vq+3aWi_(6vSEEww@9*iyx z3)tA87Jgq`b$)EX zs8G&Zq1Z(bV>ZLUcp7`F3&3YqK+g)UN>ZHysQg7M=!f!Q^j9!;A^63LBbX-vwy=Z_()7D^MdkETR*{I#+uuK-M&_`e{n7XPDDe>WKz)V&a zlItBV*5VbRRojwe9a#~M%?1c-WjL@i`7Hgwfx9b4)YuD0Q7wlR(b57bNLW5@_|gq4 zEZZTuYtGOp=7sF1D=0(bQulrA8&5lA&(UPxd+jUyCvIP1-`jlPcVpjMG6%A9eB?&{ zuTS5(BstscdnXUf%)V#H{~KBR{?_CRyQzAVDNU?3tb6qmjD{F@#GU?)t$UEm*hVMN zOapO$lALirtiQfO8d>*#GusgMJLvg6s^CYm?mfk;Chnh`II`2nCP8Q>rir>eUP%Tg zJB-g}0|Gr=@iZ|u-+nEl0oOaPC(x5656~pA6#SABu4&Ed=(4pHC@Er=QFe>+X6@%~ z*D5Xtw~-A)7h-ZjhjK8Mn0)t6g_w*AfJK)4Y1)rm_O<)zPVuy_y}Cdl6+_)HJjUfI zwzVcCW%gYRU)$Po;wl!u+pTUX_OMj@+D7v(h1rmm-ddzC025q_>Q@kL0h=Mqp|m(* z!%Wj56npuvgSbZ1<^TIC)n0y4KM#93OpG{D$p5!bxt{Tnvu}5ts70!9OSirJsNL$$ zEqnPYj$-#wS7n`a4RH^#agaIQ59jRAa&v;QP;Q~tw+wrvjQ;3FW!jwP=L{ivA70&w zqaauY%w9(`&A#W_Itt~Vsg8mrKa)O2_qod+i+p=Oo_=-dtv6T9!j7SQdqqfepvbpp zoF}{eYxmgL`9rH}_vO@bA}mn^q7?R#{w1$qfsI61wXVV}z-e71wkpy?Y}(72ng7G8 zfGF%0X^|grQ|5F|6R&=HM;QQ z+Mj!YI=4p2h0p9GeCUDc++i94thO3OCkqJNb@IOBB zXAge5tp`Q`ewtwZn6iHbfh3{qzTUx4r>ep+-Td?|e%QZri=QrFGW_@{vZg}zBy*mb z8&%e~ROM66tiok)1P=Hb9=nE^F1oxc?D;MgvP?)pQASMvThEL=r|8RF+&|M^@Yp|p z>M8cmA`Ui2>!-Qq`I+LdiGh2!Ua=ft|j|GY)DO&swY`=$T<$wU9C?M1r-`VR-2`w|QNXQpF! z?17y?xjP*C55w~OJGbdSN;2H~&m%kb!T{vsgKQ4QCKQl0Lh_O&c*{Nrd*ArqubE1^f)B90t-d4&2Bx* z_&#y(lum3*Q_rf|K`ZCG7}mBt{6DH~X$hBh|J?rN6My259{j5bHFx;_OT%JD?w;=0 zp;H+tks<$jO9iVS4ISHA;0qQo8Gh`gYxm#xm{0s2C0xk9=|ps!ft10f3zDC1n(3)C zeo1JTbYk0?I!%b9=QG%LPifAch9TiCHkD9w4#Hdz~Y7ifrwru zksGdwFmM<-4wv(d@;5ep+Ttbt{w#K>BVJ-No1oefy;WS2{LM|*7)`}ioRd)SV7J3r z=ZAgfAH7>V_(^8%K06$)4e~8l%^NCebFoK&VI6IW)d+6)70}>r?^*UAEQ5rE2m>}4 zV_V`p2EX|*#uob?%{+SIr_dhsu&~7%2#3Ta7b{|T9ttYFFD*VIZq#gxi7N6932@GS!HTK&J_CoULeCP2HXQtFZbNYMVvxp$yX;E}j zt=_##*0=4!?1S@(Yfs_W8)g)*`nJd?{xHNi8lSBI>POHU8Rd_jvh;6Ai?kazD4t=6 z7P(Y56t=Ib+lKbkBBD+wv9&q*aLA?_MyTzPTI3ja+wNNAFt(;xZSQj%RjBQ8T4Xb{ z5+c}qZx1aJakbsWpJg8LGx%kWNQ&d-S8m_;BiuI-D-Pc`d3NCfB!;t|WB$P5oQ^~N z5|~F*CJ7nOM@nLCv%7@h1xDb` zE3W=XTPV`T6U3kd#ILot#pvoLoH6^3Pi)Z^l1Y&juy;N%GL zyp$O-i=|R!*nG=tPPhV^*!LJ;n$k?)%e&b@>T^j2Z)qe_F{fUnX1Pesuj&%1gMCQ7 zAeGc_x27W%Bzci~EpHMNIGZ@3Yoy*a(i4lI|AF2LImC9AUX+$poEa}to5Zd(H^2ea zU7FQ*8GM?u0nB|PQ6-i9HlHH9PoAJ==~`s4QDnDB7TMJn2LmjBtw7%4-c=2i!NBV3 z<@4q<|HHd%$^CPa_Y3rnR|{?70-jT6Y!veI=jj))Ea9#tP*_!884A2tz1(Vvv)N7m zBX<)LcnJ{(^=Qh5vtI{{o}t9{ZEW^*w7epdmU;R!&Xz?{j=mYFY>c3Mdb7!edo$Fx zJvqv?ufEwrM*!>Uh0JfK(@K?5i6N9lKB5BH`7%SlECf6r3zeM14Bv)Uxn!_vr46*o z7+z#D`T~yJsQ-`1rEh%v()sb{3|BE9KE;M~Ihe+T1q0G$#-t?hT;R)%#Z91_35T3% zOD9AA9kF_Dhy;Z}8NVdD2UQZKiI+0%!<5e-h{e_HzBZC^gb2ip_@b~dR#3Ug=5Ta5 zd{MzsM`-u<1s6f${N{%4+4jWrunQmo{1r$5-<+IEzej5;msc*F2q0E%uvYKAaAG$+ z(LFdOYg|^=>|SNsgy!V%GHrY_^mSlk!-&YwSyy>(M3o zmLJYp8JnCRf?N4b%pAu0KFS`4VSxGg4$31BJpo}}H-n|oJWO9Rs1 z=h?%E0rtXZDclh|Hx%m?9E@3MlHraM%Cs;K6dD}BUNq3@qp8|}P?yCv?jy>`H}PTw zzR{nOU5}{IZ|6VDths`V+njOzy+(oqi2T`PNVVg=^1+R0jVQR#@E_ZMKQztnWGq#+ zAL{yD;K`~!fqn)K3209vHf#sO$~adJ8*-`k0i@QZKoI3{gYf~VeNZQAA0$QXgO(8= zAXJ=DXfV?p>wMf<`=E}^w=IRSlA%>K`-qA3nEO9KX2NpP|8EbG&eh`{fT%Ezj*X^P zK$*K*@CGPGz_}p>eB>Ri8VM#y5CdT=h_H8p@k8ISl|I&mGFQ@~2f#DkT}?(;E40Pq zbAy4JVC;5;cQ&H>?@&BRuZoU8G^ILoFi;l^yh{vQe;IFfcX$^%Y%x$Zw~nCW?PCRP zK~JvA!uk}C9_^zopQ#vW@_Z*TbVcciU*Mro$>&*E8H$2sKP~2KCC%3^#JldY6|o2c z6o(Ww#Vwt05sb})A+ANtA>uK_98Stlsi2GrOx{fI08N-LrYT>H%$FvrUy99fD{z7> zkVGo)=EBlDgR#5iqP+&j#EUj-Xmq=4VuOLtY2C1BA;#!1aF61xTMDCB6!3CI*W$3* ze9M9yf1?Utfg+XZ#qvo8>WF1!0zXjSEFD7V81i z3nK${FM9~u6$~HAf%A)oQ-SE*Vsn> z{k(}pG{N>hBNct#JBpL-_Rl8y;f>PbK{IYcz&rdKPp_eFeI$J4%oMs`QK{^S;yBUZaFR>DUt zfAwv78o5SNT3^Afofeo{51{FgS%T1Cy5~pY$Qa3+W9Q5DPxg(86TG;_8g~Ve;kFxV zgZbNK%*Y*Bo2}Xo{+u+lH#XDI+=vriiD^(jwWM5i;%deG8N`(x5^-3rg(<|9r4yIe zD{+`@yO}#Dg}5i?9?HyttFuyw>z__sMO$w(CtOcyGxsOaw=r|i9TIV1-6y2<=uY5A z_%oIj_m+QyB2zlXLu>uG)0S(sd(FpBvpoLJcH74jmoqy@$KCw3+4Z081tLM2w?xJb zmS_LoZriU^B^U!ZYpW5VZ>N-ft9Mw6;GbM`o2-GT)^bqnf7|JY993p-QwG}iP+Fd*f@->a(2@BYh44aMmfHW@2BS>WK^$(>z<@XUMY@ppldQ9=?0@T z430czmDy`h7FKJ4xtOi}2pOB{{>A?|o_f*{H_>saw>^(-5@(+&q)f(M$^ZD@h_}Y_ zQo|%x2fH)=T$v9WN++=A%5NlPfcRuq`PKB7CEN#{3QeJh`;ZV|frrC*WV`J0Q&ZZ3 zZ7uCS#iwL^xc9`CkBZ*ydPQ%Y{3uKme$c)SKA1u zcyXZ6>#!M^wLPx%rDd+x!n?6#Xn8U4AG6&^)&mwl)>~quNxm4kp3MO>?x6iu*at>D z;jd@8X~%SVKb-r4Zv+FtF<+k&Pe4|?j3?A{JfXhVctSnL6Hsx5?WQqAn#(z!P|xuM zTvh9MKXA4|R#H4ckVWx?`UJ%j`a%}P6D(*;GM>;k`VQ|ZU1EG9(dwpN&flfpMmzLH zh@Ujif^-X~zRPan_UanprmoRugNxGd!hIWs(!Di@AGt<*m75pA)Fk(Eop3KV=B=p57+9HO$@}Q zC#qm|M`50L+QBKeo9nRQJU6{w+0=!KGpcTGiVln$XeBZpJ;lg)^s^NiPxps2-jid! z?14AgU-j32r1+~|Zv7AZRj+O&Wd-#Romf4AY{hXa`Jcht=^v}V>Z?zB^;h-HUY~Qx zoZHLi%rBGn`tA38EB5+PuN{)T{uJ&jM!1?6bYTkRNt9h9%`&p2c*y*z3cI$yvz5=qAF$>0vyab_*U(yRyo}!)XD2hK`2=gb5Q5hhHb*JC4n9vDe#u>IdeG zkvZq9=*cqhaB#g%k5c)VFlBLh#(v#;zE^&gYCVt9zfZEBp>^tHPT)GmlegNF77sc6 zp3-{0K=zZk!laJzYB2sWKTWFe3pZ*dTtf%Qa#Q=5`wl=4@MQS=)to@Nru1-0>-U)fZY1c| zuSi2eOKJVKgBOr;vuL_@hcM^c^{g9h4u2tB#iWs69p$2HECyX#JO(ji)UUrERQFjS z8NZqYKXrfrkx@=|GR`~}K;(iu5XU4yJkqeg8eug3^?R6%H?Ngp%o9g8w85j zoV6$-6%QHk$H{oe7boE%Gi;6WC(@19wXkp+@Q`uAMbW5icR*xN12~u+p@MBzK;)i~ zx`XD?cbp3jOh?$WOB>C{A`2k${Nu_4!-%5jl^w7;^>X8UUl|1 zzhut*xwqXqpZuj%e?JH)BfZz(!||GeKY7f`6obnhfAWm}B*~7RM@a5Kh)WA228vVy z6)xkZI4T-lwsp7`Z>IH-_pHGFmX&X}piJD^8j#Fl34AA66=cSXw_je|N9!Q^i$k*x zX1hL*{m&Y|?)`q2zT;26FqZNANe4IGynUXinG zkBFA+PTs-~J9lonlb16Yj^-&v0uK{^@^QD@|KOCj$DdrjkcR0*4=eF+6Myo=<6ZV7 zd;H1c0ix!zaOR4Avi#8a^i|jAo$x1H{^rU@-n9t{6>GXCUs z^IYnS7>`D{wBy~lgTZl@8rUB`WxO&JHN41YJ;ZBTF2Ef`sq|X$o6+aCp!xx4p&0nh zrh%-6?d-qPOgu(7u%L8{p}5P?%@yU|JYmHrMLhf=q@%>n3ml&SZ% zbXe@~4y*m$M0x2Fj}j(|X@B$02{JSM39pO&-Qnafr}`wMaa_vBhZ4YJ=KS?$s3E8N zqz-bYD^)SX$Y}J2k*ri7%>jcz2OG-T_wk9MYp_d1ssS||tyDdf-tZ=Vwce15hSD15 zDpfNMt05|rM#zTP#<0@#$8T5;s*|3XHLJe4C~dV@l&(>@ye^4z9TG5D5p)ylfnKZsmo- z)gJ_pv>zCk%6(g52ax%UuNdbN(^kh{`8%{$oIcVP1VvQ!ylhD<;OE1XzLMASr(#^z zhzm1Zd)y~wPMe})XiK8*7|*^h=gT#T-yL;HmP2!du{ljU8~WFLbp~p`PsD^W2%?ym-`|! z4JcA9o`51fcCWjtQ>un??FH5x*VRyzg|&-}viv2DxhyA6Fb;%Cy}VGnSDaO?EpO{f z%kf$uz2&&Rv>dGsNpJa8zf=~np>~Y+t~jtVi&o9X2LkyOH|8LuiPKPfd|8*h<%p&ybvL|w`a)3sWtK<-nPrf4hqi^&}fz$)emuX!NH#VlEC*sHpK2_XaC@4m$O zI1t0lzIX`*A0j2A5iB4o#sH^tO-QYUh=&UDmHQrn)Q6PfHNFOa29C&nPoScE$(`9D zrDRR8Vr{>~4I#z9CUG4-!hs@Rbr>p=D^KueKRjcUo`jSsYZB*&l*z_@5h7j`@_wq< zpP)$wniv%*)NNujzYHZuV;pEa(?TPzHA$n|?07-jb#&`Tk8QL9+%IgP<6JPnXVg4(s}1Bt5{BvTE14ToI_w$C%) zcgNcuEzpeL!iI+#wBqglEI?%?;#E+i|vJ*E!ZTeIrMa~kz{lVAs87)dJLXY-S%kNg#(tMGSYiA?YoZfy}U)qxZ zYLDBt_w}Vc35eEZ+uqZc_O#yGX;9ldWhoI&LPy5$fzmC3g0_1mNibvtHUaM|vZd86 zG*hQ%xdb*Ff}RfT5`IItRkk z{>TBZ82-owBiSFhg8v!3iT<(rBNMSh_D3>$_qOEwQ{T!X)lFI-@)En2LR=1~kLG|n zC0iLi;E`-{SoROR{u3jRJe?ewGp?rZGa3qsQ1all!GFj%tER@+d-tbB2fXm>6!)e( zeoy!_7aNQ+IwdN|;lz{oUquT+?lC={dIK8Qu;8iPJ#W>kv zm;bbT@2119Q;#p$)@lck|M`?~(xzNu978c6ueWW?_S=dlZ#u%oaCOfAwH#CyV^g@4)vDd#tZva6n>vZ#H^;hl}MT(5Kvu_r})XAU4 z>7h!M0Afi>5fyoxdWvWVj5TuuN%DtK7jRIGXSYgH7nA~LW|^LjPcr_N);>?E>SlLE zQhVu-=oBtBz`7@U#^}Xx#JrW>urTSxSMn!`yR(I#PQu-Z$*)o!G3EOAHjWs^-I>EU z_zpg*PQ&4}O!lMuUyz9F>VHYP$e6)8r2oaSq4d9`Hq2xHi(@P4e@SYET2_L)7@fd< zH>uztIt~eZo%;M@WEMwJwthc_ZN&eHZSJC|RNcy=n&`Zla?c(&7ulCv!<Sy%3ML)B0-X zLphOz9CG&a!0w#@*MP+cBUpHGwxDV&$ zc^-LQHWPoQXXCs)ahg0Y=enJjWz2n>HUEe2-{8wP$_TY9R>)2@lW={=W|VFTK|6hS-n$bf!1 zbZkm4Y&Y=K;2UaDqpV(}qolG^!;T)@kEZ9ZbtNwtE`tUhDR*`uzed3~qv;#H43GlxxDE&xLV6pNRYMTD1@>e4 zrM&i=G+O7GVks{|0%UCf0AcWyF+AilY$g1dbPa{Ba(iiFnCJ%g51|`e@bMRF3)D%d zG<16rF5EtY2J4GVJwq_=?bHB_t5j{o_u}b0@+7Hv8paJ~{_ebxTACM#q>%^1F^RnY zxzde1?GN&Cbc{1thS8ykJAfLUqz*4Qi#l|0g|)yHmWSC2dG}V_bw>a4V?aM3fHJ@&5rAXP4_VK8GrqNIdkS@Jf&yaInEm9 zw)cF-`$oFxAnPSIZ`|ZIndy@sb$#A0pApev9gUFmrZp9+4c9qBka4FN>;QRD(_e%> zsE2SH_h|z~Ca1lGcHP-guwp1{o)U? z{WhT|Y`>x$=Ia~WdgARD(1jev2&k=mZF!xCi;$bhV*ClcfiPU4mNMAlYf5s*0WlKsGo!hmcLSq1Y4ogFEobum5Yc+)dpNLy2`L3-W>yMax|K(B_ zeZ^2CtS#!}S6wJgq2!sZkq-N>q1Z38#d{gD6gRZe`)18TYy!VNvrQ^rLpS_YbG{J1;oIe?A)ybdT?punosw%n| z5{qgUF)7uZ+=DD+(hlI0Y2+sPqp1s^!9OFrV5@F38FQ5q-JqQ=2CTXnMjX9D2NZf4 zpY`=k>kkQqm&^VDIfm`0jl6a+U7rOuqP*H&)Hg*It)$@Fb5~0ZYnS{EHHVZoVVs22 zPf7D!xIJ}pa|lFJ^MR@~YK~T_BtCXKfth)MWQNfp;gaN{oxo@5rechYEZ(GBK#q`u zfQD5nv-v|2u)K<;MLXcQSC2>b2GEjaMy050yF@-{scV}gze@GFU(2(K5~?JhJCv$k z*S6;)`+?44>Ya+ylWm zle&(gd@s4D9elEIu;gsk@!m8c;dM;hLn~vV$jev92w99+sMIZD+|qJ#)aj z|5yjhGeS=McB7dr8vG@{4fI527-^QD>uHuN8{IXMQgxGXN4IN_i8M=VVc%o`C^?B%= z7J-qlI<-f{kp&-NaS%+PQng!zFWSSA#jrX$!&N;D3(CWjh+Gv5Ty_y@arBU}_^FR} z5hzPr4%AfnD!jLhaKMeCM8*L(DiYK3_RCZ5c}>pQ$KYh9_E!lvL&nS>k@=X&2NLy) z0K$abElUs}H|+Lf5XG^eQlwn(2^E~E-1krBA*xu+9EE($qERv-lMK@Vgoq6EN$mOG{Z$|S*$3XL@zH`&yek`&_eSPEMLR$)w8laLOvZj_PyKe#DX z)YAq`PUAK`LIw)yBKR!?{Q<%N{SnFsHK-ds5Gv@l){X80vNTPpcl%E491cQ+y3w!G z>qcprlZU4*xy5QK82&jrrdsi%N8{Wfjzc8#ElL46ZH5>F+8Hb2F-v%@B6pWjC$ zCt!u3Xp;vA9#0>dfgAl_fgm=`LsQ>5`~Mfhu@cRB=T7{C;|S_l#;zkhJ}>eg`2YRl z6x<2?lt32%2jTzce+EBI|3K1Thn1K?oc{L}z54&H`7{C6*TDPz+M=w@Be?2s4HSs` zd^@ytf(WXN+IXJLeTFA_1qr!JNt_){ifcjp=zkN@G&j7%Ro_L=J21sYxI><_xI@0; zhn+ho--+-azqEw9b&`40W4u*aHBjhK?4P<0EkBx(JE3WWfd#D!4O@g=p@@p;VYJuL z=0FzLqim>BmD@c?ImcSiGGrFJzubTn2BZRdRf|RmOkwOo!VK?UR!+Z=Jzn*=oOo$Y z_&|ehsv{^zraJE|`9!|mjeRFb3duI9JcU0Lb@*cFg?2PJC2#!;8S6!(@(4294;u6r zl%Z^gJ6EcHC5Z?|?irOA095hk^3@u)D?0yRv)=W!&HPm8KVyFK#8%2^0o!?dPFo)h z*pZ?;{dt09*}kk$q$Dedln}BO$;*9tHj*&2LTWMn zlFPqboC|n{Tzr*_uW(es!x!h_t2}&_7nym6w=NPqL!EYpdO70etX5|y5ybcbq`TGb zK+J$dYZx>Nf#2C-63n=66`5mV|CfDybN}rWp-78wKCs#)wm|XC z;B9E99x3Xq5s~BYBfeMvm>%6U_H$!>#d_*jbYPXui01BFsbfV(GBLCfFhH>x^eLKo z@^4*Olj5J*AaUm(h(yKQn=H}HX;471fQV)yvPoXclyD)t)pZVv-#f|eg=vw@|Do=K z-UgqNU7U;J^jx{#7ETl|r7&IMS6Fj13O8*otyB&CiTz=%Wr^Jya@G_NW7puVJ=t9@ zZy2QqWfZRRW*31ZFoKjQT;+7Pz)=c+$#`{N^6`(lh1S>-o^#K~f8$M;W1uA;|2VPz z*y1r?Eq~+Pd5zdqVd&-j^!xB`CgtP*QW{u)yTfg1u`ex1kd0_YhEBa*E`yy95#igU zfYUGeVFx9egzq+u>2TQckQHsQhu#en1x}B`1UZs~D;)~%s3+YR$hsf){RZ9NV87F@ z5RQH0I+qQk5qgr~x8Y@RL_x41qp;+7Mxi zTsd1?c9tFwveUE!GZltVv zL`XKvPZk6VfiC7oR%Mfh^*8L6%L1{r??4weV?&ymfFVf>QEnbKIW4GG45mMo1W71$k$m>xJ_N6pXb>h>*!Cu zsT78BH0RgX;UCybhClhF@^8nV+}%lMg>iY?=%2wC(?3>!^34w%hCdl#EVu0obCdR<#P5pDRB$Nz+$ckm~t z-XHfoKkVGO=}*3n$#6KrAVs1a(G|)-PWC6ai+7Iq$AKek$C)_#A=jh!JK2Q23PyeMH9G!G=R6~kC66M3~@t;L$ zE}hY_Xy6n7;cR{_&d54b6W*jWyr(fyf zSg23;|5!Xf1qYSNhiNrTAD`tEG}-6El`-jkGEYHebh($vb0^~9gS?%yKplo4+&DIl z!icbBbT^O1J!8Zp|8xH!MK`<$lQ~|=;iH4^3M~a`arL>!Q&&`=GUP2&Lnzcg?T*dR=(*Iz0-+a%BI!%eHZ6& z^)kQK20M@I6TOoJy$yxg;P+vv#2WfU;HjkWcd5zWt7n1U=@xp=ccoY7Z}D;qe}f%I z@!rT>W&50U=IztboBXA1faL5)F?5?e%b21nAB zs5^gI^#2NQO49s)kavjmzn|MD`V}kJ=<1gCg$L}YUrJ*m{U1>G&DPEVn4#n+{`^tO z=RY98XZ-G-FU0LnMn{A55r|7~q&C}oiHl{|sEsM&~Vbd2Cj9!Gy!Z5A~8J&RHk7Q&d zL4?|qP4bi^&oq-+u(SQ8o+<-kHD)LY-CXmV76uOzTYCf@#L<=G0KueI)#D)w;#Ig345Q z;5Xt`tj~aF_XTn)E{vRu06%jHy&9ep=f&-$R}z999p2ysEpJS`MlT}L(HIuKHU40o zEhNwg{nHJV0dAVDZS*Hs5U0&2^1ZeN)bMh~Ohu0FH2^rXBO+98LiT%q8A7NHYj?1b|A6@;zWrpW4NAvT6QRM_h>^pNyoIq ztZ|fujlq1Rupmcz3QHwC$w74^_J*)$5u6wBIS||~T_n^LKNoQ`?x$>2x2PqbC_<|6 zTXLKk6WtQ@%*bPrRL8&rkOiq{bpc7sl0>0TQSe^mMpuizeX)oy%HoTK#IZ1bq-#Ss zVxVJ22R*P9=8q0k)a?$amyVIg0pa^GlJ8A>n(|%DdW>zX>q&$pJ~q2p#8d|(VSTE@ zkvYjzO&DDEQ;i!YHw5$RgI<*O3I#|`dv!y|n+SPId8#2eux)6jDV?*|nGSd^%?m{4 zqm!hW4yyjNncf0J*q$t2GP!!He{>)MObNQeNzU}s?hREx)F@Q2ry;DC>)!p8DYoEW z$@vX{pM&aq`U0m^m;<+_rwle2C2J|f(xTuz6uBWg=&dIR1%K@IjJ%AD*D|1){9`{3 zL`R$#DA*EECT~GjKQ8dx9IW^zuG}jW+hq6;bB;ZdZ`R>0n2J)6t&s5=vWy*c81JNt`{Uo4{IE9`Hc!A$`K2jXn zn!&%U-wK!R^c0TYW8fc<;rDbF8-A;k3_rT%f|lU4=_KL~!zRP8&6{NSJ#nE_33dq{ z&6v=Y7Op$uBKOXbGeYwUGHRx|J!x9E6T zhTer!f9(!$AaZ`iPE2lt_B!VmU^3+kJ6~~Ol2o$^WU|*g{vB5`jP09Dqlwd5AFccJF zDwTsp@To~Vm;dnN{fkhxj2Z0!;FR^=LaI!WHH`FqrRq~Yns`$eBU9GIo{eqA$Y~4udp}z=#FkMQ{-w; zxPeLvPQ(UA6NOY_Oqx=4D^?}(g82r%PpAnGC61K#B)u<$BeKb}Wk>T=V|A;RKt83A z(#j&%EUV>EWJ9aiLkmW+En4PF#4^t#SPFR#zXjAfaSjtGS>e3_ZmfV;mPaj*L%~_E zz)fT(`pGjLHd5?hvePjqyCj>+^Md}kuzC-k( z1fs=*02PBn-R^R@AaD&21;sS8wg0T4UJx`VZrQ$2uwX-=9UgG;%1YW9V2!3hO( z+vD^0l8y#FhWpEs#@CVfJx{Il2M+vSmyOM_`i893~! zP3A14=z!~O^e8=;S19ji`;|||gpj?LiD)DUiLPV|hefxOHmR}tkd%_}w{-N|E z)&TGmS`f9g4I(iSTjJeNMJ?D|l**HNvnsL#{&pga+QfoRH50`&641E|PHBg_?ENz;Y7 zf;Sh-_}u3-xj3>IyP)Lb-PBM6tOAPJ&;t$`Nv}y|2gLB4#U5LCOzV%XIKH2Jp575u z;W#yw7eSy-1K{;i9*%bt!3`1;>U#uug-cKh@|4PN@Ed;>31%lg1by#`#2>g>w{@e6 zjGm5QdfyL30@(rdQE~7_-&;4L74Ee;NIjm*&)^rpm$Fyt-JVU!;>-0v8!Qs?cEN^zX=*mZ)4i976D2ry9K|xg+h8j`W}ZTf7gT|tNT{r8BY;_<%d#x@ zN19zH*}LC@J~$C_;;8rkf1?j@`XSEw*7bp9KMtrf5D)0%hHRV)X&;{ZHHG=+B=5t- zdc-_KCzF6VZ`qMzf&Q7n*#;4 zN`;1)_`_tjr79VppqgCq*b$6Ci zaN@7_4MgQ3-!RHisHXT4=eQXor2k1tn8mGdDMIBD=tkMOaL}zETVtxI>z46ZqSYHgb=&=F%DZEok6t2WxqA$qIQlb=CGOUx3W>O+N|2 z!XdR8qV1(SG$EsWl<_@V7!})*2~WEO>L!8R`tEFPAdCv+hy%~MBsc7B4dduFkv{X@ z4+W#|!Xb52$XknxP|F8Xm)O_n)rtS1XSqx2Y#}lk=-0%*ECaXN8{a}R_&6hUg)Ajjv+_5tW<8EZE6=T2JH0}__ zSHzRy+_^cv13#c{oyI3Lc(9@;Te)`y1ebMqw4^7XyirrJyQZRMqEA^hwa~k{pm9F1 z&8KvzH8@)a_-six8bi;c>|tFQ;4%sDVJsynsOQ!tPN$C8UZI**Na9Z;-xmY&yej<8X+7&f-(pmxd#Me@bx#&0%*}M*lLx z3u~6UM10^t7glS=iqC+>Mc`3oVQLnP%*YByZh=#GBfd@)!S}lqtAsu4?Xnx`0koKn z78|c+WVp}IhX|M&5zMW=y@OH-1~r2 z-kaiIV{_m`L3&&m6Bwi|wI5nnUGr}|2Ar#kuXZaH*Yj|vG~?5;^Yg&$&C$%`eAR=( zKvg2BxvCG9%KPLjCuTsBn&tUB6rGQRvYoqWipUp;nLT|s&5}bz4vx}#^2G-$nmu9l ze91*Y^%_2N!;YrqQMXV($39AkXK4nLVB= z3e5V_fa=lu!JPtL+KRX_A_eVO9?XQwUrxc7#C-s{!J6G0;;_l&tuja&j+Tv*qh?q= zG9br&?!p_Lv^H4lfO>Iu2oQO6!HDV!sn=z}rAulB8(uY*knWA8=ze?ryT5RPdy`ku z>UeF6zb&M8hdkSqYQpT)e^mmTg9W%c#9yu4$2lWP@#e5+mr^~K9>T9-)P~&mQ~prA zd2&N$UPhOHd4IVcO65CZvA1H&S-E?7h8%b(T8{Y^P=Xw_Z6u}zxx3EAzfPMUMQv-) zi8v|k(=`Vim(#f_$bnTTjP|4u+6Ll>HT7v;i0!nbRa%4a$!GB41gs^bj>EJ

cM{86ELA)sk%VBh>sr!q&AlWlNS`VDU(>m){Dc&J4Ltk_p`3N!r|HapbdSM;v@ zs_6Muq%i+0FGc4ON9fDh^XtnuWzVTAe=t$Aqb_Uua(S`7TodWb;W^ZswnD@>UR3Fx-yu)oE@bxs1=oQ`f_+iA{`f?bA|E2n}66l+wx`SOT=Pz1*~AZCE*NS?l-msEX4Q;p~Gw|Hk|e zq%D`CEtjF34MST#7-`F+2iKNo^dqSGE*&|jh5ZKA%aJ2DF}?e28GYj!U<)jC1;Ys=7)Kc}SLOD#h{1}Mov%>w%)QL9tv5zwwXte)Y; z_4GVr{Xjk5?q5tj9%kzCKiW@TJ$9_boquHGBrf+)AyC5 z9CV&cg~03IUj!KeE7ltyUvGS7(b}4`_B3BQI5Ww(clV4 z-|w6c>#+Hq^I^__|69(7|EKG}-#gqsdTygLraZcR^jyw=Wo~&?`{=pY;3`AjK6(Nl zN7_fv#Xefuj%FWCss8rSbFq(}$Tsy+?4u_r>A3Bq=U^W_;VAae&CWi0;^6ktHpKrV z`{=oBmrp#*-g&|x_R(|5KjE=sDO&gL-xx zf0%vr#DA}S^c?J?ncn{P(V*i|?V|_ApZ@2=|KseVfAqn(qyIKL`)J`fW?09tkN)1_ z_R({(kG7%(`{=pYN9(7^jx}g@_R+qDf$XC_A(VaeT+WuF(na>s6Sf|weYARbqRrJ;+R>l>_R*m7+qaMY-VyfEb3aXkN3)Nf z%XzO7k76G^7yD>eHnN0fFMCKY_R$k4bcB7htx46^-#&VR*+)+(wvV36dGEx5?4##m zA8j4NcDi7%jji)s&U<}V{CO|cii=0~(Rw+|K6)a-{7(&pk!|bEy za^B0Y1^Z}P#y;A$?7Lw0(fZ{-%|80{_aC?Z+wAP4Cm!2A`g;S}M>jkBXca#``{?ft zWFOt^?4zmW^u&LMeRMRme)?~-(|>Jf{p_QgoqaS3dHd*QXCJM+1KCG6JNsyokF<|& zcJ|Sv9cdqJ{(i)aC~nEwM;Eo^?4u_X?4##mA8kbn_R$l}KAJp-*+)0KQ)F`YvyU#W z4E?vLGH)L}A+nF2fHm=P+DFgj{CDCp?4##mA3bpZ`)K-q#QATree{I?Jo{*kD6)^9 zi+!|UbAv=6%jQ zx}{(q{fXd~wcb2h-sc@JU1YA>&-HQn1J==xU@Ln44B0sqTSs^7m*a3Ul^d4Mn=;}# zTx=dat6bI^gPBL~f)5lOX32jPbEV*yBP(ZMBgjh`&&@M177TtVD`~!DCOyu%5zoL1 z8vCov))|Sgihs^hy60vpjqEoge_~~w>$9F$N#4__ahO`!%u9t@GwY-o*yVi6=PM%{ zmeU{B$a$^cAGXuMFHbAVz0nMaluVcN2Gj)cJE!3988yI@rWwHujHvOcQU+Hb(`U-tg2-=*z-lK zs-6F`L92R3cnN0m9YdW(^-!~@UQAD5QAHlbGZyFj%;_3;hVKo2`7O$=8mbP_nFWEG z>Lom3(Ri_^9vXcIzx-^UbsUT88JJX)ADi3a{LY^G>+&a_5uQ1tpGEb;#S)6-PmEP4 z{=`L7W|P2d1-WvpRQ!w)l{arzJx(Qhc9K{?FxeyK&yVjG`0y{@YG5?~;sNZde~pR% zvHXjN9%*0QVx9s0+yV~sFaC*jyV$<^L-vdL7Z>cSFD&vezRG7X`|2e&&)8R=?Sh#U z@J+7B=3jik+xuY|Eo=x{t|-`76TDFIPl8|0?(-;_H?baSCe|PJd3&ES;D*UQfa{E` zhx;UqteFy9JcaqLQg!IzL&5Ta{m0Rt`wIEL8Q}-`bYMVyGX43F%+eX;OkiL=0}Ja# znl^b18=@bdh4qgIwRr}`hej6G518#U&~3LD?_gZ%=Pa_YzSa`W$9U+G7S>gRwk8Yf z3#`1nj8D1gy?Hrp01NBjmlHKjoq*d@L`?HeuxYUM3`9QF*R#M-;{UMsCGb&I*Z&Cy z$gsWO1}=rPri!*IQK&>jGGs#D-~>=ntQJduDphM0O$b;;(MeLD)3MfCYZq&){rj`F z)~{5s3YTlr7=;@wH34<jgPOj z>5tiQkpjU)WhMD%&tV5`FosRlu(Kh>#bP=G0B!6;F4}W?8^R34G@=vKMojNRPTF(8 zY*LDBY;j)2O z>?af?V4F2*U+lBedz-Kc|1mZ%EK0=UbS~V+;;A-p5zkK`^5$5RX`KR}@u4)2HWg&T z;k`6HCO9+C#xVK`K}jxxi&?f$_agG?7V&jS{@l1c&4EX^v3Mi~K$QwObsLMxs~g{v zTlWYN20f=7uG_N#zjaQ)8VPC4SEBf>b|f_aPFqR8kHCLt0L%!2At8$^6uC%4UfWPc z&{)(+czKs%=c)f$bKvJ~{{jra(V!o~<0bU8&fdmil>NXe$lrT9H^;SsJia9`nvz&$ z`$9zVJKz%L%EKW_*_o!!|JztRTr5)zO*5rD7PJnO*?=3ku{akET4)Ml?6q=k0SowZ zjInqCzF%Qa4KCs1#mt9bm&NT3KcX0kua$0~Cy5`8Is4-q&hq^t)A}3bH%l8&ZLV=b zsw-tk^^r$8q9~PnIPi4e9N$`Fu`$QD4j5@ff5T4Ul^t`e{@4t2U+iK2VseME_^dg; zO~&GxedhSq<33<4u7C_`MDJQeS06?^k)x|2V~pq{_>+8o0VPJfQ88Kan6^Pp11OA2 z7mw*+{tW<3G1mV80tv5iW+^1T1gv40(cFEp!8D^3Vb%z-o(bpiY5m|hzRz|XUyK`- zCd|6gBLUo#OTA8tsd24yh%>kTv19RBcy{v^yoi=!+7-Z>nGm$_A}7Hp_hpWSDCf2q zJrfB(a$fAIn2%_H@oE2!#r^q!< zVC$gau&^wqJ|25EFYgQmgH9g_=k6#J&v4 zLSW+8F)(~(GuuqT!fsFc2 zuut&P4wQYO3ibxPNV)9|{GOlAK5-M;<1NPBp5F6Y=l9+|5f=6dUe+P|1Z{7EeS+Ti zGqF!NFZ{{&32bh!>=UW|H#GK%l=$>tVV@W_(76<5XrBlR`vfC?ruK>Zmf;HQwNF&R zJ|SU{&XmeNQ3dMcCJFY5u&__4-YM)84(nu%j?H9YVV_VCUG@p$euzlV!al)EN@1S} z3;P6*au>5f=6d9>-&!@M3cn z>=WEZnh`{ZIiau!F;~awvQG$q8eAAO_6dGoPi>#5f_;L=6iboz2{254HWX!rfRdCGhkara^-pP^sDgch`;DN{sl80z=5kJO z*(cbGvlUIrPLRSrQ3d;i11^Pqq6+p2XPP>Hg=G6g73>q-HJyDz&Ml37q6+p2bhlF4 zC#qndpdVfKiC*|J^x8i0%REOEWn`ZS3;RSFSr!Pdd$3R3m)brN7WN5-lCgaP7@W#J z!46sUNKBga!Lm;{>-5?u!oofw*6FoRgoS;Aep2>{u&_^X`;_*Hu&_^1gLL+Zu&_^1 zlT`MJu&_@gj4SLD?s0{EViNDFuuoLMK4EvW?Gtbyn2m}6Vl1zH!f|0qv`=_o!am`K zDeV*RgAn!!=?9UeeWD8X337?Z#y(L6`vhDh-2Qg7u(;MfLH-fD514&|T_lu!q6+p2 z+M9Iti7MD9?7ef@C#qndpsyYKL^eJXy|zyr$}b1E3EOKTA-?`lemRl82Ui)FL9sMP zX2HW#@uB>3s5mF`s~^fQ=itbp{Bpg@FBjWgKsnYai*E|+!lC?fl&?*=572}8q5N{v z+w4$&IrsvwRqRlHIXt_w`vJYpi+t>d^2@JH_X`xNubwV2j_b^dk4-+S|~%lLbZek|kf)8}88@%JkKI$qjSiNb@l$*Q~q^3{$87Zox_fk@~?w~CdJ>o{rma- z{FBPR9v1o6Y0+u(uZKncb!wB4f4%C4L|nsDIr6Xb9tu38{Og2U+|!eP-6@di)sJ0> zSoJvt-p;?C>T%r8zitckl=;_XKz>60bs3P))RZUluj4H|>-_78$4|(=F5~f2=U03c>Kit>#iqnJO8?fhfk4zUB=@l=U>Y=j_oN?(MgH}& z9`di>mn#2ycmexXQ{N2ouiuv{|9V*DUk8X`oDuv}&A)Ch%A+5Lg?`M7^5kC+i~Q^O z!On{w7WvnyX^Q;o;jQ-WBtT_9-93&SId6|6@~`7*RODZ;LjHBp z+|Iv_H(KOhM*~m(^{~jlj;5ac>k1C?uPZoGKgP4O$iGf6u?S?yDF3=0f3L~EUWNSY zcw0`+zn&`o-tGU+@5?Utce_4WFY>R`l4N%JMiGCXBLBLGzjxvFk7qfIrC&z`tV`Rh}{KxmCvCCzU9>7eV+XBN2p;G%F!b z5Pt3oR4MD~p-NdN$0F;(@Snx_A|4olM{fpEpDg5iH5kbc`PRVsImiXdLaZQ<6p{BP z-iImn3c0vP2ki=F^AR6l$J->BKL*|Qc`g{(j{~rJBeL&8Uv&8#x7uP2neR+pUm5ZA`F6af8Tm5u zH#ByIe6N`Zr-!6OIK8Kyx2ryxX&q~(iKplK+|HrUX5&1JDEYODy&gi_Eee#u2~8I0 z_QcQsh4u^a^ILe|(#6k@&mew2KRJFrugCcL$M|U6@$;wfHwp3cY3p-a@ZO`DYwC07 z$(T>aKm9Bj_>THy1%h78$XuKSVVx5`pU>g*gY5A6jf_8**%g%0^V<=MMmq`wopZ0i zUFBn7Mn)63a08%hPhX$AOX0)K5+5k-U~2sF=*L0m$0ow(>uK#-hR=6s1KNSp`F8kx z>iXPA%OkVH=a;DP`TXSY`5U#PQTY4<6+WN8(YaEkP>{_?8BVFq=4c36Y~e#7rh?r# zuPgR7#)fI&eZ=&Fk?HscBmv%6T7VF9bVktp=fo4NiHLaEpSW|-G7C)UlYT9hC!&$5 z1$Z^J06Vd!7ohMtyOu{wcnj>V`6iW-QvJW}rDPTMvhX4xR25G>2LZxSy_IA0?wir3L00^v&YBNKk|EqNqCat@0=1pg6+2ThMwZr$sUj3!pgUt| z9C-pr^up7eYFn#wGb2+a;DwXL9H{+dEQyho2#&T6v5XW2Eh)$>aA;TXI63p!uk7&m zpW}lapO_f`9*TUa(zn`-j12i+4wh^RaY3_6R;Z5`k?)lVe7^|8wT7&bkeYl!iGS0M zd#7JvcA#HJgsd|{krC)Dz;VkUo}3YsCwq?oeEcq=-Qh+ZLbtO_^b}v?G;^rKkrE&c z2U5X7c&dO`S|6E_V=&DisX_yFSM=n2_;SjoV(DeyF4GZ~N z>5@msh@T9z7s2e#eO#wsA7I}P3WI(K2?K`Q0Jz@hb*A`*4ya*4Yi?Jp8~BkbcpVkbW)?u_8;;=hE<1RA zw?26Nj~=${o?7ZvD(7%sr5(JEt#Spg^G}V0#Jr0Y;1ZY^1+NcumeSuu`7v-BQDD4* zM<(_*f)>Z!W`c8>U1p>|pN`xqu%A5+4B${jery~57D4ko?!&3Zy~*k0j5~+FLU}N2 z7*7S!>s-)`VB!lfAy4=^W9)n=1DFyYnGqHK<%B2GFjX8(3XrJ4O${87u@889h+cn3 ze!w2knQ{2~pZGf&zAoffF`-=Acy&|6t3!TqR5>c9p~5!Bs|)!>gD3cdBOG7r56<<{ zOqarL$E)W%@#FfuYx{b26>!b zpRa;GPc1+kLZ3&RU@CpS3i>>?OR3MJ4;u-TK3@fWUOsq3pI7hQDfRiApwEl&^A!4g zSm^VKPu?DVo+dW#0O|9o^MR+==TpZcLnerN<0M?O(&xiMpQk1L*Xr}G_imxjyWYEX z`n>bvovhCTe|n|Qr_U#!MxRfOKmQH-{MDQ5&xeIRPjfm5`n=rRRQh~a=<~c;QlH0yT@mFveZC4h5Yb&W`h2>4^jdwM-@`va zeLgJodD;byJ|7nPJhcLjc=Y)y==1cw3ls4yPT{`z(yh-E=5gl)eLgJod1~&_=iQhp zLdV4*jy^9R$Dz-=&Q0m_RnX@dXli|)qlV?YUHZJ>abA5MPvlwZ^Y=9*>ho35=gZRS z^Xx{T(dRkIj_7SG?xdv0q0diBsn1tIpQqtQBrXIxIL&sRa8x4|Un^HtF2 z<$~;5<*DAv6ZClzFAu{(vOaIGF@-)~1%19OwLUL`zdibV<`3t+)90(29bo{y!7U6( z14+{7!$O}g%S@lYFSR}&7WzB`$yA@eFSR}&7WzDa8g{Vsd1sYgeclQ7PS)qcjjWr} ztd%|=7WzEzN@{&REcAJ5kw%{n3w@qiq|)cZLZ43N z=VH1JW=ke?=^m%HWi9VkuzFVu$_ddS+fa&wRJf+W9 zL7(USO0Ca}@a`miUW9kM^m#zdI3>P%8>4)E+2o)5Z_?*~nxxMkdY=dXlJ8~*N}o^t zzM5X2KlDC-=zads`#hz$Z~2RJh08>rKlDC-=zSi~=!f3t-TFLvhNRNx553PHdY{MB z{eRB;{A-IHVUUSFf9QQ) zrotOzsoD76L^F4(8Q!|DGFo&#g6AJH5Ilb+Rns%0=3!=CgJ}d?5IK(-jPZqXw@~a% z$a*DYZLPFcg(8)0rf);%?@_%TBXc3hP!Zy5KAvbsk9v>hU$Ta##rgi-?g;@ql4Whk zxA`NZ0Pdjp)Pher#%Ybl4;xHtUC7snzlXy0zDU%oG)`-+xtiATk>40Pl>R4&gUVt* zz&6|~$~+b~pp{X7JHD}79$7?9#RxPO++O8a`P|(&t)=DyyKyeH9aI!Qg94=Jvyc8K zuZa6J&`f2Y#+ng!pFuo8jtFBLWXBtGgcYq~1$yQ3dbZ$`kA_2C1d5reY=}iLQ4t@_ z?Gb-Zk;cK271gIF?H6hzTI)?;E1(>X$o4&0>HHGvhUW7&vx8UEpXclxjbzlH$U#Gs zJ3=K5MqLg5h+WSy`OfwX{m2-KUg5?(4#~eUk3;f*%NvMF15Unfj2-fA#n^r9lPF&49QKH68f+GC60&p)5O z#2gRDe?CkxSn_(v2yBU62lP_2Lwq<0qO#I*sChc=$JTWtJ?_$0QYABQ#x6zV6= zT7>SS+(Muu_ILa&^Ci&SgVq}WIqyl@Tg2~gpnnAgR4!pEAO)03U|$Bo`>y2gaGR!n zD?6LG-&;-5}zv?s=YZc?Y9cdF|Uq?L_`2&=HD&830>|1Jv$A)puF~m5ihO zS@b#F)yJs&0V4ota5Gw{4a0s_aN|)JF4m2hQ2K(fq_&coNuVPb_2;V&z$=p}@_d|C z+x%hF9MShcmnNh3SlK1Mj)}q;YVM)UEns+iIY40EF91@%I3N z3f!HKQWrpncU|X!dUH;`J3$K)e=eXoCF2|W|G!Gn@$ki>30;&!SQHP_L4teX5VwU+ z#$i;pgiijD!mJRfg`hN>$vMY64KO$b0C;pHV6(WvF+QpmCcSV|o`~shiPi9k*z#}k z2L!F**y;w!gA7H!xg>TH{}RF;-v+dJ>vV+wN}SjL#@gAjOIuerhM#%=ql0%nq`Ofv z+uDXrE#0HI9`l8`jNGJMVWu~APwWy#m1$rzHiJaZ={O5IrqcWxya=FDF*drAPnmjB zftU*Z?kf8`e;&a+Kc9#B5-(cN8xIrAGe#|qohUIh_BZ|@SS_=3{0;^=+zTw2Z;Wc> z;C&h`)(PgM!W@_=?HS{I3ru1@whSTCKYtH}j#6B_BS?(;BPC;`$@0jP_rzwRi5GA% z3WgXxAMyObLB#hYYE%Mmgzz)N%ST=2|B8Q>|8oCVXT=@^R4;@yn`zX~;-&M38uc&8 zKlnIetNAbN>!_t5LL@5MX4EcbjvVNCW)MCgew*>1>4jMB`LtoCyC#l5QayB!Z<4&a0kC905!>g!pc&!}Pt0jR~BKlo(4vJB>A?2|(OcQ-_J~^NL`ZWUN+K{a&z( zTwun~0cLbMau#i`22a2czO{gyLjncem%Fy*e8#J( z3X#=W*Hff`jWR5;{dw`I#7v|9Zr(b9gf8r?xyA0HFf)EV^`cXdU>piEX`77tKe}KA zc}BpSk-W$xEI!JHF9u~Sjtj2VpC>nJsTX|BC3cTsKFwjWTC7Q8wUmge=1jYh4OXET z{mfL#ctrmb%!}P2nR{#jK7iTQVhK6y9~!i_1RHlv4B@iqBQBB8pStj=z&LG<-}vFO zVDnO}t((7ZqjN2%>>l_Zrbb*!akp={HSki{7+ zM-3+LRBbh1c0oH@4Jxiy$i!1YLmBwb{UgpEx5l;_xpXT5-z|lL$BT0fb85GBuDrA6(bMSc`3;0t6p#5~L&#bqbP^#?{*I#(Ilh=xSqkDXno{YW*d&s%)*67`0UE;f zf+O;x^Yf6602v9UL83J5;l~U-VO)o71lT#gUht+x2aB5^_loWC2o}#A^Ai>-f|le$ zPg2wB9~;YmRERBjRiGN}VFj4W(3xUu-5u~PYL7u)AA^n}VHvOWDojRh|4inAraBoNPP9G>DwK$ zUNe0kp=aP&i0dX6*TvL7{<7+hcyBDcSbf2`X6E)tYm-PCgcT*L)lB7UUaY@v4@KivT*aXZMi3Cbi6Tl_R_c|^Q`IqtK%f*fC{5CWF z7d!b0HTD(c1)RK1XJ0v-^_wL7ip)>A#kQ~5`3Xm*GqHTn$xoPQVsY{lrnR!P_h@CI z7DXs|kga+zz+=ws8z;dRz7vrbangw*b*bW9Zl>SFrSRN(FUVY!T zw@@de{x&qQJ04j?J*B~ghI9rO#uM~tshMuK&ZWk%xZqY(!Q=Yq3)|vCbLZOuO}pke zyVD>ZLYiEBY=5BcZ2MS&KGNQTPd*;)aO%hg7rG0o_AYzN=!Er&>oVC}0EO%=U9{5q z<7gZ*xOA}A2NhWuT@8hre=#j)>3p<@hHbZZ*;}^b28I8! zw6_4Tw71|BZ@f|87ktuQdOva0!r*cOZE!4(pKbe4lD%akD-NuTC)!(112LG^7Bez~ zl<{4#H;xt3ay$CSVtcM+iH^Nx$APl9yr0hA@)JIODF1C5drJ;DEA2gtjakaxQlJi5 z*juoX=hIm!gA4El2A7j z4fYn5Z-H%(5`Qk>In^ZM8{1o!vT37?Y5AfY!lLZ$EfWEwM|+FRq1Y0e!y{tLXYmJV zZ=nj~gg|U>8OFb`y#;8IWN&#zZ*N(r>@ClH$GNelc)=6u95xjxeApy`kG!`=eLp@F z!2_7*P3?+(opHrBxKLaCH=Q~V(eVGWXw-^DNEFwa+X@R!%vl;zK-(?1`nHp%8Y z!9{aCR1hF>i#wIS2i1MR9|XH)Hct(}l#lVk3j!YOE<2dF!|w7Ad{FmfCQf^iIOhVB zfGEQYzB#{(3@^XIXiC5s^&=&Nq$%_0le=PM4Do`7roV5!!*R+|qJ+&yPoJL^bNa%Nr=* zxRJHycDs`cQR6pJM>-A($ssF~x5}u0#sx0O(*h11Bblm$R}!o7R^}d9V0C;5jS-*G z+hVRGTa4>Qm28i}DAFE-Pc&SzK?XmtLFNQ$kl{Jqh&wdc$I$-xPg-Q6*e=H+Lye63 zMfgfK>_<2x%rXQ}m}O{8`{LDBbD0aKG`&z$VV6NNiwYXhz<=%^ff01uY^#B8!84+P zgkgq=D?Wt!#q;TZiO;ZIQ>_+`B z1S-kJo}nhzKj!B@D&$Y?vLW`N0#Js|lv3W^1z%6Y&O^o*p|7yih!x)mu_$+OCNoM? zot10n>Vv8s(J_)oj^}UeSv;3!7LU0mu4eI|TmilrCcg!@MB*1dPF}_|zFfrT6Q;$% zvnuGI#n8g4fJ3y|J>4K=-)X!EoZC-R4neGj0J(-pw%O1|!Ds`~j@!x0yf9(3p}dkd zy$E{^CNYG$5t}y1U}OId)#I!#N_{OXHjwX$78~>p91Hp0B;`9zP04p&chB}3ti`t1 zoGR@#koC%5gF(n%16i-^HL*p!CS?D@&E7WIph6IxrERlucDLpNduLhDxk%Y9=rFc> zUlk2wbEMe@GbQ#!c_?Y9EX+2nuiE@66MM}z*lRX>>@~-3T)PpfklQCl~GjZGW$(l2(S#E7~Xe z+sCm`j?ce$Bc9qTI*J?cb*$zqqJh8toFX(4V7MWE3#iWL6ve-=aXs}TVCx!0`%&DI z;qZNB-3kdui1$Go*T(y7Tt}0r=x9HkfyZhJ#W&KbLKPg`x0wK~2lg0gUolHwsXis? z_drMc$+)I&qmk#AiuIu7yuZ;y>tr+F?N zgfN$kqGquTgsLMMU+n#mJ}S@9mcd6wY#nL1*1{zsLIUD;L+6D45KTQ8ObS$W3CCd4 zm;31)R37IEyB$MzG{tgVO zCg^X!ZCmUJ4CU=_f*0Y{uMn?(qlxR#9;Y>BP`O!eceO1>{o8zWLN*xnr+Y?^jiW!; zOI{kS7|qs;*-SaGUW`Up2VX~F<*^#@6?PoCxBZ-9FjEv%a}}!g>xOLxH{6B>_#2#X z%e_Ltg2{bW&>QWFY3+`KAua+~-U6I^?(X)pVUK_za(lHw&)&k$BKGv-!JLoF#ROf7vb77|!)9R)n7G0Uy7a z*|CEJ{4}7DAU=dJAf9J$BAqyI)Y&$aLNUogI+K_b(~X2sw-*xX*1*97(*>^5#0G6# z2jR(g6Cw&oti+>bYD@BgnZxhtlo~wGPj2O{nX+*$e`aakezv$9 zd}HG}T)^Oa!SjYHhsG<~&jpU3O(5)h!8se((@&V^x$URKPolpns3GkPzEPKgqudb0 zogkk!iQ2cH%!8aMn?T65pF(o1<_mTwF(|${QGSE*$T#A1v?~N6KHLTdNf#fe{^&!} z|77%J9U0@4fOX@GQ}7jXSM#dWfa8(|v?s*_=EYC9A;&*&f1&|hqxW%-?s9VQ+)s7& z74mHV2H1s|2fkLL=Yfz}IMVr7#g1gY3HjvkKcjxLO&QE)zV0RTx%e|BkMOrcCe?57 z^qu1A>u+DME%p>~L$_}N)3b+5H87W=%fsBgS_yE4hF{fuOHwL0C28Y|Q^r2#ISL{- z>WMFK(*%zGzWu#T>@i}1ZVp11BAYnDK^8CvAqNjS1i_bJ%->16y_r4_ly$|Fm{R4=7o6))8HPTz9o@}+ANbNRx*p`rTIT$2Z8n=5VKzpfMc2e|-}%(SY}|ah>09o0ZnE1G?W4ys z)uS9ex~uz{MqpXI*fh$QVaNd(QUd9mjFG8Ng#Ej_CL%6E`ge0qn6MNlSD0^v6ta1GddaT?92-; z`Rw3V3+exZJ2!`-N8LUazpZ)Cyk_ZKqUoJ$L(xI~U|z_55&akWPdMifzE{d3$KQ>j zKGFIpHj{zu+-$A=Jnk5``?|REtD^IIGk3dr$5LvxrZfCj?lm8G{4W1T{xi?HuejNV zH`;UlU`G0`I(Jx(KazK+uf7C;Mmc6Q;VyKPKXmT7Y(N@?2Rr{VX%&yiJ!$S+J7!qUjYs9= z_@5#Cc#%Fni}mM(qJ6)KpR9e2?~f?ncTLk(R{!e)xh;MxaPJ=Tj@`7(>XT?&gVCFF zttM*KBwFP*=eGH+ynC^Cun{cn6Mv3IHJkgcn=lN3iFZ#}kB|0j&;5#=E#I+$1U8?^PVZw@v$5grGD`Q{zn zuVGH}VG62fT0%SqqGkMCIEy$h6!+q7%e0o6YvPeHKMMJp=y`hQ8Z)=WEZJuoWx)H; zkMr=M6){6bZ5SY6t!j#|fK+ZW!`)2=xC4Dx)?_}@ck1Rm`hU~vGIwqXS_tU>pkL)R z9psS~I$2y(L($KF%QFGkRVb)wO{YI{d~L`FYH2cezG3FVZNH;3dSxvJpWG5MCT}(C zR#fB4g27k9PTUlT_$qykv0*%Vc@yqnp99?B$;*R{d-?$7XWW38Bj|JZ!G|9vM+W`8 zGIt%iJOi%{*9Q0_U%7h^#)S>gY<$148m>x#CcKptziRIMC_V`OR~U=_-1!kvukqB! z!IE9Z{Y%Y~wFYvOSaB%)>x?^#5MYJO*iH0f?PvIpK$Aam&fOtjvst&JdbkVh&iGO4 z02KV4v~=UCoxze18GaYw2d#~O8Z+)(Kg5Rrp;7x9{}I3e5EkwlU5)x6fu>k7j-BW0 ze~ykFiwL2}Ok-zZ^|8+A!JQw45Li1RMgVDlobmnqi*aY8J(BU%vLK3|)jokQLe@S4 zQ5n63UX(&$2n6;77ucPllCG+gVqr8^i-SGJ1)rK2cYaO5Z)W&@{vyy6jGi}$AE^-H z2H^10a}MIe_z|{#hd~aJAhCOm4D$WKv|9|azy%VHg)WfLa6oTfc<_Y7 z6kp)(ljt-Ayq_s}hi3&(%1l-R32iJ-O)aB$=7>_9E%p02(6p#pVI zrl7=LU6%+dq(Du|6qH!tXA?o?Do~R%1tqrq4RXD7Bg51D1tWu*DJZePNFu0jC{R-~ z1tk_(nh2^;fw~}5P-21q!b^o`fq&&Mc!8H>3QElCi9}F$D^RmD1%+2Du-C69f|{s6 zU70B;vA`n}LH!eUZOIAeWC}{0;0o^P!uDS&P}gP(O3doEL{OJ2P}gM&O3doaL{LX4 zP;)Z{C1%x$i;o8xTKEe_h6R~|5-0djBB+H5)NPr95_ok%BB(PQP?0;uEyk4MCj<7L zmk8}`nC1jNMDEH0nwZS6)0$=>t#AO0c|TRavmyJ%3lx_ zL>|imnmC2~6QNZrXpd(BP3+s`L}(`}XurtXG%>d~(8B}mY5oEja>ueZ0nOGR74L-x86V_a zt)VqS4I996{o4{;kTgf=W>CedzfO~@v_1}6J7eGYkm8QYn#hr)96ELk+AX3~j)-5c zzJ>jvwqf2ZYEb)XHT)AXneg)5;)Y;&&uHWR2J#Tip+phE+-7N7h#j+y_+ zO2xJ9FKj~$TKk*~FI^K~gl)pH82&RSo!tuXULg~Vun*GPK1_sv)(zi`u!z9%N5i&p z)W*N$iy>|?WH5cASrp0NMj z?jfUtH*Gr#qZwx8tELItQeAuX*VNIm{tsh#Q!p}Z9FkxJBQr~ptAflhzDIyK3KX0bd;7_JwrAP+;GY2;1iJ5W2ol!UlAT5^=Vw4NCL{1lF!Gfm;Kj>? z7nezUs`x%oghOcwA`A)p4FlV0 zq-IXY%4i9{q9ynvlZ$8ufubT<%T-U=*Q=!KQuhWq3LzRtMHo3OSvYnwrIXmghWS+?M&Xz)%!T&-PPtEu@eM(BojB zIT#7i`GKJM{L)Z#z}m^H*O7EHAKWF5t^5`&|KpK zoH0OH3m3QsSh5J4QFUI(x~f5q<7~;Zl|64sC~_6HD;k3j|%i^NiC;;gEI3I5TofDcCI^8b3>Rz8#XQOnNC|dWw{T%aoO3@<1e7$8_hks6PCp zSIp)z6SKkmapUPU!wbxu>Kkb@iW?MrfIU7Kxd>AgEUn3m9J$?$RN)IGk2w-@upG03 zkKl#)rxib7tksdc-&uKh(knCZ5}YdrH}PsDH=(K@9a;Qwngh)Qv>z$E+PzP+t4u!C z$Ss$+_UNDI^{`%AXDVG9;J+q2l&In_b2Sga4jc-Mz7czu}J zY_*8l&LU>ZMJ#hI!onz#@FI-jUdsY!Es&PZd5_YrC1h32#X1%+9EJ$YbPjESXB`W2 z#3P$n3%$=^Js8Tn9(-Z1XMtMJ0%tu7-0P{t>(e;|kFY#s;VQSXbN&?l=Fe)2qmpF# zE9g6Kxj55VZM^Yy-9|0T9|@44oveoj;d-q-KBp*J*|{^Q8^5yd?P|Z>12U7wcuCuX z@+JcD>e}Z$Ag2BHychW!LD;w=3|GmVaLPhJ0WNr7=P8eBZlukw#zAX&=iWy$Zrs$_ zmT6;}#-rNC#Fj`$*fp`zdM9S!`as-LeM=c6W242_d>;{w@pVINMpEn8t@8fir~>Sl zFny`!4o2F8QXRN`VV3Q;HD(9DLEGND0feexMdh!=PgSVH$bNT)4%y7`!j>G_^EA6B zqdKr|T2EcuQgv-3ggvsSt_`WWHc;1fleH5joF;8=W#`;>oko^?UUM6=+yBxm+ZSZn ze)EgE`KbHftk}`pImH$3cdq+CzH{CGfAJr6|Nj@wJ>5;?|MdNTn(O|*HM9Fad^rBH zkres)ci#8DM(gK@i1iJ(*9Wh-?kz5T23|yFbA#hW z6zPw2U1p@T5dTQ?*sSi&J+~i~u6>&Mj7~Qnq7>mT%>pPgA2VNVMk)&FN>$QSRlp8P zC&RCm@9{84phmqJ=}$jLO2^SZ@|W(-tWT1C3i4Fhr*=U_s{mBAhciE}TP1DP$3q$* zu?p_IR@rd+;&S@Jcp6%Gd?6$aW^kAoVY)p6vt?-yNR`24b-1g$dK|-z045E0p&V}B zBOZ`^%Xc_ES-`qCQ-dV}OL?7a7o+tg?vGfB1*642bNpnu|G<~672f+;$;{!r0DC{M zQ{`%>oOK`vT=!n7X);0{+E?)rSLqi}7?Hwa)|>i<2kdEJna}oX>3k z%QW~|7g85-hiZ*AF+t zt*}76K8x;xZFCn8w3Ql9BNPWS#znXE68cBB!A>|c7XJIX{VthYP<@=-Z;VI#UE1y4 z7`5RThEekcK2_cwah?h517+Cj8}A>-n2D0>CeCx(=+e7JW9qQ#x>n>_3zRX}S_J%* z{9tyv{bqX``0Kc}4ioMyih&2uY%qqF72v-@{5M)y;ymfP1po0PUzfCx?{FJN$ZvM= zTW=CjgE%{}FxwD11Mt(^hJul)1vFdhJm~XNfsXWXI6i`!=wl&1juIb7;Uo5sz8#H^ z-d@0$723~8p|^u*(b@GR5tZP?)^W0s`7VwRIJOZtdePR11EjYi+*s9PmMLsmxpCHu|w)sjkGU)T8AT3O*vMm(7AwLwI zgFtwwxGb^Wr=`60u6Dz1!y8Gs4}{&Uv!GMgMZkVH6uqiNw%@EBLbkU}e3;TAef!9H zgag6I#rOv{z6%S27O*069yXf3#Xt1zaC|!)-x6lvTl_=c7UJ7Nd`n1zZ}AU(I||>9 z!nZgH`WFAtx1;gxXnc!9p>OdIeLD`{j#C>uzOrrJvEU}QoiIt~4A{SPuJCULXGmur za-Xie?9PczqR3w*1#JLn4DQ@uoP4vj|s~eP;mA~L zCt3TAsjJJ2T_Kvt*HZ*cSWPx@COh00kRZ5hwTb&eWL8_~|QqE_OUyuh6 z1Rj|_odhYvd=~(_VO0mTv^NLJfxp^+SARUN<~|1vJ||uXdw=C>nqu87OqOm4!Q2k> zie+Z*wjd1k!-KgSL*u{Mw$MlIVjtkigce5j-f6T?Y_XH8>U6k_^HNIF@tO!u{ewnj zYm)qkFDZ0{5`V${358wvEi&I5ASc|iP5MW$Q+iv|t$(=t=ET>T3rU>EvA7gBBgM~? z=HtdE6KObImrHErJ)Cx$&}pw}Ol^gcRvqBIFkOQ!fVG!{58(FMT=h+H`|JuL3HQlw zNn~QIc@js&R{=iZeG+SaHZ~pB$V)ffo#ZfbX7OvW7;)dHtF7O7`Ygie@*KvZ(yQqo z9^(VTB3u zR_qdF>a_QV_>X;G$ybd!$DobU2cQ1lr>_s*xmhDE6ZFBSxh+mH)oVZ&`rr_T^WUZq z9_i?VD3t^31Zrw^LPg%#r#B0wmk-1!_FOI_LfN4U1 zY%IBP&%BY?QBoI?rN4rf?`TghZ84puDDPkC_m}iTTOY>&*x%AU^2h|1x;FR{d6+Ks zP{L1G4{k8e+ zgRKrz?#ydHK>A@B15MHo#{ho%OEeU{0-Ei?)(_ubPqR$J$N#hR!)5EV8=gu(+@|d! z^*xt<*pNwkmwq@~-~K;UKm661`>h{R3abPi(Zip!)ejwbN=Nj<8~tysAJW4pyhF3r z52@5%8XfVMNjl=gDRso>gM-s^0Hq^dW8Yulg3xRI5UF#ZA6ldz<_Z1qb4ow_n$!;~ zqvt$K3Su;`K81$(kNwsV2mUhM9Uo$~iRD+~ef~h{hg7J@xqLYnvoz|V3xAX5(}R9E z!bYd8^g}9?lB^?=tsz-QtglFiHR*N4t61M={V=ls>fvOm9_HEV;b-DStnEef9u8XN zqX~@?6~vtVRuEVJA|3LiQ4slkE7ke2z1e+*CzHbvz7xP5xF#P(J79e1G_5g)*<6v2 zQ^*k}iBRO`&MDT6iKB{FkZtMy#z|IaV&SCbz{DbIL?80|z_Z&J)%V^r3UVeHLjw~F zUWlxIgwN!B zgKb7;3${SJ&BA(nOLXuZjl$9%9sDqVnpWVf+?qd*mb(MX#g(zSVhjz}TrpfO^nZ&H zOh2@ukPZG7CO%$*u2)kde4cAIe|r&q#{U^ZzfH5n`by;tJ9oF~)@L?{ALO1GFZ^?S zaxIP@xZK){y#FWJ8^g^7vtrxVz(+vdk5j&Hbeg$v$Zal=6Pp!lKo4avz%QM@#W%`I zaPJ-Yj9-F3Ifh4<@v75|9&dQTc3#Uc(wKMgPJ?q}XMI{->{JZlUZEJz#eb5G`DSDq zu(#2ST#SEUiAK#KYihoYykF}K<-RL0JrubHf4py>!%{dMr^U18DUt7-Kqq%z z-znDp;&1Ca{P!gMPPkWw-|62;_?`d8@AR)6Mc|`jK$QBly&mZwYrRIoxcMb<)Vn6a zik>H*C(7HJ`hyVr3By)rWJbTjx>u`9z}Qz6<5A<4kPqkcGWqg{Zyh-*rxaCdeA~mV zdGJ2&UsyL|WRX#K3xcK~YF5QY(g#Fj;BzqYe1FDEIPKMSSD#4mq*B{CAP=)ocSm1^ zx@a&j23E!X0(WTvO1x^$?ey;moaHMpY9Hob0;@u~`|yG_+KkR}so z{ulud4pwyjdK0xzWx(Unt>xm~hOHW%moxA*`UO@kA7DG-F5Z6>`NvID~o z`6}BS;h3X^^+1}VQ<1 z`2K+)gK%p&e$CA*K{7x9tXrx^DD_|777qhuBa%&$vVfM$+unMtpp56q~zbw5% zX3L9t^yos^g9Kyw+dni+@fA1PY@T;6uuDwceyIlL$e0iOVB0#u%nt)@=34ltZpL9n z^F~v@xaD5>Z;Ldj1z%haA*noBq1ImLIcZVL74Q}xgZ;FF-(2h5`*+tW<}>Yxbw($)IW(+$DR;e#d#b)XRCG`h5GWKo?okN zuh72i_ZqZM;oMvHK)S0qEz5b2a^0VrMtAfX|O7I@f7p3?Tl}&PWKi zk`>jnfw>(NGleQKxW!<72rRnwTxQw6HQ^PwzJzem37uPH)P7mqCOQx+b>)eK=x^cu zVngSV$YGWq|AN*(u_GP0=JXRhrGu_HcxynWKMCLjWG7Ca?l(wRE}k-kL%+ftzVvj& z+E~J)KwcdRl+O|3o>Ij+4pF#2U7PYPBlvSQm#@T5A{g9p=K`nkE$_UO{o|7)j$ocE7a{Dy zs2wRtdZqFu=$sNAGm6xhP;_B~kbm8{Ky)r|)LgHilZ?IWA3}{G_ZW=+Hd{5)Q1FIe zq%wy{B62>)8*~a>WsU;*6yUiu6fIvFid--}h?i61TvjvXgFqFY4}q|Ly2qqBC(?^B zVd0lInP;1B?XK1OBQyFI4!me(@eYtoU#U>O;kT;$7W(U|`xec+6ezILecx%D_Zj+1 zYz^*RjjRTxSqi6<7%_e_Nrt&Ybo~4b?3N=Bg_U9}W$2X@mA;up@kh zS>E}*RT{Eb9;sXzUXg260v9gA*(^097j*i4p`+lWNN3eZbPC!WEH5^~VF3p{zKx(J zZFTHkaj|jQUBMTiw1<~OlyAMFo2^S>zV>kqQPQ3zaH?yg8lqfI_Zb~M!U>K{GQFV3 z?eA+Y^^zX1)Y9V;7d?)7L3`@au`kCw^f-ep1-+!lXk`OvvM_-rGayLJSP#lgjy~5H6(xSzMX$X zOlajw`gFjFdXy(*5Tq)l#em@%5cRK)S492gr!ppLK4Bv2y63gWtBCsf6*@A>f~ZO0 zI>b6>WlEx!$CX6e-~Ov^5_Ilff!m+Kr{x8NGeY3r^ULgL`yNY2+qOTMj=p;@Zx4_6 zOy8Ny+ZoSl5gFy1m_%8>8i?eDcGqe%1@FX*VFxAOPA#*`$QB!8<~b)zTK=0^?M_UcajtsiAa zo8P)kN1Hv#-`?Mc`)odt^cZ+bd+O1#?dv`Cc;$=xMURQPZkG4qrr*-&2b~_j>dSy0 z_YGF`_*>*UP0z=%q7?S0^(fe>>7(dz=yN&@?=3w(_m|A*@h$CbJeeM^V7M8`%J+Vd z9X-DHt%F04H*GkO^!TS=Yfn8o_PjSe^!WO7`$dnX`zIg2#Irr<^!Q5O4CwLt0g4_+ zJd`~>PI*FmGKwDWSo}%Q;}@RIj2arJgqbJj28NXQPCZP~*IBB)7QokWk1F42viOphlp+zjO76W`8`9-p}G;Lzh4s}H1ntbRy) z>d~qbwe$HN$I2K0FMqU`AL?yC+CJsys7A1N*py}Yl^K&`>_rV04l#v48KSj|?3 zUen{%`$vy&{NUe0KHjh`19}|tFGY_pd^>x3eD8kk$tZgK>?1mg=q)|I{L9Sf@uMeo zqbJj26~oPd9(UiG9X;;;T2J(7=UYWMjjG?3GMuIw;WRs{uYzT66NMCXa5yk>F)o!6 zc=tE@R)<$3oCXb_A>Wp|>S2hfIYqeDZi2UU!AErZBBrLHPILNAaJt&0;)Xe(W(o~# z_kNY>9Tdj_vY2jkunI~*Pdf&P=OIEaIjUw;Ok@fn=m^_%N68$)@I_)@WH!wAt&2~j zX*dBg97iH%uZdLIWHnMy-!y_2L~;X)v_J*D$S_JrMsD2$1H%g0;~i0p975fM9UDd- z@572XY>gLbwZOyIm0*Bo!i!l#<=5g*iOEiQ;X}2f*VpQHl#tFFHL~w#8YD$M8pC!x z4~LAxT-V<_0tOt>$6!i!q*&)4enGI(od-`mwnI3jJAGC^p&LJ$NT%`_X^2EX6^^Ta zy;(yfDaxPy^>Pi7xXKN3egm6cQsf38GY_2dAKN2kQK~3wj`*aY_E-FO^%G&FtiN+8 zo$I`v_!KAqs)&ijuy4q0I(7_y7sc?a6vIw(Pvl2Hehnum-tp_L`L2eCQc!%|^Fq4G zJNW}_Bfxzx)p`(RjmQyX)xH2JIYq>))%*ggf+K7}7x}sh4v-u)BSKye*Urg!;brn= z=MrxFLe_TL=PsTJ7>?IdMx+ebRd$gNLC?SxtbiM{D zUsCx}6V4lK`E?F?0CSc(8xomw2r+PzA^~vc1`c-ID1#l5^AtSV73|m+ZpkaNs9}JD z9cPMQ$Bkgj^Z%jP$VrPdY~&@Y@^#St#`Bz<4$PY`077rHdGnW+68@**1ser#ra6~! zBz!f>2L(1#jN^A-V@WY>W9(J_P|n}pGl~D0ijGLOffyz0s+M3hP}EKJyDWq*lq@x( zCv%(1jmp`L>F2ye9zTS}5|NMr5&yW+Veh7lMFii~u=kA||M&`!k3eA#XP3Wj)IKHu z22CRZH{|O|h);y1k@1NfAGy&E+Kl_%Gp2Y|+!zcu zfnSphqa=F#)=s?Ip2D zAp|~rR5u3~FOh*QH}W`XgqxU+;3Hi(>G(+UW^~Qe2)CEq=%?xhP<(ax?*&kSY}S)9 z`VkSl_8q|`YLLdjVR{2C4R@r##bclLh?+0hriD~YePu62%}N$EPIiU=y-PPIkC{n>XF zL9e-4L(t1{qp>a`!Ghq_=li;%=qH2AZmojJ~f7qu&r)EQHC1 z_;8As$DNvr%22$#(;TWmUymw4x$HKun21!q91aYuYAdlt6B^!D2sU@V4#DC~ z!xn6J!cZ*c=kks&(?hwme!hsaLS;9Dw^tBoiuZm64q zD|_8w%Bm((5mXxGd%1q%ZB>=VRFq4vY(tK@__bE$a{38;bOiBHGSX1p(8uwah6*;m zdwR&Xr}KMHBNG;8O9m94pkqK0z5B^&7B|3pG6Kx>T4&tA-gtebF>MbF9V_xe)@~=Y z1XZ0v&el@cIFM0=FNd56V<}$_`w?aL!y*d67BI*jo{F^%vw^Ji1pK;I7y(c&9#y_1 zeu`@fHXFx<(n$vr=6p;!w7X#GBSz8M?Q8duSo|Ka^nkDH?DFOFX2rG;0~RV3ZzUC4 z!@-zl$hS*wk{qsk4Q~|kQ;3Z^N?4lKP&d{F-WGei2Y`)Q%MCZMH)QRiWFe7@mY5~y z=Nr*SxozcMI#EjJf(+q`*X!dRg zfKNg;#xHli4DDS)T0`u6$b3eJ#@SF}VeuDMA$N_YmvYxqqL=H?iW_2I0x+|A8CeWN zM&M&y96C1{IX0p`cw;)gj*O_w2&K_sv8%(^({_OPd?`M}z9JL0#8YSw??#B>gMG5P z1##gnDvw}AJ3XR53?!!$l<5+YpP?VjVw2>aV=z0NTj%}v_;OMco3qd5dzY{zIT^+y zNH<&`kt5_bl!`(4J?c+4!RCibY15orC(#e;J+e2=fE zwg`nZg|hYFc^dsmP+*ko9(27#T5ta1XobXE%|Eo*Jx8R z%tBdvwzz{*f{%wb&=o-l{K^~Bp%M-YOZy1_;D9~ZDk+VVv*};?Jup>+8upxB2IrNr z-;4X_N|Rzf>HlswOI|bTh#}K>YKKstNZ2cowoN26svg0kyNd_LL#hMrvrsokCC5&w z{E=F_+e+qGn|W|7j7o{`Hp7$ha|0#YjM^9F_pImh_Q$TqjA<6aDuBu}|1e9|8`1Bg zCB~sdmIln$CA_;#r1P z#!-Hud?giEDxeR3N*v0RLkDY5w0z)o9@|C0_nymm;mR-rTLtNH`H9IWq7x>sS7@~Z zfz0ViE7i@j_S-sQ?9o6m7E5#Pr{nI{u`B;yn5$4?U+k6B>B8^pCO|0e1%ak~l>g8>seu z>K-P+6z@|5ae$k|yA-P5xZb5QGhE_bs(43uS2sO5OE2=D$+9PJBWy9Le0mB8A6*h$ItDKY|dSE?~122Eq^dQ!gns zeR%Vs44~q{XJz+mEO}EJ29Xm#zxdTq$+j2hanuNGcRL{sL^?6XZ)6xV?qBL7{H6qB zGmv1+#p_{ZNW<$deO>YT0bkc3xt&z(WLJlENZgoSI3!cWHFszbY`HrfSU5D8uAhnd z!5}M@a5#=>EZtpJkVKoXUOTektf+1V$t1BjtZlDI;@q!jNFv3}@?5`$B$lVTPeMk# z*`rC5?~_KY;In}Zbf@eH`9Krv=)F69tKrRT?$Cq*)%6&e0+ zDEA|yS)=bmq<$nc3-v|6UkO?Q<1f#r4#JBd@oIt0W(?G00i~xk#{$~^m`1F)r{kuv z0%yj74Y44m9wPIEdlkz38H#+pFjTU+3W+hwHU&>!9t`j4uKuP|_ad;icn6;9=3Qgw z<2TCJig$f+g+~DuWgx|au$@p;HrKqXZ3tRC*u3v!4>qyoF!m5I6O}O5R+j96z2RM1 ze8{!wxN(x{68yphzYv2(=Cy^atuPt(JSJ)_f^V$AdL`fZFm?(n&GLX*#C@eriMT;m zXowki0c6a3LH>E_eY76kq^|B zIoH-vjoL8Z-H>g#N1jqQgV+hF`~=A#UYX}YYvhrI$Wpu{z_wJgypg%F zKL~+FNt_>Esfc&lS2eUq>CLIb^{x&hGU+hE)!`qP>qbaMtv zrJ#J^t$Biw^XTr0gwVTiE6Af;K^}U^8#XIgA*9yzB!y=G$Gn86Q04#lGY$RXn&C_V z_v}3R6uK!kOOPD-KIV-g-$&#rzk$}7OuIw*YnxU_$&NPDbSU%%{LsVO<0hL-H^sIH zGNoDo=I7s&Lf$$AM*h6Eq|^`?-pd7zaUDStAhu#i`u#*| zairZZf1;rlNHd38FqkA5QcOGIbQvXS$JF8%$WAh^n&|-&LtY|Ge#7t4HyC9I*!((H zc6W`8;xQgp;akI;f+obwqBhqaGCEzC=SVwp4r2)xp$uNXGuPH)*iH*^TMp z&>&Js6H%WOQb*+6&9s#AE{dIg7Hl*p_Ksi-PM^na)6F1ROr5BsR{>Sxf29WhQ(QZr zJVS&3%_;ET<4`YA1^6%OQuv9Nxm-0<)uq7G2i2vh+s=0^NGVY{8joh={z`I7Jy$R{ zpTrDOAY$i}4{FdJJ;enW&$Yr4lTdzB{HFq{?Hu19E{<>_L`p8!T3^7hIebjd7`jejV_=1HX3zvas4Hnuli=VQBOU zL1y;rmnw9>`yvgx+tT4zt`1+;c1T9|*bN$F>)9$v<#-&%{ScE*8f4$(f1a@2b)o|8 zo!(FBZd)nX{^>eGb+i4ar)bbV1>1l6bPd|O+~X7K&9Tis`HEIb`c{9|w-7}lbu22C zVG&t`NXNRAuVtiTIl&hW)r@mdO%JYUb!GBa7Tbo6CZ~BpFK(r13fwi?+%$9Z5A-yX zs2Ca4IYzHx1U-(7=rn1-v{fX$kVi_9v4_bA)=Zmjq-eCsCzWsSrhv5>F56~!cXz-D zY<6j7S`BgD?U)41zI47*bcL#YQBl>H3o@Xp3tb%!(|54V3QWGox%#~f-8HQ>GzIEi zcAbVAn={jpCMZ*vLtBS2m8Yak$9}RY76C;{$AlEt5F_n1E44M`yVvX1LZ%jJ4LQ0( zL!T+c($Qbk(5K59a=_>lHwbA1*+2U9+w}QkWC@Z)%h`xqMRu zo~9n^w1wNh5p}-voTAPLP&G0=(J=FhPWZE{!&UkY9_n1^>UXNPU$U(H%hfuJ?mcy0 z^$mi%f7E$nb-KBwrp^zqP1hbM!nHC__wtScgj_$lAKu@=a8|{BK%TyEjpN#}c45Kf`pG{=dt%HfofTF6@9HzejdZn(=9-GS5{Jyze=*byur5yl%#Ht&rnZ29PcNVNY)&;LmU?uv|~|IId!gL zxZ+tQfKt71z5@W^8aIBDsGqnhlH+S3OJ)V_RHd~iZo*%Ww^X>5O*duyD?4%9!=>B< zfSLCU_4PlGiw`Qny}{}O4ILu%NE#T`N}AHW;;M$Q@6f-g9F9wL*2J>dbjT3u~Yat$T{UEnih$ z+>O7hVFFE2lezkHyg+Pjd>U;D8W*>t`MfpsS17WuAr3DSRY2LED=FhRS+Z(JR|qU}ILDlNyZfabf- z*OI$>YpSulIl5M zr&UlGA>re&YobkHf4^KiFNOP6XK8Rhg^FHvyjBTt*Ju8}T(8;l9_04)=hsqKu&G_I z`5or+$-$<0cjbD`mk39Hdb$78Z<1>t?VsXLJ8t9`&9P@>Us0hMt$B-Gty$Hc zF2$2Xwdct#z&?BOb>3aBIpJlV9YxBYQ0Vrrb9CrNY{up>B4nm+rjE_Xa?M*+x#lt6 za?RC)3RSu0L5by>M_o$5)1hu`kGQHik88mzbaP2&kt@EeZLe75^fR(!k<*9uz#;>p ze*Gs?zv}Py5)IjrbEWN$D2r*+&Etv5+LKX6_$?P| z@VwXcnj;qz)Z~jxV!h@+@&zZ2YQTP@UYCzE8E)G4iYlKyO+%Fo*vqP(Jwij3pJ2V_ zI}d2R=GuVv)KL#$u7@6fIfL5wk{*sZW5NrWS0L?^_nmJSq4PC>k&oNzZ#n{ zQ7^Ht?SGx5JzhoBgQg!Kq9(Q937B~Lf|Nupk1Hvc`J0#NCXp<0XEOK-?AstopHec&;(^8UV5>1v}q8mM#CYMdswpa3Y z%1PPLb_8 z7kB$)_1%fz&wxZX{ZNtUJ;U*{w~vA z%#&%ejNxW*CvF{?9c{Me>1eYj`HMHMUdrG5I(nABnb%Lhf2{V@qhrT^%|nlWD&H@9 zg#X-ncF?n$pQYPHmi3yC=Gmqbzn>aCKK0!U=yB@(iXQi!m_0q7GDdqciXOk_|0L*f zAX9nLRwvQpnU%WHlj-q~W!m;iR-S!)cJz35?!lqQJ{t}sJ?5REJ@x3=U(fQ;V-XuP zdTD=(Tu{1y^jKd^vrR%0d9V7^=yBwCGN8v7?p5@7{R!FAnh81#@2z~i zrIes1ZFLeoJ{r`Go=lG?Fx(8};}gTPqsJ%qzLVZ(rAK>k@8#o7YY!wnR-dLl_2}5+ zF7?pk{pV8qUen`#)@$Bz>c0g&e)p~n=<&3uqQ_0Ruw;8*9l&eVA+B`8_Mfezh~Cm; z{G80_@rcQ~(Ua-%`wUmNEOvBQ-g)d%+0o;%yAKXMZhieg(&O8w^gxf1i#_z1$A*Vq z)8l^DYo5ciO=8-gwtVca&43<%W+{4{dVKcu_^p$*C!^%!@4uv@h~CoUWhI%>V|bEo z^kjNGjNxWLk9QBvjvnvcad7DIf&*HwdB#cFQ;&}Q_yP|-R2drSnbG4F<8`Aa)8kvk+V)tMysut6AUk@z_Je~%k7pdv zdd*`BwWl5(+kT#h9%rzXq1W^{d;jb?PmiS89&~z~_N@%)@%`HrJ^pNH_Vm~~LVGfb z9&^8_!|>kHS*OE-ElJzmIgGmww#`(;Ou>*EK99v?x9&Ga~#wg1oY+Ea)B zkLjVu1UNnI4y&qHV9_&{u6kI>gD z3JlrxnrEDavY-fNAU7Y%5i|Q{I(<>ExnPjy^pSZfDHWBcUi0=|*K3xsn3S{7Td(=^ zVv=T_X-yj*$@i^8a{KD@=u1_0IUb~mIa%5`wxq`_ZB)T|SNFU>Q&&}TInxTxJ*CVa zv_S3Y^8<8yN@(Zx#twa6gLXY9r=m=3P70hHCOGiGl$nP_#pdTku!z&=c-^%yMM|ol zo}`;EXBQTk*iOjNkV%TXKqvf7Lncj5y*@ktFXz*MW1Ktwv zj#MhQxk@pS`TaCZB$Im07x%Vav&h7Ndd+J^;NvG$ubBfO$B{oe_?N1WoLT&%sMjp( z8d1IG@l>yw@)kf+Z1h|GGOgDPF;g)-IUZBZCt0|p;;f1Fn$MQ?nvpgb0r08nH6x{< zU9VZxXO5$aHEK5_)g0GuMo%t`?Wxz?OocGADcM|1FsTanJ)8pHK*?qSgXF)iYV$ca zDpdUYVLDWl@(fj*^Wy!Jh1(4yG{Pdws?8^SmSCk3ZnA2#D0CWl$yuk62IF*BJ2zL6 zNg0+D>Za|IaT9mxI7;$S zUXOecHL#Rt{{gDk{AD3ksB*=P-&Cah*&GciQ@v*J3q+>6D-0l2U-e{gRi|3X-seck zPeX<7Y9)xG?~5em26c|D6vAXfoIFW4AX#60q@5pufjjZ@<%mMy!~rUspDde4@$(x< zY*411DX}qtXy*q~`bkb-?O5@9=3D8r|pr^(7CJJ^EN`pYG~>VD9tx>F4yR+~-fbQp0K8lGl~3 zXnnqRFV%g%@k0%#O?#h5(bk{^qMX;lWu+QGj@{aF&KIE|ZI>+P{C=8p&YyA0Igh2Z zY$6>eYU_6K_3I8W78G>ehXTPZ&0t(8UpY_IbnXJX{R|a^uxmR1k(&lkmRQtuj-sZs z%qN{tZT21JBP}7Ld^h=Tx@$Xs28{PxauO)NyE|5cwkWr>PnCCmPo$!7mv{D-RBKfw z)r`7P5GYv9KAx4;Datz!cbCvqD~=ER|LlDUd{ou-e*ys#Szb^f9=(L_Q58j>KEMS&n%o#{wL z)Uc@V|DJQ-HZ$+tnIxn2r{VJ+b2d(YQ=vuCeQyR^w$QL{hxD--X< zlgtXN!#-07>*!bEL2%?ymd^Kl#GpjJ=Y1ifdybu9`U6asVb53a2|4gRGx3uf-!oe8 zD;^5|h;}!#D*b9W(LUcp{Q~x4=6jC%iY^4#^NW0~4DTvisUb4H-tbKJOuSWMv{Hh7 z(BhQ2S*8gIWY2oBoRN{@nMVHw(56P`P$<68rA^W2z#>7Jy1mx_E3@grxoos9QpTp5 zH+)|)`7`Htfu3JnA$7^42lPaG<6-I(&niwuvGpAy*!Mz)wpN7w@!2I7?eqWcavKS# zzNBSHP-P|1bBg>%n$FJtywY(N675YRg^P2(!M^#q0`zX&sYY~+meMX@`WUU31jRJs z>qYK8*q#5G`<7Z~2`M`_^%safgps}h9MDZ!H-pG_TmudvuB^j-od&wWIQo9a5t8B0 z!6SD7O5!X=urY+6Pk7|+`9y-34j#FC)<|Y6uKbnX0sr$wWL@a|&tJO96eJ|+M2 zFaKNo&u~7R-H#$r#)>Tqh2t}|jsJN)1PKzB#Q*%3e%<0qZa4q4RrC`nUS?a$>;DCn zmE9ca@jvUd&tOj%T+m<`%QXM<3`?w9z|P^SQ@YU_@5is~Dbd23R`NgRO8^T5*n}$4 zB>w0AvH}qP#mARft4N=>%&c=G64>C`a(qjiyIKMpe4Zfv^)B!j2V49J>s@dPyn*$u zL&SPlLq$UlSVxTYF8?7|@4_xTW4&wU`PNjV;4?|Drd;pp)MozYFsq;g|MLM*f-SVp z75m=MKNnB8+G__U$gW!8FkqA)AQ7q5Yguvh&%;=sTpSHz4Nve}CelBj(N|W8WIcGR zhxB<%56=3RL=PNVk<{-T;3PB3!Mr^WE+_-J-A*;Z#kwt#6q(8*EFk@e^4BlCXF{{7pBBgkfk%$p9PA|IA9}V$IeIok-$;K1f!A zWSw{^Px`#26Q^yH=!C=Aa9W*2C;mJ9&qt86)Zou(1^@FiJjM{Hw~zn%sV6XJO2?zx zUjFA34F2cpuREo~0lkx)hTjGU^n=LwJLZ5sn(M;zG8%F*&zw5N8s~DO5``uPGV-J! zV@t3;B1zyN_P_2d(Wka@Kp)tZGIbmwO>x#appUWUhf_(_HTyxpKqaIITQTP59s52>-e9C>Z!yQi>>k0m%N`cF+jP=gZ9YZB!&RY3^TU4 zEkL<5|MRsx#xdu~2G&)<-F}c5`c&vDc2^dEjacL~<+AotVojgJkG}@zb@~j@%`~OjDm)DpAy0Yrn$xjQ`pH7m2p~ zALM^N!%~(Tw@8%57}XxIB~Yaal4XCxZi(!-p8uIO$wlzp_@8s6!%osLb+k-d#aJoU zIG$N6k$wl0^O+?Q>Hi+`KhJqUBKH4>_@7lv-0yf#BJRf6@DE#pbEFB9#Xb6^MBG!m zCFA*@S#?~5JvINc%-V7Q{o`edY6tzrO%kzp0R6>_Bx3(VGMCk8d=Vskh{N-)y2;L zyjr544#QI4=Oz021LJ>w^2fseTw-bG{qM+>MxPHYvL(1wo*+&;=h)I6D@~U?RxbOG zOrqPt|NI%{+dl2QcCTC6oVD|_9d6GX4ivQQ0XUH2-wPE;)?Znk;=p6i-G++?Oqk?ZM_f~7Z0R?rX0|wHnAwF|E zP1M-!#tLU?k{-`RRm`YF5uNm}frtxc*nhlR#-4Nrf+>={!BmnNM zs~kWZ6zN|HzR$xay9dZMlvl&d#3kpKTrhpP%|AP3B8>>d3~5z1+_QJ%!FZ9PhI<~* z-^S;v*iKE=YoY3mA5=Hym-L#tG5LDkZaIy4p8Ijt#uO{P$4tO#=nQ%Y-!I4aS>pTe z%khay6&jWL=Vn=@K=MrWpnr8058$t@Mnr?W+}e@D@qrV5<3+jCqi=87w_n8brpne; zi#(`XMfagIvm5DAy-d@i^O1t`Gx(izBX{8nof{DR&NJ`oCeEL6``H`M$})Vo5}$2k zEa#EhGr;`LJ@E>wa>{`C^KS5`Q?TQNGnM>uU+BV!FZ*L5v%b)8@ZV=q}NL9=g( z$vMt{nAl#m-5_W;YUnItL(LzQ2SNjS*VlMMyNTtDttS=u&cJ&m^ z?@VbfIGpto(8`f#b**Pfwi?2&>hQ3x%wL|@06vnHBtwFWJ5sqp0`PR=Vt7tme2~W? z^t_9HtoGsritPx(+0x9JKC_xe>$32`Ufz(u*PxQnoxNy8p?C$fe6=F_0U?VPSfEXR z5fxhD4f_WUQNzE|_qM@6&_zJTM{dYo zu*!cS3y;n`L$ou`>~)hI<5UEsC7!=qg*C{h;Ciy7>+#rd>$^Sa?aoOlzNxXp1Dxl!c0X~CTf3uq>TP;> z=QasEV{;RmxKNdn3SX~+?2?w!Uf57S!faX(OADRy9Q7|Z1lM~SE&NurHvxIwa<;XU zQX{d>Kpq+II(u=RAvAs{DLlKC^%=sHWv!bbOnF2yvLwyld2YZng1ox&@dep>1zX0T zsSf0l+l=k$%WYdYBGb3K)qv6&_Q=^KQ;c{90`ILOr}3QaO#ohJyuZP~du-Z%wT}(& zOCa?u5YRQ<X$fp+NXx|Ff42?$ODaAZTY_az<)yVg z<@GmkRO$`8N1NH_ZKQ zIG_BT*ym?=l60(YF16A=|FB+yZ)BhUWp^A#=di;jP5b;MY37#E(LVe9C(^f|3PbjY zD(DbhvPlBbt21MtFMCVYtjYFysq)ftVWSHm#ymfx_Ib}w-6Y4t;_uKtf9Gt%k=WdwDEzz0c>J}^xo24#n#bLKzQ(Yhap3sX zgA?p$9y{57Moh*1`y+KI7(b{BItpY!TLD+5keIrGM~q9hS+X1M~kM>vZLEifDvm*ljYM8|HdmvdO*wO-d^M1tHwM=+2ZJvYT^+-Q3`2H}@_`0oLR?UO3PO))_8wM z>;2nj8F-zJfBTSK61;Ak{rp(91m(znK5u&*Mhky}3q~jUw{MVUo+Hd~PV9h%R#9GU`=$$UO?fDMs_ z`CNyH&aR$}bj{~&IN<1D^rYk7{=0Khck_A5HVGoz-P_N+<%WTP?$(&kmo%gU$a3>} z=6binI0N#I)o#zD@OJb0h9_DF$Tx)21?2es1*Sg({%0O3X~n~`IAr$oB;c_K=hEol zfEI%&IiQ6=-u{^ckdXn!8H54NWncrk(J-J5m$OPMjse|j-bI7+fv-y749kZnuKL(O zWISIJ`4zhlT;QzHivWSz^aXZodVi_x1#yn&fzFQSy69$MI4`6Qc3N{RlfDC$m=@8E zXR)9DYW6p{RicfU+!&9^(N|>kwqY_%=Y`%-Uk9)9E-W_sLY@WeTxJoF7|D%>@aaZ! zquoe8b&DG^Scu$ciEM(A?Ce}N1Wq@SyXZ!;-MQT8W+Z=da0*C9=|_b6CqeSCrzMbF zr#qLieZs!t$Up58IsRoCB=h6?iepmJgPoJcL2_KfFPG9Y3+FQH;i0t>R7(!0AaO1? ztxN}#r7y?~9xq#zq7wCbC3G8k^9o%foqQRMnZe_8q-B!evE^LO93DUI z$`bwG!Q*L48hHHGK}mT0*b^DRpmK^9eTc#J{u-k0+LYkMa1jk1~(PI~S&avVUxf!{YW)B|7@G__={&8le**aqf$C(n|-|Z6$zrX%06DWto?ZWs;jl`jK`<)JJYa_ zm*3YqJYN30?=c>)+nRYizUV0#YyisouaCpy+t@YW24xQR@lfdtGK0qtJ(;2sPwSP? z?c-(aOK_`1X7IR3S|$k|V{@Lq`66?8e5Wfb^?wJCPt8dKkKfBp!sE)nWB`vJUf>9- zx(iwAueiiHsXHDYRPQzrCfLVUEXouf7c6N%9{;l1tu)Sf{Pat1&nMW&C(LUd9-k0s z2OeYp#R}dZnzsLVGW^G%E4@8*8iSVf61QMjM^@Mo5-EL8g2>1~--5xVU=OnW%nEP1 zNcJE%JuU$=TGRXenm9z>!4q*8FvFT2wrYqoG31_pRGN7@+b&kvw_V`GO46R?eCaDt z{sC{t8OKAUVxCoJea{g|vx8H~+s7oRKno)XU77FnBeG))6 z*7O)sja?QbkkCiFQ1*JX&49f25yzwq$Xr5FWV`47Htbn;Zg@P&3q*XFqdv0nIT@tc zGzDi?dhnSQw_O%@Ki_^p{>xIg(l`V1Vf@ZC4CF`dXdNIwa*Yg-<^JQ=~(i~r0#9v9D-VF&PR*IRLTJcFGBY2xug(#&mARu*>I24~_it>!u5arwh3%71r# z93IbSM}k}VGlR#6OUo38$8l?U@i4p-NG%rg+J(i}FbygyoV1Vfzk|gC_N0NuuYJ?Y zI4o_PYx^~JN2c6gkqV1%d&m(`(=m?6I45<-;ug?qrG>?1Pr9KWWWH59-a0?iek@iN zyOqWni|>Bg?RhG_IDrNqc}=8muyt76_X-&nTLB!B_b01pb}!jVapqln*|1sM&W*U($WQ+{1*TnG8;8mDJQ;Vxv;-UZ7HQ@g z!Q@XKOi})?^z!QtiyqSQX9kn!O3UPg$vDZazIXLw@0~i3j*Zy778x**-+k2$8(IO% zYSNKzo{+W0K)&PiG(dUq?j%rt`;H8N^7cQq8I+%QPU;TI7czIN(`X2Nw;RYy9+SbE zO-)i7$p7>A_Ji{87P^(j8I<=v;r4t2DBpTZ>p=O|OJtzz!XIy*w`N1;+uHAT|C|9FBOi8Hj{&G%AjH2yC4yM4Vq1sc6~8kL zcg5#7whoOyKVOE%2;NkQt*{CFTG)R)2vG<*-Vt{Sv4$iV$5ohV!K-ReS0LVzf{{oQ3g8n1oemz#-8`xhx*Aqi^T3{Sm*3pR$x_ z-s9it?@yPN#h_=8jkabdbRMUzg((Z}S1M1?o5N&ef7h3{R~f++ZiJyt((`j5Xl z!e$g_42aUfd~VI-($~e85Gyuka=tFmC~_5>@HhA+(C9!nwfg~SL6Yj7L-o!HfFR7Q zGzn5<;a?~pHyn#L2ucg9{<3KU7t_{5RDaIiWj<0b&T*O@T1RVK`=?4Uza~KrSe8Z1 z!CyZs8*8JhP!R(^jQE^et$0j1Ry?MhRPmTrKkC->G(6hkF-^o+)Q_bWQBob}23u=A zO*9rkfd%oS9(#|+qQ>ZMNPdadfT;~n)j|6n%!v-4Q{{T3`1kEzgOG>29GTC_vXvt3E5yW9#T4YNbGVdOo_6%#Vj$< zm&5L$^Y*{Zt|G^M%N$nnXe{W8+EAGYwL+6RkCA8)#xZhfIW? zmh^3$<+?S1VM)@!B&$sFRK_nItGc+hhcC!H@Nor>pAwT3Eoe%kCi7P5-j z-E{k|KKdrf7xAy|LaR}rvo1EZ`Xzdv2RTBbqn1k4s-6`JG0m#7X=J{R66$BpNUXh~ z*10m1SkZu>bBuvR9G1#SeSua=tFgVjuS3ze=Jk4#WQY zXG)X>9trx35Y()KniZvRH_g&|hKFOeR*b%r-I8MCN2SeY;?x?ra5+>L1(6=!o=t(nzH%hus>WOg{GXi`fZb#37!W4{N$0M=@dNVeq zPeCBVPrUe3iCGzRDi`9?4hMyJ^VR!&@x*8h>qDB(MHiP^Q_gro8J3PnV#^i)?@x+Fvd=}!38R=1) zqcKj)D+oR7!tc;DT4E6Y*!Ugv^^SDot@yCi!Tb(14Nl~DFeZTd-k!+EN6D-RgWrKm zU`&lu@jEZEU$nOrEsd@QA>;6 zp}s`JxdQ8uz|GP^d9>#!3?qeEK>+Usg2;%t9WbH6f{#9-*;}ebQDD9AWey8j5bqb$ zAa+RbOQa-rfT&_=jlDW9#18dt#16qmH`9~+wwRTXCu86{Cd?U+NB%AJ93>a zyYbsp(}{fbjB`?6cILAwJSVg*JD(~ecHl!WI>E{d@Szrplxv6kO0S@UL&ix1;-02 zJ{Vi^6^ItfUIf!ZHQaO66<<-n*lIzvps?Tn9Lp(?HbzSW#^!(NCR5f<&F?Z`?ABE& zK$-%^-qMf+(t|FPfV2o0tJCdRN0|T;d*Y5Vjrt#5AX*R7xz0)BKsqi`@1JBu3wDt1 zb&~|=0Mcfx<&--$Yv!bb((+hXO|GWAGfGe3ce>1M?I^u|a_dlf{V6h(cAp=c@d*(x z_S>|VUpmxHv1qt%lfCS}QUWDpFAx8dfp2Ut-^&gZECr@zFOQbyZW#jr=(gI+FIV+Y?ND41kVA3WL};hXN(YJM zkzz;R>Q)$MB(A-|?fC?Ixokq~khttb84}y}!z9J)ZYBQyk6|y%{S~~^CUSBgNvAsD zFIXIn0I^~Z47Tj)<}&kBCXiEpd}#_Sd-k3Rv9 zLNbx;2z^CFqRe6+94!~uN8Z0i26C3(r1WS!@Z0ty^kc4;yE8%$A=MnSEA~KPi$fb;4%@oZb0?C(V$72N3PBI}Jo*``FL^ z0#`&!@FyQF&D|2McG$;%ydXsd{$N&sA^8RNEx1-7Gmw0ov``i#F9eUmw`v|=`k|Y| zSgwli5PVO1ISugr=Q11k3c6tJ9+Ny0$`0~Mc53E$EBIu_Pvb_A1t^N zJfRnvv=@}MVnwgcVC|(9J-GfSW5w{da3d251W^fdp?XT+gG%)HeOx7ul~Q)hK2a=8Y_WeahNo<4Se8KcNk7#1Ft{ZF)70^ zmyop3ZUbMo*{$L6q*y8vHt^<4BuLgOX5K&kIvpIAJB%Nm=~fzN93H^$Ov4C%;`G+x z@Dl@NIBYqLljE&?H+Xz|j--DL4Qb{1{*jZVs1ZIf@76ddyNG=PY2tAoY37;3<2jR3 zRAP2~B_3iQf@>u*gU9{kg>uJZ!)cr;JRZN%O>F)E%x#A<5NJ{jW@;N@!LH2c7?Kd`#31gJac%w zeO!u4d=g)Yp7Kg$29M{;3+0Z-#wngm;qmL=GxCJH7o>s5$32sT$Lmke03Pr3wHc3J za!%@w$D`kN8weBZ<7MYa5Uo{seBHG6R?>8P_ zwkPv={L`^1pe!1Q!{d?c8b}k5zx2v7&m104m%a!7ifPx!Rbmdi5?m{h89d&t$|{ez z9B%%KLVZ(3rttXq1~*vv@7TxtA4vm`|MvGJJRWmO2JrZzF>S`(OQMaA53XK9)Id;tvloKHT=#r{1q+7wGNM44r(_ZvmYt_c!bm7KQ{OiXiIV* zTV#az{m5b&`JK-th>Q$$3zXL$XlaQ zRN~F}O2j7WYU#Akt-*{)*t&Be*ocfhf!4W@%cO;hf+W@?LF@Nhz**B z9y~ov0?lIYacWm`T}hjv`A+Ag49&)NinzVUhvBOG)Rwo!30LwT#z~+Vp}Wmc1K3Z| zlW7!sA|A~MJ?;bprXD6hJ+uALJn3Aw(l|r&I}_ZVPcW6w8{9f*KChPynqBr&U_Gyu zcsvz&O#BH1GwI-Q>3=eh$62SRfU>$P;_$eDoe*i_@!Hd5ncKuG4Ln{*RO>EyJY4!7 z3@WEw8CQw(*qPv3iMCnDiFmwjgsk!w9^;H2oz>&GPYy6lGz#Z49#rHk`jwwJ)`|t zywcTZcgA9s-I5N8>sx=oWG`t$qOTy z$KxvZzG>B&D(PTEpx+$R)F%<%o)g|{*VSJZ@WJUltY6v0Lo9C)Mik=(mAO+DDO>4 zqo7Y$uN{>sP(EgK`$74H@ouGY2IUt#ZqEbV?1%GCIkI)2d`f2-C_C>r{ ziQBlpV%rH45TpHW|F}RPvA(se6FVSWKrC^;+ahV^HY9H6ezzl}??ELFpAlDy5$s5C ztwh_9IB~z*l3z(%*4=+RA;bRTPrqm639sLo0)uJ4+xhp{Fqo~JNVkC!3{H2y+fRqK z8G}C_;+WLke|-I7x51B0FPoEM`v?h&waS0|XmR^7_&HZI-5GhE>38aUIOA1pb{Kvl^~8z0rM5B1&G^0FAofk6y+%keyCIq z(_iQf`34R_QbZ>8rLX>nm*aArM$a_3=m0B^oGxI5Q z=U3&>dxAa+Qch$FoB|h!bI$2r}8JU7n8IsV*#i!)r0EQc= z8Dt7Zl1Qa&^1#Kk^$^t`*;C;icciU$B2##Nmt+jU8{*`^7M^#nj7(uQlPOpOi0SWc zH{U^DfL9uP2h-NeEcx{K4g`Th65qj35OxU$)C7zj;5*QU(8&=ccmaYW$0!1HW9%&Y zo5X!ks8Gu`4TQ~@@0 zzAKKL*ET+cf320M-S?0W;lw8;dXjKZG<`mV({GXJiou7lrNYvcyZTCWg+lyWx?=Jn z{7y>c;G!%48X}QldtCUq1%fy}ghx(rR+mIRgf~x>y^6-D_>pTY=j);_c0PnP-6iTm zjg>HRuh}6{mkvIJEFvoayH6Y+!VygA?A96oeLjRaPo%H6-#Q<{gqu>RJMkfWdJCz$ z;6r%$K$*I`@gZoBQ=Q%V#F{ci7Us$n#C3f5F8L6at)_9ptuAesuL5&*Wna7a5RQ24 zdn8{wW~Cutch9lp>-7A#$k$-zfN<**n|w{^+6wuaG!gymh3!kuBHn4ljB25AxlEt} zl9cQ7)x26b6(XuOOi}B`gvu&|x|}z=SJp_Scj+-ikicIG`L8+_4^8E#>Fx~rIn(?(%a{EzBJ>Y2H1qMp zWG>~gb(KFOXB8*MciIgHQyspeafpjtt!iiFdqYzogW#f}>P+g6-yHBu>y8^ZMxx(1 z7(d71lpiP2-%U$!%t2IDQ$dV z-I!CUq;+Eo^fo&ACgxcfgcbtb!UX)Efu!6T_&!Um`@K;+rT6cta%dXWXqr0?l{8H) zs21ka%kZzRVgdeAyP&WicBjI2$G4yNpl@gN!`EGW@r-=4=I2jeZp{_V`r9wkdJsy} zZ+i5i!%RK~P%BK2o@M<;W7T1+1YXQ+Mhb^RMMq>eQd0eG)1w7QLHQ9^2k|q2!wpx+ z7#I8uJKpT7^CPL@3wGdv+{pGr?GH5K0f+LIaDSOwxX@YP074&=EQAkN;)@aaGiT|d zZi##j(-Yp97M}x%H|XtC@bL!bs=2B*F4xj4l6)3UU+6axU-o~De%`4_z~ftDc@XER z)o_<%a0q|8$&ctD{}p?){lhQ;uf28eeiZbU*aR z@xHN<6z;k^x@<4$lT}&eKSWhZ--0-;!%uD+z3;HRg3BZ7tjm$kyqDjpZ|LD*l~VZ# zUPt-)!YAIYC)Dfq_njncPIcpToN&*s2N34<98bx@Bj)zTj40fv=wxH56b_-9$jAsa zw|gcd`twVL<>)a=o76W{+GrlI&t~80`tw=*5EA+o4Yy}8D(D93xNON>4GPn9MOOji z;(4J5#~FQL#-~a9eMfdq@xICFyl;B+=w7+{dWwnXkppqf!t#MDx@MW>Gx+6%zOIK= zqOV_(zWTzK2{S;O)8vDL7F~19!IB}5U9>*!V<-+idmcZV1Uv#mR(nI|tHkjbe9wO_ zk8h;K-q2{AWLgQ!pqSVk*sB+s^!(Rw-tO2<@g<=}ufyG$4?G35 z5{m*MPZKmbK|Lw8ZOR=2cPg~~x`R^HQTI}v`*og+u;aBWczh;htPGwoBrDR14V;{OfErH0E+@p`se)_NS1YR~g-)W>@)&wgP2p z)K}2U02I5=6Q3C_yCvH&dx|ELSLwNxkx{Scr*g&u1YoM`eWP?w; z@^Z5z+i>L_Rhu|tY&d7P4r>X0%%u;Hxb0dR-vkj4Hc7bmTWu@*LtCll?e-0yUykA` zx09X6T@o5a-GoM;iAGPWgA#jY+NG&_<_x`OW}-c2={*BpN6|A0{efb*^atIE6+8C_ z`kwpa)!}A;EW+0q$X2cXc#5iS7QyI}St+~Z(`&3Qc^I7>qXNh3R2S@TxR{uy=X>5&1(e`_#h!nl)ZAm!N6h>^>b+ zJM9fMZ?9VMJ6>|es`mJT;Mjq#WaQxyH(pJ35Viw0Si01KtQ8B}9OV!8trhHZ_vx<} zP-c3@GkemA3x0TPfl#ZzvTcDtzijeqEAHqrxsdEKCHOv)(M2@xNL*5@KR8~^+Z4HZ zvMdL~2tzY(@`Xoa>j{~lW>e&+Q8yzDFM{W-=dD?6guO{-7tUto;#J{3FCJ?cVLW;- z+d?AmWQ2)KM%=3#Z8X$Z8Kq?-jOuIbOQEU}aF?Qjea_(|AHWd)^ffVxe@1ov>E0CO zJ?EQ)FcZMBsql&S<12DfcF~lUg3oh_Fp`ltn(icclk(v4$W=q*@@dYijnBu|e&TDt(6|D+TM!yIkUj_E zwS%Z^YDMi3%zgv_Je(d=(#b6*-RU7aEVQfQyXM7HH!NLgUdTp(z9D_dspj zKwtP8gj$3l&WBP-;{QVu|F>M%o)JO-#nbm9f2!N=Z@DMIv!?9OD?avxFI}l8yH}b_ zDB;IOYLsl4{CQnwLQ@L45hfP0_~>H8c0ZbCVlhil=nR&e&=h>oRh5M(bOsAgXbL{) zDmc3#N1-#OQtyVQ;DfGC#Z{QBLWDw7AW3v}2CmM)RhFXA6nxOt%W?H`T%9R$zz1EO ziK{blb(Xk_54t)FS7)gqQ=CHgmy-<9y+6`7ug3Ca$;a@rrof>_Z=mZSX9=wFV&xl6 z*Z-m|?wDI=L5(>ck>zg9FYf5F;hclBisz14gAaWmkDp(N@%6w?1bv2Y@8FlL@pXFi ziTmKlGxOKSV_dVI|8TMOysDw+b^qf2(|twN{&N8Jd)U5$vE}zzWu8YjK$+LKBzG@9 z`j_N>tyWZLdy7`GMYRW+1ZvTEdt$WKyaziLi`FUk zRmEU#mF;9|mszBlwMQ^t_9>7==x)bPk`U(r{AbEA*op)zIk>ay@<`QC~TcX)X?`Phev zr8c=KviF6q$O98z-uSr3HtJ&&SQB=>tyZ;>NLZik(|+pHew&M2mC7>C6m#E-eFfL$ zQ30Yyabeb$!EaQi?eJD?-Rcd`+KR%f)&K5-308KA_I63dw$5tB{u$R{Gv%n&L-&_q zH6R#*07k3uhmxul+rCzJy*pI*fB1Md?bBANd3%)noL)-4uUEd(I|t*AuP|T9FYQ%8 zmxf?Xps;|h4WVnrbPay-(!yf8Hi53qpldVf+6=ljQ?2;49Hq+fcg4=S)v^1jrYMg8 z6#9wbB;UL1-OJ|jn>YHjH({?Km)<*+{2sk2lO0O$9))|^d>q-)tabt$cb$^<*04M z&Gon$DXo#YwJ0ZRc(*&C$LuG!iW@-={d_EJ?!T#T~iu5(v!C~R8*R`zNF}@*(aAN zzBQ#q&9jHm7nC;#%9+E;Nl%kB3g!2MF=2$hLZ_jq_1=naa&AB&#?Ua!7AyMK?m9d|IH%r%lI3>CyFN;XsbJ;-jx2GWp)3TIKh-$c<8u4WGJ* zI*%0_vN33(n?|F;^}f*bm0oQWG`baFibPSEeWprm)@ zL%)|mN0*R(-$nX;*AS@O64LJ_q~CXue&02Lu91E(A^pCK^!u)vbdB_T3G}O79;12Ysv*yOEZbx&m4E7tt|1>HX05^d_=l&Vq!y7&qjXEv?wg4h`n2HX z{PD~zeBgOF+2@oC^O7f|U!O=`0hc*mtuJ(SIcA+N{T!26t!%z8eAKB2=0NE$U4R;q z%Oy(<^?Z=-R_xjDA1Crh<+QQ~)G+>QW%JPKv*>|vpOPsMkZ@q0J~N11`*(@J@ERH# z?&6*!IrX(z{GOZ-gU}nA(@!0|Uaj7bJ*#zU(JtloZwR%N(J1XzZ|?Tyttbm_S1SL* z7g67ks4toK58o+!V?xVp8zyTR?6Ibn**;irnfNAIN0((yvWOlC_c?BIe3P92gsgxx z3O+F^|h^H6U62ek?AyNgG6_sV-+Az#MHeXD$L6&FA-p7Lh2c z+Ph_1#1{&aKvQp4qdF2Nd(j3p6eOuv?uC?2pWEVDlI{OFt4zp>M0C|tRDZXMw0P!Q zX%-ru?m}sr*kR};*2L^sKD~~VGP|U%TMp`l2~5sWEMowcTYvP zQuQ2D3~)*DET{N@-|^MyW=Czo+hExV*WL1eIKE9ST8T#7!X0%rT8z>xq?0UqL)^*9 z+!`V_78NjGtM|3YLVvAK`dZrkYNV%v>aM~+y)SWY)mp=ElD&58CmTdl__S~?L>KT) z8(h5FJ6;W|tIH;k=o_n7U&SAVBP)1t6TB#$y{|m=r1>g5i{jZxLr!HV5524xg_>Q1H!L`a%BR)& zLP2_6nHDY6_LddZ1O~zLyTvo~y=VpA??pkCQCrmTvKe@Yj>~a6Jm=ql^>2F42hr8` zkiD%e2Ex7D@-{P9o$f81A$51y|BL#WYxp+aw7GtT_^$5AeH zh)>PiplTb9Lwsk`<+9)^|0&{riFtn&9kEj?AEl0^XS8pkM*!k<`%*Lv=9#Mkwe%gg zJwsPTzrxe}e(o#}Uf7M^ha-4&X3vx~-9e=H9zn8G*Fiy=^{&DpISh?>JryOcZqeaAy{eQZd57}3Y9M*&Y#)tQ9jzp0s_xSVM$(d z`JDVL|8FU2^q)riiuzJ?!1&hvlxr&@mZhw1a|!G>@swU03{zBCdSl=&dIyS{g$sOI zXM^61CCY2N(4{Cbcd4a@X*8_c8`X*+33N7T-6(o-^c0*_6eVCuR)tmX848&;wG<5< zEX8xt8}TO&pQyF!g2Rv{S`5(fFLW%ajyWHvnZefb!fYitl*I~FrAv{PtZZH{+Tsm+ zvSSCC&m%wd5|kS49j2lxi%WC&=WgK68A`7!DXde1cj0YR>Jnu!cg_O5Ago`*R5VJH zHo}LvwpGxQ%4<7dtEAtic3gAnLMlz=Z&6MzT5Zli7>1&lgD`pNgpMZ>(lzF~JQ@w6<$I}#M{WW1 z$F-04F4j`ZPw5mmkqT!G2Pbh^F&qrPkEBT8Zf$lJP=9}HsO2w0{bE10a^(8z`Dehf>qUSgz@3Uv5bt*I?2uG&;T>89SA}l1bM+n2Vk+&+SB}!qJ9) zpk}z2x4XQslYb!h5S9YqT!A`m4Q%DKAx;P_Eziw~b>p1LHeNP}q!43zF(uOt&G;eJ zr!9}jRXEFnc>yNJh4$U{}CIuq71S4Nq$0}v%xP> zAKA53vRAS;)+z2JNd-4+RsfqRJPonajrOFotdyhP>UrR{73F)fgiKDC8JI{zyJzbo zCF^8XHDwWB>Jn+Gb^D9_&+z}EQ-nOxZ*zS^z4enq(jM&ta?oh^Ed(rk;Vu;=r!5Fp zZ)={WP)TmyhKj9YVW}*@lYTnayQN}xvA@6gk{cL8;!qb{g1hA1i(yx>@jI7()7BIH zK7MA!dQn30`~mn4lX(Y{s^Q5C)o>7`rC6M+M@*`x2R}jUhyb;wCrA?e5^c6+j?w=l=566XJ4~gjwcb>gbiYm@)sq@0>|4TmbHqH_F;{~kd~KO(3H~8geR$4 z$lFPrQyjk9KoNOpm_B#A=y%CH!uEu#u2NlBUZu^*3?!g9#U+YmdgjJCep zM8GzoB9mX%=4j?p<+U)Wo$}i5&?3@eWarb~P{Uz*IZ8tkt%f}dCqUFm#_5wpo<4W* zZyn7`Cz7hVNgLMI3W8OEYxSbSniX?Rp3^A7^cHf*1q|sKcvUT14e{Gdz+A+*!};!^d>)_P3C-^^=roWmaulja0ld-nD^=}HUmh&Y zkp=z%bQxzP0@I?e2*_z*!|ubt8PR{}7X-dwb~*w0@+OUXVt14zCPTx}x5-*kO8?ypbZS+_};s$|_eNO)2atwq$NtEwf}Sbk_ZY zKN$ODd}D^}ldjKp*e6&%(gT1Io_5$LuwN4FldZf?<7N)G#y+{9bNVsaCy$Nouus}x zpDa5yGxkZB$sP8Ir_J`spTcdmPo_&#w!=QT_vB33C$I1(1~(H*W}lQxQ`+p4^))|E z`{X%naLkDR&1XB-cl5(1Kl1gR`F|#T%!GY1g>!O~w;!T?a!FB#ebNT|Bs??? z`y{n_Qah@{JZZamGIh3W9F~pXM@mz+!#tUMbf(Ocn{H}rM-EAgxz7Ebl4}f|0D~icHPCTHS0Tz`K<4c$v&wW(qW&p z!9MBvOC6YG{*yHJpBy#3!$4`ff%4LIZ5_ksNK>}MKzZ?qOc^Ne{-WbVtpig#?UUfII_#6S+b4%y+14R^^A)m`?XXV{?vp9|

QUW!|AIX-b=Ya`q#c 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∋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

  • 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
  • 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 z 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�+)cHoq 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 z

    T!i${+NC7ec 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�e1|3%^Q~2l%)N>L<>!%L=1@s`lv<8tA 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⁣?`#-^;yi_t~;b(4U+p>W%zXulW? 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�wET@LObyy!!HasbC_2MP;#P)MM`qm7kl#dg-FIE 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