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