@@ -52,22 +52,19 @@ AttributeAuthority::AttributeAuthority(const security::Certificate& identityCert
52
52
NDN_THROW (std::runtime_error (" Unsupported ABE type: " + m_abeType));
53
53
}
54
54
55
- // prefix registrationexport NDN_LOG="nacabe.*=TRACE:ndn.security.Validator=DEBUG"
55
+ // prefix registration
56
56
m_registeredPrefix = m_face.registerPrefix (m_cert.getIdentity (),
57
57
[this ] (const Name& name) {
58
58
NDN_LOG_TRACE (" Prefix " << name << " registered successfully" );
59
59
60
60
// public parameters filter
61
61
auto hdl1 = m_face.setInterestFilter (Name (name).append (PUBLIC_PARAMS),
62
- std::bind (&CpAttributeAuthority ::onPublicParamsRequest, this , _2));
62
+ std::bind (&AttributeAuthority ::onPublicParamsRequest, this , _2));
63
63
m_interestFilters.emplace_back (hdl1);
64
64
NDN_LOG_TRACE (" InterestFilter " << Name (name).append (PUBLIC_PARAMS) << " set" );
65
65
66
66
// decryption key filter
67
- auto hdl2 = m_face.setInterestFilter (Name (name).append (DECRYPT_KEY),
68
- std::bind (&CpAttributeAuthority::onDecryptionKeyRequest, this , _2));
69
- m_interestFilters.emplace_back (hdl2);
70
- NDN_LOG_TRACE (" InterestFilter " << Name (name).append (DECRYPT_KEY) << " set" );
67
+ // this filter registration has been moved to the children constructors.
71
68
},
72
69
[] (const Name&, const auto & reason) {
73
70
NDN_LOG_ERROR (" Failed to register prefix: " << reason);
@@ -82,8 +79,6 @@ AttributeAuthority::onDecryptionKeyRequest(const Interest& request)
82
79
// naming1: /AA-prefix/DKEY/<key name block>
83
80
// naming2: /AA-prefix/DKEY/<key name block>/<version>/<segment>
84
81
Name requestName = request.getName ();
85
- NDN_LOG_INFO (" Got DKEY request: " << requestName);
86
-
87
82
Name supposedKeyName (request.getName ().at (m_cert.getIdentity ().size () + 1 ).blockFromValue ());
88
83
if (requestName.at (-1 ).isSegment () && requestName.at (-2 ).isVersion ()) {
89
84
NDN_LOG_DEBUG (" For DKEY segment --------> " << requestName);
@@ -99,7 +94,7 @@ AttributeAuthority::onDecryptionKeyRequest(const Interest& request)
99
94
else if (security::isValidKeyName (supposedKeyName)) {
100
95
NDN_LOG_DEBUG (" KeyName --------> " << supposedKeyName);
101
96
Name identityName = security::extractIdentityFromKeyName (supposedKeyName);
102
- // verify request and generate token
97
+ // fetch corresponding certificate
103
98
auto optionalCert = m_trustConfig.findCertificateFromLocal (supposedKeyName);
104
99
if (optionalCert) {
105
100
NDN_LOG_INFO (" Found local certificate for " << supposedKeyName << " , bypass certificate fetching..." );
@@ -168,6 +163,9 @@ CpAttributeAuthority::CpAttributeAuthority(const security::Certificate& identity
168
163
security::Validator& validator, KeyChain& keyChain)
169
164
: AttributeAuthority(identityCert, face, validator, keyChain, ABE_TYPE_CP_ABE)
170
165
{
166
+ // decryption key filter
167
+ m_face.setInterestFilter (Name (m_cert.getIdentity ()).append (DECRYPT_KEY),
168
+ std::bind (&CpAttributeAuthority::onDecryptionKeyRequest, this , _2));
171
169
}
172
170
173
171
void
@@ -195,11 +193,27 @@ CpAttributeAuthority::getPrivateKey(Name identityName)
195
193
return algo::ABESupport::getInstance ().cpPrvKeyGen (m_pubParams, m_masterKey, attrs);
196
194
}
197
195
196
+ void
197
+ CpAttributeAuthority::onDecryptionKeyRequest (const Interest& request)
198
+ {
199
+ Name requestName = request.getName ();
200
+ NDN_LOG_INFO (" CpAA Got DKEY request: " << requestName);
201
+
202
+ Name supposedKeyName (request.getName ().at (m_cert.getIdentity ().size () + 1 ).blockFromValue ());
203
+ Name identityName = security::extractIdentityFromKeyName (supposedKeyName);
204
+ if (m_tokens.find (identityName) != m_tokens.end ()) {
205
+ AttributeAuthority::onDecryptionKeyRequest (request);
206
+ }
207
+ }
208
+
198
209
KpAttributeAuthority::KpAttributeAuthority (const security::Certificate& identityCert, Face& face,
199
210
security::Validator& validator, KeyChain& keyChain,
200
211
size_t maxSegmentSize)
201
212
: AttributeAuthority(identityCert, face, validator, keyChain, ABE_TYPE_KP_ABE, maxSegmentSize)
202
213
{
214
+ // decryption key filter
215
+ m_face.setInterestFilter (Name (m_cert.getIdentity ()).append (DECRYPT_KEY),
216
+ std::bind (&KpAttributeAuthority::onDecryptionKeyRequest, this , _2));
203
217
}
204
218
205
219
void
@@ -224,5 +238,18 @@ KpAttributeAuthority::getPrivateKey(Name identityName)
224
238
return algo::ABESupport::getInstance ().kpPrvKeyGen (m_pubParams, m_masterKey, policy);
225
239
}
226
240
241
+ void
242
+ KpAttributeAuthority::onDecryptionKeyRequest (const Interest& request)
243
+ {
244
+ Name requestName = request.getName ();
245
+ NDN_LOG_INFO (" KpAA Got DKEY request: " << requestName);
246
+
247
+ Name supposedKeyName (request.getName ().at (m_cert.getIdentity ().size () + 1 ).blockFromValue ());
248
+ Name identityName = security::extractIdentityFromKeyName (supposedKeyName);
249
+ if (m_tokens.find (identityName) != m_tokens.end ()) {
250
+ AttributeAuthority::onDecryptionKeyRequest (request);
251
+ }
252
+ }
253
+
227
254
} // namespace nacabe
228
255
} // namespace ndn
0 commit comments