Vasco Brattka

127 papers A* 1A 3B 4C 25Misc 2Journal 80Unranked 7
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Vasco Brattka, Christopher Sorg
2026 J jnl
CoRR
Vasco Brattka, Guillaume Chirache
2025 C conf
CiE
Vasco Brattka, Hendrik Smischliaew
2025 J jnl
CoRR
Vasco Brattka, Hendrik Smischliaew
2025 C conf
CiE
Vasco Brattka, Emmanuel Rauzy
2025 J jnl
CoRR
Vasco Brattka, Emmanuel Rauzy
2025 J jnl
CoRR
Vasco Brattka
2025 J jnl
Dagstuhl Reports
Vasco Brattka, Alberto Marcone, Arno Pauly, Linda Westrick, Kenneth Gill
2023 J jnl
CoRR
Vasco Brattka
2023 C conf
CiE
Vasco Brattka
2023 J jnl
J. Symb. Log.
Vasco Brattka
2022 J jnl
Comput.
Vasco Brattka, Noam Greenberg, Iskander Sh. Kalimullin, Mariya Ivanova Soskova
2021 J jnl
Ann. Pure Appl. Log.
Vasco Brattka, Guido Gherardi
2021 J jnl
Log. Methods Comput. Sci.
Vasco Brattka
2020 J jnl
Comput.
Vasco Brattka, Damir D. Dzhafarov, Alberto Marcone, Arno Pauly
2020 J jnl
CoRR
Vasco Brattka
2020 J jnl
J. Symb. Log.
Vasco Brattka, Guido Gherardi
2019 J jnl
CoRR
Vasco Brattka, Guido Gherardi
2019 J jnl
J. Math. Log.
Vasco Brattka, Stéphane Le Roux, Joseph S. Miller, Arno Pauly
2019 J jnl
Comput.
Vasco Brattka, Rod Downey, Julia F. Knight, Steffen Lempp
2018 J jnl
CoRR
Vasco Brattka
2018 J jnl
Log. Methods Comput. Sci.
Vasco Brattka
2018 J jnl
Dagstuhl Reports
Vasco Brattka, Damir D. Dzhafarov, Alberto Marcone, Arno Pauly
2018 J jnl
Notre Dame J. Formal Log.
Vasco Brattka, Matthew Hendtlass, Alexander P. Kreuzer
2018 J jnl
Log. Methods Comput. Sci.
Vasco Brattka, Arno Pauly
2018 J jnl
CoRR
Vasco Brattka, Guido Gherardi
2017 J jnl
Ann. Pure Appl. Log.
Vasco Brattka, Andrea Cettolo, Guido Gherardi, Alberto Marcone, Matthias Schröder
2017 J jnl
Dagstuhl Reports
Klaus Ambos-Spies, Vasco Brattka, Rodney G. Downey, Steffen Lempp
2017 A conf
STACS
Vasco Brattka, Rupert Hölzl, Rutger Kuyper
2017 J jnl
Theory Comput. Syst.
Vasco Brattka, Matthew Hendtlass, Alexander P. Kreuzer
2017 J jnl
J. Symb. Log.
Vasco Brattka, Tahina Rakotoniaina
2017 conf
Computability and Complexity
Vasco Brattka, Guido Gherardi, Rupert Hölzl, Arno Pauly
2017 J jnl
CoRR
Vasco Brattka, Guido Gherardi, Arno Pauly
2016 C conf
CiE
Vasco Brattka
2016 J jnl
CoRR
Vasco Brattka
2016 J jnl
Comput.
Vasco Brattka, Paola Bonizzoni, Olivier Bournez, Elvira Mayordomo
2016 J jnl
CoRR
Vasco Brattka, Arno Pauly
2016 C conf
CiE
Vasco Brattka, Stéphane Le Roux, Joseph S. Miller, Arno Pauly
2016 J jnl
CoRR
Vasco Brattka, Guido Gherardi, Rupert Hölzl, Arno Pauly
2015 A conf
STACS
Vasco Brattka, Guido Gherardi, Rupert Hölzl
2015 J jnl
Dagstuhl Reports
Vasco Brattka, Akitoshi Kawamura, Alberto Marcone, Arno Pauly
2015 J jnl
CoRR
Vasco Brattka, Matthew Hendtlass, Alexander P. Kreuzer
2015 J jnl
CoRR
Vasco Brattka, Matthew Hendtlass, Alexander P. Kreuzer
2015 J jnl
Math. Struct. Comput. Sci.
Ulrich Berger, Vasco Brattka, Victor L. Selivanov, Dieter Spreen, Hideki Tsuiki
2015 J jnl
Inf. Comput.
Vasco Brattka, Guido Gherardi, Rupert Hölzl
2014 ch.
Turing's Legacy
Jeremy Avigad, Vasco Brattka
2014 book
Logic, Computation, Hierarchies
Vasco Brattka, Hannes Diener, Dieter Spreen
2013 J jnl
CoRR
Vasco Brattka, Rupert Hölzl, Guido Gherardi
2013 C ed.
CiE
Paola Bonizzoni, Vasco Brattka, Benedikt Löwe
2012 J jnl
Ann. Pure Appl. Log.
Vasco Brattka, Matthew de Brecht, Arno Pauly
2012 J jnl
CoRR
Jeremy Avigad, Vasco Brattka
2012 J jnl
CoRR
Vasco Brattka, Stéphane Le Roux, Arno Pauly
2012 J jnl
Comput.
Vasco Brattka, Paola Bonizzoni, S. Barry Cooper, Benedikt Löwe, Elvira Mayordomo
2012 J jnl
Ann. Pure Appl. Log.
Ulrich Berger, Vasco Brattka, Andrei S. Morozov, Dieter Spreen
2012 C conf
CiE
Vasco Brattka, Stéphane Le Roux, Arno Pauly
2012 J jnl
Ann. Pure Appl. Log.
Vasco Brattka, Guido Gherardi, Alberto Marcone
2011 J jnl
Dagstuhl Reports
Ulrich Berger, Vasco Brattka, Victor L. Selivanov, Dieter Spreen, Hideki Tsuiki
2011 J jnl
Bull. Symb. Log.
Vasco Brattka, Guido Gherardi
2011 J jnl
CoRR
Vasco Brattka, Joseph S. Miller, André Nies
2011 J jnl
CoRR
Vasco Brattka, Guido Gherardi, Alberto Marcone
2011 J jnl
J. Symb. Log.
Vasco Brattka, Guido Gherardi
2010 J jnl
CoRR
Vasco Brattka, Matthew de Brecht, Arno Pauly
2010 J jnl
Ann. Pure Appl. Log.
Vasco Brattka, Ruth Dillhage
2010 C conf
CCA
Vasco Brattka, Arno Pauly
2009 J jnl
Ann. Pure Appl. Log.
Vasco Brattka
2009 conf
ICTCS
Vasco Brattka, Guido Gherardi
2009 J jnl
J. Log. Comput.
Vasco Brattka, Guido Gherardi
2009 J jnl
J. Univers. Comput. Sci.
Vasco Brattka, Pieter Collins, Robert Rettinger
2009 C conf
CCA
Vasco Brattka, Guido Gherardi
2009 ed.
ILC
Margaret Archibald, Vasco Brattka, Valentin Goranko, Benedikt Löwe
2009 C conf
CCA
Vasco Brattka, Guido Gherardi
2008 J jnl
Arch. Math. Log.
Vasco Brattka
2008 J jnl
J. Univers. Comput. Sci.
Vasco Brattka, Hajime Ishihara, Matthias Schröder, Ning Zhong
2008 C conf
CCA
Ruth Dillhage, Vasco Brattka
2008 J jnl
Math. Log. Q.
Vasco Brattka, Hajime Ishihara, Matthias Schröder, Ning Zhong
2008 J jnl
SIAM J. Comput.
Vasco Brattka
2008 C conf
CCA
Vasco Brattka, Ruth Dillhage, Tanja Grubba, Angela Klutsch
2008 J jnl
J. Log. Algebraic Methods Program.
Vasco Brattka, Gerhard Jäger, Hans-Peter A. Künzi
2008 C ed.
CCA
Vasco Brattka, Ruth Dillhage, Tanja Grubba, Angela Klutsch
2008 J jnl
Fundam. Informaticae
Margaret Archibald, Vasco Brattka, Clemens Heuberger
2007 C conf
CiE
Vasco Brattka, Guido Gherardi
2007 J jnl
Math. Log. Q.
Vasco Brattka, Ruth Dillhage
2007 J jnl
RAIRO Theor. Informatics Appl.
Vasco Brattka, Christiane Frougny, Norbert Th. Müller
2006 J jnl
J. Complex.
Vasco Brattka, Peter Hertling, Ker-I Ko, Hideki Tsuiki
2006 C conf
CCA
Vasco Brattka, Ruth Dillhage
2006 J jnl
J. Complex.
Vasco Brattka, Atsushi Yoshikawa
2005 J jnl
J. Univers. Comput. Sci.
Vasco Brattka, Ruth Dillhage
2005 ch.
From sets and types to topology and analysis
Vasco Brattka
2005 B conf
CSL
Vasco Brattka, Matthias Schröder
2005 J jnl
Math. Log. Q.
Vasco Brattka
2005 C ed.
CCA
Vasco Brattka, Ludwig Staiger, Klaus Weihrauch
2005 C conf
CCA
Vasco Brattka
2004 J jnl
Reliab. Comput.
Vasco Brattka, Vladik Kreinovich
2004 J jnl
Theor. Comput. Sci.
Martin Ziegler, Vasco Brattka
2004 C conf
CCA
Vasco Brattka
2004 C conf
CCA
Vasco Brattka, Ludwig Staiger, Klaus Weihrauch
2004 J jnl
Math. Log. Q.
Vasco Brattka, Peter Hertling, Ker-I Ko, Ning Zhong
2003 J jnl
Theor. Comput. Sci.
Vasco Brattka, Gero Presser
2003 J jnl
Theor. Comput. Sci.
Vasco Brattka
2003 A conf
STACS
Vasco Brattka
2002 C ed.
CCA
Vasco Brattka, Matthias Schröder, Klaus Weihrauch
2002 conf
IFIP TCS
Vasco Brattka, Martin Ziegler
2002 C conf
CCA
Vasco Brattka
2002 C conf
CCA
Vasco Brattka, Matthias Schröder, Klaus Weihrauch
2002 J jnl
Math. Log. Q.
Vasco Brattka, Peter Hertling, Mariko Yasugi, Ning Zhong
2002 A* conf
ICALP
Vasco Brattka
2002 J jnl
J. Univers. Comput. Sci.
Vasco Brattka
2002 J jnl
Theor. Comput. Sci.
Vasco Brattka, Peter Hertling
2001 C ed.
CCA
Jens Blanck, Vasco Brattka, Peter Hertling
2001 B conf
MFCS
Vasco Brattka
2001 conf
CCCG
Martin Ziegler, Vasco Brattka
2000 C conf
CCA
Martin Ziegler, Vasco Brattka
2000 B conf
SOFSEM
Martin Ziegler, Vasco Brattka
2000 conf
MFCSIT
Vasco Brattka
2000 conf
Words, Languages & Combinatorics
Vasco Brattka
1999 J jnl
Math. Log. Q.
Vasco Brattka, Xizhong Zheng, Klaus Weihrauch
1999 J jnl
Theor. Comput. Sci.
Vasco Brattka, Klaus Weihrauch
1999 J jnl
Theor. Comput. Sci.
Vasco Brattka
1999
Vasco Brattka
1998 Misc conf
COCOON
Vasco Brattka, Klaus Weihrauch, Xizhong Zheng
1998 J jnl
J. Complex.
Vasco Brattka, Peter Hertling
1998 conf
MCU (2)
Vasco Brattka, Klaus Weihrauch
1997 Misc conf
COCOON
Vasco Brattka
1997 J jnl
Math. Log. Q.
Vasco Brattka
1996 C conf
CCA
Vasco Brattka
1996 B conf
SOFSEM
Vasco Brattka, Peter Hertling
1996 J jnl
Theor. Comput. Sci.
Vasco Brattka
tests/conftest.py
← Index tests/conftest.py python
"""
Pytest configuration and shared fixtures for REDB unit tests.
"""
import os
import sys
import pytest
import logging
import tempfile
import hashlib
from unittest.mock import Mock, MagicMock, patch
from pathlib import Path

