// Copyright 2017 The Fuchsia Authors
//
// 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 <iostream>

#include "glog/logging.h"
#include "util/crypto_util/cipher.h"

int main(int argc, char* argv[]) {
  google::SetUsageMessage(
      "Generates a new public/private key pair using Cobalt's hybrid "
      "encryption scheme. Copy the keys into files named 'analyzer_public.pem' "
      "and 'analyzer_private.pem' or into files named 'shuffler_public.pem' "
      "and 'shuffler_private.pem' in your root Cobalt src directory");
  google::ParseCommandLineFlags(&argc, &argv, true);
  google::InitGoogleLogging(argv[0]);
  google::InstallFailureSignalHandler();

  std::string public_key_pem;
  std::string private_key_pem;
  cobalt::crypto::HybridCipher::GenerateKeyPairPEM(&public_key_pem,
                                                   &private_key_pem);
  std::cout << "\n";
  std::cout
      << "Copy the following public key into a file named "
         "'analyzer_public.pem' (or 'shuffler_public.pem')\n"
         "in your Cobalt source root directory.\n\n";
  // The bytes before and after the public_key_pem have the effect of
  // displaying the key in green on the console.
  std::cout << "\x1b[32;1m" << public_key_pem << "\x1b[0m";
  std::cout << "\n";
  // The bytes before and after the private_key_pem have the effect of
  // displaying the key in green on the console.
  std::cout << "Copy the following private key into a file named "
         "'analyzer_private.pem' (or 'shuffler_private.pem')\n"
         "in your Cobalt source root directory.\n\n";
  std::cout << "\x1b[32;1m" << private_key_pem << "\x1b[0m";

  exit(0);
}
