mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Refactor encryption into the globals module for ease of re-use
This commit is contained in:
parent
63381b7859
commit
6649b60dc5
@ -1,6 +1,8 @@
|
||||
# vim:fileencoding=utf-8
|
||||
# License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
||||
|
||||
from aes import GCM
|
||||
|
||||
_boss = None
|
||||
|
||||
def set_boss(b):
|
||||
@ -10,3 +12,21 @@ def set_boss(b):
|
||||
def get_boss():
|
||||
return _boss
|
||||
|
||||
class Messenger:
|
||||
|
||||
def __init__(self):
|
||||
self.secret = Uint8Array(64)
|
||||
|
||||
def reset(self):
|
||||
window.crypto.getRandomValues(self.secret)
|
||||
self.gcm_to_iframe = GCM(self.secret.subarray(0, 32))
|
||||
self.gcm_from_iframe = GCM(self.secret.subarray(32))
|
||||
|
||||
def encrypt(self, data):
|
||||
return self.gcm_to_iframe.encrypt(JSON.stringify(data))
|
||||
|
||||
def decrypt(self, data):
|
||||
return JSON.parse(self.gcm_from_iframe.decrypt(data))
|
||||
|
||||
messenger = Messenger()
|
||||
iframe_id = 'read-book-iframe'
|
||||
|
@ -1,7 +1,6 @@
|
||||
# vim:fileencoding=utf-8
|
||||
# License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
||||
|
||||
from aes import GCM
|
||||
|
||||
def decode_component(x):
|
||||
x = str.replace(x,',p', '|')
|
||||
@ -11,17 +10,6 @@ def decode_url(x):
|
||||
parts = x.split(',,')
|
||||
return decode_component(parts[0]), decode_component(parts[1] or '')
|
||||
|
||||
secret = Uint8Array(64)
|
||||
window.crypto.getRandomValues(secret)
|
||||
gcm_to_iframe, gcm_from_iframe = GCM(secret.subarray(0, 32)), GCM(secret.subarray(32))
|
||||
iframe_id = 'read-book-iframe'
|
||||
|
||||
def encrypt_message(data):
|
||||
return gcm_to_iframe.encrypt(JSON.stringify(data))
|
||||
|
||||
def decrypt_message(data):
|
||||
return JSON.parse(gcm_from_iframe.decrypt(data))
|
||||
|
||||
class Resource:
|
||||
|
||||
def __init__(self, name, mimetype, data, placeholder, parent):
|
||||
|
@ -3,7 +3,8 @@
|
||||
|
||||
from elementmaker import E
|
||||
from gettext import gettext as _
|
||||
from read_book.resources import ResourceManager, encrypt_message, iframe_id, decrypt_message, secret
|
||||
from read_book.globals import messenger, iframe_id
|
||||
from read_book.resources import ResourceManager
|
||||
|
||||
LOADING_DOC = '''
|
||||
<!DOCTYPE html>
|
||||
@ -59,7 +60,7 @@ class View:
|
||||
|
||||
def send_message(self, data):
|
||||
if self.encrypted_communications:
|
||||
data = encrypt_message(data)
|
||||
data = messenger.encrypt(data)
|
||||
self.iframe.contentWindow.postMessage(data, '*')
|
||||
|
||||
def handle_message(self, event):
|
||||
@ -68,7 +69,7 @@ class View:
|
||||
data = event.data
|
||||
if self.encrypted_communications:
|
||||
try:
|
||||
data = decrypt_message(data)
|
||||
data = messenger.decrypt(data)
|
||||
except Exception as e:
|
||||
print('Could not process message from iframe:')
|
||||
console.log(e)
|
||||
@ -80,7 +81,8 @@ class View:
|
||||
print('Unknown action in message from iframe to parent: ' + data.action)
|
||||
|
||||
def on_iframe_ready(self, data):
|
||||
self.send_message({'action':'keys', 'secret':secret})
|
||||
messenger.reset()
|
||||
self.send_message({'action':'keys', 'secret':messenger.secret})
|
||||
self.iframe_ready = True
|
||||
if self.pending_spine_load:
|
||||
self.show_spine_item_stage2()
|
||||
|
Loading…
x
Reference in New Issue
Block a user