# Add the project root to the path
sys.path.insert(0, str(Path(__file__).parent.parent))

# Test files directory
TEST_FILES_DIR = Path(__file__).parent.parent / "test_files"


# ============================================================================
# Logger Fixtures
# ============================================================================

@pytest.fixture
def mock_logger():
    """Create a mock logger for testing."""
    logger = Mock()
    logger.debug = Mock()
    logger.info = Mock()
    logger.warning = Mock()
    logger.error = Mock()
    return logger


@pytest.fixture
def real_logger():
    """Create a real logger for testing with debug output."""
    logger = logging.getLogger("test_logger")
    logger.setLevel(logging.DEBUG)
    if not logger.handlers:
        handler = logging.StreamHandler()
        handler.setLevel(logging.DEBUG)
        formatter = logging.Formatter('%(levelname)s - %(message)s')
        handler.setFormatter(formatter)
        logger.addHandler(handler)
    return logger


# ============================================================================
# Test Binary Files Fixtures
# ============================================================================

@pytest.fixture
def elf_binary_path():
    """Path to the ELF test binary."""
    path = TEST_FILES_DIR / "hello"
    if not path.exists():
        pytest.skip(f"Test file not found: {path}")
    return str(path)


@pytest.fixture
def elf_advanced_binary_path():
    """Path to the advanced ELF test binary."""
    path = TEST_FILES_DIR / "hello_advanced"
    if not path.exists():
        pytest.skip(f"Test file not found: {path}")
    return str(path)


