def __init__ (self):
        self.face = ndn.Face ()

        self.dataReceived = False
        self.timeoutReceived = False

        self.face.expressInterest ("/forty/two", self.onData, self.onTimeout)
Esempio n. 2
0
    def run (self):
        _LOG.info ('Daemon started')

        self._ndns = ndns.ndns_session (self.data_dir)
        self._face = ndn.Face ()

        self._startZoneServing ()

        self._eventLoop = ndn.EventLoop (self._face)
        self._eventLoop.run ()

        _LOG.info ('Daemon stopped')
Esempio n. 3
0
	def __init__(self, base_name, callback, handle=None, version=None, latest=True):
		handle = handle or ndn.Face()

		# some constants
		self.version_marker = '\xfd'
		self.first_version_marker = self.version_marker
		self.last_version_marker = '\xfe\x00\x00\x00\x00\x00\x00'

		self.base_name = ndn.Name(base_name)
		self.callback = callback
		self.handle = handle
		self.latest_version = version or self.first_version_marker
		self.start_with_latest = latest
Esempio n. 4
0
    def __init__(self, prefix, callback):
        self.gui_callback = callback
        self.friendly_names = {}

        self.handle = ndn.Face()
        self.chat_uri = ndn.Name(prefix)
        self.members_uri = self.chat_uri + "members"

        self.net_pull = VersionedPull(self.chat_uri, None, handle=self.handle)

        self.default_key = self.handle.getDefaultKey()
        digest = fix_digest(self.default_key.publicKeyID)
        self.friendly_names[digest] = getpass.getuser()
Esempio n. 5
0
    def __init__(self, prefix, nick=getpass.getuser()):
        self.handle = ndn.Face()
        self.flow = FlowController(prefix, self.handle)

        #XXX: temporary, until we allow fetching key from key storage
        self.key = self.handle.getDefaultKey()
        self.keylocator = ndn.KeyLocator(self.key)

        self.prefix = ndn.Name(prefix)
        self.members_uri = self.prefix + "members"

        member_name = self.members_uri.appendKeyID(
            fix_digest(self.key.publicKeyID))
        self.member_message = self.publish(member_name, nick)
        self.flow.put(self.member_message)
Esempio n. 6
0
def main(args):
	if len(sys.argv) != 2:
		usage()

	name = ndn.Name(sys.argv[1])
	data = ndnb_enumerate(generate_names())

	key = ndn.Face.getDefaultKey()
	name = name.append('\xc1.E.be').appendKeyID(key).appendVersion()

	wrapper = Wrapper(name, key)
	sgmtr = segmenter(data, wrapper)

	handle = ndn.Face()
	for seg in sgmtr:
		handle.put(seg)

	return 0
Esempio n. 7
0
    def verifyAsync(self, face, dataPacket, onVerify, limit_left=10):
        """
        onVerify: callback <void, dataPacket, status>
        """

        if limit_left <= 0:
            onVerify(dataPacket, False)
            return

        if len(self.anchors) == 0:
            onVerify(dataPacket, False)
            return

        if not face:
            face = ndn.Face()
            face.defer_verification(True)

        data_name = dataPacket.name
        key_name = dataPacket.signedInfo.keyLocator.keyName

        try:
            [key_data, ttl] = self.trustedCache[str(data_name)]
            if time.time() > ttl:
                del self.trustedCache[str(data_name)]
                raise KeyError()

            onVerify(dataPacket, True)
            return
        except KeyError:
            pass

        _LOG.debug("%s data [%s] signed by [%s]" %
                   ('--' * (11 - limit_left), data_name, key_name))

        anchor = self.authorize_by_anchor(data_name, key_name)
        if anchor:
            verified = dataPacket.verify_signature(anchor)
            if verified:
                _LOG.info("%s anchor OKs [%s] (**[%s]**)" %
                          ('--' * (11 - limit_left), data_name, key_name))
            else:
                _LOG.info("%s anchor FAILs [%s]" %
                          ('--' * (11 - limit_left), data_name))
            onVerify(dataPacket, verified)
            return

        if not self.authorize_by_rule(data_name, key_name):
            onVerify(dataPacket, False)
            return

        try:
            [key, ttl] = self.trustedCache[str(key_name)]
            if time.time() > ttl:
                del self.trustedCache[str(key_name)]
                raise KeyError()

            _LOG.info("%s Using cached trusted version of key [%s]" %
                      ('--' * (11 - limit_left), key_name))

            onVerify(dataPacket, dataPacket.verify_signature(key))
            return
        except KeyError:
            zone = ndn.Name()
            for comp in key_name:
                if comp == "DNS":
                    break
                zone = zone.append(comp)

            nextLevelProcessor = NextLevelProcessor(face, self, dataPacket,
                                                    onVerify, limit_left,
                                                    key_name)

            if comp != "DNS":
                face.expressInterest(key_name, nextLevelProcessor.onData,
                                     nextLevelProcessor.onTimeout)
            elif len(zone) == 0:
                self.cachingQuery.expressQueryForRaw(
                    face,
                    nextLevelProcessor.onKeyData,
                    nextLevelProcessor.onError,
                    key_name,
                    hint=None,
                    parse_dns=False,
                    limit_left=limit_left - 1)  #, verify = False)
            else:
                self.cachingQuery.expressQueryForZoneFh(
                    face,
                    nextLevelProcessor.onHintData,
                    nextLevelProcessor.onError,
                    zone,
                    verify=True)
