Changeset 264 for trunk

Show
Ignore:
Timestamp:
04/06/09 19:08:32 (3 years ago)
Author:
ocjhb
Message:

now with authorizer

Location:
trunk/sandbox/jhb/oc2
Files:
5 modified

Legend:

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

    r263 r264  
    443443############################################################################### 
    444444 
     445>>> from authorizer import Authorizer 
     446>>> authorizer = Authorizer({}) 
     447>>> authpub = authorizer.createKeys()  
     448>>> mint.addAuthKey(authpub) 
    445449>>> clientside = protocols.TransferRequest(transport,tid,'foo',[[mkc.keyId,blind]],[]) 
    446 >>> testserver.run_once(port,issuer,mint) 
     450>>> testserver.run_once(port,mint=mint,authorizer=authorizer) 
    447451>>> text,value =  clientside.run() 
    448452>>> text 
  • trunk/sandbox/jhb/oc2/messages.py

    r263 r264  
    3737        Field('blinds'), 
    3838        SubitemsField('coins'), 
    39         Field('options') 
     39        Field('options'), 
    4040    ] 
    4141 
     
    4646    ] 
    4747 
     48class AuthorizedMessage(Message): 
     49    fields = Message.fields + [ 
     50        OneItemField('message',klass=Message), 
     51        Field('keyId'), 
     52        Field('signature',signing=False) 
     53    ] 
     54 
     55 
  • trunk/sandbox/jhb/oc2/mint.py

    r263 r264  
    22 
    33class Mint(Entity): 
     4 
    45 
    56    def setCDD(self,cdd): 
     
    3940        return int(denomination) 
    4041 
    41     def validateTarget(self,target,amount): 
    42         return True 
    4342 
    44     def mintBlinds(self,target,blinds): 
     43    def addAuthKey(self,key): 
     44        keyid = key.hash() 
     45        self.storage.setdefault('authkeys',{})[keyid] = key 
     46 
     47    def getAuthKey(self,keyid): 
     48        return self.storage['authkeys'][keyid] 
     49 
     50    def validateAuthorization(self,message): 
     51        keyid = message.keyId 
     52        key = self.getAuthKey(keyid) 
     53        return key.verifyContainerSignature(message) 
     54 
     55    def handleTransferRequest(self,authorizedMessage): 
     56         
     57        if not self.validateAuthorization(authorizedMessage): 
     58            return ('nonvalid','') 
     59        else:  
     60            message = authorizedMessage.message 
     61         
     62        target = message.target 
     63        blinds = message.blinds 
     64        coins = message.coins 
     65 
    4566        amount = 0 
    4667        currentversion = len(self.storage['keys']) - 1 
     
    6788            return ('errors',result) 
    6889 
    69         valid = self.validateTarget(target,amount) 
    70  
    71         if not valid: 
    72             return ('nonvalid','') 
    73  
    74         if valid and not errors: 
     90        else: 
    7591            i = 0 
    7692            for keyid,blind in blinds: 
  • trunk/sandbox/jhb/oc2/protocols.py

    r263 r264  
    109109            raise 'unknown thing' 
    110110 
    111 class TransferHandle(Protocol): 
     111class TransferHandling(Protocol): 
    112112 
    113     def __init__(self,mint): 
     113    def __init__(self,mint,authorizer): 
    114114        self.mint = mint 
     115        self.authorizer = authorizer 
    115116 
    116117    def run(self,message): 
     
    118119        type = options['type'] 
    119120        if type == 'mint': 
    120             text,value = self.mint.mintBlinds(message.target,message.blinds) 
     121            authorizedMessage = self.authorizer.authorize(message) 
     122            if not authorizedMessage: 
     123                raise 'not authorized' 
     124            text,value = self.mint.handleTransferRequest(authorizedMessage) 
    121125            if text == 'minted': 
    122126                answer = messages.TransferAccept() 
  • trunk/sandbox/jhb/oc2/testserver.py

    r263 r264  
    1818            protocol = protocols.GiveMintKeys(self.issuer) 
    1919        elif message.header == 'TransferRequest': 
    20             protocol = protocols.TransferHandle(self.mint) 
     20            protocol = protocols.TransferHandling(self.mint,self.authorizer) 
    2121        answer = protocol.run(message) 
    2222        self.send_response(200) 
     
    2626 
    2727 
    28 def run_once(port,issuer=None,mint=None): 
     28def run_once(port,issuer=None,mint=None,authorizer=None): 
    2929    Handler.issuer = issuer 
    3030    Handler.mint = mint 
     31    Handler.authorizer = authorizer 
    3132    httpd = BaseHTTPServer.HTTPServer(("", port), Handler) 
    3233    import threading