Radu Ciprian Bilcu

40 papers A 1B 2C 3Misc 2Journal 12Unranked 19
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Aleksi Suonsivu, Lauri Salmela, Leevi Uosukainen, Edoardo Peretti, Radu Ciprian Bilcu, Giacomo Boracchi
2025 J jnl
CoRR
Luca Piano, Peng Huanwen, Radu Ciprian Bilcu
2024 J jnl
IEEE Signal Process. Lett.
Ionut Schiopu, Radu Ciprian Bilcu
2024 conf
ECCV Workshops (20)
Aleksi Suonsivu, Lauri Salmela, Edoardo Peretti, Leevi Uosukainen, Radu Ciprian Bilcu, Giacomo Boracchi
2024 J jnl
CoRR
Aleksi Suonsivu, Lauri Salmela, Edoardo Peretti, Leevi Uosukainen, Radu Ciprian Bilcu, Giacomo Boracchi
2023 conf
CVPR Workshops
Ionut Schiopu, Radu Ciprian Bilcu
2022 J jnl
IEEE Signal Process. Lett.
Ionut Schiopu, Radu Ciprian Bilcu
2022 J jnl
Sensors
Ionut Schiopu, Radu Ciprian Bilcu
2013 conf
SpeD
Corneliu Rusu, Marius Vasile Ghiurcau, Marius Sirbu, Radu Ciprian Bilcu, Jaakko Astola
2012 conf
EUSIPCO
Radu Ciprian Bilcu, Sakari Alenius, Markku Vehvilainen
2012 J jnl
Signal Process.
Marius Vasile Ghiurcau, Corneliu Rusu, Radu Ciprian Bilcu, Jaakko Astola
2011 J jnl
IEEE Signal Process. Lett.
Radu Ciprian Bilcu
2010 C conf
ISCAS
Marius Vasile Ghiurcau, Corneliu Rusu, Radu Ciprian Bilcu
2010 conf
EUSIPCO
Marius Vasile Ghiurcau, Corneliu Rusu, Jaakko Astola, Radu Ciprian Bilcu
2010 Misc conf
ICASSP
Marius Vasile Ghiurcau, Corneliu Rusu, Radu Ciprian Bilcu
2009 B conf
ICIP
Radu Ciprian Bilcu, Sakari Alenius, Markku Vehvilainen
2009 conf
DPS
Radu Ciprian Bilcu, Sakari Alenius, Markku Vehvilainen
2008 B conf
ICIP
Radu Ciprian Bilcu, Markku Vehvilainen
2008 C conf
ICISP
Radu Ciprian Bilcu, Markku Vehvilainen
2008 conf
ICECS
Radu Ciprian Bilcu, Adrian Burian, Aleksi Knuutila, Markku Vehvilainen
2008 conf
EUSIPCO
Dmytro Paliy, Alessandro Foi, Radu Ciprian Bilcu, Vladimir Katkovnik, Karen O. Egiazarian
2007 conf
ICASSP (1)
Radu Ciprian Bilcu, Markku Vehvilainen
2007 conf
ISSPA
Radu Ciprian Bilcu, Markku Vehvilainen
2007 C conf
IPAS
Dmitriy Paliy, Radu Ciprian Bilcu, Vladimir Katkovnik, Markku Vehviläinen
2007 conf
Digital Photography
Radu Ciprian Bilcu, Markku Vehvilainen
2007 conf
ISSPA
Radu Ciprian Bilcu, Mejdi Trimeche, Sakari Alenius, Markku Vehvilainen
2007 A conf
ICME
Radu Ciprian Bilcu, Markku Vehvilainen
2007 J jnl
Int. J. Imaging Syst. Technol.
Dmitriy Paliy, Vladimir Katkovnik, Radu Ciprian Bilcu, Sakari Alenius, Karen O. Egiazarian
2006 J jnl
EURASIP J. Adv. Signal Process.
Mejdi Trimeche, Radu Ciprian Bilcu, Jukka Yrjänäinen
2006 conf
ICASSP (3)
Radu Ciprian Bilcu, Adrian Burian, Markku Vehviläinen
2006 J jnl
Signal Process.
Radu Ciprian Bilcu, Pauli Kuosmanen, Karen O. Egiazarian
2005 conf
EUSIPCO
Alessandro Foi, Radu Ciprian Bilcu, Vladimir Katkovnik, Karen O. Egiazarian
2004 conf
ICASSP (2)
Radu Ciprian Bilcu, Pauli Kuosmanen, Karen O. Egiazarian
2004
Radu Ciprian Bilcu
2002 conf
ICECS
Radu Ciprian Bilcu, Pauli Kuosmanen, Karen O. Egiazarian
2002 J jnl
IEEE Signal Process. Lett.
Radu Ciprian Bilcu, Pauli Kuosmanen, Karen O. Egiazarian
2002 conf
EUSIPCO
Radu Ciprian Bilcu, Pauli Kuosmanen, Karen O. Egiazarian
2002 Misc conf
ICASSP
Radu Ciprian Bilcu, Pauli Kuosmanen, Karen O. Egiazarian
2001 conf
ICECS
Radu Ciprian Bilcu, Pauli Kuosmanen, Karen O. Egiazarian
2000 conf
EUSIPCO
Radu Ciprian Bilcu, Pauli Kuosmanen, Corneliu Rusu
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 == []