summaryrefslogtreecommitdiff
path: root/wallet.py
diff options
context:
space:
mode:
Diffstat (limited to 'wallet.py')
l---------[-rw-r--r--]wallet.py38
1 files changed, 1 insertions, 37 deletions
diff --git a/wallet.py b/wallet.py
index 05321f0..eba4a72 100644..120000
--- a/wallet.py
+++ b/wallet.py
@@ -1,37 +1 @@
-#!/usr/bin/python
-import pickle, Crypto.Cipher.Blowfish, os, getpass
-from threading import Lock
-
-class Wallet(dict):
- def __init__(self, filename):
- self.lock=Lock()
- if os.path.isfile(filename):
- self.f=open(filename,"rb+")
- self.passwd=getpass.getpass()
- self.crypt=Crypto.Cipher.Blowfish.new(self.passwd)
- contents_encrypted=self.f.read()
- contents=self.crypt.decrypt(contents_encrypted+"\x00"*((-len(contents_encrypted))%8))
- if contents.startswith(self.passwd):
- self.update(dict(pickle.loads(contents[len(self.passwd):])))
- else:
- self.f.close()
- raise BaseException, "Incorrect Password"
- else:
- self.f=open(filename,"wb+")
- passwd=self.passwd=None
- while passwd==None or passwd!=self.passwd:
- passwd=getpass.getpass("Enter new password: ")
- self.passwd=getpass.getpass("Confirm new password: ")
- if passwd!=self.passwd: print "Passwords do not match!"
- self.crypt=Crypto.Cipher.Blowfish.new(self.passwd)
- self.flush()
- def flush(self):
- contents=self.passwd+pickle.dumps(self.items(), protocol=2)
- self.lock.acquire()
- try:
- self.f.seek(0)
- self.f.write(self.crypt.encrypt(contents+"\x00"*((-len(contents))%8)))
- self.f.truncate()
- self.f.flush()
- finally:
- self.lock.release()
+../wallet.py \ No newline at end of file