Octavian Buiu

21 papers A 1B 2Journal 14Unranked 4
YearRankTypeTitle / Venue / Authors
2025 J jnl
Mach. Learn. Knowl. Extr.
Liviu Bilteanu, Corneliu Octavian Dumitru, Andreea Dumachi, Florin Alexandrescu, Radu C. Popa, Octavian Buiu, Andreea Iren Serban
2024 conf
SAMOS
Catalin Bogdan Ciobanu, Honorius Gâlmeanu, Alexandru Puscasu, Mihai Gologanu, Octavian Buiu, Mihai Antonescu, Vlad-Gabriel Serbu, Vasile-Madalin Moise, Cristian-Tiberius Axinte, Alexandru-Tudor Popovici, George-Iulian Uleru, Andrei Stan, Mihai Munteanu, Alexandru Drimbarean, Csaba Nemeti, Danut Rotar, Daniel Grosu, Cosmin Moisa, Bogdan Ditu, Petre Cristian Trusca, Marius Antache, Simona Costinescu, Mari-Anais Sachian, George Suciu, Cristian Gheorghe, Cristina Tudor, Kejsi Koci
2023 J jnl
Sensors
Radu C. Popa, Cosmin-Andrei Serban, Andrei Barborica, Ana-Maria Zagrean, Octavian Buiu, Niculae Dumbravescu, Alexandru-Catalin Paslaru, Alexandru Cosmin Obreja, Cristina Pachiu, Marius Stoian, Catalin Marculescu, Antonio Radoi, Silviu Vulpe, Marian Ion
2021 J jnl
Sensors
Bogdan-Catalin Serban, Cornel Cobianu, Niculae Dumbravescu, Octavian Buiu, Marius Bumbac, Cristina Mihaela Nicolescu, Cosmin Cobianu, Mihai Brezeanu, Cristina Pachiu, Matei Serbanescu
2019 A conf
ECAI
Octavian Ionescu, Viorel Dumitru, Emil Pricop, Octavian Buiu, Cornel Cobianu, Mihai Raneti, Stefan Pircalabu, Costin Marica
2016 conf
ESSDERC
Viorel Avramescu, Andrea De Luca, Mihai Brezeanu, Syed Zeeshan Ali, Florin Udrea, Octavian Buiu, Cornel Cobianu, Bogdan-Catalin Serban, Julian W. Gardner, Viorel Dumitru, Alisa Stratulat
2015 J jnl
Sensors
Alisa Stratulat, Bogdan-Catalin Serban, Andrea De Luca, Viorel Avramescu, Cornel Cobianu, Mihai Brezeanu, Octavian Buiu, Lucian Diamandescu, Marcel Feder, Syed Zeeshan Ali, Florin Udrea
2011 J jnl
Microelectron. Reliab.
V. V. N. Obreja, C. Codreanu, D. Poenar, Octavian Buiu
2008 J jnl
Eng. Lett.
Yajie Chen, Steve Hall, Liam McDaid, Octavian Buiu, Peter M. Kelly
2007 B conf
IJCNN
Thomas Dowrick, Steve Hall, Liam McDaid, Octavian Buiu, Peter M. Kelly
2007 conf
World Congress on Engineering
Yajie Chen, Steve Hall, Liam McDaid, Octavian Buiu, Peter M. Kelly
2007 J jnl
Microelectron. Reliab.
Y. V. Gomeniuk, A. N. Nazarov, Ya. N. Vovk, V. S. Lysenko, Yi Lu, Octavian Buiu, Steve Hall, R. J. Potter, Paul R. Chalker
2007 J jnl
Microelectron. Reliab.
I. P. Tyagulskyy, I. N. Osiyuk, V. S. Lysenko, A. N. Nazarov, Steve Hall, Octavian Buiu, Y. Lu, Richard Potter, Paul R. Chalker
2007 J jnl
Microelectron. Reliab.
Ivona Z. Mitrovic, Octavian Buiu, Steve Hall, C. Bungey, T. Wagner, W. Davey, Y. Lu
2007 J jnl
Microelectron. Reliab.
Octavian Buiu, Steve Hall, Olof Engström, B. Raeissi, Max Christian Lemme, Paul K. Hurley, Karim Cherkaoui
2007 J jnl
Microelectron. Reliab.
P. Taechakumput, Stephen Taylor, Octavian Buiu, R. J. Potter, Paul R. Chalker, A. C. Jones
2007 J jnl
Microelectron. Reliab.
Y. Lu, Octavian Buiu, Steve Hall, Ivona Z. Mitrovic, W. Davey, R. J. Potter, Paul R. Chalker
2006 conf
ISNN (2)
Yajie Chen, Steve Hall, Liam McDaid, Octavian Buiu, Peter M. Kelly
2006 B conf
IJCNN
Yajie Chen, Steve Hall, Liam McDaid, Octavian Buiu, Peter M. Kelly
2005 J jnl
Microelectron. Reliab.
Y. Lu, Octavian Buiu, Steve Hall, Paul K. Hurley
2003 J jnl
Microelectron. Reliab.
K. I. Nuttall, Octavian Buiu, V. V. N. Obreja
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 == []