Mahammad Abdul Hannan

20 papers Journal 20
YearRankTypeTitle / Venue / Authors
2021 J jnl
Sensors
Muhamad Haziq Hasnul Hadi, Pin Jern Ker, Hui Jing Lee, Yang Sing Leong, Mahammad Abdul Hannan, Md Zaini Jamaludin, Mohd Adzir Mahdi
2021 J jnl
Sensors
Muhamad Haziq Hasnul Hadi, Pin Jern Ker, Vimal Angela Thiviyanathan, Shirley Gee Hoon Tang, Yang Sing Leong, Hui Jing Lee, Mahammad Abdul Hannan, Md Zaini Jamaludin, Mohd Adzir Mahdi
2020 J jnl
IEEE Access
Mahammad Abdul Hannan, Pin Jern Ker, Molla S. Hossain Lipu, Zhen Hang Choi, Mohamed Abdur Rahman, Kashem M. Muttaqi, Frede Blaabjerg
2019 J jnl
IEEE Access
Mahammad Abdul Hannan, Zamre ABD. Ghani, Md. Murshadul Hoque, Pin Jern Ker, Aini Hussain, Azah Mohamed
2019 J jnl
IEEE Access
Ali Saadon Al-Ogaili, Tengku Juhana Tengku Hashim, Nur Azzammudin Rahmat, Agileswari K. Ramasamy, Marayati Binti Marsadek, Mohammad Faisal, Mahammad Abdul Hannan
2019 J jnl
Sensors
Safat B. Wali, Majid Abdullateef Abdullah, Mahammad Abdul Hannan, Aini Hussain, Salina Abdul Samad, Pin Jern Ker, Muhamad Bin Mansor
2018 J jnl
IEEE Access
Mahammad Abdul Hannan, Jamal Abd Ali, Aini Hussain, Fazida Hanim Hasim, Ungku Anisa Ungku Amirulddin, Mohammad Nasir Uddin, Frede Blaabjerg
2018 J jnl
IEEE Access
Mahammad Abdul Hannan, Mohammad Faisal, Pin Jern Ker, Looe Hui Mun, Khadija Parvin, Teuku Meurah Indra Mahlia, Frede Blaabjerg
2018 J jnl
IEEE Access
Mahammad Abdul Hannan, Md. Naz Niamul Islam, Azah Mohamed, Molla S. Hossain Lipu, Pin Jern Ker, Muhammad Mahbubur Rashid, Hussain Shareef
2018 J jnl
IEEE Access
Mahammad Abdul Hannan, Molla S. Hossain Lipu, Aini Hussain, Mohamad Hanif Md. Saad, Afida Ayob
2018 J jnl
IEEE Access
Mohammad Faisal, Mahammad Abdul Hannan, Pin Jern Ker, Aini Hussain, Muhamad Bin Mansor, Frede Blaabjerg
2018 J jnl
IEEE Access
Molla S. Hossain Lipu, Mahammad Abdul Hannan, Aini Hussain, Mohamad Hanif Md. Saad, Afida Ayob, Frede Blaabjerg
2018 J jnl
IEEE Access
Mahammad Abdul Hannan, Md. Murshadul Hoque, Aini Hussain, Yushaizad Yusof, Pin Jern Ker
2018 J jnl
IEEE Access
Mahammad Abdul Hannan, Jamal Abd Ali, Pin Jern Ker, Azah Mohamed, Molla S. Hossain Lipu, Aini Hussain
2017 J jnl
EAI Endorsed Trans. Scalable Inf. Syst.
Mohammud Ershadul Haque, Mahammad Abdul Hannan, M. F. Hossain, M. M. Islam, M. J. Abedin
2014 J jnl
Sensors
Mahammad Abdul Hannan, Hussein A. Hussein, Saad Mutashar, Salina Abdul Samad, Aini Hussain
2013 J jnl
J. Comput. Sci.
Mohammud Ershadul Haque, Mohammud Fauzi Mohammud Zain, Maslina Jamil, Mahammad Abdul Hannan, Abdulla Al Suman
2012 J jnl
Sensors
Mahammad Abdul Hannan, Saad M. Abbas, Salina Abdul Samad, Aini Hussain
2011 J jnl
Sensors
Mazlina Mamat, Salina Abdul Samad, Mahammad Abdul Hannan
2010 J jnl
Sensors
Mahammad Abdul Hannan, Aini Hussain, Salina Abdul Samad
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 == []