Injun Choi

53 papers A* 2A 2C 2Journal 32Unranked 14
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Seunghun Baek, Injun Choi, Mustafa Dere, Minjeong Kim, Guorong Wu, Won Hwa Kim
2024 conf
A-SSCC
Jimin Koo, Haidam Choi, Yoontae Jung, Ji-Hoon Suh, Sein Oh, Changhun Seok, Yegeun Kim, Injun Choi, Heewon Choee, Sunglim Han, Jiho Chun, Hoyong Seong, Sohmyung Ha, Minkyu Je
2024 J jnl
IEEE Access
Donghyun Youn, Youngin Kim, Injun Choi, Yoontae Jung, Hyuntak Jeon, Kyungtae Lee, Soon-Jae Kweon, Sohmyung Ha, Minkyu Je
2024 conf
VLSI Technology and Circuits
Edward Choi, Vincent Lukito, Injun Choi, Seoyoung Lee, Ik-Joon Chang, Sohmyung Ha, Minkyu Je
2024 conf
VLSI Technology and Circuits
Hyungjoo Cho, Dongyoon Lee, Hoyong Sung, Heewon Choee, Ji-Hoon Suh, Injun Choi, Donghee Cho, Sohmyung Ha, Minkyu Je
2024 C conf
ISCAS
Sohyeon Kim, Injun Choi, Minkyu Je, Ji-Hoon Kim
2024 A conf
WACV
Hyuna Cho, Injun Choi, Suha Kwak, Won Hwa Kim
2024 A* conf
AAAI
Jaeyoon Sim, Sooyeon Jeon, Injun Choi, Guorong Wu, Won Hwa Kim
2024 J jnl
CoRR
Jaeyoon Sim, Sooyeon Jeon, Injun Choi, Guorong Wu, Won Hwa Kim
2024 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Donghyeon Yi, Seoyoung Lee, Injun Choi, Gichan Yun, Edward Jongyoon Choi, Jonghee Park, Jonghoon Kwak, Sung-Joon Jang, Sohmyung Ha, Ik-Joon Chang, Minkyu Je
2023 conf
CICC
Hoyong Seong, Donghyun Youn, Injun Choi, Junghyup Lee, Sohmyung Ha, Minkyu Je
2023 conf
CICC
Edward Choi, Injun Choi, Vincent Lukito, Dong-Hwi Choi, Donghyeon Yi, Ik-Joon Chang, Sohmyung Ha, Minkyu Je
2023 J jnl
IEEE J. Solid State Circuits
Chongsoo Jung, Hoyong Seong, Injun Choi, Sohmyung Ha, Minkyu Je
2023 J jnl
IEEE J. Solid State Circuits
Kyeongwon Jeong, Gichan Yun, Jaesuk Choi, Injun Choi, Jeehoon Son, Jae Youn Hwang, Sohmyung Ha, Minkyu Je
2023 conf
ISBI
Seunghun Baek, Injun Choi, Mustafa Dere, Minjeong Kim, Guorong Wu, Won Hwa Kim
2022 conf
CICC
Edward Choi, Injun Choi, Chanhee Jeon, Gichan Yun, Donghyeon Yi, Sohmyung Ha, Ik-Joon Chang, Minkyu Je
2022 J jnl
IEEE J. Solid State Circuits
Yoontae Jung, Soon-Jae Kweon, Hyuntak Jeon, Injun Choi, Jimin Koo, Mi Kyung Kim, Hyunjoo Jenny Lee, Sohmyung Ha, Minkyu Je
2022 J jnl
IEEE J. Emerg. Sel. Topics Circuits Syst.
Injun Choi, Edward Jongyoon Choi, Donghyeon Yi, Yoontae Jung, Hoyong Seong, Hyuntak Jeon, Soon-Jae Kweon, Ik-Joon Chang, Sohmyung Ha, Minkyu Je
2022 conf
MICCAI (1)
Injun Choi, Guorong Wu, Won Hwa Kim
2022 J jnl
IEEE Access
Jitaek Lim, Injun Choi, Sanghyun Sung
2021 conf
A-SSCC
Yoontae Jung, Soon-Jae Kweon, Hyuntak Jeon, Taeju Lee, Injun Choi, Kyeongwon Jeong, Mi Kyung Kim, Hyunjoo Jenny Lee, Sohmyung Ha, Minkyu Je
2021 conf
VLSI Circuits
Hyuntak Jeon, Injun Choi, Young-Han Kim, Se-Un Shin, Minkyu Je
2021 conf
VLSI Circuits
Soon-Jae Kweon, Joonho Gil, Chulhyun Park, Sein Oh, Yoontae Jung, Injun Choi, Song-I Cheon, Hung Phan Dang, Ja-Hyuck Koo, Geunhoe Kim, Sohmyung Ha, Minkyu Je
2020 J jnl
Sensors
Hyuntak Jeon, Injun Choi, Soon-Jae Kweon, Minkyu Je
2020 J jnl
IEEE Access
Seunghoon Lee, Injun Choi, Hokyeom Kim, Jitaek Lim, Sanghyun Sung
2019 J jnl
IEEE J. Solid State Circuits
Hyuntak Jeon, Jun-Suk Bang, Yoontae Jung, Injun Choi, Minkyu Je
2018 conf
ASP-DAC
Injun Choi, Ji-Hoon Kim
2018 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Injun Choi, Ji-Hoon Kim
2017 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Injun Choi, Ji-Hoon Kim
2015 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Hyeji Kim, Injun Choi, Wooseok Byun, Jong-Yeol Lee, Ji-Hoon Kim
2014 conf
AP-BPM
Jinyoun Lee, Sung-Nyun Hearn, Jinwoo Kim, Injun Choi
2011 J jnl
Expert Syst. Appl.
Kwangmyeong Kim, Injun Choi, Chulsoon Park
2008 J jnl
Decis. Support Syst.
Michael V. Mannino, Sa Neung Hong, Injun Choi
2008 J jnl
Int. J. Comput. Integr. Manuf.
Namchul Do, Injun Choi, Minseok Song
2008 J jnl
Data Knowl. Eng.
Injun Choi, Jisoo Jung, Michael V. Mannino, Chulsoon Park
2007 J jnl
Comput. Ind.
Jisoo Jung, Injun Choi, Minseok Song
2006 J jnl
Int. J. Comput. Integr. Manuf.
Injun Choi, Suk-Hwan Suh, Kwang-Myung Kim, Minseok Song, M. Jang, Byeong-Eon Lee
2006 J jnl
Comput. Aided Des.
Suk-Hwan Suh, Dae-Hyuck Chung, Byeong-Eon Lee, Seungjun Shin, Injun Choi, Kwang-Myung Kim
2005 J jnl
Comput. Ind.
Injun Choi, Hyunbae Jeong, Minseok Song, Young U. Ryu
2004 J jnl
Comput. Ind.
Chulsoon Park, Injun Choi
2003 J jnl
Comput. Ind.
Injun Choi, Minseok Song, Chulsoon Park, Namkyu Park
2002 J jnl
Int. J. Comput. Integr. Manuf.
Injun Choi, Chulsoon Park, Changwoo Lee
2002 J jnl
Eur. J. Oper. Res.
Injun Choi, Chulsoon Park, Changwoo Lee
2000 J jnl
Int. J. Comput. Integr. Manuf.
Injun Choi, Heeje Cho, Sungmoon Bae, Seokjin Hyun
1995 ch.
Modern Database Systems
Won Kim, Injun Choi, Sunit K. Gala, Mark Scheevel
1994 J jnl
Inf. Syst. Res.
Michael V. Mannino, Sukumar Rathnam, Injun Choi, Veronica P. Tseng
1993 J jnl
Distributed Parallel Databases
Won Kim, Injun Choi, Sunit K. Gala, Mark Scheevel
1991 C conf
ICIS
Michael V. Mannino, Injun Choi, Sukumar Rathnam
1991 J jnl
OOPS Messenger
Injun Choi, Michael V. Mannino
1990 A conf
ER
Michael V. Mannino, Injun Choi
1990 J jnl
IEEE Trans. Software Eng.
Michael V. Mannino, Injun Choi, Don S. Batory
1990 conf
DS-4
Injun Choi, Michael V. Mannino, Veronica P. Tseng
1989 A* conf
ICDE
Michael V. Mannino, Injun Choi, Don S. Batory
tests/integration/test_base_extractor.py
← Index tests/integration/test_base_extractor.py python
"""
Integration tests for the base Extractor class.
"""
import pytest
import hashlib
import math
from unittest.mock import Mock, patch, MagicMock
from collections import Counter

