Oleg Yu. Gusikhin

44 papers B 5C 7Journal 3Unranked 14
YearRankTypeTitle / Venue / Authors
2019 ed.
SMARTGREENS/VEHITS (Selected Papers)
Brian Donnellan, Cornel Klein, Markus Helfert, Oleg Yu. Gusikhin, António M. Pascoal
2017 C ed.
COMPLEXIS
Oleg Yu. Gusikhin, Víctor Méndez Muñoz, Farshad Firouzi, Dan Mønster, Victor Chang
2017 C ed.
VEHITS
Oleg Yu. Gusikhin, Markus Helfert, António M. Pascoal
2017 ed.
SMARTGREENS/VEHITS (Selected Papers)
Markus Helfert, Cornel Klein, Brian Donnellan, Oleg Yu. Gusikhin
2016 C ed.
COMPLEXIS
Oleg Yu. Gusikhin, Víctor Méndez Muñoz, Victor Chang
2016 ed.
ICINCO (Selected Papers)
Joaquim Filipe, Oleg Yu. Gusikhin, Kurosh Madani, Jurek Z. Sasiadek
2016 ed.
ICINCO (Selected Papers)
Joaquim Filipe, Kurosh Madani, Oleg Yu. Gusikhin, Jurek Z. Sasiadek
2016 C ed.
VEHITS
Markus Helfert, Oleg Yu. Gusikhin
2015 ed.
ICINCO (1)
Joaquim Filipe, Kurosh Madani, Oleg Yu. Gusikhin, Jurek Z. Sasiadek
2015 ed.
ICINCO (2)
Joaquim Filipe, Kurosh Madani, Oleg Yu. Gusikhin, Jurek Z. Sasiadek
2015 C ed.
VEHITS
Markus Helfert, Oleg Yu. Gusikhin
2015 ed.
SMARTGREENS/VEHITS (Selected Papers)
Markus Helfert, Karl-Heinz Krempels, Cornel Klein, Brian Donnellan, Oleg Yu. Gusikhin
2015 conf
ICINCO (2)
Alexander V. Smirnov, Nikolay Shilov, Oleg Yu. Gusikhin
2014 conf
ICINCO (2)
Vadim Glazunov, Oleg Yu. Gusikhin, Leonid Kurochkin, Mihail Kurochkin, Sergey Popov
2014 conf
ICUMT
Alexander V. Smirnov, Alexey M. Kashevnik, Nikolay Shilov, Oleg Yu. Gusikhin
2014 ed.
ICINCO (1)
Joaquim Filipe, Oleg Yu. Gusikhin, Kurosh Madani, Jurek Z. Sasiadek
2014 ed.
ICINCO (2)
Joaquim Filipe, Oleg Yu. Gusikhin, Kurosh Madani, Jurek Z. Sasiadek
2013 C conf
SIMULTECH
David Alfred Ostrowski, Bradley Graham, Oleg Yu. Gusikhin
2013 conf
ITST
Alexander V. Smirnov, Alexey M. Kashevnik, Nikolay Shilov, Aziz Makklya, Oleg Yu. Gusikhin
2013 conf
MIM
Oleg Yu. Gusikhin, Xiaoning Jin, Erica Klampfl, Daniel Reich, Randal Visintainer
2013 conf
ICINCO (1)
Vladimir S. Zaborovsky, Mikhail Chuvatov, Oleg Yu. Gusikhin, Abdulaziz Makkiya, David Hatton
2013 ed.
ICINCO (1)
Jean-Louis Ferrier, Oleg Yu. Gusikhin, Kurosh Madani, Jurek Z. Sasiadek
2013 ed.
ICINCO (2)
Jean-Louis Ferrier, Oleg Yu. Gusikhin, Kurosh Madani, Jurek Z. Sasiadek
2012 J jnl
Interfaces
Ada Barlatt, Amy Cohn, Oleg Yu. Gusikhin, Yakov M. Fradkin, Rich Davidson, John Batey
2012 ed.
ICINCO (1)
Jean-Louis Ferrier, Alain Bernard, Oleg Yu. Gusikhin, Kurosh Madani
2012 ed.
ICINCO (2)
Jean-Louis Ferrier, Alain Bernard, Oleg Yu. Gusikhin, Kurosh Madani
2011 ed.
ICINCO (1)
Jean-Louis Ferrier, Alain Bernard, Oleg Yu. Gusikhin, Kurosh Madani
2011 ed.
ICINCO (2)
Jean-Louis Ferrier, Alain Bernard, Oleg Yu. Gusikhin, Kurosh Madani
2011 conf
SIMULTECH (Selected Papers)
Perry MacNeille, Oleg Yu. Gusikhin, Mark Jennings, Ciro Soto, Sujith Rapolu
2011 conf
ICINCO (2)
Perry MacNeille, Kacie Theisen, Oleg Yu. Gusikhin
2011 C conf
SIMULTECH
Oleg Yu. Gusikhin
2010 J jnl
Comput. Oper. Res.
Ada Barlatt, Amy Mainville Cohn, Oleg Yu. Gusikhin
2010 conf
ICINCO (1)
Oleg Yu. Gusikhin
2010 B conf
Petri Nets
Oleg Yu. Gusikhin, Erica Klampfl
2010 conf
ICINCO (1)
Oleg Yu. Gusikhin, Perry MacNeille, Amy Cohn
2008 B conf
CPAIOR
Ada Barlatt, Amy Mainville Cohn, Oleg Yu. Gusikhin
2007 B conf
SMC
Ada Barlatt, Amy Cohn, Oleg Yu. Gusikhin
2007 B conf
SMC
Nestor Rychtyckyj, Erica Klampfl, Oleg Yu. Gusikhin, Giuseppe Rossi
2007 J jnl
Knowl. Inf. Syst.
Oleg Yu. Gusikhin, Nestor Rychtyckyj, Dimitar P. Filev
2006 conf
ICINCO-ICSO
Oleg Yu. Gusikhin, Dimitar P. Filev, Nestor Rychtyckyj
2002 conf
ICEIS
Oleg Yu. Gusikhin
2002 conf
ICEIS
Oleg Yu. Gusikhin, Erica Klampfl, Giuseppe Rossi, Celestine Aguwa, Gene Coffman, Terry Marinak
1993 conf
KNOWHSEM
Oleg Yu. Gusikhin, Anatoly S. Kulinich
1993 B conf
ICLP
Oleg Yu. Gusikhin
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 == []