- Timestamp:
- 03/30/09 15:18:20 (3 years ago)
- Location:
- trunk/sandbox/jhb/oc2
- Files:
-
- 17 added
- 2 modified
-
container.py (modified) (8 diffs)
-
occrypto_rsa.py (added)
-
occrypto_tlslite.py (added)
-
rsa.py (modified) (4 diffs)
-
tests.py (added)
-
tlslite_utils (added)
-
tlslite_utils/Cryptlib_AES.py (added)
-
tlslite_utils/Cryptlib_RC4.py (added)
-
tlslite_utils/OpenSSL_RSAKey.py (added)
-
tlslite_utils/OpenSSL_TripleDES.py (added)
-
tlslite_utils/Python_RSAKey.py (added)
-
tlslite_utils/TripleDES.py (added)
-
tlslite_utils/__init__.py (added)
-
tlslite_utils/cipherfactory.py (added)
-
tlslite_utils/cryptomath.py (added)
-
tlslite_utils/entropy.c (added)
-
tlslite_utils/hmac.py (added)
-
tlslite_utils/rijndael.py (added)
-
tlslite_utils/xmltools.py (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/sandbox/jhb/oc2/container.py
r249 r250 1 """ 2 >>> 3 >>> 4 """ 1 import simplejson, datetime, binascii 5 2 6 7 8 import simplejson 9 10 11 3 ################################### Fields ################################## 12 4 13 5 class Field(object): … … 17 9 self.default = default 18 10 19 def getencoded(self,object ):11 def getencoded(self,object,allData=False): 20 12 value = getattr(object,self.name,self.default) 21 13 return value … … 24 16 setattr(object,self.name,data) 25 17 26 class SubitemField(Field): 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): 27 45 28 46 def __init__(self,name,signing=True,default='',klass=dict): … … 31 49 32 50 33 def getencoded(self,object): 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): 34 73 out = [] 35 74 for item in getattr(object,self.name): 36 out.append(item.getData( ))75 out.append(item.getData(allData=allData)) 37 76 return out 38 77 … … 43 82 setattr(object,self.name,value) 44 83 84 85 ################################### Containers ################################## 45 86 46 87 47 88 class Container(object): 89 48 90 fields = [] 91 49 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): 50 102 if type(data) == type(''): 51 103 data = simplejson.loads(data) … … 57 109 else: 58 110 setattr(self,field.name,field.default) 59 setattr(self,'signature',data.get('signature',''))60 61 111 62 def getData(self,signingOnly=False,signature=False): 112 113 def getData(self,allData=False): 63 114 certdata = [] 64 115 for field in self.fields: 65 if signingOnly and not field.signing:116 if not (allData or field.signing): 66 117 continue 67 certdata.append((field.name,field.getencoded(self))) 68 if signature: 69 certdata.append(('signature',self.signature)) 118 certdata.append((field.name,field.getencoded(self,allData=allData))) 70 119 return certdata 71 120 72 def toString(self,signature=False): 73 #encoding stuff should be here as well 74 return simplejson.dumps(self.getData(signature=signature)) 75 121 def toString(self,allData=False): 122 return simplejson.dumps(self.getData(allData=allData)) 123 124 125 class CDD (Container): 126 "Currency Description Document" 127 128 fields = [ 129 Field('standard_id'), 130 Field('currency_id'), 131 Field('short_currency_id'), 132 Field('issuer_service_location'), 133 Field('denominations'), 134 Field('issuer_cipher_suite'), 135 Field('options'), 136 Field('issuer_public_master_key'), 137 Field('issuer'), 138 Field('signature',signing=False) 139 ] 140 141 class PublicKey(Container): 142 "A public key" 143 fields = [ 144 BinaryField('a'), 145 BinaryField('b'), 146 BinaryField('c') 147 ] 148 149 150 class MintKey(Container): 151 "A mintkey, contains key + metadata" 152 153 fields = [ 154 Field('key_id'), 155 Field('currency_id'), 156 Field('denomination'), 157 DateField('not_before'), 158 DateField('key_not_after'), 159 DateField('coin_not_after'), 160 OneItemField('public_key',klass=PublicKey), 161 Field('issuer'), 162 Field('signature',signing=False) 163 ] 76 164 77 165 … … 79 167 fields = [ 80 168 Field('currency'), 81 Field('amount') 169 Field('amount'), 170 Field('signature',signing=False) 82 171 ] 83 172 … … 85 174 fields = [ 86 175 Field('subject'), 87 Subitem Field('tokens',klass=Token)176 SubitemsField('tokens',klass=Token), 88 177 ] 89 class Tests(object): 90 """ 91 >>> t = Token() 92 >>> t.currency='opencent' 93 >>> t.amount = 2 94 >>> t.toString() 95 '[["currency", "opencent"], ["amount", 2]]' 96 >>> t.toString(signature=True) 97 '[["currency", "opencent"], ["amount", 2], ["signature", ""]]' 98 >>> t.getData() 99 [('currency', 'opencent'), ('amount', 2)] 100 >>> t2 = Token(t.getData()) 101 >>> t2.getData() 102 [('currency', 'opencent'), ('amount', 2)] 103 >>> t.signature = 'mysignature' 104 >>> t.toString(signature=True) 105 '[["currency", "opencent"], ["amount", 2], ["signature", "mysignature"]]' 106 >>> m = Message() 107 >>> m.subject = 'test' 108 >>> m.tokens = [t,t2] 109 >>> m.toString() 110 '[["subject", "test"], ["tokens", [[["currency", "opencent"], ["amount", 2]], [["currency", "opencent"], ["amount", 2]]]]]' 111 >>> m.getData() 112 [('subject', 'test'), ('tokens', [[('currency', 'opencent'), ('amount', 2)], [('currency', 'opencent'), ('amount', 2)]])] 113 >>> m2 = Message(m.getData()) 114 >>> m2.getData() == m.getData() 115 True 116 >>> m2.toString() == m2.toString() 117 True 118 """ 178 179 119 180 120 181 -
trunk/sandbox/jhb/oc2/rsa.py
r247 r250 328 328 key consists of a dict {d: ...., p: ...., q: ....). 329 329 """ 330 330 return (dummypub,dummypriv) 331 331 (p, q, e, d) = gen_keys(nbits) 332 332 … … 529 529 530 530 531 531 dummypub = { 532 'e': 59343568823711559206614914329434374961303042335788099534897501357955675804133L, 533 'n': 32793647770017443581051908007908006621376604150499221366839445678176407494654130256572721798731647281073382247358431120858829497973290288823842062554766872356043862368004460824686561544242774370448685624290963022007959843337482265073763255429596031300239158232169931316001844162136279539357507455710562227577L 534 } 535 536 dummypriv = { 537 'q': 3660876769483489857077409618418989781902917148342703560038011826242773069902176126219730148875372119227365538620396693688963051979724315365417720940740849L, 538 'p': 8957867154497055858370988090953024497950216741166048812169220114248696092230327733254526217831517389137130597830562133311139440841609128753512364848094473L, 539 'd': 12619589565384678078150569778102981741046267149118420445896125941979396328586657133712760591528167393457329828435758755256948329844592838106750783634900284025380032774546264335257012829516042607077111098646252442031819834114954318384114125879377117610343879752299012777002244350133926279173002674800640331117L} 532 540 533 541 … … 537 545 if 1: 538 546 import time 539 #(pub,priv) = gen_pubpriv_keys(1024)547 (pub,priv) = gen_pubpriv_keys(1024) 540 548 if 1: 541 pub = {'e': 59343568823711559206614914329434374961303042335788099534897501357955675804133L, 542 'n': 32793647770017443581051908007908006621376604150499221366839445678176407494654130256572721798731647281073382247358431120858829497973290288823842062554766872356043862368004460824686561544242774370448685624290963022007959843337482265073763255429596031300239158232169931316001844162136279539357507455710562227577L} 543 priv = {'q': 3660876769483489857077409618418989781902917148342703560038011826242773069902176126219730148875372119227365538620396693688963051979724315365417720940740849L, 544 'p': 8957867154497055858370988090953024497950216741166048812169220114248696092230327733254526217831517389137130597830562133311139440841609128753512364848094473L, 545 'd': 12619589565384678078150569778102981741046267149118420445896125941979396328586657133712760591528167393457329828435758755256948329844592838106750783634900284025380032774546264335257012829516042607077111098646252442031819834114954318384114125879377117610343879752299012777002244350133926279173002674800640331117L} 549 pass 546 550 if 0: 547 551 (pub,priv) = ({'e': 3197601411731116245564574341873883965700807663084732800379376818822337768214254275271880556652543127861042149268538435129289119875433847550131501030387489L, 'n': 10010369815382334240798530070718437854966721919010883362239947723044651469296597049454697875962523892167961291050690952736009970933207150773523631818070845272169487515533531012017986671583117870935704791444203091193928433685036216475710517809854134259468721246954372989146266743601614235731605829521314456547427727170490340220674730134652649494795255568521600458207445549064461533102227417295842548674337715761362209701734789853469920681184060067484771558465649908138716260602630770402224385695023184536234858539880642604697788322269392260439339765412460944589951571879796455505538134420317166479947358156062601693631L}, {'q': 71965600310892660429596898829670710653460148180418095123381449844052583795523012040229068564004895983101524115981347946055591335247903874583493068435665706247560257067715751690858970054084093796406191757154228889454862489531588573733962647071944624542539072044760521321849853532919544810806179365743581833777L, 'p': 139099372090795607726534110588106724714748422622835743921578772078079056922772905042826722454890797681407412421239584468016215098928247799729322355221381502409668675456356288320338371140589835466925402699800592201081119770108520423450701555386146286042071274331899104700802281153510654832285005494641183409903L, 'd': 2303141903135405741196770316647349478451046851656460345238126953851335354457956582261071364112927329063172609648667594153989314522741915259780604774082900187421379799944807777478001765690017634728386784574675440128718738783220812396390380020488828055736972630556491383856716073773079586029351343732817861978611326631064317705218919924700761528865528832464733884127079042865050020476303293874373222849912706661252250304706695160160822827622086731394008802874568358702895903468129589361385276702313798198182238681153517515581052056557552995405472004415453043300567819425403784410663519000867938462388941313183838315329L}) … … 591 595 #blinding 592 596 t = time.time() 593 message = 's'*64 597 #message = 'f'*65 598 message = 'c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2' 594 599 print len(message) 595 600 #print 'cleartext ', message
