コード例 #1
0
	def sendSignedInterest(self,command):
		self.count = self.count +1
		#time.sleep(self.cfg.refreshInterval)
		fullURI = self.cfg.appPrefix + command
		#print fullURI
		i = Interest()
		#self.state = NameCrypto.new_state()
		#build keyLocator to append to interest for NameCrypto on upcall
		keyLoc = pyccn.KeyLocator(self.key)
		keyLocStr = pyccn._pyccn.dump_charbuf(keyLoc.ccn_data)
		nameAndKeyLoc = Name(str(fullURI))
		#print("there are "+str(len(nameAndKeyLoc))+" components")
		nameAndKeyLoc = nameAndKeyLoc.append(keyLocStr)
		#print("there are "+str(len(nameAndKeyLoc))+" components after adding keyLocStr")
		
		#symmetric
		#authName = NameCrypto.authenticate_command(self.state, nameAndKeyLoc, self.cfg.appName, self.cryptoKey)
		
		#asymmetric
		authName = NameCrypto.authenticate_command_sig(self.state, nameAndKeyLoc, self.cfg.appName, self.key)
		
		#print authName.components
		self.handle.setInterestFilter(Name(authName), self)
		
		#trace(str(time.time()),str(authName),"expressed")
		
		# time sent
		tS = time.time()
		self.log.info(str((tS-self.startTime))+",INTEREST_EXPRESSED, , "+ str(authName))
		
		co = self.handle.expressInterest(authName,self)
		
		self.handle.run(0)
コード例 #2
0
ファイル: ccnxsocket.py プロジェクト: zhenkai/peets
 def get_pyccn_name(self, name):
     '''Get a valid name for PyCCN. This is useful when the name string is encoded as unicode, as is the usual case in Python. However, PyCCN has problem handling unicode names, raising TypeError as a result.
 
 Args:
   name (str): the name string
 
 Returns:
   An ascii encoded name string
 '''
     if isinstance(name, unicode):
         return Name(name.encode('ascii', 'ignore'))
     else:
         return Name(name)
コード例 #3
0
	def build_interest(self, latest):
		if self.start_with_latest:
			latest=True
			self.start_with_latest = False

		excl = Interest.ExclusionFilter()
		excl.add_any()
		excl.add_name(Name.Name([self.latest_version]))
		# expected result should be between those two names
		excl.add_name(Name.Name([self.last_version_marker]))
		excl.add_any()

		interest = Interest.Interest(name=self.base_name, exclude=excl, \
			minSuffixComponents=3, maxSuffixComponents=3)
		interest.childSelector = 1 if latest else 0
		return interest
コード例 #4
0
def getSegment(seg):
	global h, base

	name = Name.Name(base)
	name += segment(seg)

	co = h.get(name)
	return co.content
コード例 #5
0
    def __init__(self, prefixstr):
        self.handle = CCN()

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

        self.prefix = Name(prefixstr)
コード例 #6
0
	def __init__(self, prefix, handle):
		self.prefix = Name.Name(prefix)
		self.handle = handle
		self.content_objects = []
		self.queue = Queue.Queue(500)

		self.cleanup_time = 15 * 60 # keep responses for 15 min
		handle.setInterestFilter(self.prefix, self)
コード例 #7
0
ファイル: Repository.py プロジェクト: named-data/PyCCN
    def start(self):
        self.handle.setInterestFilter(self.name, self)

        interest = Interest.Interest(name=Name.Name(self.name))
        interest.name += '\xC1.R.sw'
        interest.name.appendNonce()

        print("Expressing interest: ccnx:%s" % interest.name)

        self.handle.expressInterest(interest.name, self, interest)
        self.handle.run(-1)
コード例 #8
0
	def __init__(self, base_name, callback, handle=CCN.CCN(), version=None, latest=True):
		# 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 = Name.Name(base_name)
		self.callback = callback
		self.handle = handle
		self.latest_version = version if version else self.first_version_marker
		self.start_with_latest = latest
コード例 #9
0
ファイル: sequencer.py プロジェクト: named-data/ndn-lighting
	def sendSignedInterest(self,command):
		fullURI = self.cfg.appPrefix + command
		print fullURI
		i = Interest()

		self.state = NameCrypto.new_state()
		#build keyLocator to append to interest for NameCrypto on upcall
		#
		keyLoc = pyccn.KeyLocator(self.key)
		keyLocStr = pyccn._pyccn.dump_charbuf(keyLoc.ccn_data)
		nameAndKeyLoc = Name(str(fullURI))
		#print("there are "+str(len(nameAndKeyLoc))+" components")
		nameAndKeyLoc = nameAndKeyLoc.append(keyLocStr)
		#print("there are "+str(len(nameAndKeyLoc))+" components after adding keyLocStr")
		authName = NameCrypto.authenticate_command(self.state, nameAndKeyLoc, self.cfg.appName, self.cryptoKey)
		#print authName.components

		# send interest

		# for just expressing
		co = self.handle.expressInterest(authName,self)
