1a8e1175bSopenharmony_ci"""Framework classes for generation of ecp test cases."""
2a8e1175bSopenharmony_ci# Copyright The Mbed TLS Contributors
3a8e1175bSopenharmony_ci# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
4a8e1175bSopenharmony_ci#
5a8e1175bSopenharmony_ci
6a8e1175bSopenharmony_cifrom typing import List
7a8e1175bSopenharmony_ci
8a8e1175bSopenharmony_cifrom . import test_data_generation
9a8e1175bSopenharmony_cifrom . import bignum_common
10a8e1175bSopenharmony_ci
11a8e1175bSopenharmony_ci
12a8e1175bSopenharmony_ciclass EcpTarget(test_data_generation.BaseTarget):
13a8e1175bSopenharmony_ci    #pylint: disable=abstract-method, too-few-public-methods
14a8e1175bSopenharmony_ci    """Target for ecp test case generation."""
15a8e1175bSopenharmony_ci    target_basename = 'test_suite_ecp.generated'
16a8e1175bSopenharmony_ci
17a8e1175bSopenharmony_ci
18a8e1175bSopenharmony_ciclass EcpP192R1Raw(bignum_common.ModOperationCommon,
19a8e1175bSopenharmony_ci                   EcpTarget):
20a8e1175bSopenharmony_ci    """Test cases for ECP P192 fast reduction."""
21a8e1175bSopenharmony_ci    symbol = "-"
22a8e1175bSopenharmony_ci    test_function = "ecp_mod_p_generic_raw"
23a8e1175bSopenharmony_ci    test_name = "ecp_mod_p192_raw"
24a8e1175bSopenharmony_ci    input_style = "fixed"
25a8e1175bSopenharmony_ci    arity = 1
26a8e1175bSopenharmony_ci    dependencies = ["MBEDTLS_ECP_DP_SECP192R1_ENABLED",
27a8e1175bSopenharmony_ci                    "MBEDTLS_ECP_NIST_OPTIM"]
28a8e1175bSopenharmony_ci
29a8e1175bSopenharmony_ci    moduli = ["fffffffffffffffffffffffffffffffeffffffffffffffff"] # type: List[str]
30a8e1175bSopenharmony_ci
31a8e1175bSopenharmony_ci    input_values = [
32a8e1175bSopenharmony_ci        "0", "1",
33a8e1175bSopenharmony_ci
34a8e1175bSopenharmony_ci        # Modulus - 1
35a8e1175bSopenharmony_ci        "fffffffffffffffffffffffffffffffefffffffffffffffe",
36a8e1175bSopenharmony_ci
37a8e1175bSopenharmony_ci        # Modulus + 1
38a8e1175bSopenharmony_ci        "ffffffffffffffffffffffffffffffff0000000000000000",
39a8e1175bSopenharmony_ci
40a8e1175bSopenharmony_ci        # 2^192 - 1
41a8e1175bSopenharmony_ci        "ffffffffffffffffffffffffffffffffffffffffffffffff",
42a8e1175bSopenharmony_ci
43a8e1175bSopenharmony_ci        # Maximum canonical P192 multiplication result
44a8e1175bSopenharmony_ci        ("fffffffffffffffffffffffffffffffdfffffffffffffffc"
45a8e1175bSopenharmony_ci         "000000000000000100000000000000040000000000000004"),
46a8e1175bSopenharmony_ci
47a8e1175bSopenharmony_ci        # Generate an overflow during reduction
48a8e1175bSopenharmony_ci        ("00000000000000000000000000000001ffffffffffffffff"
49a8e1175bSopenharmony_ci         "ffffffffffffffffffffffffffffffff0000000000000000"),
50a8e1175bSopenharmony_ci
51a8e1175bSopenharmony_ci        # Generate an overflow during carry reduction
52a8e1175bSopenharmony_ci        ("ffffffffffffffff00000000000000010000000000000000"
53a8e1175bSopenharmony_ci         "fffffffffffffffeffffffffffffffff0000000000000000"),
54a8e1175bSopenharmony_ci
55a8e1175bSopenharmony_ci        # First 8 number generated by random.getrandbits(384) - seed(2,2)
56a8e1175bSopenharmony_ci        ("cf1822ffbc6887782b491044d5e341245c6e433715ba2bdd"
57a8e1175bSopenharmony_ci         "177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
58a8e1175bSopenharmony_ci        ("ffed9235288bc781ae66267594c9c9500925e4749b575bd1"
59a8e1175bSopenharmony_ci         "3653f8dd9b1f282e4067c3584ee207f8da94e3e8ab73738f"),
60a8e1175bSopenharmony_ci        ("ef8acd128b4f2fc15f3f57ebf30b94fa82523e86feac7eb7"
61a8e1175bSopenharmony_ci         "dc38f519b91751dacdbd47d364be8049a372db8f6e405d93"),
62a8e1175bSopenharmony_ci        ("e8624fab5186ee32ee8d7ee9770348a05d300cb90706a045"
63a8e1175bSopenharmony_ci         "defc044a09325626e6b58de744ab6cce80877b6f71e1f6d2"),
64a8e1175bSopenharmony_ci        ("2d3d854e061b90303b08c6e33c7295782d6c797f8f7d9b78"
65a8e1175bSopenharmony_ci         "2a1be9cd8697bbd0e2520e33e44c50556c71c4a66148a86f"),
66a8e1175bSopenharmony_ci        ("fec3f6b32e8d4b8a8f54f8ceacaab39e83844b40ffa9b9f1"
67a8e1175bSopenharmony_ci         "5c14bc4a829e07b0829a48d422fe99a22c70501e533c9135"),
68a8e1175bSopenharmony_ci        ("97eeab64ca2ce6bc5d3fd983c34c769fe89204e2e8168561"
69a8e1175bSopenharmony_ci         "867e5e15bc01bfce6a27e0dfcbf8754472154e76e4c11ab2"),
70a8e1175bSopenharmony_ci        ("bd143fa9b714210c665d7435c1066932f4767f26294365b2"
71a8e1175bSopenharmony_ci         "721dea3bf63f23d0dbe53fcafb2147df5ca495fa5a91c89b"),
72a8e1175bSopenharmony_ci
73a8e1175bSopenharmony_ci        # Next 2 number generated by random.getrandbits(192)
74a8e1175bSopenharmony_ci        "47733e847d718d733ff98ff387c56473a7a83ee0761ebfd2",
75a8e1175bSopenharmony_ci        "cbd4d3e2d4dec9ef83f0be4e80371eb97f81375eecc1cb63"
76a8e1175bSopenharmony_ci    ]
77a8e1175bSopenharmony_ci
78a8e1175bSopenharmony_ci    @property
79a8e1175bSopenharmony_ci    def arg_a(self) -> str:
80a8e1175bSopenharmony_ci        return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
81a8e1175bSopenharmony_ci
82a8e1175bSopenharmony_ci    def result(self) -> List[str]:
83a8e1175bSopenharmony_ci        result = self.int_a % self.int_n
84a8e1175bSopenharmony_ci        return [self.format_result(result)]
85a8e1175bSopenharmony_ci
86a8e1175bSopenharmony_ci    @property
87a8e1175bSopenharmony_ci    def is_valid(self) -> bool:
88a8e1175bSopenharmony_ci        return True
89a8e1175bSopenharmony_ci
90a8e1175bSopenharmony_ci    def arguments(self)-> List[str]:
91a8e1175bSopenharmony_ci        args = super().arguments()
92a8e1175bSopenharmony_ci        return  ["MBEDTLS_ECP_DP_SECP192R1"] + args
93a8e1175bSopenharmony_ci
94a8e1175bSopenharmony_ci
95a8e1175bSopenharmony_ciclass EcpP224R1Raw(bignum_common.ModOperationCommon,
96a8e1175bSopenharmony_ci                   EcpTarget):
97a8e1175bSopenharmony_ci    """Test cases for ECP P224 fast reduction."""
98a8e1175bSopenharmony_ci    symbol = "-"
99a8e1175bSopenharmony_ci    test_function = "ecp_mod_p_generic_raw"
100a8e1175bSopenharmony_ci    test_name = "ecp_mod_p224_raw"
101a8e1175bSopenharmony_ci    input_style = "arch_split"
102a8e1175bSopenharmony_ci    arity = 1
103a8e1175bSopenharmony_ci    dependencies = ["MBEDTLS_ECP_DP_SECP224R1_ENABLED",
104a8e1175bSopenharmony_ci                    "MBEDTLS_ECP_NIST_OPTIM"]
105a8e1175bSopenharmony_ci
106a8e1175bSopenharmony_ci    moduli = ["ffffffffffffffffffffffffffffffff000000000000000000000001"] # type: List[str]
107a8e1175bSopenharmony_ci
108a8e1175bSopenharmony_ci    input_values = [
109a8e1175bSopenharmony_ci        "0", "1",
110a8e1175bSopenharmony_ci
111a8e1175bSopenharmony_ci        # Modulus - 1
112a8e1175bSopenharmony_ci        "ffffffffffffffffffffffffffffffff000000000000000000000000",
113a8e1175bSopenharmony_ci
114a8e1175bSopenharmony_ci        # Modulus + 1
115a8e1175bSopenharmony_ci        "ffffffffffffffffffffffffffffffff000000000000000000000002",
116a8e1175bSopenharmony_ci
117a8e1175bSopenharmony_ci        # 2^224 - 1
118a8e1175bSopenharmony_ci        "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
119a8e1175bSopenharmony_ci
120a8e1175bSopenharmony_ci        # Maximum canonical P224 multiplication result
121a8e1175bSopenharmony_ci        ("fffffffffffffffffffffffffffffffe000000000000000000000000"
122a8e1175bSopenharmony_ci         "00000001000000000000000000000000000000000000000000000000"),
123a8e1175bSopenharmony_ci
124a8e1175bSopenharmony_ci        # Generate an overflow during reduction
125a8e1175bSopenharmony_ci        ("00000000000000000000000000010000000070000000002000001000"
126a8e1175bSopenharmony_ci         "ffffffffffff9fffffffffe00000efff000070000000002000001003"),
127a8e1175bSopenharmony_ci
128a8e1175bSopenharmony_ci        # Generate an underflow during reduction
129a8e1175bSopenharmony_ci        ("00000001000000000000000000000000000000000000000000000000"
130a8e1175bSopenharmony_ci         "00000000000dc0000000000000000001000000010000000100000003"),
131a8e1175bSopenharmony_ci
132a8e1175bSopenharmony_ci        # First 8 number generated by random.getrandbits(448) - seed(2,2)
133a8e1175bSopenharmony_ci        ("da94e3e8ab73738fcf1822ffbc6887782b491044d5e341245c6e4337"
134a8e1175bSopenharmony_ci         "15ba2bdd177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
135a8e1175bSopenharmony_ci        ("cdbd47d364be8049a372db8f6e405d93ffed9235288bc781ae662675"
136a8e1175bSopenharmony_ci         "94c9c9500925e4749b575bd13653f8dd9b1f282e4067c3584ee207f8"),
137a8e1175bSopenharmony_ci        ("defc044a09325626e6b58de744ab6cce80877b6f71e1f6d2ef8acd12"
138a8e1175bSopenharmony_ci         "8b4f2fc15f3f57ebf30b94fa82523e86feac7eb7dc38f519b91751da"),
139a8e1175bSopenharmony_ci        ("2d6c797f8f7d9b782a1be9cd8697bbd0e2520e33e44c50556c71c4a6"
140a8e1175bSopenharmony_ci         "6148a86fe8624fab5186ee32ee8d7ee9770348a05d300cb90706a045"),
141a8e1175bSopenharmony_ci        ("8f54f8ceacaab39e83844b40ffa9b9f15c14bc4a829e07b0829a48d4"
142a8e1175bSopenharmony_ci         "22fe99a22c70501e533c91352d3d854e061b90303b08c6e33c729578"),
143a8e1175bSopenharmony_ci        ("97eeab64ca2ce6bc5d3fd983c34c769fe89204e2e8168561867e5e15"
144a8e1175bSopenharmony_ci         "bc01bfce6a27e0dfcbf8754472154e76e4c11ab2fec3f6b32e8d4b8a"),
145a8e1175bSopenharmony_ci        ("a7a83ee0761ebfd2bd143fa9b714210c665d7435c1066932f4767f26"
146a8e1175bSopenharmony_ci         "294365b2721dea3bf63f23d0dbe53fcafb2147df5ca495fa5a91c89b"),
147a8e1175bSopenharmony_ci        ("74667bffe202849da9643a295a9ac6decbd4d3e2d4dec9ef83f0be4e"
148a8e1175bSopenharmony_ci         "80371eb97f81375eecc1cb6347733e847d718d733ff98ff387c56473"),
149a8e1175bSopenharmony_ci
150a8e1175bSopenharmony_ci        # Next 2 number generated by random.getrandbits(224)
151a8e1175bSopenharmony_ci        "eb9ac688b9d39cca91551e8259cc60b17604e4b4e73695c3e652c71a",
152a8e1175bSopenharmony_ci        "f0caeef038c89b38a8acb5137c9260dc74e088a9b9492f258ebdbfe3"
153a8e1175bSopenharmony_ci    ]
154a8e1175bSopenharmony_ci
155a8e1175bSopenharmony_ci    @property
156a8e1175bSopenharmony_ci    def arg_a(self) -> str:
157a8e1175bSopenharmony_ci        limbs = 2 * bignum_common.bits_to_limbs(224, self.bits_in_limb)
158a8e1175bSopenharmony_ci        hex_digits = bignum_common.hex_digits_for_limb(limbs, self.bits_in_limb)
159a8e1175bSopenharmony_ci        return super().format_arg('{:x}'.format(self.int_a)).zfill(hex_digits)
160a8e1175bSopenharmony_ci
161a8e1175bSopenharmony_ci    def result(self) -> List[str]:
162a8e1175bSopenharmony_ci        result = self.int_a % self.int_n
163a8e1175bSopenharmony_ci        return [self.format_result(result)]
164a8e1175bSopenharmony_ci
165a8e1175bSopenharmony_ci    @property
166a8e1175bSopenharmony_ci    def is_valid(self) -> bool:
167a8e1175bSopenharmony_ci        return True
168a8e1175bSopenharmony_ci
169a8e1175bSopenharmony_ci    def arguments(self)-> List[str]:
170a8e1175bSopenharmony_ci        args = super().arguments()
171a8e1175bSopenharmony_ci        return  ["MBEDTLS_ECP_DP_SECP224R1"] + args
172a8e1175bSopenharmony_ci
173a8e1175bSopenharmony_ci
174a8e1175bSopenharmony_ciclass EcpP256R1Raw(bignum_common.ModOperationCommon,
175a8e1175bSopenharmony_ci                   EcpTarget):
176a8e1175bSopenharmony_ci    """Test cases for ECP P256 fast reduction."""
177a8e1175bSopenharmony_ci    symbol = "-"
178a8e1175bSopenharmony_ci    test_function = "ecp_mod_p_generic_raw"
179a8e1175bSopenharmony_ci    test_name = "ecp_mod_p256_raw"
180a8e1175bSopenharmony_ci    input_style = "fixed"
181a8e1175bSopenharmony_ci    arity = 1
182a8e1175bSopenharmony_ci    dependencies = ["MBEDTLS_ECP_DP_SECP256R1_ENABLED",
183a8e1175bSopenharmony_ci                    "MBEDTLS_ECP_NIST_OPTIM"]
184a8e1175bSopenharmony_ci
185a8e1175bSopenharmony_ci    moduli = ["ffffffff00000001000000000000000000000000ffffffffffffffffffffffff"] # type: List[str]
186a8e1175bSopenharmony_ci
187a8e1175bSopenharmony_ci    input_values = [
188a8e1175bSopenharmony_ci        "0", "1",
189a8e1175bSopenharmony_ci
190a8e1175bSopenharmony_ci        # Modulus - 1
191a8e1175bSopenharmony_ci        "ffffffff00000001000000000000000000000000fffffffffffffffffffffffe",
192a8e1175bSopenharmony_ci
193a8e1175bSopenharmony_ci        # Modulus + 1
194a8e1175bSopenharmony_ci        "ffffffff00000001000000000000000000000001000000000000000000000000",
195a8e1175bSopenharmony_ci
196a8e1175bSopenharmony_ci        # 2^256 - 1
197a8e1175bSopenharmony_ci        "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
198a8e1175bSopenharmony_ci
199a8e1175bSopenharmony_ci        # Maximum canonical P256 multiplication result
200a8e1175bSopenharmony_ci        ("fffffffe00000002fffffffe0000000100000001fffffffe00000001fffffffc"
201a8e1175bSopenharmony_ci         "00000003fffffffcfffffffffffffffffffffffc000000000000000000000004"),
202a8e1175bSopenharmony_ci
203a8e1175bSopenharmony_ci        # Generate an overflow during reduction
204a8e1175bSopenharmony_ci        ("0000000000000000000000010000000000000000000000000000000000000000"
205a8e1175bSopenharmony_ci         "00000000000000000000000000000000000000000000000000000000ffffffff"),
206a8e1175bSopenharmony_ci
207a8e1175bSopenharmony_ci        # Generate an underflow during reduction
208a8e1175bSopenharmony_ci        ("0000000000000000000000000000000000000000000000000000000000000010"
209a8e1175bSopenharmony_ci         "ffffffff00000000000000000000000000000000000000000000000000000000"),
210a8e1175bSopenharmony_ci
211a8e1175bSopenharmony_ci        # Generate an overflow during carry reduction
212a8e1175bSopenharmony_ci        ("aaaaaaaa00000000000000000000000000000000000000000000000000000000"
213a8e1175bSopenharmony_ci         "00000000000000000000000000000000aaaaaaacaaaaaaaaaaaaaaaa00000000"),
214a8e1175bSopenharmony_ci
215a8e1175bSopenharmony_ci        # Generate an underflow during carry reduction
216a8e1175bSopenharmony_ci        ("000000000000000000000001ffffffff00000000000000000000000000000000"
217a8e1175bSopenharmony_ci         "0000000000000000000000000000000000000002000000020000000100000002"),
218a8e1175bSopenharmony_ci
219a8e1175bSopenharmony_ci        # First 8 number generated by random.getrandbits(512) - seed(2,2)
220a8e1175bSopenharmony_ci        ("4067c3584ee207f8da94e3e8ab73738fcf1822ffbc6887782b491044d5e34124"
221a8e1175bSopenharmony_ci         "5c6e433715ba2bdd177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
222a8e1175bSopenharmony_ci        ("82523e86feac7eb7dc38f519b91751dacdbd47d364be8049a372db8f6e405d93"
223a8e1175bSopenharmony_ci         "ffed9235288bc781ae66267594c9c9500925e4749b575bd13653f8dd9b1f282e"),
224a8e1175bSopenharmony_ci        ("e8624fab5186ee32ee8d7ee9770348a05d300cb90706a045defc044a09325626"
225a8e1175bSopenharmony_ci         "e6b58de744ab6cce80877b6f71e1f6d2ef8acd128b4f2fc15f3f57ebf30b94fa"),
226a8e1175bSopenharmony_ci        ("829a48d422fe99a22c70501e533c91352d3d854e061b90303b08c6e33c729578"
227a8e1175bSopenharmony_ci         "2d6c797f8f7d9b782a1be9cd8697bbd0e2520e33e44c50556c71c4a66148a86f"),
228a8e1175bSopenharmony_ci        ("e89204e2e8168561867e5e15bc01bfce6a27e0dfcbf8754472154e76e4c11ab2"
229a8e1175bSopenharmony_ci         "fec3f6b32e8d4b8a8f54f8ceacaab39e83844b40ffa9b9f15c14bc4a829e07b0"),
230a8e1175bSopenharmony_ci        ("bd143fa9b714210c665d7435c1066932f4767f26294365b2721dea3bf63f23d0"
231a8e1175bSopenharmony_ci         "dbe53fcafb2147df5ca495fa5a91c89b97eeab64ca2ce6bc5d3fd983c34c769f"),
232a8e1175bSopenharmony_ci        ("74667bffe202849da9643a295a9ac6decbd4d3e2d4dec9ef83f0be4e80371eb9"
233a8e1175bSopenharmony_ci         "7f81375eecc1cb6347733e847d718d733ff98ff387c56473a7a83ee0761ebfd2"),
234a8e1175bSopenharmony_ci        ("d08f1bb2531d6460f0caeef038c89b38a8acb5137c9260dc74e088a9b9492f25"
235a8e1175bSopenharmony_ci         "8ebdbfe3eb9ac688b9d39cca91551e8259cc60b17604e4b4e73695c3e652c71a"),
236a8e1175bSopenharmony_ci
237a8e1175bSopenharmony_ci        # Next 2 number generated by random.getrandbits(256)
238a8e1175bSopenharmony_ci        "c5e2486c44a4a8f69dc8db48e86ec9c6e06f291b2a838af8d5c44a4eb3172062",
239a8e1175bSopenharmony_ci        "d4c0dca8b4c9e755cc9c3adcf515a8234da4daeb4f3f87777ad1f45ae9500ec9"
240a8e1175bSopenharmony_ci    ]
241a8e1175bSopenharmony_ci
242a8e1175bSopenharmony_ci    @property
243a8e1175bSopenharmony_ci    def arg_a(self) -> str:
244a8e1175bSopenharmony_ci        return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
245a8e1175bSopenharmony_ci
246a8e1175bSopenharmony_ci    def result(self) -> List[str]:
247a8e1175bSopenharmony_ci        result = self.int_a % self.int_n
248a8e1175bSopenharmony_ci        return [self.format_result(result)]
249a8e1175bSopenharmony_ci
250a8e1175bSopenharmony_ci    @property
251a8e1175bSopenharmony_ci    def is_valid(self) -> bool:
252a8e1175bSopenharmony_ci        return True
253a8e1175bSopenharmony_ci
254a8e1175bSopenharmony_ci    def arguments(self)-> List[str]:
255a8e1175bSopenharmony_ci        args = super().arguments()
256a8e1175bSopenharmony_ci        return  ["MBEDTLS_ECP_DP_SECP256R1"] + args
257a8e1175bSopenharmony_ci
258a8e1175bSopenharmony_ci
259a8e1175bSopenharmony_ciclass EcpP384R1Raw(bignum_common.ModOperationCommon,
260a8e1175bSopenharmony_ci                   EcpTarget):
261a8e1175bSopenharmony_ci    """Test cases for ECP P384 fast reduction."""
262a8e1175bSopenharmony_ci    test_function = "ecp_mod_p_generic_raw"
263a8e1175bSopenharmony_ci    test_name = "ecp_mod_p384_raw"
264a8e1175bSopenharmony_ci    input_style = "fixed"
265a8e1175bSopenharmony_ci    arity = 1
266a8e1175bSopenharmony_ci    dependencies = ["MBEDTLS_ECP_DP_SECP384R1_ENABLED",
267a8e1175bSopenharmony_ci                    "MBEDTLS_ECP_NIST_OPTIM"]
268a8e1175bSopenharmony_ci
269a8e1175bSopenharmony_ci    moduli = [("ffffffffffffffffffffffffffffffffffffffffffffffff"
270a8e1175bSopenharmony_ci               "fffffffffffffffeffffffff0000000000000000ffffffff")
271a8e1175bSopenharmony_ci             ] # type: List[str]
272a8e1175bSopenharmony_ci
273a8e1175bSopenharmony_ci    input_values = [
274a8e1175bSopenharmony_ci        "0", "1",
275a8e1175bSopenharmony_ci
276a8e1175bSopenharmony_ci        # Modulus - 1
277a8e1175bSopenharmony_ci        ("ffffffffffffffffffffffffffffffffffffffffffffffff"
278a8e1175bSopenharmony_ci         "fffffffffffffffeffffffff0000000000000000fffffffe"),
279a8e1175bSopenharmony_ci
280a8e1175bSopenharmony_ci        # Modulus + 1
281a8e1175bSopenharmony_ci        ("ffffffffffffffffffffffffffffffffffffffffffffffff"
282a8e1175bSopenharmony_ci         "fffffffffffffffeffffffff000000000000000100000000"),
283a8e1175bSopenharmony_ci
284a8e1175bSopenharmony_ci        # 2^384 - 1
285a8e1175bSopenharmony_ci        ("ffffffffffffffffffffffffffffffffffffffffffffffff"
286a8e1175bSopenharmony_ci         "ffffffffffffffffffffffffffffffffffffffffffffffff"),
287a8e1175bSopenharmony_ci
288a8e1175bSopenharmony_ci        # Maximum canonical P384 multiplication result
289a8e1175bSopenharmony_ci        ("ffffffffffffffffffffffffffffffffffffffffffffffff"
290a8e1175bSopenharmony_ci         "fffffffffffffffdfffffffe0000000000000001fffffffc"
291a8e1175bSopenharmony_ci         "000000000000000000000000000000010000000200000000"
292a8e1175bSopenharmony_ci         "fffffffe000000020000000400000000fffffffc00000004"),
293a8e1175bSopenharmony_ci
294a8e1175bSopenharmony_ci        # Testing with overflow in A(12) + A(21) + A(20);
295a8e1175bSopenharmony_ci        ("497811378624857a2c2af60d70583376545484cfae5c812f"
296a8e1175bSopenharmony_ci         "e2999fc1abb51d18b559e8ca3b50aaf263fdf8f24bdfb98f"
297a8e1175bSopenharmony_ci         "ffffffff20e65bf9099e4e73a5e8b517cf4fbeb8fd1750fd"
298a8e1175bSopenharmony_ci         "ae6d43f2e53f82d5ffffffffffffffffcc6f1e06111c62e0"),
299a8e1175bSopenharmony_ci
300a8e1175bSopenharmony_ci        # Testing with underflow in A(13) + A(22) + A(23) - A(12) - A(20);
301a8e1175bSopenharmony_ci        ("dfdd25e96777406b3c04b8c7b406f5fcf287e1e576003a09"
302a8e1175bSopenharmony_ci         "2852a6fbe517f2712b68abef41dbd35183a0614fb7222606"
303a8e1175bSopenharmony_ci         "ffffffff84396eee542f18a9189d94396c784059c17a9f18"
304a8e1175bSopenharmony_ci         "f807214ef32f2f10ffffffff8a77fac20000000000000000"),
305a8e1175bSopenharmony_ci
306a8e1175bSopenharmony_ci        # Testing with overflow in A(23) + A(20) + A(19) - A(22);
307a8e1175bSopenharmony_ci        ("783753f8a5afba6c1862eead1deb2fcdd907272be3ffd185"
308a8e1175bSopenharmony_ci         "42b24a71ee8b26cab0aa33513610ff973042bbe1637cc9fc"
309a8e1175bSopenharmony_ci         "99ad36c7f703514572cf4f5c3044469a8f5be6312c19e5d3"
310a8e1175bSopenharmony_ci         "f8fc1ac6ffffffffffffffff8c86252400000000ffffffff"),
311a8e1175bSopenharmony_ci
312a8e1175bSopenharmony_ci        # Testing with underflow in A(23) + A(20) + A(19) - A(22);
313a8e1175bSopenharmony_ci        ("65e1d2362fce922663b7fd517586e88842a9b4bd092e93e6"
314a8e1175bSopenharmony_ci         "251c9c69f278cbf8285d99ae3b53da5ba36e56701e2b17c2"
315a8e1175bSopenharmony_ci         "25f1239556c5f00117fa140218b46ebd8e34f50d0018701f"
316a8e1175bSopenharmony_ci         "a8a0a5cc00000000000000004410bcb4ffffffff00000000"),
317a8e1175bSopenharmony_ci
318a8e1175bSopenharmony_ci        # Testing the second round of carry reduction
319a8e1175bSopenharmony_ci        ("000000000000000000000000ffffffffffffffffffffffff"
320a8e1175bSopenharmony_ci         "ffffffffffffffffffffffffffffffff0000000000000000"
321a8e1175bSopenharmony_ci         "0000000000000000ffffffff000000000000000000000001"
322a8e1175bSopenharmony_ci         "00000000000000000000000000000000ffffffff00000001"),
323a8e1175bSopenharmony_ci
324a8e1175bSopenharmony_ci        # First 8 number generated by random.getrandbits(768) - seed(2,2)
325a8e1175bSopenharmony_ci        ("ffed9235288bc781ae66267594c9c9500925e4749b575bd1"
326a8e1175bSopenharmony_ci         "3653f8dd9b1f282e4067c3584ee207f8da94e3e8ab73738f"
327a8e1175bSopenharmony_ci         "cf1822ffbc6887782b491044d5e341245c6e433715ba2bdd"
328a8e1175bSopenharmony_ci         "177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
329a8e1175bSopenharmony_ci        ("e8624fab5186ee32ee8d7ee9770348a05d300cb90706a045"
330a8e1175bSopenharmony_ci         "defc044a09325626e6b58de744ab6cce80877b6f71e1f6d2"
331a8e1175bSopenharmony_ci         "ef8acd128b4f2fc15f3f57ebf30b94fa82523e86feac7eb7"
332a8e1175bSopenharmony_ci         "dc38f519b91751dacdbd47d364be8049a372db8f6e405d93"),
333a8e1175bSopenharmony_ci        ("fec3f6b32e8d4b8a8f54f8ceacaab39e83844b40ffa9b9f1"
334a8e1175bSopenharmony_ci         "5c14bc4a829e07b0829a48d422fe99a22c70501e533c9135"
335a8e1175bSopenharmony_ci         "2d3d854e061b90303b08c6e33c7295782d6c797f8f7d9b78"
336a8e1175bSopenharmony_ci         "2a1be9cd8697bbd0e2520e33e44c50556c71c4a66148a86f"),
337a8e1175bSopenharmony_ci        ("bd143fa9b714210c665d7435c1066932f4767f26294365b2"
338a8e1175bSopenharmony_ci         "721dea3bf63f23d0dbe53fcafb2147df5ca495fa5a91c89b"
339a8e1175bSopenharmony_ci         "97eeab64ca2ce6bc5d3fd983c34c769fe89204e2e8168561"
340a8e1175bSopenharmony_ci         "867e5e15bc01bfce6a27e0dfcbf8754472154e76e4c11ab2"),
341a8e1175bSopenharmony_ci        ("8ebdbfe3eb9ac688b9d39cca91551e8259cc60b17604e4b4"
342a8e1175bSopenharmony_ci         "e73695c3e652c71a74667bffe202849da9643a295a9ac6de"
343a8e1175bSopenharmony_ci         "cbd4d3e2d4dec9ef83f0be4e80371eb97f81375eecc1cb63"
344a8e1175bSopenharmony_ci         "47733e847d718d733ff98ff387c56473a7a83ee0761ebfd2"),
345a8e1175bSopenharmony_ci        ("d4c0dca8b4c9e755cc9c3adcf515a8234da4daeb4f3f8777"
346a8e1175bSopenharmony_ci         "7ad1f45ae9500ec9c5e2486c44a4a8f69dc8db48e86ec9c6"
347a8e1175bSopenharmony_ci         "e06f291b2a838af8d5c44a4eb3172062d08f1bb2531d6460"
348a8e1175bSopenharmony_ci         "f0caeef038c89b38a8acb5137c9260dc74e088a9b9492f25"),
349a8e1175bSopenharmony_ci        ("0227eeb7b9d7d01f5769da05d205bbfcc8c69069134bccd3"
350a8e1175bSopenharmony_ci         "e1cf4f589f8e4ce0af29d115ef24bd625dd961e6830b54fa"
351a8e1175bSopenharmony_ci         "7d28f93435339774bb1e386c4fd5079e681b8f5896838b76"
352a8e1175bSopenharmony_ci         "9da59b74a6c3181c81e220df848b1df78feb994a81167346"),
353a8e1175bSopenharmony_ci        ("d322a7353ead4efe440e2b4fda9c025a22f1a83185b98f5f"
354a8e1175bSopenharmony_ci         "c11e60de1b343f52ea748db9e020307aaeb6db2c3a038a70"
355a8e1175bSopenharmony_ci         "9779ac1f45e9dd320c855fdfa7251af0930cdbd30f0ad2a8"
356a8e1175bSopenharmony_ci         "1b2d19a2beaa14a7ff3fe32a30ffc4eed0a7bd04e85bfcdd"),
357a8e1175bSopenharmony_ci
358a8e1175bSopenharmony_ci        # Next 2 number generated by random.getrandbits(384)
359a8e1175bSopenharmony_ci        ("5c3747465cc36c270e8a35b10828d569c268a20eb78ac332"
360a8e1175bSopenharmony_ci         "e5e138e26c4454b90f756132e16dce72f18e859835e1f291"),
361a8e1175bSopenharmony_ci        ("eb2b5693babb7fbb0a76c196067cfdcb11457d9cf45e2fa0"
362a8e1175bSopenharmony_ci         "1d7f4275153924800600571fac3a5b263fdf57cd2c006497")
363a8e1175bSopenharmony_ci    ]
364a8e1175bSopenharmony_ci
365a8e1175bSopenharmony_ci    @property
366a8e1175bSopenharmony_ci    def arg_a(self) -> str:
367a8e1175bSopenharmony_ci        return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
368a8e1175bSopenharmony_ci
369a8e1175bSopenharmony_ci    def result(self) -> List[str]:
370a8e1175bSopenharmony_ci        result = self.int_a % self.int_n
371a8e1175bSopenharmony_ci        return [self.format_result(result)]
372a8e1175bSopenharmony_ci
373a8e1175bSopenharmony_ci    @property
374a8e1175bSopenharmony_ci    def is_valid(self) -> bool:
375a8e1175bSopenharmony_ci        return True
376a8e1175bSopenharmony_ci
377a8e1175bSopenharmony_ci    def arguments(self)-> List[str]:
378a8e1175bSopenharmony_ci        args = super().arguments()
379a8e1175bSopenharmony_ci        return  ["MBEDTLS_ECP_DP_SECP384R1"] + args
380a8e1175bSopenharmony_ci
381a8e1175bSopenharmony_ci
382a8e1175bSopenharmony_ciclass EcpP521R1Raw(bignum_common.ModOperationCommon,
383a8e1175bSopenharmony_ci                   EcpTarget):
384a8e1175bSopenharmony_ci    """Test cases for ECP P521 fast reduction."""
385a8e1175bSopenharmony_ci    test_function = "ecp_mod_p_generic_raw"
386a8e1175bSopenharmony_ci    test_name = "ecp_mod_p521_raw"
387a8e1175bSopenharmony_ci    input_style = "arch_split"
388a8e1175bSopenharmony_ci    arity = 1
389a8e1175bSopenharmony_ci    dependencies = ["MBEDTLS_ECP_DP_SECP521R1_ENABLED",
390a8e1175bSopenharmony_ci                    "MBEDTLS_ECP_NIST_OPTIM"]
391a8e1175bSopenharmony_ci
392a8e1175bSopenharmony_ci    moduli = [("01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
393a8e1175bSopenharmony_ci               "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
394a8e1175bSopenharmony_ci             ] # type: List[str]
395a8e1175bSopenharmony_ci
396a8e1175bSopenharmony_ci    input_values = [
397a8e1175bSopenharmony_ci        "0", "1",
398a8e1175bSopenharmony_ci
399a8e1175bSopenharmony_ci        # Modulus - 1
400a8e1175bSopenharmony_ci        ("01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
401a8e1175bSopenharmony_ci         "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"),
402a8e1175bSopenharmony_ci
403a8e1175bSopenharmony_ci        # Modulus + 1
404a8e1175bSopenharmony_ci        ("020000000000000000000000000000000000000000000000000000000000000000"
405a8e1175bSopenharmony_ci         "000000000000000000000000000000000000000000000000000000000000000000"),
406a8e1175bSopenharmony_ci
407a8e1175bSopenharmony_ci        # Maximum canonical P521 multiplication result
408a8e1175bSopenharmony_ci        ("0003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
409a8e1175bSopenharmony_ci         "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
410a8e1175bSopenharmony_ci         "fffff800"
411a8e1175bSopenharmony_ci         "0000000000000000000000000000000000000000000000000000000000000000"
412a8e1175bSopenharmony_ci         "0000000000000000000000000000000000000000000000000000000000000004"),
413a8e1175bSopenharmony_ci
414a8e1175bSopenharmony_ci        # Test case for overflow during addition
415a8e1175bSopenharmony_ci        ("0001efffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
416a8e1175bSopenharmony_ci         "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
417a8e1175bSopenharmony_ci         "000001ef"
418a8e1175bSopenharmony_ci         "0000000000000000000000000000000000000000000000000000000000000000"
419a8e1175bSopenharmony_ci         "000000000000000000000000000000000000000000000000000000000f000000"),
420a8e1175bSopenharmony_ci
421a8e1175bSopenharmony_ci        # First 8 number generated by random.getrandbits(1042) - seed(2,2)
422a8e1175bSopenharmony_ci        ("0003cc2e82523e86feac7eb7dc38f519b91751dacdbd47d364be8049a372db8f"
423a8e1175bSopenharmony_ci         "6e405d93ffed9235288bc781ae66267594c9c9500925e4749b575bd13653f8dd"
424a8e1175bSopenharmony_ci         "9b1f282e"
425a8e1175bSopenharmony_ci         "4067c3584ee207f8da94e3e8ab73738fcf1822ffbc6887782b491044d5e34124"
426a8e1175bSopenharmony_ci         "5c6e433715ba2bdd177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
427a8e1175bSopenharmony_ci        ("00017052829e07b0829a48d422fe99a22c70501e533c91352d3d854e061b9030"
428a8e1175bSopenharmony_ci         "3b08c6e33c7295782d6c797f8f7d9b782a1be9cd8697bbd0e2520e33e44c5055"
429a8e1175bSopenharmony_ci         "6c71c4a6"
430a8e1175bSopenharmony_ci         "6148a86fe8624fab5186ee32ee8d7ee9770348a05d300cb90706a045defc044a"
431a8e1175bSopenharmony_ci         "09325626e6b58de744ab6cce80877b6f71e1f6d2ef8acd128b4f2fc15f3f57eb"),
432a8e1175bSopenharmony_ci        ("00021f15a7a83ee0761ebfd2bd143fa9b714210c665d7435c1066932f4767f26"
433a8e1175bSopenharmony_ci         "294365b2721dea3bf63f23d0dbe53fcafb2147df5ca495fa5a91c89b97eeab64"
434a8e1175bSopenharmony_ci         "ca2ce6bc"
435a8e1175bSopenharmony_ci         "5d3fd983c34c769fe89204e2e8168561867e5e15bc01bfce6a27e0dfcbf87544"
436a8e1175bSopenharmony_ci         "72154e76e4c11ab2fec3f6b32e8d4b8a8f54f8ceacaab39e83844b40ffa9b9f1"),
437a8e1175bSopenharmony_ci        ("000381bc2a838af8d5c44a4eb3172062d08f1bb2531d6460f0caeef038c89b38"
438a8e1175bSopenharmony_ci         "a8acb5137c9260dc74e088a9b9492f258ebdbfe3eb9ac688b9d39cca91551e82"
439a8e1175bSopenharmony_ci         "59cc60b1"
440a8e1175bSopenharmony_ci         "7604e4b4e73695c3e652c71a74667bffe202849da9643a295a9ac6decbd4d3e2"
441a8e1175bSopenharmony_ci         "d4dec9ef83f0be4e80371eb97f81375eecc1cb6347733e847d718d733ff98ff3"),
442a8e1175bSopenharmony_ci        ("00034816c8c69069134bccd3e1cf4f589f8e4ce0af29d115ef24bd625dd961e6"
443a8e1175bSopenharmony_ci         "830b54fa7d28f93435339774bb1e386c4fd5079e681b8f5896838b769da59b74"
444a8e1175bSopenharmony_ci         "a6c3181c"
445a8e1175bSopenharmony_ci         "81e220df848b1df78feb994a81167346d4c0dca8b4c9e755cc9c3adcf515a823"
446a8e1175bSopenharmony_ci         "4da4daeb4f3f87777ad1f45ae9500ec9c5e2486c44a4a8f69dc8db48e86ec9c6"),
447a8e1175bSopenharmony_ci        ("000397846c4454b90f756132e16dce72f18e859835e1f291d322a7353ead4efe"
448a8e1175bSopenharmony_ci         "440e2b4fda9c025a22f1a83185b98f5fc11e60de1b343f52ea748db9e020307a"
449a8e1175bSopenharmony_ci         "aeb6db2c"
450a8e1175bSopenharmony_ci         "3a038a709779ac1f45e9dd320c855fdfa7251af0930cdbd30f0ad2a81b2d19a2"
451a8e1175bSopenharmony_ci         "beaa14a7ff3fe32a30ffc4eed0a7bd04e85bfcdd0227eeb7b9d7d01f5769da05"),
452a8e1175bSopenharmony_ci        ("00002c3296e6bc4d62b47204007ee4fab105d83e85e951862f0981aebc1b00d9"
453a8e1175bSopenharmony_ci         "2838e766ef9b6bf2d037fe2e20b6a8464174e75a5f834da70569c018eb2b5693"
454a8e1175bSopenharmony_ci         "babb7fbb"
455a8e1175bSopenharmony_ci         "0a76c196067cfdcb11457d9cf45e2fa01d7f4275153924800600571fac3a5b26"
456a8e1175bSopenharmony_ci         "3fdf57cd2c0064975c3747465cc36c270e8a35b10828d569c268a20eb78ac332"),
457a8e1175bSopenharmony_ci        ("00009d23b4917fc09f20dbb0dcc93f0e66dfe717c17313394391b6e2e6eacb0f"
458a8e1175bSopenharmony_ci         "0bb7be72bd6d25009aeb7fa0c4169b148d2f527e72daf0a54ef25c0707e33868"
459a8e1175bSopenharmony_ci         "7d1f7157"
460a8e1175bSopenharmony_ci         "5653a45c49390aa51cf5192bbf67da14be11d56ba0b4a2969d8055a9f03f2d71"
461a8e1175bSopenharmony_ci         "581d8e830112ff0f0948eccaf8877acf26c377c13f719726fd70bddacb4deeec"),
462a8e1175bSopenharmony_ci
463a8e1175bSopenharmony_ci        # Next 2 number generated by random.getrandbits(521)
464a8e1175bSopenharmony_ci        ("12b84ae65e920a63ac1f2b64df6dff07870c9d531ae72a47403063238da1a1fe"
465a8e1175bSopenharmony_ci         "3f9d6a179fa50f96cd4aff9261aa92c0e6f17ec940639bc2ccdf572df00790813e3"),
466a8e1175bSopenharmony_ci        ("166049dd332a73fa0b26b75196cf87eb8a09b27ec714307c68c425424a1574f1"
467a8e1175bSopenharmony_ci         "eedf5b0f16cdfdb839424d201e653f53d6883ca1c107ca6e706649889c0c7f38608")
468a8e1175bSopenharmony_ci    ]
469a8e1175bSopenharmony_ci
470a8e1175bSopenharmony_ci    @property
471a8e1175bSopenharmony_ci    def arg_a(self) -> str:
472a8e1175bSopenharmony_ci        # Number of limbs: 2 * N
473a8e1175bSopenharmony_ci        return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
474a8e1175bSopenharmony_ci
475a8e1175bSopenharmony_ci    def result(self) -> List[str]:
476a8e1175bSopenharmony_ci        result = self.int_a % self.int_n
477a8e1175bSopenharmony_ci        return [self.format_result(result)]
478a8e1175bSopenharmony_ci
479a8e1175bSopenharmony_ci    @property
480a8e1175bSopenharmony_ci    def is_valid(self) -> bool:
481a8e1175bSopenharmony_ci        return True
482a8e1175bSopenharmony_ci
483a8e1175bSopenharmony_ci    def arguments(self)-> List[str]:
484a8e1175bSopenharmony_ci        args = super().arguments()
485a8e1175bSopenharmony_ci        return  ["MBEDTLS_ECP_DP_SECP521R1"] + args
486a8e1175bSopenharmony_ci
487a8e1175bSopenharmony_ci
488a8e1175bSopenharmony_ciclass EcpP192K1Raw(bignum_common.ModOperationCommon,
489a8e1175bSopenharmony_ci                   EcpTarget):
490a8e1175bSopenharmony_ci    """Test cases for ECP P192K1 fast reduction."""
491a8e1175bSopenharmony_ci    symbol = "-"
492a8e1175bSopenharmony_ci    test_function = "ecp_mod_p_generic_raw"
493a8e1175bSopenharmony_ci    test_name = "ecp_mod_p192k1_raw"
494a8e1175bSopenharmony_ci    input_style = "fixed"
495a8e1175bSopenharmony_ci    arity = 1
496a8e1175bSopenharmony_ci    dependencies = ["MBEDTLS_ECP_DP_SECP192K1_ENABLED"]
497a8e1175bSopenharmony_ci
498a8e1175bSopenharmony_ci    moduli = ["fffffffffffffffffffffffffffffffffffffffeffffee37"] # type: List[str]
499a8e1175bSopenharmony_ci
500a8e1175bSopenharmony_ci    input_values = [
501a8e1175bSopenharmony_ci        "0", "1",
502a8e1175bSopenharmony_ci
503a8e1175bSopenharmony_ci        # Modulus - 1
504a8e1175bSopenharmony_ci        "fffffffffffffffffffffffffffffffffffffffeffffee36",
505a8e1175bSopenharmony_ci
506a8e1175bSopenharmony_ci        # Modulus + 1
507a8e1175bSopenharmony_ci        "fffffffffffffffffffffffffffffffffffffffeffffee38",
508a8e1175bSopenharmony_ci
509a8e1175bSopenharmony_ci        # 2^192 - 1
510a8e1175bSopenharmony_ci        "ffffffffffffffffffffffffffffffffffffffffffffffff",
511a8e1175bSopenharmony_ci
512a8e1175bSopenharmony_ci        # Maximum canonical P192K1 multiplication result
513a8e1175bSopenharmony_ci        ("fffffffffffffffffffffffffffffffffffffffdffffdc6c"
514a8e1175bSopenharmony_ci         "0000000000000000000000000000000100002394013c7364"),
515a8e1175bSopenharmony_ci
516a8e1175bSopenharmony_ci        # Test case for overflow during addition
517a8e1175bSopenharmony_ci        ("00000007ffff71b809e27dd832cfd5e04d9d2dbb9f8da217"
518a8e1175bSopenharmony_ci         "0000000000000000000000000000000000000000520834f0"),
519a8e1175bSopenharmony_ci
520a8e1175bSopenharmony_ci        # First 8 number generated by random.getrandbits(384) - seed(2,2)
521a8e1175bSopenharmony_ci        ("cf1822ffbc6887782b491044d5e341245c6e433715ba2bdd"
522a8e1175bSopenharmony_ci         "177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
523a8e1175bSopenharmony_ci        ("ffed9235288bc781ae66267594c9c9500925e4749b575bd1"
524a8e1175bSopenharmony_ci         "3653f8dd9b1f282e4067c3584ee207f8da94e3e8ab73738f"),
525a8e1175bSopenharmony_ci        ("ef8acd128b4f2fc15f3f57ebf30b94fa82523e86feac7eb7"
526a8e1175bSopenharmony_ci         "dc38f519b91751dacdbd47d364be8049a372db8f6e405d93"),
527a8e1175bSopenharmony_ci        ("e8624fab5186ee32ee8d7ee9770348a05d300cb90706a045"
528a8e1175bSopenharmony_ci         "defc044a09325626e6b58de744ab6cce80877b6f71e1f6d2"),
529a8e1175bSopenharmony_ci        ("2d3d854e061b90303b08c6e33c7295782d6c797f8f7d9b78"
530a8e1175bSopenharmony_ci         "2a1be9cd8697bbd0e2520e33e44c50556c71c4a66148a86f"),
531a8e1175bSopenharmony_ci        ("fec3f6b32e8d4b8a8f54f8ceacaab39e83844b40ffa9b9f1"
532a8e1175bSopenharmony_ci         "5c14bc4a829e07b0829a48d422fe99a22c70501e533c9135"),
533a8e1175bSopenharmony_ci        ("97eeab64ca2ce6bc5d3fd983c34c769fe89204e2e8168561"
534a8e1175bSopenharmony_ci         "867e5e15bc01bfce6a27e0dfcbf8754472154e76e4c11ab2"),
535a8e1175bSopenharmony_ci        ("bd143fa9b714210c665d7435c1066932f4767f26294365b2"
536a8e1175bSopenharmony_ci         "721dea3bf63f23d0dbe53fcafb2147df5ca495fa5a91c89b"),
537a8e1175bSopenharmony_ci
538a8e1175bSopenharmony_ci        # Next 2 number generated by random.getrandbits(192)
539a8e1175bSopenharmony_ci        "47733e847d718d733ff98ff387c56473a7a83ee0761ebfd2",
540a8e1175bSopenharmony_ci        "cbd4d3e2d4dec9ef83f0be4e80371eb97f81375eecc1cb63"
541a8e1175bSopenharmony_ci    ]
542a8e1175bSopenharmony_ci
543a8e1175bSopenharmony_ci    @property
544a8e1175bSopenharmony_ci    def arg_a(self) -> str:
545a8e1175bSopenharmony_ci        return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
546a8e1175bSopenharmony_ci
547a8e1175bSopenharmony_ci    def result(self) -> List[str]:
548a8e1175bSopenharmony_ci        result = self.int_a % self.int_n
549a8e1175bSopenharmony_ci        return [self.format_result(result)]
550a8e1175bSopenharmony_ci
551a8e1175bSopenharmony_ci    @property
552a8e1175bSopenharmony_ci    def is_valid(self) -> bool:
553a8e1175bSopenharmony_ci        return True
554a8e1175bSopenharmony_ci
555a8e1175bSopenharmony_ci    def arguments(self):
556a8e1175bSopenharmony_ci        args = super().arguments()
557a8e1175bSopenharmony_ci        return  ["MBEDTLS_ECP_DP_SECP192K1"] + args
558a8e1175bSopenharmony_ci
559a8e1175bSopenharmony_ci
560a8e1175bSopenharmony_ciclass EcpP224K1Raw(bignum_common.ModOperationCommon,
561a8e1175bSopenharmony_ci                   EcpTarget):
562a8e1175bSopenharmony_ci    """Test cases for ECP P224 fast reduction."""
563a8e1175bSopenharmony_ci    symbol = "-"
564a8e1175bSopenharmony_ci    test_function = "ecp_mod_p_generic_raw"
565a8e1175bSopenharmony_ci    test_name = "ecp_mod_p224k1_raw"
566a8e1175bSopenharmony_ci    input_style = "arch_split"
567a8e1175bSopenharmony_ci    arity = 1
568a8e1175bSopenharmony_ci    dependencies = ["MBEDTLS_ECP_DP_SECP224K1_ENABLED"]
569a8e1175bSopenharmony_ci
570a8e1175bSopenharmony_ci    moduli = ["fffffffffffffffffffffffffffffffffffffffffffffffeffffe56d"] # type: List[str]
571a8e1175bSopenharmony_ci
572a8e1175bSopenharmony_ci    input_values = [
573a8e1175bSopenharmony_ci        "0", "1",
574a8e1175bSopenharmony_ci
575a8e1175bSopenharmony_ci        # Modulus - 1
576a8e1175bSopenharmony_ci        "fffffffffffffffffffffffffffffffffffffffffffffffeffffe56c",
577a8e1175bSopenharmony_ci
578a8e1175bSopenharmony_ci        # Modulus + 1
579a8e1175bSopenharmony_ci        "fffffffffffffffffffffffffffffffffffffffffffffffeffffe56e",
580a8e1175bSopenharmony_ci
581a8e1175bSopenharmony_ci        # 2^224 - 1
582a8e1175bSopenharmony_ci        "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
583a8e1175bSopenharmony_ci
584a8e1175bSopenharmony_ci        # Maximum canonical P224K1 multiplication result
585a8e1175bSopenharmony_ci        ("fffffffffffffffffffffffffffffffffffffffffffffffdffffcad8"
586a8e1175bSopenharmony_ci         "00000000000000000000000000000000000000010000352802c26590"),
587a8e1175bSopenharmony_ci
588a8e1175bSopenharmony_ci        # Test case for overflow during addition
589a8e1175bSopenharmony_ci        ("0000007ffff2b68161180fd8cd92e1a109be158a19a99b1809db8032"
590a8e1175bSopenharmony_ci         "0000000000000000000000000000000000000000000000000bf04f49"),
591a8e1175bSopenharmony_ci
592a8e1175bSopenharmony_ci        # First 8 number generated by random.getrandbits(448) - seed(2,2)
593a8e1175bSopenharmony_ci        ("da94e3e8ab73738fcf1822ffbc6887782b491044d5e341245c6e4337"
594a8e1175bSopenharmony_ci         "15ba2bdd177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
595a8e1175bSopenharmony_ci        ("cdbd47d364be8049a372db8f6e405d93ffed9235288bc781ae662675"
596a8e1175bSopenharmony_ci         "94c9c9500925e4749b575bd13653f8dd9b1f282e4067c3584ee207f8"),
597a8e1175bSopenharmony_ci        ("defc044a09325626e6b58de744ab6cce80877b6f71e1f6d2ef8acd12"
598a8e1175bSopenharmony_ci         "8b4f2fc15f3f57ebf30b94fa82523e86feac7eb7dc38f519b91751da"),
599a8e1175bSopenharmony_ci        ("2d6c797f8f7d9b782a1be9cd8697bbd0e2520e33e44c50556c71c4a6"
600a8e1175bSopenharmony_ci         "6148a86fe8624fab5186ee32ee8d7ee9770348a05d300cb90706a045"),
601a8e1175bSopenharmony_ci        ("8f54f8ceacaab39e83844b40ffa9b9f15c14bc4a829e07b0829a48d4"
602a8e1175bSopenharmony_ci         "22fe99a22c70501e533c91352d3d854e061b90303b08c6e33c729578"),
603a8e1175bSopenharmony_ci        ("97eeab64ca2ce6bc5d3fd983c34c769fe89204e2e8168561867e5e15"
604a8e1175bSopenharmony_ci         "bc01bfce6a27e0dfcbf8754472154e76e4c11ab2fec3f6b32e8d4b8a"),
605a8e1175bSopenharmony_ci        ("a7a83ee0761ebfd2bd143fa9b714210c665d7435c1066932f4767f26"
606a8e1175bSopenharmony_ci         "294365b2721dea3bf63f23d0dbe53fcafb2147df5ca495fa5a91c89b"),
607a8e1175bSopenharmony_ci        ("74667bffe202849da9643a295a9ac6decbd4d3e2d4dec9ef83f0be4e"
608a8e1175bSopenharmony_ci         "80371eb97f81375eecc1cb6347733e847d718d733ff98ff387c56473"),
609a8e1175bSopenharmony_ci
610a8e1175bSopenharmony_ci        # Next 2 number generated by random.getrandbits(224)
611a8e1175bSopenharmony_ci        ("eb9ac688b9d39cca91551e8259cc60b17604e4b4e73695c3e652c71a"),
612a8e1175bSopenharmony_ci        ("f0caeef038c89b38a8acb5137c9260dc74e088a9b9492f258ebdbfe3"),
613a8e1175bSopenharmony_ci    ]
614a8e1175bSopenharmony_ci
615a8e1175bSopenharmony_ci    @property
616a8e1175bSopenharmony_ci    def arg_a(self) -> str:
617a8e1175bSopenharmony_ci        limbs = 2 * bignum_common.bits_to_limbs(224, self.bits_in_limb)
618a8e1175bSopenharmony_ci        hex_digits = bignum_common.hex_digits_for_limb(limbs, self.bits_in_limb)
619a8e1175bSopenharmony_ci        return super().format_arg('{:x}'.format(self.int_a)).zfill(hex_digits)
620a8e1175bSopenharmony_ci
621a8e1175bSopenharmony_ci    def result(self) -> List[str]:
622a8e1175bSopenharmony_ci        result = self.int_a % self.int_n
623a8e1175bSopenharmony_ci        return [self.format_result(result)]
624a8e1175bSopenharmony_ci
625a8e1175bSopenharmony_ci    @property
626a8e1175bSopenharmony_ci    def is_valid(self) -> bool:
627a8e1175bSopenharmony_ci        return True
628a8e1175bSopenharmony_ci
629a8e1175bSopenharmony_ci    def arguments(self):
630a8e1175bSopenharmony_ci        args = super().arguments()
631a8e1175bSopenharmony_ci        return  ["MBEDTLS_ECP_DP_SECP224K1"] + args
632a8e1175bSopenharmony_ci
633a8e1175bSopenharmony_ci
634a8e1175bSopenharmony_ciclass EcpP256K1Raw(bignum_common.ModOperationCommon,
635a8e1175bSopenharmony_ci                   EcpTarget):
636a8e1175bSopenharmony_ci    """Test cases for ECP P256 fast reduction."""
637a8e1175bSopenharmony_ci    symbol = "-"
638a8e1175bSopenharmony_ci    test_function = "ecp_mod_p_generic_raw"
639a8e1175bSopenharmony_ci    test_name = "ecp_mod_p256k1_raw"
640a8e1175bSopenharmony_ci    input_style = "fixed"
641a8e1175bSopenharmony_ci    arity = 1
642a8e1175bSopenharmony_ci    dependencies = ["MBEDTLS_ECP_DP_SECP256K1_ENABLED"]
643a8e1175bSopenharmony_ci
644a8e1175bSopenharmony_ci    moduli = ["fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"] # type: List[str]
645a8e1175bSopenharmony_ci
646a8e1175bSopenharmony_ci    input_values = [
647a8e1175bSopenharmony_ci        "0", "1",
648a8e1175bSopenharmony_ci
649a8e1175bSopenharmony_ci        # Modulus - 1
650a8e1175bSopenharmony_ci        "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e",
651a8e1175bSopenharmony_ci
652a8e1175bSopenharmony_ci        # Modulus + 1
653a8e1175bSopenharmony_ci        "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc30",
654a8e1175bSopenharmony_ci
655a8e1175bSopenharmony_ci        # 2^256 - 1
656a8e1175bSopenharmony_ci        "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
657a8e1175bSopenharmony_ci
658a8e1175bSopenharmony_ci        # Maximum canonical P256K1 multiplication result
659a8e1175bSopenharmony_ci        ("fffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffff85c"
660a8e1175bSopenharmony_ci         "000000000000000000000000000000000000000000000001000007a4000e9844"),
661a8e1175bSopenharmony_ci
662a8e1175bSopenharmony_ci        # Test case for overflow during addition
663a8e1175bSopenharmony_ci        ("0000fffffc2f000e90a0c86a0a63234e5ba641f43a7e4aecc4040e67ec850562"
664a8e1175bSopenharmony_ci         "00000000000000000000000000000000000000000000000000000000585674fd"),
665a8e1175bSopenharmony_ci
666a8e1175bSopenharmony_ci        # Test case for overflow during addition
667a8e1175bSopenharmony_ci        ("0000fffffc2f000e90a0c86a0a63234e5ba641f43a7e4aecc4040e67ec850562"
668a8e1175bSopenharmony_ci         "00000000000000000000000000000000000000000000000000000000585674fd"),
669a8e1175bSopenharmony_ci
670a8e1175bSopenharmony_ci        # First 8 number generated by random.getrandbits(512) - seed(2,2)
671a8e1175bSopenharmony_ci        ("4067c3584ee207f8da94e3e8ab73738fcf1822ffbc6887782b491044d5e34124"
672a8e1175bSopenharmony_ci         "5c6e433715ba2bdd177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
673a8e1175bSopenharmony_ci        ("82523e86feac7eb7dc38f519b91751dacdbd47d364be8049a372db8f6e405d93"
674a8e1175bSopenharmony_ci         "ffed9235288bc781ae66267594c9c9500925e4749b575bd13653f8dd9b1f282e"),
675a8e1175bSopenharmony_ci        ("e8624fab5186ee32ee8d7ee9770348a05d300cb90706a045defc044a09325626"
676a8e1175bSopenharmony_ci         "e6b58de744ab6cce80877b6f71e1f6d2ef8acd128b4f2fc15f3f57ebf30b94fa"),
677a8e1175bSopenharmony_ci        ("829a48d422fe99a22c70501e533c91352d3d854e061b90303b08c6e33c729578"
678a8e1175bSopenharmony_ci         "2d6c797f8f7d9b782a1be9cd8697bbd0e2520e33e44c50556c71c4a66148a86f"),
679a8e1175bSopenharmony_ci        ("e89204e2e8168561867e5e15bc01bfce6a27e0dfcbf8754472154e76e4c11ab2"
680a8e1175bSopenharmony_ci         "fec3f6b32e8d4b8a8f54f8ceacaab39e83844b40ffa9b9f15c14bc4a829e07b0"),
681a8e1175bSopenharmony_ci        ("bd143fa9b714210c665d7435c1066932f4767f26294365b2721dea3bf63f23d0"
682a8e1175bSopenharmony_ci         "dbe53fcafb2147df5ca495fa5a91c89b97eeab64ca2ce6bc5d3fd983c34c769f"),
683a8e1175bSopenharmony_ci        ("74667bffe202849da9643a295a9ac6decbd4d3e2d4dec9ef83f0be4e80371eb9"
684a8e1175bSopenharmony_ci         "7f81375eecc1cb6347733e847d718d733ff98ff387c56473a7a83ee0761ebfd2"),
685a8e1175bSopenharmony_ci        ("d08f1bb2531d6460f0caeef038c89b38a8acb5137c9260dc74e088a9b9492f25"
686a8e1175bSopenharmony_ci         "8ebdbfe3eb9ac688b9d39cca91551e8259cc60b17604e4b4e73695c3e652c71a"),
687a8e1175bSopenharmony_ci
688a8e1175bSopenharmony_ci        # Next 2 number generated by random.getrandbits(256)
689a8e1175bSopenharmony_ci        ("c5e2486c44a4a8f69dc8db48e86ec9c6e06f291b2a838af8d5c44a4eb3172062"),
690a8e1175bSopenharmony_ci        ("d4c0dca8b4c9e755cc9c3adcf515a8234da4daeb4f3f87777ad1f45ae9500ec9"),
691a8e1175bSopenharmony_ci    ]
692a8e1175bSopenharmony_ci
693a8e1175bSopenharmony_ci    @property
694a8e1175bSopenharmony_ci    def arg_a(self) -> str:
695a8e1175bSopenharmony_ci        return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
696a8e1175bSopenharmony_ci
697a8e1175bSopenharmony_ci    def result(self) -> List[str]:
698a8e1175bSopenharmony_ci        result = self.int_a % self.int_n
699a8e1175bSopenharmony_ci        return [self.format_result(result)]
700a8e1175bSopenharmony_ci
701a8e1175bSopenharmony_ci    @property
702a8e1175bSopenharmony_ci    def is_valid(self) -> bool:
703a8e1175bSopenharmony_ci        return True
704a8e1175bSopenharmony_ci
705a8e1175bSopenharmony_ci    def arguments(self):
706a8e1175bSopenharmony_ci        args = super().arguments()
707a8e1175bSopenharmony_ci        return  ["MBEDTLS_ECP_DP_SECP256K1"] + args
708a8e1175bSopenharmony_ci
709a8e1175bSopenharmony_ci
710a8e1175bSopenharmony_ciclass EcpP255Raw(bignum_common.ModOperationCommon,
711a8e1175bSopenharmony_ci                 EcpTarget):
712a8e1175bSopenharmony_ci    """Test cases for ECP 25519 fast reduction."""
713a8e1175bSopenharmony_ci    symbol = "-"
714a8e1175bSopenharmony_ci    test_function = "ecp_mod_p_generic_raw"
715a8e1175bSopenharmony_ci    test_name = "mbedtls_ecp_mod_p255_raw"
716a8e1175bSopenharmony_ci    input_style = "fixed"
717a8e1175bSopenharmony_ci    arity = 1
718a8e1175bSopenharmony_ci    dependencies = ["MBEDTLS_ECP_DP_CURVE25519_ENABLED"]
719a8e1175bSopenharmony_ci
720a8e1175bSopenharmony_ci    moduli = [("7fffffffffffffffffffffffffffffffffffffffffffffffff"
721a8e1175bSopenharmony_ci               "ffffffffffffed")] # type: List[str]
722a8e1175bSopenharmony_ci
723a8e1175bSopenharmony_ci    input_values = [
724a8e1175bSopenharmony_ci        "0", "1",
725a8e1175bSopenharmony_ci
726a8e1175bSopenharmony_ci        # Modulus - 1
727a8e1175bSopenharmony_ci        ("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),
728a8e1175bSopenharmony_ci
729a8e1175bSopenharmony_ci        # Modulus + 1
730a8e1175bSopenharmony_ci        ("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee"),
731a8e1175bSopenharmony_ci
732a8e1175bSopenharmony_ci        # 2^255 - 1
733a8e1175bSopenharmony_ci        ("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),
734a8e1175bSopenharmony_ci
735a8e1175bSopenharmony_ci        # Maximum canonical P255 multiplication result
736a8e1175bSopenharmony_ci        ("3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"
737a8e1175bSopenharmony_ci         "0000000000000000000000000000000000000000000000000000000000000190"),
738a8e1175bSopenharmony_ci
739a8e1175bSopenharmony_ci        # First 8 number generated by random.getrandbits(510) - seed(2,2)
740a8e1175bSopenharmony_ci        ("1019f0d64ee207f8da94e3e8ab73738fcf1822ffbc6887782b491044d5e34124"
741a8e1175bSopenharmony_ci         "5c6e433715ba2bdd177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973"),
742a8e1175bSopenharmony_ci        ("20948fa1feac7eb7dc38f519b91751dacdbd47d364be8049a372db8f6e405d93"
743a8e1175bSopenharmony_ci         "ffed9235288bc781ae66267594c9c9500925e4749b575bd13653f8dd9b1f282e"),
744a8e1175bSopenharmony_ci        ("3a1893ea5186ee32ee8d7ee9770348a05d300cb90706a045defc044a09325626"
745a8e1175bSopenharmony_ci         "e6b58de744ab6cce80877b6f71e1f6d2ef8acd128b4f2fc15f3f57ebf30b94fa"),
746a8e1175bSopenharmony_ci        ("20a6923522fe99a22c70501e533c91352d3d854e061b90303b08c6e33c729578"
747a8e1175bSopenharmony_ci         "2d6c797f8f7d9b782a1be9cd8697bbd0e2520e33e44c50556c71c4a66148a86f"),
748a8e1175bSopenharmony_ci        ("3a248138e8168561867e5e15bc01bfce6a27e0dfcbf8754472154e76e4c11ab2"
749a8e1175bSopenharmony_ci         "fec3f6b32e8d4b8a8f54f8ceacaab39e83844b40ffa9b9f15c14bc4a829e07b0"),
750a8e1175bSopenharmony_ci        ("2f450feab714210c665d7435c1066932f4767f26294365b2721dea3bf63f23d0"
751a8e1175bSopenharmony_ci         "dbe53fcafb2147df5ca495fa5a91c89b97eeab64ca2ce6bc5d3fd983c34c769f"),
752a8e1175bSopenharmony_ci        ("1d199effe202849da9643a295a9ac6decbd4d3e2d4dec9ef83f0be4e80371eb9"
753a8e1175bSopenharmony_ci         "7f81375eecc1cb6347733e847d718d733ff98ff387c56473a7a83ee0761ebfd2"),
754a8e1175bSopenharmony_ci        ("3423c6ec531d6460f0caeef038c89b38a8acb5137c9260dc74e088a9b9492f25"
755a8e1175bSopenharmony_ci         "8ebdbfe3eb9ac688b9d39cca91551e8259cc60b17604e4b4e73695c3e652c71a"),
756a8e1175bSopenharmony_ci
757a8e1175bSopenharmony_ci        # Next 2 number generated by random.getrandbits(255)
758a8e1175bSopenharmony_ci        ("62f1243644a4a8f69dc8db48e86ec9c6e06f291b2a838af8d5c44a4eb3172062"),
759a8e1175bSopenharmony_ci        ("6a606e54b4c9e755cc9c3adcf515a8234da4daeb4f3f87777ad1f45ae9500ec9"),
760a8e1175bSopenharmony_ci    ]
761a8e1175bSopenharmony_ci
762a8e1175bSopenharmony_ci    @property
763a8e1175bSopenharmony_ci    def arg_a(self) -> str:
764a8e1175bSopenharmony_ci        return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
765a8e1175bSopenharmony_ci
766a8e1175bSopenharmony_ci    def result(self) -> List[str]:
767a8e1175bSopenharmony_ci        result = self.int_a % self.int_n
768a8e1175bSopenharmony_ci        return [self.format_result(result)]
769a8e1175bSopenharmony_ci
770a8e1175bSopenharmony_ci    @property
771a8e1175bSopenharmony_ci    def is_valid(self) -> bool:
772a8e1175bSopenharmony_ci        return True
773a8e1175bSopenharmony_ci
774a8e1175bSopenharmony_ci    def arguments(self)-> List[str]:
775a8e1175bSopenharmony_ci        args = super().arguments()
776a8e1175bSopenharmony_ci        return  ["MBEDTLS_ECP_DP_CURVE25519"] + args
777a8e1175bSopenharmony_ci
778a8e1175bSopenharmony_ci
779a8e1175bSopenharmony_ciclass EcpP448Raw(bignum_common.ModOperationCommon,
780a8e1175bSopenharmony_ci                 EcpTarget):
781a8e1175bSopenharmony_ci    """Test cases for ECP P448 fast reduction."""
782a8e1175bSopenharmony_ci    symbol = "-"
783a8e1175bSopenharmony_ci    test_function = "ecp_mod_p_generic_raw"
784a8e1175bSopenharmony_ci    test_name = "ecp_mod_p448_raw"
785a8e1175bSopenharmony_ci    input_style = "fixed"
786a8e1175bSopenharmony_ci    arity = 1
787a8e1175bSopenharmony_ci    dependencies = ["MBEDTLS_ECP_DP_CURVE448_ENABLED"]
788a8e1175bSopenharmony_ci
789a8e1175bSopenharmony_ci    moduli = [("fffffffffffffffffffffffffffffffffffffffffffffffffffffffe"
790a8e1175bSopenharmony_ci               "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff")] # type: List[str]
791a8e1175bSopenharmony_ci
792a8e1175bSopenharmony_ci    input_values = [
793a8e1175bSopenharmony_ci        "0", "1",
794a8e1175bSopenharmony_ci
795a8e1175bSopenharmony_ci        # Modulus - 1
796a8e1175bSopenharmony_ci        ("fffffffffffffffffffffffffffffffffffffffffffffffffffffffe"
797a8e1175bSopenharmony_ci         "fffffffffffffffffffffffffffffffffffffffffffffffffffffffe"),
798a8e1175bSopenharmony_ci
799a8e1175bSopenharmony_ci        # Modulus + 1
800a8e1175bSopenharmony_ci        ("ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
801a8e1175bSopenharmony_ci         "00000000000000000000000000000000000000000000000000000000"),
802a8e1175bSopenharmony_ci
803a8e1175bSopenharmony_ci        # 2^448 - 1
804a8e1175bSopenharmony_ci        ("ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
805a8e1175bSopenharmony_ci         "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),
806a8e1175bSopenharmony_ci
807a8e1175bSopenharmony_ci        # Maximum canonical P448 multiplication result
808a8e1175bSopenharmony_ci        ("fffffffffffffffffffffffffffffffffffffffffffffffffffffffd"
809a8e1175bSopenharmony_ci         "fffffffffffffffffffffffffffffffffffffffffffffffffffffffd"
810a8e1175bSopenharmony_ci         "00000000000000000000000000000000000000000000000000000004"
811a8e1175bSopenharmony_ci         "00000000000000000000000000000000000000000000000000000004"),
812a8e1175bSopenharmony_ci
813a8e1175bSopenharmony_ci        # First 8 number generated by random.getrandbits(896) - seed(2,2)
814a8e1175bSopenharmony_ci        ("74667bffe202849da9643a295a9ac6decbd4d3e2d4dec9ef83f0be4e"
815a8e1175bSopenharmony_ci         "80371eb97f81375eecc1cb6347733e847d718d733ff98ff387c56473"
816a8e1175bSopenharmony_ci         "a7a83ee0761ebfd2bd143fa9b714210c665d7435c1066932f4767f26"
817a8e1175bSopenharmony_ci         "294365b2721dea3bf63f23d0dbe53fcafb2147df5ca495fa5a91c89b"),
818a8e1175bSopenharmony_ci        ("4da4daeb4f3f87777ad1f45ae9500ec9c5e2486c44a4a8f69dc8db48"
819a8e1175bSopenharmony_ci         "e86ec9c6e06f291b2a838af8d5c44a4eb3172062d08f1bb2531d6460"
820a8e1175bSopenharmony_ci         "f0caeef038c89b38a8acb5137c9260dc74e088a9b9492f258ebdbfe3"
821a8e1175bSopenharmony_ci         "eb9ac688b9d39cca91551e8259cc60b17604e4b4e73695c3e652c71a"),
822a8e1175bSopenharmony_ci        ("bc1b00d92838e766ef9b6bf2d037fe2e20b6a8464174e75a5f834da7"
823a8e1175bSopenharmony_ci         "0569c018eb2b5693babb7fbb0a76c196067cfdcb11457d9cf45e2fa0"
824a8e1175bSopenharmony_ci         "1d7f4275153924800600571fac3a5b263fdf57cd2c0064975c374746"
825a8e1175bSopenharmony_ci         "5cc36c270e8a35b10828d569c268a20eb78ac332e5e138e26c4454b9"),
826a8e1175bSopenharmony_ci        ("8d2f527e72daf0a54ef25c0707e338687d1f71575653a45c49390aa5"
827a8e1175bSopenharmony_ci         "1cf5192bbf67da14be11d56ba0b4a2969d8055a9f03f2d71581d8e83"
828a8e1175bSopenharmony_ci         "0112ff0f0948eccaf8877acf26c377c13f719726fd70bddacb4deeec"
829a8e1175bSopenharmony_ci         "0b0c995e96e6bc4d62b47204007ee4fab105d83e85e951862f0981ae"),
830a8e1175bSopenharmony_ci        ("84ae65e920a63ac1f2b64df6dff07870c9d531ae72a47403063238da"
831a8e1175bSopenharmony_ci         "1a1fe3f9d6a179fa50f96cd4aff9261aa92c0e6f17ec940639bc2ccd"
832a8e1175bSopenharmony_ci         "f572df00790813e32748dd1db4917fc09f20dbb0dcc93f0e66dfe717"
833a8e1175bSopenharmony_ci         "c17313394391b6e2e6eacb0f0bb7be72bd6d25009aeb7fa0c4169b14"),
834a8e1175bSopenharmony_ci        ("2bb3b36f29421c4021b7379f0897246a40c270b00e893302aba9e7b8"
835a8e1175bSopenharmony_ci         "23fc5ad2f58105748ed5d1b7b310b730049dd332a73fa0b26b75196c"
836a8e1175bSopenharmony_ci         "f87eb8a09b27ec714307c68c425424a1574f1eedf5b0f16cdfdb8394"
837a8e1175bSopenharmony_ci         "24d201e653f53d6883ca1c107ca6e706649889c0c7f3860895bfa813"),
838a8e1175bSopenharmony_ci        ("af3f5d7841b1256d5c1dc12fb5a1ae519fb8883accda6559caa538a0"
839a8e1175bSopenharmony_ci         "9fc9370d3a6b86a7975b54a31497024640332b0612d4050771d7b14e"
840a8e1175bSopenharmony_ci         "b6c004cc3b8367dc3f2bb31efe9934ad0809eae3ef232a32b5459d83"
841a8e1175bSopenharmony_ci         "fbc46f1aea990e94821d46063b4dbf2ca294523d74115c86188b1044"),
842a8e1175bSopenharmony_ci        ("7430051376e31f5aab63ad02854efa600641b4fa37a47ce41aeffafc"
843a8e1175bSopenharmony_ci         "3b45402ac02659fe2e87d4150511baeb198ababb1a16daff3da95cd2"
844a8e1175bSopenharmony_ci         "167b75dfb948f82a8317cba01c75f67e290535d868a24b7f627f2855"
845a8e1175bSopenharmony_ci         "09167d4126af8090013c3273c02c6b9586b4625b475b51096c4ad652"),
846a8e1175bSopenharmony_ci
847a8e1175bSopenharmony_ci        # Corner case which causes maximum overflow
848a8e1175bSopenharmony_ci        ("f4ae65e920a63ac1f2b64df6dff07870c9d531ae72a47403063238da1"
849a8e1175bSopenharmony_ci         "a1fe3f9d6a179fa50f96cd4aff9261aa92c0e6f17ec940639bc2ccd0B"
850a8e1175bSopenharmony_ci         "519A16DF59C53E0D49B209200F878F362ACE518D5B8BFCF9CDC725E5E"
851a8e1175bSopenharmony_ci         "01C06295E8605AF06932B5006D9E556D3F190E8136BF9C643D332"),
852a8e1175bSopenharmony_ci
853a8e1175bSopenharmony_ci        # Next 2 number generated by random.getrandbits(448)
854a8e1175bSopenharmony_ci        ("8f54f8ceacaab39e83844b40ffa9b9f15c14bc4a829e07b0829a48d4"
855a8e1175bSopenharmony_ci         "22fe99a22c70501e533c91352d3d854e061b90303b08c6e33c729578"),
856a8e1175bSopenharmony_ci        ("97eeab64ca2ce6bc5d3fd983c34c769fe89204e2e8168561867e5e15"
857a8e1175bSopenharmony_ci         "bc01bfce6a27e0dfcbf8754472154e76e4c11ab2fec3f6b32e8d4b8a"),
858a8e1175bSopenharmony_ci
859a8e1175bSopenharmony_ci    ]
860a8e1175bSopenharmony_ci
861a8e1175bSopenharmony_ci    @property
862a8e1175bSopenharmony_ci    def arg_a(self) -> str:
863a8e1175bSopenharmony_ci        return super().format_arg('{:x}'.format(self.int_a)).zfill(2 * self.hex_digits)
864a8e1175bSopenharmony_ci
865a8e1175bSopenharmony_ci    def result(self) -> List[str]:
866a8e1175bSopenharmony_ci        result = self.int_a % self.int_n
867a8e1175bSopenharmony_ci        return [self.format_result(result)]
868a8e1175bSopenharmony_ci
869a8e1175bSopenharmony_ci    @property
870a8e1175bSopenharmony_ci    def is_valid(self) -> bool:
871a8e1175bSopenharmony_ci        return True
872a8e1175bSopenharmony_ci
873a8e1175bSopenharmony_ci    def arguments(self):
874a8e1175bSopenharmony_ci        args = super().arguments()
875a8e1175bSopenharmony_ci        return  ["MBEDTLS_ECP_DP_CURVE448"] + args
876