@pytest.fixture
def pe_binary_path():
    """Path to the PE test binary (.NET PE)."""
    path = TEST_FILES_DIR / "d8637bdbcfc9112fcb1f0167b398e771"
    if not path.exists():
        pytest.skip(f"Test file not found: {path}")
    return str(path)


@pytest.fixture
def elf_binary_content(elf_binary_path):
    """Read the ELF test binary content."""
    with open(elf_binary_path, "rb") as f:
        return f.read()


@pytest.fixture
def pe_binary_content(pe_binary_path):
    """Read the PE test binary content."""
    with open(pe_binary_path, "rb") as f:
        return f.read()


# ============================================================================
# Temporary Files Fixtures
# ============================================================================

@pytest.fixture
def temp_binary_file():
    """Create a temporary binary file for testing."""
    with tempfile.NamedTemporaryFile(delete=False, suffix=".bin") as f:
        # Write some test data
        f.write(b"\x7fELF" + b"\x00" * 100 + b"test data")
        temp_path = f.name

    yield temp_path

    # Cleanup
    if os.path.exists(temp_path):
        os.unlink(temp_path)


@pytest.fixture
def temp_text_file():
    """Create a temporary text file for testing."""
    with tempfile.NamedTemporaryFile(delete=False, suffix=".txt", mode="w") as f:
        f.write("This is a test file with some text content.")
        temp_path = f.name

    yield temp_path

    # Cleanup
    if os.path.exists(temp_path):
        os.unlink(temp_path)


