Ramachandra Achar

50 papers A* 1A 3Misc 3Journal 27Unranked 15
YearRankTypeTitle / Venue / Authors
2024 conf
NewCAS
Anuj Mathur, Ramachandra Achar
2024 J jnl
IACR Cryptol. ePrint Arch.
Supriya Adhikary, Wai-Kong Lee, Angshuman Karmakar, Yongwoo Lee, Seong Oun Hwang, Ramachandra Achar
2023 conf
NEWCAS
Ahsan Javaid, Ramachandra Achar
2022 J jnl
IEEE Access
Wai-Kong Lee, Ramachandra Achar
2022 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Wai-Kong Lee, Hwajeong Seo, Seong Oun Hwang, Ramachandra Achar, Angshuman Karmakar, Jose Maria Bermudo Mera
2022 J jnl
IEEE Access
Muhammed Suhail Illikkal, Jai Narayan Tripathi, Vijender Kumar Sharma, Hitesh Shrimali, Ramachandra Achar
2021 J jnl
IACR Cryptol. ePrint Arch.
Wai-Kong Lee, Hwajeong Seo, Seong Oun Hwang, Angshuman Karmakar, Jose Maria Bermudo Mera, Ramachandra Achar
2021 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Wai-Kong Lee, Ramachandra Achar
2020 conf
LASCAS
Srinidhi Ganeshan, Naveen Kumar Elumalai, Ramachandra Achar
2020 J jnl
Microprocess. Microsystems
Wei Pau Kiat, Kai Ming Mok, Wai-Kong Lee, Hock Guan Goh, Ramachandra Achar
2019 conf
LASCAS
Ihsan Erdin, Ramachandra Achar
2019 J jnl
IEEE Access
Jai Narayan Tripathi, Muhammed Suhail Illikkal, Hitesh Shrimali, Ramachandra Achar
2018 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Wai-Kong Lee, Ramachandra Achar, Michel S. Nakhla
2018 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Jai Narayan Tripathi, Ramachandra Achar, Rakesh Malik
2017 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Mina A. Farhan, Michel S. Nakhla, Emad Gad, Ramachandra Achar
2014 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Douglas Paul, Ramachandra Achar, Michel S. Nakhla, Natalie Nakhla
2013 conf
LASCAS
Douglas Paul, Ramachandra Achar, Michel S. Nakhla, Natalie Nakhla
2012 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Yinghong Zhou, Emad Gad, Michel S. Nakhla, Ramachandra Achar
2011 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Ramachandra Achar, Michel S. Nakhla, Harjot S. Dhindsa, Arvind R. Sridhar, Douglas Paul, Natalie Nakhla
2010 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Nick Soveiko, Michel S. Nakhla, Ramachandra Achar
2009 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Emad Gad, Michel S. Nakhla, Ramachandra Achar, Yinghong Zhou
2009 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Changzhong Chen, Dharmendra Saraswat, Ramachandra Achar, Emad Gad, Michel S. Nakhla, Mustapha Chérif-Eddine Yagoub
2008 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Changzhong Chen, Dharmendra Saraswat, Ramachandra Achar, Emad Gad, Michel S. Nakhla, Mustapha Chérif-Eddine Yagoub
2007 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Changzhong Chen, Emad Gad, Natalie Nakhla, Ramachandra Achar
2007 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Dharmendra Saraswat, Ramachandra Achar, Michel S. Nakhla
2007 A conf
ICCAD
Natalie Nakhla, Michel S. Nakhla, Ramachandra Achar
2006 J jnl
INFORMS J. Comput.
Praveen Pai, Emad Gad, Ramachandra Achar, Michel S. Nakhla, Roni Khazaka
2006 Misc conf
VLSI Design
Dharmendra Saraswat, Ramachandra Achar, Michel S. Nakhla
2006 Misc conf
VLSI Design
Gurpreet Shinh, Natalie Nakhla, Ramachandra Achar, Michel S. Nakhla, Ihsan Erdin
2005 conf
ISCAS (6)
Natalie Nakhla, Ramachandra Achar, Michel S. Nakhla
2005 conf
ASP-DAC
Natalie Nakhla, Ramachandra Achar, Michel S. Nakhla, Anestis Dounavis
2005 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Dharmendra Saraswat, Ramachandra Achar, Michel S. Nakhla
2005 conf
ISCAS (4)
Dharmendra Saraswat, Ramachandra Achar, Michel S. Nakhla
2005 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Emad Gad, Changzhong Chen, Michel S. Nakhla, Ramachandra Achar
2005 Misc conf
VLSI Design
Dharmendra Saraswat, Ramachandra Achar, Michel S. Nakhla
2004 conf
ISCAS (5)
Praveen Pai, Emad Gad, Ramachandra Achar, Roni Khazaka, Michel S. Nakhla
2004 conf
ISCAS (5)
Natalie Nakhla, Anestis Dounavis, Ramachandra Achar, Michel S. Nakhla
2003 conf
ISCAS (3)
Dharmendra Saraswat, Ramachandra Achar, Michel S. Nakhla
2002 conf
CICC
Anestis Dounavis, Ramachandra Achar, Michel S. Nakhla
2001 conf
ICECS
Anestis Dounavis, Ramachandra Achar, Michel S. Nakhla
2001 J jnl
Proc. IEEE
Ramachandra Achar, Michel S. Nakhla
2001 J jnl
Proc. IEEE
Ramachandra Achar, Michel S. Nakhla
2000 A* conf
DAC
Emad Gad, Anestis Dounavis, Michel S. Nakhla, Ramachandra Achar
2000 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Pavan K. Gunupudi, Michel S. Nakhla, Ramachandra Achar
1999 conf
ISCAS (2)
Ramachandra Achar, Michel S. Nakhla
1999 ch.
The VLSI Handbook
Michel S. Nakhla, Ramachandra Achar
1999 conf
ISCAS (6)
Pavan K. Gunupudi, Michel S. Nakhla, Ramachandra Achar
1998 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Ramachandra Achar, Michel S. Nakhla, Qi-Jun Zhang
1996 A conf
ICCAD
Guowu Zheng, Qi-Jun Zhang, Michel S. Nakhla, Ramachandra Achar
1995 A conf
ICCAD
Ramachandra Achar, Michel S. Nakhla, Qi-Jun Zhang
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 == []