mirror of
https://github.com/espressif/mbedtls.git
synced 2025-07-13 18:20:30 +08:00

For easier maintenance the framework repository is flattened here and added to the forked branch in source format.
103 lines
3.6 KiB
Python
103 lines
3.6 KiB
Python
"""Framework classes for generation of bignum mod test cases."""
|
|
# Copyright The Mbed TLS Contributors
|
|
# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
|
|
#
|
|
|
|
from typing import Dict, List
|
|
|
|
from . import test_data_generation
|
|
from . import bignum_common
|
|
from .bignum_data import ONLY_PRIME_MODULI
|
|
|
|
class BignumModTarget(test_data_generation.BaseTarget):
|
|
#pylint: disable=abstract-method, too-few-public-methods
|
|
"""Target for bignum mod test case generation."""
|
|
target_basename = 'test_suite_bignum_mod.generated'
|
|
|
|
|
|
class BignumModMul(bignum_common.ModOperationCommon,
|
|
BignumModTarget):
|
|
# pylint:disable=duplicate-code
|
|
"""Test cases for bignum mpi_mod_mul()."""
|
|
symbol = "*"
|
|
test_function = "mpi_mod_mul"
|
|
test_name = "mbedtls_mpi_mod_mul"
|
|
input_style = "arch_split"
|
|
arity = 2
|
|
|
|
def arguments(self) -> List[str]:
|
|
return [self.format_result(self.to_montgomery(self.int_a)),
|
|
self.format_result(self.to_montgomery(self.int_b)),
|
|
bignum_common.quote_str(self.arg_n)
|
|
] + self.result()
|
|
|
|
def result(self) -> List[str]:
|
|
result = (self.int_a * self.int_b) % self.int_n
|
|
return [self.format_result(self.to_montgomery(result))]
|
|
|
|
|
|
class BignumModSub(bignum_common.ModOperationCommon, BignumModTarget):
|
|
"""Test cases for bignum mpi_mod_sub()."""
|
|
symbol = "-"
|
|
test_function = "mpi_mod_sub"
|
|
test_name = "mbedtls_mpi_mod_sub"
|
|
input_style = "fixed"
|
|
arity = 2
|
|
|
|
def result(self) -> List[str]:
|
|
result = (self.int_a - self.int_b) % self.int_n
|
|
# To make negative tests easier, append 0 for success to the
|
|
# generated cases
|
|
return [self.format_result(result), "0"]
|
|
|
|
class BignumModInvNonMont(bignum_common.ModOperationCommon, BignumModTarget):
|
|
"""Test cases for bignum mpi_mod_inv() - not in Montgomery form."""
|
|
moduli = ONLY_PRIME_MODULI # for now only prime moduli supported
|
|
symbol = "^ -1"
|
|
test_function = "mpi_mod_inv_non_mont"
|
|
test_name = "mbedtls_mpi_mod_inv non-Mont. form"
|
|
input_style = "fixed"
|
|
arity = 1
|
|
suffix = True
|
|
disallow_zero_a = True
|
|
|
|
def result(self) -> List[str]:
|
|
result = bignum_common.invmod_positive(self.int_a, self.int_n)
|
|
# To make negative tests easier, append 0 for success to the
|
|
# generated cases
|
|
return [self.format_result(result), "0"]
|
|
|
|
class BignumModInvMont(bignum_common.ModOperationCommon, BignumModTarget):
|
|
"""Test cases for bignum mpi_mod_inv() - Montgomery form."""
|
|
moduli = ONLY_PRIME_MODULI # for now only prime moduli supported
|
|
symbol = "^ -1"
|
|
test_function = "mpi_mod_inv_mont"
|
|
test_name = "mbedtls_mpi_mod_inv Mont. form"
|
|
input_style = "arch_split" # Mont. form requires arch_split
|
|
arity = 1
|
|
suffix = True
|
|
disallow_zero_a = True
|
|
montgomery_form_a = True
|
|
|
|
def result(self) -> List[str]:
|
|
result = bignum_common.invmod_positive(self.int_a, self.int_n)
|
|
mont_result = self.to_montgomery(result)
|
|
# To make negative tests easier, append 0 for success to the
|
|
# generated cases
|
|
return [self.format_result(mont_result), "0"]
|
|
|
|
|
|
class BignumModAdd(bignum_common.ModOperationCommon, BignumModTarget):
|
|
"""Test cases for bignum mpi_mod_add()."""
|
|
count = 0
|
|
symbol = "+"
|
|
test_function = "mpi_mod_add"
|
|
test_name = "mbedtls_mpi_mod_add"
|
|
input_style = "fixed"
|
|
|
|
def result(self) -> List[str]:
|
|
result = (self.int_a + self.int_b) % self.int_n
|
|
# To make negative tests easier, append "0" for success to the
|
|
# generated cases
|
|
return [self.format_result(result), "0"]
|