blob: 02db438a728bbc1ead0b8b60e80a65c71a824678 [file] [log] [blame]
Gabor Mezei95ecaaf2023-01-16 16:53:29 +01001"""Framework classes for generation of ecp test cases."""
2# Copyright The Mbed TLS Contributors
3# SPDX-License-Identifier: Apache-2.0
4#
5# Licensed under the Apache License, Version 2.0 (the "License"); you may
6# not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17from typing import List
18
Gabor Mezei95ecaaf2023-01-16 16:53:29 +010019from . import test_data_generation
Gabor Mezeibd23f3b2023-01-25 18:09:49 +010020from . import bignum_common
Gabor Mezei95ecaaf2023-01-16 16:53:29 +010021
Gabor Mezeid034b3d2023-03-06 16:15:43 +010022
Gabor Mezei95ecaaf2023-01-16 16:53:29 +010023class EcpTarget(test_data_generation.BaseTarget):
24 #pylint: disable=abstract-method, too-few-public-methods
25 """Target for ecp test case generation."""
26 target_basename = 'test_suite_ecp.generated'
Gabor Mezeibd23f3b2023-01-25 18:09:49 +010027
Gabor Mezeid034b3d2023-03-06 16:15:43 +010028
Gabor Mezeibd23f3b2023-01-25 18:09:49 +010029class EcpP192R1Raw(bignum_common.ModOperationCommon,
30 EcpTarget):
Gabor Mezeid8c0e1a2023-03-28 15:34:49 +020031 """Test cases for ECP P192 fast reduction."""
Gabor Mezeibd23f3b2023-01-25 18:09:49 +010032 symbol = "-"
Minos Galanakis13586482023-03-21 12:08:37 +000033 test_function = "ecp_mod_p_generic_raw"
Gabor Mezeibd23f3b2023-01-25 18:09:49 +010034 test_name = "ecp_mod_p192_raw"
35 input_style = "fixed"
36 arity = 1
Minos Galanakis0a325b62023-04-06 16:33:10 +010037 dependencies = ["MBEDTLS_ECP_DP_SECP192R1_ENABLED"]
Gabor Mezeibd23f3b2023-01-25 18:09:49 +010038
Gabor Mezeib6875082023-01-31 14:35:17 +010039 moduli = ["fffffffffffffffffffffffffffffffeffffffffffffffff"] # type: List[str]
Gabor Mezeibd23f3b2023-01-25 18:09:49 +010040
41 input_values = [
42 "0", "1",
43
Gabor Mezei5c9f4012023-02-13 14:15:08 +010044 # Modulus - 1
45 "fffffffffffffffffffffffffffffffefffffffffffffffe",
46
Gabor Mezei62adc722023-03-28 15:04:48 +020047 # Modulus + 1
48 "ffffffffffffffffffffffffffffffff0000000000000000",
49
50 # 2^192 - 1
51 "ffffffffffffffffffffffffffffffffffffffffffffffff",
52
53 # Maximum canonical P192 multiplication result
54 ("fffffffffffffffffffffffffffffffdfffffffffffffffc"
55 "000000000000000100000000000000040000000000000004"),
56
57 # Generate an overflow during reduction
58 ("00000000000000000000000000000001ffffffffffffffff"
59 "ffffffffffffffffffffffffffffffff0000000000000000"),
60
61 # Generate an overflow during carry reduction
62 ("ffffffffffffffff00000000000000010000000000000000"
63 "fffffffffffffffeffffffffffffffff0000000000000000"),
64
Gabor Mezeibd23f3b2023-01-25 18:09:49 +010065 # First 8 number generated by random.getrandbits(384) - seed(2,2)
66 ("cf1822ffbc6887782b491044d5e341245c6e433715ba2bdd"
67 "177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
68 ("ffed9235288bc781ae66267594c9c9500925e4749b575bd1"
69 "3653f8dd9b1f282e4067c3584ee207f8da94e3e8ab73738f"),
70 ("ef8acd128b4f2fc15f3f57ebf30b94fa82523e86feac7eb7"
71 "dc38f519b91751dacdbd47d364be8049a372db8f6e405d93"),
72 ("e8624fab5186ee32ee8d7ee9770348a05d300cb90706a045"
73 "defc044a09325626e6b58de744ab6cce80877b6f71e1f6d2"),
74 ("2d3d854e061b90303b08c6e33c7295782d6c797f8f7d9b78"
75 "2a1be9cd8697bbd0e2520e33e44c50556c71c4a66148a86f"),
76 ("fec3f6b32e8d4b8a8f54f8ceacaab39e83844b40ffa9b9f1"
77 "5c14bc4a829e07b0829a48d422fe99a22c70501e533c9135"),
78 ("97eeab64ca2ce6bc5d3fd983c34c769fe89204e2e8168561"
79 "867e5e15bc01bfce6a27e0dfcbf8754472154e76e4c11ab2"),
80 ("bd143fa9b714210c665d7435c1066932f4767f26294365b2"
81 "721dea3bf63f23d0dbe53fcafb2147df5ca495fa5a91c89b"),
82
83 # Next 2 number generated by random.getrandbits(192)
84 "47733e847d718d733ff98ff387c56473a7a83ee0761ebfd2",
85 "cbd4d3e2d4dec9ef83f0be4e80371eb97f81375eecc1cb63"
86 ]
87
88 @property
89 def arg_a(self) -> str:
90 return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
91
92 def result(self) -> List[str]:
93 result = self.int_a % self.int_n
94 return [self.format_result(result)]
95
Gabor Mezeia2ef6a82023-03-06 16:57:25 +010096 @property
97 def is_valid(self) -> bool:
98 return True
99
Minos Galanakisaada68f2023-05-12 17:10:16 +0100100 def arguments(self)-> List[str]:
Minos Galanakis13586482023-03-21 12:08:37 +0000101 args = super().arguments()
102 return ["MBEDTLS_ECP_DP_SECP192R1"] + args
103
Gabor Mezeid034b3d2023-03-06 16:15:43 +0100104
Gabor Mezeif65a0592023-02-14 18:26:36 +0100105class EcpP224R1Raw(bignum_common.ModOperationCommon,
106 EcpTarget):
Gabor Mezeid8c0e1a2023-03-28 15:34:49 +0200107 """Test cases for ECP P224 fast reduction."""
Gabor Mezeif65a0592023-02-14 18:26:36 +0100108 symbol = "-"
Minos Galanakis13586482023-03-21 12:08:37 +0000109 test_function = "ecp_mod_p_generic_raw"
Gabor Mezeif65a0592023-02-14 18:26:36 +0100110 test_name = "ecp_mod_p224_raw"
111 input_style = "arch_split"
112 arity = 1
Minos Galanakis0a325b62023-04-06 16:33:10 +0100113 dependencies = ["MBEDTLS_ECP_DP_SECP224R1_ENABLED"]
Gabor Mezeif65a0592023-02-14 18:26:36 +0100114
115 moduli = ["ffffffffffffffffffffffffffffffff000000000000000000000001"] # type: List[str]
116
117 input_values = [
118 "0", "1",
119
Gabor Mezei98791e72023-02-27 15:59:34 +0100120 # Modulus - 1
121 "ffffffffffffffffffffffffffffffff000000000000000000000000",
122
Gabor Mezei64a229f2023-03-28 15:05:57 +0200123 # Modulus + 1
124 "ffffffffffffffffffffffffffffffff000000000000000000000002",
125
126 # 2^224 - 1
127 "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
128
Gabor Mezei98791e72023-02-27 15:59:34 +0100129 # Maximum canonical P224 multiplication result
Gabor Mezei61ef3602023-03-06 16:26:18 +0100130 ("fffffffffffffffffffffffffffffffe000000000000000000000000"
131 "00000001000000000000000000000000000000000000000000000000"),
Gabor Mezei98791e72023-02-27 15:59:34 +0100132
133 # Generate an overflow during reduction
134 ("00000000000000000000000000010000000070000000002000001000"
Gabor Mezei931fd642023-03-01 16:50:00 +0100135 "ffffffffffff9fffffffffe00000efff000070000000002000001003"),
Gabor Mezei98791e72023-02-27 15:59:34 +0100136
137 # Generate an underflow during reduction
138 ("00000001000000000000000000000000000000000000000000000000"
Gabor Mezei931fd642023-03-01 16:50:00 +0100139 "00000000000dc0000000000000000001000000010000000100000003"),
Gabor Mezei98791e72023-02-27 15:59:34 +0100140
Gabor Mezeif65a0592023-02-14 18:26:36 +0100141 # First 8 number generated by random.getrandbits(448) - seed(2,2)
142 ("da94e3e8ab73738fcf1822ffbc6887782b491044d5e341245c6e4337"
143 "15ba2bdd177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
144 ("cdbd47d364be8049a372db8f6e405d93ffed9235288bc781ae662675"
145 "94c9c9500925e4749b575bd13653f8dd9b1f282e4067c3584ee207f8"),
146 ("defc044a09325626e6b58de744ab6cce80877b6f71e1f6d2ef8acd12"
147 "8b4f2fc15f3f57ebf30b94fa82523e86feac7eb7dc38f519b91751da"),
148 ("2d6c797f8f7d9b782a1be9cd8697bbd0e2520e33e44c50556c71c4a6"
149 "6148a86fe8624fab5186ee32ee8d7ee9770348a05d300cb90706a045"),
150 ("8f54f8ceacaab39e83844b40ffa9b9f15c14bc4a829e07b0829a48d4"
151 "22fe99a22c70501e533c91352d3d854e061b90303b08c6e33c729578"),
152 ("97eeab64ca2ce6bc5d3fd983c34c769fe89204e2e8168561867e5e15"
153 "bc01bfce6a27e0dfcbf8754472154e76e4c11ab2fec3f6b32e8d4b8a"),
154 ("a7a83ee0761ebfd2bd143fa9b714210c665d7435c1066932f4767f26"
155 "294365b2721dea3bf63f23d0dbe53fcafb2147df5ca495fa5a91c89b"),
156 ("74667bffe202849da9643a295a9ac6decbd4d3e2d4dec9ef83f0be4e"
157 "80371eb97f81375eecc1cb6347733e847d718d733ff98ff387c56473"),
158
159 # Next 2 number generated by random.getrandbits(224)
160 "eb9ac688b9d39cca91551e8259cc60b17604e4b4e73695c3e652c71a",
161 "f0caeef038c89b38a8acb5137c9260dc74e088a9b9492f258ebdbfe3"
162 ]
163
164 @property
165 def arg_a(self) -> str:
166 hex_digits = bignum_common.hex_digits_for_limb(448 // self.bits_in_limb, self.bits_in_limb)
167 return super().format_arg('{:x}'.format(self.int_a)).zfill(hex_digits)
168
169 def result(self) -> List[str]:
170 result = self.int_a % self.int_n
171 return [self.format_result(result)]
172
Gabor Mezeia2ef6a82023-03-06 16:57:25 +0100173 @property
174 def is_valid(self) -> bool:
175 return True
176
Minos Galanakisaada68f2023-05-12 17:10:16 +0100177 def arguments(self)-> List[str]:
Minos Galanakis13586482023-03-21 12:08:37 +0000178 args = super().arguments()
179 return ["MBEDTLS_ECP_DP_SECP224R1"] + args
180
Minos Galanakis37f4cb62023-03-09 11:15:15 +0000181
Gabor Mezeic33a36b2023-03-28 15:32:47 +0200182class EcpP256R1Raw(bignum_common.ModOperationCommon,
183 EcpTarget):
184 """Test cases for ECP P256 fast reduction."""
185 symbol = "-"
Minos Galanakis13586482023-03-21 12:08:37 +0000186 test_function = "ecp_mod_p_generic_raw"
Gabor Mezeic33a36b2023-03-28 15:32:47 +0200187 test_name = "ecp_mod_p256_raw"
188 input_style = "fixed"
189 arity = 1
Minos Galanakis0a325b62023-04-06 16:33:10 +0100190 dependencies = ["MBEDTLS_ECP_DP_SECP256R1_ENABLED"]
Gabor Mezeic33a36b2023-03-28 15:32:47 +0200191
192 moduli = ["ffffffff00000001000000000000000000000000ffffffffffffffffffffffff"] # type: List[str]
193
194 input_values = [
195 "0", "1",
196
197 # Modulus - 1
198 "ffffffff00000001000000000000000000000000fffffffffffffffffffffffe",
199
200 # Modulus + 1
201 "ffffffff00000001000000000000000000000001000000000000000000000000",
202
203 # 2^256 - 1
204 "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
205
206 # Maximum canonical P256 multiplication result
207 ("fffffffe00000002fffffffe0000000100000001fffffffe00000001fffffffc"
208 "00000003fffffffcfffffffffffffffffffffffc000000000000000000000004"),
209
210 # Generate an overflow during reduction
211 ("0000000000000000000000010000000000000000000000000000000000000000"
212 "00000000000000000000000000000000000000000000000000000000ffffffff"),
213
214 # Generate an underflow during reduction
215 ("0000000000000000000000000000000000000000000000000000000000000010"
216 "ffffffff00000000000000000000000000000000000000000000000000000000"),
217
218 # Generate an overflow during carry reduction
219 ("aaaaaaaa00000000000000000000000000000000000000000000000000000000"
220 "00000000000000000000000000000000aaaaaaacaaaaaaaaaaaaaaaa00000000"),
221
222 # Generate an underflow during carry reduction
223 ("000000000000000000000001ffffffff00000000000000000000000000000000"
224 "0000000000000000000000000000000000000002000000020000000100000002"),
225
226 # First 8 number generated by random.getrandbits(512) - seed(2,2)
227 ("4067c3584ee207f8da94e3e8ab73738fcf1822ffbc6887782b491044d5e34124"
228 "5c6e433715ba2bdd177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
229 ("82523e86feac7eb7dc38f519b91751dacdbd47d364be8049a372db8f6e405d93"
230 "ffed9235288bc781ae66267594c9c9500925e4749b575bd13653f8dd9b1f282e"),
231 ("e8624fab5186ee32ee8d7ee9770348a05d300cb90706a045defc044a09325626"
232 "e6b58de744ab6cce80877b6f71e1f6d2ef8acd128b4f2fc15f3f57ebf30b94fa"),
233 ("829a48d422fe99a22c70501e533c91352d3d854e061b90303b08c6e33c729578"
234 "2d6c797f8f7d9b782a1be9cd8697bbd0e2520e33e44c50556c71c4a66148a86f"),
235 ("e89204e2e8168561867e5e15bc01bfce6a27e0dfcbf8754472154e76e4c11ab2"
236 "fec3f6b32e8d4b8a8f54f8ceacaab39e83844b40ffa9b9f15c14bc4a829e07b0"),
237 ("bd143fa9b714210c665d7435c1066932f4767f26294365b2721dea3bf63f23d0"
238 "dbe53fcafb2147df5ca495fa5a91c89b97eeab64ca2ce6bc5d3fd983c34c769f"),
239 ("74667bffe202849da9643a295a9ac6decbd4d3e2d4dec9ef83f0be4e80371eb9"
240 "7f81375eecc1cb6347733e847d718d733ff98ff387c56473a7a83ee0761ebfd2"),
241 ("d08f1bb2531d6460f0caeef038c89b38a8acb5137c9260dc74e088a9b9492f25"
242 "8ebdbfe3eb9ac688b9d39cca91551e8259cc60b17604e4b4e73695c3e652c71a"),
243
244 # Next 2 number generated by random.getrandbits(256)
245 "c5e2486c44a4a8f69dc8db48e86ec9c6e06f291b2a838af8d5c44a4eb3172062",
246 "d4c0dca8b4c9e755cc9c3adcf515a8234da4daeb4f3f87777ad1f45ae9500ec9"
247 ]
248
249 @property
250 def arg_a(self) -> str:
251 return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
252
253 def result(self) -> List[str]:
254 result = self.int_a % self.int_n
255 return [self.format_result(result)]
256
257 @property
258 def is_valid(self) -> bool:
259 return True
260
Minos Galanakisaada68f2023-05-12 17:10:16 +0100261 def arguments(self)-> List[str]:
Minos Galanakis13586482023-03-21 12:08:37 +0000262 args = super().arguments()
263 return ["MBEDTLS_ECP_DP_SECP256R1"] + args
264
Gabor Mezeic33a36b2023-03-28 15:32:47 +0200265
Minos Galanakis37f4cb62023-03-09 11:15:15 +0000266class EcpP384R1Raw(bignum_common.ModOperationCommon,
267 EcpTarget):
Gabor Mezeid8c0e1a2023-03-28 15:34:49 +0200268 """Test cases for ECP P384 fast reduction."""
Minos Galanakis13586482023-03-21 12:08:37 +0000269 test_function = "ecp_mod_p_generic_raw"
Minos Galanakisf359c912023-03-06 11:39:54 +0000270 test_name = "ecp_mod_p384_raw"
Minos Galanakis37f4cb62023-03-09 11:15:15 +0000271 input_style = "fixed"
Minos Galanakisf359c912023-03-06 11:39:54 +0000272 arity = 1
Minos Galanakis0a325b62023-04-06 16:33:10 +0100273 dependencies = ["MBEDTLS_ECP_DP_SECP384R1_ENABLED"]
Minos Galanakisf359c912023-03-06 11:39:54 +0000274
Gabor Mezeifede2762023-03-28 15:29:40 +0200275 moduli = [("ffffffffffffffffffffffffffffffffffffffffffffffff"
276 "fffffffffffffffeffffffff0000000000000000ffffffff")
Minos Galanakisf359c912023-03-06 11:39:54 +0000277 ] # type: List[str]
278
279 input_values = [
280 "0", "1",
281
282 # Modulus - 1
Gabor Mezeifede2762023-03-28 15:29:40 +0200283 ("ffffffffffffffffffffffffffffffffffffffffffffffff"
284 "fffffffffffffffeffffffff0000000000000000fffffffe"),
Minos Galanakisf359c912023-03-06 11:39:54 +0000285
Gabor Mezei54ad6472023-03-28 15:30:32 +0200286 # Modulus + 1
287 ("ffffffffffffffffffffffffffffffffffffffffffffffff"
288 "fffffffffffffffeffffffff000000000000000100000000"),
289
290 # 2^384 - 1
291 ("ffffffffffffffffffffffffffffffffffffffffffffffff"
292 "ffffffffffffffffffffffffffffffffffffffffffffffff"),
293
Minos Galanakisf359c912023-03-06 11:39:54 +0000294 # Maximum canonical P384 multiplication result
Gabor Mezeifede2762023-03-28 15:29:40 +0200295 ("ffffffffffffffffffffffffffffffffffffffffffffffff"
296 "fffffffffffffffdfffffffe0000000000000001fffffffc"
297 "000000000000000000000000000000010000000200000000"
298 "fffffffe000000020000000400000000fffffffc00000004"),
Minos Galanakisf359c912023-03-06 11:39:54 +0000299
300 # Testing with overflow in A(12) + A(21) + A(20);
Gabor Mezeifede2762023-03-28 15:29:40 +0200301 ("497811378624857a2c2af60d70583376545484cfae5c812f"
302 "e2999fc1abb51d18b559e8ca3b50aaf263fdf8f24bdfb98f"
303 "ffffffff20e65bf9099e4e73a5e8b517cf4fbeb8fd1750fd"
304 "ae6d43f2e53f82d5ffffffffffffffffcc6f1e06111c62e0"),
Minos Galanakisf359c912023-03-06 11:39:54 +0000305
306 # Testing with underflow in A(13) + A(22) + A(23) - A(12) - A(20);
Gabor Mezeifede2762023-03-28 15:29:40 +0200307 ("dfdd25e96777406b3c04b8c7b406f5fcf287e1e576003a09"
308 "2852a6fbe517f2712b68abef41dbd35183a0614fb7222606"
309 "ffffffff84396eee542f18a9189d94396c784059c17a9f18"
310 "f807214ef32f2f10ffffffff8a77fac20000000000000000"),
Minos Galanakisf359c912023-03-06 11:39:54 +0000311
Minos Galanakis37f4cb62023-03-09 11:15:15 +0000312 # Testing with overflow in A(23) + A(20) + A(19) - A(22);
Gabor Mezeifede2762023-03-28 15:29:40 +0200313 ("783753f8a5afba6c1862eead1deb2fcdd907272be3ffd185"
314 "42b24a71ee8b26cab0aa33513610ff973042bbe1637cc9fc"
315 "99ad36c7f703514572cf4f5c3044469a8f5be6312c19e5d3"
316 "f8fc1ac6ffffffffffffffff8c86252400000000ffffffff"),
Minos Galanakis37f4cb62023-03-09 11:15:15 +0000317
318 # Testing with underflow in A(23) + A(20) + A(19) - A(22);
Gabor Mezeifede2762023-03-28 15:29:40 +0200319 ("65e1d2362fce922663b7fd517586e88842a9b4bd092e93e6"
320 "251c9c69f278cbf8285d99ae3b53da5ba36e56701e2b17c2"
321 "25f1239556c5f00117fa140218b46ebd8e34f50d0018701f"
322 "a8a0a5cc00000000000000004410bcb4ffffffff00000000"),
Minos Galanakis37f4cb62023-03-09 11:15:15 +0000323
Minos Galanakis4af90bb2023-03-20 12:20:46 +0000324 # Testing the second round of carry reduction
Gabor Mezeifede2762023-03-28 15:29:40 +0200325 ("000000000000000000000000ffffffffffffffffffffffff"
326 "ffffffffffffffffffffffffffffffff0000000000000000"
327 "0000000000000000ffffffff000000000000000000000001"
328 "00000000000000000000000000000000ffffffff00000001"),
Minos Galanakis4af90bb2023-03-20 12:20:46 +0000329
Minos Galanakisf359c912023-03-06 11:39:54 +0000330 # First 8 number generated by random.getrandbits(768) - seed(2,2)
Gabor Mezeifede2762023-03-28 15:29:40 +0200331 ("ffed9235288bc781ae66267594c9c9500925e4749b575bd1"
332 "3653f8dd9b1f282e4067c3584ee207f8da94e3e8ab73738f"
333 "cf1822ffbc6887782b491044d5e341245c6e433715ba2bdd"
334 "177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
335 ("e8624fab5186ee32ee8d7ee9770348a05d300cb90706a045"
336 "defc044a09325626e6b58de744ab6cce80877b6f71e1f6d2"
337 "ef8acd128b4f2fc15f3f57ebf30b94fa82523e86feac7eb7"
338 "dc38f519b91751dacdbd47d364be8049a372db8f6e405d93"),
339 ("fec3f6b32e8d4b8a8f54f8ceacaab39e83844b40ffa9b9f1"
340 "5c14bc4a829e07b0829a48d422fe99a22c70501e533c9135"
341 "2d3d854e061b90303b08c6e33c7295782d6c797f8f7d9b78"
342 "2a1be9cd8697bbd0e2520e33e44c50556c71c4a66148a86f"),
343 ("bd143fa9b714210c665d7435c1066932f4767f26294365b2"
344 "721dea3bf63f23d0dbe53fcafb2147df5ca495fa5a91c89b"
345 "97eeab64ca2ce6bc5d3fd983c34c769fe89204e2e8168561"
346 "867e5e15bc01bfce6a27e0dfcbf8754472154e76e4c11ab2"),
347 ("8ebdbfe3eb9ac688b9d39cca91551e8259cc60b17604e4b4"
348 "e73695c3e652c71a74667bffe202849da9643a295a9ac6de"
349 "cbd4d3e2d4dec9ef83f0be4e80371eb97f81375eecc1cb63"
350 "47733e847d718d733ff98ff387c56473a7a83ee0761ebfd2"),
351 ("d4c0dca8b4c9e755cc9c3adcf515a8234da4daeb4f3f8777"
352 "7ad1f45ae9500ec9c5e2486c44a4a8f69dc8db48e86ec9c6"
353 "e06f291b2a838af8d5c44a4eb3172062d08f1bb2531d6460"
354 "f0caeef038c89b38a8acb5137c9260dc74e088a9b9492f25"),
355 ("0227eeb7b9d7d01f5769da05d205bbfcc8c69069134bccd3"
356 "e1cf4f589f8e4ce0af29d115ef24bd625dd961e6830b54fa"
357 "7d28f93435339774bb1e386c4fd5079e681b8f5896838b76"
358 "9da59b74a6c3181c81e220df848b1df78feb994a81167346"),
359 ("d322a7353ead4efe440e2b4fda9c025a22f1a83185b98f5f"
360 "c11e60de1b343f52ea748db9e020307aaeb6db2c3a038a70"
361 "9779ac1f45e9dd320c855fdfa7251af0930cdbd30f0ad2a8"
362 "1b2d19a2beaa14a7ff3fe32a30ffc4eed0a7bd04e85bfcdd"),
Minos Galanakisf359c912023-03-06 11:39:54 +0000363
364 # Next 2 number generated by random.getrandbits(384)
Gabor Mezeifede2762023-03-28 15:29:40 +0200365 ("5c3747465cc36c270e8a35b10828d569c268a20eb78ac332"
366 "e5e138e26c4454b90f756132e16dce72f18e859835e1f291"),
367 ("eb2b5693babb7fbb0a76c196067cfdcb11457d9cf45e2fa0"
368 "1d7f4275153924800600571fac3a5b263fdf57cd2c006497")
Minos Galanakisf359c912023-03-06 11:39:54 +0000369 ]
370
371 @property
372 def arg_a(self) -> str:
Minos Galanakis37f4cb62023-03-09 11:15:15 +0000373 return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
Minos Galanakisf359c912023-03-06 11:39:54 +0000374
375 def result(self) -> List[str]:
376 result = self.int_a % self.int_n
377 return [self.format_result(result)]
378
379 @property
380 def is_valid(self) -> bool:
381 return True
Gabor Mezeid034b3d2023-03-06 16:15:43 +0100382
Minos Galanakisaada68f2023-05-12 17:10:16 +0100383 def arguments(self)-> List[str]:
Minos Galanakis13586482023-03-21 12:08:37 +0000384 args = super().arguments()
385 return ["MBEDTLS_ECP_DP_SECP384R1"] + args
386
387
Gabor Mezeid8f67b92023-02-06 15:49:42 +0100388class EcpP521R1Raw(bignum_common.ModOperationCommon,
389 EcpTarget):
Gabor Mezeid8c0e1a2023-03-28 15:34:49 +0200390 """Test cases for ECP P521 fast reduction."""
Minos Galanakis13586482023-03-21 12:08:37 +0000391 test_function = "ecp_mod_p_generic_raw"
Gabor Mezeid8f67b92023-02-06 15:49:42 +0100392 test_name = "ecp_mod_p521_raw"
Gabor Mezei2c8e1442023-02-16 10:25:08 +0100393 input_style = "arch_split"
Gabor Mezeid8f67b92023-02-06 15:49:42 +0100394 arity = 1
Minos Galanakis0a325b62023-04-06 16:33:10 +0100395 dependencies = ["MBEDTLS_ECP_DP_SECP521R1_ENABLED"]
Gabor Mezeid8f67b92023-02-06 15:49:42 +0100396
397 moduli = [("01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
398 "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
399 ] # type: List[str]
400
401 input_values = [
402 "0", "1",
403
Gabor Mezeia9a68722023-03-28 15:06:51 +0200404 # Modulus - 1
405 ("01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
406 "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"),
407
408 # Modulus + 1
409 ("020000000000000000000000000000000000000000000000000000000000000000"
410 "000000000000000000000000000000000000000000000000000000000000000000"),
411
412 # Maximum canonical P521 multiplication result
Janos Follath755ff0e2023-02-07 15:27:44 +0000413 ("0003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
414 "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
415 "fffff800"
416 "0000000000000000000000000000000000000000000000000000000000000000"
417 "0000000000000000000000000000000000000000000000000000000000000004"),
418
Gabor Mezeid8f67b92023-02-06 15:49:42 +0100419 # Test case for overflow during addition
420 ("0001efffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
421 "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
422 "000001ef"
423 "0000000000000000000000000000000000000000000000000000000000000000"
424 "000000000000000000000000000000000000000000000000000000000f000000"),
425
426 # First 8 number generated by random.getrandbits(1042) - seed(2,2)
427 ("0003cc2e82523e86feac7eb7dc38f519b91751dacdbd47d364be8049a372db8f"
428 "6e405d93ffed9235288bc781ae66267594c9c9500925e4749b575bd13653f8dd"
429 "9b1f282e"
430 "4067c3584ee207f8da94e3e8ab73738fcf1822ffbc6887782b491044d5e34124"
431 "5c6e433715ba2bdd177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
432 ("00017052829e07b0829a48d422fe99a22c70501e533c91352d3d854e061b9030"
433 "3b08c6e33c7295782d6c797f8f7d9b782a1be9cd8697bbd0e2520e33e44c5055"
434 "6c71c4a6"
435 "6148a86fe8624fab5186ee32ee8d7ee9770348a05d300cb90706a045defc044a"
436 "09325626e6b58de744ab6cce80877b6f71e1f6d2ef8acd128b4f2fc15f3f57eb"),
437 ("00021f15a7a83ee0761ebfd2bd143fa9b714210c665d7435c1066932f4767f26"
438 "294365b2721dea3bf63f23d0dbe53fcafb2147df5ca495fa5a91c89b97eeab64"
439 "ca2ce6bc"
440 "5d3fd983c34c769fe89204e2e8168561867e5e15bc01bfce6a27e0dfcbf87544"
441 "72154e76e4c11ab2fec3f6b32e8d4b8a8f54f8ceacaab39e83844b40ffa9b9f1"),
442 ("000381bc2a838af8d5c44a4eb3172062d08f1bb2531d6460f0caeef038c89b38"
443 "a8acb5137c9260dc74e088a9b9492f258ebdbfe3eb9ac688b9d39cca91551e82"
444 "59cc60b1"
445 "7604e4b4e73695c3e652c71a74667bffe202849da9643a295a9ac6decbd4d3e2"
446 "d4dec9ef83f0be4e80371eb97f81375eecc1cb6347733e847d718d733ff98ff3"),
447 ("00034816c8c69069134bccd3e1cf4f589f8e4ce0af29d115ef24bd625dd961e6"
448 "830b54fa7d28f93435339774bb1e386c4fd5079e681b8f5896838b769da59b74"
449 "a6c3181c"
450 "81e220df848b1df78feb994a81167346d4c0dca8b4c9e755cc9c3adcf515a823"
451 "4da4daeb4f3f87777ad1f45ae9500ec9c5e2486c44a4a8f69dc8db48e86ec9c6"),
452 ("000397846c4454b90f756132e16dce72f18e859835e1f291d322a7353ead4efe"
453 "440e2b4fda9c025a22f1a83185b98f5fc11e60de1b343f52ea748db9e020307a"
454 "aeb6db2c"
455 "3a038a709779ac1f45e9dd320c855fdfa7251af0930cdbd30f0ad2a81b2d19a2"
456 "beaa14a7ff3fe32a30ffc4eed0a7bd04e85bfcdd0227eeb7b9d7d01f5769da05"),
457 ("00002c3296e6bc4d62b47204007ee4fab105d83e85e951862f0981aebc1b00d9"
458 "2838e766ef9b6bf2d037fe2e20b6a8464174e75a5f834da70569c018eb2b5693"
459 "babb7fbb"
460 "0a76c196067cfdcb11457d9cf45e2fa01d7f4275153924800600571fac3a5b26"
461 "3fdf57cd2c0064975c3747465cc36c270e8a35b10828d569c268a20eb78ac332"),
462 ("00009d23b4917fc09f20dbb0dcc93f0e66dfe717c17313394391b6e2e6eacb0f"
463 "0bb7be72bd6d25009aeb7fa0c4169b148d2f527e72daf0a54ef25c0707e33868"
464 "7d1f7157"
465 "5653a45c49390aa51cf5192bbf67da14be11d56ba0b4a2969d8055a9f03f2d71"
466 "581d8e830112ff0f0948eccaf8877acf26c377c13f719726fd70bddacb4deeec"),
467
468 # Next 2 number generated by random.getrandbits(521)
469 ("12b84ae65e920a63ac1f2b64df6dff07870c9d531ae72a47403063238da1a1fe"
470 "3f9d6a179fa50f96cd4aff9261aa92c0e6f17ec940639bc2ccdf572df00790813e3"),
471 ("166049dd332a73fa0b26b75196cf87eb8a09b27ec714307c68c425424a1574f1"
472 "eedf5b0f16cdfdb839424d201e653f53d6883ca1c107ca6e706649889c0c7f38608")
473 ]
474
475 @property
476 def arg_a(self) -> str:
Gabor Mezeicf228702023-02-15 16:52:33 +0100477 # Number of limbs: 2 * N
478 return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
Gabor Mezeid8f67b92023-02-06 15:49:42 +0100479
480 def result(self) -> List[str]:
481 result = self.int_a % self.int_n
482 return [self.format_result(result)]
Gabor Mezeia2ef6a82023-03-06 16:57:25 +0100483
484 @property
485 def is_valid(self) -> bool:
486 return True
Minos Galanakis13586482023-03-21 12:08:37 +0000487
Minos Galanakisaada68f2023-05-12 17:10:16 +0100488 def arguments(self)-> List[str]:
Minos Galanakis13586482023-03-21 12:08:37 +0000489 args = super().arguments()
490 return ["MBEDTLS_ECP_DP_SECP521R1"] + args
Gabor Mezeib86ead32023-04-11 15:43:12 +0200491
492
493class EcpP192K1Raw(bignum_common.ModOperationCommon,
494 EcpTarget):
495 """Test cases for ECP P192K1 fast reduction."""
496 symbol = "-"
Gabor Mezeidacfe562023-05-02 14:05:13 +0200497 test_function = "ecp_mod_p_generic_raw"
498 test_name = "ecp_mod_p192k1_raw"
Gabor Mezeib86ead32023-04-11 15:43:12 +0200499 input_style = "fixed"
500 arity = 1
Gabor Mezeicec50602023-04-17 14:56:03 +0200501 dependencies = ["MBEDTLS_ECP_DP_SECP192K1_ENABLED"]
Gabor Mezeib86ead32023-04-11 15:43:12 +0200502
503 moduli = ["fffffffffffffffffffffffffffffffffffffffeffffee37"] # type: List[str]
504
505 input_values = [
506 "0", "1",
507
508 # Modulus - 1
509 "fffffffffffffffffffffffffffffffffffffffeffffee36",
510
511 # Modulus + 1
512 "fffffffffffffffffffffffffffffffffffffffeffffee38",
513
514 # 2^192 - 1
515 "ffffffffffffffffffffffffffffffffffffffffffffffff",
516
517 # Maximum canonical P192K1 multiplication result
518 ("fffffffffffffffffffffffffffffffffffffffdffffdc6c"
519 "0000000000000000000000000000000100002394013c7364"),
520
Gabor Mezei23b10102023-05-08 17:28:21 +0200521 # Test case for overflow during addition
522 ("00000007ffff71b809e27dd832cfd5e04d9d2dbb9f8da217"
523 "0000000000000000000000000000000000000000520834f0"),
524
Gabor Mezeib86ead32023-04-11 15:43:12 +0200525 # First 8 number generated by random.getrandbits(384) - seed(2,2)
526 ("cf1822ffbc6887782b491044d5e341245c6e433715ba2bdd"
527 "177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
528 ("ffed9235288bc781ae66267594c9c9500925e4749b575bd1"
529 "3653f8dd9b1f282e4067c3584ee207f8da94e3e8ab73738f"),
530 ("ef8acd128b4f2fc15f3f57ebf30b94fa82523e86feac7eb7"
531 "dc38f519b91751dacdbd47d364be8049a372db8f6e405d93"),
532 ("e8624fab5186ee32ee8d7ee9770348a05d300cb90706a045"
533 "defc044a09325626e6b58de744ab6cce80877b6f71e1f6d2"),
534 ("2d3d854e061b90303b08c6e33c7295782d6c797f8f7d9b78"
535 "2a1be9cd8697bbd0e2520e33e44c50556c71c4a66148a86f"),
536 ("fec3f6b32e8d4b8a8f54f8ceacaab39e83844b40ffa9b9f1"
537 "5c14bc4a829e07b0829a48d422fe99a22c70501e533c9135"),
538 ("97eeab64ca2ce6bc5d3fd983c34c769fe89204e2e8168561"
539 "867e5e15bc01bfce6a27e0dfcbf8754472154e76e4c11ab2"),
540 ("bd143fa9b714210c665d7435c1066932f4767f26294365b2"
541 "721dea3bf63f23d0dbe53fcafb2147df5ca495fa5a91c89b"),
542
543 # Next 2 number generated by random.getrandbits(192)
544 "47733e847d718d733ff98ff387c56473a7a83ee0761ebfd2",
545 "cbd4d3e2d4dec9ef83f0be4e80371eb97f81375eecc1cb63"
546 ]
547
548 @property
549 def arg_a(self) -> str:
550 return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
551
552 def result(self) -> List[str]:
553 result = self.int_a % self.int_n
554 return [self.format_result(result)]
555
556 @property
557 def is_valid(self) -> bool:
558 return True
Minos Galanakise5dab972023-04-11 16:42:06 +0100559
Gabor Mezeidacfe562023-05-02 14:05:13 +0200560 def arguments(self):
561 args = super().arguments()
562 return ["MBEDTLS_ECP_DP_SECP192K1"] + args
563
Minos Galanakise5dab972023-04-11 16:42:06 +0100564
565class EcpP224K1Raw(bignum_common.ModOperationCommon,
566 EcpTarget):
567 """Test cases for ECP P224 fast reduction."""
568 symbol = "-"
Gabor Mezeie42bb622023-05-02 14:10:57 +0200569 test_function = "ecp_mod_p_generic_raw"
570 test_name = "ecp_mod_p224k1_raw"
Minos Galanakise5dab972023-04-11 16:42:06 +0100571 input_style = "fixed"
572 arity = 1
573 dependencies = ["MBEDTLS_ECP_DP_SECP224K1_ENABLED"]
574
575 moduli = ["fffffffffffffffffffffffffffffffffffffffffffffffeffffe56d"] # type: List[str]
576
577 input_values = [
578 "0", "1",
579
580 # Modulus - 1
581 "fffffffffffffffffffffffffffffffffffffffffffffffeffffe56c",
582
583 # Modulus + 1
584 "fffffffffffffffffffffffffffffffffffffffffffffffeffffe56e",
585
586 # 2^224 - 1
587 "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
588
Gabor Mezeie42bb622023-05-02 14:10:57 +0200589 # Maximum canonical P224K1 multiplication result
Minos Galanakise5dab972023-04-11 16:42:06 +0100590 ("fffffffffffffffffffffffffffffffffffffffffffffffdffffcad8"
591 "00000000000000000000000000000000000000010000352802c26590"),
592
Gabor Mezei23b10102023-05-08 17:28:21 +0200593 # Test case for overflow during addition
594 ("0000007ffff2b68161180fd8cd92e1a109be158a19a99b1809db8032"
595 "0000000000000000000000000000000000000000000000000bf04f49"),
596
Minos Galanakise5dab972023-04-11 16:42:06 +0100597 # First 8 number generated by random.getrandbits(448) - seed(2,2)
598 ("da94e3e8ab73738fcf1822ffbc6887782b491044d5e341245c6e4337"
599 "15ba2bdd177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
600 ("cdbd47d364be8049a372db8f6e405d93ffed9235288bc781ae662675"
601 "94c9c9500925e4749b575bd13653f8dd9b1f282e4067c3584ee207f8"),
602 ("defc044a09325626e6b58de744ab6cce80877b6f71e1f6d2ef8acd12"
603 "8b4f2fc15f3f57ebf30b94fa82523e86feac7eb7dc38f519b91751da"),
604 ("2d6c797f8f7d9b782a1be9cd8697bbd0e2520e33e44c50556c71c4a6"
605 "6148a86fe8624fab5186ee32ee8d7ee9770348a05d300cb90706a045"),
606 ("8f54f8ceacaab39e83844b40ffa9b9f15c14bc4a829e07b0829a48d4"
607 "22fe99a22c70501e533c91352d3d854e061b90303b08c6e33c729578"),
608 ("97eeab64ca2ce6bc5d3fd983c34c769fe89204e2e8168561867e5e15"
609 "bc01bfce6a27e0dfcbf8754472154e76e4c11ab2fec3f6b32e8d4b8a"),
610 ("a7a83ee0761ebfd2bd143fa9b714210c665d7435c1066932f4767f26"
611 "294365b2721dea3bf63f23d0dbe53fcafb2147df5ca495fa5a91c89b"),
612 ("74667bffe202849da9643a295a9ac6decbd4d3e2d4dec9ef83f0be4e"
613 "80371eb97f81375eecc1cb6347733e847d718d733ff98ff387c56473"),
614
615 # Next 2 number generated by random.getrandbits(224)
616 ("eb9ac688b9d39cca91551e8259cc60b17604e4b4e73695c3e652c71a"),
617 ("f0caeef038c89b38a8acb5137c9260dc74e088a9b9492f258ebdbfe3"),
618 ]
619
620 @property
621 def arg_a(self) -> str:
622 hex_digits = bignum_common.hex_digits_for_limb(448 // self.bits_in_limb, self.bits_in_limb)
623 return super().format_arg('{:x}'.format(self.int_a)).zfill(hex_digits)
624
625 def result(self) -> List[str]:
626 result = self.int_a % self.int_n
627 return [self.format_result(result)]
628
629 @property
630 def is_valid(self) -> bool:
631 return True
Minos Galanakisd6751dc2023-04-11 17:25:31 +0100632
Gabor Mezeie42bb622023-05-02 14:10:57 +0200633 def arguments(self):
634 args = super().arguments()
635 return ["MBEDTLS_ECP_DP_SECP224K1"] + args
636
Minos Galanakisd6751dc2023-04-11 17:25:31 +0100637
638class EcpP256K1Raw(bignum_common.ModOperationCommon,
639 EcpTarget):
640 """Test cases for ECP P256 fast reduction."""
641 symbol = "-"
Gabor Mezei03558b82023-05-02 14:12:25 +0200642 test_function = "ecp_mod_p_generic_raw"
643 test_name = "ecp_mod_p256k1_raw"
Minos Galanakisd6751dc2023-04-11 17:25:31 +0100644 input_style = "fixed"
645 arity = 1
646 dependencies = ["MBEDTLS_ECP_DP_SECP256K1_ENABLED"]
647
648 moduli = ["fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"] # type: List[str]
649
650 input_values = [
651 "0", "1",
652
653 # Modulus - 1
654 "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e",
655
656 # Modulus + 1
657 "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30",
658
659 # 2^256 - 1
660 "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
661
Gabor Mezei03558b82023-05-02 14:12:25 +0200662 # Maximum canonical P256K1 multiplication result
663 ("fffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff85c"
664 "000000000000000000000000000000000000000000000001000007a4000e9844"),
665
666 # Test case for overflow during addition
667 ("0000fffffc2f000e90a0c86a0a63234e5ba641f43a7e4aecc4040e67ec850562"
668 "00000000000000000000000000000000000000000000000000000000585674fd"),
Minos Galanakisd6751dc2023-04-11 17:25:31 +0100669
Gabor Mezei23b10102023-05-08 17:28:21 +0200670 # Test case for overflow during addition
671 ("0000fffffc2f000e90a0c86a0a63234e5ba641f43a7e4aecc4040e67ec850562"
672 "00000000000000000000000000000000000000000000000000000000585674fd"),
673
Minos Galanakisd6751dc2023-04-11 17:25:31 +0100674 # First 8 number generated by random.getrandbits(512) - seed(2,2)
675 ("4067c3584ee207f8da94e3e8ab73738fcf1822ffbc6887782b491044d5e34124"
676 "5c6e433715ba2bdd177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
677 ("82523e86feac7eb7dc38f519b91751dacdbd47d364be8049a372db8f6e405d93"
678 "ffed9235288bc781ae66267594c9c9500925e4749b575bd13653f8dd9b1f282e"),
679 ("e8624fab5186ee32ee8d7ee9770348a05d300cb90706a045defc044a09325626"
680 "e6b58de744ab6cce80877b6f71e1f6d2ef8acd128b4f2fc15f3f57ebf30b94fa"),
681 ("829a48d422fe99a22c70501e533c91352d3d854e061b90303b08c6e33c729578"
682 "2d6c797f8f7d9b782a1be9cd8697bbd0e2520e33e44c50556c71c4a66148a86f"),
683 ("e89204e2e8168561867e5e15bc01bfce6a27e0dfcbf8754472154e76e4c11ab2"
684 "fec3f6b32e8d4b8a8f54f8ceacaab39e83844b40ffa9b9f15c14bc4a829e07b0"),
685 ("bd143fa9b714210c665d7435c1066932f4767f26294365b2721dea3bf63f23d0"
686 "dbe53fcafb2147df5ca495fa5a91c89b97eeab64ca2ce6bc5d3fd983c34c769f"),
687 ("74667bffe202849da9643a295a9ac6decbd4d3e2d4dec9ef83f0be4e80371eb9"
688 "7f81375eecc1cb6347733e847d718d733ff98ff387c56473a7a83ee0761ebfd2"),
689 ("d08f1bb2531d6460f0caeef038c89b38a8acb5137c9260dc74e088a9b9492f25"
690 "8ebdbfe3eb9ac688b9d39cca91551e8259cc60b17604e4b4e73695c3e652c71a"),
691
692 # Next 2 number generated by random.getrandbits(256)
693 ("c5e2486c44a4a8f69dc8db48e86ec9c6e06f291b2a838af8d5c44a4eb3172062"),
694 ("d4c0dca8b4c9e755cc9c3adcf515a8234da4daeb4f3f87777ad1f45ae9500ec9"),
695 ]
696
697 @property
698 def arg_a(self) -> str:
Gabor Mezei9bf1aaf2023-05-05 16:32:28 +0200699 return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
Minos Galanakisd6751dc2023-04-11 17:25:31 +0100700
701 def result(self) -> List[str]:
702 result = self.int_a % self.int_n
703 return [self.format_result(result)]
704
705 @property
706 def is_valid(self) -> bool:
707 return True
Paul Elliott16648be2023-04-23 23:19:21 +0100708
Gabor Mezei03558b82023-05-02 14:12:25 +0200709 def arguments(self):
710 args = super().arguments()
711 return ["MBEDTLS_ECP_DP_SECP256K1"] + args
712
Paul Elliott16648be2023-04-23 23:19:21 +0100713
Minos Galanakisc2c967b2023-05-11 09:59:05 +0100714class EcpP255Raw(bignum_common.ModOperationCommon,
715 EcpTarget):
716 """Test cases for ECP 25519 fast reduction."""
717 symbol = "-"
718 test_function = "ecp_mod_p_generic_raw"
719 test_name = "mbedtls_ecp_mod_p255_raw"
720 input_style = "fixed"
721 arity = 1
722 dependencies = ["MBEDTLS_ECP_DP_CURVE25519_ENABLED"]
723
Minos Galanakisaada68f2023-05-12 17:10:16 +0100724 moduli = [("7fffffffffffffffffffffffffffffffffffffffffffffffff"
725 "ffffffffffffed")] # type: List[str]
Minos Galanakisc2c967b2023-05-11 09:59:05 +0100726
727 input_values = [
728 "0", "1",
729
730 # Modulus - 1
Minos Galanakis2daa3742023-05-17 15:01:08 +0100731 ("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),
Minos Galanakisc2c967b2023-05-11 09:59:05 +0100732
733 # Modulus + 1
Minos Galanakis2daa3742023-05-17 15:01:08 +0100734 ("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee"),
Minos Galanakisc2c967b2023-05-11 09:59:05 +0100735
736 # 2^255 - 1
Minos Galanakis2daa3742023-05-17 15:01:08 +0100737 ("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),
Minos Galanakisc2c967b2023-05-11 09:59:05 +0100738
739 # Maximum canonical P255 multiplication result
Minos Galanakis2daa3742023-05-17 15:01:08 +0100740 ("3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"
741 "0000000000000000000000000000000000000000000000000000000000000190"),
Minos Galanakisc2c967b2023-05-11 09:59:05 +0100742
743 # First 8 number generated by random.getrandbits(510) - seed(2,2)
Minos Galanakis2daa3742023-05-17 15:01:08 +0100744 ("1019f0d64ee207f8da94e3e8ab73738fcf1822ffbc6887782b491044d5e34124"
745 "5c6e433715ba2bdd177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
746 ("20948fa1feac7eb7dc38f519b91751dacdbd47d364be8049a372db8f6e405d93"
747 "ffed9235288bc781ae66267594c9c9500925e4749b575bd13653f8dd9b1f282e"),
748 ("3a1893ea5186ee32ee8d7ee9770348a05d300cb90706a045defc044a09325626"
749 "e6b58de744ab6cce80877b6f71e1f6d2ef8acd128b4f2fc15f3f57ebf30b94fa"),
750 ("20a6923522fe99a22c70501e533c91352d3d854e061b90303b08c6e33c729578"
751 "2d6c797f8f7d9b782a1be9cd8697bbd0e2520e33e44c50556c71c4a66148a86f"),
752 ("3a248138e8168561867e5e15bc01bfce6a27e0dfcbf8754472154e76e4c11ab2"
753 "fec3f6b32e8d4b8a8f54f8ceacaab39e83844b40ffa9b9f15c14bc4a829e07b0"),
754 ("2f450feab714210c665d7435c1066932f4767f26294365b2721dea3bf63f23d0"
755 "dbe53fcafb2147df5ca495fa5a91c89b97eeab64ca2ce6bc5d3fd983c34c769f"),
756 ("1d199effe202849da9643a295a9ac6decbd4d3e2d4dec9ef83f0be4e80371eb9"
757 "7f81375eecc1cb6347733e847d718d733ff98ff387c56473a7a83ee0761ebfd2"),
758 ("3423c6ec531d6460f0caeef038c89b38a8acb5137c9260dc74e088a9b9492f25"
759 "8ebdbfe3eb9ac688b9d39cca91551e8259cc60b17604e4b4e73695c3e652c71a"),
Minos Galanakisc2c967b2023-05-11 09:59:05 +0100760
761 # Next 2 number generated by random.getrandbits(255)
Minos Galanakis2daa3742023-05-17 15:01:08 +0100762 ("62f1243644a4a8f69dc8db48e86ec9c6e06f291b2a838af8d5c44a4eb3172062"),
763 ("6a606e54b4c9e755cc9c3adcf515a8234da4daeb4f3f87777ad1f45ae9500ec9"),
Minos Galanakisc2c967b2023-05-11 09:59:05 +0100764 ]
765
766 @property
767 def arg_a(self) -> str:
768 return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
769
770 def result(self) -> List[str]:
771 result = self.int_a % self.int_n
772 return [self.format_result(result)]
773
774 @property
775 def is_valid(self) -> bool:
776 return True
777
Minos Galanakisaada68f2023-05-12 17:10:16 +0100778 def arguments(self)-> List[str]:
Minos Galanakisc2c967b2023-05-11 09:59:05 +0100779 args = super().arguments()
780 return ["MBEDTLS_ECP_DP_CURVE25519"] + args
781
782
Paul Elliott16648be2023-04-23 23:19:21 +0100783class EcpP448Raw(bignum_common.ModOperationCommon,
784 EcpTarget):
785 """Test cases for ECP P448 fast reduction."""
786 symbol = "-"
787 test_function = "ecp_mod_p448"
788 test_name = "ecp_mod_p448"
789 input_style = "fixed"
790 arity = 1
791 dependencies = ["MBEDTLS_ECP_DP_CURVE448_ENABLED"]
792
793 moduli = [("fffffffffffffffffffffffffffffffffffffffffffffffffffffffe"
794 "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff")] # type: List[str]
795
796 input_values = [
797 "0", "1",
798
799 # Modulus - 1
800 ("fffffffffffffffffffffffffffffffffffffffffffffffffffffffe"
801 "fffffffffffffffffffffffffffffffffffffffffffffffffffffffe"),
802
803 # Modulus + 1
804 ("ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
805 "00000000000000000000000000000000000000000000000000000000"),
806
807 # 2^448 - 1
808 ("ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
809 "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),
810
811 # Maximum canonical P448 multiplication result
812 ("fffffffffffffffffffffffffffffffffffffffffffffffffffffffd"
Paul Elliottb7fd1d62023-05-03 14:13:42 +0100813 "fffffffffffffffffffffffffffffffffffffffffffffffffffffffd"
814 "00000000000000000000000000000000000000000000000000000004"
815 "00000000000000000000000000000000000000000000000000000004"),
Paul Elliott16648be2023-04-23 23:19:21 +0100816
817 # First 8 number generated by random.getrandbits(896) - seed(2,2)
818 ("74667bffe202849da9643a295a9ac6decbd4d3e2d4dec9ef83f0be4e"
819 "80371eb97f81375eecc1cb6347733e847d718d733ff98ff387c56473"
820 "a7a83ee0761ebfd2bd143fa9b714210c665d7435c1066932f4767f26"
821 "294365b2721dea3bf63f23d0dbe53fcafb2147df5ca495fa5a91c89b"),
822 ("4da4daeb4f3f87777ad1f45ae9500ec9c5e2486c44a4a8f69dc8db48"
823 "e86ec9c6e06f291b2a838af8d5c44a4eb3172062d08f1bb2531d6460"
824 "f0caeef038c89b38a8acb5137c9260dc74e088a9b9492f258ebdbfe3"
825 "eb9ac688b9d39cca91551e8259cc60b17604e4b4e73695c3e652c71a"),
826 ("bc1b00d92838e766ef9b6bf2d037fe2e20b6a8464174e75a5f834da7"
827 "0569c018eb2b5693babb7fbb0a76c196067cfdcb11457d9cf45e2fa0"
828 "1d7f4275153924800600571fac3a5b263fdf57cd2c0064975c374746"
829 "5cc36c270e8a35b10828d569c268a20eb78ac332e5e138e26c4454b9"),
830 ("8d2f527e72daf0a54ef25c0707e338687d1f71575653a45c49390aa5"
831 "1cf5192bbf67da14be11d56ba0b4a2969d8055a9f03f2d71581d8e83"
832 "0112ff0f0948eccaf8877acf26c377c13f719726fd70bddacb4deeec"
833 "0b0c995e96e6bc4d62b47204007ee4fab105d83e85e951862f0981ae"),
834 ("84ae65e920a63ac1f2b64df6dff07870c9d531ae72a47403063238da"
835 "1a1fe3f9d6a179fa50f96cd4aff9261aa92c0e6f17ec940639bc2ccd"
836 "f572df00790813e32748dd1db4917fc09f20dbb0dcc93f0e66dfe717"
837 "c17313394391b6e2e6eacb0f0bb7be72bd6d25009aeb7fa0c4169b14"),
838 ("2bb3b36f29421c4021b7379f0897246a40c270b00e893302aba9e7b8"
839 "23fc5ad2f58105748ed5d1b7b310b730049dd332a73fa0b26b75196c"
840 "f87eb8a09b27ec714307c68c425424a1574f1eedf5b0f16cdfdb8394"
841 "24d201e653f53d6883ca1c107ca6e706649889c0c7f3860895bfa813"),
842 ("af3f5d7841b1256d5c1dc12fb5a1ae519fb8883accda6559caa538a0"
843 "9fc9370d3a6b86a7975b54a31497024640332b0612d4050771d7b14e"
844 "b6c004cc3b8367dc3f2bb31efe9934ad0809eae3ef232a32b5459d83"
845 "fbc46f1aea990e94821d46063b4dbf2ca294523d74115c86188b1044"),
846 ("7430051376e31f5aab63ad02854efa600641b4fa37a47ce41aeffafc"
847 "3b45402ac02659fe2e87d4150511baeb198ababb1a16daff3da95cd2"
848 "167b75dfb948f82a8317cba01c75f67e290535d868a24b7f627f2855"
849 "09167d4126af8090013c3273c02c6b9586b4625b475b51096c4ad652"),
850
851 # Next 2 number generated by random.getrandbits(448)
852 ("8f54f8ceacaab39e83844b40ffa9b9f15c14bc4a829e07b0829a48d4"
853 "22fe99a22c70501e533c91352d3d854e061b90303b08c6e33c729578"),
854 ("97eeab64ca2ce6bc5d3fd983c34c769fe89204e2e8168561867e5e15"
855 "bc01bfce6a27e0dfcbf8754472154e76e4c11ab2fec3f6b32e8d4b8a"),
856
857 ]
858
859 @property
860 def arg_a(self) -> str:
Paul Elliottb8bd47d2023-05-03 14:14:55 +0100861 return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
Paul Elliott16648be2023-04-23 23:19:21 +0100862
863 def result(self) -> List[str]:
864 result = self.int_a % self.int_n
865 return [self.format_result(result)]
866
867 @property
868 def is_valid(self) -> bool:
869 return True