/// <summary> /// Find a certificate for the given interest. /// </summary> /// /// <param name="interest">The input interest packet.</param> /// <returns>The found certificate, or null if not found.</returns> /// @note Interest with implicit digest is not supported. /// @note ChildSelector is not supported. public CertificateV2 find(Interest interest) { refresh(); Name firstKey = (Name)anchors_.anchorsByName_.ceilingKey(interest .getName()); if (firstKey == null) { return(null); } /* foreach */ foreach (Object key in anchors_.anchorsByName_.navigableKeySet().tailSet( firstKey)) { CertificateV2 certificate = (CertificateV2)anchors_.anchorsByName_[(Name)key]; if (!interest.getName().isPrefixOf(certificate.getName())) { break; } try { if (interest.matchesData(certificate)) { return(certificate); } } catch (EncodingException ex) { // We don't expect this to happen. throw new Exception("Error in matchesData: " + ex); } } return(null); }
/// <summary> /// Find the certificate by the given interest. /// </summary> /// /// <param name="interest">The input interest object.</param> /// <returns>The found certificate which matches the interest, or null if not /// found. You must not modify the returned object. If you need to modify it, /// then make a copy.</returns> /// @note ChildSelector is not supported. public CertificateV2 find(Interest interest) { if (interest.getChildSelector() >= 0) { logger_.log( ILOG.J2CsMapping.Util.Logging.Level.FINE, "Certificate search using a ChildSelector is not supported. Searching as if this selector not specified"); } if (interest.getName().size() > 0 && interest.getName().get(-1).isImplicitSha256Digest()) { logger_.log(ILOG.J2CsMapping.Util.Logging.Level.FINE, "Certificate search using a name with an implicit digest is not yet supported"); } refresh(); Name firstKey = (Name)certificatesByName_.ceilingKey(interest .getName()); if (firstKey == null) { return(null); } /* foreach */ foreach (Object key in certificatesByName_.navigableKeySet().tailSet( firstKey)) { CertificateV2 certificate = ((CertificateCacheV2.Entry)certificatesByName_[(Name)key]).certificate_; if (!interest.getName().isPrefixOf(certificate.getName())) { break; } try { if (interest.matchesData(certificate)) { return(certificate); } } catch (EncodingException ex) { // We don't expect this. Promote to Error. throw new Exception("Error in Interest.matchesData: " + ex); } } return(null); }
public void testMatchesData() { Interest interest = new Interest(new Name("/A")); interest.setMinSuffixComponents(2); interest.setMaxSuffixComponents(2); interest.getKeyLocator().setType(net.named_data.jndn.KeyLocatorType.KEYNAME); interest.getKeyLocator().setKeyName(new Name("/B")); interest.getExclude().appendComponent(new Name.Component("J")); interest.getExclude().appendAny(); Data data = new Data(new Name("/A/D")); Sha256WithRsaSignature signature = new Sha256WithRsaSignature(); signature.getKeyLocator().setType(net.named_data.jndn.KeyLocatorType.KEYNAME); signature.getKeyLocator().setKeyName(new Name("/B")); data.setSignature(signature); Assert.AssertEquals(true, interest.matchesData(data)); // Check violating MinSuffixComponents. Data data1 = new Data(data); data1.setName(new Name("/A")); Assert.AssertEquals(false, interest.matchesData(data1)); Interest interest1 = new Interest(interest); interest1.setMinSuffixComponents(1); Assert.AssertEquals(true, interest1.matchesData(data1)); // Check violating MaxSuffixComponents. Data data2 = new Data(data); data2.setName(new Name("/A/E/F")); Assert.AssertEquals(false, interest.matchesData(data2)); Interest interest2 = new Interest(interest); interest2.setMaxSuffixComponents(3); Assert.AssertEquals(true, interest2.matchesData(data2)); // Check violating PublisherPublicKeyLocator. Data data3 = new Data(data); Sha256WithRsaSignature signature3 = new Sha256WithRsaSignature(); signature3.getKeyLocator().setType(net.named_data.jndn.KeyLocatorType.KEYNAME); signature3.getKeyLocator().setKeyName(new Name("/G")); data3.setSignature(signature3); Assert.AssertEquals(false, interest.matchesData(data3)); Interest interest3 = new Interest(interest); interest3.getKeyLocator().setType(net.named_data.jndn.KeyLocatorType.KEYNAME); interest3.getKeyLocator().setKeyName(new Name("/G")); Assert.AssertEquals(true, interest3.matchesData(data3)); Data data4 = new Data(data); data4.setSignature(new DigestSha256Signature()); Assert.AssertEquals(false, interest.matchesData(data4)); Interest interest4 = new Interest(interest); interest4.setKeyLocator(new KeyLocator()); Assert.AssertEquals(true, interest4.matchesData(data4)); // Check violating Exclude. Data data5 = new Data(data); data5.setName(new Name("/A/J")); Assert.AssertEquals(false, interest.matchesData(data5)); Interest interest5 = new Interest(interest); interest5.getExclude().clear(); interest5.getExclude().appendComponent(new Name.Component("K")); interest5.getExclude().appendAny(); Assert.AssertEquals(true, interest5.matchesData(data5)); // Check violating Name. Data data6 = new Data(data); data6.setName(new Name("/H/I")); Assert.AssertEquals(false, interest.matchesData(data6)); Data data7 = new Data(data); data7.setName(new Name("/A/B")); Interest interest7 = new Interest( new Name( "/A/B/sha256digest=" + "54008e240a7eea2714a161dfddf0dd6ced223b3856e9da96792151e180f3b128")); Assert.AssertEquals(true, interest7.matchesData(data7)); // Check violating the implicit digest. Interest interest7b = new Interest(new Name( "/A/B/%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00" + "%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00")); Assert.AssertEquals(false, interest7b.matchesData(data7)); // Check excluding the implicit digest. Interest interest8 = new Interest(new Name("/A/B")); interest8.getExclude().appendComponent(interest7.getName().get(2)); Assert.AssertEquals(false, interest8.matchesData(data7)); }