Jaime Gutierrez

79 papers B 10C 1Misc 2Journal 58Unranked 6
YearRankTypeTitle / Venue / Authors
2025 J jnl
IACR Cryptol. ePrint Arch.
José Luis Crespo, Jaime Gutierrez, Angel Valle
2024 J jnl
IACR Cryptol. ePrint Arch.
José Luis Crespo, Javier González-Villa, Jaime Gutierrez, Angel Valle
2024 J jnl
Mach. Learn. Sci. Technol.
José Luis Crespo, Javier González-Villa, Jaime Gutierrez, Angel Valle
2024 J jnl
Adv. Math. Commun.
Jaime Gutierrez
2023 J jnl
Finite Fields Their Appl.
Jaime Gutierrez, Jorge Jiménez Urroz
2023 J jnl
CoRR
Jaime Gutierrez, Jorge Jiménez Urroz
2022 J jnl
Cryptogr. Commun.
Jaime Gutierrez
2022 J jnl
CoRR
Jaime Gutierrez, Jorge Jiménez Urroz
2022 J jnl
IACR Cryptol. ePrint Arch.
Jaime Gutierrez, Jorge Jiménez Urroz
2021 J jnl
J. Symb. Comput.
Jaime Gutierrez, Jorge Jiménez Urroz
2019 J jnl
CoRR
Jaime Gutierrez, Jorge Jiménez Urroz
2016 J jnl
IACR Cryptol. ePrint Arch.
Oscar García Morchon, Ronald Rietman, Ludo Tolhuizen, Jose Luis Torre-Arce, Moon Sung Lee, Domingo Gómez-Pérez, Jaime Gutierrez, Berry Schoenmakers
2016 J jnl
J. Symb. Comput.
Domingo Gómez-Pérez, Jaime Gutierrez, Alina Ostafe
2015 book
Computer Algebra and Polynomials
Jaime Gutierrez, Josef Schicho, Martin Weimann
2015 J jnl
ACM Commun. Comput. Algebra
Óscar García-Morchón, Ronald Rietman, Ludo Tolhuizen, Domingo Gómez, Jaime Gutierrez
2015 conf
IWSDA
Domingo Gómez-Pérez, Ana-Isabel Gómez, Jaime Gutierrez, Oscar Moreno
2015 J jnl
ACM Commun. Comput. Algebra
Jaime Gutierrez
2014 J jnl
Finite Fields Their Appl.
Sara D. Cardell, Domingo Gómez-Pérez, Jaime Gutierrez
2014 J jnl
IACR Cryptol. ePrint Arch.
Oscar García Morchon, Ronald Rietman, Ludo Tolhuizen, Domingo Gómez-Pérez, Jaime Gutierrez
2014 J jnl
J. Symb. Comput.
Jean-Charles Faugère, Domingo Gómez-Pérez, Jaime Gutierrez, Ludovic Perret
2014 ch.
Applied Algebra and Number Theory
Domingo Gómez-Pérez, Jaime Gutierrez
2014 J jnl
J. Symb. Comput.
Jaime Gutierrez, Álvar Ibeas, Antoine Joux
2014 J jnl
Math. Comput.
Domingo Gómez, Jaime Gutierrez
2014 B conf
ISSAC
Oscar García Morchon, Domingo Gómez-Pérez, Jaime Gutierrez, Ronald Rietman, Ludo Tolhuizen
2014 J jnl
CoRR
Oscar García Morchon, Ronald Rietman, Ludo Tolhuizen, Domingo Gómez, Jaime Gutierrez
2013 J jnl
Des. Codes Cryptogr.
Jaime Gutierrez, Álvar Ibeas, Domingo Gómez-Pérez, Igor E. Shparlinski
2012 J jnl
Networks
Domingo Gómez-Pérez, Jaime Gutierrez, Álvar Ibeas
2011 J jnl
Inf. Process. Lett.
Domingo Gómez, Jaime Gutierrez, Álvar Ibeas
2010 B conf
CASC
Paula Bustillo, Jaime Gutierrez
2009 J jnl
IACR Cryptol. ePrint Arch.
Paula Bustillo, Domingo Gómez, Jaime Gutierrez, Álvar Ibeas
2009 J jnl
J. Math. Cryptol.
Jaime Gutierrez
2008 J jnl
CoRR
Jaime Gutierrez, David Sevilla
2008 J jnl
CoRR
Jaime Gutierrez, David Sevilla
2008 J jnl
CoRR
Jaime Gutierrez, David Sevilla
2008 J jnl
CoRR
Jaime Gutierrez, Rosario Rubio, David Sevilla
2008 J jnl
Finite Fields Their Appl.
Jaime Gutierrez, Arne Winterhof
2008 J jnl
CoRR
Jaime Gutierrez, David Sevilla
2008 J jnl
CoRR
Jaime Gutierrez, David Sevilla
2008 J jnl
CoRR
Domingo Gómez-Pérez, Jaime Gutierrez, Álvar Ibeas, David Sevilla
2008 J jnl
CoRR
Jaime Gutierrez, Rosario Rubio, David Sevilla
2007 J jnl
IACR Cryptol. ePrint Arch.
Domingo Gómez, Jaime Gutierrez, Álvar Ibeas
2007 J jnl
SIAM J. Discret. Math.
Domingo Gómez, Jaime Gutierrez, Álvar Ibeas
2007 J jnl
Des. Codes Cryptogr.
Jaime Gutierrez, Álvar Ibeas
2007 J jnl
IACR Cryptol. ePrint Arch.
Jaime Gutierrez, Álvar Ibeas
2007 J jnl
Theor. Comput. Sci.
Domingo Gómez, Jaime Gutierrez, Álvar Ibeas
2006 J jnl
IEEE Trans. Inf. Theory
Domingo Gómez-Pérez, Jaime Gutierrez, Álvar Ibeas
2006 J jnl
J. Symb. Comput.
Jaime Gutierrez, David Sevilla
2006 J jnl
Finite Fields Their Appl.
Domingo Gómez-Pérez, Jaime Gutierrez, Igor E. Shparlinski
2006 B conf
CASC
Jaime Gutierrez, David Sevilla
2006 J jnl
Finite Fields Their Appl.
Jaime Gutierrez, David Sevilla
2006 J jnl
J. Algorithms
Simon R. Blackburn, Domingo Gómez-Pérez, Jaime Gutierrez, Igor E. Shparlinski
2005 B conf
CASC
Domingo Gómez-Pérez, Jaime Gutierrez, Álvar Ibeas
2005 conf
Algorithmic Algebra and Logic
Jaime Gutierrez, David Sevilla
2005 Misc conf
INDOCRYPT
Domingo Gómez, Jaime Gutierrez, Álvar Ibeas
2005 J jnl
LMS J. Comput. Math.
Jaime Gutierrez, Tony Shaska
2005 Misc conf
COCOON
Domingo Gómez, Jaime Gutierrez, Álvar Ibeas, Carmen Martínez, Ramón Beivide
2005 B conf
ISIT
Carmen Martínez, Ramón Beivide, Jaime Gutierrez, Ernst M. Gabidulin
2005 J jnl
Math. Comput.
Simon R. Blackburn, Domingo Gómez-Pérez, Jaime Gutierrez, Igor E. Shparlinski
2004 B ed.
ISSAC
Jaime Gutierrez
2003 conf
ISHPC
Ramón Beivide, Carmen Martínez, Cruz Izu, Jaime Gutierrez, José A. Gregorio, José Miguel-Alonso
2003 conf
ITCC
Carmen Martínez, Ramón Beivide, Jaime Gutierrez, Cruz Izu
2003 J jnl
Appl. Algebra Eng. Commun. Comput.
Joachim von zur Gathen, Jaime Gutierrez, Rosario Rubio
2003 J jnl
IEEE Trans. Inf. Theory
Jaime Gutierrez, Igor E. Shparlinski, Arne Winterhof
2003 C conf
IMACC
Simon R. Blackburn, Domingo Gómez-Pérez, Jaime Gutierrez, Igor E. Shparlinski
2002 J jnl
Comput. Aided Geom. Des.
Jaime Gutierrez, Rosario Rubio San Miguel, Josef Schicho
2002 J jnl
J. Symb. Comput.
Jaime Gutierrez, Rosario Rubio San Miguel, David Sevilla
2002 J jnl
Comput. Aided Geom. Des.
Jaime Gutierrez, Rosario Rubio San Miguel, Josef Schicho
2001 conf
AAECC
Jaime Gutierrez, Domingo Gómez-Pérez
2001 B conf
ISSAC
Jaime Gutierrez, Rosario Rubio San Miguel, David Sevilla
1999 B conf
CASC
Joachim von zur Gathen, Jaime Gutierrez, Rosario Rubio
1999 J jnl
SIGSAM Bull.
Jaime Gutierrez, Rosario Rubio
1998 J jnl
J. Symb. Comput.
Jaime Gutierrez, Tomás Recio
1998 J jnl
J. Symb. Comput.
Jaime Gutierrez, Rosario Rubio San Miguel
1995 J jnl
J. Symb. Comput.
Cesar Alonso, Jaime Gutierrez, Tomás Recio
1995 J jnl
Comput. Aided Geom. Des.
Cesar Alonso, Jaime Gutierrez, Tomás Recio
1995 J jnl
Appl. Algebra Eng. Commun. Comput.
Cesar Alonso, Jaime Gutierrez, Tomás Recio
1992 B conf
ISSAC
Jaime Gutierrez, Tomás Recio
1992 B conf
LATIN
Jaime Gutierrez, Tomás Recio
1988 conf
AAECC
Jaime Gutierrez, Tomás Recio, C. Ruiz de Velasco
redb/extractors/macho_extractors/macho_similarity_hashes.py
← Index redb/extractors/macho_extractors/macho_similarity_hashes.py python
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor


