Source code for architect.json_exporter

"""JsonExporter - export patterns as JSON signature files."""

import json
import logging
from pathlib import Path
from typing import Dict, List, Optional

logger = logging.getLogger("memdiver.architect.json_exporter")


[docs] class JsonExporter: """Export byte patterns as JSON signatures compatible with pattern_loader."""
[docs] @staticmethod def export( pattern: dict, library: str = "", tls_version: str = "", description: str = "", structural_rules: Optional[Dict[str, List[dict]]] = None, ) -> dict: """Export a pattern as a JSON signature dict. Args: pattern: Pattern dict from PatternGenerator.generate(). library: Target library name. tls_version: TLS version ('12' or '13'). description: Human-readable description. structural_rules: Optional before/after structural rules. Returns: JSON-serializable dict compatible with pattern_loader. """ name = pattern.get("name", "unnamed") length = pattern.get("length", 32) signature = { "name": name, "description": description or f"MemDiver pattern: {name}", "applicable_to": {}, "key_spec": { "length": length, "entropy_min": 4.5, }, "pattern": structural_rules or {"before": [], "after": []}, "metadata": { "generated_by": "MemDiver", "static_ratio": pattern.get("static_ratio", 0), "wildcard_pattern": pattern.get("wildcard_pattern", ""), }, } if library: signature["applicable_to"]["libraries"] = [library] if tls_version: signature["applicable_to"]["protocol_versions"] = [tls_version] logger.info("Exported JSON signature: %s", name) return signature
[docs] @staticmethod def save(signature: dict, output_path: Path) -> None: """Save a JSON signature to a file.""" with open(output_path, "w") as f: json.dump(signature, f, indent=4) logger.info("Saved signature to %s", output_path)
[docs] @staticmethod def to_string(signature: dict) -> str: """Convert a signature to a formatted JSON string.""" return json.dumps(signature, indent=4)