1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
import datetime
import uuid
import json
import timeit
from leap.keymanager import openpgp
from leap.soledad.common.document import ServerDocument
from leap.soledad.common.crypto import (
EncryptionSchemes,
ENC_JSON_KEY,
ENC_SCHEME_KEY,
)
from util import log
message = """To: Ed Snowden <snowden@bitmask.net>
Date: %s
From: Glenn Greenwald <greenwald@bitmask.net>
hi!
"""
def get_message():
return message % datetime.datetime.now().strftime("%a %b %d %H:%M:%S:%f %Y")
def get_enc_json(pubkey, message):
with openpgp.TempGPGWrapper(gpgbinary='/usr/bin/gpg') as gpg:
gpg.import_keys(pubkey)
key = gpg.list_keys().pop()
# We don't care about the actual address, so we use a
# dummy one, we just care about the import of the pubkey
openpgp_key = openpgp._build_key_from_gpg("dummy@mail.com",
key, pubkey)
enc_json = str(gpg.encrypt(
json.dumps(
{'incoming': True, 'content': message},
ensure_ascii=False),
openpgp_key.fingerprint,
symmetric=False))
return enc_json
def get_new_doc(enc_json):
doc = ServerDocument(doc_id=str(uuid.uuid4()))
doc.content = {
'incoming': True,
ENC_SCHEME_KEY: EncryptionSchemes.PUBKEY,
ENC_JSON_KEY: enc_json
}
return doc
def get_pubkey():
with open('./keys/5447A9AD50E3075ECCE432711B450E665FE63573.pub') as f:
return f.read()
def put_one_message(pubkey, db):
enc_json = get_enc_json(pubkey, get_message())
doc = get_new_doc(enc_json)
db.put_doc(doc)
def put_lots_of_messages(db, number):
log("Populating database with %d encrypted messages... "
% number, line_break=False)
pubkey = get_pubkey()
def _put_one_message():
put_one_message(pubkey, db)
time = timeit.timeit(_put_one_message, number=number)
log("done.")
average_time = time / number
log("put_one_message average time: %f" % average_time)
return average_time
|