Source code for crypto

"""
crypto module
=============

* `/genkeys` - `Generate keys handler <#crypto.GenkeysPage>`_
* `/addkey` - `Add key handler <#crypto.AddkeyPage>`_

"""
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from Crypto.Cipher import ARC4 as Crypter
import base64

import keys

# ARC4/XOR require two instances to encode/decode


[docs]def encrypt(source, key): """ encrypt """ return Crypter.new(key).encrypt(source)
[docs]def decrypt(source, key): """ decrypt """ return Crypter.new(key).decrypt(source)
[docs]def decode_data(source, delimiter='\n'): """ decode data """ for keymarkerpair in keys.data(): try: source_decoded = base64.b64decode(source) values = decrypt(source_decoded, keymarkerpair[0]).split(delimiter) if values[0] == keymarkerpair[1]: return tuple(values[1:]) except (TypeError, IndexError): break return None
[docs]def encode_data(values, delimiter='\n'): """ encode data """ data = '' values = list(values) current = keys.current() values.insert(0, current[1]) for i in xrange(len(values)): if i > 0: data += delimiter data += str(values[i]) return base64.b64encode(encrypt(data, current[0]))
[docs]class BaseHandler(webapp.RequestHandler): """ Base crypto module handler * :http:get:`/.*` - `BaseHandler GET <#crypto.BaseHandler.get>`_ * :http:post:`/.*` - `BaseHandler POST <#crypto.BaseHandler.post>`_ """
[docs] def get(self): """ GET request """ self.action()
[docs] def post(self): """ POST request """ self.action()
[docs]class AddkeyPage(BaseHandler): """ Add key handler * :http:get:`/addkey` - `AddkeyPage GET <#crypto.AddkeyPage.action>`_ * :http:post:`/addkey` - `AddkeyPage POST <#crypto.AddkeyPage.action>`_ """ action = keys.rotate # GET/POST request action
[docs]class GenkeysPage(BaseHandler): """ Generate keys handler * :http:get:`/genkeys` - `GenkeysPage GET <#crypto.GenkeysPage.action>`_ * :http:post:`/genkeys` - `GenkeysPage POST <#crypto.GenkeysPage.action>`_ """ action = keys.refresh # GET/POST request action
APPLICATION = webapp.WSGIApplication([ ('/genkeys', GenkeysPage), ('/addkey', AddkeyPage), ], debug=True)
[docs]def main(): """ main """ run_wsgi_app(APPLICATION)
if __name__ == "__main__": main()

This Page