James Kuffner

45 papers A* 14A 8B 2C 2Misc 1Journal 5Unranked 12
YearRankTypeTitle / Venue / Authors
2017 J jnl
IEEE Robotics Autom. Mag.
Federico L. Moro, Luis Sentis, Jaeheung Park, Christopher G. Atkeson, Michael Gienger, Ambarish Goswami, Shuuji Kajita, Oussama Khatib, James Kuffner, David E. Orin, Christian Ott, Jerry E. Pratt, Ludovic Righetti, Bruno Siciliano, Russ Tedrake, Eiichi Yoshida
2013 A* conf
ICRA
Ben Kehoe, Akihiro Matsukawa, Sal Candido, James Kuffner, Ken Goldberg
2012 J jnl
IEEE Robotics Autom. Mag.
Tamim Asfour, Kazuhito Yokoi, C. S. George Lee, James Kuffner
2011 J jnl
Int. J. Robotics Res.
Matthew Zucker, Nathan D. Ratliff, Martin Stolle, Joel E. Chestnutt, J. Andrew Bagnell, Christopher G. Atkeson, James Kuffner
2010 A* conf
ICRA
Matthew Zucker, James A. Bagnell, Christopher G. Atkeson, James Kuffner
2010 J jnl
Auton. Robots
Siddhartha S. Srinivasa, Dave Ferguson, Casey Helfrich, Dmitry Berenson, Alvaro Collet, Rosen Diankov, Garratt Gallagher, Geoffrey A. Hollinger, James Kuffner, Michael Vande Weghe
2010 conf
SIMPAR
Beatriz León, Stefan Ulbrich, Rosen Diankov, Gustavo Puche, Markus Przybylski, Antonio Morales, Tamim Asfour, Sami Moisio, Jeannette Bohg, James Kuffner
2010 C conf
MIG
Manfred Lau, James Kuffner
2009 A conf
IROS
Joel E. Chestnutt, Yutaka Takaoka, Keisuke Suga, Koichi Nishiwaki, James Kuffner, Satoshi Kagami
2009 A conf
IROS
Nikolaus Vahrenkamp, Dmitry Berenson, Tamim Asfour, James Kuffner, Rüdiger Dillmann
2009 conf
Humanoids
Rosen Diankov, Takeo Kanade, James Kuffner
2009 A conf
IROS
Joel E. Chestnutt, Koichi Nishiwaki, James Kuffner, Satoshi Kagami
2009 J jnl
ACM Trans. Graph.
Manfred Lau, Ziv Bar-Joseph, James Kuffner
2008 A* conf
ICRA
Matthew Zucker, James Kuffner, James A. Bagnell
2008 A* conf
ICRA
Dmitry Berenson, James Kuffner, Howie Choset
2008 conf
Robotics: Science and Systems
Rosen Diankov, Nathan D. Ratliff, Dave Ferguson, Siddhartha S. Srinivasa, James Kuffner
2008 conf
Humanoids
Philipp Michel, Joel E. Chestnutt, Satoshi Kagami, Koichi Nishiwaki, James Kuffner, Takeo Kanade
2008 conf
Humanoids
Rosen Diankov, Siddhartha S. Srinivasa, Dave Ferguson, James Kuffner
2008 ch.
Springer Handbook of Robotics
Oliver Brock, James Kuffner, Jing Xiao
2008 C conf
WAFR
Jur P. van den Berg, Mike Stilman, James Kuffner, Ming C. Lin, Dinesh Manocha
2007 conf
Humanoids
Joel E. Chestnutt, Koichi Nishiwaki, James Kuffner, Satoshi Kagami
2007 A* conf
ICRA
Myung Hwangbo, James Kuffner, Takeo Kanade
2007 conf
Humanoids
Dmitry Berenson, Rosen Diankov, Koichi Nishiwaki, Satoshi Kagami, James Kuffner
2007 A* conf
ICRA
Mike Stilman, Jan-Ullrich Schamburek, James Kuffner, Tamim Asfour
2007 A conf
IROS
Rosen Diankov, James Kuffner
2006 A* conf
ICRA
Dominik Bertram, James Kuffner, Rüdiger Dillmann, Tamim Asfour
2006 A* conf
ICRA
Jur P. van den Berg, Dave Ferguson, James Kuffner
2006 conf
Humanoids
Klaus Steinbach, James Kuffner, Tamim Asfour, Rüdiger Dillmann
2006 A conf
IROS
Preethi Srinivas Bhat, James Kuffner, Seth Copen Goldstein, Siddhartha S. Srinivasa
2006 A* conf
ICRA
Philipp Michel, Joel E. Chestnutt, Satoshi Kagami, Koichi Nishiwaki, James Kuffner, Takeo Kanade
2005 A* conf
ICRA
Taku Komura, Howard Leung, Shunsuke Kudoh, James Kuffner
2005 Misc conf
SenSys
Burak Aksak, Preethi Srinivas Bhat, Jason Campbell, Michael DeRosa, Stanislav Funiak, Phillip B. Gibbons, Seth Copen Goldstein, Carlos Guestrin, Ashish Gupta, Casey Helfrich, James F. Hoburg, Brian T. Kirby, James Kuffner, Peter Lee, Todd C. Mowry, Padmanabhan Pillai, Ram Ravichandran, Benjamin D. Rister, Srinivasan Seshan, Metin Sitti, Haifeng Yu
2005 A conf
SIGCSE
Elizabeth Sweedyk, Marianne de Laet, Michael C. Slattery, James Kuffner
2005 A* conf
ICRA
Mike Stilman, Christopher G. Atkeson, James Kuffner, Garth Zeglin
2005 A conf
IROS
Luis Guilamo, James Kuffner, Koichi Nishiwaki, Satoshi Kagami
2005 A* conf
ICRA
Joel E. Chestnutt, Manfred Lau, German K. M. Cheung, James Kuffner, Jessica K. Hodgins, Takeo Kanade
2005 A* conf
ICRA
Nicolas Vandapel, James Kuffner, Omead Amidi
2005 B conf
SMC
Risa Ozawa, Yutaka Takaoka, Yusuke Kida, Koichi Nishiwaki, Joel E. Chestnutt, James Kuffner, J. Kagami, H. Mizoguch, Hirochika Inoue
2005 conf
Humanoids
Philipp Michel, Joel E. Chestnutt, James Kuffner, Takeo Kanade
2004 B conf
VRST
Taku Komura, Howard Leung, James Kuffner
2004 conf
SIGGRAPH Posters
Sameer Moidu, James Kuffner, Kiran S. Bhat
2004 conf
Humanoids
Mike Stilman, James Kuffner
2003 A conf
IROS
Satoshi Kagami, James Kuffner, Koichi Nishiwaki, Kei Okada, Masayuki Inaba, Hirochika Inoue
2003 conf
CIRA
James Kuffner
1994 A* conf
SIGGRAPH
Yoshihito Koga, Koichi Kondo, James Kuffner, Jean-Claude Latombe
tests/unit/test_apk_method_extractor.py
← Index tests/unit/test_apk_method_extractor.py python
"""
Unit tests for APK method-level content extraction, hashing, and similarity.

Tests SHA-256 normalization, ssdeep/TLSH computation, obfuscation detection,
and Dalvik-to-Java type conversion.
"""
import pytest