Esempio n. 8
0
		# SignedInfo
		si = ndn.SignedInfo()
		si.type = ndn.CONTENT_DATA
		si.finalBlockID = ndn.Name.num2seg(0)
		si.publisherPublicKeyDigest = key.publicKeyID
		si.keyLocator = keylocator

		# ContentObject
		co = ndn.ContentObject()
		co.content = content
		co.name = co_name
		co.signedInfo = si

		co.sign(key)
		return co

	def callback(kind, info):
		print(info.ContentObject.content)

	fc = FlowController("/test", ndn.Face())
	fc.put(publish('/test/1', 'one'))
	fc.put(publish('/test/2', 'two'))
	fc.put(publish('/test/3', 'three'))
	vp = VersionedPull("/chat", callback)
	el = ndn.EventLoop(fc.handle, vp.handle)

	while True:
		vp.requestNext()
		el.run_once()
		time.sleep(1)
 def __init__ (self):
     self.face = ndn.Face ()
     self.face.setInterestFilter ("/forty", self.onInterest)
Esempio n. 10
0
	def __init__(self, root, handle = None):
		self.root = ndn.Name(root)
		self.exclusions = ndn.ExclusionFilter()
		self.handle = handle or ndn.Face()
Esempio n. 11
0
TrustPolicy = IdentityPolicy(anchors=[[
    pyccn.Name(
        "/ndn/keys/ucla.edu/alex/%C1.M.K%00F%8D%E9%C3%EE4%7F%C1Mjqro%C6L%8DGV%91%90%03%24%ECt%95n%F3%9E%A6i%F1%C9"
    ),
    pyccn.Name("/"),
    pyccn.Key.createFromPEM(public="""-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSPdPM7+DjDcUGHtwEDmkq4kO5
tEUI05w5gR4JC1UiZxS0ckMWSLRPWXozHrpJsjNzDeI6OiQrXzup1tF2IN+Xtdr+
Pr3CwyBRloTJJbm5kf+pGuJh4fE9Qk0i/fS9Xs6gFup3oPnr+wFFjJObnRTrUsaM
8TQokOLYZFsatsZOvwIDAQAB
-----END PUBLIC KEY-----""")
]],
                             rules=[[
                                 "^((/[^/]+)*)/DNS((/[^/]+)*)/[^/]+/NDNCERT$",
                                 "\\1\\3"
                             ]])

if (__name__ == '__main__'):

    face = ndn.Face()
    face.defer_verification(True)

    def onVerify(data, status):
        print status

    def onData(interest, data):
        TrustPolicy.verify(data, onVerify)

    face.expressInterest("/ndn/DNS/test/A", onData)
Esempio n. 12
0
def dig(args, out=None, cachingQuery=None, policy=None):
    if out is None:
        out = StringIO()

    if policy is None:
        policy = ndns.TrustPolicy

    if cachingQuery is None:
        cachingQuery = ndns.CachingQueryObj

    if not isinstance(args.zone, ndn.Name):
        zone = ndn.Name(args.zone)
    else:
        zone = args.zone

    if args.simple:
        if args.name:
            if not args.ndn:
                args.name = ndns.ndnify(args.name)
            name = ndn.Name(args.name)
        elif not args.raw:
            sys.stderr.write(
                "ERROR: For simple query, ``name'' (label) argument is mandatory\n"
            )
            exit(5)

    face = ndn.Face()
    loop = ndn.EventLoop(face)
    needrun = True

    def onResult(result, msg):
        if args.no_output:
            needrun = False
            loop.stop()
            return

        if not args.quiet:
            out.write(";; Got data packet [%s]\n" % result.name)
            out.write(";;       signed by [%s]\n" %
                      result.signedInfo.keyLocator.keyName)
            out.write("\n")
            out.write("%s\n" % msg.to_text())
        else:
            for rrset in msg.answer:
                out.write("%s\n" % rrset.to_text())

        needrun = False
        loop.stop()

    def onError(errmsg, *k, **kw):
        if args.no_output:
            needrun = False
            loop.stop()
            return

        out.write(";; %s\n" % errmsg)
        needrun = False
        loop.stop()

    def onPreResult(result, msg):
        def _onVerify(data, status):
            if status:
                onResult(result, msg)
            else:
                onError("Got answer, but it cannot be verified")

        if args.verify:
            onResult(result, msg)
        else:
            policy.verifyAsync(face, result, _onVerify)

    if args.simple:
        if not args.raw:
            cachingQuery.expressQueryFor(face,
                                         onPreResult,
                                         onError,
                                         zone,
                                         args.fh,
                                         name,
                                         args.rrtype,
                                         verify=args.verify)
        else:
            cachingQuery.expressQueryForRaw(face,
                                            onPreResult,
                                            onError,
                                            zone,
                                            hint=args.fh,
                                            verify=args.verify)
    elif args.zone_fh_query:
        cachingQuery.expressQueryForZoneFh(face, onPreResult, onError, zone,
                                           args.verify)
    else:
        args.rrtype = args.name
        cachingQuery.expressQuery(face, onPreResult, onError, zone,
                                  args.rrtype, args.verify)

    if needrun:
        loop.run()

    if isinstance(out, StringIO):
        return out.getvalue()
Esempio n. 13
0
 def __init__(self, name, content):
     self.handle = ndn.Face()
     self.name = ndn.Name(name)
     self.content = self.prepareContent(content,
                                        self.handle.getDefaultKey())