pytestmark = [pytest.mark.integration]


class TestExtractorStaticMethods:
    """Tests for static methods in Extractor class."""

    def test_process_binary_string_printable(self):
        """Test processing a printable binary string."""
        from redb.extractors.extractor import Extractor

        # Test with printable ASCII characters
        input_bytes = b"Hello World\x00\x00\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert result == "Hello World"

    def test_process_binary_string_non_printable(self):
        """Test processing a string with non-printable characters."""
        from redb.extractors.extractor import Extractor

        # Test with non-printable characters
        input_bytes = b"\x01\x02Hello\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert "\\x01" in result
        assert "\\x02" in result
        assert "Hello" in result

    def test_process_binary_string_empty(self):
        """Test processing an empty binary string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"\x00\x00\x00"
        result = Extractor.process_binary_string(input_bytes)
        assert result == ""

    def test_process_binary_string_all_printable(self):
        """Test processing a fully printable string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"TestString123"
        result = Extractor.process_binary_string(input_bytes)
        assert result == "TestString123"

    def test_remove_non_utf8_valid(self):
        """Test removing non-UTF8 characters from valid UTF8 string."""
        from redb.extractors.extractor import Extractor

        input_bytes = b"Hello World"
        result = Extractor.remove_non_utf8(input_bytes)
        assert result == b"Hello World"

    def test_remove_non_utf8_with_invalid(self):
        """Test removing non-UTF8 characters from mixed string."""
        from redb.extractors.extractor import Extractor

        # Mix of valid UTF8 and invalid bytes
        input_bytes = b"Hello\xff\xfeWorld"
        result = Extractor.remove_non_utf8(input_bytes)
        # Should remove the invalid bytes
        assert b"\xff" not in result
        assert b"\xfe" not in result
        assert b"Hello" in result
        assert b"World" in result

    def test_remove_non_utf8_empty(self):
        """Test removing non-UTF8 from empty string."""
        from redb.extractors.extractor import Extractor

        result = Extractor.remove_non_utf8(b"")
        assert result == b""