pytestmark = [pytest.mark.unit, pytest.mark.apk, pytest.mark.decompile]


class TestHashingFunctions:
    """Tests for hashing utility functions."""

    def test_sha256_deterministic(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        h1 = compute_sha256("invoke-virtual {p0}, Lcom/Foo;->bar()V")
        h2 = compute_sha256("invoke-virtual {p0}, Lcom/Foo;->bar()V")
        assert h1 == h2

    def test_sha256_hex_length(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        assert len(compute_sha256("test")) == 64

    def test_sha256_different_inputs(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        assert compute_sha256("aaa") != compute_sha256("bbb")

    def test_ssdeep_none_for_short(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_ssdeep
        assert compute_ssdeep("short") is None

    def test_tlsh_none_for_short(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_tlsh
        assert compute_tlsh("x") is None


class TestObfuscationDetection:
    """Tests for obfuscation indicator detection."""

    def test_short_method_name_single_char(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("a", "Lcom/Foo;", "", 10)
        assert r["short_method_name"] is True

    def test_short_method_name_two_chars(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("ab", "Lcom/Foo;", "", 10)
        assert r["short_method_name"] is True

    def test_normal_method_name(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("onCreate", "Lcom/Foo;", "", 10)
        assert r["short_method_name"] is False

    def test_short_class_name(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("foo", "Lcom/a;", "", 10)
        assert r["short_class_name"] is True

    def test_normal_class_name(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        r = detect_obfuscation_indicators("foo", "Lcom/example/MainActivity;", "", 10)
        assert r["short_class_name"] is False

    def test_string_encryption_detected(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = (
            'const-string v0, "xyz"\n'
            'invoke-static {v0}, Lcom/Enc;->decrypt(Ljava/lang/String;)Ljava/lang/String;\n'
        )
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 10)
        assert r["has_string_encryption"] is True

    def test_no_string_encryption(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = 'const-string v0, "hello"\ninvoke-virtual {v0}, Ljava/lang/String;->length()I'
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 10)
        assert r["has_string_encryption"] is False

    def test_reflection_detected(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = 'invoke-virtual {v0, v1}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;'
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 10)
        assert r["has_reflection_calls"] is True

    def test_no_reflection(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = 'invoke-virtual {p0}, Lcom/Foo;->bar()V'
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 10)
        assert r["has_reflection_calls"] is False

    def test_excessive_goto_detected(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "\n".join(["goto :label"] * 10)
        # threshold = max(5, 20*0.15=3) = 5, 10 > 5
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 20)
        assert r["excessive_goto_count"] is True

    def test_no_excessive_goto(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "goto :label\nreturn-void"
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 100)
        assert r["excessive_goto_count"] is False

    def test_goto_16_counted(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "\n".join(["goto/16 :label"] * 10)
        r = detect_obfuscation_indicators("m", "Lcom/Foo;", smali, 20)
        assert r["excessive_goto_count"] is True


class TestDalvikTypeConversion:
    """Tests for Dalvik-to-Java type conversion."""

    def test_void(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("V") == "void"

    def test_primitives(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("I") == "int"
        assert dalvik_type_to_java("Z") == "boolean"
        assert dalvik_type_to_java("J") == "long"
        assert dalvik_type_to_java("F") == "float"
        assert dalvik_type_to_java("D") == "double"
        assert dalvik_type_to_java("B") == "byte"
        assert dalvik_type_to_java("S") == "short"
        assert dalvik_type_to_java("C") == "char"

    def test_object_type(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("Ljava/lang/String;") == "String"
        assert dalvik_type_to_java("Lcom/example/Foo;") == "Foo"

    def test_array_type(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("[I") == "int[]"
        assert dalvik_type_to_java("[Ljava/lang/String;") == "String[]"

    def test_empty_returns_void(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("") == "void"


class TestJavaPrototypeConversion:
    """Tests for method signature to Java prototype conversion."""

    def test_simple_method(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        assert dalvik_to_java_prototype("foo", "()V") == "void foo()"

    def test_method_with_params(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("bar", "(ILjava/lang/String;)Z")
        assert result == "boolean bar(int, String)"

    def test_method_returning_object(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("create", "()Lcom/example/Foo;")
        assert result == "Foo create()"

    def test_empty_signature(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("m", "")
        assert "m()" in result


class TestDalvikParamParsing:
    """Tests for parsing Dalvik parameter descriptors."""

    def test_empty(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        assert _parse_dalvik_params("") == []

    def test_single_primitive(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        assert _parse_dalvik_params("I") == ["I"]

    def test_multiple_primitives(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        assert _parse_dalvik_params("IZJ") == ["I", "Z", "J"]

    def test_single_object(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        assert _parse_dalvik_params("Ljava/lang/String;") == ["Ljava/lang/String;"]

    def test_mixed(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("ILjava/lang/String;Z")
        assert result == ["I", "Ljava/lang/String;", "Z"]

    def test_arrays(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("[I[Ljava/lang/String;")
        assert result == ["[I", "[Ljava/lang/String;"]

    def test_two_objects(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("Landroid/os/Bundle;Ljava/lang/String;")
        assert len(result) == 2