コード例 #1
0
    async def _receive(self, typ: int, data: BinaryStr):
        """
        Pipeline when a packet is received.

        :param typ: the Type.
        :param data: the Value of the packet with TL.
        """
        logging.debug('Packet received %s, %s' % (typ, bytes(data)))
        if typ == LpTypeNumber.LP_PACKET:
            try:
                nack_reason, fragment = parse_lp_packet(data, with_tl=True)
            except (DecodeError, TypeError, ValueError, struct.error):
                logging.warning('Unable to decode received packet')
                return
            data = fragment
            typ, _ = parse_tl_num(data)
        else:
            nack_reason = None

        if nack_reason is not None:
            try:
                name, _, _, _ = parse_interest(data, with_tl=True)
            except (DecodeError, TypeError, ValueError, struct.error):
                logging.warning('Unable to decode the fragment of LpPacket')
                return
            logging.debug('NetworkNack received %s, reason=%s' %
                          (Name.to_str(name), nack_reason))
            self._on_nack(name, nack_reason)
        else:
            if typ == TypeNumber.INTEREST:
                try:
                    name, param, app_param, sig = parse_interest(data,
                                                                 with_tl=True)
                except (DecodeError, TypeError, ValueError, struct.error):
                    logging.warning('Unable to decode received packet')
                    return
                logging.debug('Interest received %s' % Name.to_str(name))
                await self._on_interest(name,
                                        param,
                                        app_param,
                                        sig,
                                        raw_packet=data)
            elif typ == TypeNumber.DATA:
                try:
                    name, meta_info, content, sig = parse_data(data,
                                                               with_tl=True)
                except (DecodeError, TypeError, ValueError, struct.error):
                    logging.warning('Unable to decode received packet')
                    return
                logging.debug('Data received %s' % Name.to_str(name))
                await self._on_data(name,
                                    meta_info,
                                    content,
                                    sig,
                                    raw_packet=data)
            else:
                logging.warning('Unable to decode received packet')
コード例 #2
0
    def test_signed_interest_2():
        interest = (b'\x05\x6b\x07\x36\x08\x05local\x08\x03ndn\x08\x06prefix'
                    b'\x02 \x40\x77\xa5\x70\x49\xd8\x38\x48\xb5\x25\xa4\x23\xab\x97\x8e\x64'
                    b'\x80\xf9\x6d\x5c\xa3\x8a\x80\xa5\xe2\xd6\xe2\x50\xa6\x17\xbe\x4f'
                    b'\x0a\x04\x6c\x21\x11\x66\x0c\x02\x0f\xa0'
                    b'\x24\x00'
                    b'\x2c\x03\x1b\x01\x00'
                    b'\x2e \x09\x4e\x00\x9d\x74\x59\x82\x5c\xa0\x2d\xaa\xb7\xad\x60\x48\x30'
                    b'\x39\x19\xd8\x99\x80\x25\xbe\xff\xa6\xf9\x96\x79\xd6\x5e\x9f\x62')
        name, params, app_params, sig = parse_interest(interest)
        assert name == Name.from_str("/local/ndn/prefix"
                                     "/params-sha256=4077a57049d83848b525a423ab978e6480f96d5ca38a80a5e2d6e250a617be4f")
        assert params.nonce == 0x6c211166
        assert app_params == b''
        assert sig.signature_info.signature_type == SignatureType.DIGEST_SHA256

        algo = hashlib.sha256()
        for part in sig.digest_covered_part:
            algo.update(part)
        assert sig.digest_value_buf == algo.digest()

        algo = hashlib.sha256()
        for part in sig.signature_covered_part:
            algo.update(part)
        assert sig.signature_value_buf == algo.digest()
コード例 #3
0
    def test_signed_interest_1():
        interest = (b'\x05\x6f\x07\x36\x08\x05local\x08\x03ndn\x08\x06prefix'
                    b'\x02 \x8e\x6e\x36\xd7\xea\xbc\xde\x43\x75\x61\x40\xc9\x0b\xda\x09\xd5'
                    b'\x00\xd2\xa5\x77\xf2\xf5\x33\xb5\x69\xf0\x44\x1d\xf0\xa7\xf9\xe2'
                    b'\x0a\x04\x6c\x21\x11\x66\x0c\x02\x0f\xa0'
                    b'\x24\x04\x01\x02\x03\x04'
                    b'\x2c\x03\x1b\x01\x00'
                    b'\x2e \xea\xa8\xf0\x99\x08\x63\x78\x95\x1d\xe0\x5f\xf1\xde\xbb\xc1\x18'
                    b'\xb5\x21\x8b\x2f\xca\xa0\xb5\x1d\x18\xfa\xbc\x29\xf5\x4d\x58\xff')
        name, params, app_params, sig = parse_interest(interest)
        assert name == Name.from_str("/local/ndn/prefix"
                                     "/params-sha256=8e6e36d7eabcde43756140c90bda09d500d2a577f2f533b569f0441df0a7f9e2")
        assert params.nonce == 0x6c211166
        assert app_params == b'\x01\x02\x03\x04'
        assert sig.signature_info.signature_type == SignatureType.DIGEST_SHA256

        algo = hashlib.sha256()
        for part in sig.digest_covered_part:
            algo.update(part)
        assert sig.digest_value_buf == algo.digest()

        algo = hashlib.sha256()
        for part in sig.signature_covered_part:
            algo.update(part)
        assert sig.signature_value_buf == algo.digest()