class TestExtractorEntropyCalculation:
    """Tests for entropy calculation in Extractor class."""

    def test_calculate_entropy_empty_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with empty data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(b"")
            assert result == 0.0

    def test_calculate_entropy_uniform_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with uniform (low entropy) data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # All same bytes = 0 entropy
            uniform_data = b"\x00" * 256
            result = extractor.calculate_entropy(uniform_data)
            assert result == 0.0

    def test_calculate_entropy_random_data(self, elf_binary_path, mock_logger, high_entropy_data):
        """Test entropy calculation with random (high entropy) data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(high_entropy_data)
            # Random data should have entropy close to 8 (max for bytes)
            assert result > 7.0

    def test_calculate_entropy_binary_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with binary data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # Two equally distributed values = 1 bit entropy
            binary_data = b"\x00\x01" * 128
            result = extractor.calculate_entropy(binary_data)
            assert abs(result - 1.0) < 0.01

    def test_calculate_entropy_string_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with string data."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            # String with two equally distributed characters
            string_data = "ab" * 100
            result = extractor.calculate_entropy(string_data)
            assert abs(result - 1.0) < 0.01


class TestExtractorInitialization:
    """Tests for Extractor initialization."""

    def test_extractor_hashes_computed_on_init(self, elf_binary_path, mock_logger, known_hashes):
        """Test that hashes are computed during initialization."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            assert extractor.md5 == known_hashes['md5']
            assert extractor.sha1 == known_hashes['sha1']
            assert extractor.sha256 == known_hashes['sha256']

    def test_extractor_hash_dataclass_created(self, elf_binary_path, mock_logger, known_hashes):
        """Test that Hash dataclass is created during initialization."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            assert extractor.hash.md5 == known_hashes['md5']
            assert extractor.hash.sha1 == known_hashes['sha1']
            assert extractor.hash.sha256 == known_hashes['sha256']

    def test_extractor_binary_cached_property(self, elf_binary_path, mock_logger, elf_binary_content):
        """Test that binary content is loaded as cached property."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)

            # Access binary property
            binary = extractor.binary
            assert binary == elf_binary_content

            # Second access should return cached value (same id)
            assert extractor.binary is binary

    def test_extractor_with_exporters(self, elf_binary_path, mock_logger, mock_print_exporter):
        """Test extractor initialization with exporters."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[mock_print_exporter]
            )

            assert len(extractor.exporters) == 1
            assert extractor.exporters[0] is mock_print_exporter

    def test_extractor_with_index_prefix(self, elf_binary_path, mock_logger):
        """Test extractor initialization with custom index prefix."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                index_prefix="custom_prefix"
            )

            assert "custom_prefix" in extractor.elastic_index

    def test_extractor_known_benign_flag(self, elf_binary_path, mock_logger):
        """Test extractor with known_benign flag."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                known_benign=True
            )

            assert extractor.known_benign is True
            assert extractor.known_malicious is False

    def test_extractor_known_malicious_flag(self, elf_binary_path, mock_logger):
        """Test extractor with known_malicious flag."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                known_malicious=True
            )

            assert extractor.known_benign is False
            assert extractor.known_malicious is True


