Task #3290
Updated by Yingdi Yu about 10 years ago
One module of the new Validator framework is `KeyManager` which manages trust anchors, verified keys, unverified keys, and key retrieval.
This issue designs KeyManager abstraction.
class KeyManager
{
public:
// create a KeyManager with @p face.
KeyManager(Face* face); KeyManager();
void
retrieve(const KeyRequest& req)
{
auto anchorIt = m_anchors.find(req.getInterest());
if (anchorIt != m_anchors.end()) {
return req.validationSuccessCallback(anchorIt->getData());
}
auto keyIt = m_verfiedKeyCache.find(req.getInterest());
if (keyIt != m_verfiedKeyCache.end()) {
return req.validationSuccessCallback(keyIt->getData());
}
auto uKeyIt = m_unverfiedKeyCache.find(req.getInterest());
if (uKeyIt != m_unverfiedKeyCache.end()) {
return req.retrivalSuccessCallback(uKeyIt->getData());
}
if (m_face != nullptr)
fetchKeyFromNetwork(req);
}
void
fetchKeyFromNetwork(const KeyRequest& req)
{
preProcess(const_cast<KeyRequest&> req);
m_face->expressInterest(req.getInterest(). res.retrivalSuccessCallback, res.retrivalTimeoutCallback);
}
void
loadAnchor(...);
void
loadVerifiedKey(...);
void
loadUnverifiedKey(...);
private:
virtual
preProcess(KeyRequest& req) = 0;
private:
Face* m_face;
TrustAnchorContainer m_anchors; // trust anchors
CertificateCache m_verfiedKeyCache; // cache of verified keys.
DataCache m_unverfiedKeyCache; // cache of unverified keys.
};