コード例 #10
0
def preparePacket(seg, data):
	global basename, si, key

	co_name = Name.Name(basename)
	co_name += segment(seg)
#	print("preparing %s" % co_name)

	co = ContentObject.ContentObject()
	co.content = data
	co.name = co_name
	co.signedInfo = si
	co.sign(key)

	return co
コード例 #11
0
def getSegment(seg):
	global h, base

	name = Name.Name(base)
	name += segment(seg)

	print "Requesting: %s" % name

	co = None
	tries = 3
	while not co:
		if tries <= 0:
			return ""
		co = h.get(name, None, 150)
		if co:
			return co.content
		print "retrying"
		tries -= 1

	return None
コード例 #12
0
ファイル: repo_upload.py プロジェクト: named-data/PyCCN
    def publish(key, name, last_segment, content):
        print("Generating: %s" % name)

        # Name
        co_name = Name.Name(name)

        # SignedInfo
        si = ContentObject.SignedInfo()
        si.type = ContentObject.ContentType.CCN_CONTENT_DATA
        si.finalBlockID = last_segment
        si.publisherPublicKeyDigest = key.publicKeyID
        si.keyLocator = Key.KeyLocator(key)

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

        co.sign(key)
        return co
コード例 #13
0
	def upcall(self, kind, upcallInfo):
		global sender_handle, n, k, kl

		print("Sender closure:")
		print(upcallInfo)

		co = ContentObject()
		co.name = Name(n)
		co.content = "Frou"

		si = SignedInfo()
		si.publisherPublicKeyDigest = k.publicKeyID
		si.type = pyccn.CONTENT_DATA
		si.freshnessSeconds = 5
		si.keyLocator = kl

		co.signedInfo = si

		co.sign(k)
		r = sender_handle.put(co)
		print("put(co) = ", r)
		#sender_handle.setRunTimeout(0)

		return pyccn.RESULT_INTEREST_CONSUMED
コード例 #14
0
ファイル: Repository.py プロジェクト: named-data/PyCCN
 def __init__(self, handle, name, content):
     self.handle = handle
     self.name = Name.Name(name)
     self.content_objects = content
コード例 #15
0
	def __init__(self, handle, name):
		self.queue = Queue.Queue(1000)
		self.counter = 0
		self.handle = handle
		self.name = Name.Name(name)
コード例 #16
0
	def getNext(self):
		name = Name.Name(self.name)
		name += segment(self.counter)
#		print "Issuing interest %s" % name
		self.counter += 1
		self.handle.expressInterest(name, self)
コード例 #17
0
from pyccn import Key, Name, _pyccn, CCN

n = Name("/this/is/a/name")

ccn_name1 = n.ccn_data
name1 = _pyccn.name_comps_from_ccn(ccn_name1)

locator1 = _pyccn.KeyLocator_to_ccn(name=ccn_name1)
print(locator1)

locator1_obj = _pyccn.KeyLocator_obj_from_ccn(locator1)
print(locator1_obj)
print(locator1_obj.keyName)

name2 = _pyccn.name_comps_from_ccn(locator1_obj.keyName.ccn_data)
print(name2)

for comp1, comp2 in zip(name1, name2):
	if comp1 != comp2:
		raise AssertionError("Got a different output: '%s' != '%s'" % (comp1, comp2))

key1 = CCN.getDefaultKey()

locator2 = _pyccn.KeyLocator_to_ccn(key=key1.ccn_data_public)
print(locator2)

locator2_obj = _pyccn.KeyLocator_obj_from_ccn(locator2)
key2 = locator2_obj.key
print(key2)

print(key1.ccn_data_public)
コード例 #18
0
#fi = open(file, "r")
#fi.seek(100*1024*1024)

#def block():
#	global fi, position, block_size
#	data = fi.read(block_size)
#	return data


import struct, vlc_access
from pyccn import *

h = CCN.CCN()
#base = Name.Name('/movie/%FD%04%E0%ACL%97%60')
base = Name.Name('/testmovie')

def segment(segment):
	return b'\x00' + struct.pack('!Q', segment).lstrip('\x00')

def getSegment(seg):
	global h, base

	name = Name.Name(base)
	name += segment(seg)

	print "Requesting: %s" % name

	co = None
	tries = 3
	while not co:
コード例 #19
0
from pyccn import _pyccn, CCN, Name
import sys

comps = ['this', 'is', 'some', 'name']
print(comps)

ccn_name = _pyccn.name_comps_to_ccn(comps)
comps2 = _pyccn.name_comps_from_ccn(ccn_name)
print(comps2)

