Changeset 254
- Timestamp:
- 03/30/09 20:09:33 (3 years ago)
- Location:
- trunk/sandbox/jhb/oc2
- Files:
-
- 6 added
- 2 modified
- 2 moved
-
container.py (modified) (3 diffs)
-
containerbase.py (added)
-
entity.py (added)
-
issuer.py (added)
-
mint.py (added)
-
occrypto_rsa.py (modified) (4 diffs)
-
storage.py (added)
-
test_issuer.py (added)
-
test_playground.py (moved) (moved from trunk/sandbox/jhb/oc2/tests.py) (2 diffs, 1 prop)
-
testserver.py (moved) (moved from trunk/sandbox/jhb/oc2/test.py) (1 diff, 1 prop)
Legend:
- Unmodified
- Added
- Removed
-
trunk/sandbox/jhb/oc2/container.py
r250 r254 1 import simplejson, datetime, binascii 2 3 ################################### Fields ################################## 4 5 class Field(object): 6 def __init__(self,name,signing=True,default=''): 7 self.name = name 8 self.signing = signing 9 self.default = default 10 11 def getencoded(self,object,allData=False): 12 value = getattr(object,self.name,self.default) 13 return value 14 15 def setdecoded(self,object,data): 16 setattr(object,self.name,data) 17 18 class DateField(Field): 19 20 format = '%d.%m.%Y %H:%M:%S' 21 22 def getencoded(self,object,allData=False): 23 value = getattr(object,self.name,self.default) 24 if not value: 25 value = datetime.datetime.now() 26 return value.strftime(self.format) 27 28 def setdecoded(self,object,data): 29 dt = datetime.datetime.strptime(data,self.format) 30 setattr(object,self.name,dt) 31 32 33 34 class BinaryField(Field): 35 36 def getencoded(self,object,allData=False): 37 value = getattr(object,self.name,self.default) 38 return binascii.b2a_base64(value).strip() 39 40 def setdecoded(self,object,data): 41 setattr(object,self.name,binascii.a2b_base64(data)) 42 43 44 class OneItemField(Field): 45 46 def __init__(self,name,signing=True,default='',klass=dict): 47 Field.__init__(self,name=name,signing=signing,default=default) 48 self.klass = klass 49 50 51 def getencoded(self,object,allData=False): 52 value = getattr(object,self.name) 53 if value: 54 value = value.getData(allData=allData) 55 else: 56 value = self.default 57 return value 58 59 def setdecoded(self,object,data): 60 setattr(object,self.name,self.klass(data)) 61 62 63 64 65 class SubitemsField(Field): 66 67 def __init__(self,name,signing=True,default='',klass=dict): 68 Field.__init__(self,name=name,signing=signing,default=default) 69 self.klass = klass 70 71 72 def getencoded(self,object,allData=False): 73 out = [] 74 for item in getattr(object,self.name): 75 out.append(item.getData(allData=allData)) 76 return out 77 78 def setdecoded(self,object,data): 79 value = [] 80 for item in data: 81 value.append(self.klass(item)) 82 setattr(object,self.name,value) 83 84 85 ################################### Containers ################################## 86 87 88 class Container(object): 89 90 fields = [] 91 92 def __init__(self,data={}): 93 self.fromData(data) 94 95 def __xrepr__(self): 96 return "<%s(%s)>" % (self.__class__.__name__,self.getData(True)) 97 98 def __xstr__(self): 99 return self.toString() 100 101 def fromData(self,data): 102 if type(data) == type(''): 103 data = simplejson.loads(data) 104 if type(data) != type({}): 105 data = dict(data) 106 for field in self.fields: 107 if data.has_key(field.name): 108 field.setdecoded(self,data[field.name]) 109 else: 110 setattr(self,field.name,field.default) 111 112 113 def getData(self,allData=False): 114 certdata = [] 115 for field in self.fields: 116 if not (allData or field.signing): 117 continue 118 certdata.append((field.name,field.getencoded(self,allData=allData))) 119 return certdata 120 121 def toString(self,allData=False): 122 return simplejson.dumps(self.getData(allData=allData)) 123 1 from containerbase import * 2 import occrypto 124 3 125 4 class CDD (Container): … … 127 6 128 7 fields = [ 129 Field('standard _id'),130 Field('currency _id'),131 Field('short _currency_id'),132 Field('issuer _service_location'),8 Field('standardId'), 9 Field('currencyId'), 10 Field('shortCurrencyId'), 11 Field('issuerServiceLocation'), 133 12 Field('denominations'), 134 Field('issuer _cipher_suite'),13 Field('issuerCipherSuite'), 135 14 Field('options'), 136 Field('issuer_public_master_key'),15 OneItemField('masterPubKey',klass=occrypto.PubKey), 137 16 Field('issuer'), 17 Field('version'), 138 18 Field('signature',signing=False) 139 19 ] … … 148 28 149 29 150 class M intKey(Container):151 " A mintkey, contains key + metadata"30 class MKC(Container): 31 "Mint Key Certificate" 152 32 153 33 fields = [ 154 Field('key _id'),155 Field('currency _id'),34 Field('keyId'), 35 Field('currencyId'), 156 36 Field('denomination'), 157 DateField('not _before'),158 DateField('key _not_after'),159 DateField('coin _not_after'),160 OneItemField('public _key',klass=PublicKey),37 DateField('notBefore'), 38 DateField('keyNotAfter'), 39 DateField('coinNotAfter'), 40 OneItemField('publicKey',klass=PublicKey), 161 41 Field('issuer'), 162 42 Field('signature',signing=False) -
trunk/sandbox/jhb/oc2/occrypto_rsa.py
r251 r254 1 1 """This is a playground to develop the api for the pubkey and secret key. 2 2 Don't take the crypto seriously""" 3 from container import Container,Field3 from containerbase import * 4 4 import hashlib 5 5 import rsa … … 13 13 self.isPrivate = isPrivate 14 14 15 15 def getencoded(self,object,allData=False): 16 value = getattr(object,self.name,self.default) 17 items = value.items() 18 items.sort() 19 return items 20 21 def setdecoded(self,object,data): 22 setattr(object,self.name,dict(data)) 16 23 17 24 class PubKey(Container): … … 29 36 def verifyContainerSignature(self,container): 30 37 signature = container.signature 31 data = container. toString()38 data = container.hash() 32 39 return self.verifySignature(signature=signature,data=data) 33 40 … … 61 68 62 69 def signContainer(self,container): 63 signature = self.sign(container. toString())70 signature = self.sign(container.hash()) 64 71 container.signature = signature 65 72 return container 66 73 67 74 def hash(data): 68 return hashlib.sha256(data). digest()75 return hashlib.sha256(data).hexdigest() 69 76 77 def hashContainer(container,allData=False): 78 return hash(container.toString(allData=allData)) 79 80 Container.hash = hashContainer 70 81 def KeyFactory(bitlen): 71 82 pub,priv = rsa.gen_pubpriv_keys(bitlen) -
trunk/sandbox/jhb/oc2/test_playground.py
r250 r254 1 1 r""" 2 >>> import testserver 3 >>> testserver.run_once() 4 >>> import urllib2 5 >>> urllib2.urlopen('http://localhost:8000').read() 6 'foo' 2 7 >>> import occrypto as occrypto 3 8 >>> (priv,pub) = occrypto.KeyFactory(1024) … … 8 13 >>> pub.verifySignature(signature,text) 9 14 True 10 >>> sig2 = priv.sign('foobar') 11 >>> pub.verifySignature(sig2,'foobar') 15 >>> p1 = pub.toString() 16 >>> p2 = occrypto.PubKey(p1).toString() 17 >>> p1 == p2 12 18 True 19 20 21 >>> from container import CDD 22 >>> cdd = CDD() 23 >>> cdd.issuer_public_master_key = pub 24 >>> tmp = priv.signContainer(cdd) 25 >>> pub.verifyContainerSignature(cdd) 26 True 27 28 13 29 """ 14 30 """ -
trunk/sandbox/jhb/oc2/testserver.py
r253 r254 14 14 15 15 httpd = BaseHTTPServer.HTTPServer(("", PORT), Handler) 16 print "serving at port", PORT 17 t = threading.Thread(target=httpd.handle_request) 18 t.start() 16 import threading 17 def run_once(): 18 t = threading.Thread(target=httpd.handle_request) 19 t.start() 20 21 22 #print "serving at port", PORT 23 #t = threading.Thread(target=httpd.handle_request) 24 #t.start() 19 25 #import time 20 26 #for i in range(10): 21 27 # time.sleep(3) 22 print 'foobar'28 #print 'foobar' 23 29 24 30 #httpd.serve_forever()
