PyNDN: Finishing basic implementation of PyNDN emulation
Not yet fully tested
Refs #1010 (http://redmine.named-data.net/issues/1010)
diff --git a/PyNDN/Key.py b/PyNDN/Key.py
index e57a846..b5c065b 100644
--- a/PyNDN/Key.py
+++ b/PyNDN/Key.py
@@ -17,128 +17,82 @@
# Jeff Burke <jburke@ucla.edu>
#
-# Fronts ccn_pkey.
-from . import _ndn
-from . import Name
+import ns.core
+import ns.ndnSIM
+from Name import Name
class Key(object):
- def __init__(self):
- self.type = None
- self.publicKeyID = None # SHA256 hash
- # ndn
- self.ccn_data_dirty = False
- self.ccn_data_public = None # backing pkey
- self.ccn_data_private = None # backing pkey
-
- def __get_ccn(self):
- pass
+ def __init__ (self):
+ # self.publicKeyID = None # SHA256 hash
+ self.fakeKey = None
def generateRSA(self, numbits):
- _ndn.generate_RSA_key(self, numbits)
+ randVar = ns.core.UniformVariable ()
+ self.fakeKey = randVar.GetInteger (0, 2147483647)
def privateToDER(self):
- if not self.ccn_data_private:
- raise _ndn.CCNKeyError("Key is not private")
- return _ndn.DER_write_key(self.ccn_data_private)
+ return self.fakeKey
def publicToDER(self):
- return _ndn.DER_write_key(self.ccn_data_public)
+ return self.privateToDER ()
def privateToPEM(self, filename = None, password = None):
- if not self.ccn_data_private:
- raise _ndn.CCNKeyError("Key is not private")
-
if filename:
f = open(filename, 'w')
- _ndn.PEM_write_key(self.ccn_data_private, file=f, password = password)
+ f.write (self.fakeKey)
f.close()
else:
- return _ndn.PEM_write_key(self.ccn_data_private, password = password)
+ return self.fakeKey
def publicToPEM(self, filename = None):
- if filename:
- f = open(filename, 'w')
- _ndn.PEM_write_key(self.ccn_data_public, file=f)
- f.close()
- else:
- return _ndn.PEM_write_key(self.ccn_data_public)
+ return privateToPEM (filename)
def fromDER(self, private = None, public = None):
if private:
- (self.ccn_data_private, self.ccn_data_public, self.publicKeyID) = \
- _ndn.DER_read_key(private=private)
- return
- if public:
- (self.ccn_data_private, self.ccn_data_public, self.publicKeyID) = \
- _ndn.DER_read_key(public=public)
- return
+ self.fakeKey = private
+ elif public:
+ self.fakeKey = public
def fromPEM(self, filename = None, private = None, public = None, password = None):
if filename:
f = open(filename, 'r')
- (self.ccn_data_private, self.ccn_data_public, self.publicKeyID) = \
- _ndn.PEM_read_key(file=f, password = password)
+ self.fakeKey = f.read ()
f.close()
elif private:
- (self.ccn_data_private, self.ccn_data_public, self.publicKeyID) = \
- _ndn.PEM_read_key(private=private, password = password)
+ self.fakeKey = private
elif public:
- (self.ccn_data_private, self.ccn_data_public, self.publicKeyID) = \
- _ndn.PEM_read_key(public=public)
-
- @staticmethod
- def createFromDER (private = None, public = None):
- key = Key ()
- key.fromDER (private, public)
- return key
-
- @staticmethod
- def createFromPEM (filename = None, private = None, public = None, password = None):
- key = Key ()
- key.fromPEM (filename, private, public, password)
- return key
+ self.fakeKey = public
@staticmethod
- def getDefaultKey():
- return _ndn.get_default_key()
+ def createFromDER (private = None, public = None):
+ key = Key ()
+ key.fromDER (private, public)
+ return key
-# plus library helper functions to generate and serialize keys?
+ @staticmethod
+ def createFromPEM (filename = None, private = None, public = None, password = None):
+ key = Key ()
+ key.fromPEM (filename, private, public, password)
+ return key
+
+ @staticmethod
+ def getDefaultKey ():
+ context = ns.core.Simulator.GetContext ()
+ key = Key ()
+ key.fakeKey = context
+ return key
+
class KeyLocator(object):
- def __init__(self, arg=None):
- #whichever one is not none will be used
- #if multiple set, checking order is: keyName, key, certificate
- self.key = arg if type(arg) is Key else None
- self.keyName = arg if type(arg) is Name.Name else None
- self.certificate = None
+ def __init__(self, keyName = None):
+ self.keyName = keyName
- # ndn
- self.ccn_data_dirty = True
- self.ccn_data = None # backing charbuf
+ @staticmethod
+ def getDefaultKeyLocator():
+ context = ns.core.Simulator.GetContext ()
+ keyLocator = ns.ndnSIM.ndn.Name ()
+ keyLocator.\
+ append ("default-key").\
+ append (str (context))
- def __setattr__(self, name, value):
- if name != "ccn_data" and name != "ccn_data_dirty":
- self.ccn_data_dirty = True
- object.__setattr__(self, name, value)
-
- def __getattribute__(self, name):
- if name=="ccn_data":
- if object.__getattribute__(self, 'ccn_data_dirty'):
- if object.__getattribute__(self, 'keyName'):
- self.ccn_data = _ndn.KeyLocator_to_ccn(
- name=self.keyName.ccn_data)
- elif object.__getattribute__(self, 'key'):
- self.ccn_data = _ndn.KeyLocator_to_ccn(
- key=self.key.ccn_data_public)
- elif object.__getattribute__(self, 'certificate'):
- #same but with cert= arg
- raise NotImplementedError("certificate support is not implemented")
- else:
- raise TypeError("No name, key nor certificate defined")
-
- self.ccn_data_dirty = False
- return object.__getattribute__(self, name)
-
- @staticmethod
- def getDefaultKeyLocator():
- return KeyLocator (_ndn.get_default_key_name ())
+ return Name (keyLocator)