class MachOSimilarityHashExtractor(MachOExtractor):
    """Extract Mach-O similarity hashes using machofile API.

    Similarity hashes are MD5 fingerprints of sorted, deduplicated binary components:
    - dylib_hash: MD5 of dynamic library names
    - import_hash: MD5 of imported function names
    - export_hash: MD5 of exported symbol names
    - entitlement_hash: MD5 of entitlement names and array values
    - symhash: MD5 of external undefined symbols

    For FAT binaries:
    - Inserts one row per architecture slice with per-slice hashes
    - Inserts one row for the FAT container with combined hashes

    For single-arch binaries:
    - Inserts one row with that architecture's hashes

    Note: parent_sha256 and architecture relationships are tracked in redb_basic_properties,
    not duplicated here. Use JOIN with redb_basic_properties when needed.
    """

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            macho,
        )
        self.elastic_index = self.index_prefix + "-macho_hashes"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.MACHO_HASHES.value

    def _extract_similarity_hashes(self, arch_name=None):
        """Extract similarity hashes for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            similarity_hashes = self.macho.get_similarity_hashes(arch=arch_name)
            return similarity_hashes if similarity_hashes else None
        except Exception as e:
            self.log.error(f"Error extracting similarity hashes for arch {arch_name}: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            if not self.macho:
                return None

            architectures = self.macho.get_architectures()
            if not architectures:
                return None

            if len(architectures) > 1:
                # FAT binary - return combined hashes + per-arch hashes
                results = []

                # First add combined hashes for the FAT container
                all_hashes = self.macho.get_similarity_hashes()
                combined_hashes = all_hashes.get('combined', {}) if all_hashes else {}
                if combined_hashes:
                    combined_hashes['arch_identifier'] = 'fat'
                    results.append(combined_hashes)

                # Then add per-arch hashes
                for arch_name in architectures:
                    hashes = self._extract_similarity_hashes(arch_name)
                    if hashes:
                        hashes['arch_identifier'] = arch_name
                        results.append(hashes)
                return results
            else:
                # Single architecture - return single result
                return self._extract_similarity_hashes(architectures[0])
        except Exception as e:
            self.log.error(f"Error extracting similarity hashes: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            if not self.macho:
                return None

            try:
                architectures = self.macho.get_architectures()
                is_fat = len(architectures) > 1
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # For FAT binaries, first insert a row for the container with combined hashes
            if is_fat:
                all_hashes = self.macho.get_similarity_hashes()  # Without arch returns all including 'combined'
                combined_hashes = all_hashes.get('combined', {}) if all_hashes else {}
                if combined_hashes:
                    data.append([
                        self.sha256,                                    # sha256 (FAT container)
                        combined_hashes.get('dylib_hash'),              # dylib_hash
                        combined_hashes.get('import_hash'),             # import_hash
                        combined_hashes.get('export_hash'),             # export_hash
                        combined_hashes.get('entitlement_hash'),        # entitlement_hash
                        combined_hashes.get('symhash'),                 # symhash
                        current_time,                                   # analysis_date
                    ])

            # Insert rows for each architecture slice
            for arch_name in architectures:
                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific sha256 for {arch_name}: {e}")
                    arch_sha256 = self.sha256

                # Get similarity hashes for this architecture
                similarity_hashes = self._extract_similarity_hashes(arch_name)
                if not similarity_hashes:
                    continue

                data.append([
                    arch_sha256,                                    # sha256 (arch-specific)
                    similarity_hashes.get('dylib_hash'),            # dylib_hash
                    similarity_hashes.get('import_hash'),           # import_hash
                    similarity_hashes.get('export_hash'),           # export_hash
                    similarity_hashes.get('entitlement_hash'),      # entitlement_hash
                    similarity_hashes.get('symhash'),               # symhash
                    current_time,                                   # analysis_date
                ])

            if not data:
                return None

            column_names = [
                'sha256',
                'macho_dylib_hash', 'macho_import_hash', 'macho_export_hash',
                'macho_entitlement_hash', 'macho_symhash',
                'analysis_date'
            ]

            column_type_names = [
                'FixedString(64)',
                'Nullable(FixedString(32))', 'Nullable(FixedString(32))', 'Nullable(FixedString(32))',
                'Nullable(FixedString(32))', 'Nullable(FixedString(32))',
                'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

        return None

    def get_clickhouse_table(self) -> str:
        return "redb_hashes"