Changeset 250 for trunk

Show
Ignore:
Timestamp:
03/30/09 15:18:20 (3 years ago)
Author:
ocjhb
Message:

playing with cryptostuff

Location:
trunk/sandbox/jhb/oc2
Files:
17 added
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/sandbox/jhb/oc2/container.py

    r249 r250  
    1 """ 
    2 >>>  
    3 >>>  
    4 """ 
     1import simplejson, datetime, binascii 
    52 
    6  
    7  
    8 import simplejson 
    9  
    10  
    11  
     3################################### Fields ################################## 
    124 
    135class Field(object): 
     
    179        self.default = default 
    1810 
    19     def getencoded(self,object): 
     11    def getencoded(self,object,allData=False): 
    2012        value = getattr(object,self.name,self.default) 
    2113        return value 
     
    2416        setattr(object,self.name,data) 
    2517 
    26 class SubitemField(Field): 
     18class 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 
     34class 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     
     44class OneItemField(Field): 
    2745     
    2846    def __init__(self,name,signing=True,default='',klass=dict): 
     
    3149 
    3250 
    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 
     65class 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): 
    3473        out = [] 
    3574        for item in getattr(object,self.name): 
    36             out.append(item.getData()) 
     75            out.append(item.getData(allData=allData)) 
    3776        return out        
    3877         
     
    4382        setattr(object,self.name,value)      
    4483 
     84 
     85################################### Containers ################################## 
    4586               
    4687 
    4788class Container(object):    
     89     
    4890    fields = [] 
     91 
    4992    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): 
    50102        if type(data) == type(''): 
    51103            data = simplejson.loads(data) 
     
    57109            else:                
    58110                setattr(self,field.name,field.default) 
    59         setattr(self,'signature',data.get('signature','')) 
    60          
    61111 
    62     def getData(self,signingOnly=False,signature=False): 
     112 
     113    def getData(self,allData=False): 
    63114        certdata = [] 
    64115        for field in self.fields: 
    65             if signingOnly and not field.signing: 
     116            if not (allData or field.signing): 
    66117                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))) 
    70119        return certdata 
    71120 
    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 
     125class 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 
     141class PublicKey(Container): 
     142    "A public key" 
     143    fields = [ 
     144        BinaryField('a'), 
     145        BinaryField('b'), 
     146        BinaryField('c') 
     147    ]         
     148 
     149 
     150class 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    ] 
    76164 
    77165 
     
    79167    fields = [ 
    80168        Field('currency'), 
    81         Field('amount') 
     169        Field('amount'), 
     170        Field('signature',signing=False) 
    82171    ] 
    83172 
     
    85174    fields = [ 
    86175        Field('subject'), 
    87         SubitemField('tokens',klass=Token) 
     176        SubitemsField('tokens',klass=Token), 
    88177    ]         
    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 
    119180 
    120181 
  • trunk/sandbox/jhb/oc2/rsa.py

    r247 r250  
    328328    key consists of a dict {d: ...., p: ...., q: ....). 
    329329    """ 
    330      
     330    return (dummypub,dummypriv)  
    331331    (p, q, e, d) = gen_keys(nbits) 
    332332 
     
    529529 
    530530 
    531  
     531dummypub = { 
     532'e': 59343568823711559206614914329434374961303042335788099534897501357955675804133L,  
     533'n': 32793647770017443581051908007908006621376604150499221366839445678176407494654130256572721798731647281073382247358431120858829497973290288823842062554766872356043862368004460824686561544242774370448685624290963022007959843337482265073763255429596031300239158232169931316001844162136279539357507455710562227577L 
     534} 
     535 
     536dummypriv = { 
     537'q': 3660876769483489857077409618418989781902917148342703560038011826242773069902176126219730148875372119227365538620396693688963051979724315365417720940740849L,  
     538'p': 8957867154497055858370988090953024497950216741166048812169220114248696092230327733254526217831517389137130597830562133311139440841609128753512364848094473L,  
     539'd': 12619589565384678078150569778102981741046267149118420445896125941979396328586657133712760591528167393457329828435758755256948329844592838106750783634900284025380032774546264335257012829516042607077111098646252442031819834114954318384114125879377117610343879752299012777002244350133926279173002674800640331117L} 
    532540 
    533541 
     
    537545    if 1: 
    538546        import time 
    539         #(pub,priv) =  gen_pubpriv_keys(1024) 
     547        (pub,priv) =  gen_pubpriv_keys(1024) 
    540548        if 1: 
    541             pub = {'e': 59343568823711559206614914329434374961303042335788099534897501357955675804133L,  
    542                    'n': 32793647770017443581051908007908006621376604150499221366839445678176407494654130256572721798731647281073382247358431120858829497973290288823842062554766872356043862368004460824686561544242774370448685624290963022007959843337482265073763255429596031300239158232169931316001844162136279539357507455710562227577L} 
    543             priv = {'q': 3660876769483489857077409618418989781902917148342703560038011826242773069902176126219730148875372119227365538620396693688963051979724315365417720940740849L,  
    544                     'p': 8957867154497055858370988090953024497950216741166048812169220114248696092230327733254526217831517389137130597830562133311139440841609128753512364848094473L,  
    545                     'd': 12619589565384678078150569778102981741046267149118420445896125941979396328586657133712760591528167393457329828435758755256948329844592838106750783634900284025380032774546264335257012829516042607077111098646252442031819834114954318384114125879377117610343879752299012777002244350133926279173002674800640331117L} 
     549            pass    
    546550        if 0:                     
    547551            (pub,priv) = ({'e': 3197601411731116245564574341873883965700807663084732800379376818822337768214254275271880556652543127861042149268538435129289119875433847550131501030387489L, 'n': 10010369815382334240798530070718437854966721919010883362239947723044651469296597049454697875962523892167961291050690952736009970933207150773523631818070845272169487515533531012017986671583117870935704791444203091193928433685036216475710517809854134259468721246954372989146266743601614235731605829521314456547427727170490340220674730134652649494795255568521600458207445549064461533102227417295842548674337715761362209701734789853469920681184060067484771558465649908138716260602630770402224385695023184536234858539880642604697788322269392260439339765412460944589951571879796455505538134420317166479947358156062601693631L}, {'q': 71965600310892660429596898829670710653460148180418095123381449844052583795523012040229068564004895983101524115981347946055591335247903874583493068435665706247560257067715751690858970054084093796406191757154228889454862489531588573733962647071944624542539072044760521321849853532919544810806179365743581833777L, 'p': 139099372090795607726534110588106724714748422622835743921578772078079056922772905042826722454890797681407412421239584468016215098928247799729322355221381502409668675456356288320338371140589835466925402699800592201081119770108520423450701555386146286042071274331899104700802281153510654832285005494641183409903L, 'd': 2303141903135405741196770316647349478451046851656460345238126953851335354457956582261071364112927329063172609648667594153989314522741915259780604774082900187421379799944807777478001765690017634728386784574675440128718738783220812396390380020488828055736972630556491383856716073773079586029351343732817861978611326631064317705218919924700761528865528832464733884127079042865050020476303293874373222849912706661252250304706695160160822827622086731394008802874568358702895903468129589361385276702313798198182238681153517515581052056557552995405472004415453043300567819425403784410663519000867938462388941313183838315329L})                     
     
    591595        #blinding 
    592596        t = time.time() 
    593         message = 's'*64 
     597        #message = 'f'*65 
     598        message = 'c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2' 
    594599        print len(message) 
    595600        #print 'cleartext ', message