quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

ecp.py (38675B)


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