Karina Figueroa

40 papers B 8C 2Journal 10Unranked 19
YearRankTypeTitle / Venue / Authors
2025 J jnl
Int. J. Comb. Optim. Probl. Informatics
Monserrat Castro-Coria, Antonio Camarena-Ibarrola, Karina Figueroa
2025 C ed.
SPIRE
Zsuzsanna Lipták, Edleno Silva de Moura, Karina Figueroa, Ricardo Baeza-Yates
2024 conf
MCPR
Antonio Camarena-Ibarrola, Erick Ruiz-Gaona, Karina Figueroa
2023 conf
MCPR
Antonio Camarena-Ibarrola, Karina Figueroa, Axel Plancarte Curiel
2022 conf
CACIC
Karina Figueroa, Antonio Camarena-Ibarrola, Rodrigo Paredes, Nora Reyes, Braulio Ramses Hernández Martínez
2022 J jnl
Computación y Sistemas
Karina Figueroa, Antonio Camarena-Ibarrola, Luis Valero
2022 J jnl
Res. Comput. Sci.
Bryan Eduardo Martinez, Antonio Camarena-Ibarrola, Karina Figueroa
2021 conf
MCPR
Karina Figueroa, Antonio Camarena-Ibarrola, Nora Reyes
2021 conf
MICAI (2)
Antonio Camarena-Ibarrola, Miguel A. Reynoso, Karina Figueroa
2020 conf
MICAI (2)
Karina Figueroa, Nora Reyes, Antonio Camarena-Ibarrola
2020 J jnl
Res. Comput. Sci.
Karina Figueroa, Luis Valero-Elizondo, Antonio Camarena-Ibarrola, José Carlos Cortés Zavala
2020 conf
MICAI (1)
Antonio Camarena-Ibarrola, Karina Figueroa, Jonathan Garcia
2019 conf
MICAI
Karina Figueroa, Antonio Camarena-Ibarrola, Luis Valero-Elizondo
2019 J jnl
J. Intell. Fuzzy Syst.
Karina Figueroa, Antonio Camarena-Ibarrola, Luis Valero-Elizondo, Nora Reyes
2019 J jnl
Multim. Tools Appl.
Antonio Camarena-Ibarrola, Karina Figueroa, Héctor Tejeda, Luis Valero-Elizondo
2019 B conf
SISAP
Karina Figueroa, Nora Reyes
2018 conf
MCPR
Karina Figueroa, Nora Reyes, Antonio Camarena-Ibarrola, Luis Valero-Elizondo
2018 B conf
SISAP
Karina Figueroa, Rodrigo Paredes, Nora Reyes
2017 conf
MCPR
Karina Figueroa, Rodrigo Paredes, José Antonio Camarena Ibarrola, Nora Reyes
2017 J jnl
Pattern Recognit. Lett.
Karina Figueroa, Rodrigo Paredes, Antonio Camarena-Ibarrola, Héctor Tejeda Villela
2016 conf
MCPR
Karina Figueroa, Ana Castro, Antonio Camarena-Ibarrola, Héctor Tejeda
2016 ed.
ENC
Karina Caro, Karina Figueroa, Marcela D. Rodríguez
2015 conf
MCPR
Karina Figueroa, Rodrigo Paredes
2015 B conf
SISAP
Karina Figueroa, Rodrigo Paredes
2014 conf
MCPR
Karina Figueroa, Rodrigo Paredes
2014 C conf
CIARP
Karina Figueroa, Antonio Camarena-Ibarrola, Jonathan Garcia, Héctor Tejeda Villela
2014 J jnl
Res. Comput. Sci.
Karina Figueroa, Cuauhtémoc Rivera Loaiza
2013 conf
ENC
Karina Figueroa, Eduardo López, Juan Manuel García-García
2013 B conf
SISAP
Guillermo Ruiz, Francisco Santoyo, Edgar Chávez, Karina Figueroa, Eric Sadit Tellez
2013 B conf
SISAP
Karina Figueroa, Rodrigo Paredes
2012 B conf
SISAP
Eric Sadit Tellez, Edgar Chávez, Karina Figueroa
2009 B conf
SISAP
Karina Figueroa, Rodrigo Paredes
2009 B conf
SISAP
Karina Figueroa, Kimmo Fredriksson
2009 J jnl
ACM J. Exp. Algorithmics
Karina Figueroa, Edgar Chávez, Gonzalo Navarro, Rodrigo Paredes
2008 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Edgar Chávez, Karina Figueroa, Gonzalo Navarro
2007 conf
WEA
Karina Figueroa, Kimmo Fredriksson
2006 conf
WEA
Karina Figueroa, Edgar Chávez, Gonzalo Navarro, Rodrigo Paredes
2006 conf
WEA
Rodrigo Paredes, Edgar Chávez, Karina Figueroa, Gonzalo Navarro
2005 conf
MICAI
Edgar Chávez, Karina Figueroa, Gonzalo Navarro
2004 conf
MICAI
Edgar Chávez, Karina Figueroa
tests/unit/test_decompile_utils.py
← Index tests/unit/test_decompile_utils.py python
"""Unit tests for decompiler utility modules:
- bninja/utils/hashes.py
- bninja/utils/json_encoder.py
- bninja/analysis/low_level_normalization.py
"""
import hashlib
import json
import pytest


