security: Implement most of Certificate.cpp
diff --git a/ndn-cpp/security/certificate/certificate.cpp b/ndn-cpp/security/certificate/certificate.cpp
new file mode 100644
index 0000000..9a01424
--- /dev/null
+++ b/ndn-cpp/security/certificate/certificate.cpp
@@ -0,0 +1,152 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/**
+ * Copyright (C) 2013 Regents of the University of California.
+ * @author: Yingdi Yu <yingdi@cs.ucla.edu>
+ * @author: Jeff Thompson <jefft0@remap.ucla.edu>
+ * See COPYING for copyright and distribution information.
+ */
+
+#include <float.h>
+#include <ndn-cpp/sha256-with-rsa-signature.hpp>
+#if 0
+#include "../../encoding/der/visitor/certificate-data-visitor.hpp"
+#include "../../encoding/der/visitor/print-visitor.hpp"
+#endif
+#include "../../util/logging.hpp"
+#include "../../c/util/time.h"
+#include <ndn-cpp/security/certificate/certificate.hpp>
+
+INIT_LOGGER("ndn.security.Certificate");
+
+using namespace std;
+using namespace ndn::ptr_lib;
+
+namespace ndn {
+
+Certificate::Certificate()
+ : notBefore_(DBL_MAX)
+ , notAfter_(-DBL_MAX)
+{}
+
+Certificate::Certificate(const Data& data)
+// Use the copy constructor. It clones the signature object.
+: Data(data)
+{
+ // _LOG_DEBUG("Finish local copy: " << getContent().getContent().size());
+
+ decode();
+}
+
+Certificate::~Certificate()
+{
+ //TODO:
+}
+
+bool
+Certificate::isTooEarly()
+{
+ Time now = ndn_getNowMilliseconds();
+ if(now < notBefore_)
+ return true;
+ else
+ return false;
+}
+
+bool
+Certificate::isTooLate()
+{
+ Time now = ndn_getNowMilliseconds();
+ if(now > notAfter_)
+ return true;
+ else
+ return false;
+}
+
+#if 0
+void
+Certificate::encode()
+{
+ Ptr<der::DerSequence> root = Ptr<der::DerSequence>::Create();
+
+ Ptr<der::DerSequence> validity = Ptr<der::DerSequence>::Create();
+ Ptr<der::DerGtime> notBefore = Ptr<der::DerGtime>(new der::DerGtime(notBefore_));
+ Ptr<der::DerGtime> notAfter = Ptr<der::DerGtime>(new der::DerGtime(notAfter_));
+ validity->addChild(notBefore);
+ validity->addChild(notAfter);
+ root->addChild(validity);
+
+ Ptr<der::DerSequence> subjectList = Ptr<der::DerSequence>::Create();
+ SubDescryptList::iterator it = m_subjectList.begin();
+ for(; it != m_subjectList.end(); it++)
+ {
+ Ptr<der::DerNode> child = it->toDER();
+ subjectList->addChild(child);
+ }
+ root->addChild(subjectList);
+
+ root->addChild(key_.toDER());
+
+ if(!m_extnList.empty())
+ {
+ Ptr<der::DerSequence> extnList = Ptr<der::DerSequence>::Create();
+ ExtensionList::iterator it = m_extnList.begin();
+ for(; it != m_extnList.end(); it++)
+ extnList->addChild(it->toDER());
+ root->addChild(extnList);
+ }
+
+ blob_stream blobStream;
+ OutputIterator& start = reinterpret_cast<OutputIterator&>(blobStream);
+
+ root->encode(start);
+
+ Ptr<Blob> blob = blobStream.buf();
+ Content content(blob->buf(), blob->size());
+ setContent(content);
+}
+#endif
+
+void
+Certificate::decode()
+{
+#if 0
+ Blob blob = getContent();
+
+ boost::iostreams::stream
+ <boost::iostreams::array_source> is(blob.buf(), blob.size());
+
+ shared_ptr<der::DerNode> node = der::DerNode::parse(reinterpret_cast<InputIterator&>(is));
+
+ // der::PrintVisitor printVisitor;
+ // node->accept(printVisitor, string(""));
+
+ der::CertificateDataVisitor certDataVisitor;
+ node->accept(certDataVisitor, this);
+#endif
+}
+
+#if 0
+void
+Certificate::printCertificate()
+{
+ cout << "Validity:" << endl;
+ cout << notBefore_ << endl;
+ cout << notAfter_ << endl;
+
+ cout << "Subject Info:" << endl;
+ vector<CertificateSubDescrypt>::iterator it = m_subjectList.begin();
+ for(; it < m_subjectList.end(); it++){
+ cout << it->getOidStr() << "\t" << it->getValue() << endl;
+ }
+
+ boost::iostreams::stream
+ <boost::iostreams::array_source> is(key_.getKeyBlob().buf (), m_key.getKeyBlob().size ());
+
+ Ptr<der::DerNode> keyRoot = der::DerNode::parse(reinterpret_cast<InputIterator&> (is));
+
+ der::PrintVisitor printVisitor;
+ keyRoot->accept(printVisitor, string(""));
+}
+#endif
+
+}