#for comp1, comp2 in zip(map(lambda x: bytearray(x), comps), comps2):
for comp1, comp2 in zip([bytearray(x, "ascii") for x in comps], comps2):
	if comp1 != comp2:
		raise AssertionError("Got a different output: '%s' != '%s'" % (comp1, comp2))

n = Name(['hello', 'world'])

print(str(n))
if str(n) != "/hello/world":
	raise AssertionError("expected /hello/world")

n = Name("ccnx:///testing/1/2/3/")
print(str(n))
if str(n) != "/testing/1/2/3":
	raise AssertionError("expected /testing/1/2/3 got: " + str(n))

if len(n) != 4:
	raise AssertionError("expected 4 components, got: " + len(n))

print(n.components)
assert(n.components == [b'testing', b'1', b'2', b'3'])
コード例 #20
0
from pyccn import CCN, Name

c = CCN()
print(c)

n = Name()
print(n)

n = Name("ccnx:/ccnx/ping")
print(n)

co = c.get(n)
print(co)

#this shouldn't cause segfault
print(n)

n = Name("ccnx:/ccnx/some_nonexisting_name")
co = c.get(n, None, 100)

#this shouldn't cause segfault!
print(co)
コード例 #21
0
ファイル: interest.py プロジェクト: named-data/PyCCN
from pyccn import Interest, Name, Key, CCN, _pyccn
import datetime

k = CCN.getDefaultKey()

i = Interest()
i.name = Name('/hello/world')
i.minSuffixComponents = 2
i.maxSuffixComponents = 4
i.publisherPublicKeyDigest = k.publicKeyID
i.exclude = None
i.childSelector = 1
i.answerOriginKind = 4
i.scope = 2
i.interestLifetime = 30.0
i.nonce = b'abababa'

print(i)
print(i.ccn_data)

i2 = _pyccn.Interest_obj_from_ccn(i.ccn_data)
print(i2)

assert (i.name == i2.name)
assert (i.minSuffixComponents == i2.minSuffixComponents)
assert (i.maxSuffixComponents == i2.maxSuffixComponents)
assert (i.publisherPublicKeyDigest == i2.publisherPublicKeyDigest)
assert (i.exclude == i2.exclude)
assert (i.childSelector == i2.childSelector)
assert (i.scope == i2.scope)
assert (i.interestLifetime == i2.interestLifetime)
コード例 #22
0
ファイル: namecrypto.py プロジェクト: named-data/PyCCN
import pyccn
from pyccn import Name, NameCrypto, Key, KeyLocator, CCN

window = -1

# Test symmetric authentication

state = NameCrypto.new_state()

secret = '1234567812345678'

app_name = 'cuerda'

app_key = NameCrypto.generate_application_key(secret, app_name)

name = Name('/ndn/ucla.edu/apps/cuerda')

auth_name = NameCrypto.authenticate_command(state, name, app_name, app_key)
print auth_name

state2 = NameCrypto.new_state()

ret = NameCrypto.verify_command(state2, auth_name, window, fixture_key=secret)
print ret
assert(ret == True)

name_from_js = Name(
'/ndn/ucla.edu/apps/cuerda/%40%96%1CQ%00%06cuerdaQk%8A%13%00%07%B8%90%00%00%00%03%00%00%00%00%BB%14%FCHl%A5%F6%5D%18%1EIs%9E%91t%5El%C1y%3F%BAA%A7%02Y%EC%804%23%A4%D4t'
)

state3 = NameCrypto.new_state()
コード例 #23
0
ファイル: tyzxclient.py プロジェクト: remap/ndn-tyzx
from pyccn import CCN, Name, Interest, Key, ContentObject, Closure, KeyLocator, ExclusionFilter
from Tyzx import CompositeObject, BaseObject

prefix = "ccnx:/ndn/ucla.edu/apps/tv1/occupants"

DISCOVER_INTEREST_PERIOD = 0.250  # How often
UPDATE_INTEREST_PERIOD = 0.250
CCN_WAIT_TIME_MS = 1

tyzxObjects = {}
oldObjects = set()  # still may be in the content store

ccn = CCN()

interestDiscover = Interest()
interestDiscover.name = Name(prefix)
interestDiscover.minSuffixComponents = 2  # occupant id + the implicit digest at a minimum

interestUpdate = Interest()
interestUpdate.minSuffixComponents = 2  # time (version) + the implicit digest
interestUpdate.childSelector = 1  # rightmost child
#interestUpdate.interestLifetime = ????

lastdiscovertime = 0


def versionFromTime(t):
    bintime = struct.pack("!Q", int(t * 4096 + 0.5))
    version = bintime.lstrip(b'\x00')
    return b'\xfd' + version
