**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