@pytest.fixture
def temp_pe_like_file():
    """Create a temporary file with PE-like header for testing."""
    with tempfile.NamedTemporaryFile(delete=False, suffix=".exe") as f:
        # MZ header
        f.write(b"MZ" + b"\x00" * 58)
        # e_lfanew pointing to PE header at offset 64
        f.write(b"\x40\x00\x00\x00")
        # PE signature at offset 64
        f.write(b"PE\x00\x00")
        # Minimal COFF header (20 bytes)
        f.write(b"\x4c\x01")  # Machine (i386)
        f.write(b"\x01\x00")  # NumberOfSections
        f.write(b"\x00" * 16)  # Rest of COFF header
        temp_path = f.name

    yield temp_path

    # Cleanup
    if os.path.exists(temp_path):
        os.unlink(temp_path)


# ============================================================================
# Mock Exporter Fixtures
# ============================================================================

@pytest.fixture
def mock_print_exporter(mock_logger):
    """Create a mock PrintExporter."""
    from redb.extractors.database_exporters import PrintExporter
    exporter = PrintExporter(mock_logger, "test_index")
    return exporter


@pytest.fixture
def mock_elasticsearch_exporter(mock_logger):
    """Create a mock ElasticsearchExporter with mocked client."""
    with patch('redb.settings.get_elasticsearch_client') as mock_client:
        mock_client.return_value = Mock()
        from redb.extractors.database_exporters import ElasticsearchExporter
        exporter = ElasticsearchExporter(mock_logger, "test_index")
        return exporter


@pytest.fixture
def mock_clickhouse_exporter(mock_logger):
    """Create a mock ClickHouseExporter with mocked client."""
    with patch('redb.settings.create_clickhouse_client') as mock_client:
        mock_client.return_value = Mock()
        from redb.extractors.database_exporters import ClickHouseExporter
        exporter = ClickHouseExporter(mock_logger, "test_index", client=Mock())
        return exporter


# ============================================================================
# Mock Settings Fixtures
# ============================================================================

@pytest.fixture
def mock_settings():
    """Mock the redb.settings module."""
    with patch.multiple(
        'redb.settings',
        ELASTIC_BINARIES_COLLECTION="test_collection",
        get_elasticsearch_client=Mock(return_value=Mock()),
        create_clickhouse_client=Mock(return_value=Mock()),
    ):
        yield


# ============================================================================
# Hash Fixtures
# ============================================================================