コード例 #4
0
    def test_app_param():
        interest = (
            b'\x05\x42\x07\x36\x08\x05local\x08\x03ndn\x08\x06prefix'
            b'\x02 \x47\x75\x6f\x21\xfe\x0e\xe2\x65\x14\x9a\xa2\xbe\x3c\x63\xc5\x38'
            b'\xa7\x23\x78\xe9\xb0\xa5\x8b\x39\xc5\x91\x63\x67\xd3\x5b\xda\x10'
            b'\x0c\x02\x0f\xa0\x24\x04\x01\x02\x03\x04')
        name, params, app_params, sig = parse_interest(interest)
        assert name == Name.from_str(
            '/local/ndn/prefix'
            '/params-sha256=47756f21fe0ee265149aa2be3c63c538a72378e9b0a58b39c5916367d35bda10'
        )
        assert app_params == b'\x01\x02\x03\x04'
        assert not params.can_be_prefix
        assert not params.must_be_fresh
        assert params.nonce is None
        assert params.lifetime == 4000
        assert params.hop_limit is None
        assert sig.signature_info is None

        algo = hashlib.sha256()
        algo.update(b'\x24\x04\x01\x02\x03\x04')
        assert Component.get_value(name[-1]) == algo.digest()
        algo = hashlib.sha256()
        for part in sig.digest_covered_part:
            algo.update(part)
        assert sig.digest_value_buf == algo.digest()
コード例 #5
0
    def test_throws():
        with pytest.raises(IndexError):
            parse_interest(b'\x05\x6b\x07\x36\x08\x05local\x08\x03ndn\x08\x06prefix', True)

        with pytest.raises(IndexError):
            parse_interest(b'\x05\x6b\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix', True)

        with pytest.raises(ValueError):
            parse_interest(b'\x06\x6b\x07\x36\x08\x05local\x08\x03ndn\x08\x06prefix', True)

        with pytest.raises(DecodeError):
            parse_interest(b'\x01\x00', False)
コード例 #6
0
ファイル: ndnlp_v2_test.py プロジェクト: zjkmxy/python-ndn
 def test1():
     lp_packet = (
         b"\x64\x32\xfd\x03\x20\x05\xfd\x03\x21\x01\x96"
         b"\x50\x27\x05\x25\x07\x1f\x08\tlocalhost\x08\x03nfd\x08\x05faces\x08\x06events"
         b"\x21\x00\x12\x00")
     nack_reason, interest = parse_network_nack(lp_packet, True)
     assert nack_reason == NackReason.NO_ROUTE
     name, param, _, _ = parse_interest(interest)
     assert name == Name.from_str("/localhost/nfd/faces/events")
     assert param.must_be_fresh
     assert param.can_be_prefix
コード例 #7
0
 def test1():
     lp_packet = (
         b'\xfd\x03 \x05\xfd\x03!\x01\x96'
         b'P\x43\x05)\x07\x1f\x08\tlocalhost\x08\x03nfd\x08\x05faces\x08\x06events'
         b'\x21\x00\x12\x00\x0c\x02\x03\xe8')
     nack_reason, interest = parse_network_nack(lp_packet, False)
     assert nack_reason == NackReason.NO_ROUTE
     name, param, _, _ = parse_interest(interest)
     assert name == Name.from_str("/localhost/nfd/faces/events")
     assert param.must_be_fresh
     assert param.can_be_prefix
     assert param.lifetime == 1000
コード例 #8
0
 def test_default():
     interest = b'\x05\x1a\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix\x0c\x02\x0f\xa0'
     name, params, app_params, sig = parse_interest(interest)
     assert name == Name.from_str('/local/ndn/prefix')
     assert app_params is None
     assert not params.can_be_prefix
     assert not params.must_be_fresh
     assert params.nonce is None
     assert params.lifetime == 4000
     assert params.hop_limit is None
     assert sig.signature_info is None
     assert sig.signature_value_buf is None
     assert sig.digest_value_buf is None
コード例 #9
0
 def test_params():
     interest = (b'\x05\x26\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix'
                 b'\x21\x00\x12\x00\x0a\x04\x00\x00\x00\x00\x0c\x01\x0a\x22\x01\x01')
     name, params, app_params, sig = parse_interest(interest)
     assert name == Name.from_str('/local/ndn/prefix')
     assert app_params is None
     assert params.can_be_prefix
     assert params.must_be_fresh
     assert params.nonce == 0
     assert params.lifetime == 10
     assert params.hop_limit == 1
     assert sig.signature_info is None
     assert sig.signature_value_buf is None
     assert sig.digest_value_buf is None