aboutsummaryrefslogtreecommitdiffstats
path: root/common/PubnubCrypto.py
diff options
context:
space:
mode:
authorgcohen2013-10-08 18:43:16 -0700
committergcohen2013-10-08 18:43:16 -0700
commitcb4b18841fa719ce982b06002889831aedd287ac (patch)
tree81bf5d1ee8eb06281bedf80e440a1249cf7781a0 /common/PubnubCrypto.py
parentaaca8fb7cd2f6534cd87fc23efc82d2128b05e13 (diff)
parent52c51378b4647911a64c8d4b1c759756d4930d4b (diff)
downloadpubnub-python-cb4b18841fa719ce982b06002889831aedd287ac.tar.bz2
Merge branch 'TR-89.88.56.47.55'
Conflicts: .gitignore
Diffstat (limited to 'common/PubnubCrypto.py')
-rw-r--r--common/PubnubCrypto.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/common/PubnubCrypto.py b/common/PubnubCrypto.py
new file mode 100644
index 0000000..df7cb8d
--- /dev/null
+++ b/common/PubnubCrypto.py
@@ -0,0 +1,81 @@
+from Crypto.Cipher import AES
+from Crypto.Hash import MD5
+from base64 import encodestring, decodestring
+import hashlib
+import hmac
+
+class PubnubCrypto() :
+ """
+ #**
+ #* PubnubCrypto
+ #*
+ #**
+
+ ## Initiate Class
+ pc = PubnubCrypto
+
+ """
+
+ def pad( self, msg, block_size=16 ):
+ """
+ #**
+ #* pad
+ #*
+ #* pad the text to be encrypted
+ #* appends a padding character to the end of the String
+ #* until the string has block_size length
+ #* @return msg with padding.
+ #**
+ """
+ padding = block_size - (len(msg) % block_size)
+ return msg + chr(padding)*padding
+
+ def depad( self, msg ):
+ """
+ #**
+ #* depad
+ #*
+ #* depad the decryptet message"
+ #* @return msg without padding.
+ #**
+ """
+ return msg[0:-ord(msg[-1])]
+
+ def getSecret( self, key ):
+ """
+ #**
+ #* getSecret
+ #*
+ #* hases the key to MD5
+ #* @return key in MD5 format
+ #**
+ """
+ return hashlib.sha256(key).hexdigest()
+
+ def encrypt( self, key, msg ):
+ """
+ #**
+ #* encrypt
+ #*
+ #* encrypts the message
+ #* @return message in encrypted format
+ #**
+ """
+ secret = self.getSecret(key)
+ Initial16bytes='0123456789012345'
+ cipher = AES.new(secret[0:32],AES.MODE_CBC,Initial16bytes)
+ enc = encodestring(cipher.encrypt(self.pad(msg)))
+ return enc
+ def decrypt( self, key, msg ):
+ """
+ #**
+ #* decrypt
+ #*
+ #* decrypts the message
+ #* @return message in decryped format
+ #**
+ """
+ secret = self.getSecret(key)
+ Initial16bytes='0123456789012345'
+ cipher = AES.new(secret[0:32],AES.MODE_CBC,Initial16bytes)
+ return self.depad((cipher.decrypt(decodestring(msg))))