implemented derived passwords

This commit is contained in:
shim_
2018-07-21 14:02:15 +02:00
parent 0c803ba912
commit ecc1cc667b
3 changed files with 57 additions and 10 deletions

View File

@@ -1,7 +1,8 @@
import time
from encryptedscreenshot import EncryptedScreenshot, Signer
import getpass, os
from hashderive import HashDerivedKey
import getpass, os, sys
from PythonQt.QtGui import QInputDialog
from PythonQt.QtCore import QSettings
from seafapi import *
@@ -36,13 +37,17 @@ class EncryptedProcessor(Processor):
def __init__(self,seaf_lib,lib_path):
self.seaf_lib = seaf_lib
self.lib_path = lib_path
self.host = None
self.derived_key = HashDerivedKey(os.urandom(32))
self.load_settings()
def load_settings(self):
settings = QSettings()
settings.beginGroup("uploaders")
settings.beginGroup("seafile")
self.host = settings.value("encscreen-url", "")
self.host = settings.value("encscreen-url", None)
if settings.value("encscreen-derived-key", None):
self.derived_key = HashDerivedKey.from_hex(settings.value("encscreen-derived-key", None))
settings.endGroup()
settings.endGroup()
@@ -51,6 +56,7 @@ class EncryptedProcessor(Processor):
settings.beginGroup("uploaders")
settings.beginGroup("seafile")
settings.setValue("encscreen-url", self.host)
if self.derived_key: settings.setValue(self.derived_key.master_hex())
settings.endGroup()
settings.endGroup()
@@ -58,17 +64,28 @@ class EncryptedProcessor(Processor):
return self.host is not None and self.host != ""
def configure(self,parent):
self.host = QInputDialog.getText(parent, 'Encscreen Server Setup', 'Enter server url (ex. https://servertld/s#%id%key):', text="https://screens.shimun.net/s#%id%key")
self.host = QInputDialog.getText(parent, 'Encscreen Server Setup', 'Enter server url (ex. https://servertld/s#%id%key):', text=(self.host or "https://screens.shimun.net/s#%id%key"))
master = QInputDialog.getText(parent, 'Encscreen Master Key Setup', 'Enter master key (hex encoded):', text=(self.derived_key.master_hex() if self.derived_key else "<random>"))
try:
self.derived_key = HashDerivedKey.from_hex(master)
except:
self.derived_key = HashDerivedKey(os.urandom(32))
self.save_settings()
def upload(self,file,name):
enrypted = EncryptedScreenshot({
def derive():
seed = os.urandom(16)
(_, key_meta) = self.derived_key.derive_metadata(seed)
return (self.derived_key.derive_hex(seed)[0:16], key_meta)
(key, key_meta) = derive()
enrypted = EncryptedScreenshot(metadata = {
"owner": getpass.getuser(),
"format": str(file).split('.')[-1],
"title": name,
"timestamp": int(time.time() * 1000),
"size": os.stat(file).st_size
},signer=Signer.default())
"size": os.stat(file).st_size,
"public": key_meta
},password=key,signer=Signer.default())
tmpHandle = open(file + "c", 'wb')
tmpHandle.write(enrypted.assemble(file))
tmpHandle.close()