From 25ed9b71564b73b07d664e2396c641ffe74f45b1 Mon Sep 17 00:00:00 2001 From: Brian Sherson Date: Tue, 27 Aug 2013 20:39:32 -0700 Subject: --- wallet.py | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) mode change 120000 => 100644 wallet.py (limited to 'wallet.py') diff --git a/wallet.py b/wallet.py deleted file mode 120000 index eba4a72..0000000 --- a/wallet.py +++ /dev/null @@ -1 +0,0 @@ -../wallet.py \ No newline at end of file diff --git a/wallet.py b/wallet.py new file mode 100644 index 0000000..05321f0 --- /dev/null +++ b/wallet.py @@ -0,0 +1,37 @@ +#!/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() -- cgit v1.2.3