JaeCheol Ryou

47 papers A* 1C 5Misc 3Journal 16Unranked 22
YearRankTypeTitle / Venue / Authors
2024 J jnl
KSII Trans. Internet Inf. Syst.
Geunyoung Kim, Yunsik Ham, JaeCheol Ryou
2023 J jnl
Clust. Comput.
Hyunjoon Cheon, Jinseung Ryu, JaeCheol Ryou, Chan Yeol Park, Yo-Sub Han
2021 J jnl
Comput.
Junhoo Park, Hyekjin Kim, Geunyoung Kim, JaeCheol Ryou
2020 J jnl
J. Ambient Intell. Humaniz. Comput.
Jinsul Kim, Yonggwan Won, Changwoo Yoon, Jin-Young Kim, Sangho Park, JaeCheol Ryou, Linh Van Ma
2020 conf
ICACT
Dongseop Lee, HyunJin Kim, JaeCheol Ryou
2020 J jnl
IEEE Access
HyunJin Kim, Sang Hong, Jinsul Kim, JaeCheol Ryou
2020 conf
BigComp
Dongseop Lee, HyunJin Kim, JaeCheol Ryou
2020 conf
ICDM (Workshops)
HyunJin Kim, Dongseop Lee, JaeCheol Ryou
2018 conf
BigComp
Geunyoung Kim, Junhoo Park, JaeCheol Ryou
2018 J jnl
KSII Trans. Internet Inf. Syst.
HyunJin Kim, PyungKoo Park, JaeCheol Ryou
2018 J jnl
J. Supercomput.
Dongwoo Kim, Sangwho Kim, JaeCheol Ryou
2018 J jnl
J. Supercomput.
Sangho Park, HyunJin Kim, JaeCheol Ryou
2017 J jnl
Int. J. Serv. Technol. Manag.
Hyeji Heo, JaeCheol Ryou
2017 conf
CSA/CUTE
Suhyoo Lee, Junhoo Park, JaeCheol Ryou
2016 conf
ICOIN
Soonhwa Sung, Cheong Youn, Eunbae Kong, JaeCheol Ryou
2015 J jnl
Multim. Tools Appl.
PyungKoo Park, SeongMin Yoo, Hoyong Ryu, Jaehyung Park, Cheol Hong Kim, Su-il Choi, JaeCheol Ryou
2015 J jnl
Clust. Comput.
SeongMin Yoo, Jinsul Kim, Jaehyung Park, Jiseung Nam, JaeCheol Ryou
2015 conf
ICUFN
Dongwoo Kim, Chankyu Park, JaeCheol Ryou
2015 conf
ICOIN
Soonhwa Sung, Cheong Youn, Eunbae Kong, JaeCheol Ryou
2014 J jnl
J. Commun. Networks
Soonhwa Sung, JaeCheol Ryou
2014 conf
FCC
Kyungsup Kim, JaeCheol Ryou, Woo-Tak Jung
2014 conf
ICUIMC
Dongwoo Kim, JaeCheol Ryou
2014 conf
FCC
SeongMin Yoo, PyungKoo Park, JinSeop Shin, Hoyong Ryu, JaeCheol Ryou
2013 J jnl
Pers. Ubiquitous Comput.
Mooseop Kim, Deok-Gyu Lee, JaeCheol Ryou
2013 conf
ICISA
PyungKoo Park, SeongMin Yoo, Hoyong Ryu, Cheol Hong Kim, Su-il Choi, JaeCheol Ryou, Jaehyung Park
2013 conf
ICISA
SeongMin Yoo, PyungKoo Park, JinSeop Shin, Jinseok Oh, Hoyong Ryu, JaeCheol Ryou
2012 conf
ICINCO (1)
Kyungsup Kim, JaeCheol Ryou
2011 conf
FGIT-CA/CES3
SooHyung Lee, Jaehyuk Kim, Wontae Kim, JaeCheol Ryou
2011 conf
CN
HeeKyoung Yi, PyungKoo Park, Seungwook Min, JaeCheol Ryou
2010 C conf
MoMM
PyungKoo Park, HeeKyoung Yi, Sangjin Hong, JaeCheol Ryou
2010 J jnl
IEICE Trans. Commun.
Jihyun Park, Jeongsu Lee, Jeonghyun Kim, JaeCheol Ryou
2008 Misc conf
WISA
Mooseop Kim, JaeCheol Ryou, Sungik Jun
2008 Misc conf
Inscrypt
Mooseop Kim, JaeCheol Ryou, Sungik Jun
2008 conf
NCM (2)
ByeongCheol Choi, Jungnyeo Kim, JaeCheol Ryou
2007 C conf
ATC
Mooseop Kim, Youngse Kim, JaeCheol Ryou, Sungik Jun
2007 C conf
ICICS
Mooseop Kim, JaeCheol Ryou
2007 C conf
APNOMS
Marie Kim, Youngjun Lee, JaeCheol Ryou
2006 C conf
ISPEC
Youngtae Yun, Sangseo Park, Yosik Kim, JaeCheol Ryou
2006 A* conf
ACM Multimedia
Junil Kim, Yeonjeong Jeong, Kisong Yoon, JaeCheol Ryou
2006 Misc conf
IWSEC
Mooseop Kim, JaeCheol Ryou, YongJe Choi, Sungik Jun
2005 conf
IMSA
Yeonjeong Jeong, Junil Kim, Jihyun Park, Kisong Yoon, JaeCheol Ryou
2005 conf
ISPA Workshops
Kiyoung Moon, Namje Park, Kyoil Chung, Sungwon Sohn, JaeCheol Ryou
2005 conf
ICOIN
SangCheol Hwang, Namhoon Lee, Kouichi Sakurai, Joong Gil Park, JaeCheol Ryou
2005 J jnl
J. Inf. Process. Syst.
Kiyoung Moon, Namje Park, Kyoil Chung, Sungwon Sohn, JaeCheol Ryou
2004 conf
ICCSA (1)
Kiyoung Moon, Namje Park, Jongsu Jang, Sungwon Sohn, JaeCheol Ryou
2004 J jnl
IEICE Trans. Inf. Syst.
Yeonjeong Jeong, Kisong Yoon, JaeCheol Ryou
2002 conf
ICWI
Junsuk Lee, Jeonghyun Kim, Kisong Yoon, Changsoon Park, JaeCheol Ryou
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 == []