diff options
Diffstat (limited to 'tools/testing/cc/cli_util.cc')
-rw-r--r-- | tools/testing/cc/cli_util.cc | 243 |
1 files changed, 0 insertions, 243 deletions
diff --git a/tools/testing/cc/cli_util.cc b/tools/testing/cc/cli_util.cc deleted file mode 100644 index 327b30600..000000000 --- a/tools/testing/cc/cli_util.cc +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "testing/cc/cli_util.h" - -#include <algorithm> -#include <fstream> -#include <iostream> -#include <sstream> -#include <string> -#include <utility> - -#include "absl/status/status.h" -#include "tink/binary_keyset_reader.h" -#include "tink/binary_keyset_writer.h" -#include "tink/cleartext_keyset_handle.h" -#include "tink/config/tink_config.h" -#include "tink/input_stream.h" -#include "tink/json_keyset_reader.h" -#include "tink/json_keyset_writer.h" -#include "tink/keyset_handle.h" -#include "tink/keyset_reader.h" -#include "tink/keyset_writer.h" -#include "tink/kms_clients.h" -#include "tink/output_stream.h" -#include "tink/util/status.h" - -using crypto::tink::BinaryKeysetReader; -using crypto::tink::BinaryKeysetWriter; -using crypto::tink::CleartextKeysetHandle; -using crypto::tink::InputStream; -using crypto::tink::JsonKeysetReader; -using crypto::tink::JsonKeysetWriter; -using crypto::tink::KeysetHandle; -using crypto::tink::KeysetReader; -using crypto::tink::KeysetWriter; -using crypto::tink::OutputStream; -using crypto::tink::TinkConfig; -using crypto::tink::util::Status; - -namespace { - -// Writes 'contents' of the specified 'size' to 'output_stream'. -// In case of errors writes a log message and aborts. -void WriteToStream(OutputStream* output_stream, const void* contents, - int size) { - if (output_stream == nullptr) { - std::clog << "'output_stream' must be non-null" << std::endl; - exit(1); - } - void* buffer; - int pos = 0; - int remaining = size; - int available_space; - int available_bytes; - while (remaining > 0) { - auto next_result = output_stream->Next(&buffer); - if (!next_result.ok()) { - std::clog << "Error writing to a stream: " << next_result.status() - << std::endl; - exit(1); - } - available_space = next_result.value(); - available_bytes = std::min(available_space, remaining); - memcpy(buffer, reinterpret_cast<const char*>(contents) + pos, - available_bytes); - remaining -= available_bytes; - pos += available_bytes; - } - if (available_space > available_bytes) { - output_stream->BackUp(available_space - available_bytes); - } -} - -} // namespace - -// static -std::unique_ptr<KeysetReader> CliUtil::GetBinaryKeysetReader( - const std::string& filename) { - std::clog << "Creating a BinaryKeysetReader...\n"; - std::unique_ptr<std::ifstream> keyset_stream(new std::ifstream()); - keyset_stream->open(filename, std::ifstream::in); - auto keyset_reader_result = BinaryKeysetReader::New(std::move(keyset_stream)); - if (!keyset_reader_result.ok()) { - std::clog << "Creation of the reader failed: " - << keyset_reader_result.status().message() << std::endl; - exit(1); - } - return std::move(keyset_reader_result.value()); -} - -// static -std::unique_ptr<KeysetReader> CliUtil::GetJsonKeysetReader( - const std::string& filename) { - std::clog << "Creating a JsonKeysetReader...\n"; - std::unique_ptr<std::ifstream> keyset_stream(new std::ifstream()); - keyset_stream->open(filename, std::ifstream::in); - auto keyset_reader_result = JsonKeysetReader::New(std::move(keyset_stream)); - if (!keyset_reader_result.ok()) { - std::clog << "Creation of the reader failed: " - << keyset_reader_result.status().message() << std::endl; - exit(1); - } - return std::move(keyset_reader_result.value()); -} - -// static -std::unique_ptr<KeysetWriter> CliUtil::GetBinaryKeysetWriter( - const std::string& filename) { - std::clog << "Creating a BinaryKeysetWriter...\n"; - std::unique_ptr<std::ofstream> keyset_stream(new std::ofstream()); - keyset_stream->open(filename, std::ofstream::out); - auto keyset_writer_result = BinaryKeysetWriter::New(std::move(keyset_stream)); - if (!keyset_writer_result.ok()) { - std::clog << "Creation of the writer failed: " - << keyset_writer_result.status().message() << std::endl; - exit(1); - } - return std::move(keyset_writer_result.value()); -} - -// static -std::unique_ptr<KeysetWriter> CliUtil::GetJsonKeysetWriter( - const std::string& filename) { - std::clog << "Creating a JsonKeysetWriter...\n"; - std::unique_ptr<std::ofstream> keyset_stream(new std::ofstream()); - keyset_stream->open(filename, std::ifstream::out); - auto keyset_writer_result = JsonKeysetWriter::New(std::move(keyset_stream)); - if (!keyset_writer_result.ok()) { - std::clog << "Creation of the writer failed: " - << keyset_writer_result.status().message() << std::endl; - exit(1); - } - return std::move(keyset_writer_result.value()); -} - -// static -std::unique_ptr<KeysetHandle> CliUtil::ReadKeyset(const std::string& filename) { - auto keyset_reader = GetBinaryKeysetReader(filename); - auto keyset_handle_result = - CleartextKeysetHandle::Read(std::move(keyset_reader)); - if (!keyset_handle_result.ok()) { - std::clog << "Reading the keyset failed: " - << keyset_handle_result.status().message() << std::endl; - exit(1); - } - return std::move(keyset_handle_result.value()); -} - -// static -void CliUtil::WriteKeyset(const KeysetHandle& keyset_handle, - const std::string& filename) { - auto writer = GetBinaryKeysetWriter(filename); - auto status = writer->Write(CleartextKeysetHandle::GetKeyset(keyset_handle)); - if (!status.ok()) { - std::clog << "Writing the keyset failed: " << status.message() << std::endl; - exit(1); - } -} - -// static -void CliUtil::InitTink() { - std::clog << "Initializing Tink...\n"; - auto status = TinkConfig::Register(); - if (!status.ok()) { - std::clog << "Initialization of Tink failed: " << status.message() - << std::endl; - exit(1); - } -} - -// static -std::string CliUtil::Read(const std::string& filename) { - std::clog << "Reading the input...\n"; - std::ifstream input_stream; - input_stream.open(filename, std::ifstream::in); - if (!input_stream.is_open()) { - std::clog << "Error opening input file " << filename << std::endl; - exit(1); - } - std::stringstream input; - input << input_stream.rdbuf(); - input_stream.close(); - return input.str(); -} - -// static -void CliUtil::Write(const std::string& output, const std::string& filename) { - std::clog << "Writing the output...\n"; - std::ofstream output_stream(filename, - std::ofstream::out | std::ofstream::binary); - if (!output_stream.is_open()) { - std::clog << "Error opening output file " << filename << std::endl; - exit(1); - } - output_stream << output; - output_stream.close(); -} - -// static -void CliUtil::CopyStream(InputStream* input_stream, - OutputStream* output_stream) { - if (input_stream == nullptr || output_stream == nullptr) { - std::clog << "'input_stream' and 'output_stream' must be non-null" - << std::endl; - exit(1); - } - const void* in_buffer; - while (true) { - auto next_result = input_stream->Next(&in_buffer); - if (next_result.status().code() == absl::StatusCode::kOutOfRange) { - // End of stream. - auto status = output_stream->Close(); - if (!status.ok()) { - std::clog << "Error closing the output stream: " << status << std::endl; - exit(1); - } - return; - } - if (!next_result.ok()) { - std::clog << "Error reading from a stream: " << next_result.status() - << std::endl; - exit(1); - } - auto read_bytes = next_result.value(); - if (read_bytes > 0) { - WriteToStream(output_stream, in_buffer, read_bytes); - } - } -} |