Add ProfileData
diff --git a/src/profile.h b/src/profile.h
new file mode 100644
index 0000000..403b600
--- /dev/null
+++ b/src/profile.h
@@ -0,0 +1,75 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2013, Regents of the University of California
+ *                     Yingdi Yu
+ *
+ * BSD license, See the LICENSE file for more information
+ *
+ * Author: Yingdi Yu <yingdi@cs.ucla.edu>
+ */
+
+#ifndef LINKNDN_PROFILE_H
+#define LINKNDN_PROFILE_H
+
+#include <ndn.cxx/common.h>
+#include <ndn.cxx/fields/name.h>
+#include <ndn.cxx/fields/blob.h>
+#include <map>
+#include <string>
+
+class Profile
+{
+public:
+  typedef std::map<std::string, ndn::Blob>::iterator iterator;
+  typedef std::map<std::string, ndn::Blob>::const_iterator const_iterator;
+public:
+  Profile() {}
+
+  Profile(const ndn::Name& identityName);
+
+  Profile(const ndn::Name& identityName,
+          const std::string& name,
+          const std::string& institution);
+  
+  Profile(const Profile& profile);
+  
+  virtual
+  ~Profile() {}
+
+  void
+  setProfileEntry(const std::string& profileType,
+                  const ndn::Blob& profileValue);
+  
+  ndn::Ptr<const ndn::Blob>
+  getProfileEntry(const std::string& profileType);
+
+  inline Profile::iterator
+  begin()
+  { return m_entries.begin(); }
+
+  inline Profile::const_iterator
+  begin() const
+  { return m_entries.begin(); }
+
+  inline Profile::iterator
+  end()
+  { return m_entries.end(); }
+
+  inline Profile::const_iterator
+  end() const
+  { return m_entries.end(); }
+
+  ndn::Ptr<ndn::Blob>
+  toDerBlob() const;
+
+  static ndn::Ptr<Profile>
+  fromDerBlob(const ndn::Blob& derBlob);
+
+protected:
+  ndn::Name m_identityName;
+  std::map<std::string, ndn::Blob> m_entries;
+};
+
+
+
+#endif