@pytest.fixture
def known_hashes(elf_binary_content):
    """Compute known hashes for the ELF test binary."""
    return {
        'md5': hashlib.md5(elf_binary_content).hexdigest(),
        'sha1': hashlib.sha1(elf_binary_content).hexdigest(),
        'sha256': hashlib.sha256(elf_binary_content).hexdigest(),
    }


@pytest.fixture
def pe_known_hashes(pe_binary_content):
    """Compute known hashes for the PE test binary."""
    return {
        'md5': hashlib.md5(pe_binary_content).hexdigest(),
        'sha1': hashlib.sha1(pe_binary_content).hexdigest(),
        'sha256': hashlib.sha256(pe_binary_content).hexdigest(),
    }


# ============================================================================
# Sample Data Fixtures
# ============================================================================

@pytest.fixture
def sample_binary_data():
    """Sample binary data for entropy and hash testing."""
    return b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" * 16


@pytest.fixture
def high_entropy_data():
    """High entropy random-like data for testing."""
    import random
    random.seed(42)  # Reproducible
    return bytes(random.randint(0, 255) for _ in range(256))


@pytest.fixture
def low_entropy_data():
    """Low entropy repetitive data for testing."""
    return b"\x00" * 256


# ============================================================================
# PE Object Fixtures
# ============================================================================

@pytest.fixture
def pe_object(pe_binary_path):
    """Create a pefile PE object for testing."""
    import pefile
    try:
        pe = pefile.PE(pe_binary_path)
        yield pe
        pe.close()
    except Exception as e:
        pytest.skip(f"Failed to parse PE file: {e}")


# ============================================================================
# ELF Object Fixtures
# ============================================================================

@pytest.fixture
def elf_object(elf_binary_path):
    """Create an ELFFile object for testing."""
    from elftools.elf.elffile import ELFFile
    try:
        with open(elf_binary_path, 'rb') as f:
            elf = ELFFile(f)
            # We need to keep the file open for ELFFile to work
            yield elf
    except Exception as e:
        pytest.skip(f"Failed to parse ELF file: {e}")


# ============================================================================
# Dataclass Fixtures
# ============================================================================

@pytest.fixture
def sample_hash_dataclass():
    """Create a sample Hash dataclass."""
    from redb.models.dataclasses import Hash
    return Hash(
        md5="d41d8cd98f00b204e9800998ecf8427e",
        sha1="da39a3ee5e6b4b0d3255bfef95601890afd80709",
        sha256="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    )


@pytest.fixture
def sample_hashes_dataclass():
    """Create a sample Hashes dataclass."""
    from redb.models.dataclasses import Hashes
    return Hashes(
        md5="d41d8cd98f00b204e9800998ecf8427e",
        sha1="da39a3ee5e6b4b0d3255bfef95601890afd80709",
        sha256="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        ssdeep_hash="3::",
        tlsh_hash=""
    )


@pytest.fixture
def sample_basic_properties():
    """Create a sample BasicProperties dataclass."""
    from redb.models.dataclasses import BasicProperties
    return BasicProperties(
        filename="test.exe",
        sample_name="test.exe",
        filesize=1024,
        filetype="PE32 executable",
        filetype_mime="application/x-dosexec",
        filetype_magika="pebin",
        file_entropy=6.5
    )


# ============================================================================
# Utility Functions for Tests
# ============================================================================

def compute_entropy(data):
    """Compute entropy of data for verification in tests."""
    import math
    from collections import Counter

    if not data:
        return 0.0

    if isinstance(data, str):
        counts = Counter(data)
        frequencies = (i / len(data) for i in counts.values())
        return -sum(f * math.log(f, 2) for f in frequencies)
    else:
        occurrences = Counter(bytearray(data))
        entropy = 0
        for x in occurrences.values():
            p_x = float(x) / len(data)
            entropy -= p_x * math.log(p_x, 2)
        return entropy


# Make the function available as a fixture
@pytest.fixture
def entropy_calculator():
    """Return the entropy calculation function."""
    return compute_entropy


# ============================================================================
# Skip Markers
# ============================================================================

# Mark tests that require external tools
requires_die = pytest.mark.skipif(
    not os.path.exists("/usr/bin/diec") and not os.path.exists("/usr/local/bin/diec"),
    reason="Detect It Easy (diec) not installed"
)

requires_capa = pytest.mark.skipif(
    not os.path.exists("/usr/bin/capa") and not os.path.exists("/usr/local/bin/capa"),
    reason="capa not installed"
)

requires_floss = pytest.mark.skipif(
    not os.path.exists("/usr/bin/floss") and not os.path.exists("/usr/local/bin/floss"),
    reason="floss not installed"
)