# ============================================================================
# 1a. hashes.py
# ============================================================================

from redb.extractors.decompiler.bninja.utils.hashes import (
    calculate_md5,
    calculate_sha256,
    calculate_tlsh,
)


class TestCalculateMD5:
    def test_calculate_md5_known_value(self):
        expected = hashlib.md5(b"test").hexdigest()
        assert calculate_md5("test") == expected

    def test_calculate_md5_empty(self):
        expected = hashlib.md5(b"").hexdigest()
        assert calculate_md5("") == expected


class TestCalculateSHA256:
    def test_calculate_sha256_known_value(self):
        expected = hashlib.sha256(b"hello world").hexdigest()
        assert calculate_sha256("hello world") == expected

    def test_calculate_sha256_empty_string(self):
        result = calculate_sha256("")
        assert len(result) == 64
        assert all(c in "0123456789abcdef" for c in result)


class TestCalculateTLSH:
    def test_calculate_tlsh_long_data(self):
        # TLSH requires >= 50 bytes
        data = "A" * 100
        result = calculate_tlsh(data)
        assert result is not None
        assert isinstance(result, str)

    def test_calculate_tlsh_short_data(self):
        data = "A" * 10
        result = calculate_tlsh(data)
        assert result is None

    def test_calculate_tlsh_deterministic(self):
        data = "x" * 200
        assert calculate_tlsh(data) == calculate_tlsh(data)



# ============================================================================
# 1b. json_encoder.py
# ============================================================================

from redb.extractors.decompiler.bninja.utils.json_encoder import BinaryNinjaEncoder


class TestBinaryNinjaEncoder:
    def test_encode_value_confidence_object(self):
        obj = type("VC", (), {"value": 42, "confidence": 255})()
        result = json.dumps(obj, cls=BinaryNinjaEncoder)
        assert json.loads(result) == 42

    def test_encode_str_fallback(self):
        obj = type("Obj", (), {"__str__": lambda self: "custom_repr"})()
        result = json.dumps(obj, cls=BinaryNinjaEncoder)
        assert json.loads(result) == "custom_repr"

    def test_encode_normal_types(self):
        data = {"a": 1, "b": [2, 3], "c": "hello"}
        result = json.dumps(data, cls=BinaryNinjaEncoder)
        assert json.loads(result) == data

    def test_encode_set_via_str(self):
        # Python sets have __str__, so BinaryNinjaEncoder converts them
        # to their string repr instead of raising TypeError.
        result = json.dumps(set([1, 2, 3]), cls=BinaryNinjaEncoder)
        parsed = json.loads(result)
        assert isinstance(parsed, str)
        assert "1" in parsed


# ============================================================================
# 1c. low_level_normalization.py
# ============================================================================

from redb.extractors.decompiler.bninja.analysis.low_level_normalization import (
    LowLevelNormalization,
)


class MockIL:
    """Mock IL node for normalization tests."""
    def __init__(self, operation, operands=None):
        self.operation = operation
        self.operands = operands or []


class TestLowLevelNormalization:
    def setup_method(self):
        self.normalizer = LowLevelNormalization()

    def test_normalize_single_instruction(self):
        node = MockIL(operation=5)
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [5]

    def test_normalize_nested_operands(self):
        child1 = MockIL(operation=10)
        child2 = MockIL(operation=20)
        root = MockIL(operation=1, operands=[child1, child2])
        result = self.normalizer.normalize_instruction_all_levels(root)
        assert result == [1, 10, 20]

    def test_normalize_empty_operands(self):
        node = MockIL(operation=42, operands=[])
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [42]

    def test_normalize_list_operands(self):
        # Simulates phi-node style list operands
        inner = MockIL(operation=99)
        node = MockIL(operation=7, operands=[[inner]])
        result = self.normalizer.normalize_instruction_all_levels(node)
        assert result == [7, 99]

    def test_normalize_none_input(self):
        result = self.normalizer.normalize_instruction_all_levels(None)
        assert result == []