class TestExtractorExportData:
    """Tests for export_data method."""

    def test_export_data_with_print_exporter(self, elf_binary_path, mock_logger, mock_print_exporter, capsys):
        """Test export_data with PrintExporter."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[mock_print_exporter]
            )

            result = extractor.export_data()
            # Should succeed with PrintExporter
            assert result is True

    def test_export_data_no_exporters(self, elf_binary_path, mock_logger):
        """Test export_data with no exporters configured."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(
                elf_binary_path,
                mock_logger,
                exporters=[]
            )

            result = extractor.export_data()
            # Should succeed with no exporters (nothing to export)
            assert result is True


class TestExtractorEdgeCases:
    """Tests for edge cases in Extractor class."""

    def test_extractor_with_nonexistent_file(self, mock_logger):
        """Test extractor with non-existent file."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            with pytest.raises(FileNotFoundError):
                BasicPropertiesExtractor("/nonexistent/file.bin", mock_logger)

    def test_entropy_none_data(self, elf_binary_path, mock_logger):
        """Test entropy calculation with None returns 0."""
        from redb.extractors.basicproperties import BasicPropertiesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = BasicPropertiesExtractor(elf_binary_path, mock_logger)
            result = extractor.calculate_entropy(None)
            assert result == 0.0

    def test_process_binary_string_high_bytes(self):
        """Test processing binary string with high byte values."""
        from redb.extractors.extractor import Extractor

        # Characters above 126 are non-printable
        input_bytes = b"\x7f\x80\x81\xff"
        result = Extractor.process_binary_string(input_bytes)
        assert "\\x7f" in result
        assert "\\x80" in result
        assert "\\xff" in result