| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_SYS_TIME_LIB_NETWORK_TIME_TEST_COMMON_H_ |
| #define SRC_SYS_TIME_LIB_NETWORK_TIME_TEST_COMMON_H_ |
| |
| #include "src/lib/fxl/strings/string_printf.h" |
| #include "third_party/roughtime/protocol.h" |
| |
| namespace time_server { |
| |
| #define NETWORK_TIME_TEST_PUBLIC_KEY \ |
| 0x3b, 0x6a, 0x27, 0xbc, 0xce, 0xb6, 0xa4, 0x2d, 0x62, 0xa3, 0xa8, 0xd0, 0x2a, 0x6f, 0x0d, 0x73, \ |
| 0x65, 0x32, 0x15, 0x77, 0x1d, 0xe2, 0x43, 0xa6, 0x3a, 0xc0, 0x48, 0xa1, 0x8b, 0x59, 0xda, \ |
| 0x29 |
| |
| // Ed25519 private key used by a test roughtime server. The |
| // private part consists of all zeros and so is only for use in this example. |
| constexpr uint8_t kTestPrivateKey[roughtime::kPrivateKeyLength] = { |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, NETWORK_TIME_TEST_PUBLIC_KEY}; |
| |
| // Same as the second half of the private key, but there's no sane way to avoid |
| // duplicating this code without macros. |
| constexpr uint8_t kTestPublicKey[roughtime::kPublicKeyLength] = {NETWORK_TIME_TEST_PUBLIC_KEY}; |
| |
| #undef NETWORK_TIME_TEST_PUBLIC_KEY |
| |
| constexpr uint8_t kWrongPrivateKey[roughtime::kPrivateKeyLength] = {}; |
| |
| // Copied from zircon/lib/fidl/array_to_string |
| std::string to_hex_string(const uint8_t* data, size_t size) { |
| constexpr char kHexadecimalCharacters[] = "0123456789abcdef"; |
| std::string ret; |
| ret.reserve(size * 2); |
| for (size_t i = 0; i < size; i++) { |
| unsigned char c = data[i]; |
| ret.push_back(kHexadecimalCharacters[c >> 4]); |
| ret.push_back(kHexadecimalCharacters[c & 0xf]); |
| } |
| return ret; |
| } |
| |
| // Creates a client config for a roughtime server listening on [::1]:port |
| std::string local_client_config(uint16_t port) { |
| // Note that the host must explicitly be "::1". "localhost" is |
| // misinterpreted as implying IPv4. |
| return fxl::StringPrintf( |
| R"( |
| { |
| "servers": |
| [ |
| { |
| "name": "Local", |
| "publicKey": "%s", |
| "addresses": |
| [ |
| { |
| "address": "::1:%d" |
| } |
| ] |
| } |
| ] |
| })", |
| to_hex_string(kTestPublicKey, roughtime::kPublicKeyLength).c_str(), port); |
| } |
| |
| } // namespace time_server |
| |
| #endif // SRC_SYS_TIME_LIB_NETWORK_TIME_TEST_COMMON_H_ |