identity-impl.cpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
22 #include "identity-impl.hpp"
23 #include "../pib-impl.hpp"
24 #include "../pib.hpp"
25 
26 namespace ndn {
27 namespace security {
28 namespace pib {
29 namespace detail {
30 
31 IdentityImpl::IdentityImpl(const Name& identityName, shared_ptr<PibImpl> impl, bool needInit)
32  : m_name(identityName)
33  , m_isDefaultKeyLoaded(false)
34  , m_keys(identityName, impl)
35  , m_impl(impl)
36 {
37  BOOST_ASSERT(impl != nullptr);
38 
39  if (needInit) {
40  m_impl->addIdentity(m_name);
41  }
42  else if (!m_impl->hasIdentity(m_name)) {
43  BOOST_THROW_EXCEPTION(Pib::Error("Identity " + m_name.toUri() + " does not exist"));
44  }
45 }
46 
47 Key
48 IdentityImpl::addKey(const uint8_t* key, size_t keyLen, const Name& keyName)
49 {
50  BOOST_ASSERT(m_keys.isConsistent());
51 
52  if (m_keys.find(keyName) != m_keys.end()) {
53  BOOST_THROW_EXCEPTION(Pib::Error("Cannot overwrite existing key " + keyName.toUri()));
54  }
55 
56  return m_keys.add(key, keyLen, keyName);
57 }
58 
59 void
61 {
62  BOOST_ASSERT(m_keys.isConsistent());
63 
64  if (m_isDefaultKeyLoaded && m_defaultKey.getName() == keyName)
65  m_isDefaultKeyLoaded = false;
66 
67  m_keys.remove(keyName);
68 }
69 
70 Key
71 IdentityImpl::getKey(const Name& keyName) const
72 {
73  BOOST_ASSERT(m_keys.isConsistent());
74 
75  return m_keys.get(keyName);
76 }
77 
78 const KeyContainer&
80 {
81  BOOST_ASSERT(m_keys.isConsistent());
82 
83  return m_keys;
84 }
85 
86 const Key&
88 {
89  BOOST_ASSERT(m_keys.isConsistent());
90 
91  m_defaultKey = m_keys.get(keyName);
92  m_isDefaultKeyLoaded = true;
93  m_impl->setDefaultKeyOfIdentity(m_name, keyName);
94  return m_defaultKey;
95 }
96 
97 const Key&
98 IdentityImpl::setDefaultKey(const uint8_t* key, size_t keyLen, const Name& keyName)
99 {
100  addKey(key, keyLen, keyName);
101  return setDefaultKey(keyName);
102 }
103 
104 const Key&
106 {
107  BOOST_ASSERT(m_keys.isConsistent());
108 
109  if (!m_isDefaultKeyLoaded) {
110  m_defaultKey = m_keys.get(m_impl->getDefaultKeyOfIdentity(m_name));
111  m_isDefaultKeyLoaded = true;
112  }
113 
114  BOOST_ASSERT(m_impl->getDefaultKeyOfIdentity(m_name) == m_defaultKey.getName());
115 
116  return m_defaultKey;
117 }
118 
119 } // namespace detail
120 } // namespace pib
121 } // namespace security
122 } // namespace ndn
const_iterator find(const Name &keyName) const
const Name & getName() const
Definition: key.cpp:38
Copyright (c) 2013-2016 Regents of the University of California.
Definition: common.hpp:74
represents a semantic error
Definition: pib.hpp:56
void remove(const Name &keyName)
Remove a key with keyName from the container.
bool isConsistent() const
Check if the container is consistent with the backend storage.
const KeyContainer & getKeys() const
Get all keys for this Identity.
const Key & setDefaultKey(const Name &keyName)
Set the key with id keyName.
std::string toUri() const
Encode this name as a URI.
Definition: name.cpp:171
Key getKey(const Name &keyName) const
Get a key with id keyName.
Container of keys of an identity.
A frontend handle of a key instance.
Definition: key.hpp:49
Key add(const uint8_t *key, size_t keyLen, const Name &keyName)
Add key of keyLen bytes with keyName into the container.
Name abstraction to represent an absolute name.
Definition: name.hpp:46
Key get(const Name &keyName) const
Get a key with keyName from the container.
void removeKey(const Name &keyName)
Remove a key with keyName.
Key addKey(const uint8_t *key, size_t keyLen, const Name &keyName)
Add a key of keyLen bytes with keyName (in PKCS#8 format).
const Key & getDefaultKey() const
Get the default key for this Identity.
const_iterator end() const
IdentityImpl(const Name &identityName, shared_ptr< PibImpl > impl, bool needInit=false)
Create an Identity with identityName.