Jaewook Shin

56 papers A 5B 1C 2Misc 2Journal 35Unranked 10
YearRankTypeTitle / Venue / Authors
2026 J jnl
Signal Process.
Bum Yong Park, JinWoo Yoo, Won Il Lee, Jaewook Shin
2024 J jnl
CoRR
Seongmin Lee, Jaewook Shin, Youngjin Ahn, Seokin Seo, Ohjoon Kwon, Kee-Eung Kim
2023 J jnl
CoRR
Hyunwoo Kang, Jaeho Shin, Jaewook Shin, Youngseok Jang, Seung Jae Lee
2022 J jnl
IEEE Access
Jaewook Shin, Bum Yong Park, Won Il Lee, JinWoo Yoo, Jaegeol Cho
2022 J jnl
Entropy
Jaewook Shin, Jeesu Kim, Tae-Kyoung Kim, JinWoo Yoo
2022 J jnl
Symmetry
Jaewook Shin, Bum Yong Park, Won Il Lee, JinWoo Yoo
2021 J jnl
IEEE Access
Jaewook Shin, Kyuhwan Yeon, Sunbin Kim, Myoungho Sunwoo, Manbae Han
2021 J jnl
Symmetry
Jaewook Shin, Jeesu Kim, Tae-Kyoung Kim, JinWoo Yoo
2020 J jnl
IEEE Trans. Medical Imaging
Jae Eun Song, Jaewook Shin, Hongpyo Lee, Ho Joon Lee, Won-Jin Moon, Dong-Hyun Kim
2019 J jnl
Int. J. Commun. Syst.
JinWoo Yoo, Jaewook Shin, PooGyeon Park
2019 J jnl
Int. J. Commun. Syst.
JinWoo Yoo, Jaewook Shin, PooGyeon Park
2019 J jnl
IEEE Trans. Intell. Transp. Syst.
Jaewook Shin, Myoungho Sunwoo
2018 conf
ISSCC
Stanley Chen, Lei Zhou, Ian Zhuang, Jay Im, Didem Turker Melek, Jinyung Namkoong, Mayank Raj, Jaewook Shin, Yohan Frans, Ken Chang
2018 J jnl
IET Signal Process.
Jaewook Shin, JinWoo Yoo, PooGyeon Park
2018 J jnl
Signal Process.
Jaegeol Cho, Hyun Jae Baek, Bum Yong Park, Jaewook Shin
2017 J jnl
IEEE J. Solid State Circuits
Yohan Frans, Jaewook Shin, Lei Zhou, Parag Upadhyaya, Jay Im, Vassili Kireev, Mohamed Elzeftawi, Hiva Hedayati, Toan Pham, Santiago Asuncion, Chris Borrelli, Geoff Zhang, Hongtao Zhang, Ken Chang
2017 J jnl
Int. J. Commun. Syst.
JinWoo Yoo, Jaewook Shin, Insun Song, PooGyeon Park
2017 J jnl
J. Medical Syst.
Hyun Jae Baek, Jaewook Shin
2017 J jnl
IEEE Trans. Medical Imaging
Jaewook Shin, Min-Oh Kim, Sungmin Cho, Dong-Hyun Kim
2016 J jnl
IEEE J. Solid State Circuits
Shinwoong Kim, Seunghwan Hong, Kapseok Chang, Hyungsik Ju, Jaewook Shin, Byungsub Kim, Hong-June Park, Jae-Yoon Sim
2016 conf
VLSI Circuits
Yohan Frans, Mohamed Elzeftawi, Hiva Hedayati, Jay Im, Vassili Kireev, Toan Pham, Jaewook Shin, Parag Upadhyaya, Lei Zhou, Santiago Asuncion, Chris Borrelli, Geoff Zhang, Hongtao Zhang, Ken Chang
2016 J jnl
Int. J. Commun. Syst.
JinWoo Yoo, Insun Song, Jaewook Shin, PooGyeon Park
2016 J jnl
Cyberpsychology Behav. Soc. Netw.
Jaewook Shin, Mincheol Shin
2015 conf
ISSCC
Zuow-Zun Chen, Yen-Hsiang Wang, Jaewook Shin, Yan Zhao, Seyed Arash Mirhaj, Yen-Cheng Kuan, Huan-Neng Ron Chen, Chewnpu Jou, Ming-Hsien Tsai, Fu-Lung Hsueh, Mau-Chung Frank Chang
2015 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
JinWoo Yoo, Jaewook Shin, PooGyeon Park
2015 J jnl
IET Signal Process.
JinWoo Yoo, Jaewook Shin, PooGyeon Park
2014 J jnl
Signal Process.
JinWoo Yoo, Jaewook Shin, PooGyeon Park
2014 C conf
ICCE
MiJeong Yang, KwangRyul Jung, SoonYong Lim, Jaewook Shin
2014 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
JinWoo Yoo, Jaewook Shin, PooGyeon Park
2013 J jnl
IEEE Trans. Signal Process.
Jaewook Shin, Chang Hee Lee, NamWoong Kong, PooGyeon Park
2013 conf
ISPACS
NamWoong Kong, Jaewook Shin, Seok Young Lee, Ju-Man Song, Hyun-Tack Choi, PooGyeon Park
2013 J jnl
IEEE Signal Process. Lett.
Jaewook Shin, JinWoo Yoo, PooGyeon Park
2012 J jnl
IEEE J. Solid State Circuits
Jaewook Shin, Hyunchol Shin
2011 J jnl
Signal Process.
NamWoong Kong, Jaewook Shin, PooGyeon Park
2011 J jnl
J. Electr. Comput. Eng.
Jaewook Shin, Hyunchol Shin
2010 J jnl
IEICE Electron. Express
Jaewook Shin, Hyunchol Shin
2010 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Jaewook Shin, Hyunchol Shin
2010 ch.
Software Automatic Tuning, From Concepts to State-of-the-Art Results
Jaewook Shin, Mary W. Hall, Jacqueline Chame, Chun Chen, Paul D. Hovland
2010 C conf
ISCAS
Seungsoo Kim, Jaewook Shin, Hyunchol Shin
2010 A conf
ICS
Jaewook Shin, Mary W. Hall, Jacqueline Chame, Chun Chen, Paul F. Fischer, Paul D. Hovland
2009 J jnl
Microprocess. Microsystems
Jaewook Shin, Mary W. Hall, Jacqueline Chame
2009 conf
CSC
Ilya Safro, Paul D. Hovland, Jaewook Shin, Michelle Mills Strout
2009 conf
LCPC
Mary W. Hall, Jacqueline Chame, Chun Chen, Jaewook Shin, Gabe Rudy, Malik Murtaza Khan
2008 conf
CICC
Jongsik Kim, Seungsoo Kim, Jaewook Shin, Youngcho Kim, Junki Min, Kihong Kim, Hyunchol Shin
2008 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Jongsik Kim, Jaewook Shin, Seungsoo Kim, Hyunchol Shin
2008 conf
VTC Fall
Jaewook Shin, Kwang-Ryul Jung, Aesoon Park
2007 conf
VTC Spring
Jeehyeon Na, Yun Won Chung, Jaewook Shin, Sangho Lee, Sang-Ha Kim
2007 Misc conf
SAC
Jaewook Shin, Paul D. Hovland
2007 B conf
PACT
Jaewook Shin
2007 A conf
IPDPS
Chun Chen, Jaewook Shin, Shiva Kintali, Jacqueline Chame, Mary W. Hall
2005 A conf
CGO
Jaewook Shin, Mary W. Hall, Jacqueline Chame
2004 Misc conf
PDPTA
Haeryong Lee, Jaewook Shin, Jeehyeon Na, Sang-Ha Kim
2003 J jnl
J. Instr. Level Parallelism
Jaewook Shin, Jacqueline Chame, Mary W. Hall
2002 conf
IEEE PACT
Jaewook Shin, Jacqueline Chame, Mary W. Hall
2002 A conf
ICS
Jeffrey T. Draper, Jacqueline Chame, Mary W. Hall, Craig S. Steele, Tim Barrett, Jeff LaCoss, John J. Granacki, Jaewook Shin, Chun Chen, Chang Woo Kang, Ihn Kim Gokhan
1999 A conf
SC
Mary W. Hall, Peter M. Kogge, Jefferey G. Koller, Pedro C. Diniz, Jacqueline Chame, Jeff Draper, Jeff LaCoss, John J. Granacki, Jay B. Brockman, Apoorv Srivastava, William C. Athas, Vincent W. Freeh, Jaewook Shin, JoonSeok Park
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