Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ dependencies = [
"rstr",
"exrex",
"joblib",
#"automata-lib",
"automata-lib @ git+https://github.com/StefanosChaliasos/automata.git@add-support-for-charclass"
]

[project.optional-dependencies]
Expand All @@ -33,9 +35,8 @@ dev = [

[tool.ruff]
line-length = 88
target-version = "py38"
lint.select = ["E", "F", "W"]
lint.extend-select = ["I"]
target-version = "py312"
lint.select = ["E", "F", "W", "I"]
lint.ignore = ["F401", "E501"]

[tool.ruff.format]
Expand Down
2 changes: 1 addition & 1 deletion scripts/lint_and_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def run_formatter() -> int:

def run_tests() -> int:
"""Placeholder for future test execution."""
print("Running Tests (Placeholder)...")
print("Running Tests...")
return run_command("pytest")


Expand Down
15 changes: 15 additions & 0 deletions src/zkregex_fuzzer/chars.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import string


def create_range(start_char: str, end_char: str) -> set[str]:
"""
Create a set of characters from start_char to end_char.
"""
return {chr(i) for i in range(ord(start_char), ord(end_char) + 1)}


LATIN_EXT_CHARS = create_range("¡", "ƿ")
GREEK_CHARS = create_range("Ͱ", "Ͽ")
CYRILLIC_CHARS = create_range("Ѐ", "ӿ")
ASCII_CHARS = set(string.printable)
ALL_CHARS = ASCII_CHARS.union(LATIN_EXT_CHARS).union(GREEK_CHARS).union(CYRILLIC_CHARS)
10 changes: 9 additions & 1 deletion src/zkregex_fuzzer/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from pathlib import Path

from zkregex_fuzzer.configs import GENERATORS, TARGETS, VALID_INPUT_GENERATORS
from zkregex_fuzzer.fuzzer import fuzz_with_database, fuzz_with_grammar
from zkregex_fuzzer.fuzzer import fuzz_with_database, fuzz_with_dfa, fuzz_with_grammar
from zkregex_fuzzer.grammar import REGEX_GRAMMAR
from zkregex_fuzzer.harness import HarnessStatus
from zkregex_fuzzer.logger import logger
Expand Down Expand Up @@ -240,6 +240,14 @@ def do_fuzz(args):
inputs_num=args.inputs_num,
kwargs=kwargs,
)
elif args.fuzzer == "dfa":
fuzz_with_dfa(
target_implementation=args.target,
oracle_params=(args.oracle == "valid", args.valid_input_generator),
regex_num=args.regex_num,
inputs_num=args.inputs_num,
kwargs=kwargs,
)


def do_reproduce(args):
Expand Down
15 changes: 13 additions & 2 deletions src/zkregex_fuzzer/configs.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
from zkregex_fuzzer.grammar import REGEX_GRAMMAR
from zkregex_fuzzer.regexgen import DatabaseRegexGenerator, GrammarRegexGenerator
from zkregex_fuzzer.regexgen import (
DatabaseRegexGenerator,
DFARegexGenerator,
GrammarRegexGenerator,
)
from zkregex_fuzzer.runner import CircomRunner, NoirRunner, PythonReRunner
from zkregex_fuzzer.vinpgen import ExrexGenerator, GrammarBasedGenerator, RstrGenerator
from zkregex_fuzzer.vinpgen import (
DFAWalkerGenerator,
ExrexGenerator,
GrammarBasedGenerator,
RstrGenerator,
)

TARGETS = {
"circom": CircomRunner,
Expand All @@ -17,9 +26,11 @@
"grammar": GrammarBasedGenerator,
"rstr": RstrGenerator,
"exrex": ExrexGenerator,
"dfa": DFAWalkerGenerator,
}

GENERATORS = {
"grammar": GrammarRegexGenerator,
"database": DatabaseRegexGenerator,
"dfa": DFARegexGenerator,
}
Loading