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