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)