**breaking** mini-ndn: re-design

refs: #5062

Everything is now done through examples like Mininet.
bin/minindn no longer provided as a binary installed in the system
bin/minindnedit GUI: will no longer be maintained
Remove cluster edition, will be re-introduced later

Change-Id: Id4ef137cb2a04d1b0dd24d01941757363bbf7d26
diff --git a/patches/ndn-cxx-dummy-keychain-from-ndnsim.patch b/patches/ndn-cxx-dummy-keychain-from-ndnsim.patch
new file mode 100644
index 0000000..a6e1b30
--- /dev/null
+++ b/patches/ndn-cxx-dummy-keychain-from-ndnsim.patch
@@ -0,0 +1,602 @@
+diff --git a/ndn-cxx/security/v2/key-chain.cpp b/ndn-cxx/security/v2/key-chain.cpp
+index 8043635..b9af6f0 100644
+--- a/ndn-cxx/security/v2/key-chain.cpp
++++ b/ndn-cxx/security/v2/key-chain.cpp
+@@ -25,6 +25,7 @@
+ #include "ndn-cxx/util/config-file.hpp"
+ #include "ndn-cxx/util/logger.hpp"
+ #include "ndn-cxx/util/sha256.hpp"
++#include "ndn-cxx/util/dummy-keychain.hpp"
+ 
+ #include "ndn-cxx/security/pib/pib-memory.hpp"
+ #include "ndn-cxx/security/pib/pib-sqlite3.hpp"
+@@ -163,7 +164,7 @@ KeyChain::getDefaultKeyParams()
+ //
+ 
+ KeyChain::KeyChain()
+-  : KeyChain(getDefaultPibLocator(), getDefaultTpmLocator(), true)
++  : KeyChain("pib-dummy", "tpm-dummy", true)
+ {
+ }
+ 
+diff --git a/ndn-cxx/util/dummy-keychain.cpp b/ndn-cxx/util/dummy-keychain.cpp
+new file mode 100644
+index 0000000..aa24465
+--- /dev/null
++++ b/ndn-cxx/util/dummy-keychain.cpp
+@@ -0,0 +1,346 @@
++/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
++/**
++ * Copyright (c) 2011-2015  Regents of the University of California.
++ *
++ * This file is part of ndnSIM. See AUTHORS for complete list of ndnSIM authors and
++ * contributors.
++ *
++ * ndnSIM is free software: you can redistribute it and/or modify it under the terms
++ * of the GNU General Public License as published by the Free Software Foundation,
++ * either version 3 of the License, or (at your option) any later version.
++ *
++ * ndnSIM 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 General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * ndnSIM, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
++ **/
++
++#include "dummy-keychain.hpp"
++
++#include <ndn-cxx/util/io.hpp>
++#include <ndn-cxx/security/transform/public-key.hpp>
++#include <boost/iostreams/device/array.hpp>
++#include <boost/iostreams/stream.hpp>
++
++namespace ndn {
++namespace security {
++
++static const uint8_t DUMMY_CERT[] =
++    "Bv0CqQclCAVkdW1teQgDS0VZCAgtnChyuKo7YAgCTkEICf0AAAFe3zzGfBQJGAEC"
++    "GQQANu6AFf0BJjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOJSa1j6"
++    "JAzobrmtlUdJi38EWQZOigLykf9psImvIu7pa29Q3apBXENcV1E9687FmfY85Ec3"
++    "/onMtN7WG/wiuKiu/9eOr5WslD3VGDgxhesx80ygP0GNsN8FzsMl0lRKduXx3wG4"
++    "MCT8CX7uA4n4JbHY+0QaKUEEMRCiXcRAtF+yKfr+GaVeSemg+i/LR+6CSgpOyH0K"
++    "ogH9nlNhBn1Hxyc8X+B/nEu6P6NNEKkSnhT1jAbWtT1eL3BPGK/HNY19w9k2Ln6/"
++    "OYlhaHfB4m0oR/ePcUguQBwTgYS+40YQYUPivBsSQv3X2/7+gGLhIzA4YppwOooK"
++    "RGhbmL8zF2evmJ8CAwEAARZHGwEBHBgHFggFZHVtbXkIA0tFWQgILZwocriqO2D9"
++    "AP0m/QD+DzIwMTcxMDAyVDIyMzczNv0A/w8yMDE4MTAwMlQyMjM3MzUX/QEAMBUV"
++    "O51BEQwxp646i7IuHkuc1C/LISnOP2+wBFF2Ea1ht9MKjKkyJdmB1/GAOiR3njKd"
++    "UgRjBlownL11EwYDxkPY39RR05TmhF6PkpP81Ro/Vzv7rtSi/dxFIZXCiyuKPRUx"
++    "E0pZelPWVs3zMfqQ+8rWG89Kqs1vM0dglLBzlX9Lbim71TyLmaJaMmmBKv8+eQ22"
++    "CN71sRZOovl1kKcTHpOm61nD3C1n9GRflFtaMAXE/XU4zMJVzBv6XwQl6PCIc9H2"
++    "vjLa28ruVjhMGxqCGhziTC2eR56SUixrnEcbOKT0R+8+0AFnZIjdYglOZPcVwTVB"
++    "G6OxECJOuSoREcd1Ww==;";
++
++static const uint8_t DUMMY_SIGNATURE[] =
++    {0x17, 0xfd, 0x01, 0x00, 0x93, 0x15, 0x09, 0x49, 0x79, 0x9e, 0xb7, 0x9c, 0xd3, 0xc1, 0xbf, 0x61,
++     0x89, 0xd5, 0xd9, 0xca, 0xf2, 0xb0, 0x14, 0xae, 0x72, 0x7c, 0x1f, 0x8f, 0xf5, 0xb1, 0x70, 0xd6,
++     0x9b, 0x8f, 0xf8, 0xd7, 0x2d, 0xbc, 0x92, 0x6f, 0x7d, 0x77, 0x96, 0x46, 0xea, 0xd4, 0x7d, 0x90,
++     0xbc, 0x7a, 0xeb, 0xe2, 0x03, 0x93, 0xb1, 0xd2, 0x62, 0xec, 0x9d, 0xff, 0x9c, 0x9c, 0x2a, 0x14,
++     0x7d, 0x23, 0xca, 0x29, 0x3d, 0x15, 0x1a, 0x40, 0x42, 0x2c, 0x59, 0x33, 0x8a, 0xf7, 0xc0, 0x6b,
++     0xc4, 0x9c, 0xf3, 0xc4, 0x99, 0xa4, 0x1a, 0x60, 0xf5, 0x28, 0x7d, 0x4c, 0xef, 0x43, 0x7d, 0xbd,
++     0x7d, 0x00, 0x51, 0xee, 0x41, 0xf5, 0x25, 0x80, 0xce, 0xe6, 0x64, 0x4f, 0x75, 0x54, 0xf3, 0xb2,
++     0x99, 0x9a, 0x0f, 0x93, 0x9a, 0x28, 0x1d, 0xfe, 0x12, 0x8a, 0xe0, 0xc1, 0x02, 0xeb, 0xa4, 0x35,
++     0x52, 0x88, 0xac, 0x44, 0x1a, 0x44, 0x82, 0x97, 0x4f, 0x5f, 0xa8, 0xd8, 0x9f, 0x67, 0x38, 0xa8,
++     0x64, 0xb6, 0x62, 0x99, 0xbd, 0x96, 0x3c, 0xf5, 0x86, 0x09, 0x5c, 0x97, 0x6b, 0x8f, 0xae, 0xe0,
++     0x60, 0xe7, 0x23, 0x98, 0x6a, 0xee, 0xc1, 0xb0, 0x14, 0xbe, 0x46, 0x2c, 0xfb, 0xa7, 0x27, 0x73,
++     0xe4, 0xf3, 0x26, 0x33, 0xba, 0x99, 0xd4, 0x01, 0x38, 0xa8, 0xf2, 0x9e, 0x87, 0xe0, 0x71, 0x0b,
++     0x25, 0x44, 0x07, 0x35, 0x88, 0xab, 0x67, 0x27, 0x56, 0x0e, 0xb5, 0xb5, 0xe8, 0x27, 0xb4, 0x49,
++     0xdc, 0xb8, 0x48, 0x31, 0xff, 0x99, 0x48, 0xab, 0x11, 0xb4, 0xa0, 0xdf, 0x8a, 0x6d, 0xff, 0x43,
++     0x69, 0x32, 0xa7, 0xbc, 0x63, 0x9d, 0x0f, 0xe0, 0x95, 0x34, 0x36, 0x25, 0x4b, 0x3e, 0x36, 0xbd,
++     0x81, 0x91, 0x0b, 0x91, 0x9f, 0x3a, 0x04, 0xa2, 0x44, 0x28, 0x19, 0xa1, 0x38, 0x21, 0x4f, 0x25,
++     0x59, 0x8a, 0x48, 0xc2};
++
++const std::string DummyPib::SCHEME = "pib-dummy";
++const std::string DummyTpm::SCHEME = "tpm-dummy";
++
++NDN_CXX_V2_KEYCHAIN_REGISTER_PIB_BACKEND(DummyPib);
++NDN_CXX_V2_KEYCHAIN_REGISTER_TPM_BACKEND(DummyTpm);
++
++DummyPib::DummyPib(const std::string& locator)
++{
++}
++
++void
++DummyPib::setTpmLocator(const std::string& tpmLocator)
++{
++  m_tpmLocator = tpmLocator;
++}
++
++std::string
++DummyPib::getTpmLocator() const
++{
++  return m_tpmLocator;
++}
++
++bool
++DummyPib::hasIdentity(const Name& identityName) const
++{
++  return true;
++}
++
++void
++DummyPib::addIdentity(const Name& identityName)
++{
++}
++
++void
++DummyPib::removeIdentity(const Name& identity)
++{
++}
++
++void
++DummyPib::clearIdentities()
++{
++}
++
++std::set<Name>
++DummyPib::getIdentities() const
++{
++  std::set<Name> identities;
++  identities.insert("/dummy");
++  return identities;
++}
++
++void
++DummyPib::setDefaultIdentity(const Name& identityName)
++{
++}
++
++Name
++DummyPib::getDefaultIdentity() const
++{
++  return "/dummy";
++}
++
++bool
++DummyPib::hasKey(const Name& keyName) const
++{
++  return true;
++}
++
++void
++DummyPib::addKey(const Name& identity, const Name& keyName,
++                 const uint8_t* key, size_t keyLen)
++{
++}
++
++void
++DummyPib::removeKey(const Name& keyName)
++{
++}
++
++Buffer
++DummyPib::getKeyBits(const Name& keyName) const
++{
++    typedef boost::iostreams::stream<boost::iostreams::array_source> arrayStream;
++    arrayStream
++    is(reinterpret_cast<const char*>(DUMMY_CERT), sizeof(DUMMY_CERT));
++    auto cert = io::load<v2::Certificate>(is, io::BASE64);
++    return cert->getPublicKey();
++}
++
++std::set<Name>
++DummyPib::getKeysOfIdentity(const Name& identity) const
++{
++  std::set<Name> keys;
++  keys.insert("/dummy/KEY/-%9C%28r%B8%AA%3B%60");
++  return keys;
++}
++
++void
++DummyPib::setDefaultKeyOfIdentity(const Name& identity, const Name& keyName)
++{
++}
++
++Name
++DummyPib::getDefaultKeyOfIdentity(const Name& identity) const
++{
++  return "/dummy/KEY/-%9C%28r%B8%AA%3B%60";
++}
++
++bool
++DummyPib::hasCertificate(const Name& certName) const
++{
++  return true;
++}
++
++void
++DummyPib::addCertificate(const v2::Certificate& certificate)
++{
++}
++
++void
++DummyPib::removeCertificate(const Name& certName)
++{
++}
++
++v2::Certificate
++DummyPib::getCertificate(const Name& certificateName) const
++{
++  static shared_ptr<v2::Certificate> cert = nullptr;
++  if (cert == nullptr) {
++    typedef boost::iostreams::stream<boost::iostreams::array_source> arrayStream;
++    arrayStream
++    is(reinterpret_cast<const char*>(DUMMY_CERT), sizeof(DUMMY_CERT));
++    cert = io::load<v2::Certificate>(is, io::BASE64);
++  }
++
++  return *cert;
++}
++
++std::set<Name>
++DummyPib::getCertificatesOfKey(const Name& keyName) const
++{
++  std::set<Name> certs;
++  certs.insert("/dummy/KEY/-%9C%28r%B8%AA%3B%60/self/%FD%00%00%01%5E%DF%3Bv%01");
++  return certs;
++}
++
++void
++DummyPib::setDefaultCertificateOfKey(const Name& keyName, const Name& certName)
++{
++}
++
++v2::Certificate
++DummyPib::getDefaultCertificateOfKey(const Name& keyName) const
++{
++  static shared_ptr<v2::Certificate> cert = nullptr;
++  if (cert == nullptr) {
++    typedef boost::iostreams::stream<boost::iostreams::array_source> arrayStream;
++    arrayStream
++    is(reinterpret_cast<const char*>(DUMMY_CERT), sizeof(DUMMY_CERT));
++    cert = io::load<v2::Certificate>(is, io::BASE64);
++  }
++
++  return *cert;
++}
++
++std::string
++DummyPib::getScheme()
++{
++  return DummyPib::SCHEME;
++}
++
++//////////////////////////////////////////////////////////////////////////////////////////
++//////////////////////////////////////////////////////////////////////////////////////////
++//////////////////////////////////////////////////////////////////////////////////////////
++//////////////////////////////////////////////////////////////////////////////////////////
++
++namespace tpm {
++
++DummyKeyHandle::DummyKeyHandle(shared_ptr<transform::PrivateKey> key)
++{
++}
++
++ConstBufferPtr
++DummyKeyHandle::doSign(DigestAlgorithm digestAlgorithm, const uint8_t* buf, size_t size) const
++{
++  return make_shared<Buffer>(DUMMY_SIGNATURE, sizeof(DUMMY_SIGNATURE));
++}
++
++bool
++DummyKeyHandle::doVerify(DigestAlgorithm digestAlgorithm, const uint8_t* buf, size_t bufLen,
++                         const uint8_t* sig, size_t sigLen) const
++{
++  return true;
++}
++
++ConstBufferPtr
++DummyKeyHandle::doDecrypt(const uint8_t* cipherText, size_t cipherTextLen) const
++{
++  throw Error("Not supported");
++}
++
++ConstBufferPtr
++DummyKeyHandle::doDerivePublicKey() const
++{
++  throw Error("Not supported");
++}
++
++} // namespace tpm
++
++//////////////////////////////////////////////////////////////////////////////////////////
++//////////////////////////////////////////////////////////////////////////////////////////
++//////////////////////////////////////////////////////////////////////////////////////////
++//////////////////////////////////////////////////////////////////////////////////////////
++
++DummyTpm::DummyTpm(const std::string& locator)
++{
++}
++
++bool
++DummyTpm::isTerminalMode() const
++{
++  return false;
++}
++
++void
++DummyTpm::setTerminalMode(bool isTerminal) const
++{
++}
++
++bool
++DummyTpm::isTpmLocked() const
++{
++  return false;
++}
++
++bool
++DummyTpm::doHasKey(const Name& keyName) const
++{
++  return false;
++}
++
++unique_ptr<tpm::KeyHandle>
++DummyTpm::doGetKeyHandle(const Name& keyName) const
++{
++  unique_ptr<tpm::KeyHandle> m_dummyKeyHandle = make_unique<tpm::DummyKeyHandle>(nullptr);
++  return m_dummyKeyHandle;
++}
++
++unique_ptr<tpm::KeyHandle>
++DummyTpm::doCreateKey(const Name& identity, const KeyParams& params)
++{
++  unique_ptr<tpm::KeyHandle> m_dummyKeyHandle = make_unique<tpm::DummyKeyHandle>(nullptr);
++  return m_dummyKeyHandle;
++}
++
++void
++DummyTpm::doDeleteKey(const Name& keyName)
++{
++  throw Error("Not supported");
++}
++
++ConstBufferPtr
++DummyTpm::doExportKey(const Name& keyName, const char* pw, size_t pwLen)
++{
++  throw Error("Not supported");
++}
++
++void
++DummyTpm::doImportKey(const Name& keyName, const uint8_t* pkcs8, size_t pkcs8Len, const char* pw, size_t pwLen)
++{
++  throw Error("Not supported");
++}
++
++std::string
++DummyTpm::getScheme()
++{
++  return DummyTpm::SCHEME;
++}
++
++} // namespace security
++} // namespace ndn
+diff --git a/ndn-cxx/util/dummy-keychain.hpp b/ndn-cxx/util/dummy-keychain.hpp
+new file mode 100644
+index 0000000..d1432a6
+--- /dev/null
++++ b/ndn-cxx/util/dummy-keychain.hpp
+@@ -0,0 +1,223 @@
++/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
++/**
++ * Copyright (c) 2011-2015  Regents of the University of California.
++ *
++ * This file is part of ndnSIM. See AUTHORS for complete list of ndnSIM authors and
++ * contributors.
++ *
++ * ndnSIM is free software: you can redistribute it and/or modify it under the terms
++ * of the GNU General Public License as published by the Free Software Foundation,
++ * either version 3 of the License, or (at your option) any later version.
++ *
++ * ndnSIM 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 General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * ndnSIM, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
++ **/
++
++#ifndef NDNSIM_UTILS_DUMMY_KEYCHAIN_HPP
++#define NDNSIM_UTILS_DUMMY_KEYCHAIN_HPP
++
++#include <ndn-cxx/security/key-chain.hpp>
++#include <ndn-cxx/security/security-common.hpp>
++#include <ndn-cxx/security/pib/pib-impl.hpp>
++#include <ndn-cxx/security/tpm/back-end.hpp>
++#include <ndn-cxx/security/transform/private-key.hpp>
++
++namespace ndn {
++namespace security {
++
++using pib::PibImpl;
++using tpm::BackEnd;
++using tpm::KeyHandle;
++
++class DummyPib : public PibImpl
++{
++public:
++  class Error : public PibImpl::Error
++  {
++  public:
++    explicit
++    Error(const std::string& what)
++      : PibImpl::Error(what)
++    {
++    }
++  };
++
++public:
++  explicit DummyPib(const std::string& locator);
++
++  // TPM management
++  void
++  setTpmLocator(const std::string& tpmLocator) override;
++
++  std::string
++  getTpmLocator() const override;
++
++  // Identity manangement
++  bool
++  hasIdentity(const Name& identityName) const override;
++
++  void
++  addIdentity(const Name& identityName) override;
++
++  void
++  removeIdentity(const Name& identity) override;
++
++  void
++  clearIdentities() override;
++
++  std::set<Name>
++  getIdentities() const override;
++
++  void
++  setDefaultIdentity(const Name& identityName) override;
++
++  Name
++  getDefaultIdentity() const override;
++
++  // Key management
++  bool
++  hasKey(const Name& keyName) const override;
++
++  void
++  addKey(const Name& identity, const Name& keyName, const uint8_t* key,
++         size_t keyLen) override;
++
++  void
++  removeKey(const Name& keyName) override;
++
++  Buffer
++  getKeyBits(const Name& keyName) const override;
++
++  std::set<Name>
++  getKeysOfIdentity(const Name& identity) const override;
++
++  void
++  setDefaultKeyOfIdentity(const Name& identity, const Name& keyName) override;
++
++  Name
++  getDefaultKeyOfIdentity(const Name& identity) const override;
++
++  // certificate management
++  bool
++  hasCertificate(const Name& certName) const override;
++
++  void
++  addCertificate(const v2::Certificate& certificate) override;
++
++  void
++  removeCertificate(const Name& certName) override;
++
++  v2::Certificate
++  getCertificate(const Name& certificateName) const override;
++
++  std::set<Name>
++  getCertificatesOfKey(const Name& keyName) const override;
++
++  void
++  setDefaultCertificateOfKey(const Name& keyName, const Name& certName) override;
++
++  v2::Certificate
++  getDefaultCertificateOfKey(const Name& keyName) const override;
++
++  static std::string
++  getScheme();
++
++  static const std::string SCHEME;
++
++private:
++  std::string m_tpmLocator;
++};
++
++//////////////////////////////////////////////////////////////////////////////////////////
++//////////////////////////////////////////////////////////////////////////////////////////
++
++namespace tpm {
++
++class DummyKeyHandle : public KeyHandle
++{
++public:
++  explicit
++  DummyKeyHandle(shared_ptr<transform::PrivateKey> key);
++
++private:
++  ConstBufferPtr
++  doSign(DigestAlgorithm digestAlgorithm, const uint8_t* buf, size_t size) const final;
++
++  bool
++  doVerify(DigestAlgorithm digestAlgorithm, const uint8_t* buf, size_t bufLen,
++           const uint8_t* sig, size_t sigLen) const final;
++
++  ConstBufferPtr
++  doDecrypt(const uint8_t* cipherText, size_t cipherTextLen) const final;
++
++  ConstBufferPtr
++  doDerivePublicKey() const final;
++};
++
++} // namespace tpm
++
++//////////////////////////////////////////////////////////////////////////////////////////
++//////////////////////////////////////////////////////////////////////////////////////////
++
++class DummyTpm : public BackEnd
++{
++public:
++  class Error : public BackEnd::Error
++  {
++  public:
++    explicit
++    Error(const std::string& what)
++      : BackEnd::Error(what)
++    {
++    }
++  };
++
++public:
++  explicit DummyTpm(const std::string& locator);
++
++  bool
++  isTerminalMode() const override;
++
++  void
++  setTerminalMode(bool isTerminal) const override;
++
++  bool
++  isTpmLocked() const override;
++
++  ConstBufferPtr
++  sign(const uint8_t* buf, size_t size, const Name& keyName, DigestAlgorithm digestAlgorithm) const;
++
++  static std::string
++  getScheme();
++
++private:
++  bool
++  doHasKey(const Name& keyName) const final;
++
++  unique_ptr<tpm::KeyHandle>
++  doGetKeyHandle(const Name& keyName) const final;
++
++  unique_ptr<tpm::KeyHandle>
++  doCreateKey(const Name& identity, const KeyParams& params) final;
++
++  void
++  doDeleteKey(const Name& keyName) final;
++
++  ConstBufferPtr
++  doExportKey(const Name& keyName, const char* pw, size_t pwLen) final;
++
++  void
++  doImportKey(const Name& keyName, const uint8_t* pkcs8, size_t pkcs8Len, const char* pw, size_t pwLen) final;
++
++public:
++  static const std::string SCHEME;
++};
++
++} // namespace security
++} // namespace ndn
++
++#endif // NDNSIM_UTILS_DUMMY_KEYCHAIN_HPP