Move algorithm definitions into a top-level isctest.algorithms module

The Algorithm type, the per-algorithm constants, and the ALL_ALGORITHMS*
lookup tables are general DNSSEC key definitions used across isctest
package and the tests. Move them into a dedicated module to separate
these from the environment-specific setup that remains in
isctest.vars.algorithms.

Assisted-by: Claude:claude-opus-4-8
(cherry picked from commit 4d76b7bd9e)
This commit is contained in:
Nicki Křížek 2026-06-16 16:23:23 +00:00
parent 9a420bde2f
commit 4a93ba83a9
17 changed files with 80 additions and 53 deletions

View file

@ -274,7 +274,7 @@ def control_port():
@pytest.fixture(scope="module")
def default_algorithm():
return isctest.vars.algorithms.Algorithm.default()
return isctest.algorithms.Algorithm.default()
@pytest.fixture(scope="module")

View file

@ -12,8 +12,8 @@
from re import compile as Re
from dnssec_py.common import DNSSEC_PY_MARK
from isctest.algorithms import Algorithm
from isctest.template import NS2, NS3, zones
from isctest.vars.algorithms import Algorithm
from isctest.zone import Zone, configure_root
import isctest

View file

@ -10,6 +10,7 @@
# information regarding copyright ownership.
from . import ( # pylint: disable=redefined-builtin
algorithms,
check,
hypothesis,
instance,
@ -29,6 +30,7 @@ from . import ( # pylint: disable=redefined-builtin
# instead.
__all__ = [
"algorithms",
"check",
"hypothesis",
"instance",

View file

@ -0,0 +1,51 @@
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
#
# SPDX-License-Identifier: MPL-2.0
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, you can obtain one at https://mozilla.org/MPL/2.0/.
#
# See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership.
from typing import NamedTuple
import os
class Algorithm(NamedTuple):
name: str
number: int
bits: int
@classmethod
def default(cls):
return cls(
os.environ["DEFAULT_ALGORITHM"],
int(os.environ["DEFAULT_ALGORITHM_NUMBER"]),
int(os.environ["DEFAULT_BITS"]),
)
RSASHA1 = Algorithm("RSASHA1", 5, 2048)
NSEC3RSASHA1 = Algorithm("NSEC3RSASHA1", 7, 2048)
RSASHA256 = Algorithm("RSASHA256", 8, 2048)
RSASHA512 = Algorithm("RSASHA512", 10, 2048)
ECDSAP256SHA256 = Algorithm("ECDSAP256SHA256", 13, 256)
ECDSAP384SHA384 = Algorithm("ECDSAP384SHA384", 14, 384)
ED25519 = Algorithm("ED25519", 15, 256)
ED448 = Algorithm("ED448", 16, 456)
ALL_ALGORITHMS = [
RSASHA1,
NSEC3RSASHA1,
RSASHA256,
RSASHA512,
ECDSAP256SHA256,
ECDSAP384SHA384,
ED25519,
ED448,
]
ALL_ALGORITHMS_BY_NUM = {alg.number: alg for alg in ALL_ALGORITHMS}

View file

@ -28,8 +28,8 @@ import dns.rdatatype
import dns.tsig
import dns.zone
from isctest.algorithms import ALL_ALGORITHMS_BY_NUM, ECDSAP256SHA256, Algorithm
from isctest.instance import NamedInstance
from isctest.vars.algorithms import ALL_ALGORITHMS_BY_NUM, ECDSAP256SHA256, Algorithm
from isctest.zone import FileZoneKey
import isctest.log

View file

@ -19,6 +19,16 @@ import tempfile
import time
from .. import log
from ..algorithms import (
ALL_ALGORITHMS,
ECDSAP256SHA256,
ECDSAP384SHA384,
ED448,
ED25519,
RSASHA256,
RSASHA512,
Algorithm,
)
from .basic import BASIC_VARS
# Algorithms are selected randomly at runtime from a list of supported
@ -52,20 +62,6 @@ STABLE_PERIOD = 3600 * 3
"""number of secs during which algorithm selection remains stable"""
class Algorithm(NamedTuple):
name: str
number: int
bits: int
@classmethod
def default(cls):
return cls(
os.environ["DEFAULT_ALGORITHM"],
int(os.environ["DEFAULT_ALGORITHM_NUMBER"]),
int(os.environ["DEFAULT_BITS"]),
)
class AlgorithmSet(NamedTuple):
"""Collection of DEFAULT, ALTERNATIVE and DISABLED algorithms"""
@ -81,28 +77,6 @@ class AlgorithmSet(NamedTuple):
"disable-algorithms" configuration option."""
RSASHA1 = Algorithm("RSASHA1", 5, 2048)
NSEC3RSASHA1 = Algorithm("NSEC3RSASHA1", 7, 2048)
RSASHA256 = Algorithm("RSASHA256", 8, 2048)
RSASHA512 = Algorithm("RSASHA512", 10, 2048)
ECDSAP256SHA256 = Algorithm("ECDSAP256SHA256", 13, 256)
ECDSAP384SHA384 = Algorithm("ECDSAP384SHA384", 14, 384)
ED25519 = Algorithm("ED25519", 15, 256)
ED448 = Algorithm("ED448", 16, 456)
ALL_ALGORITHMS = [
RSASHA1,
NSEC3RSASHA1,
RSASHA256,
RSASHA512,
ECDSAP256SHA256,
ECDSAP384SHA384,
ED25519,
ED448,
]
ALL_ALGORITHMS_BY_NUM = {alg.number: alg for alg in ALL_ALGORITHMS}
ALGORITHM_SETS = {
"stable": AlgorithmSet(
default=ECDSAP256SHA256, alternative=RSASHA256, disabled=ECDSAP384SHA384

View file

@ -30,10 +30,7 @@ import dns.rdatatype
import dns.rrset
import dns.zonefile
from .log import debug
from .run import EnvCmd
from .template import NS1, Nameserver, TemplateEngine, TrustAnchor
from .vars.algorithms import (
from .algorithms import (
ALL_ALGORITHMS_BY_NUM,
ECDSAP256SHA256,
ECDSAP384SHA384,
@ -41,6 +38,9 @@ from .vars.algorithms import (
ED25519,
Algorithm,
)
from .log import debug
from .run import EnvCmd
from .template import NS1, Nameserver, TemplateEngine, TrustAnchor
KEYDIR = "keys"
DNSKEY_TTL = 3600

View file

@ -25,9 +25,9 @@ import dns.tsig
import dns.update
import pytest
from isctest.algorithms import ECDSAP256SHA256, ECDSAP384SHA384, Algorithm
from isctest.kasp import KeyProperties, KeyTimingMetadata
from isctest.util import param
from isctest.vars.algorithms import ECDSAP256SHA256, ECDSAP384SHA384, Algorithm
import isctest
import isctest.mark

View file

@ -18,8 +18,8 @@ import time
import pytest
from isctest.algorithms import Algorithm
from isctest.kasp import KeyTimingMetadata
from isctest.vars.algorithms import Algorithm
from rollover.common import TIMEDELTA
import isctest

View file

@ -15,7 +15,7 @@ import os
import pytest
from isctest.vars.algorithms import Algorithm
from isctest.algorithms import Algorithm
import isctest

View file

@ -17,7 +17,7 @@ import dns.rdataclass
import dns.rdatatype
import pytest
from isctest.vars.algorithms import Algorithm
from isctest.algorithms import Algorithm
from nsec3.common import NSEC3_MARK, check_nsec3_case
import isctest

View file

@ -15,7 +15,7 @@ import dns.rcode
import dns.update
import pytest
from isctest.vars.algorithms import RSASHA1, Algorithm
from isctest.algorithms import RSASHA1, Algorithm
from nsec3.common import NSEC3_MARK, check_nsec3_case
import isctest

View file

@ -18,7 +18,7 @@ import dns.rdataclass
import dns.rdatatype
import pytest
from isctest.vars.algorithms import RSASHA1, Algorithm
from isctest.algorithms import RSASHA1, Algorithm
from nsec3.common import NSEC3_MARK, check_nsec3_case
import isctest

View file

@ -14,7 +14,7 @@ import os
import dns.rdatatype
import pytest
from isctest.vars.algorithms import Algorithm
from isctest.algorithms import Algorithm
from nsec3.common import NSEC3_MARK, check_nsec3_case, check_nsec3param
import isctest

View file

@ -16,7 +16,7 @@ import os
import dns.rcode
import dns.rdatatype
from isctest.vars.algorithms import RSASHA256
from isctest.algorithms import RSASHA256
from nsec3.common import NSEC3_MARK, check_auth_nsec3, check_nsec3param
import isctest

View file

@ -13,10 +13,10 @@ from pathlib import Path
import shutil
from isctest.algorithms import Algorithm
from isctest.kasp import private_type_record
from isctest.run import EnvCmd
from isctest.template import NS2, NS3, TrustAnchor, Zone
from isctest.vars.algorithms import Algorithm
import isctest

View file

@ -11,10 +11,10 @@
from datetime import timedelta
from isctest.algorithms import Algorithm
from isctest.kasp import Ipub, Iret, KeyTimingMetadata, private_type_record
from isctest.run import EnvCmd
from isctest.template import NS3, Zone
from isctest.vars.algorithms import Algorithm
from rollover.setup import configure_root, configure_tld
import isctest