NDN project issue tracking system: Issueshttps://redmine.named-data.net/https://redmine.named-data.net/favicon.ico?14759811232017-09-29T00:12:37ZNDN project issue tracking system
Redmine jndn - Bug #4312 (Closed): ValidityPeriod of CertificateV2 cannot be set using certificateV2.getV...https://redmine.named-data.net/issues/43122017-09-29T00:12:37ZHaitao Zhangzhtaoxiang@126.com
<p>If I understand correctly, ValidityPeriod of CertificateV2 is supposed to be set using </p>
<pre><code>certificateV2.getValidityPeriod().setPeriod(now, now + 10 * 24 * 3600 * 1000.0);
</code></pre>
<p>However, it doesn't change ValidityPeriod of CertificateV2. If we use </p>
<pre><code>System.out.println(certificateV2.toString());
</code></pre>
<p>to print out a cert, ValidityPeriod information is always:</p>
<pre><code>Validity:
NotBefore: 2922789940817T071255
NotAfter: 2922690551202T164704
</code></pre>
<p>Due to the same reason, if we use</p>
<pre><code>keyChain.createIdentityV2();
</code></pre>
<p>to create a V2 identity, the default cert always has ValidityPeriod</p>
<pre><code>Validity:
NotBefore: 2922789940817T071255
NotAfter: 2922690551202T164704
</code></pre> jndn - Bug #4304 (Closed): AndroidSqlite3Pib should be used when create jndn-Android jar filehttps://redmine.named-data.net/issues/43042017-09-27T14:39:08ZHaitao Zhangzhtaoxiang@126.com
<p>On Android platform, PibSqlite3 should be replaced with AndroidSqlite3Pib.</p>
<p>For example, here (<a href="https://github.com/named-data/jndn/blob/master/src/net/named_data/jndn/security/KeyChain.java#L2028-L2032">https://github.com/named-data/jndn/blob/master/src/net/named_data/jndn/security/KeyChain.java#L2028-L2032</a>) and here (<a href="https://github.com/named-data/jndn/blob/master/src/net/named_data/jndn/security/KeyChain.java#L225">https://github.com/named-data/jndn/blob/master/src/net/named_data/jndn/security/KeyChain.java#L225</a>)</p>
ndn-cxx - Bug #4297 (Closed): 'ndnsec key-gen' does not create keys correctly on macOS when tpm=t...https://redmine.named-data.net/issues/42972017-09-21T23:27:54ZHaitao Zhangzhtaoxiang@126.com
<p>To reproduce the bug:</p>
<ol>
<li>In <code>/usr/local/etc/ndn/client.conf</code>, add <code>tpm=tpm-file</code></li>
<li>Run "<code>ndnsec key-gen /test</code>"</li>
<li>Run "<code>ndnsec list</code>", identity <code>/test</code> doesn't exist; check <code>pib.db</code> file, identity, key, cert corresponding to <code>/test</code> do not exist.</li>
</ol>
NFD-android - Bug #4174 (Closed): NAC causes NFD-Android to crash when runs on Androidhttps://redmine.named-data.net/issues/41742017-07-09T00:33:04ZHaitao Zhangzhtaoxiang@126.com
<p>NAC can serve DKEY correctly on MAC, but not on Android. (for Linux, I have tested) For example, the following code works correctly on MAC: when a consumer sends an Interest for the DKEY, the code can serve it correctly.</p>
<pre><code class="java syntaxhl" data-language="java"> <span class="nc">GroupManager</span> <span class="n">gm</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">GroupManager</span><span class="o">(</span><span class="k">new</span> <span class="nc">Name</span><span class="o">(</span><span class="s">"/prefix"</span><span class="o">),</span> <span class="k">new</span> <span class="nc">Name</span><span class="o">(</span><span class="s">"type"</span><span class="o">),</span>
<span class="k">new</span> <span class="nf">Sqlite3GroupManagerDb</span><span class="o">(</span><span class="s">"/tmp/gm.db"</span><span class="o">),</span> <span class="mi">2048</span><span class="o">,</span> <span class="mi">24</span> <span class="o">*</span> <span class="mi">365</span><span class="o">,</span> <span class="n">keyChain</span><span class="o">);</span>
<span class="nc">RepetitiveInterval</span> <span class="n">interval</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">RepetitiveInterval</span><span class="o">(</span>
<span class="nc">Schedule</span><span class="o">.</span><span class="na">fromIsoString</span><span class="o">(</span><span class="s">"20170701T000000"</span><span class="o">),</span>
<span class="nc">Schedule</span><span class="o">.</span><span class="na">fromIsoString</span><span class="o">(</span><span class="s">"20170730T000000"</span><span class="o">),</span>
<span class="mi">0</span><span class="o">,</span> <span class="mi">24</span><span class="o">,</span> <span class="mi">1</span><span class="o">,</span>
<span class="nc">RepetitiveInterval</span><span class="o">.</span><span class="na">RepeatUnit</span><span class="o">.</span><span class="na">DAY</span><span class="o">);</span>
<span class="nc">Schedule</span> <span class="n">schedule</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Schedule</span><span class="o">();</span>
<span class="n">schedule</span><span class="o">.</span><span class="na">addWhiteInterval</span><span class="o">(</span><span class="n">interval</span><span class="o">);</span>
<span class="nc">String</span> <span class="n">scheduleName</span> <span class="o">=</span> <span class="s">"schedule1"</span><span class="o">;</span>
<span class="n">gm</span><span class="o">.</span><span class="na">addSchedule</span><span class="o">(</span><span class="n">scheduleName</span><span class="o">,</span> <span class="n">schedule</span><span class="o">);</span>
<span class="n">gm</span><span class="o">.</span><span class="na">addMember</span><span class="o">(</span><span class="n">scheduleName</span><span class="o">,</span> <span class="n">keyChain</span><span class="o">.</span><span class="na">getCertificate</span><span class="o">(</span><span class="n">keyChain</span><span class="o">.</span><span class="na">getDefaultCertificateName</span><span class="o">()));</span>
<span class="nc">List</span> <span class="n">groupKeys</span> <span class="o">=</span> <span class="n">gm</span><span class="o">.</span><span class="na">getGroupKey</span><span class="o">(</span><span class="nc">Schedule</span><span class="o">.</span><span class="na">fromIsoString</span><span class="o">(</span><span class="s">"20170710T000000"</span><span class="o">),</span> <span class="kc">false</span><span class="o">);</span>
<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="o">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">groupKeys</span><span class="o">.</span><span class="na">size</span><span class="o">();</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="kd">final</span> <span class="nc">Data</span> <span class="n">oneKey</span> <span class="o">=</span> <span class="o">(</span><span class="nc">Data</span><span class="o">)</span> <span class="o">(</span><span class="n">groupKeys</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">i</span><span class="o">));</span>
<span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">oneKey</span><span class="o">.</span><span class="na">getName</span><span class="o">());</span>
<span class="n">face</span><span class="o">.</span><span class="na">registerPrefix</span><span class="o">(</span><span class="n">oneKey</span><span class="o">.</span><span class="na">getName</span><span class="o">(),</span> <span class="k">new</span> <span class="nc">OnInterestCallback</span><span class="o">()</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onInterest</span><span class="o">(</span><span class="nc">Name</span> <span class="n">name</span><span class="o">,</span> <span class="nc">Interest</span> <span class="n">intrst</span><span class="o">,</span> <span class="nc">Face</span> <span class="n">face</span><span class="o">,</span> <span class="kt">long</span> <span class="n">l</span><span class="o">,</span> <span class="nc">InterestFilter</span> <span class="n">i</span><span class="o">)</span> <span class="o">{</span>
<span class="k">try</span> <span class="o">{</span>
<span class="n">face</span><span class="o">.</span><span class="na">putData</span><span class="o">(</span><span class="n">oneKey</span><span class="o">);</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="nc">IOException</span> <span class="n">ex</span><span class="o">)</span> <span class="o">{</span>
<span class="nc">Logger</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="nc">TestRSA</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getName</span><span class="o">()).</span><span class="na">log</span><span class="o">(</span><span class="nc">Level</span><span class="o">.</span><span class="na">SEVERE</span><span class="o">,</span> <span class="kc">null</span><span class="o">,</span> <span class="n">ex</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span> <span class="k">new</span> <span class="nc">OnRegisterFailed</span><span class="o">()</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onRegisterFailed</span><span class="o">(</span><span class="nc">Name</span> <span class="n">name</span><span class="o">)</span> <span class="o">{</span>
<span class="k">throw</span> <span class="k">new</span> <span class="nf">UnsupportedOperationException</span><span class="o">(</span><span class="s">"Not supported yet."</span><span class="o">);</span> <span class="c1">//To change body of generated methods, choose Tools | Templates.</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
</code></pre>
<p>When the same code runs on Android (need to modify the db parameter to be new AndroidSqlite3GroupManagerDb(getApplicationContext().getFilesDir().getAbsolutePath() + "/tmp.db"), it doesn't work correctly: when a consumer sends an Interest for the DKEY, and NFD-Android crashes when it tries to forward the DKEY. Following is the error reported by NFD-Android, it seems that the MetaInfo cannot be decoded correctly by NFD-Android.</p>
<pre><code>07-08 18:02:30.930 137-137/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
07-08 18:02:30.931 137-137/? I/DEBUG: Build fingerprint: 'google/yakju/maguro:4.3/JWR66Y/776638:user/release-keys'
07-08 18:02:30.931 137-137/? I/DEBUG: Revision: '9'
07-08 18:02:30.931 137-137/? I/DEBUG: ABI: 'arm'
07-08 18:02:30.931 137-137/? I/DEBUG: pid: 18957, tid: 18989, name: vice.NfdService >>> net.named_data.nfd.service.NfdService <<<
07-08 18:02:30.931 137-137/? I/DEBUG: signal 7 (SIGBUS), code 128 (SI_KERNEL), fault addr 0x0
07-08 18:02:30.970 137-137/? I/DEBUG: r0 00000007 r1 53eb341c r2 00000008 r3 4869c142
07-08 18:02:30.970 137-137/? I/DEBUG: r4 40137de4 r5 53eb341c r6 53c10664 r7 40137de4
07-08 18:02:30.970 137-137/? I/DEBUG: r8 485d127c r9 485d1378 sl 485d13a4 fp 53eb37f0
07-08 18:02:30.970 137-137/? I/DEBUG: ip 00000001 sp 53eb33e0 lr 53acdc37 pc 53acdb58 cpsr 200f0030
07-08 18:02:30.970 137-137/? I/DEBUG: backtrace:
07-08 18:02:30.971 137-137/? I/DEBUG: #00 pc 00160b58 /data/app/net.named_data.nfd-1/lib/arm/libndn-cxx.so (unsigned long long ndn::tlv::readNonNegativeInteger<__gnu_cxx::__normal_iterator<unsigned char const*, std::vector<unsigned char, std::allocator<unsigned char> > > >(unsigned int, __gnu_cxx::__normal_iterator<unsigned char const*, std::vector<unsigned char, std::allocator<unsigned char> > >&, __gnu_cxx::__normal_iterator<unsigned char const*, std::vector<unsigned char, std::allocator<unsigned char> > > const&)+303)
07-08 18:02:30.971 137-137/? I/DEBUG: #01 pc 00160c33 /data/app/net.named_data.nfd-1/lib/arm/libndn-cxx.so (ndn::encoding::readNonNegativeInteger(ndn::Block const&)+34)
07-08 18:02:30.971 137-137/? I/DEBUG: #02 pc 0017b171 /data/app/net.named_data.nfd-1/lib/arm/libndn-cxx.so (ndn::MetaInfo::wireDecode(ndn::Block const&)+100)
07-08 18:02:30.971 137-137/? I/DEBUG: #03 pc 0015fa9b /data/app/net.named_data.nfd-1/lib/arm/libndn-cxx.so (ndn::Data::wireDecode(ndn::Block const&)+64)
07-08 18:02:30.971 137-137/? I/DEBUG: #04 pc 0015fba7 /data/app/net.named_data.nfd-1/lib/arm/libndn-cxx.so (ndn::Data::Data(ndn::Block const&)+82)
07-08 18:02:30.971 137-137/? I/DEBUG: #05 pc 00102299 /data/app/net.named_data.nfd-1/lib/arm/libnfd-daemon.so (nfd::face::GenericLinkService::decodeData(ndn::Block const&, ndn::lp::Packet const&)+72)
07-08 18:02:30.972 137-137/? I/DEBUG: #06 pc 00102653 /data/app/net.named_data.nfd-1/lib/arm/libnfd-daemon.so (nfd::face::GenericLinkService::decodeNetPacket(ndn::Block const&, ndn::lp::Packet const&)+62)
07-08 18:02:30.972 137-137/? I/DEBUG: #07 pc 00102a61 /data/app/net.named_data.nfd-1/lib/arm/libnfd-daemon.so (nfd::face::GenericLinkService::doReceivePacket(nfd::face::Transport::Packet&&)+656)
07-08 18:02:30.972 137-137/? I/DEBUG: #08 pc 0010eb59 /data/app/net.named_data.nfd-1/lib/arm/libnfd-daemon.so (nfd::face::StreamTransport<boost::asio::ip::tcp>::handleReceive(boost::system::error_code const&, unsigned int)+348)
07-08 18:02:30.972 137-137/? I/DEBUG: #09 pc 0010f107 /data/app/net.named_data.nfd-1/lib/arm/libnfd-daemon.so (boost::asio::detail::reactive_socket_recv_op<boost::asio::mutable_buffers_1, boost::_bi::bind_t<void, boost::_mfi::mf2<void, nfd::face::StreamTransport<boost::asio::ip::tcp>, boost::system::error_code const&, unsigned int>, boost::_bi::list3<boost::_bi::value<nfd::face::StreamTransport<boost::asio::ip::tcp>*>, boost::arg<1> (*)(), boost::arg<2> (*)()> > >::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::ta
07-08 18:02:30.973 137-137/? I/DEBUG: #10 pc 00010f47 /data/app/net.named_data.nfd-1/lib/arm/libnfd-wrapper.so (boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&, boost::asio::detail::task_io_service_thread_info&, boost::system::error_code const&)+198)
07-08 18:02:30.973 137-137/? I/DEBUG: #11 pc 0001101b /data/app/net.named_data.nfd-1/lib/arm/libnfd-wrapper.so (boost::asio::detail::task_io_service::run(boost::system::error_code&)+122)
07-08 18:02:30.974 137-137/? I/DEBUG: #12 pc 0001536b /data/app/net.named_data.nfd-1/lib/arm/libnfd-wrapper.so
07-08 18:02:30.974 137-137/? I/DEBUG: #13 pc 0000de60 /data/app/net.named_data.nfd-1/lib/arm/libboost_thread.so
07-08 18:02:30.974 137-137/? I/DEBUG: #14 pc 000135a3 /system/lib/libc.so (__pthread_start(void*)+30)
07-08 18:02:30.974 137-137/? I/DEBUG: #15 pc 000114cf /system/lib/libc.so (__start_thread+6)
</code></pre> jndn - Bug #4161 (Closed): RSA encryption is not working on Androidhttps://redmine.named-data.net/issues/41612017-07-05T11:02:38ZHaitao Zhangzhtaoxiang@126.com
<p>When RSA encryption is used on Android, there will be an exception: "java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block"</p>
<p>For example, the following code works well on MAC, <br>
RsaKeyParams params = new RsaKeyParams(2048);<br>
DecryptKey memberDecryptKey = RsaAlgorithm.generateKey(params);<br>
Blob decryptKeyBlob = memberDecryptKey.getKeyBits();<br>
EncryptKey memberEncryptKey = RsaAlgorithm.deriveEncryptKey(decryptKeyBlob);<br>
Blob encryptKeyBlob = memberEncryptKey.getKeyBits();<br>
EncryptParams encryptParams = new EncryptParams(EncryptAlgorithmType.RsaOaep);<br>
Name name = new Name("test");<br>
Data data = new Data(name);<br>
Encryptor.encryptData(data, decryptKeyBlob, name,<br>
encryptKeyBlob, encryptParams);</p>
<p>But when it is run on Android, there will be an exception:<br>
java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block<br>
at com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi.engineDoFinal(CipherSpi.java:462)<br>
at javax.crypto.Cipher.doFinal(Cipher.java:1340)<br>
at net.named_data.jndn.encrypt.algo.RsaAlgorithm.encrypt(RsaAlgorithm.java:170)<br>
at net.named_data.jndn.encrypt.algo.Encryptor.encryptAsymmetric(Encryptor.java:193)<br>
at net.named_data.jndn.encrypt.algo.Encryptor.encryptData(Encryptor.java:91)</p>
<p>it's because the implementation of Cipher.java on Android is different from that of oracle java</p>
NDN-CCL - Bug #4160 (Rejected): the default time uint is millisecond while ndn-cxx uses nanosecondhttps://redmine.named-data.net/issues/41602017-07-05T10:56:37ZHaitao Zhangzhtaoxiang@126.com
<p>This causes problems when programs based on ndn-ccl libraries need to communicate with problems based on ndn-cxx</p>
NFD-android - Feature #4028 (Closed): Discover and connect to the nearest hub using NDN-FCH server.https://redmine.named-data.net/issues/40282017-03-31T16:05:05ZHaitao Zhangzhtaoxiang@126.com
<p>This function is part of "NDN hub discovery procedure." (see details here <a href="https://named-data.net/doc/NFD/current/manpages/ndn-autoconfig.html">https://named-data.net/doc/NFD/current/manpages/ndn-autoconfig.html</a>)</p>
<p>When an end host starts up, or detects a change in its network environment, it MAY use this procedure to discover a local or home NDN router, in order to gain connectivity to the NDN research testbed.</p>
<p>On Android platform, we decide to implement the function "Find closest hub by sending an HTTP request to NDN-FCH server".</p>
ndn-cxx - Feature #3979 (Closed): Configure Face::expressInterest to allow forward Interest to th...https://redmine.named-data.net/issues/39792017-02-26T23:42:26ZHaitao Zhangzhtaoxiang@126.com
<p>The feature adds new APIs to configure the behavior of <code>Face::expressInterest</code>: (1) set it to forward an Interest toward an <code>InterestFilter</code> registered on the same ndn::Face. (2) or set it not to do that.</p>
<p>This feature allows <code>BundleBuilder</code> to collect certificates by simply expressing Interests, solving <a class="issue tracker-2 status-9 priority-2 priority-default closed" title="Feature: Integrate publishing of KeyBundle into Face::setInterestFilter (Abandoned)" href="https://redmine.named-data.net/issues/3892#note-16">#3892-16</a>.</p>
<p>In general, this feature simplifies the implementation of an application if this application itself produces the data it is interested in and saves data in remote repos. Using the current <code>Face::expressInterest</code>, the application needs to check whether an Interest can be satisfied locally, if not, the application sends Interest to network to fetch data; or conversely. After this feature is enabled, the application could simply send Interest to face to fetch data, and has face/network decide how to fetch data.</p>
<p>The tasks of enabling this feature include:</p>
<ul>
<li>Deciding a name for this property.</li>
<li>Implementing an API to configure (a) whether some (Interest with specific) prefixes are allowed to forward to the incoming face; (b) if allowed, forward Interest back to the same face first or send Interest to network first.</li>
</ul>
NFD-android - Feature #3973 (New): Identity Managerhttps://redmine.named-data.net/issues/39732017-02-20T14:27:15ZHaitao Zhangzhtaoxiang@126.com
<p>A new identity manager module, used for creating identity and requesting certificate from an NDNCERT server.</p>
NFD - Bug #3786 (Duplicate): Interest with Link not forwarded after same Interest without Link is...https://redmine.named-data.net/issues/37862016-09-16T12:35:04ZHaitao Zhangzhtaoxiang@126.com
<p><strong>Case 1</strong></p>
<p>Topology and route:</p>
<pre><code> /a
A ------> B
</code></pre>
<ol>
<li>A expresses Interest i1 <code>/example/testApp/randomData</code> without Link object.</li>
<li>A waits for i1 to timeout.</li>
<li>A delays a short period of time (see below).</li>
<li>A expresses Interest i2 <code>/example/testApp/randomData</code> with Link object delegating <code>/example/testApp</code> to <code>/a</code>.</li>
</ol>
<p>Expected: Interest i2 is forwarded to B.<br><br>
Actual: Interest i2 is not forwarded to B if step3 delay is less than 100ms. The behavior is as expected if step3 delay is greater than 100ms.</p>
<p><strong>Case 2</strong></p>
<p>Topology and route:</p>
<pre><code> /example /a
C <---------- A ------> B
</code></pre>
<ol>
<li>A expresses Interest i1 <code>/example/testApp/randomData</code> without Link object; InterestLifetime is set to 1000ms.</li>
<li>i1 is forwarded to C.</li>
<li>C responds Nack-NoRoute to A.</li>
<li>A waits for the Nack.</li>
<li>A delays a short period of time (see below).</li>
<li>A expresses Interest i2 <code>/example/testApp/randomData</code> with Link object delegating <code>/example/testApp</code> to <code>/a</code>.</li>
</ol>
<p>Expected: Interest i2 is forwarded to B.<br><br>
Actual: Interest i2 is forwarded to C if step5 delay is less than 1000ms. The behavior is as expected if step5 delay is greater than 1000ms.</p>
NFD - Bug #3440 (Closed): RibManager: rib/register succeeds with non-existent facehttps://redmine.named-data.net/issues/34402016-01-30T23:29:12ZHaitao Zhangzhtaoxiang@126.com
<p>Steps to reproduce:</p>
<ol>
<li>execute <code>nfd-status -f</code> and make sure face 400 does not exist, and is not the next FaceId to be created</li>
<li><code>nfdc register /org/openmhealth 400</code></li>
</ol>
<p>Expected: 410 error<br><br>
Actual: <code>Successful in name registration: ControlParameters(Name: /org/openmhealth, FaceId: 400, Origin: 255, Cost: 0, Flags: 1, )</code></p>
NFD - Bug #3410 (Rejected): nfd-status does not list all the routeshttps://redmine.named-data.net/issues/34102016-01-14T00:13:58ZHaitao Zhangzhtaoxiang@126.com
<p>Example:</p>
<ol>
<li>use nfdc to set forwarding strategy for /org/openmhealth to be multicast</li>
<li>use nfdc set two next hops for /org/openmhealth</li>
<li>use nfd-status to check next hops, only the first added one will be listed</li>
</ol>
NFD-android - Bug #3409 (Closed): NFD-Android stops forwarding packets after running for about 15...https://redmine.named-data.net/issues/34092016-01-14T00:03:27ZHaitao Zhangzhtaoxiang@126.com