2 # Copyright 2018-2019, The Tor Project, Inc. See LICENSE for licensing info.
4 # Reference implementation for our rudimentary OPE code, used to
5 # generate test vectors. See crypto_ope.c for more details.
7 # Future imports for Python 2.7, mandatory in 3.0
8 from __future__
import division
9 from __future__
import print_function
10 from __future__
import unicode_literals
12 from cryptography
.hazmat
.primitives
.ciphers
import Cipher
, algorithms
, modes
13 from cryptography
.hazmat
.primitives
.ciphers
.algorithms
import AES
14 from cryptography
.hazmat
.backends
import default_backend
16 from binascii
import a2b_hex
18 #randomly generated and values.
20 "19e05891d55232c08c2cad91d612fdb9cbd6691949a0742434a76c80bc6992fe")
21 PTS
= [ 121132, 82283, 72661, 72941, 123122, 12154, 121574, 11391, 65845,
22 86301, 61284, 70505, 30438, 60150, 114800, 109403, 21893, 123569,
23 95617, 48561, 53334, 92746, 7110, 9612, 106958, 46889, 87790, 68878,
24 47917, 121128, 108602, 28217, 69498, 63870, 57542, 122148, 46254,
29 backend
= default_backend()
32 cipher
= Cipher(algorithms
.AES(KEY
), modes
.CTR(IV
), backend
=backend
)
33 e
= cipher
.encryptor()
35 v
= e
.update(b
'\x00\x00')
36 yield v
[0] + 256 * v
[1] + 1
39 return sum(w
for w
, _
in zip(words(), range(n
)))
42 return ' {{ {}, UINT64_C({}) }},'.format(n
, encrypt(n
))