From 5262c679d0aa086007a7a6704bc1ea62142f769b Mon Sep 17 00:00:00 2001 From: Rick Rongen Date: Wed, 6 Feb 2019 14:35:07 +0100 Subject: [PATCH] Added start of keepassplugin --- .gitignore | 3 +++ Crx/keepassplugin.py | 28 ++++++++++++++++++++++++++++ requirements.txt | 4 +++- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 Crx/keepassplugin.py diff --git a/.gitignore b/.gitignore index 2e452ac..21a07ca 100644 --- a/.gitignore +++ b/.gitignore @@ -104,4 +104,7 @@ venv.bak/ # mypy .mypy_cache/ + +# Idea .idea/ +*.iml diff --git a/Crx/keepassplugin.py b/Crx/keepassplugin.py new file mode 100644 index 0000000..6f90646 --- /dev/null +++ b/Crx/keepassplugin.py @@ -0,0 +1,28 @@ +import sys +import gzip +import base64 +from lxml import etree + +if sys.platform == 'win32': + iswin = True + import win32crypt +else: + iswin = False + win32crypt = None + + +ADDITIONAL_ENTROPY = b'\xf8\x03\xfaQ\x87\x18I]' +PREFIX = 'data:application/vnd.KeePass.Entries-E;base64,' + + +def parse_keepass_entry(data: str): + if not data.startswith(PREFIX): + raise ValueError("Not a valid entry") + + data = base64.b64decode(data.split(','[1])) + + if iswin: + data = win32crypt.CryptUnprotectData(data, ADDITIONAL_ENTROPY) + + data = gzip.decompress(data) + return data.decode() # XML String diff --git a/requirements.txt b/requirements.txt index 898cd84..751b266 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,3 @@ -requests >= 2.21.0 \ No newline at end of file +requests >= 2.21.0 +pywin32 >= 224 +lxml >= 4.3.0 \ No newline at end of file