This repository was archived by the owner on Jan 21, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathtest_ccakem.py
244 lines (202 loc) · 108 KB
/
test_ccakem.py
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
from Crypto.Random import get_random_bytes
from cpake import generate_kyber_keys
from params import KYBER_512SK_BYTES, KYBER_SYM_BYTES
from Crypto.Hash import SHA3_256
from util import cast_to_byte
from ccakem import kem_keygen512, kem_encaps512, kem_decaps512, kem_keygen768, kem_encaps768, kem_decaps768, \
kem_keygen1024, kem_encaps1024, kem_decaps1024
keygen512_packed_pub1 = [-77, 65, 6, 5, 3, 114, -58, 7, 80, 80, 66, -91, -103, -108, 96, 120, 89, -70, -31, 12, -65, -22, -109, 119, 16, 82, 37, 80, 3, 13, -78, -105, -116, 38, -44, 107, -52, 34, -117, 17, -14, 92, 114, 87, -109, 61, 48, -100, -5, -117, -97, 47, 89, 100, -88, -70, 25, 5, 37, -117, -116, -80, -60, 26, -124, -87, -80, -11, -49, -66, -80, 14, 105, -108, 7, -12, -59, 59, 63, 19, 0, 44, 18, 62, 78, -26, 116, -72, -68, 2, -113, -5, -85, 56, -119, -59, 118, -88, -87, 90, 23, 57, -123, 32, 107, -128, 59, 36, -93, 48, 14, -27, -79, 25, -13, -74, 28, -21, -8, 33, 39, 70, 74, 103, 82, 106, -101, -55, -113, -124, 41, 29, -40, -100, -95, 13, 54, 87, -31, -32, 28, 84, 87, 63, 97, 107, -98, 80, -75, 113, 37, -21, -112, -10, -12, 114, 72, -25, 31, 18, -77, -95, -119, 43, -126, 71, 121, 108, -16, 97, 18, -6, 121, 77, -38, 7, 60, -117, -39, -51, -28, -5, 28, -30, 10, -124, -17, 39, 126, 80, -59, 19, -49, 3, -87, -100, -85, 7, -33, -75, -108, -15, 22, -69, 4, 34, 39, -127, -94, -128, -14, 67, 7, -40, 50, 34, 122, 56, 113, 111, -6, 68, -46, -22, 2, -69, 81, 102, -18, -14, -104, -54, 51, 40, 79, 0, 121, -95, -24, 68, -85, 56, 108, 43, 33, 123, -7, -79, -100, -36, 92, -59, 90, 60, 40, 124, 98, 103, 120, 36, 78, 39, -6, 95, 27, -14, 56, 88, 82, 64, 100, 107, 46, -116, -126, 74, -60, 22, -100, -28, 98, -65, -122, 123, -124, 54, -29, -124, 95, -10, 1, -81, -120, 126, -20, 44, 10, -26, -109, 30, -122, -12, -128, -4, -47, -112, -117, 18, 42, -80, 120, -74, 71, 59, 55, 34, 96, -90, -40, 88, 14, -18, 8, 68, 57, 48, 94, 49, 56, -91, -76, 105, 23, -30, -69, 22, -69, -76, 118, -105, 114, -54, -121, -74, 15, -128, -90, 73, 100, 34, 93, 35, -118, 87, 55, 124, 60, -53, -11, -57, 63, -36, 72, 115, -103, -120, -13, 100, 117, -63, -94, 21, 41, -23, -52, 93, -46, -65, -113, 3, 7, -71, -63, 35, 47, 83, 78, 23, -12, -86, -80, -76, 70, -15, 8, 79, 29, 65, 83, -77, 92, 4, 11, 42, -58, 119, -60, 7, -10, -58, -57, -115, -40, -126, 63, -10, 26, -40, 9, -78, -4, 67, 72, -108, -110, -57, 66, 18, -89, 108, -25, 102, 32, 76, -116, 33, 105, 89, -80, 12, -64, 47, 70, -75, -93, 10, 57, -103, -104, 9, 66, 43, -60, 2, -45, -103, 106, 88, 16, -13, -93, 111, -104, 34, 75, -106, -105, 98, -57, -109, -53, -110, 49, -89, -120, 11, 32, 33, -10, -62, -58, -47, 70, -119, -96, -90, 22, -111, -82, 103, -72, 0, -35, -122, -74, -103, 37, 112, 10, -125, 122, 100, -126, -82, 100, -71, 108, -123, 6, -79, 126, 91, 17, 25, 48, 30, 94, -68, -104, -89, 105, 81, -122, 85, 44, -79, -70, -105, 44, -75, 11, -62, -117, -121, 74, -7, -93, -82, 91, -75, -115, -53, 96, 15, 1, 41, 93, -89, 111, 67, 100, 77, -8, -29, -124, 60, -10, -50, -121, -93, 24, 67, -52, -80, -11, 11, 112, 123, 120, -89, 1, 43, -118, -69, -11, 43, 0, 98, 112, 123, 83, 108, 9, 85, -82, -64, -39, 106, 118, -46, -98, -89, -117, 8, 84, -90, 77, -88, -111, 94, 84, -92, 89, 119, -25, 30, -27, -58, -87, 15, -22, -92, -24, 43, 48, 5, 53, 84, -55, -23, 102, -79, 21, -115, -19, -85, 62, -6, -90, -94, 17, -13, -58, -5, -108, -106, 35, 60, -101, -100, -118, 62, 83, -25, -119, 61, 123, 66, -59, -60, -82, 87, -43, -110, 69, -124, 19, -82, -27, 53, 32, -95, 84, 70, -85, 126, 47, -93, 126, -68, -10, 109, 83, 68, 30, -103, 114, 9, 119, -104, 92, -54, -4, 10, 78, -38, -86, -110, 21, 13, 38, -103, 44, 32, -77, 16, -66, 121, 27, 125, 54, 111, 30, 55, 107, 63, 36, 87, 68, -117, 88, 23, -111, 31, 58, 108, 13, -117, 54, 46, 40, -107, -88, -55, -76, 66, -3, 70, 84, -35, -73, 31, -25, -68, 106, -68, 53, -117, 71, 48, 117, 86, -41, 19, 43, -57, 99, -105, 120, -82, -46, -72, -82, 74, -57, 108, -94, -111, 74, 67, 89, 94, 91, -64, 78, 60, 113, 66, -90, -31, 82, 40, -54, 96, -41, -51, -87, -110, 61, -53, 32, 86, 101, 99, -6, 101, 24, 96, -110, 110, -114, 69, 117, 80, -44, 98, -35, -84, -97, -7]
keygen512_packed_priv1 = [-109, 50, 78, -25, 96, -125, -86, 118, 23, -87, -90, -75, 57, -41, 24, 74, 67, -90, 90, 3, 100, -15, 108, 80, -4, -39, 9, 57, -110, -126, -104, -38, 40, -46, 74, 85, -126, 67, 62, 107, -31, 92, 12, 88, -75, 53, -52, 86, -94, 33, -97, 112, 88, 59, 19, 25, -104, -99, -76, 58, 92, -27, 32, 39, 58, 12, 59, 76, 60, -68, 3, 79, -16, -126, 67, 84, 38, -126, -12, -54, -93, 81, 32, -70, -124, -27, 101, -33, -14, 127, -25, -64, -90, 50, 76, 126, -67, 118, 101, 109, 74, 104, -51, 38, 20, 67, -72, -75, 105, 82, -66, -93, 64, 71, -76, -102, 48, -2, 19, -94, -29, -26, 14, 27, -91, 69, -123, -4, 97, 2, -85, 40, 33, -30, 61, 119, 114, 1, -112, -91, 23, 116, 99, -62, 121, -56, 10, -117, 97, -101, 99, 59, 8, -50, -14, -93, -105, -88, 100, 68, 35, 92, -37, -108, 10, 123, 88, -81, 121, 103, 93, 94, 34, 122, -122, -91, 18, -123, 54, -65, -20, -105, 103, -35, -75, 60, 84, 74, -123, -6, -62, -94, -90, 112, -62, -89, 26, 127, -28, 60, 91, -48, 72, 70, 104, 7, -94, -20, -89, 53, 8, 41, 47, -55, 64, 57, 64, -102, 28, 56, 73, 67, -119, 81, 42, -95, 121, 126, -82, 97, 77, 98, 117, 99, 72, 106, -96, -37, -28, 55, -72, -111, -110, 111, 49, 97, -25, 44, 13, -109, -48, 126, -7, -128, 99, 12, 120, -79, 57, 51, 99, 106, 86, 47, -127, 72, 59, -43, -14, -66, 14, -124, 103, 54, 10, 104, 29, 10, -88, 8, -64, -108, -112, -123, 48, 83, -59, -88, -117, -116, -59, -45, 68, 120, 92, 121, -49, 100, -52, 45, 12, 10, 70, -30, -9, -52, -86, 3, 110, -112, 105, -110, -53, -77, 68, -19, 1, -61, 46, -58, 14, 108, -74, 102, -32, -39, 102, 12, -74, 88, 47, 44, 127, 38, 124, -106, -32, 66, 92, 73, -54, 9, -57, 50, 54, 51, 74, -106, -43, -27, -84, 79, -5, 97, 90, -125, -74, 90, -5, -110, 11, 39, 99, -25, 9, 14, -103, -20, -88, -126, -43, -103, -80, 20, 34, -110, 37, -68, -12, -62, -78, -94, -73, 14, -115, 76, 95, 16, 50, 50, 47, -89, 60, -7, -103, -78, 0, -16, 125, 106, 83, 70, 28, 22, -102, 7, -20, -56, -72, -20, 74, 49, 23, 93, -100, 12, 28, -103, 89, -66, 24, -48, 119, 117, 43, 22, -82, 64, 32, -41, 60, 0, -23, -47, -124, 118, 80, -83, 102, -112, 97, -19, 21, 103, 97, 102, -110, -125, 119, -111, 8, 34, 39, 3, 16, -106, -35, 1, -118, -102, -44, -53, 42, 43, 68, -79, 41, 113, -124, 1, 94, -79, -39, -106, -19, -58, 120, -97, -74, 75, 95, 32, 90, 2, 27, 62, -32, -106, 101, -47, -62, 79, 49, 74, 93, -126, 70, -125, 96, 74, 60, 61, 40, -81, 57, 21, 107, -125, 82, -104, -85, 54, 7, 33, -40, 119, 64, 66, 108, -12, 16, -116, 77, 120, 77, -106, -36, 91, -117, 116, 101, -40, -8, -84, -81, -6, 80, 41, 102, -73, -11, -72, 118, 60, 103, 98, 50, 69, 24, -59, 37, 92, -45, -76, 117, 12, -93, 61, -7, 108, 116, 105, 85, 65, 78, -14, 69, -25, 17, 55, -112, -119, 63, -1, -92, -112, -6, 34, -75, 118, 1, -120, -58, -11, 80, -73, 26, 10, -106, 55, -74, 58, -46, -104, -33, 33, 47, 77, 102, 115, -128, 35, -116, 42, -28, -122, 61, 73, -110, 33, 116, 16, -64, 28, -108, 44, -118, -111, -99, 115, 90, -75, 70, 45, -126, -27, -54, -8, -79, 70, 119, -88, 110, 78, 27, 102, 65, 114, 73, -60, -78, 5, 64, -22, 108, -51, 42, -50, 123, -62, -124, 10, -46, 36, -69, -44, 77, -86, 44, -98, 62, 11, 126, 123, -107, 3, -45, 69, 4, 114, 65, 21, -101, 72, 60, -8, 73, 113, 46, 113, 55, 59, 103, 58, -49, -54, 68, -86, -8, -110, 99, 99, 84, 103, -92, 90, 38, 28, -115, -118, 124, -70, 31, 112, -114, 24, 55, 47, 19, -58, 25, -105, 49, 50, -66, 57, 72, 71, -42, 96, -24, -72, -65, -78, -40, 26, 63, -69, -60, 23, 83, -107, 11, 10, 56, -113, -56, 58, 36, -127, -120, -66, 70, 126, -83, -90, -104, 42, -11, 120, -52, 58, 45, 14, 51, 68, -83, 16, 50, -81, -14, -50, -78, -117, 109, 55, -31, -102]
keygen512_rnd1 = [60, -32, -91, -80, -51, -14, 13, -113, 124, 24, 71, 26, 30, -92, 104, 117, 69, -40, 65, 97, -99, 47, 26, -11, 85, 4, 79, 126, -81, -34, 72, 78]
keygen512_packed_pub_out1 = [-77, 65, 6, 5, 3, 114, -58, 7, 80, 80, 66, -91, -103, -108, 96, 120, 89, -70, -31, 12, -65, -22, -109, 119, 16, 82, 37, 80, 3, 13, -78, -105, -116, 38, -44, 107, -52, 34, -117, 17, -14, 92, 114, 87, -109, 61, 48, -100, -5, -117, -97, 47, 89, 100, -88, -70, 25, 5, 37, -117, -116, -80, -60, 26, -124, -87, -80, -11, -49, -66, -80, 14, 105, -108, 7, -12, -59, 59, 63, 19, 0, 44, 18, 62, 78, -26, 116, -72, -68, 2, -113, -5, -85, 56, -119, -59, 118, -88, -87, 90, 23, 57, -123, 32, 107, -128, 59, 36, -93, 48, 14, -27, -79, 25, -13, -74, 28, -21, -8, 33, 39, 70, 74, 103, 82, 106, -101, -55, -113, -124, 41, 29, -40, -100, -95, 13, 54, 87, -31, -32, 28, 84, 87, 63, 97, 107, -98, 80, -75, 113, 37, -21, -112, -10, -12, 114, 72, -25, 31, 18, -77, -95, -119, 43, -126, 71, 121, 108, -16, 97, 18, -6, 121, 77, -38, 7, 60, -117, -39, -51, -28, -5, 28, -30, 10, -124, -17, 39, 126, 80, -59, 19, -49, 3, -87, -100, -85, 7, -33, -75, -108, -15, 22, -69, 4, 34, 39, -127, -94, -128, -14, 67, 7, -40, 50, 34, 122, 56, 113, 111, -6, 68, -46, -22, 2, -69, 81, 102, -18, -14, -104, -54, 51, 40, 79, 0, 121, -95, -24, 68, -85, 56, 108, 43, 33, 123, -7, -79, -100, -36, 92, -59, 90, 60, 40, 124, 98, 103, 120, 36, 78, 39, -6, 95, 27, -14, 56, 88, 82, 64, 100, 107, 46, -116, -126, 74, -60, 22, -100, -28, 98, -65, -122, 123, -124, 54, -29, -124, 95, -10, 1, -81, -120, 126, -20, 44, 10, -26, -109, 30, -122, -12, -128, -4, -47, -112, -117, 18, 42, -80, 120, -74, 71, 59, 55, 34, 96, -90, -40, 88, 14, -18, 8, 68, 57, 48, 94, 49, 56, -91, -76, 105, 23, -30, -69, 22, -69, -76, 118, -105, 114, -54, -121, -74, 15, -128, -90, 73, 100, 34, 93, 35, -118, 87, 55, 124, 60, -53, -11, -57, 63, -36, 72, 115, -103, -120, -13, 100, 117, -63, -94, 21, 41, -23, -52, 93, -46, -65, -113, 3, 7, -71, -63, 35, 47, 83, 78, 23, -12, -86, -80, -76, 70, -15, 8, 79, 29, 65, 83, -77, 92, 4, 11, 42, -58, 119, -60, 7, -10, -58, -57, -115, -40, -126, 63, -10, 26, -40, 9, -78, -4, 67, 72, -108, -110, -57, 66, 18, -89, 108, -25, 102, 32, 76, -116, 33, 105, 89, -80, 12, -64, 47, 70, -75, -93, 10, 57, -103, -104, 9, 66, 43, -60, 2, -45, -103, 106, 88, 16, -13, -93, 111, -104, 34, 75, -106, -105, 98, -57, -109, -53, -110, 49, -89, -120, 11, 32, 33, -10, -62, -58, -47, 70, -119, -96, -90, 22, -111, -82, 103, -72, 0, -35, -122, -74, -103, 37, 112, 10, -125, 122, 100, -126, -82, 100, -71, 108, -123, 6, -79, 126, 91, 17, 25, 48, 30, 94, -68, -104, -89, 105, 81, -122, 85, 44, -79, -70, -105, 44, -75, 11, -62, -117, -121, 74, -7, -93, -82, 91, -75, -115, -53, 96, 15, 1, 41, 93, -89, 111, 67, 100, 77, -8, -29, -124, 60, -10, -50, -121, -93, 24, 67, -52, -80, -11, 11, 112, 123, 120, -89, 1, 43, -118, -69, -11, 43, 0, 98, 112, 123, 83, 108, 9, 85, -82, -64, -39, 106, 118, -46, -98, -89, -117, 8, 84, -90, 77, -88, -111, 94, 84, -92, 89, 119, -25, 30, -27, -58, -87, 15, -22, -92, -24, 43, 48, 5, 53, 84, -55, -23, 102, -79, 21, -115, -19, -85, 62, -6, -90, -94, 17, -13, -58, -5, -108, -106, 35, 60, -101, -100, -118, 62, 83, -25, -119, 61, 123, 66, -59, -60, -82, 87, -43, -110, 69, -124, 19, -82, -27, 53, 32, -95, 84, 70, -85, 126, 47, -93, 126, -68, -10, 109, 83, 68, 30, -103, 114, 9, 119, -104, 92, -54, -4, 10, 78, -38, -86, -110, 21, 13, 38, -103, 44, 32, -77, 16, -66, 121, 27, 125, 54, 111, 30, 55, 107, 63, 36, 87, 68, -117, 88, 23, -111, 31, 58, 108, 13, -117, 54, 46, 40, -107, -88, -55, -76, 66, -3, 70, 84, -35, -73, 31, -25, -68, 106, -68, 53, -117, 71, 48, 117, 86, -41, 19, 43, -57, 99, -105, 120, -82, -46, -72, -82, 74, -57, 108, -94, -111, 74, 67, 89, 94, 91, -64, 78, 60, 113, 66, -90, -31, 82, 40, -54, 96, -41, -51, -87, -110, 61, -53, 32, 86, 101, 99, -6, 101, 24, 96, -110, 110, -114, 69, 117, 80, -44, 98, -35, -84, -97, -7]
keygen512_packed_priv_fixed_length1 = [-109, 50, 78, -25, 96, -125, -86, 118, 23, -87, -90, -75, 57, -41, 24, 74, 67, -90, 90, 3, 100, -15, 108, 80, -4, -39, 9, 57, -110, -126, -104, -38, 40, -46, 74, 85, -126, 67, 62, 107, -31, 92, 12, 88, -75, 53, -52, 86, -94, 33, -97, 112, 88, 59, 19, 25, -104, -99, -76, 58, 92, -27, 32, 39, 58, 12, 59, 76, 60, -68, 3, 79, -16, -126, 67, 84, 38, -126, -12, -54, -93, 81, 32, -70, -124, -27, 101, -33, -14, 127, -25, -64, -90, 50, 76, 126, -67, 118, 101, 109, 74, 104, -51, 38, 20, 67, -72, -75, 105, 82, -66, -93, 64, 71, -76, -102, 48, -2, 19, -94, -29, -26, 14, 27, -91, 69, -123, -4, 97, 2, -85, 40, 33, -30, 61, 119, 114, 1, -112, -91, 23, 116, 99, -62, 121, -56, 10, -117, 97, -101, 99, 59, 8, -50, -14, -93, -105, -88, 100, 68, 35, 92, -37, -108, 10, 123, 88, -81, 121, 103, 93, 94, 34, 122, -122, -91, 18, -123, 54, -65, -20, -105, 103, -35, -75, 60, 84, 74, -123, -6, -62, -94, -90, 112, -62, -89, 26, 127, -28, 60, 91, -48, 72, 70, 104, 7, -94, -20, -89, 53, 8, 41, 47, -55, 64, 57, 64, -102, 28, 56, 73, 67, -119, 81, 42, -95, 121, 126, -82, 97, 77, 98, 117, 99, 72, 106, -96, -37, -28, 55, -72, -111, -110, 111, 49, 97, -25, 44, 13, -109, -48, 126, -7, -128, 99, 12, 120, -79, 57, 51, 99, 106, 86, 47, -127, 72, 59, -43, -14, -66, 14, -124, 103, 54, 10, 104, 29, 10, -88, 8, -64, -108, -112, -123, 48, 83, -59, -88, -117, -116, -59, -45, 68, 120, 92, 121, -49, 100, -52, 45, 12, 10, 70, -30, -9, -52, -86, 3, 110, -112, 105, -110, -53, -77, 68, -19, 1, -61, 46, -58, 14, 108, -74, 102, -32, -39, 102, 12, -74, 88, 47, 44, 127, 38, 124, -106, -32, 66, 92, 73, -54, 9, -57, 50, 54, 51, 74, -106, -43, -27, -84, 79, -5, 97, 90, -125, -74, 90, -5, -110, 11, 39, 99, -25, 9, 14, -103, -20, -88, -126, -43, -103, -80, 20, 34, -110, 37, -68, -12, -62, -78, -94, -73, 14, -115, 76, 95, 16, 50, 50, 47, -89, 60, -7, -103, -78, 0, -16, 125, 106, 83, 70, 28, 22, -102, 7, -20, -56, -72, -20, 74, 49, 23, 93, -100, 12, 28, -103, 89, -66, 24, -48, 119, 117, 43, 22, -82, 64, 32, -41, 60, 0, -23, -47, -124, 118, 80, -83, 102, -112, 97, -19, 21, 103, 97, 102, -110, -125, 119, -111, 8, 34, 39, 3, 16, -106, -35, 1, -118, -102, -44, -53, 42, 43, 68, -79, 41, 113, -124, 1, 94, -79, -39, -106, -19, -58, 120, -97, -74, 75, 95, 32, 90, 2, 27, 62, -32, -106, 101, -47, -62, 79, 49, 74, 93, -126, 70, -125, 96, 74, 60, 61, 40, -81, 57, 21, 107, -125, 82, -104, -85, 54, 7, 33, -40, 119, 64, 66, 108, -12, 16, -116, 77, 120, 77, -106, -36, 91, -117, 116, 101, -40, -8, -84, -81, -6, 80, 41, 102, -73, -11, -72, 118, 60, 103, 98, 50, 69, 24, -59, 37, 92, -45, -76, 117, 12, -93, 61, -7, 108, 116, 105, 85, 65, 78, -14, 69, -25, 17, 55, -112, -119, 63, -1, -92, -112, -6, 34, -75, 118, 1, -120, -58, -11, 80, -73, 26, 10, -106, 55, -74, 58, -46, -104, -33, 33, 47, 77, 102, 115, -128, 35, -116, 42, -28, -122, 61, 73, -110, 33, 116, 16, -64, 28, -108, 44, -118, -111, -99, 115, 90, -75, 70, 45, -126, -27, -54, -8, -79, 70, 119, -88, 110, 78, 27, 102, 65, 114, 73, -60, -78, 5, 64, -22, 108, -51, 42, -50, 123, -62, -124, 10, -46, 36, -69, -44, 77, -86, 44, -98, 62, 11, 126, 123, -107, 3, -45, 69, 4, 114, 65, 21, -101, 72, 60, -8, 73, 113, 46, 113, 55, 59, 103, 58, -49, -54, 68, -86, -8, -110, 99, 99, 84, 103, -92, 90, 38, 28, -115, -118, 124, -70, 31, 112, -114, 24, 55, 47, 19, -58, 25, -105, 49, 50, -66, 57, 72, 71, -42, 96, -24, -72, -65, -78, -40, 26, 63, -69, -60, 23, 83, -107, 11, 10, 56, -113, -56, 58, 36, -127, -120, -66, 70, 126, -83, -90, -104, 42, -11, 120, -52, 58, 45, 14, 51, 68, -83, 16, 50, -81, -14, -50, -78, -117, 109, 55, -31, -102, -77, 65, 6, 5, 3, 114, -58, 7, 80, 80, 66, -91, -103, -108, 96, 120, 89, -70, -31, 12, -65, -22, -109, 119, 16, 82, 37, 80, 3, 13, -78, -105, -116, 38, -44, 107, -52, 34, -117, 17, -14, 92, 114, 87, -109, 61, 48, -100, -5, -117, -97, 47, 89, 100, -88, -70, 25, 5, 37, -117, -116, -80, -60, 26, -124, -87, -80, -11, -49, -66, -80, 14, 105, -108, 7, -12, -59, 59, 63, 19, 0, 44, 18, 62, 78, -26, 116, -72, -68, 2, -113, -5, -85, 56, -119, -59, 118, -88, -87, 90, 23, 57, -123, 32, 107, -128, 59, 36, -93, 48, 14, -27, -79, 25, -13, -74, 28, -21, -8, 33, 39, 70, 74, 103, 82, 106, -101, -55, -113, -124, 41, 29, -40, -100, -95, 13, 54, 87, -31, -32, 28, 84, 87, 63, 97, 107, -98, 80, -75, 113, 37, -21, -112, -10, -12, 114, 72, -25, 31, 18, -77, -95, -119, 43, -126, 71, 121, 108, -16, 97, 18, -6, 121, 77, -38, 7, 60, -117, -39, -51, -28, -5, 28, -30, 10, -124, -17, 39, 126, 80, -59, 19, -49, 3, -87, -100, -85, 7, -33, -75, -108, -15, 22, -69, 4, 34, 39, -127, -94, -128, -14, 67, 7, -40, 50, 34, 122, 56, 113, 111, -6, 68, -46, -22, 2, -69, 81, 102, -18, -14, -104, -54, 51, 40, 79, 0, 121, -95, -24, 68, -85, 56, 108, 43, 33, 123, -7, -79, -100, -36, 92, -59, 90, 60, 40, 124, 98, 103, 120, 36, 78, 39, -6, 95, 27, -14, 56, 88, 82, 64, 100, 107, 46, -116, -126, 74, -60, 22, -100, -28, 98, -65, -122, 123, -124, 54, -29, -124, 95, -10, 1, -81, -120, 126, -20, 44, 10, -26, -109, 30, -122, -12, -128, -4, -47, -112, -117, 18, 42, -80, 120, -74, 71, 59, 55, 34, 96, -90, -40, 88, 14, -18, 8, 68, 57, 48, 94, 49, 56, -91, -76, 105, 23, -30, -69, 22, -69, -76, 118, -105, 114, -54, -121, -74, 15, -128, -90, 73, 100, 34, 93, 35, -118, 87, 55, 124, 60, -53, -11, -57, 63, -36, 72, 115, -103, -120, -13, 100, 117, -63, -94, 21, 41, -23, -52, 93, -46, -65, -113, 3, 7, -71, -63, 35, 47, 83, 78, 23, -12, -86, -80, -76, 70, -15, 8, 79, 29, 65, 83, -77, 92, 4, 11, 42, -58, 119, -60, 7, -10, -58, -57, -115, -40, -126, 63, -10, 26, -40, 9, -78, -4, 67, 72, -108, -110, -57, 66, 18, -89, 108, -25, 102, 32, 76, -116, 33, 105, 89, -80, 12, -64, 47, 70, -75, -93, 10, 57, -103, -104, 9, 66, 43, -60, 2, -45, -103, 106, 88, 16, -13, -93, 111, -104, 34, 75, -106, -105, 98, -57, -109, -53, -110, 49, -89, -120, 11, 32, 33, -10, -62, -58, -47, 70, -119, -96, -90, 22, -111, -82, 103, -72, 0, -35, -122, -74, -103, 37, 112, 10, -125, 122, 100, -126, -82, 100, -71, 108, -123, 6, -79, 126, 91, 17, 25, 48, 30, 94, -68, -104, -89, 105, 81, -122, 85, 44, -79, -70, -105, 44, -75, 11, -62, -117, -121, 74, -7, -93, -82, 91, -75, -115, -53, 96, 15, 1, 41, 93, -89, 111, 67, 100, 77, -8, -29, -124, 60, -10, -50, -121, -93, 24, 67, -52, -80, -11, 11, 112, 123, 120, -89, 1, 43, -118, -69, -11, 43, 0, 98, 112, 123, 83, 108, 9, 85, -82, -64, -39, 106, 118, -46, -98, -89, -117, 8, 84, -90, 77, -88, -111, 94, 84, -92, 89, 119, -25, 30, -27, -58, -87, 15, -22, -92, -24, 43, 48, 5, 53, 84, -55, -23, 102, -79, 21, -115, -19, -85, 62, -6, -90, -94, 17, -13, -58, -5, -108, -106, 35, 60, -101, -100, -118, 62, 83, -25, -119, 61, 123, 66, -59, -60, -82, 87, -43, -110, 69, -124, 19, -82, -27, 53, 32, -95, 84, 70, -85, 126, 47, -93, 126, -68, -10, 109, 83, 68, 30, -103, 114, 9, 119, -104, 92, -54, -4, 10, 78, -38, -86, -110, 21, 13, 38, -103, 44, 32, -77, 16, -66, 121, 27, 125, 54, 111, 30, 55, 107, 63, 36, 87, 68, -117, 88, 23, -111, 31, 58, 108, 13, -117, 54, 46, 40, -107, -88, -55, -76, 66, -3, 70, 84, -35, -73, 31, -25, -68, 106, -68, 53, -117, 71, 48, 117, 86, -41, 19, 43, -57, 99, -105, 120, -82, -46, -72, -82, 74, -57, 108, -94, -111, 74, 67, 89, 94, 91, -64, 78, 60, 113, 66, -90, -31, 82, 40, -54, 96, -41, -51, -87, -110, 61, -53, 32, 86, 101, 99, -6, 101, 24, 96, -110, 110, -114, 69, 117, 80, -44, 98, -35, -84, -97, -7, 46, 47, -55, 70, -92, -54, 121, -30, 97, 127, 25, -90, 23, -109, 8, -44, -98, -1, 33, -111, -60, 63, 95, -123, -20, -31, 66, -24, -15, 84, 113, -37, 60, -32, -91, -80, -51, -14, 13, -113, 124, 24, 71, 26, 30, -92, 104, 117, 69, -40, 65, 97, -99, 47, 26, -11, 85, 4, 79, 126, -81, -34, 72, 78]
keygen512_packed_pub2 = [94, -121, -83, 1, 75, 8, 92, -61, 37, -47, -104, -87, 4, 27, -127, -120, 28, 69, 49, -27, 19, -127, -25, 45, 14, 76, 60, 87, -87, 37, -91, -108, 103, -113, -92, 30, -73, 96, -122, 105, -42, 89, 39, 26, 29, -115, -36, -97, 98, 23, -110, 121, 3, -69, -4, 73, 6, 42, 103, -76, 113, 20, -71, 125, -56, -72, 121, 91, 85, -63, 74, -71, 18, -92, -102, -31, 32, 51, 24, 38, 57, -42, -80, 99, 25, 89, -49, -119, -56, 110, 34, 120, 50, 86, -14, -96, -61, -124, 85, -25, -60, 29, 71, -104, 39, 95, 85, 75, 49, 112, 39, -21, -77, 65, -90, -60, 8, -66, -121, 1, -58, -60, 34, -6, 16, 89, 107, 26, 76, -43, 50, 33, 107, 98, 76, -94, -118, -103, 105, -92, -99, 68, 1, -102, -85, 100, -107, 28, -22, -82, 64, -105, -57, -31, -7, 40, 2, -56, 9, -122, 123, -62, -2, 68, 31, 86, -8, 107, -63, -42, 12, -7, 54, -79, -87, 5, 58, -76, 5, 44, -56, 119, 125, -104, 24, -70, -47, 76, 75, 75, -25, 113, -105, 21, -106, 116, -108, 38, -125, -52, -126, -109, 17, 64, -10, 119, 115, 53, -93, -93, 7, -16, 125, 118, -73, 100, -99, -8, 82, 59, -14, -114, -55, -46, 18, 117, -73, -73, 124, 122, -84, -126, 20, 127, -23, 88, 12, 114, 37, 82, 6, -92, -56, -7, -79, -108, -126, 7, -53, -15, 115, 11, 2, 32, -88, -35, 54, 98, 48, 118, -75, -56, -52, 69, -121, -14, 17, 67, 119, 17, 55, -56, 118, -33, -69, 110, -125, 98, 60, 56, -79, 20, -67, -10, -69, -43, -105, 120, 91, 35, -103, -90, -68, -67, -13, 55, -49, 72, -86, -82, 24, 118, 126, 121, 76, -114, -122, 9, -71, -20, -6, 44, 74, -47, -57, 29, 106, 76, -128, 25, 40, 49, -74, -107, 41, 123, -89, 8, 27, 76, 14, 0, 82, -8, -122, 104, -48, -29, -70, -110, 108, -100, 95, 55, -56, -31, 119, 21, -89, 97, 114, -36, -69, -103, -28, 25, -49, 15, 52, -61, -48, 71, 19, -77, 98, -66, 39, -20, 22, 11, -28, -58, 105, 87, 114, -100, -12, 105, -87, 32, 123, 15, 76, 14, 6, -56, -78, -8, 97, -77, -45, -47, 13, 13, -64, 62, -88, 9, 104, -37, -22, 53, -105, -91, 71, -33, -7, 68, -27, 7, -123, -125, -48, -71, 120, 25, 106, 11, -38, 117, 58, 96, 19, 23, -44, 22, 57, -78, 25, -9, 124, 98, -71, -123, 93, 56, 58, -81, 106, 1, 51, -97, -108, 8, 30, -75, 0, 106, 122, -114, 2, 116, 127, -33, -84, -72, 39, 101, 62, -3, -80, 42, -28, 7, -78, 8, -96, 70, 58, -54, 11, 120, 22, 103, -109, 81, 13, 86, -102, 71, -4, -77, 22, -60, 108, -58, -92, -101, 33, 43, -128, 98, -11, -41, -91, -88, -53, 81, -9, -39, -109, 46, 75, -81, 11, 53, 92, 1, -128, 100, 108, 122, 25, -62, 74, 19, 8, -6, 25, -109, -52, -128, 88, 98, -52, 12, 60, 37, -67, -92, -82, -5, 51, 117, 76, 98, 111, -93, -15, 77, -24, 124, -101, -63, -41, 127, -25, 92, -92, -44, -14, -82, 52, 51, -57, -119, -62, 61, -77, -101, 23, 52, -124, -56, 114, 43, 36, -67, -73, 65, -38, 81, 25, -127, 98, -68, -111, -6, 118, -92, -112, -81, -107, 65, -98, -116, 60, 117, -103, 72, 56, -61, 17, -76, 55, 124, 77, -86, 118, 3, 110, 60, 119, 116, 113, 19, 56, -61, 83, -102, 118, -107, 70, -11, -126, 32, -20, -63, 52, -78, -101, 88, 21, 10, 46, -68, 51, -44, 27, -65, 75, -75, 109, 3, 12, -59, 27, 12, 126, -102, -107, -121, -38, 37, 28, -90, -122, -59, 59, 123, -116, 24, 83, -109, 37, -52, 55, 8, 0, 1, -63, 83, 25, 91, -93, 113, 33, -61, 54, -24, 117, 76, 51, 124, 55, -124, 25, 126, 111, 96, 96, -25, 66, 90, 53, -48, 10, 93, -26, -79, 109, -8, 4, -75, -94, -103, -114, -120, -120, -122, 40, -107, 115, -56, -106, -85, 33, -83, -31, 91, 13, 8, 80, 45, 51, 108, 96, -71, 102, 15, 23, -124, 47, 124, -119, 103, -12, -127, 90, 83, -48, 87, -81, -11, -49, 82, -42, -108, -34, 82, 92, 65, -10, 117, -127, -28, 19, 115, 92, 40, 119, 42, -112, -9, -109, 124, -67, -6, 88, -26, 115, 24, 106, 121, 104, 66, 56, 101, -1, 67, 98, 12, 23, -84, 18, -69, -80, 47, 8, -32, 33, -26, 33, 82, -122, 10, -52, 115, 12, 112, 123, 93, 65, 35, 45, -122, 10, -1, 104, -1]
keygen512_packed_priv2 = [-107, 24, 44, 2, -89, -63, -44, 51, 119, -59, -111, 101, -86, 68, -98, -32, -29, -112, -23, 5, 21, -124, 6, -52, -101, 104, 80, -100, 69, 110, -68, 72, -100, -23, 71, 0, 75, -24, 119, -72, 7, -85, 89, -68, 121, -21, 102, 21, 20, 44, -64, -45, 55, 35, 72, 67, 102, 78, 37, 9, -47, 16, -72, -16, 23, 114, 66, 98, 14, -120, -43, 92, -71, -125, -49, 47, 115, 70, -42, 72, 6, -64, -62, 86, 36, -54, 80, -76, 42, 63, 88, -31, -53, -47, -118, 16, 42, 76, 93, 47, 53, -120, 94, -124, -85, -11, -58, 8, 39, 92, 104, -100, 21, 96, -64, -75, 43, -72, 53, 45, -37, 115, 66, -13, 115, -104, -96, -93, 11, -79, 57, -72, -97, 23, 64, -111, 6, -79, 121, 115, -111, -97, 17, 31, 16, -31, 111, 46, 6, -94, -86, 24, 103, 0, 75, 43, 75, -100, -90, 115, 28, 28, -81, 86, -81, 28, -8, 39, 50, -56, -71, -35, -54, 9, 103, 59, -69, 29, -44, -107, -21, -40, 90, -79, 96, -78, -48, -6, 97, 21, 75, -56, 80, 68, 126, -55, -4, -81, 18, -74, -123, -93, -110, -56, -49, 57, 12, 89, 103, 9, -116, -124, -51, 45, -48, -74, 112, -75, -110, -14, -70, 51, -53, 65, -80, -2, -53, -73, 113, -32, -84, 43, 34, -92, 96, -69, 47, -40, 53, -116, -41, -103, 15, 88, -100, 62, 92, -122, -92, 65, 84, 82, 18, -96, -67, -11, 56, -125, -40, 74, -96, -20, -105, 69, 26, 26, -113, 56, -32, 45, 103, -112, 11, 80, 57, 67, 34, 22, -63, -95, -48, -82, 9, 103, -116, -12, -59, -124, 3, 17, 2, 30, -106, 33, -76, 81, 56, -127, 85, 82, 27, -94, 9, 72, 97, -68, 86, -14, 26, -43, -90, 44, -1, 51, -100, 111, 107, 97, -69, 19, -101, 16, -11, -73, -53, -85, -112, 88, -107, -93, 40, -63, 69, 17, -23, 83, -23, 120, -119, -18, -116, -71, -126, 27, -75, 15, 64, -73, -46, 121, -99, -79, -47, 56, -114, -125, 48, 83, -72, 122, -62, -120, -50, -102, -59, -124, -111, 33, 27, 82, -4, -103, -33, -14, -64, -116, -37, -103, 56, 66, 37, -26, 84, 51, -74, 107, -94, 90, 17, 95, 62, 97, 17, -7, -36, 87, -22, -102, -123, 45, 112, -94, 91, -85, -113, -96, 53, 21, 70, 114, 53, -114, -78, 105, -124, -21, -81, 47, 82, -51, -91, 4, 102, 63, 89, 16, 74, -124, 16, 88, -27, 114, 60, 57, -80, 50, 2, -60, 77, -70, 93, -73, -95, 19, -121, 42, -93, -45, 106, 15, -34, -7, -78, 12, -94, -80, -5, 18, -97, -107, -12, 84, 24, -89, 109, -125, 121, 22, -36, -80, 48, 33, -93, -116, 1, -69, -58, -67, 121, 49, -36, 41, 19, 104, 92, -53, 104, 107, 119, 48, 65, 101, -110, -45, -55, 102, 40, 53, -108, -122, 36, 23, 18, 90, -28, 0, -77, 32, 59, 125, -74, 41, 94, 4, 75, -78, 58, -105, 111, -123, 48, -116, -61, 104, 39, 93, -8, 38, 17, -4, 16, -5, -9, 117, -123, 7, -81, 5, 113, 48, 7, -123, -49, 1, -103, 34, 46, 112, 92, -86, 32, 100, 54, 36, 75, 113, 97, 37, 14, -15, 10, 46, 107, 44, -54, 43, 114, 122, 68, 114, -44, -78, 66, 16, -106, -82, -5, 37, 111, -67, 117, -109, -79, 121, 31, -46, -25, 75, -21, 107, -110, 31, 1, 50, -124, -42, 62, -49, 58, 15, -100, 115, 72, -80, 44, 1, 77, -55, -110, 6, 123, -119, -14, -80, 89, -58, 73, -92, -90, 3, -52, -74, -91, 126, 74, 48, 43, 113, 87, 31, -2, -61, 117, -17, -20, -51, 125, -47, -104, 120, 0, 104, 55, -30, 11, -106, 8, 29, -57, -56, 100, 91, 4, 52, -117, 71, 106, -47, -5, 77, -99, -52, 35, 31, 102, 63, 69, 43, -91, 107, -23, 123, 11, 60, -122, -24, 2, 104, 65, -26, 80, 23, -75, -110, 93, -77, -109, 67, -10, 94, 84, -119, 87, 47, -73, 84, -113, -59, -107, -47, 16, 73, 55, -9, 27, 117, 101, -58, 30, -73, 117, 59, 26, 81, 18, 40, 79, -43, 18, 19, -123, -105, 99, 122, -77, -101, 87, -104, 44, -85, 16, 106, -86, 6, 111, 72, 10, 88, -89, 72, 35, -18, 120, 67, 44, 66, -77, -50, 6, -51, 96, -88, 20, 117, 9, -84, -97, -15, 106, 12, -53, 6, -19, 114, 63, 89, 54, -56]
keygen512_rnd2 = [-50, -84, -9, -66, 127, -6, -24, -32, 85, -62, 127, -32, -22, 23, 77, 6, 1, 76, 33, 75, 47, -73, 66, -115, -123, 86, -85, -116, 49, 76, -80, 44]
keygen512_packed_pub_out2 = [94, -121, -83, 1, 75, 8, 92, -61, 37, -47, -104, -87, 4, 27, -127, -120, 28, 69, 49, -27, 19, -127, -25, 45, 14, 76, 60, 87, -87, 37, -91, -108, 103, -113, -92, 30, -73, 96, -122, 105, -42, 89, 39, 26, 29, -115, -36, -97, 98, 23, -110, 121, 3, -69, -4, 73, 6, 42, 103, -76, 113, 20, -71, 125, -56, -72, 121, 91, 85, -63, 74, -71, 18, -92, -102, -31, 32, 51, 24, 38, 57, -42, -80, 99, 25, 89, -49, -119, -56, 110, 34, 120, 50, 86, -14, -96, -61, -124, 85, -25, -60, 29, 71, -104, 39, 95, 85, 75, 49, 112, 39, -21, -77, 65, -90, -60, 8, -66, -121, 1, -58, -60, 34, -6, 16, 89, 107, 26, 76, -43, 50, 33, 107, 98, 76, -94, -118, -103, 105, -92, -99, 68, 1, -102, -85, 100, -107, 28, -22, -82, 64, -105, -57, -31, -7, 40, 2, -56, 9, -122, 123, -62, -2, 68, 31, 86, -8, 107, -63, -42, 12, -7, 54, -79, -87, 5, 58, -76, 5, 44, -56, 119, 125, -104, 24, -70, -47, 76, 75, 75, -25, 113, -105, 21, -106, 116, -108, 38, -125, -52, -126, -109, 17, 64, -10, 119, 115, 53, -93, -93, 7, -16, 125, 118, -73, 100, -99, -8, 82, 59, -14, -114, -55, -46, 18, 117, -73, -73, 124, 122, -84, -126, 20, 127, -23, 88, 12, 114, 37, 82, 6, -92, -56, -7, -79, -108, -126, 7, -53, -15, 115, 11, 2, 32, -88, -35, 54, 98, 48, 118, -75, -56, -52, 69, -121, -14, 17, 67, 119, 17, 55, -56, 118, -33, -69, 110, -125, 98, 60, 56, -79, 20, -67, -10, -69, -43, -105, 120, 91, 35, -103, -90, -68, -67, -13, 55, -49, 72, -86, -82, 24, 118, 126, 121, 76, -114, -122, 9, -71, -20, -6, 44, 74, -47, -57, 29, 106, 76, -128, 25, 40, 49, -74, -107, 41, 123, -89, 8, 27, 76, 14, 0, 82, -8, -122, 104, -48, -29, -70, -110, 108, -100, 95, 55, -56, -31, 119, 21, -89, 97, 114, -36, -69, -103, -28, 25, -49, 15, 52, -61, -48, 71, 19, -77, 98, -66, 39, -20, 22, 11, -28, -58, 105, 87, 114, -100, -12, 105, -87, 32, 123, 15, 76, 14, 6, -56, -78, -8, 97, -77, -45, -47, 13, 13, -64, 62, -88, 9, 104, -37, -22, 53, -105, -91, 71, -33, -7, 68, -27, 7, -123, -125, -48, -71, 120, 25, 106, 11, -38, 117, 58, 96, 19, 23, -44, 22, 57, -78, 25, -9, 124, 98, -71, -123, 93, 56, 58, -81, 106, 1, 51, -97, -108, 8, 30, -75, 0, 106, 122, -114, 2, 116, 127, -33, -84, -72, 39, 101, 62, -3, -80, 42, -28, 7, -78, 8, -96, 70, 58, -54, 11, 120, 22, 103, -109, 81, 13, 86, -102, 71, -4, -77, 22, -60, 108, -58, -92, -101, 33, 43, -128, 98, -11, -41, -91, -88, -53, 81, -9, -39, -109, 46, 75, -81, 11, 53, 92, 1, -128, 100, 108, 122, 25, -62, 74, 19, 8, -6, 25, -109, -52, -128, 88, 98, -52, 12, 60, 37, -67, -92, -82, -5, 51, 117, 76, 98, 111, -93, -15, 77, -24, 124, -101, -63, -41, 127, -25, 92, -92, -44, -14, -82, 52, 51, -57, -119, -62, 61, -77, -101, 23, 52, -124, -56, 114, 43, 36, -67, -73, 65, -38, 81, 25, -127, 98, -68, -111, -6, 118, -92, -112, -81, -107, 65, -98, -116, 60, 117, -103, 72, 56, -61, 17, -76, 55, 124, 77, -86, 118, 3, 110, 60, 119, 116, 113, 19, 56, -61, 83, -102, 118, -107, 70, -11, -126, 32, -20, -63, 52, -78, -101, 88, 21, 10, 46, -68, 51, -44, 27, -65, 75, -75, 109, 3, 12, -59, 27, 12, 126, -102, -107, -121, -38, 37, 28, -90, -122, -59, 59, 123, -116, 24, 83, -109, 37, -52, 55, 8, 0, 1, -63, 83, 25, 91, -93, 113, 33, -61, 54, -24, 117, 76, 51, 124, 55, -124, 25, 126, 111, 96, 96, -25, 66, 90, 53, -48, 10, 93, -26, -79, 109, -8, 4, -75, -94, -103, -114, -120, -120, -122, 40, -107, 115, -56, -106, -85, 33, -83, -31, 91, 13, 8, 80, 45, 51, 108, 96, -71, 102, 15, 23, -124, 47, 124, -119, 103, -12, -127, 90, 83, -48, 87, -81, -11, -49, 82, -42, -108, -34, 82, 92, 65, -10, 117, -127, -28, 19, 115, 92, 40, 119, 42, -112, -9, -109, 124, -67, -6, 88, -26, 115, 24, 106, 121, 104, 66, 56, 101, -1, 67, 98, 12, 23, -84, 18, -69, -80, 47, 8, -32, 33, -26, 33, 82, -122, 10, -52, 115, 12, 112, 123, 93, 65, 35, 45, -122, 10, -1, 104, -1]
keygen512_packed_priv_fixed_length2 = [-107, 24, 44, 2, -89, -63, -44, 51, 119, -59, -111, 101, -86, 68, -98, -32, -29, -112, -23, 5, 21, -124, 6, -52, -101, 104, 80, -100, 69, 110, -68, 72, -100, -23, 71, 0, 75, -24, 119, -72, 7, -85, 89, -68, 121, -21, 102, 21, 20, 44, -64, -45, 55, 35, 72, 67, 102, 78, 37, 9, -47, 16, -72, -16, 23, 114, 66, 98, 14, -120, -43, 92, -71, -125, -49, 47, 115, 70, -42, 72, 6, -64, -62, 86, 36, -54, 80, -76, 42, 63, 88, -31, -53, -47, -118, 16, 42, 76, 93, 47, 53, -120, 94, -124, -85, -11, -58, 8, 39, 92, 104, -100, 21, 96, -64, -75, 43, -72, 53, 45, -37, 115, 66, -13, 115, -104, -96, -93, 11, -79, 57, -72, -97, 23, 64, -111, 6, -79, 121, 115, -111, -97, 17, 31, 16, -31, 111, 46, 6, -94, -86, 24, 103, 0, 75, 43, 75, -100, -90, 115, 28, 28, -81, 86, -81, 28, -8, 39, 50, -56, -71, -35, -54, 9, 103, 59, -69, 29, -44, -107, -21, -40, 90, -79, 96, -78, -48, -6, 97, 21, 75, -56, 80, 68, 126, -55, -4, -81, 18, -74, -123, -93, -110, -56, -49, 57, 12, 89, 103, 9, -116, -124, -51, 45, -48, -74, 112, -75, -110, -14, -70, 51, -53, 65, -80, -2, -53, -73, 113, -32, -84, 43, 34, -92, 96, -69, 47, -40, 53, -116, -41, -103, 15, 88, -100, 62, 92, -122, -92, 65, 84, 82, 18, -96, -67, -11, 56, -125, -40, 74, -96, -20, -105, 69, 26, 26, -113, 56, -32, 45, 103, -112, 11, 80, 57, 67, 34, 22, -63, -95, -48, -82, 9, 103, -116, -12, -59, -124, 3, 17, 2, 30, -106, 33, -76, 81, 56, -127, 85, 82, 27, -94, 9, 72, 97, -68, 86, -14, 26, -43, -90, 44, -1, 51, -100, 111, 107, 97, -69, 19, -101, 16, -11, -73, -53, -85, -112, 88, -107, -93, 40, -63, 69, 17, -23, 83, -23, 120, -119, -18, -116, -71, -126, 27, -75, 15, 64, -73, -46, 121, -99, -79, -47, 56, -114, -125, 48, 83, -72, 122, -62, -120, -50, -102, -59, -124, -111, 33, 27, 82, -4, -103, -33, -14, -64, -116, -37, -103, 56, 66, 37, -26, 84, 51, -74, 107, -94, 90, 17, 95, 62, 97, 17, -7, -36, 87, -22, -102, -123, 45, 112, -94, 91, -85, -113, -96, 53, 21, 70, 114, 53, -114, -78, 105, -124, -21, -81, 47, 82, -51, -91, 4, 102, 63, 89, 16, 74, -124, 16, 88, -27, 114, 60, 57, -80, 50, 2, -60, 77, -70, 93, -73, -95, 19, -121, 42, -93, -45, 106, 15, -34, -7, -78, 12, -94, -80, -5, 18, -97, -107, -12, 84, 24, -89, 109, -125, 121, 22, -36, -80, 48, 33, -93, -116, 1, -69, -58, -67, 121, 49, -36, 41, 19, 104, 92, -53, 104, 107, 119, 48, 65, 101, -110, -45, -55, 102, 40, 53, -108, -122, 36, 23, 18, 90, -28, 0, -77, 32, 59, 125, -74, 41, 94, 4, 75, -78, 58, -105, 111, -123, 48, -116, -61, 104, 39, 93, -8, 38, 17, -4, 16, -5, -9, 117, -123, 7, -81, 5, 113, 48, 7, -123, -49, 1, -103, 34, 46, 112, 92, -86, 32, 100, 54, 36, 75, 113, 97, 37, 14, -15, 10, 46, 107, 44, -54, 43, 114, 122, 68, 114, -44, -78, 66, 16, -106, -82, -5, 37, 111, -67, 117, -109, -79, 121, 31, -46, -25, 75, -21, 107, -110, 31, 1, 50, -124, -42, 62, -49, 58, 15, -100, 115, 72, -80, 44, 1, 77, -55, -110, 6, 123, -119, -14, -80, 89, -58, 73, -92, -90, 3, -52, -74, -91, 126, 74, 48, 43, 113, 87, 31, -2, -61, 117, -17, -20, -51, 125, -47, -104, 120, 0, 104, 55, -30, 11, -106, 8, 29, -57, -56, 100, 91, 4, 52, -117, 71, 106, -47, -5, 77, -99, -52, 35, 31, 102, 63, 69, 43, -91, 107, -23, 123, 11, 60, -122, -24, 2, 104, 65, -26, 80, 23, -75, -110, 93, -77, -109, 67, -10, 94, 84, -119, 87, 47, -73, 84, -113, -59, -107, -47, 16, 73, 55, -9, 27, 117, 101, -58, 30, -73, 117, 59, 26, 81, 18, 40, 79, -43, 18, 19, -123, -105, 99, 122, -77, -101, 87, -104, 44, -85, 16, 106, -86, 6, 111, 72, 10, 88, -89, 72, 35, -18, 120, 67, 44, 66, -77, -50, 6, -51, 96, -88, 20, 117, 9, -84, -97, -15, 106, 12, -53, 6, -19, 114, 63, 89, 54, -56, 94, -121, -83, 1, 75, 8, 92, -61, 37, -47, -104, -87, 4, 27, -127, -120, 28, 69, 49, -27, 19, -127, -25, 45, 14, 76, 60, 87, -87, 37, -91, -108, 103, -113, -92, 30, -73, 96, -122, 105, -42, 89, 39, 26, 29, -115, -36, -97, 98, 23, -110, 121, 3, -69, -4, 73, 6, 42, 103, -76, 113, 20, -71, 125, -56, -72, 121, 91, 85, -63, 74, -71, 18, -92, -102, -31, 32, 51, 24, 38, 57, -42, -80, 99, 25, 89, -49, -119, -56, 110, 34, 120, 50, 86, -14, -96, -61, -124, 85, -25, -60, 29, 71, -104, 39, 95, 85, 75, 49, 112, 39, -21, -77, 65, -90, -60, 8, -66, -121, 1, -58, -60, 34, -6, 16, 89, 107, 26, 76, -43, 50, 33, 107, 98, 76, -94, -118, -103, 105, -92, -99, 68, 1, -102, -85, 100, -107, 28, -22, -82, 64, -105, -57, -31, -7, 40, 2, -56, 9, -122, 123, -62, -2, 68, 31, 86, -8, 107, -63, -42, 12, -7, 54, -79, -87, 5, 58, -76, 5, 44, -56, 119, 125, -104, 24, -70, -47, 76, 75, 75, -25, 113, -105, 21, -106, 116, -108, 38, -125, -52, -126, -109, 17, 64, -10, 119, 115, 53, -93, -93, 7, -16, 125, 118, -73, 100, -99, -8, 82, 59, -14, -114, -55, -46, 18, 117, -73, -73, 124, 122, -84, -126, 20, 127, -23, 88, 12, 114, 37, 82, 6, -92, -56, -7, -79, -108, -126, 7, -53, -15, 115, 11, 2, 32, -88, -35, 54, 98, 48, 118, -75, -56, -52, 69, -121, -14, 17, 67, 119, 17, 55, -56, 118, -33, -69, 110, -125, 98, 60, 56, -79, 20, -67, -10, -69, -43, -105, 120, 91, 35, -103, -90, -68, -67, -13, 55, -49, 72, -86, -82, 24, 118, 126, 121, 76, -114, -122, 9, -71, -20, -6, 44, 74, -47, -57, 29, 106, 76, -128, 25, 40, 49, -74, -107, 41, 123, -89, 8, 27, 76, 14, 0, 82, -8, -122, 104, -48, -29, -70, -110, 108, -100, 95, 55, -56, -31, 119, 21, -89, 97, 114, -36, -69, -103, -28, 25, -49, 15, 52, -61, -48, 71, 19, -77, 98, -66, 39, -20, 22, 11, -28, -58, 105, 87, 114, -100, -12, 105, -87, 32, 123, 15, 76, 14, 6, -56, -78, -8, 97, -77, -45, -47, 13, 13, -64, 62, -88, 9, 104, -37, -22, 53, -105, -91, 71, -33, -7, 68, -27, 7, -123, -125, -48, -71, 120, 25, 106, 11, -38, 117, 58, 96, 19, 23, -44, 22, 57, -78, 25, -9, 124, 98, -71, -123, 93, 56, 58, -81, 106, 1, 51, -97, -108, 8, 30, -75, 0, 106, 122, -114, 2, 116, 127, -33, -84, -72, 39, 101, 62, -3, -80, 42, -28, 7, -78, 8, -96, 70, 58, -54, 11, 120, 22, 103, -109, 81, 13, 86, -102, 71, -4, -77, 22, -60, 108, -58, -92, -101, 33, 43, -128, 98, -11, -41, -91, -88, -53, 81, -9, -39, -109, 46, 75, -81, 11, 53, 92, 1, -128, 100, 108, 122, 25, -62, 74, 19, 8, -6, 25, -109, -52, -128, 88, 98, -52, 12, 60, 37, -67, -92, -82, -5, 51, 117, 76, 98, 111, -93, -15, 77, -24, 124, -101, -63, -41, 127, -25, 92, -92, -44, -14, -82, 52, 51, -57, -119, -62, 61, -77, -101, 23, 52, -124, -56, 114, 43, 36, -67, -73, 65, -38, 81, 25, -127, 98, -68, -111, -6, 118, -92, -112, -81, -107, 65, -98, -116, 60, 117, -103, 72, 56, -61, 17, -76, 55, 124, 77, -86, 118, 3, 110, 60, 119, 116, 113, 19, 56, -61, 83, -102, 118, -107, 70, -11, -126, 32, -20, -63, 52, -78, -101, 88, 21, 10, 46, -68, 51, -44, 27, -65, 75, -75, 109, 3, 12, -59, 27, 12, 126, -102, -107, -121, -38, 37, 28, -90, -122, -59, 59, 123, -116, 24, 83, -109, 37, -52, 55, 8, 0, 1, -63, 83, 25, 91, -93, 113, 33, -61, 54, -24, 117, 76, 51, 124, 55, -124, 25, 126, 111, 96, 96, -25, 66, 90, 53, -48, 10, 93, -26, -79, 109, -8, 4, -75, -94, -103, -114, -120, -120, -122, 40, -107, 115, -56, -106, -85, 33, -83, -31, 91, 13, 8, 80, 45, 51, 108, 96, -71, 102, 15, 23, -124, 47, 124, -119, 103, -12, -127, 90, 83, -48, 87, -81, -11, -49, 82, -42, -108, -34, 82, 92, 65, -10, 117, -127, -28, 19, 115, 92, 40, 119, 42, -112, -9, -109, 124, -67, -6, 88, -26, 115, 24, 106, 121, 104, 66, 56, 101, -1, 67, 98, 12, 23, -84, 18, -69, -80, 47, 8, -32, 33, -26, 33, 82, -122, 10, -52, 115, 12, 112, 123, 93, 65, 35, 45, -122, 10, -1, 104, -1, 37, 55, -15, -76, -114, -85, 98, 68, 78, 18, -63, -24, -6, -9, 34, -17, -87, 105, -117, 40, -113, 33, -69, 114, -50, -57, 35, 120, -122, -81, 82, 105, -50, -84, -9, -66, 127, -6, -24, -32, 85, -62, 127, -32, -22, 23, 77, 6, 1, 76, 33, 75, 47, -73, 66, -115, -123, 86, -85, -116, 49, 76, -80, 44]
def test_kem_keygen512(packed_priv, packed_pub, rnd):
"""
test kem_keygen
:return: tuple of (private_key, public key), each a byte array
"""
params_k = 2
#packed_privkey, packed_pubkey = generate_kyber_keys(params_k)
packed_privkey, packed_pubkey = packed_priv, packed_pub
private_key_fixed_length = [ 0 for x in range(0,KYBER_512SK_BYTES)]
md = SHA3_256.new()
md.update(bytearray([x & 0xFF for x in packed_pubkey]))
encoded_hash = md.digest()
encoded_hash = [ cast_to_byte(x) for x in encoded_hash ]
pkh = [0 for x in range(0, len(encoded_hash))]
for i in range(0, len(encoded_hash)):
pkh[i] = encoded_hash[i]
#if(custom_rnd == None):
# rnd = get_random_bytes(KYBER_SYM_BYTES)
# rnd = bytearray([x & 0xFF for x in rnd])
offset_end = len(packed_privkey)
for i in range(0, offset_end):
private_key_fixed_length[i] = packed_privkey[i]
for i in range(0, len(packed_pubkey)):
private_key_fixed_length[i+offset_end] = packed_pubkey[i]
offset_end += len(packed_pubkey)
for i in range(0, len(pkh)):
private_key_fixed_length[i+offset_end] = pkh[i]
offset_end += len(pkh)
for i in range(0, len(rnd)):
private_key_fixed_length[i+offset_end] = rnd[i]
return (private_key_fixed_length, packed_pubkey)
assert(test_kem_keygen512(keygen512_packed_priv1, keygen512_packed_pub1, keygen512_rnd1)==(keygen512_packed_priv_fixed_length1, keygen512_packed_pub_out1))
assert(test_kem_keygen512(keygen512_packed_priv2, keygen512_packed_pub2, keygen512_rnd2)==(keygen512_packed_priv_fixed_length2, keygen512_packed_pub_out2))
assert(len(kem_keygen512()) == 2)
encrypt_in_var1 = [40, -27, -45, 125, 55, -48, 85, 7, -62, 13, 71, 68, -30, -90, -49, 4, 68, -85, 27, 121, 78, 56, 84, 84, -19, -104, -23, -1, -107, 118, 79, 34]
encrypt_in_pubkey1 = [-24, 99, -121, -1, -47, 14, -53, 90, -127, 10, -90, 71, -34, -106, -69, 120, -47, -87, 23, 0, 117, -15, -110, 72, 38, -23, -67, 52, -102, 88, 23, -56, -74, 57, -102, -105, -62, 104, 21, -14, 6, -60, -91, -45, 79, 102, -93, 124, 50, 112, 98, 124, 89, 14, 7, -128, -116, 85, -73, -109, 60, -22, -75, 119, 66, -101, 39, 73, 126, 47, -86, -122, -100, 66, 118, 51, -30, 102, -62, -61, 68, 39, -96, 67, -75, 123, -69, -70, -73, -50, -47, 108, 30, -80, 102, 83, -92, 68, -72, -42, 24, 119, 124, -123, 40, 29, 117, 88, -35, -37, 15, -59, -122, 21, 115, -77, 36, 4, 121, 0, -38, -64, 3, 5, 70, -101, 14, -56, -51, -74, 98, 77, 61, 90, 89, 102, -106, -94, -100, 98, -125, -102, -55, -91, -118, 43, 93, 127, 5, 39, -104, 44, -117, 15, 6, 64, -74, -118, 6, 19, -102, 94, -3, -48, 1, -55, -75, 124, 86, 48, 15, -25, -73, 23, -29, 52, -50, 69, -84, 99, -67, -55, -62, -77, 48, -110, 19, 52, 61, 107, -42, 11, -117, -12, -95, -13, 35, -83, -6, 60, -66, -32, 28, -59, -105, 32, -92, -35, 41, 25, 94, 92, 98, -60, 24, 73, 92, 83, 5, -97, 39, 106, 22, 43, -66, 4, 22, -88, 91, 116, -77, -1, 65, 16, -78, 8, 71, 111, 28, 113, 71, -74, -120, -46, 35, 25, 43, 26, -56, 112, 7, -88, -34, -90, 85, 18, 54, 62, 109, 17, 53, -2, 44, 58, 7, 106, -82, -41, 96, 103, 49, 43, -104, 125, -39, -107, -34, 18, 73, 44, -26, -53, -79, -104, 35, -8, -88, 54, 69, -30, -69, 58, 90, -69, 29, -78, 14, -79, -92, -74, -108, -31, 12, -32, 1, -49, 110, -29, 92, 118, 2, -58, 21, -63, -91, -31, -26, -74, -22, -47, 123, -109, -88, 104, -12, -7, 95, -126, -42, 8, -79, 19, 39, -17, -96, 78, -78, 89, 126, 94, 9, -95, 50, -77, 91, 47, 44, -89, -98, 75, 93, 18, 50, 125, 98, -53, -107, 81, -32, -123, -101, 71, 97, 47, 50, -68, 25, 58, 110, 96, -41, 37, 31, 74, 123, -79, 51, -128, 20, 103, 25, -5, 9, -83, -48, 118, 96, -112, 107, 115, 53, 124, -50, 99, 124, -74, 18, -4, 100, 51, 91, -101, 106, -62, 3, -51, 64, 88, 43, -54, 34, -4, 34, 112, -48, -104, -118, -93, -4, 77, 111, -128, 16, -99, -37, 41, 108, 119, 57, 56, -6, 123, 102, -80, 127, 121, 104, -97, -91, -53, -122, -93, -62, 65, 112, 22, 57, -112, 87, 82, 2, -12, 17, 122, -122, 95, 2, -32, -93, -117, 51, 37, -105, -15, 49, 44, -24, -117, -1, -88, -100, 34, 9, -99, -102, 83, -56, -125, 113, 49, -26, 108, 16, -57, -54, 58, 62, 23, 115, -76, 48, -93, -94, -78, -51, 17, -29, -119, 93, 82, 27, -57, 32, 76, -70, 7, -121, -100, -105, 70, 48, 86, -87, 124, 86, 73, 88, 114, 100, -126, 2, 27, -65, -75, -104, 101, 58, -122, 53, 66, -72, 35, -56, -106, 121, -89, 105, -56, -24, 10, -18, -20, 90, -111, -103, 61, 32, 38, 12, -47, 18, 69, 75, 52, 72, 105, -128, 83, -119, -47, 41, 61, -75, 17, 124, -101, -108, 37, -76, 113, -63, 99, -78, 117, 81, 92, -50, -39, 31, -14, 9, 28, -68, -53, -73, 112, -95, 79, 109, 80, -101, 49, 124, -86, 76, -74, -92, -40, 67, 43, 59, 21, -99, -33, 66, -95, -9, -21, 40, 25, 107, -91, 88, 57, 88, -55, 81, 113, 95, 16, 106, -107, -7, -87, 58, -96, 4, -40, -74, 25, -13, -101, -57, 2, -38, -69, 124, -52, -87, 60, -42, -117, 87, 35, -82, -108, 54, -59, -26, -92, -88, -26, 38, 109, 46, 117, 61, 103, -58, -87, 97, 32, 36, 31, 101, -126, 56, 7, 61, -88, 37, 70, 116, -101, 15, -52, -16, -110, 59, -84, -121, 65, -10, 19, -18, -4, 10, 68, 26, -128, -93, 60, 0, -63, -24, -70, 76, 112, -67, -82, 121, 62, 52, -9, -103, 44, -63, -75, 9, -69, 3, 34, 51, 48, -5, -121, 27, -75, -107, -70, 68, -31, 73, -108, 92, 125, -111, 56, 59, 12, 25, 75, 66, 100, 11, 84, -11, 21, 98, 42, -113, 24, -91, -61, 20, 97, -105, -100, -8, 84, 53, -109, 88, 39, -45, -85, -46, 0, -66, 71, 70, 36, -1, -46, 93, 2, 41, -125, 0, 124, -18, 26, 16, -86, -102, -93, -61, -54, 116, 13, -80, 127, 113, -84, 106, 108, 19, -26, 112, 45, -76, 22, -2, 75, -99, -115, 57, 109, -73, -31]
encrypt_out_cipher1 = [125, 102, 87, -33, 74, -97, 121, 111, -86, 2, -52, 48, 81, -95, 89, 59, 119, -125, -44, 66, 108, -11, -21, -115, -4, 78, 27, -46, -125, 73, -68, 81, -50, 47, 27, -29, -128, -121, 28, 106, 124, -17, 76, 127, -50, 84, -120, -32, 97, 4, 116, -79, -125, -27, 34, -89, 25, -60, -84, 72, -125, -120, 94, 17, 15, -31, 108, 42, -22, 32, 54, -70, -85, -3, 88, 72, -26, 64, -80, 123, 56, 86, -122, 94, -70, -28, -15, 84, 62, 94, 86, 83, 104, 19, 96, -55, 52, -89, 127, -5, -11, 36, 49, -83, -64, -89, 12, -46, -13, -52, -125, 14, 109, -54, 57, -30, -70, 81, 45, -82, -128, 120, 73, -34, -92, -87, 60, 114, -81, -15, -60, -99, 67, 66, -29, -127, -81, 68, -49, 71, -110, -39, -34, -53, 42, -99, -40, 0, 57, -109, -75, -11, 84, 18, -13, 87, -69, -13, -38, -118, 51, -109, 51, 123, 31, 45, 64, 57, -63, -82, -31, 119, -128, -29, 81, 16, -56, 37, -119, 118, 70, -52, 57, 35, -35, -56, 9, -17, 44, -108, 41, -107, 19, -4, -19, 59, 83, 126, 6, -59, 44, -90, 89, -56, -95, -16, 99, -117, 21, -59, 59, 96, 65, -32, -52, -122, 31, -9, -72, 77, -89, 113, 75, 42, -14, 47, -36, -35, -23, -76, -19, 5, -19, -28, -124, -56, 43, 29, -68, -51, -29, -33, -37, 41, -97, 62, 36, 54, -80, -36, -8, 122, 3, 49, 51, 10, 21, 85, -73, 15, 113, -119, 82, -51, 107, -108, 111, -94, 76, -7, -80, -112, -109, -104, 79, 3, 36, -128, -97, -12, 118, -4, 14, -113, 98, -112, -10, 81, 82, -61, 12, 1, -8, 47, 111, -45, 10, -65, 73, -77, -54, -115, 94, 126, 30, 74, -111, 26, 110, 47, 13, 98, 42, 49, 116, -37, 3, 15, 95, 63, 13, 120, -53, -98, -2, -123, 27, 96, -97, -29, -48, -106, 102, -72, -43, -117, 2, 39, 72, 39, 1, 81, -67, 41, 109, -124, -108, -43, -125, -90, 102, -118, 78, -108, 34, 5, -100, -123, -37, 108, -25, -110, -53, -28, 98, 62, 87, -72, 21, -117, 66, -37, 42, -72, -51, 93, -126, 4, 27, -20, 8, 114, 37, -80, -91, 88, 9, -114, 59, -123, -87, -50, -22, 51, -115, 54, 96, 19, 9, 62, -27, -40, -119, 114, -18, 54, -5, 64, -92, 46, -8, -70, 75, 10, -127, 30, -41, -6, 116, -109, -65, 95, -11, 88, -74, -38, 87, 88, -69, -67, -66, -120, 57, 98, -95, -85, -33, -112, 122, 35, -39, -41, 49, -17, -60, 30, 48, -5, -10, 43, 64, -78, -74, -10, 51, 42, 102, -17, 112, 45, -24, -84, 64, -61, 80, 30, -109, 114, 56, -10, -121, 97, -92, 40, -14, -65, -9, 122, 100, -102, -122, 35, -115, -108, 47, 92, 103, 108, -107, 117, 99, 63, -72, -20, 58, -92, -119, 99, -63, -99, -4, 3, -100, -58, 61, -92, -108, 97, -48, -76, -18, -59, 6, -96, 111, -32, -4, -111, 88, 97, -2, -108, 87, 2, -83, 118, 50, -54, 115, -46, -1, 125, -49, 19, -47, -45, 39, -21, 5, 121, 30, -116, -108, 70, 62, 76, 36, 77, -119, 40, 114, -111, -46, -45, -102, 70, 56, -34, -118, -30, -6, -13, 74, 25, 79, -45, -1, -73, 57, 115, 61, -27, 124, 58, 114, 48, -115, -67, -99, 90, 103, -118, -86, -20, -31, -43, -18, 73, -55, -78, -91, 14, -49, 93, -64, 125, 33, 122, 36, 125, 86, -85, 39, -103, -45, 45, 116, -95, 42, 62, 84, -45, 15, 112, 84, -113, -105, -72, 22, 81, -22, -89, 82, -47, 93, 111, 48, -106, -97, -10, -24, 65, 75, 66, -106, -49, 46, 99, -13, -105, -118, -112, 16, -76, 18, 98, -95, 38, 58, -6, -56, 118, 22, -125, 21, -24, 101, -80, -112, -2, 91, -55, -102, -72, 83, 97, -3, 126, -110, 105, -124, -82, -93, -56, -14, -88, -32, -81, -14, -118, 96, -49, -115, -90, 73, -62, -69, 81, -65, 32, -34, 78, 6, 93, 5, 28, -63, -41, 66, 115, -36, 97, 34, -125, 47, -98, 36, -44, 54, 118, -57, 53, -72, -105, -49, 85, 101, 22, 37, -66, 1, -67, -118, 9, -128, 84, 66, 118, -117, 26, 112, -1, 21, 34, -55, -82, 77, 84, -55, -86, -9, 58, 61, -17, -34, -61, 61, 58, -105, 49, 90, -53, 58, 110, 44, -83, 117, -94, 60, 14, 61, -66, -27, -95, 63, 8, 38, 92]
encrypt_out_secret1 = [-12, 22, -19, 103, 68, 28, -89, 51, -80, -40, 3, -62, 53, 91, -78, -59, -65, -104, 84, 43, 24, 42, 121, -93, 120, -28, 111, -34, 13, 80, -78, 24]
encrypt_in_var2 = [-55, 99, -25, -102, 30, 21, 37, -77, -2, -104, -47, -41, -63, -126, -54, -70, 62, -78, 10, -57, 77, 102, -51, 5, 73, 21, -117, -78, 68, 69, 88, 21]
encrypt_in_pubkey2 = [82, -72, 99, 41, 80, 98, -32, 7, 115, 76, 76, 79, 82, 57, 70, 3, 53, -80, 46, 118, 6, 124, 9, 75, 6, -106, 35, -31, 86, 77, 76, 115, 50, 100, -61, -76, 68, 7, 76, 46, -59, 31, 126, -20, -120, -98, -125, -76, -7, 8, 18, -1, -72, -76, 43, 108, 115, -52, -42, 80, -113, -93, 17, 56, 9, 86, -73, -60, -84, -90, 57, 51, 79, -15, -69, -117, 59, 53, -93, -12, 101, 93, 71, -55, -49, 90, 14, 115, 72, 82, -115, -77, 53, -27, -89, 110, -111, -40, 86, 0, -83, 33, -83, -48, 65, -42, 104, 122, 14, -32, 18, -42, 7, 49, -38, -123, -102, 69, 8, 101, -98, 55, 0, 108, -100, 33, -87, -75, 37, 73, -101, -125, 79, 8, 37, 57, 22, 125, -118, 97, 63, 119, -45, 94, 123, -56, -66, -61, 48, -96, 63, -48, 39, 24, 84, 0, -115, -79, 46, 110, 44, -62, 83, 107, 65, 24, 118, -83, -5, 80, 23, 61, 81, 59, 30, -44, 98, -47, 76, 34, 8, -4, 63, 25, -12, 8, -15, 32, 48, -43, -118, 101, 39, -11, 86, -125, -77, 30, -1, 92, 52, -76, -29, 111, -105, 3, 79, 60, -45, 4, -5, 100, 31, 88, -70, -91, -7, -95, -73, -97, -29, 115, -126, -44, 48, -106, 54, 12, 3, -69, 18, 32, 9, -57, 73, 52, 109, -58, 104, -121, 36, -31, 41, 99, 26, 107, 31, 118, -119, 75, 50, -70, 17, 51, -98, -82, 73, 57, -19, 5, 100, 29, -75, -92, 52, -75, 120, -120, -14, 117, -85, 103, -96, 6, 98, 24, -106, -120, -60, 93, 124, 28, 77, -69, 124, 89, -6, -56, -123, -68, 73, 101, 84, 48, -103, -31, -114, 29, 55, 115, 51, -4, -75, 98, 65, 63, 18, 107, 87, -27, -90, -58, 25, 70, -118, 75, 34, -83, 89, 112, -52, 125, -125, -92, -37, -28, 22, -96, 76, 86, 70, 84, 108, -68, -117, -119, -94, -88, 109, -106, -5, 93, -128, 35, -56, -78, -109, 60, 33, -88, -100, 109, 81, 82, -97, 75, -70, -17, 117, 30, -90, -64, 19, 125, 7, -128, 60, 25, 121, -35, 27, 18, 5, 18, -74, -104, -27, 92, -2, -45, 70, 121, 73, 125, 110, 1, -55, 58, 73, 1, 39, 49, 13, -46, 18, -116, 106, 89, -85, 39, 34, -91, 65, 60, 77, 80, -10, 124, 126, -102, 82, 127, -103, -111, -110, -62, -87, 64, -107, -114, -61, 73, 24, 81, -91, -106, -47, 51, 115, 89, -32, 53, -127, -80, 9, -6, 115, -124, -5, -91, 70, -16, -24, -81, 39, -57, 63, 87, -75, -114, 71, 33, 103, -65, 80, 84, -25, 87, -114, -65, 72, 49, 102, -38, -87, -125, 119, 102, -2, -123, 15, 24, -79, -61, 40, 100, -62, 26, 0, 61, -90, -110, -104, -70, 44, 84, 29, -36, -99, -24, 75, 64, -89, -25, -66, 55, -25, 17, -105, -92, 105, 25, -73, -74, 93, 70, -113, 71, 53, 53, 105, -128, 124, 55, 113, -59, -63, 33, 52, 28, -87, 24, -76, -61, -68, 101, -26, 44, 12, -94, 121, 113, 65, -108, 91, -120, 51, 99, 17, -72, -126, -87, 77, -4, -9, 92, 53, -101, -58, -107, -88, 14, -55, -121, -119, 70, 124, -49, -42, 34, 54, -39, -120, -88, 24, 17, -117, 95, 89, 112, 26, -16, -55, 75, -41, 91, -7, 38, -85, -121, -22, -49, 90, 4, -109, 40, 53, -104, -115, 40, 23, -105, -55, 16, 45, 42, 59, 100, -15, -108, 95, -5, 101, 34, 120, -53, 55, 108, -108, 49, 51, -98, -73, 70, 9, -125, 5, -122, -84, 97, -50, -41, -39, 14, -103, -109, -83, -89, 114, -123, -65, -69, 17, 112, -111, 61, 39, 59, 4, 68, 69, 6, -77, -54, -52, -98, -104, 84, 28, -70, 51, -65, 48, 127, -36, 98, 34, 112, -64, 18, -112, -127, 45, 61, -68, 20, -111, -69, -109, -107, -117, -75, 120, 65, -106, -67, 35, 30, -45, -27, 39, 56, 26, 44, 59, -4, 123, 115, -73, 50, -94, 23, -105, -13, -116, -72, 117, -10, 107, 46, 92, -111, 43, -77, 63, -22, -53, -97, -87, -126, -107, 112, -76, -108, -48, -121, -88, 25, 105, -94, -86, -60, -96, 60, 1, 122, 74, 76, -109, 48, -47, -107, 2, -12, 17, -62, -72, 98, 27, 53, -77, -48, -9, -124, 63, 42, 83, -82, 117, 58, -79, 51, -68, -74, -110, -113, 35, -8, 9, -2, 69, -106, -7, 20, 12, -79, -93, 109, 44, 55, -46, 43, -109, 37, -21, 19, 65, 102, -34, 121, -124, 36, -95, -111, -49, -61, 51, 29, 79, -107, -38, 49, -114, 29, -52, -69, 14, 20, 79, 61]
encrypt_out_cipher2 = [73, -90, 117, 111, 77, -19, -113, 115, -55, 101, -119, 60, 97, -6, -15, 111, 14, -15, -31, -48, 71, 15, 59, 60, 103, -108, 89, -112, -27, 99, -106, 14, -52, -21, 43, 10, 24, -87, -111, 87, -62, 75, -82, 49, -55, -16, 66, -109, 26, 66, -76, 0, -82, 10, 34, -12, 42, -21, -27, -5, -20, -10, 54, 36, -117, -39, -53, 44, 96, -58, -109, -57, -2, 0, -13, 85, -111, 71, -27, 4, 114, -64, -33, -3, 44, -30, 51, 11, -83, -51, 100, 81, 109, 105, -91, 44, 54, -113, -69, 32, 91, 20, -110, -54, -81, -75, -73, 59, 40, 10, -99, 51, 84, -5, 22, 65, -75, -70, 80, 29, -108, 77, -21, -32, -108, 99, -122, -85, 28, 21, -123, 33, -51, -75, -13, -46, -113, 68, 107, -91, 39, 83, -50, 99, -21, -65, 59, -58, 93, 93, -52, -9, -34, -122, 41, -87, 34, -30, 105, -64, 91, 34, 32, 84, 87, -78, 95, -127, -31, -44, -24, -116, -106, -43, -60, 79, 125, 36, -40, -65, -3, -37, -101, 120, 83, -11, -8, 75, 26, 79, 73, 27, 72, 46, 114, 92, 15, -59, -50, 60, -128, 53, 46, 112, -83, -93, -87, 93, -52, 49, 27, 109, -52, -10, -121, 74, -90, -22, -91, -80, 45, 100, 107, -50, 108, 30, -58, 100, -102, -56, 51, -109, -121, 11, -95, -103, 89, 26, -100, -82, -100, -47, 7, 42, 105, 93, 14, 45, 5, -96, 2, 32, 88, -116, 21, 85, -1, -105, -113, -41, 43, 51, -83, -64, 71, -78, 89, -68, -69, -48, -46, -68, -98, 35, -35, -54, -43, 14, 23, -65, 77, -61, -62, 13, -6, -124, -107, 22, 21, -51, -9, -90, 34, -50, 50, -75, 115, 83, -27, -94, -110, 90, -93, -65, 62, 45, -34, -111, -31, 73, 33, -35, 62, 107, 20, -69, -118, 56, -60, -8, 49, -7, -26, 102, 20, 28, -31, -123, 77, 113, -36, -38, 125, -80, 47, -108, -99, -113, -93, 3, -19, -81, 7, 113, 119, 81, -10, 114, 84, 64, 116, 31, 33, 62, -97, -41, -48, -94, -112, 36, -92, 27, 0, 24, -3, 5, -100, -90, -13, -34, -56, -31, 70, -73, 53, 32, -59, -105, 110, -64, -126, -57, 26, 83, 82, 118, 22, 57, 118, 55, 113, 22, -128, 68, 25, 105, -23, 126, -103, -73, 46, -32, -123, 124, 74, 126, 103, -22, -85, -6, 24, 89, -124, -81, 20, -121, -79, -23, -16, -119, 44, 44, -9, 98, 73, -14, -96, 85, -100, 78, 18, -8, 71, -63, -24, 102, 102, -1, -7, 126, -63, 108, -99, 6, -115, 46, -69, -19, 89, 86, -5, -81, 81, 36, -17, 78, -28, -88, 54, -27, -65, -2, 3, -53, 5, -67, 107, -108, -29, -13, 112, 113, 24, 82, 43, 72, -70, -80, -113, -1, 28, -67, -91, 87, 51, 33, -86, 1, -90, -101, -59, 64, 4, 80, 9, 13, 105, 124, -124, -1, -40, 97, -17, -41, 57, 113, -39, 83, -75, 127, 64, -98, 12, -68, 10, -41, 102, -39, 80, -51, 117, -109, 7, -83, -93, -52, -99, -103, 52, -15, -39, -69, 36, 2, 64, 34, -43, -88, 5, -53, -56, -11, 46, 80, -55, 58, -57, 119, -13, -45, 114, -82, -37, 26, -71, -57, 64, -36, 14, -47, -16, -93, -76, 12, -109, -56, -6, -119, -38, -23, 1, 95, 95, -90, -116, 28, 94, 45, 103, -88, 122, -66, -29, -71, 109, -68, -119, -1, 53, -92, 96, -25, -38, 118, 119, -115, -120, 107, 3, 97, 67, 94, -53, -2, 18, -11, -114, 63, 109, 51, -106, -87, 83, 114, 12, -97, -86, -80, -123, -113, -95, 28, -88, -86, 112, -14, -37, 127, -101, 81, -48, 118, -116, -12, 108, -62, -113, 1, 104, 85, 93, -67, 22, -127, -119, -24, -108, -23, 7, -117, -94, -75, 93, 36, 127, -6, -103, 69, -13, -63, -46, 13, -64, 28, 10, -17, -44, 83, -12, 4, 50, -79, -95, 113, -40, 60, 106, 37, 103, -96, 88, 6, 62, 41, 33, 65, 53, 64, -123, -24, 45, -63, 74, 111, -77, -84, 123, 21, 89, -121, -84, 119, 41, -69, -2, 72, 68, -59, 7, 84, -2, 18, -90, 34, -80, -41, 74, -44, -85, 73, -68, -25, 102, 99, -50, 18, 81, 87, -52, -99, -17, -13, -84, 16, 107, -61, 72, -27, 62, -18, -94, 98, -90, 33, 94, 54, 33, 83, -116, -91, 64, -68, -110, 48, -6, 38, -32, 101, 55, 29, 110, 121, 127, 25, 1, 37, 86, 82]
encrypt_out_secret2 = [43, 103, 58, 95, 83, 115, 29, -126, 51, -116, -30, -128, -14, 36, -65, 79, 103, 36, -26, -91, -15, 32, 94, 87, -68, 108, 82, 9, 95, -45, -47, -111]
assert(kem_encaps512(encrypt_in_pubkey1, encrypt_in_var1) == (encrypt_out_secret1, encrypt_out_cipher1))
assert(kem_encaps512(encrypt_in_pubkey2, encrypt_in_var2) == (encrypt_out_secret2, encrypt_out_cipher2))
decrypt_in_cipher1 = [-19, -14, 65, 69, -28, 59, 79, 109, -58, -65, -125, 50, -11, 78, 2, -54, -80, 45, -65, 59, 86, 5, -35, -55, 10, 21, -56, -122, -83, 62, -44, -119, 70, 38, -103, -28, -85, -19, 68, 53, 11, -61, 117, 126, 38, -106, -5, -5, 37, 52, 65, 46, -115, -46, 1, -15, -28, 84, 10, 57, 112, -80, 85, -2, 59, 11, -20, 58, 113, -7, -31, 21, -77, -7, -13, -111, 2, 6, 91, 28, -54, -125, 20, -36, -57, -107, -29, -64, -24, -6, -104, -18, -125, -54, 102, 40, 69, 112, 40, -92, -48, -98, -125, -98, 85, 72, 98, -49, 11, 123, -11, 108, 92, 10, -126, -98, -122, 87, -108, 121, 69, -2, -100, 34, 86, 79, -70, -21, -63, -77, -81, 53, 13, 121, 85, 80, -118, 38, -40, -88, -21, 84, 123, -117, 26, 44, -16, 60, -54, 26, -85, -50, 108, 52, -105, 120, 59, 100, 101, -70, 11, 110, 122, -53, -88, 33, 25, 81, 36, -82, -16, -98, 98, -125, -126, -95, -7, 20, 4, 59, -25, 9, 110, -107, 44, -68, 79, -76, -81, -19, 19, 96, -112, 70, 17, 124, 1, 31, -41, 65, -18, 40, 108, -125, 119, 22, -112, -16, -82, -75, 13, -96, -41, 18, -123, -95, 121, -78, 21, -58, 3, 109, -21, 120, 15, 77, 22, 118, -97, 114, -34, 22, -3, -83, -84, 115, -66, -6, 91, -17, -119, 67, 25, 127, 68, -59, -107, -119, -36, -97, 73, 115, -34, 20, 80, -70, 29, 12, 50, -112, -42, -79, -42, -125, -14, -108, -25, 89, -55, 84, -85, -24, -89, -38, 91, 16, 84, -3, 109, 33, 50, -101, -114, 115, -45, 117, 106, -3, -96, -36, -79, -4, -117, 21, -126, -47, -7, 12, -14, 117, -95, 2, -85, -58, -84, 105, -99, -16, -59, -121, 14, 80, -95, -7, -119, -28, -26, 36, 27, 96, -86, -94, -20, -7, -24, -29, 62, 15, -4, -12, 15, -24, 49, -24, -3, -62, -24, 59, 82, -54, 122, -74, -39, 63, 20, 109, 41, -36, -91, 60, 125, -95, -37, 74, -60, -14, -37, 57, -22, 18, 13, -112, -6, 96, -12, -44, 55, -58, -48, 14, -12, -125, -68, -108, -93, 23, 92, -38, 22, 63, -63, -62, -126, -117, -28, -37, -42, 67, 5, 7, -75, -124, -69, 81, 119, -31, 113, -72, -35, -87, -92, 41, 60, 50, 0, 41, 92, -128, 58, -122, 93, 109, 33, 102, -10, 107, -91, 64, 31, -73, -96, -24, 83, 22, -122, 0, -94, -108, -124, 55, -32, 54, -29, -65, 25, -31, 47, -45, -14, -94, -72, -77, 67, -9, -124, 36, -114, -115, 104, 94, -80, -81, -34, 99, 21, 51, -121, 48, -25, -95, 0, 28, 39, -40, -46, -89, 111, -90, -99, 21, 123, -95, -84, 122, -43, 109, -91, -88, -57, 15, -28, -75, -72, -41, -122, -36, 111, -64, 86, 107, -88, -31, -72, -127, 99, 52, -45, 42, 63, -79, -50, 125, 77, 94, 76, 51, 42, -9, -80, 3, -48, -111, 116, 26, 61, 92, -106, 82, -110, 37, 93, -1, -114, -46, -69, -15, -7, 17, 107, -27, 12, 23, -72, -27, 72, 116, -118, -44, -78, -23, 87, -69, -47, -107, 52, -126, -94, -31, 113, -116, -20, 102, -51, 44, -127, -11, 114, -43, 82, -73, 24, 120, -123, -26, -72, -108, 61, 100, 49, 65, 60, 89, -21, -73, -32, 54, 4, -124, -112, -66, 82, -119, -23, 91, 32, -88, -98, -117, 21, -97, 97, -87, -87, -120, 110, 20, 117, 104, -12, -55, 2, 31, 54, 47, 2, 104, -118, 28, -116, 59, -80, -46, 64, -122, -120, 14, 85, -74, -19, -76, 63, 55, 69, -46, -63, 102, -36, 28, -73, 67, -57, 111, -26, -66, 82, 58, -119, 60, -57, 100, -47, 100, 53, -61, 120, 81, 37, 42, -127, -30, -1, -70, 15, 24, -105, 26, 61, -18, 55, -44, -121, 124, -71, 40, -29, 110, 82, 53, 3, 122, 107, 32, 87, -119, 125, 81, -118, 95, 14, 52, -114, 58, -74, -43, -75, 45, -4, 96, 117, 127, 59, 65, -92, -2, -57, -126, -113, 29, -18, -81, 69, -121, -52, -56, -22, -33, 100, 127, 77, 32, 59, 47, -86, 5, -90, 73, -75, -126, 52, 12, -76, -54, -50, 87, -93, 7, 17, -66, 117, 47, -84, -16, 34, 125, 10, -128, -60, 18, -124, 66, -35, -59, 68, -66, -128, 91, -100, -2, -113, -23, -79, 35, 124, -128, -7, 103, -121, -51, -110, -127, -52, -14, 112, -63, -81, -64, 103, 13]
decrypt_in_privkey1 = [108, -119, 43, 2, -105, -87, -57, 100, 20, -109, -8, 125, -81, 53, 51, -18, -42, 31, 7, -12, 101, 32, 102, 51, 126, -41, 64, 70, -36, -57, 27, -96, 63, 48, -106, 1, 3, 22, 31, 125, -21, 83, -89, 27, 17, 97, 114, 99, -2, 42, -128, -105, 105, -50, 109, 112, -88, 95, -26, 0, -20, -30, -99, 127, 54, -95, 109, 51, 27, -117, 42, -98, 29, -72, -64, -112, 116, 45, -16, 115, -97, -16, 96, -50, -76, -20, -59, -85, 28, 94, 85, -84, -105, -69, 102, -89, -8, -107, 16, 93, 87, 120, 43, 34, -107, 56, -29, 66, 21, 68, -93, 66, 20, 8, -37, -12, 73, 16, -109, 76, -60, 35, 119, 79, 22, 118, -1, 28, 48, 111, -105, 85, 95, 87, -76, -82, -41, -90, -70, -71, 80, -88, 22, 60, -115, 49, -115, -22, 98, 117, 27, -42, -85, -59, 6, -100, 6, -56, -113, 51, 0, 38, -95, -104, 6, -96, 59, -105, -89, 105, 107, 86, -38, 33, -126, 123, -76, -24, -36, 3, 17, 82, -76, 27, -119, 42, -98, -103, -83, -10, -31, -106, 62, -106, 87, -120, 40, 21, 79, 70, 112, 51, -124, 105, 32, -5, -76, -72, 5, 68, -25, -24, -88, 26, -23, 99, -49, 54, -116, -101, -96, 55, -88, -62, -83, 98, -29, 43, 110, 97, -55, 29, 117, -50, 0, 90, -77, 15, -128, -103, -95, -14, -99, 123, 99, 5, -76, -36, 6, -30, 86, -128, -69, 0, -103, 47, 113, 127, -26, -63, 21, -88, 8, 66, 49, -52, 121, -35, 112, 14, -90, -111, 42, -57, -6, 13, -109, 123, -74, -89, 86, 102, 34, 48, 71, 12, 24, -101, 90, -95, 101, 61, -21, -109, 125, 90, -100, 37, -94, 29, -109, -79, -112, 116, -4, 35, -99, -127, 83, 83, -105, -105, -57, -44, -85, 98, 100, -99, 118, -86, 85, 55, 54, -87, 73, 2, 44, 34, -59, 43, -82, -20, 96, 91, 50, -50, -98, 91, -109, -124, -112, 53, 88, -54, -99, 106, 58, -70, -112, 66, 62, -19, -96, 28, -108, 25, -117, 25, 42, -117, -87, 6, 52, -105, -96, -59, 1, 51, 7, -35, -40, 99, 82, 100, 113, -92, -39, -107, 35, -21, 65, 127, 41, 26, -84, 12, 58, 88, 27, 109, -96, 7, 50, -27, -24, 27, 31, 124, -121, -101, 22, -109, -63, 59, 111, -97, 121, 49, 98, 36, 41, -27, 66, -81, 64, 105, 34, 47, 4, 85, 68, -32, -52, 79, -78, 77, 68, 72, -49, 44, 101, -106, -11, -53, 8, 98, 75, 17, -123, 1, 59, 107, 2, 8, -110, -7, 107, -33, -44, -83, -87, 23, -99, -25, 39, -72, -39, 66, 110, 9, -106, -75, -45, 73, 72, -50, 2, -48, -61, 105, -77, 124, -69, 84, -45, 71, -98, -40, -75, -126, -23, -25, 40, -110, -101, 76, 113, -55, -66, 17, -44, 91, 32, -60, -67, -61, -57, 67, 19, 34, 63, 88, 39, 78, -117, -91, 36, 68, 71, -60, -107, -107, 11, -124, -53, 12, 60, 39, 54, 64, 16, -118, 51, -105, -108, 69, 115, 39, -109, 40, -103, 108, -36, 12, -111, 60, -107, -118, -42, 32, -70, -117, 94, 94, -53, -69, 126, 19, -53, -100, 112, -67, 90, -77, 14, -73, 72, -116, -105, 0, 28, 32, 73, -113, 29, 124, -64, 109, -89, 107, -11, 32, -58, 88, -52, -83, -6, 41, 86, 66, 69, 87, -85, -22, -118, -72, -110, 57, -63, 120, 51, -36, 58, 73, -77, 106, -102, -23, -92, -122, -108, 5, 64, -21, 68, 79, -105, 21, 35, 87, -32, 32, 53, -109, -99, 117, -93, -64, 37, -12, 26, 64, 8, 35, -126, -96, 115, 60, 57, -80, 98, 43, 116, 14, 64, 117, -110, -58, 46, -54, -21, 20, 50, -60, 69, -77, 112, 58, -122, -10, -104, 26, 39, -127, 87, -22, -107, -90, -23, 45, 85, -28, -71, 114, -7, 54, -62, -16, -90, 88, 40, 14, -94, -80, 122, 72, -103, 45, -8, -109, 126, 10, 42, -63, -36, -55, 116, -2, 0, -86, -31, -11, 97, -6, 37, -114, 45, 37, -100, 62, -122, 29, -50, 35, 96, 57, 18, 118, 6, -4, 28, -32, 9, 0, 58, 123, -84, -108, 33, 1, -36, -72, 34, -79, -13, -63, 43, -9, 50, 56, -11, 70, -32, 28, 54, -75, -90, -109, 97, -110, -103, 92, -58, -100, 99, 35, 116, 9, -53, 83, -62, -29, 93, 116, -119, 13, 24, -120, 83, 118, -6, 85, 3, -79, 7, -94, -93, -110, 17, 90, -50, 14, 100, 103, 124, -69, 125, -49, -55, 60, 22, -45, -93, 5, -10, 118, 21, -92, -120, -41, 17, -86, 86, 105, -116, 86, 99, -85, 122, -55, -50, 102, -43, 71, -64, 89, 95, -104, -92, 63, 70, 80, -69, -32, -116, 54, 77, -105, 103, -119, 17, 125, 52, -10, -82, 81, -84, 6, 60, -75, 92, 108, -93, 37, 88, 34, 125, -2, -8, 7, -47, -100, 48, -34, 65, 68, 36, 9, 127, 106, -94, 54, -95, 5, 59, 74, 7, -89, 107, -29, 114, -91, -58, -74, 0, 39, -111, -21, -32, -81, -38, -11, 78, 28, -94, 55, -1, 84, 91, -90, -125, 67, -25, 69, -64, 74, -47, 99, -99, -68, 89, 3, 70, -74, -71, 86, -101, 86, -37, -65, -27, 49, 81, -111, 48, 102, -27, -56, 85, 39, -36, -108, 104, 17, 10, 19, 106, 65, 20, -105, -62, 39, -36, -72, -55, -78, 85, 112, -73, -96, -28, 42, -83, -90, 112, -97, 35, 32, -113, 93, 73, 110, -70, -73, -124, 63, 100, -125, -65, 12, 12, 115, -92, 2, -106, -20, 44, 100, 64, 0, 19, -108, -55, -100, -95, 115, -43, -57, 117, -73, -12, 21, -48, 42, 90, 38, -96, 116, 7, -111, -123, -121, -60, 17, 105, -14, -73, 23, -121, 85, -84, -62, 127, -56, -79, -100, 76, 75, 63, -51, 65, 5, 63, 44, 116, -56, -95, 10, -125, 33, 36, 27, 40, 2, 67, 40, 117, -82, -128, -117, -98, -15, 54, 92, 123, -118, 82, -112, 47, 19, 23, -70, 47, -80, 38, -97, 71, -109, 6, 114, 16, 123, 71, 38, -2, -10, 69, 71, 57, 77, 51, 32, -56, -15, 32, -77, -62, -12, 114, 91, 3, 5, -6, -72, -116, -57, -104, 31, -53, 9, -89, 106, 28, -65, 127, 23, -97, 67, -69, 10, 76, -117, 5, -112, -123, 127, 30, 105, 112, -124, 102, -57, -8, 96, 115, -111, -25, -68, 82, 104, -65, -45, -41, -95, -33, -4, -76, -20, -94, -95, -55, -75, -105, 89, 48, 19, -43, -4, 66, 2, -20, 43, 116, -27, 122, -73, 107, -68, -13, 99, 43, -70, -7, 124, -36, 65, -118, 111, 22, 57, 40, 56, -54, -101, -12, 93, -33, 2, 55, 119, -73, 86, 24, 51, -63, 5, 25, 15, -108, -13, 2, -59, -101, 83, 25, 0, -69, -56, 22, 54, 31, -86, 91, 51, -128, -54, 58, -119, 49, 4, -54, 115, -120, -79, -123, 103, 27, 62, 95, -29, 121, 14, -102, 98, 110, -60, 109, -101, 11, 51, -57, -92, 25, -81, 123, 50, -74, -123, -104, -108, -11, 117, -40, 42, -59, 69, 107, 84, -112, -89, -81, -113, -26, 16, 70, 54, 5, -119, -20, -70, 114, 68, 35, 111, 65, 35, 17, 107, 97, 116, -86, 23, -110, 73, -92, -111, -107, -77, 86, -57, 47, -58, 100, 31, 2, 81, -127, 46, -86, -104, 87, 11, 4, 102, -103, 7, 14, 8, 25, -36, 39, 19, -12, 105, 19, 125, -4, 106, 61, 123, -110, -78, -104, -103, 94, -25, -128, 54, -111, 83, -84, 54, 107, 6, -41, 36, -100, -48, -98, 27, 51, 120, -5, 4, 57, -100, -20, -72, 101, 5, -127, -42, 55, -57, -102, -26, 125, 111, 44, -81, 106, -70, -49, 89, -127, 89, -89, 121, 44, -77, -55, 113, -47, 73, -99, 35, 115, -83, 32, -10, 63, 3, -69, 89, -19, 19, 115, -124, -84, 97, -89, 21, 81, 67, -72, -54, 73, 50, 97, 46, -55, 21, -28, -54, 52, 106, -101, -50, 93, -42, 4, 23, -58, -78, -88, -101, 28, -60, 53, 100, 63, -121, 91, -36, 90, 126, 91, 52, -127, -49, -111, -98, -96, -111, 114, -2, -68, 70, -44, -4, 63, -80, -53, -107, -111, 112, 78, -30, -37, -74, 24, 68, -78, -13, 49, 74, 6, -69, 108, 109, 52, 0, 94, 72, 92, -26, 103, -67, -57, -48, -104, 88, 105, 40, -46, -39, 19, 64, -16, 4, 25, -22, 64, 19, 81, -94, 64, -96, -80, 65, 5, -117, -17, -80, -62, -3, 50, 100, 91, 122, 45, -8, -11, -53, -3, -121, 51, 39, -55, 120, -41, -77, 81, -94, -128, -120, 67, -120, 55, 2, 76, 82, -71, -62, -107, -51, 113, 54, 70, -5, 93, 108, 12, -49, -76, 112, 115, 74, -62, -78, -68, -127, 35, -62, -63, 61, -10, -109, -114, -110, 69, 90, -122, 38, 57, -2, -72, -90, 75, -123, 22, 62, 50, 112, 126, 3, 123, 56, -40, -84, 57, 34, -76, 81, -121, -69, 101, -22, -3, 70, 95, -58, 74, 12, 95, -113, 63, -112, 3, 72, -108, 21, -119, -99, 89, -91, 67, -40, 32, -116, 84, -93, 22, 101, 41, -75, 57, 34, 127, -6, -47, -68, -118, -9, 59, 126, -121, 73, 86, -72, 28, 42, 46, -16, -65, -85, -24, -36, -109, -41, 123, 47, -68, -98, 12, 100, -17, -96, 30, -124, -122, 38, -19, 121, -44, 81, 20, 8, 0, -32, 59, 89, -71, 86, -8, 33, 14, 85, 96, 103, 64, 125, 19, -36, -112, -6, -98, -117, -121, 43, -5, -113]
decrypt_out_shared_secret1 = [10, 105, 37, 103, 111, 36, -78, 44, 40, 111, 76, -127, -92, 34, 76, -20, 80, 108, -101, 37, 125, 72, 14, 2, -29, -76, -97, 68, -54, -93, 35, 127]
decrypt_in_cipher2 = [0, 20, 43, -20, -99, -120, 45, 8, 54, -108, -48, -3, -112, 72, 125, -55, -100, -4, -91, -10, 45, 105, -58, 68, 126, 72, -44, 50, -86, -15, -67, 23, -23, 93, -91, -116, 63, -62, 32, -2, 57, 84, -41, 34, 84, -20, -2, -20, 90, 32, -101, 83, 22, 73, -10, -74, -85, 25, -46, 65, -2, 27, 46, -91, 47, -26, 25, 24, 28, -128, 98, -40, 126, -3, 27, 94, -112, 75, -78, -112, 99, -75, -9, -67, 120, -33, -62, 42, -95, -99, -98, -74, -36, 104, 73, -86, 8, 1, -21, 96, -125, -12, -21, 66, 114, -43, -38, 49, 82, 16, -28, 3, 26, -78, -22, -10, 101, -124, -104, -10, -127, 20, 86, -116, 48, 54, 47, 59, 2, 77, -114, 64, -84, -5, -87, -126, -44, 45, 38, -8, -101, 32, 84, -120, -36, -20, -16, 59, -46, -125, 47, 15, -126, -94, 34, 58, 69, 6, -64, -44, 79, 54, -3, -50, -70, -120, -93, -107, -85, -5, -16, 22, 68, 93, -122, 21, 21, -29, -103, 125, 55, 77, -63, 26, -112, 101, 58, 90, 60, 110, -41, 14, 23, -114, -17, -124, -77, -101, 84, 88, 33, -123, -105, -111, -43, -63, 0, 94, 37, 26, 77, 95, 92, 76, -41, -84, 86, -116, 35, 26, 6, -25, -93, -65, 78, -109, 31, -54, -20, -44, -109, 22, -70, -26, 49, 120, 28, 16, 124, 91, 109, 23, 23, 14, -79, -97, -67, 2, 51, 116, -118, 15, -21, 122, -50, 19, -108, -2, -52, 25, 6, 31, -8, -16, -40, 61, 34, -41, 21, -38, 53, 28, 48, -12, -85, 95, 77, -75, 82, -70, 42, 55, 78, 107, 122, 50, 111, -60, -76, 46, 124, -99, -77, 8, 60, -54, -81, -66, 104, 57, -34, -45, 116, -63, -26, -76, -65, 9, -115, 54, 80, -16, -119, -45, 52, -78, -119, -17, 30, -25, -126, 35, -118, -109, -7, -21, -26, 40, 110, -111, 20, 76, 111, 106, -82, 75, 65, 109, -59, -73, -16, 125, -102, -9, -24, -35, -104, 75, -68, 7, -95, -92, 116, -107, 20, 82, 28, 127, 24, -43, -128, 102, -9, -78, 7, -125, -21, -65, -66, -85, 12, 112, -25, 24, 100, 102, 81, -77, 36, -102, -119, 52, -97, 37, 6, -38, -89, 120, -47, 77, 122, 69, -71, -5, 19, -75, 45, -28, -117, 35, -105, 33, -94, 55, -66, 119, -99, 14, 13, -53, -15, -87, -114, 94, 83, -9, -38, 14, 23, -92, -126, -87, -105, 116, -98, 111, 46, -99, -77, 50, 68, -125, 0, 46, -60, -7, -116, -103, -24, 109, -36, -23, 85, 15, -114, 19, 99, 119, -40, -7, 61, -10, 104, 2, 51, 121, 124, -113, -46, 59, 47, 75, 76, 106, 68, -21, 50, -39, 10, -108, 102, 116, -49, 54, 71, 101, 79, -125, -110, -24, -8, -87, -119, -11, 30, -107, 31, 111, -5, -78, -97, 90, -108, -110, -17, -14, 57, -30, -100, -17, 110, -41, -14, -31, -105, -80, -66, -75, -46, -22, 32, 10, 109, -33, 105, 55, 77, -51, -106, 95, 46, -80, -18, -79, 46, -35, 83, 118, -126, 7, -13, 120, 9, -2, 14, 40, 48, -105, -108, 121, 125, -18, 86, -108, -62, -48, 44, 50, -18, 121, 30, -13, 63, -49, -41, 46, -70, -106, -98, -97, -69, -59, 54, 1, 60, -24, -82, -80, 110, 49, 7, -61, 77, 43, 45, -96, 117, -93, -26, -16, -105, 126, -127, 9, -124, 106, -44, 100, 30, 49, 120, -50, 42, -7, 113, 16, 59, -114, -30, -86, -19, 97, 25, -20, 46, 66, -93, 37, 75, 71, 47, 51, -13, 106, 90, -76, -99, 70, 67, 6, -8, 49, -103, 14, -97, 84, 97, -88, -119, -12, 39, 72, 3, 23, -86, -112, -118, -37, -51, -92, 88, -126, 67, 33, 42, 2, 3, 92, 103, 110, 69, 83, -78, 97, -10, -25, -81, 46, 53, -68, -125, 105, -15, 22, -28, -44, 73, 60, -6, -100, 126, -25, 6, 63, 24, -9, -96, 0, -40, -98, -1, 53, 38, -32, 93, -1, 86, 26, -32, -14, 48, 30, -100, 116, -105, -127, -69, 83, 20, -56, -27, 61, -110, 74, -19, 76, 12, -109, -118, 55, -108, -32, 65, 39, -82, -41, -58, 53, -90, 0, 104, 117, 53, 70, -2, 33, 44, 83, 120, -84, 92, -89, 56, -5, 93, -71, 37, 39, 18, 76, 100, -86, -120, -64, 110, 42, -39, -8, -101, -32, -100, -109, 21, 100, 46, 116, 57, -50, -101, -36, -69, -62, 90, -30, -113, 90, 115, -34]
decrypt_in_privkey2 = [-121, -22, 35, 88, 9, -76, -110, -118, 14, -123, 0, -103, -114, -20, 36, -114, -46, -87, 71, 86, 18, -101, -116, 112, 12, -38, 120, -116, -106, 30, -89, 9, 112, -75, 11, 42, 80, -125, 91, -38, -73, -53, 44, -100, 23, 88, -38, -106, 79, 36, 67, 97, 75, 68, 120, -107, -83, 81, 101, -105, -84, 68, 127, -115, -26, 66, -67, -56, 20, 57, 9, -53, -4, -126, 100, 35, 42, -120, -68, -22, 83, -45, -5, -119, -102, -24, 73, 86, 60, -77, -30, 84, 17, -65, -80, 53, 83, 34, -111, 0, -26, -109, 48, -107, -121, -37, 66, -80, -14, 85, -76, 20, 89, 83, -119, -76, -75, -79, 54, 66, 105, -27, 64, -43, -23, 38, -114, -46, 93, 39, 5, 93, -61, -100, 125, 127, 44, 61, -31, -121, 94, 25, 27, 45, 81, -8, -98, -126, 55, -55, -105, -59, 42, 120, 74, -74, 84, -54, -52, -79, -12, 39, 57, -94, 35, 121, -94, -120, 78, -45, 70, 95, -59, -74, -18, -53, 74, 70, 20, 19, 90, -88, 121, 99, 3, -61, 98, -89, 72, -30, -76, 17, -84, 122, 67, -64, -125, -117, -13, 19, 78, -63, 26, 69, -121, -25, -87, -15, 4, -91, 17, 53, -127, -88, 91, 109, 64, 96, 89, 102, -84, 50, 102, 32, 50, -127, 12, 61, 0, 81, 119, -12, 23, 113, -56, 85, -110, 63, 99, 95, 77, 51, -118, -38, 39, 62, -126, -84, -63, 80, -94, 99, -37, -121, 17, -64, 122, 119, 53, 105, 64, -25, 101, -80, -45, 18, -51, 102, 119, 29, 75, -21, 4, 115, 28, 15, -108, -9, 28, -29, 54, -121, -41, -54, -60, 50, -64, 55, -97, -12, 59, 116, 20, -98, -10, 57, 98, 17, -55, 124, 64, -47, 123, -47, -21, -118, -81, 1, 98, -35, -100, 78, 120, 8, 56, 28, 0, 112, 90, -12, 44, -23, 113, -99, 18, -75, 9, -104, -120, 76, 29, 118, 20, -101, -59, 24, 38, -4, -73, -62, -14, 57, -117, -23, 7, 21, -92, -60, 20, -77, -52, -23, -27, 20, 1, -27, 120, 109, -9, 42, -42, 37, 49, 113, 27, -52, -49, 104, -126, -7, 107, 123, 59, 12, -120, 9, -56, 93, -111, 32, -119, 57, -122, -105, 87, -46, 51, 69, -122, 53, -93, -103, 3, -102, -36, 98, -68, 112, 77, -23, 119, -84, 44, -40, -50, 33, 103, 41, 126, -62, 102, 38, -124, 23, 13, -27, 82, -116, -24, -68, 114, 83, 31, 44, 85, -118, 35, 35, 70, 77, 18, 101, -99, -27, 3, -34, -106, 11, 54, 89, 0, -74, 10, 92, -79, -80, 36, 75, -96, -109, 6, -78, 3, -111, -121, 66, -37, 5, 127, 27, 3, 80, -83, -60, -102, -19, 43, 85, 83, -11, 65, 77, 82, 37, -20, 80, -110, 3, -128, 75, 37, -59, 24, -62, 114, 5, 25, 71, 5, 37, -8, -49, -54, -72, -109, -65, 55, -101, 78, -43, 97, 61, 44, -93, 16, 17, 123, -70, -75, 60, -1, -13, 105, 111, 4, 105, 33, -59, 75, -19, 87, 105, -122, -121, 72, -76, -122, -119, -114, -72, -81, -80, 50, 57, -59, -120, -83, -26, -71, -85, 102, 64, 102, -58, -76, -50, -34, 67, -120, -127, -123, 110, 32, 102, -60, 31, 101, 46, 75, -77, -49, 29, 60, -84, 48, 68, 81, -14, -70, 98, 118, 75, 116, 99, -86, 21, -51, -29, 60, -16, -104, 29, 36, -70, 121, -66, -10, 100, -113, 83, 71, 71, -56, 64, 81, 100, -86, -105, 74, 102, 41, 44, 42, 3, 41, -127, 38, -16, 101, 57, 40, -122, 95, -128, -57, -92, -13, 38, -124, 71, 11, 5, 123, 41, 6, 39, 38, 76, 84, 99, -48, -43, 81, -19, 42, 73, -85, 49, 39, -19, -55, 11, -22, -64, 7, -117, 38, 30, 39, -48, 95, -127, 76, -104, 46, 64, 84, -85, 36, 63, -36, -29, -63, -3, -45, -109, -10, 12, 125, 62, -26, 84, 102, 27, -88, -12, -119, 77, 76, 97, 76, -92, 123, 53, 10, 38, -78, -48, 105, 9, 72, 17, -78, 42, -70, -92, -38, -4, -66, 84, -46, -72, 52, -122, -91, -76, -123, 113, -70, -70, 68, 74, 36, 47, -29, -27, 71, -69, 73, -119, -57, -112, 81, -70, -68, -86, 6, 112, -91, 5, -28, -120, -23, 51, 60, -85, -100, 114, -16, 123, 42, -120, -117, 75, -44, 32, 84, 111, 18, 53, 52, 12, -52, -64, 0, 90, 51, -20, -98, 41, 105, 4, -55, -109, 59, -33, -16, 110, -58, 10, -126, -108, 48, 4, 32, 96, 84, -37, 120, -58, 99, 51, 46, 28, 59, 99, -86, 55, -63, -80, 27, -102, -40, 28, 54, -55, -32, 45, 75, 103, -109, -122, 25, -71, -94, -38, 77, 124, -89, 21, -7, -79, 125, -63, 81, 118, -69, -105, 117, 102, -108, -117, -6, -29, 126, 16, -123, -104, 54, -56, -60, -100, -91, 66, 87, -86, 108, -36, -117, -123, -39, -8, 49, -31, -56, 56, 24, -69, -93, -99, -64, 125, -2, 57, 108, -94, 1, 127, -89, 59, 63, -60, -125, 51, -39, -96, -103, -33, -103, -90, 94, -28, -108, -29, -102, -82, -123, -28, -65, -79, -59, -61, -46, -86, 63, 63, 76, 35, 13, 27, 57, -66, -42, 43, 22, 39, 54, 42, 105, 25, -98, 0, -125, -32, 89, -110, 59, -54, 20, -34, -127, 79, -77, 38, -124, -55, -9, -64, -35, 82, 92, 91, 37, 121, -81, 120, 0, 62, -42, 42, 36, -16, 52, 45, 9, 95, -72, -15, 17, 20, -72, 104, -103, 37, -72, 87, -43, 6, -118, 39, 13, -1, 64, 97, -85, -85, 93, -121, -103, -103, 48, -122, 63, -117, 120, -74, -88, 89, 73, 49, -64, 127, -120, 112, 1, -110, 114, -122, 41, -89, 65, -92, -91, -56, 113, 70, 27, 55, 74, -71, -50, 41, 117, 100, -80, 42, -37, 32, -118, -73, 101, 126, -112, 9, 47, -124, 67, 33, 86, -22, -94, 108, 4, 60, 34, 102, 127, -9, -87, -58, -115, 114, 34, 84, 71, -53, 98, -105, 100, -112, 28, -110, -66, -45, 13, 33, -118, 36, -52, -80, 118, 91, 55, 62, 48, 106, 20, -70, 73, -61, 69, -9, 51, 108, -30, -87, -91, 56, -80, -55, -104, 41, 120, 18, 94, -102, -76, 1, -57, 9, -92, -126, -75, -114, -58, 97, -112, -28, -94, -54, -8, 112, -54, -79, 103, 53, -118, -69, 125, 103, 11, 117, 109, 116, -92, 79, -14, 50, -23, -20, -78, -10, 22, -51, 125, -38, -57, 98, -100, -105, -40, 115, -78, 107, 66, 92, 87, -52, 117, 114, -55, -79, -29, -87, -55, -114, 89, 34, 19, -103, 51, -111, 33, 92, -7, 105, -64, 88, 123, 75, 19, -104, 119, -89, 16, 31, -94, -25, -84, 22, 99, -58, 13, 21, 65, 65, 41, 103, -1, -102, 3, -80, 36, -93, -61, -43, 29, -48, -30, -52, 23, -105, -101, 65, -7, -128, 22, -24, -79, -8, 54, -83, 72, -61, 36, 71, 26, 41, 111, 11, -80, 6, -29, 27, 29, -118, 94, 30, 123, -53, -106, -118, 73, -117, -10, -76, 15, 0, 20, 83, -74, 19, -85, 51, -90, -3, 80, 22, 60, -24, 11, -6, -71, -50, -20, 65, 43, 122, -68, 89, 118, 104, -57, 73, -119, 87, 55, -59, -122, 20, -80, -117, 68, 113, 34, 9, -8, 47, -23, 122, 111, 51, -40, 71, 112, 124, -54, 5, -32, 53, -128, 32, 34, -105, -116, 35, 0, 123, 2, 81, -60, 10, 18, 107, -118, 6, 91, -119, -110, 48, 4, 55, 76, 77, 122, -5, -109, -96, -88, 56, 57, 66, 38, -18, -58, 95, 51, -60, -92, 27, 51, 58, 61, -112, 42, 9, 26, -61, -66, 0, 42, -10, 114, 115, -43, 87, -112, -80, 100, -128, -103, 68, 66, -62, -5, 125, -45, 83, -49, 75, -127, 67, 16, 19, -79, 86, 40, 51, -93, 117, 80, 3, 26, -59, 8, 56, -52, 68, 27, -93, -77, 64, 96, -18, -55, 59, -18, -14, -95, -32, -47, 29, -9, 67, -81, 52, -56, 96, 25, -126, -125, 108, 74, 75, -98, 50, 49, -100, -40, -69, -38, -89, 9, -86, 38, 66, -63, 12, -70, -84, -86, -126, 6, -121, -108, -41, -74, 37, -50, -62, -116, -73, 66, 69, -31, -72, -63, -13, 35, 6, 17, 84, 89, -15, -64, 15, -22, 60, -74, -55, -110, 31, 14, -15, 41, -12, 122, -86, 96, 56, 126, -109, 82, 116, 80, 28, 70, 9, 80, 100, -48, 54, 63, 100, 100, 36, -78, -86, -77, -82, -14, -77, -99, 18, 6, 17, -70, -126, 40, 28, 46, 51, -36, 5, 0, -92, -122, 11, -44, 24, 115, -57, 9, 1, 52, 27, 25, -27, -62, -13, 96, 87, 54, 5, 31, -99, 68, -53, -100, -16, -72, -105, 0, 35, 125, 73, 36, -55, 113, -50, -124, 56, 109, -64, -94, 107, 1, 44, -96, -39, 92, 74, 87, -58, 33, 89, 68, 7, -87, 50, 105, -115, 101, -106, -87, -59, 75, -34, -122, 81, -89, 53, -59, -41, 48, 58, 74, -59, 78, 94, 124, -4, -65, 37, -4, 64, 76, 99, 9, 120, 8, -43, 102, -116, -82, -19, 28, -68, 105, -34, -70, 67, 37, -99, -114, 29, 125, -53, -23, -53, 54, -69, 40, 38, -118, -93, 27, 10, -93, -24, -57, 44, 6, 83, -47, 16, -58, -128, 67, -13, 56, -36, -27, 88, 122, 106, 87, 123, 34, -71, 105, -25, -121, -70, 24, 73, -65, 88, -125, 28, 52, 21, 91, 43, -49, -45, 63, -50, 123, -69, 114, 102, 117, -20, 103, -111, -61, -7, -39, 56, -114, 101]
decrypt_out_shared_secret2 = [87, -62, -1, 27, 9, -66, -61, -8, 123, 31, -4, -102, 110, -60, -83, -35, -93, 114, -114, -122, 68, -32, 70, 55, -27, 102, -6, -14, 49, -16, 59, -54]
assert(kem_decaps512(decrypt_in_privkey1, decrypt_in_cipher1) == decrypt_out_shared_secret1)
assert(kem_decaps512(decrypt_in_privkey2, decrypt_in_cipher2) == decrypt_out_shared_secret2)
# test kem 512 a few times
for i in range(0,10):
priv, pub = kem_keygen512()
seed = get_random_bytes(KYBER_SYM_BYTES)
seed = bytearray([x & 0xFF for x in seed])
secret1, cipher = kem_encaps512(pub, seed)
secret2 = kem_decaps512(priv, cipher)
assert(secret1 == secret2)
for i in range(0,10):
priv, pub = kem_keygen512()
secret1, cipher = kem_encaps512(pub)
secret2 = kem_decaps512(priv, cipher)
assert(secret1 == secret2)
def intlist(x):
y = bytearray.fromhex(x)
return [ cast_to_byte(i) for i in y]
count = 0
seed = "061550234D158C5EC95595FE04EF7A25767F2E24CC2BC479D09D86DC9ABCFDE7056A8C266F9EF97ED08541DBD2E1FFA1"
pk = "115ACE0E64677CBB7DCFC93C16D3A305F67615A488D711AA56698C5663AB7AC9CE66D547C0595F98A43F4650BBE08C364D976789117D34F6AE51AC063CB55C6CA32558227DFEF807D19C30DE414424097F6AA236A1053B4A07A76BE372A5C6B6002791EBE0AFDAF54E1CA237FF545BA68343E745C04AD1639DBC590346B6B9569B56DBBFE53151913066E5C85527DC9468110A136A411497C227DCB8C9B25570B7A0E42AADA6709F23208F5D496EBAB7843F6483BF0C0C73A40296EC2C6440001394C99CA173D5C775B7F415D02A5A26A07407918587C41169F2B7178755ACC27FC8B19C4C4B3FCD41053F2C74C8A10A8321241B2802432875AE808B9EF1365C7B8A52902F1317BA2FB0269F47930672107B4726FEF64547394D3320C8F120B3C2F4725B0305FAB88CC7981FCB09A76A1CBF7F179F43BB0A4C8B0590857F1E69708466C7F8607391E7BC5268BFD3D7A1DFFCB4ECA2A1C9B597593013D5FC4202EC2B74E57AB76BBCF3632BBAF97CDC418A6F16392838CA9BF45DDF023777B7561833C105190F94F302C59B531900BBC816361FAA5B3380CA3A893104CA7388B185671B3E5FE3790E9A626EC46D9B0B33C7A419AF7B32B6859894F575D82AC5456B5490A7AF8FE61046360589ECBA7244236F4123116B6174AA179249A49195B356C72FC6641F0251812EAA98570B046699070E0819DC2713F469137DFC6A3D7B92B298995EE780369153AC366B06D7249CD09E1B3378FB04399CECB8650581D637C79AE67D6F2CAF6ABACF598159A7792CB3C971D1499D2373AD20F63F03BB59ED137384AC61A7155143B8CA4932612EC915E4CA346A9BCE5DD60417C6B2A89B1CC435643F875BDC5A7E5B3481CF919EA09172FEBC46D4FC3FB0CB9591704EE2DBB61844B2F3314A06BB6C6D34005E485CE667BDC7D098586928D2D91340F00419EA401351A240A0B041058BEFB0C2FD32645B7A2DF8F5CBFD873327C978D7B351A28088438837024C52B9C295CD713646FB5D6C0CCFB470734AC2B2BC8123C2C13DF6938E92455A862639FEB8A64B85163E32707E037B38D8AC3922B45187BB65EAFD465FC64A0C5F8F3F9003489415899D59A543D8208C54A3166529B53922"
sk = "6C892B0297A9C7641493F87DAF3533EED61F07F4652066337ED74046DCC71BA03F30960103161F7DEB53A71B11617263FE2A809769CE6D70A85FE600ECE29D7F36A16D331B8B2A9E1DB8C090742DF0739FF060CEB4ECC5AB1C5E55AC97BB66A7F895105D57782B229538E3421544A3421408DBF44910934CC423774F1676FF1C306F97555F57B4AED7A6BAB950A8163C8D318DEA62751BD6ABC5069C06C88F330026A19806A03B97A7696B56DA21827BB4E8DC031152B41B892A9E99ADF6E1963E96578828154F467033846920FBB4B80544E7E8A81AE963CF368C9BA037A8C2AD62E32B6E61C91D75CE005AB30F8099A1F29D7B6305B4DC06E25680BB00992F717FE6C115A8084231CC79DD700EA6912AC7FA0D937BB6A756662230470C189B5AA1653DEB937D5A9C25A21D93B19074FC239D8153539797C7D4AB62649D76AA553736A949022C22C52BAEEC605B32CE9E5B9384903558CA9D6A3ABA90423EEDA01C94198B192A8BA9063497A0C5013307DDD863526471A4D99523EB417F291AAC0C3A581B6DA00732E5E81B1F7C879B1693C13B6F9F7931622429E542AF4069222F045544E0CC4FB24D4448CF2C6596F5CB08624B1185013B6B020892F96BDFD4ADA9179DE727B8D9426E0996B5D34948CE02D0C369B37CBB54D3479ED8B582E9E728929B4C71C9BE11D45B20C4BDC3C74313223F58274E8BA5244447C495950B84CB0C3C273640108A3397944573279328996CDC0C913C958AD620BA8B5E5ECBBB7E13CB9C70BD5AB30EB7488C97001C20498F1D7CC06DA76BF520C658CCADFA2956424557ABEA8AB89239C17833DC3A49B36A9AE9A486940540EB444F97152357E02035939D75A3C025F41A40082382A0733C39B0622B740E407592C62ECAEB1432C445B3703A86F6981A278157EA95A6E92D55E4B972F936C2F0A658280EA2B07A48992DF8937E0A2AC1DCC974FE00AAE1F561FA258E2D259C3E861DCE236039127606FC1CE009003A7BAC942101DCB822B1F3C12BF73238F546E01C36B5A6936192995CC69C63237409CB53C2E35D74890D18885376FA5503B107A2A392115ACE0E64677CBB7DCFC93C16D3A305F67615A488D711AA56698C5663AB7AC9CE66D547C0595F98A43F4650BBE08C364D976789117D34F6AE51AC063CB55C6CA32558227DFEF807D19C30DE414424097F6AA236A1053B4A07A76BE372A5C6B6002791EBE0AFDAF54E1CA237FF545BA68343E745C04AD1639DBC590346B6B9569B56DBBFE53151913066E5C85527DC9468110A136A411497C227DCB8C9B25570B7A0E42AADA6709F23208F5D496EBAB7843F6483BF0C0C73A40296EC2C6440001394C99CA173D5C775B7F415D02A5A26A07407918587C41169F2B7178755ACC27FC8B19C4C4B3FCD41053F2C74C8A10A8321241B2802432875AE808B9EF1365C7B8A52902F1317BA2FB0269F47930672107B4726FEF64547394D3320C8F120B3C2F4725B0305FAB88CC7981FCB09A76A1CBF7F179F43BB0A4C8B0590857F1E69708466C7F8607391E7BC5268BFD3D7A1DFFCB4ECA2A1C9B597593013D5FC4202EC2B74E57AB76BBCF3632BBAF97CDC418A6F16392838CA9BF45DDF023777B7561833C105190F94F302C59B531900BBC816361FAA5B3380CA3A893104CA7388B185671B3E5FE3790E9A626EC46D9B0B33C7A419AF7B32B6859894F575D82AC5456B5490A7AF8FE61046360589ECBA7244236F4123116B6174AA179249A49195B356C72FC6641F0251812EAA98570B046699070E0819DC2713F469137DFC6A3D7B92B298995EE780369153AC366B06D7249CD09E1B3378FB04399CECB8650581D637C79AE67D6F2CAF6ABACF598159A7792CB3C971D1499D2373AD20F63F03BB59ED137384AC61A7155143B8CA4932612EC915E4CA346A9BCE5DD60417C6B2A89B1CC435643F875BDC5A7E5B3481CF919EA09172FEBC46D4FC3FB0CB9591704EE2DBB61844B2F3314A06BB6C6D34005E485CE667BDC7D098586928D2D91340F00419EA401351A240A0B041058BEFB0C2FD32645B7A2DF8F5CBFD873327C978D7B351A28088438837024C52B9C295CD713646FB5D6C0CCFB470734AC2B2BC8123C2C13DF6938E92455A862639FEB8A64B85163E32707E037B38D8AC3922B45187BB65EAFD465FC64A0C5F8F3F9003489415899D59A543D8208C54A3166529B539227FFAD1BC8AF73B7E874956B81C2A2EF0BFABE8DC93D77B2FBC9E0C64EFA01E848626ED79D451140800E03B59B956F8210E556067407D13DC90FA9E8B872BFB8F"
ct = "EDF24145E43B4F6DC6BF8332F54E02CAB02DBF3B5605DDC90A15C886AD3ED489462699E4ABED44350BC3757E2696FBFB2534412E8DD201F1E4540A3970B055FE3B0BEC3A71F9E115B3F9F39102065B1CCA8314DCC795E3C0E8FA98EE83CA6628457028A4D09E839E554862CF0B7BF56C5C0A829E8657947945FE9C22564FBAEBC1B3AF350D7955508A26D8A8EB547B8B1A2CF03CCA1AABCE6C3497783B6465BA0B6E7ACBA821195124AEF09E628382A1F914043BE7096E952CBC4FB4AFED13609046117C011FD741EE286C83771690F0AEB50DA0D71285A179B215C6036DEB780F4D16769F72DE16FDADAC73BEFA5BEF8943197F44C59589DC9F4973DE1450BA1D0C3290D6B1D683F294E759C954ABE8A7DA5B1054FD6D21329B8E73D3756AFDA0DCB1FC8B1582D1F90CF275A102ABC6AC699DF0C5870E50A1F989E4E6241B60AAA2ECF9E8E33E0FFCF40FE831E8FDC2E83B52CA7AB6D93F146D29DCA53C7DA1DB4AC4F2DB39EA120D90FA60F4D437C6D00EF483BC94A3175CDA163FC1C2828BE4DBD6430507B584BB5177E171B8DDA9A4293C3200295C803A865D6D2166F66BA5401FB7A0E853168600A2948437E036E3BF19E12FD3F2A2B8B343F784248E8D685EB0AFDE6315338730E7A1001C27D8D2A76FA69D157BA1AC7AD56DA5A8C70FE4B5B8D786DC6FC0566BA8E1B8816334D32A3FB1CE7D4D5E4C332AF7B003D091741A3D5C965292255DFF8ED2BBF1F9116BE50C17B8E548748AD4B2E957BBD1953482A2E1718CEC66CD2C81F572D552B7187885E6B8943D6431413C59EBB7E036048490BE5289E95B20A89E8B159F61A9A9886E147568F4C9021F362F02688A1C8C3BB0D24086880E55B6EDB43F3745D2C166DC1CB743C76FE6BE523A893CC764D16435C37851252A81E2FFBA0F18971A3DEE37D4877CB928E36E5235037A6B2057897D518A5F0E348E3AB6D5B52DFC60757F3B41A4FEC7828F1DEEAF4587CCC8EADF647F4D203B2FAA05A649B582340CB4CACE57A30711BE752FACF0227D0A80C4128442DDC544BE805B9CFE8FE9B1237C80F96787CD9281CCF270C1AFC0670D"
ss = "0A6925676F24B22C286F4C81A4224CEC506C9B257D480E02E3B49F44CAA3237F"
pk = intlist(pk)
sk = intlist(sk)
ct = intlist(ct)
ss = intlist(ss)
ss2 = kem_decaps512(sk, ct)
assert(ss == ss2)
# test kem 768 a few times
for i in range(0,10):
priv, pub = kem_keygen768()
seed = get_random_bytes(KYBER_SYM_BYTES)
seed = bytearray([x & 0xFF for x in seed])
secret1, cipher = kem_encaps768(pub, seed)
secret2 = kem_decaps768(priv, cipher)
assert(secret1 == secret2)
for i in range(0,10):
priv, pub = kem_keygen768()
secret1, cipher = kem_encaps768(pub)
secret2 = kem_decaps768(priv, cipher)
assert(secret1 == secret2)
# Kyber768
count = 0
seed = "061550234D158C5EC95595FE04EF7A25767F2E24CC2BC479D09D86DC9ABCFDE7056A8C266F9EF97ED08541DBD2E1FFA1"
pk = "A72C2D9C843EE9F8313ECC7F86D6294D59159D9A879A542E260922ADF999051CC45200C9FFDB60449C49465979272367C083A7D6267A3ED7A7FD47957C219327F7CA73A4007E1627F00B11CC80573C15AEE6640FB8562DFA6B240CA0AD351AC4AC155B96C14C8AB13DD262CDFD51C4BB5572FD616553D17BDD430ACBEA3E95F0B698D66990AB51E5D03783A8B3D278A5720454CF9695CFDCA08485BA099C51CD92A7EA7587C1D15C28E609A81852601B0604010679AA482D51261EC36E36B8719676217FD74C54786488F4B4969C05A8BA27CA3A77CCE73B965923CA554E422B9B61F4754641608AC16C9B8587A32C1C5DD788F88B36B717A46965635DEB67F45B129B99070909C93EB80B42C2B3F3F70343A7CF37E8520E7BCFC416ACA4F18C7981262BA2BFC756AE03278F0EC66DC2057696824BA6769865A601D7148EF6F54E5AF5686AA2906F994CE38A5E0B938F239007003022C03392DF3401B1E4A3A7EBC6161449F73374C8B0140369343D9295FDF511845C4A46EBAAB6CA5492F6800B98C0CC803653A4B1D6E6AAED1932BACC5FEFAA818BA502859BA5494C5F5402C8536A9C4C1888150617F80098F6B2A99C39BC5DC7CF3B5900A21329AB59053ABAA64ED163E859A8B3B3CA3359B750CCC3E710C7AC43C8191CB5D68870C06391C0CB8AEC72B897AC6BE7FBAACC676ED66314C83630E89448C88A1DF04ACEB23ABF2E409EF333C622289C18A2134E650C45257E47475FA33AA537A5A8F7680214716C50D470E3284963CA64F54677AEC54B5272162BF52BC8142E1D4183FC017454A6B5A496831759064024745978CBD51A6CEDC8955DE4CC6D363670A47466E82BE5C23603A17BF22ACDB7CC984AF08C87E14E27753CF587A8EC3447E62C649E887A67C36C9CE98721B697213275646B194F36758673A8ED11284455AFC7A8529F69C97A3C2D7B8C636C0BA55614B768E624E712930F776169B01715725351BC74B47395ED52B25A1313C95164814C34C979CBDFAB85954662CAB485E75087A98CC74BB82CA2D1B5BF2803238480638C40E90B43C7460E7AA917F010151FAB1169987B372ABB59271F7006C24E60236B84B9DDD600623704254617FB498D89E58B0368BCB2103E79353EB587860C1422E476162E425BC2381DB82C6592737E1DD602864B0167A71EC1F223305C02FE25052AF2B3B5A55A0D7A2022D9A798DC0C5874A98702AAF4054C5D80338A5248B5B7BD09C53B5E2A084B047D277A861B1A73BB51488DE04EF573C85230A0470B73175C9FA50594F66A5F50B4150054C93B68186F8B5CBC49316C8548A642B2B36A1D454C7489AC33B2D2CE6668096782A2C1E0866D21A65E16B585E7AF8618BDF3184C1986878508917277B93E10706B1614972B2A94C7310FE9C708C231A1A8AC8D9314A529A97F469BF64962D820648443099A076D55D4CEA824A58304844F99497C10A25148618A315D72CA857D1B04D575B94F85C01D19BEF211BF0AA3362E7041FD16596D808E867B44C4C00D1CDA3418967717F147D0EB21B42AAEE74AC35D0B92414B958531AADF463EC6305AE5ECAF79174002F26DDECC813BF32672E8529D95A4E730A7AB4A3E8F8A8AF979A665EAFD465FC64A0C5F8F3F9003489415899D59A543D8208C54A3166529B53922"
sk = "07638FB69868F3D320E5862BD96933FEB311B362093C9B5D50170BCED43F1B536D9A204BB1F22695950BA1F2A9E8EB828B284488760B3FC84FABA04275D5628E39C5B2471374283C503299C0AB49B66B8BBB56A4186624F919A2BA59BB08D8551880C2BEFC4F87F25F59AB587A79C327D792D54C974A69262FF8A78938289E9A87B688B083E0595FE218B6BB1505941CE2E81A5A64C5AAC60417256985349EE47A52420A5F97477B7236AC76BC70E8288729287EE3E34A3DBC3683C0B7B10029FC203418537E7466BA6385A8FF301EE12708F82AAA1E380FC7A88F8F205AB7E88D7E95952A55BA20D09B79A47141D62BF6EB7DD307B08ECA13A5BC5F6B68581C6865B27BBCDDAB142F4B2CBFF488C8A22705FAA98A2B9EEA3530C76662335CC7EA3A00777725EBCCCD2A4636B2D9122FF3AB77123CE0883C1911115E50C9E8A94194E48DD0D09CFFB3ADCD2C1E92430903D07ADBF00532031575AA7F9E7B5A1F3362DEC936D4043C05F2476C07578BC9CBAF2AB4E382727AD41686A96B2548820BB03B32F11B2811AD62F489E951632ABA0D1DF89680CC8A8B53B481D92A68D70B4EA1C3A6A561C0692882B5CA8CC942A8D495AFCB06DE89498FB935B775908FE7A03E324D54CC19D4E1AABD3593B38B19EE1388FE492B43127E5A504253786A0D69AD32601C28E2C88504A5BA599706023A61363E17C6B9BB59BDC697452CD059451983D738CA3FD034E3F5988854CA05031DB09611498988197C6B30D258DFE26265541C89A4B31D6864E9389B03CB74F7EC4323FB9421A4B9790A26D17B0398A26767350909F84D57B6694DF830664CA8B3C3C03ED2AE67B89006868A68527CCD666459AB7F056671000C6164D3A7F266A14D97CBD7004D6C92CACA770B844A4FA9B182E7B18CA885082AC5646FCB4A14E1685FEB0C9CE3372AB95365C04FD83084F80A23FF10A05BF15F7FA5ACC6C0CB462C33CA524FA6B8BB359043BA68609EAA2536E81D08463B19653B5435BA946C9ADDEB202B04B031CC960DCC12E4518D428B32B257A4FC7313D3A7980D80082E934F9D95C32B0A0191A23604384DD9E079BBBAA266D14C3F756B9F2133107433A4E83FA7187282A809203A4FAF841851833D121AC383843A5E55BC2381425E16C7DB4CC9AB5C1B0D91A47E2B8DE0E582C86B6B0D907BB360B97F40AB5D038F6B75C814B27D9B968D419832BC8C2BEE605EF6E5059D33100D90485D378450014221736C07407CAC260408AA64926619788B8601C2A752D1A6CBF820D7C7A04716203225B3895B9342D147A8185CFC1BB65BA06B4142339903C0AC4651385B45D98A8B19D28CD6BAB088787F7EE1B12461766B43CBCCB96434427D93C065550688F6948ED1B5475A425F1B85209D061C08B56C1CC069F6C0A7C6F29358CAB911087732A649D27C9B98F9A48879387D9B00C25959A71654D6F6A946164513E47A75D005986C2363C09F6B537ECA78B9303A5FA457608A586A653A347DB04DFCC19175B3A301172536062A658A95277570C8852CA8973F4AE123A334047DD711C8927A634A03388A527B034BF7A8170FA702C1F7C23EC32D18A2374890BE9C787A9409C82D192C4BB705A2F996CE405DA72C2D9C843EE9F8313ECC7F86D6294D59159D9A879A542E260922ADF999051CC45200C9FFDB60449C49465979272367C083A7D6267A3ED7A7FD47957C219327F7CA73A4007E1627F00B11CC80573C15AEE6640FB8562DFA6B240CA0AD351AC4AC155B96C14C8AB13DD262CDFD51C4BB5572FD616553D17BDD430ACBEA3E95F0B698D66990AB51E5D03783A8B3D278A5720454CF9695CFDCA08485BA099C51CD92A7EA7587C1D15C28E609A81852601B0604010679AA482D51261EC36E36B8719676217FD74C54786488F4B4969C05A8BA27CA3A77CCE73B965923CA554E422B9B61F4754641608AC16C9B8587A32C1C5DD788F88B36B717A46965635DEB67F45B129B99070909C93EB80B42C2B3F3F70343A7CF37E8520E7BCFC416ACA4F18C7981262BA2BFC756AE03278F0EC66DC2057696824BA6769865A601D7148EF6F54E5AF5686AA2906F994CE38A5E0B938F239007003022C03392DF3401B1E4A3A7EBC6161449F73374C8B0140369343D9295FDF511845C4A46EBAAB6CA5492F6800B98C0CC803653A4B1D6E6AAED1932BACC5FEFAA818BA502859BA5494C5F5402C8536A9C4C1888150617F80098F6B2A99C39BC5DC7CF3B5900A21329AB59053ABAA64ED163E859A8B3B3CA3359B750CCC3E710C7AC43C8191CB5D68870C06391C0CB8AEC72B897AC6BE7FBAACC676ED66314C83630E89448C88A1DF04ACEB23ABF2E409EF333C622289C18A2134E650C45257E47475FA33AA537A5A8F7680214716C50D470E3284963CA64F54677AEC54B5272162BF52BC8142E1D4183FC017454A6B5A496831759064024745978CBD51A6CEDC8955DE4CC6D363670A47466E82BE5C23603A17BF22ACDB7CC984AF08C87E14E27753CF587A8EC3447E62C649E887A67C36C9CE98721B697213275646B194F36758673A8ED11284455AFC7A8529F69C97A3C2D7B8C636C0BA55614B768E624E712930F776169B01715725351BC74B47395ED52B25A1313C95164814C34C979CBDFAB85954662CAB485E75087A98CC74BB82CA2D1B5BF2803238480638C40E90B43C7460E7AA917F010151FAB1169987B372ABB59271F7006C24E60236B84B9DDD600623704254617FB498D89E58B0368BCB2103E79353EB587860C1422E476162E425BC2381DB82C6592737E1DD602864B0167A71EC1F223305C02FE25052AF2B3B5A55A0D7A2022D9A798DC0C5874A98702AAF4054C5D80338A5248B5B7BD09C53B5E2A084B047D277A861B1A73BB51488DE04EF573C85230A0470B73175C9FA50594F66A5F50B4150054C93B68186F8B5CBC49316C8548A642B2B36A1D454C7489AC33B2D2CE6668096782A2C1E0866D21A65E16B585E7AF8618BDF3184C1986878508917277B93E10706B1614972B2A94C7310FE9C708C231A1A8AC8D9314A529A97F469BF64962D820648443099A076D55D4CEA824A58304844F99497C10A25148618A315D72CA857D1B04D575B94F85C01D19BEF211BF0AA3362E7041FD16596D808E867B44C4C00D1CDA3418967717F147D0EB21B42AAEE74AC35D0B92414B958531AADF463EC6305AE5ECAF79174002F26DDECC813BF32672E8529D95A4E730A7AB4A3E8F8A8AF979A665EAFD465FC64A0C5F8F3F9003489415899D59A543D8208C54A3166529B53922D4EC143B50F01423B177895EDEE22BB739F647ECF85F50BC25EF7B5A725DEE868626ED79D451140800E03B59B956F8210E556067407D13DC90FA9E8B872BFB8F"
ct = "B52C56B92A4B7CE9E4CB7C5B1B163167A8A1675B2FDEF84A5B67CA15DB694C9F11BD027C30AE22EC921A1D911599AF0585E48D20DA70DF9F39E32EF95D4C8F44BFEFDAA5DA64F1054631D04D6D3CFD0A540DD7BA3886E4B5F13E878788604C95C096EAB3919F427521419A946C26CC041475D7124CDC01D0373E5B09C7A70603CFDB4FB3405023F2264DC3F983C4FC02A2D1B268F2208A1F6E2A6209BFF12F6F465F0B069C3A7F84F606D8A94064003D6EC114C8E808D3053884C1D5A142FBF20112EB360FDA3F0F28B172AE50F5E7D83801FB3F0064B687187074BD7FE30EDDAA334CF8FC04FA8CED899CEADE4B4F28B68372BAF98FF482A415B731155B75CEB976BE0EA0285BA01A27F1857A8FB377A3AE0C23B2AA9A079BFABFF0D5B2F1CD9B718BEA03C42F343A39B4F142D01AD8ACBB50E38853CF9A50C8B44C3CF671A4A9043B26DDBB24959AD6715C08521855C79A23B9C3D6471749C40725BDD5C2776D43AED20204BAA141EFB3304917474B7F9F7A4B08B1A93DAED98C67495359D37D67F7438BEE5E43585634B26C6B3810D7CDCBC0F6EB877A6087E68ACB8480D3A8CF6900447E49B417F15A53B607A0E216B855970D37406870B4568722DA77A4084703816784E2F16BED18996532C5D8B7F5D214464E5F3F6E905867B0CE119E252A66713253544685D208E1723908A0CE97834652E08AE7BDC881A131B73C71E84D20D68FDEFF4F5D70CD1AF57B78E3491A9865942321800A203C05ED1FEEB5A28E584E19F6535E7F84E4A24F84A72DCAF5648B4A4235DD664464482F03176E888C28BFC6C1CB238CFFA35A321E71791D9EA8ED0878C61121BF8D2A4AB2C1A5E120BC40ABB1892D1715090A0EE48252CA297A99AA0E510CF26B1ADD06CA543E1C5D6BDCD3B9C585C8538045DB5C252EC3C8C3C954D9BE5907094A894E60EAB43538CFEE82E8FFC0791B0D0F43AC1627830A61D56DAD96C62958B0DE780B78BD47A604550DAB83FFF227C324049471F35248CFB849B25724FF704D5277AA352D550958BE3B237DFF473EC2ADBAEA48CA2658AEFCC77BBD4264AB374D70EAE5B964416CE8226A7E3255A0F8D7E2ADCA062BCD6D78D60D1B32E11405BE54B66EF0FDDD567702A3BCCFEDE3C584701269ED14809F06F8968356BB9267FE86E514252E88BB5C30A7ECB3D0E621021EE0FBF7871B09342BF84F55C97EAF86C48189C7FF4DF389F077E2806E5FA73B3E9458A16C7E275F4F602275580EB7B7135FB537FA0CD95D6EA58C108CD8943D70C1643111F4F01CA8A8276A902666ED81B78D168B006F16AAA3D8E4CE4F4D0FB0997E41AEFFB5B3DAA838732F357349447F387776C793C0479DE9E99498CC356FDB0075A703F23C55D47B550EC89B02ADE89329086A50843456FEDC3788AC8D97233C54560467EE1D0F024B18428F0D73B30E19F5C63B9ABF11415BEA4D0170130BAABD33C05E6524E5FB5581B22B0433342248266D0F1053B245CC2462DC44D34965102482A8ED9E4E964D5683E5D45D0C8269"
ss = "914CB67FE5C38E73BF74181C0AC50428DEDF7750A98058F7D536708774535B29"
pk = intlist(pk)
sk = intlist(sk)
ct = intlist(ct)
ss = intlist(ss)
ss2 = kem_decaps768(sk, ct)
assert(ss == ss2)
# test kem 1024 a few times
for i in range(0,10):
priv, pub = kem_keygen1024()
seed = get_random_bytes(KYBER_SYM_BYTES)
seed = bytearray([x & 0xFF for x in seed])
secret1, cipher = kem_encaps1024(pub, seed)
secret2 = kem_decaps1024(priv, cipher)
assert(secret1 == secret2)
for i in range(0,10):
priv, pub = kem_keygen1024()
secret1, cipher = kem_encaps1024(pub)
secret2 = kem_decaps1024(priv, cipher)
assert(secret1 == secret2)
count = 0
seed = "061550234D158C5EC95595FE04EF7A25767F2E24CC2BC479D09D86DC9ABCFDE7056A8C266F9EF97ED08541DBD2E1FFA1"
pk = "D22302CBD3399FACC630991FC8F28BDB4354762541527678BCF61F65C241146C426D23B9BFAA6B7DF18C97F20C1B6125BF874B1D89475852C448215DB0EB7737F91480E8CEBD9A0871574F5AB62D9020175EC6927CA0B54C09818E42CF92A383172422C7DC1831D63B0C295DE75159DB8034E9E07F7B0B910C3C1E5FB66B3DC523F1FA6EB4910CB89A6C17562C83AB4C18D0CD7E0796592A372AA409B1C557347CCACDC4644A119064D06DD474929D1C6FB4D686E5491CE4BC89A30BB4B8C41BCE5157DFC1360823B1AB618C14B10F98C25067398EA7018C278A4B3DF31334D603B2044EF187CD9BC6CE42725BD962C264983E9E18155A8B9C47143D70460A26A56FE7658C1F150348C6087EF758AD167887860A007A5FC37358D43B5EBEE820ACEA474F0AC07B76802866199C61231D5C747C93774D2C1E0C1C67E6C81B82752173E125BAF39B4FD19A4F453DC57976B1D97FE6996992BBB65B7CB25D077BBAA6A13322899AF659CF1B3558C1B5001154B625809ED89AEEBB89E6EA7D67F723D045AB05715C42355DA6A5C8DD39C8ABE3037751A01ED1C7374919F3121B5A52C53D1487316769F80721DEEAAAD3C90F76E7AE9E12BA92B32B5FD457E3C752C2650DFB885771CB77AC3C785A8C562E6A1C63C2A55EA47CF8B90EB8225C123C346452566235B2F31823A33521E087937A345D8D663EEAA05658917BBAA008C2E335F8850A90A326D0E66432F44CEB8289E4ECB2D12958E984072ECACB88E1348FF0B55654ACBA5B54971CBAEBA88EC4B91A94C37192FA982BECB9F3DA421603B61A51BC8E36CBD053851C77B1B926B17A272AA9023246B02B3ED47F66A00BD5684823634E7CE58CF8F306E35B1E5322824D904801F0A2FA7C2BC9C252B0A56B7BA2AB0F636021745A70A9A43E2B0A8D615970B65309624B5184BCC30B911679AEDD76025FE3908FD67897B0CF4BE5A6F5413D7DD98564B23E42A93E4AA8821CD45054C643EDC1158DB6B3DEB13FB5A51EBD1A8A78B87225A7338E101104C4A220D9BDEDD48C85A1C2DAE781A80C40E13B87EAC73A764201C9B760CCFB1AE392699C7039D27C39362B27B8FC6F07A8A3D4410F1547C48A9997F62C61074452EF1515F8A649EBCA9437205A4E8A61606B41DAF6834D671F4D852C0C9C4096611648C6A3170678B1537CC1828D93580C9E5849A9653175ACB753F2BE7437BE45F6C603E485F2EC301BB42B6C37C225D7495A584AE231890AB5C8C35C268CF4BBB0213C096019319561A8A6947637AA40D006B415BB2CFA2237E0890B6A3BC134ABF8F6585E108D15940F91F4BF5B0C818055B21DEA6E63B553988C47F4B94E7CF800A493B4734705EDC56A4B6021C629500675876804CF0B951F038A5C7FE58E89774EF2992FD7C63099D352A7D21560B788B405709861817E59A96B3A3A83CBA803B16934331071905BBEC6532900155D8AC88CB32E4E21A3BD3A03FDEC325A51CD2773964E6784FCF1853737AA64EB67564727272661ABF84313A57A44B123C65509CFB7A6F6641CDCC3B57FE628C7B8192DB44FFBF5796A8613B1FA126F6076883C783DC24E2A4464C40B3A41CA70AE87620866CF4FCB2BD204BF5C283812BA056AC0C345E379C4BA24D750901279BB2F3A16F612BFADB35703332C7C136F68EAB6755C66B6A4AD1AABA7B768A58ACAACC10A459A1CC8EF29377BC200E4D315A30A6BCC3256F9734D06E9779CAA5442A9A16069081377C76E75154368072DC446ED6C8B8E622A21E383CF9BA1FB434E2ECC81E7B78CEE986B8FF798AB18CF9634543546284EDA2A26B47F05B735BCDB1202220076DC8B4E4B9F853533C8F6C7FF38817BA49712835785F17F14CA01D0C1C1E98810FE0B36E5B427157B9418449CEDD641A4293C85C32700102ACEC22EBAD98ED160A5F027BD4CDA57F1F3720A12C134654DD5E73F829676495390D0E7929D6034E9C55F7D55BA658BC587988E8AF94960F6CFB8D5AF7A0021535A6E25E437D49A780698BE22AC9953949F571B85A685725F8207A2B0AE849B601AB91B159B3DF4A154C2041E776070AFC42969322380917C97510799F3149131477E16663D3174C7C1CAEA788535C6C005A64F2868631B31B66E205FD38C1D84542D0F1B578F58C9BF5A0FAEAB6AB6494893053165EAFD465FC64A0C5F8F3F9003489415899D59A543D8208C54A3166529B53922"
sk = "07638FB69868F3D320E5862BD96933FEB311B362093C9B5D50170BCED43F1B536D9A204BB1F22695950BA1F2A9E8EB828B284488760B3FC84FABA04275D5628E39C5B2471374283C503299C0AB49B66B8BBB56A4186624F919A2BA59BB08D8551880C2BEFC4F87F25F59AB587A79C327D792D54C974A69262FF8A78938289E9A87B688B083E0595FE218B6BB1505941CE2E81A5A64C5AAC60417256985349EE47A52420A5F97477B7236AC76BC70E8288729287EE3E34A3DBC3683C0B7B10029FC203418537E7466BA6385A8FF301EE12708F82AAA1E380FC7A88F8F205AB7E88D7E95952A55BA20D09B79A47141D62BF6EB7DD307B08ECA13A5BC5F6B68581C6865B27BBCDDAB142F4B2CBFF488C8A22705FAA98A2B9EEA3530C76662335CC7EA3A00777725EBCCCD2A4636B2D9122FF3AB77123CE0883C1911115E50C9E8A94194E48DD0D09CFFB3ADCD2C1E92430903D07ADBF00532031575AA7F9E7B5A1F3362DEC936D4043C05F2476C07578BC9CBAF2AB4E382727AD41686A96B2548820BB03B32F11B2811AD62F489E951632ABA0D1DF89680CC8A8B53B481D92A68D70B4EA1C3A6A561C0692882B5CA8CC942A8D495AFCB06DE89498FB935B775908FE7A03E324D54CC19D4E1AABD3593B38B19EE1388FE492B43127E5A504253786A0D69AD32601C28E2C88504A5BA599706023A61363E17C6B9BB59BDC697452CD059451983D738CA3FD034E3F5988854CA05031DB09611498988197C6B30D258DFE26265541C89A4B31D6864E9389B03CB74F7EC4323FB9421A4B9790A26D17B0398A26767350909F84D57B6694DF830664CA8B3C3C03ED2AE67B89006868A68527CCD666459AB7F056671000C6164D3A7F266A14D97CBD7004D6C92CACA770B844A4FA9B182E7B18CA885082AC5646FCB4A14E1685FEB0C9CE3372AB95365C04FD83084F80A23FF10A05BF15F7FA5ACC6C0CB462C33CA524FA6B8BB359043BA68609EAA2536E81D08463B19653B5435BA946C9ADDEB202B04B031CC960DCC12E4518D428B32B257A4FC7313D3A7980D80082E934F9D95C32B0A0191A23604384DD9E079BBBAA266D14C3F756B9F2133107433A4E83FA7187282A809203A4FAF841851833D121AC383843A5E55BC2381425E16C7DB4CC9AB5C1B0D91A47E2B8DE0E582C86B6B0D907BB360B97F40AB5D038F6B75C814B27D9B968D419832BC8C2BEE605EF6E5059D33100D90485D378450014221736C07407CAC260408AA64926619788B8601C2A752D1A6CBF820D7C7A04716203225B3895B9342D147A8185CFC1BB65BA06B4142339903C0AC4651385B45D98A8B19D28CD6BAB088787F7EE1B12461766B43CBCCB96434427D93C065550688F6948ED1B5475A425F1B85209D061C08B56C1CC069F6C0A7C6F29358CAB911087732A649D27C9B98F9A48879387D9B00C25959A71654D6F6A946164513E47A75D005986C2363C09F6B537ECA78B9303A5FA457608A586A653A347DB04DFCC19175B3A301172536062A658A95277570C8852CA8973F4AE123A334047DD711C8927A634A03388A527B034BF7A8170FA702C1F7C23EC32D18A2374890BE9C787A9409C82D192C4BB705A2F996CE405D85A4C1A1AB9B6AEB49CCE1C2F8A97C3516C72A00A46263BAA696BF25727719C3216423618FF33380934A6C10545C4C5C5155B12486181FC7A2319873978B6A2A67490F8256BD2196FE1792A4C00077B812EAE8BED3572499684AB3371876761E450C9F9D2768A36806D7AB2046C91F17599E9AC592990808DCD7B4D0919072F14EC361773B7252444C323C308326F4A30F8680D2F748F56A132B82674ED0184620B82AD2CB182C97B481626647491290A011CC73828685A8C367A5B9CF8D621B0D5C1EFF03172758BD004978C251CD51342228989CAE6332AC486437CB5C57D4307462865253BE217B3515C73DF405B7F28217AD0B8CF60C2FFFAA0A0048B1FB4ACDCDC38B5250CFEC356A6DE26CFA7A588FDC86F98C854AC64C7BFAA96F5A32CC0610934BAA6A586B9A2054F13BA274174AA0D2B3A81B96A940666F789B5A6BCDC0A6A0178A0C9A02578A493F6EEA0D2E6C13951C9F249A5E8DD71DD49A742D451F1ABBA19AF8C547855E0AFC728E90ABB499C9BEEB766F4729CDA22263E324D22302CBD3399FACC630991FC8F28BDB4354762541527678BCF61F65C241146C426D23B9BFAA6B7DF18C97F20C1B6125BF874B1D89475852C448215DB0EB7737F91480E8CEBD9A0871574F5AB62D9020175EC6927CA0B54C09818E42CF92A383172422C7DC1831D63B0C295DE75159DB8034E9E07F7B0B910C3C1E5FB66B3DC523F1FA6EB4910CB89A6C17562C83AB4C18D0CD7E0796592A372AA409B1C557347CCACDC4644A119064D06DD474929D1C6FB4D686E5491CE4BC89A30BB4B8C41BCE5157DFC1360823B1AB618C14B10F98C25067398EA7018C278A4B3DF31334D603B2044EF187CD9BC6CE42725BD962C264983E9E18155A8B9C47143D70460A26A56FE7658C1F150348C6087EF758AD167887860A007A5FC37358D43B5EBEE820ACEA474F0AC07B76802866199C61231D5C747C93774D2C1E0C1C67E6C81B82752173E125BAF39B4FD19A4F453DC57976B1D97FE6996992BBB65B7CB25D077BBAA6A13322899AF659CF1B3558C1B5001154B625809ED89AEEBB89E6EA7D67F723D045AB05715C42355DA6A5C8DD39C8ABE3037751A01ED1C7374919F3121B5A52C53D1487316769F80721DEEAAAD3C90F76E7AE9E12BA92B32B5FD457E3C752C2650DFB885771CB77AC3C785A8C562E6A1C63C2A55EA47CF8B90EB8225C123C346452566235B2F31823A33521E087937A345D8D663EEAA05658917BBAA008C2E335F8850A90A326D0E66432F44CEB8289E4ECB2D12958E984072ECACB88E1348FF0B55654ACBA5B54971CBAEBA88EC4B91A94C37192FA982BECB9F3DA421603B61A51BC8E36CBD053851C77B1B926B17A272AA9023246B02B3ED47F66A00BD5684823634E7CE58CF8F306E35B1E5322824D904801F0A2FA7C2BC9C252B0A56B7BA2AB0F636021745A70A9A43E2B0A8D615970B65309624B5184BCC30B911679AEDD76025FE3908FD67897B0CF4BE5A6F5413D7DD98564B23E42A93E4AA8821CD45054C643EDC1158DB6B3DEB13FB5A51EBD1A8A78B87225A7338E101104C4A220D9BDEDD48C85A1C2DAE781A80C40E13B87EAC73A764201C9B760CCFB1AE392699C7039D27C39362B27B8FC6F07A8A3D4410F1547C48A9997F62C61074452EF1515F8A649EBCA9437205A4E8A61606B41DAF6834D671F4D852C0C9C4096611648C6A3170678B1537CC1828D93580C9E5849A9653175ACB753F2BE7437BE45F6C603E485F2EC301BB42B6C37C225D7495A584AE231890AB5C8C35C268CF4BBB0213C096019319561A8A6947637AA40D006B415BB2CFA2237E0890B6A3BC134ABF8F6585E108D15940F91F4BF5B0C818055B21DEA6E63B553988C47F4B94E7CF800A493B4734705EDC56A4B6021C629500675876804CF0B951F038A5C7FE58E89774EF2992FD7C63099D352A7D21560B788B405709861817E59A96B3A3A83CBA803B16934331071905BBEC6532900155D8AC88CB32E4E21A3BD3A03FDEC325A51CD2773964E6784FCF1853737AA64EB67564727272661ABF84313A57A44B123C65509CFB7A6F6641CDCC3B57FE628C7B8192DB44FFBF5796A8613B1FA126F6076883C783DC24E2A4464C40B3A41CA70AE87620866CF4FCB2BD204BF5C283812BA056AC0C345E379C4BA24D750901279BB2F3A16F612BFADB35703332C7C136F68EAB6755C66B6A4AD1AABA7B768A58ACAACC10A459A1CC8EF29377BC200E4D315A30A6BCC3256F9734D06E9779CAA5442A9A16069081377C76E75154368072DC446ED6C8B8E622A21E383CF9BA1FB434E2ECC81E7B78CEE986B8FF798AB18CF9634543546284EDA2A26B47F05B735BCDB1202220076DC8B4E4B9F853533C8F6C7FF38817BA49712835785F17F14CA01D0C1C1E98810FE0B36E5B427157B9418449CEDD641A4293C85C32700102ACEC22EBAD98ED160A5F027BD4CDA57F1F3720A12C134654DD5E73F829676495390D0E7929D6034E9C55F7D55BA658BC587988E8AF94960F6CFB8D5AF7A0021535A6E25E437D49A780698BE22AC9953949F571B85A685725F8207A2B0AE849B601AB91B159B3DF4A154C2041E776070AFC42969322380917C97510799F3149131477E16663D3174C7C1CAEA788535C6C005A64F2868631B31B66E205FD38C1D84542D0F1B578F58C9BF5A0FAEAB6AB6494893053165EAFD465FC64A0C5F8F3F9003489415899D59A543D8208C54A3166529B539228A39E87D531F3527C207EDCC1DB7FADDCF9628391879B335C707839A0DB051A88626ED79D451140800E03B59B956F8210E556067407D13DC90FA9E8B872BFB8F"
ct = "A6AF29D5F5B80BD130F518BADDD6C8F17545413D860FB3DE451979EBFA5E4E3112C7C0ADF99824BB526F2C3550748ED0E134F0457A7C61F9F526F002BAADC03FC13E38131219513C3EDE061661E74F603C4FCF7951C8E52C9C213B0D22D9293663D669A6B58ED8FCEFCF8249D7BB5298F55761445B2B83CE7F005CB04248AEC8BDA22FD2D42AA766322014EA038CC32C55C8E4B9E28EC9119F527341E4F66A035121073B85DE6706DA19E0838A9F33B719A68F039B664DC002659EABFC398679AA7009CE0CD01CDAFB6CD2A26FE4101672C98FF58F7C47D5BDA2906653B3A6F9651F7A121EA77EA74723FAE5B873F9BB7B664F0C8A93831EF9D51C7CC1EF44AC0E55A55CA76D137FE9B75F40509CEF156E5AD18F9FB999680008E547D55EECD5B4D1CB1D9F076CEC21501C7402509ECB77AFB2CB9A61340A8BD1514C6E71B4AA45E47EC37512271B911F8FB46C9082C9DF07204ABB5A50E6E3647A8AD4D8D5D7BFF19C8A509308BCFB895536D045CA2B97CB16A29BB7181CAD0509DDB91735028EBA8C31D74BD275EAA65B5340B3A43FBFE0B3061D6BAE7E75B7098CDABE91D4B31E36C9AA7A8298862AD63C8FD282E03B460B3AB464CE0F27B1C3D11155ACAA011EB9E2AE3E6DDA07D6F491737CBCE9B05F9BC56BE20E8D326BA132C57FB235161144519CDF40560FBE279BDE411E112531F826D6AB10D4547350ADD2A9DE8D62C2AC82CABE6815646F4DC9742BB0C2A3F77EC7B46C6B537605FA31798CD89281221A33DFB9796E644305630332C2CB931408AB481A16D953F6BEAE3891D6D9AC1FAB38222D9271872D9D0CADB91ABE9B4E265F75C6E5E829E146C3D8CE1E9D12E0D129801957F46B0D2DBE1F749B1D08E2345F6239A731342EB75B0CF1BF411749BC2CAF2810B788C6B7238B4D3DA2D6315CE9542E24404F145755A30AB851E4445841BD33F716A586884888ECC6BC6498AA32919AE81D20C26973C2BD54582A0F6AD98ABFD2627E15690A727E69F581DD2A7127982A90E33E2D4A03FE339142C7E44C326AC46ED395A225D3033389917328B45316B1585A01B2C304B2944E903ABBB3EC5619441CFC8965A446DF75DEFA80C6E15ADBD506B7AB2DE12DDA9BC81441CFC89052E2E5808F7126C6FD3AC6AC8081258A84A09AE50F6CD7CC0F4AF336FD1D643E99079996268C2D32D909F22E3504F07FBB563196D4312FDDB9335D5C1D36E8C5EEA2278DBA23B94D193C947CC41CA993DC7DB1396340AD9C4FE687DD7B8D0C7A5120AE0204F2C665BD5F473D644C7FF26BFFBA7A36980830702128A7E661D677A092A36E7428A4139FB29B0095CC11086F447D2A9EF6C9B161F189C6299E084CB7AA00FAF787797BFB069FBC087FDE26252A1664F19C5A8A22EC5EE1AEB076357B7DC37E6B0F1520F958F7851BACB92C89FD114A72FEAC54652D45B09E1AE7651ABD164BCD537D58FA39D3EC8ACDCDF98425005862FA59692DE162B77E6297C66233348408A8AB695CE2F2728DB9FBE27E958967EC5974767C5A66023074B4A71AFD264AD2890E970A1F31D6E3311B736F9F9488793DDC88F23458064254C82A1D9E59EAD2FCEC40B430687C4B7E28960926AFCACC9BD756A71088C78450E20A2E980AEDE9EBEDFE7FABD6ABFE96F934C4B02C01CA194D01B73C25D5997039D3FCD0F099521F70CAEE69110AC1FC5A99917AD752FC96ADFAD7186D0A7C9CFE5601C07514EA6448D661C57AA20242103C4276A070A489A4CB6BCA0F9ECC4379FB220215FD91F81019D5B0AE619358B52468F272C178E3A74CF6775AA924FE329C3175D9E4C3E21AB9EC836EDC3ACAB2E3891EE8DEDA515D39AF9B8DDD0EE7B0164F805C3835F6D2BABDB30EAB4756E7EC7F829ECE01E8EADFBBED12FC283B3D4C69F575E7F80417689FDFCFC7BE27EE3B8CDF57AAEBEC4A95B7E5BB585B85227F7C32BE30DB3E65E42E30DCF5A5FA073DBA399D942F2222ADB9B9898102AFE5432EDC7F04AE34A8FEC2D81CB49A9A9B43814CE71D97F726E2B1E8F64B50E65DFB4816E12E82A3197484A4E9BBA4D2D69E3F19D0B75C21E2BFFE9FC0C98CF48A3AAF08D467F72687DF0178174B7897F734349B181ECA86A598A0C5E8C25946F24DC5572BD324A40458A788E5137F3C7A7C97FC9F12A3C463A8FE9449101CCE966D7C009323932998D56EF430C73BC24F5D95F737858DDC4F32C013"
ss = "B10F7394926AD3B49C5D62D5AEB531D5757538BCC0DA9E550D438F1B61BD7419"
pk = intlist(pk)
sk = intlist(sk)
ct = intlist(ct)
ss = intlist(ss)
ss2 = kem_decaps1024(sk, ct)
assert(ss == ss2)
# run decaps test vecs 512
with open("PQCkemKAT_1632.rsp") as file:
sk = None
ct = None
ss = None
for line in file:
l = line.rstrip()
if l.startswith("sk"):
sk = l.split("=")[1].lstrip()
sk = intlist(sk)
if l.startswith("ct"):
ct = l.split("=")[1].lstrip()
ct = intlist(ct)
if l.startswith("ss"):
ss = l.split("=")[1].lstrip()
ss = intlist(ss)
ss2 = kem_decaps512(sk, ct)
assert(ss == ss2)
# run decaps test vecs 768
with open("PQCkemKAT_2400.rsp") as file:
sk = None
ct = None
ss = None
for line in file:
l = line.rstrip()
if l.startswith("sk"):
sk = l.split("=")[1].lstrip()
sk = intlist(sk)
if l.startswith("ct"):
ct = l.split("=")[1].lstrip()
ct = intlist(ct)
if l.startswith("ss"):
ss = l.split("=")[1].lstrip()
ss = intlist(ss)
ss2 = kem_decaps768(sk, ct)
assert(ss == ss2)
# run decaps test vecs 1024
with open("PQCkemKAT_3168.rsp") as file:
sk = None
ct = None
ss = None
for line in file:
l = line.rstrip()
if l.startswith("sk"):
sk = l.split("=")[1].lstrip()
sk = intlist(sk)
if l.startswith("ct"):
ct = l.split("=")[1].lstrip()
ct = intlist(ct)
if l.startswith("ss"):
ss = l.split("=")[1].lstrip()
ss = intlist(ss)
ss2 = kem_decaps1024(sk, ct)
assert(ss == ss2)