コード例 #24
0
ファイル: repo_upload.py プロジェクト: named-data/PyCCN
        si = ContentObject.SignedInfo()
        si.type = ContentObject.ContentType.CCN_CONTENT_DATA
        si.finalBlockID = last_segment
        si.publisherPublicKeyDigest = key.publicKeyID
        si.keyLocator = Key.KeyLocator(key)

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

        co.sign(key)
        return co

    name = Name.Name('/repo/upload/test')
    name_v = Name.Name(name)
    name_v.appendVersion()

    handle = CCN.CCN()
    key = handle.getDefaultKey()
    last_seg = segment(9)

    content = []
    for i in range(10):
        name_s = Name.Name(name_v)
        name_s += segment(i)
        co = publish(key, name_s, last_seg, "Segment: %d\n" % i)
        content.append(co)

    upload = RepoUpload(handle, name_v, content)
コード例 #25
0
from pyccn import CCN, Name, Interest, Closure
from time import sleep

worked = False


class MyClosure(Closure):
    def upcall(self, kind, upcallInfo):
        global worked

        print("Got response")
        print(kind)
        print(upcallInfo)
        worked = True


n = Name("ccnx:/ccnx/ping")

i = Interest()
closure = MyClosure()

c = CCN()
res = c.expressInterest(n, closure, i)
print(res)

#causes crashes
c.run(10)
print("Ha!")
assert (worked)
コード例 #26
0
import pyccn
from pyccn import CCN, Name, Interest, ContentObject, SignedInfo, Key, KeyLocator, Closure
#from threading import Timer

k = CCN.getDefaultKey()
kl = KeyLocator(k)

n = Name("/forty/two")

class SenderClosure(Closure):
	def upcall(self, kind, upcallInfo):
		global sender_handle, n, k, kl

		print("Sender closure:")
		print(upcallInfo)

		co = ContentObject()
		co.name = Name(n)
		co.content = "Frou"

		si = SignedInfo()
		si.publisherPublicKeyDigest = k.publicKeyID
		si.type = pyccn.CONTENT_DATA
		si.freshnessSeconds = 5
		si.keyLocator = kl

		co.signedInfo = si

		co.sign(k)
		r = sender_handle.put(co)
		print("put(co) = ", r)
コード例 #27
0
    def upcall(self, kind, upcallInfo):
        global lasttime
        if lasttime is None:  # can't answer yet
            return pyccn.RESULT_OK

        if len(tyzxObjs.objs) < 1:
            return pyccn.RESULT_OK

        interest = upcallInfo.Interest
        #print "Interest", interest.name, time.time()

        # CALL content matches interest to check exclusion on versions
        #

        #print interest.exclude
        name = interest.name
        #print name
        if name == self.prefix:  # root
            #print "Request for root: %s" % str(name)

            if interest.exclude is None:
                freshids = tyzxObjs.objs.keys()[0:1]
            else:
                if len(interest.exclude.components) > 0:
                    ids = set(tyzxObjs.objs.keys())  # new stuff we have
                    suffixes = set(
                        [int(str(s)[1:]) for s in interest.exclude.components])
                    freshids = list(ids.difference(
                        suffixes))  # do we need this conversion?
                    #print "ids", ids
                    #print "suffixes", suffixes
                    #print "freshids", freshids
                else:
                    freshids = tyzxObjs.objs.keys()[0:1]

            if len(freshids) > 0:
                child = freshids[0]
            else:
                return pyccn.RESULT_OK  # no new content

        else:  # should check what we're receiving! take next component

            child = int(
                name.components[-1:][0])  # why not be able to do this on name?
            #print "Request for child: %s" % child, time.time()

        #print "child - ", child
        if tyzxObjs.objs.has_key(child):
            O = tyzxObjs.objs[child]
        else:
            # Don't want to respond with a nonexistent. NDN way is to not answer interest.
            # If we've just started, we may not even know what the content store knows.
            # But, we do want to answer "exits" that we know about.
            #print "child", child, "is not present"
            if tyzxObjs.objExits.has_key(child):
                #print "child", child, "is exited"
                O = tyzxObjs.objExits[child]
            else:
                return pyccn.RESULT_OK

            #O = CompositeObject(BaseObject())
            #O.time = lasttime.time
            #O.id = int(child)
            #O.status = "nonexistent"

        msgname = Name(self.prefix)
        msgname += str(child)
        msgname.components.append(versionFromTime(
            O.time))  # should have msgname.append
        #msgname.ccn_data_dirty=True - now handled within PyCCN
        # need binary add component
        self.message = self.publish(msgname, O.toJSON())
        #print "Publishing", msgname, O.toJSON()
        #print "Present:", tyzxObjs.objs.keys(), time.time()
        self.handle.put(self.message)

        return pyccn.RESULT_INTEREST_CONSUMED

        return pyccn.RESULT_OK