Jacques Stern

109 papers A* 38A 16B 4C 1Misc 2Journal 23Unranked 25
YearRankTypeTitle / Venue / Authors
2011 conf
FET
Jacques Stern, Robert Madelin, Norbert Kroó, Paul F. M. J. Verschure, Jerzy Langer, Paul 't Hoen
2010 A conf
STACS
Jacques Stern
2008 B conf
Selected Areas in Cryptography
Pierre-Alain Fouque, Jacques Stern, Sébastien Zimmer
2008 A* conf
EUROCRYPT
Pierre-Alain Fouque, Gilles Macario-Rat, Jacques Stern
2008 Misc conf
SCN
Benoît Chevallier-Mames, David Naccache, Jacques Stern
2008 J jnl
IACR Cryptol. ePrint Arch.
Benoît Chevallier-Mames, David Naccache, Jacques Stern
2008 conf
Public Key Cryptography
Pierre-Alain Fouque, Gilles Macario-Rat, Ludovic Perret, Jacques Stern
2007 conf
Public Key Cryptography
Vivien Dubois, Louis Granboulan, Jacques Stern
2007 A* conf
EUROCRYPT
Vivien Dubois, Pierre-Alain Fouque, Jacques Stern
2007 Misc conf
Inscrypt
Vivien Dubois, Pierre-Alain Fouque, Adi Shamir, Jacques Stern
2007 B conf
Selected Areas in Cryptography
Thomas Baignères, Jacques Stern, Serge Vaudenay
2007 A* conf
CRYPTO
Vivien Dubois, Pierre-Alain Fouque, Adi Shamir, Jacques Stern
2007 J jnl
IACR Cryptol. ePrint Arch.
Vivien Dubois, Pierre-Alain Fouque, Adi Shamir, Jacques Stern
2006 conf
ICALP (2)
Vivien Dubois, Louis Granboulan, Jacques Stern
2006 conf
Public Key Cryptography
Sébastien Kunz-Jacques, Gwenaëlle Martinet, Guillaume Poupard, Jacques Stern
2006 conf
ICALP (2)
Pierre-Alain Fouque, David Pointcheval, Jacques Stern, Sébastien Zimmer
2006 A* conf
CRYPTO
Louis Granboulan, Antoine Joux, Jacques Stern
2006 J jnl
J. Cryptol.
Marc Girault, Guillaume Poupard, Jacques Stern
2005 A conf
ASIACRYPT
Phong Q. Nguyen, Jacques Stern
2005 A* conf
EUROCRYPT
Pierre-Alain Fouque, Louis Granboulan, Jacques Stern
2004 conf
Financial Cryptography
Jacques Stern
2004 A* conf
EUROCRYPT
David Naccache, Nigel P. Smart, Jacques Stern
2004 J jnl
J. Cryptol.
Eiichiro Fujisaki, Tatsuaki Okamoto, David Pointcheval, Jacques Stern
2003 A conf
ASIACRYPT
Tatsuaki Okamoto, Jacques Stern
2003 conf
Financial Cryptography
Jacques Stern, Julien P. Stern
2003 conf
AAECC
Jacques Stern
2003 A* conf
FSE
Antoine Joux, Guillaume Poupard, Jacques Stern
2003 J jnl
IACR Cryptol. ePrint Arch.
David Naccache, Nigel P. Smart, Jacques Stern
2003 A* conf
EUROCRYPT
Jacques Stern
2002 conf
Financial Cryptography
Pierre-Alain Fouque, Jacques Stern, Jan-Geert Wackers
2002 A* conf
CRYPTO
Jacques Stern, David Pointcheval, John Malone-Lee, Nigel P. Smart
2002 C conf
ISC
Emmanuel Bresson, Jacques Stern
2002 A conf
ASIACRYPT
Dario Catalano, Phong Q. Nguyen, Jacques Stern
2002 A* conf
CRYPTO
Emmanuel Bresson, Jacques Stern, Michael Szydlo
2001 A conf
ASIACRYPT
Craig Gentry, Jakob Jonsson, Jacques Stern, Michael Szydlo
2001 conf
Public Key Cryptography
Emmanuel Bresson, Jacques Stern
2001 A conf
ASIACRYPT
Pierre-Alain Fouque, Jacques Stern
2001 J jnl
IACR Cryptol. ePrint Arch.
Pierre-Alain Fouque, Jacques Stern
2001 conf
Financial Cryptography
Olivier Baudron, Jacques Stern
2001 conf
Public Key Cryptography
Pierre-Alain Fouque, Jacques Stern
2001 A* conf
PODC
Olivier Baudron, Pierre-Alain Fouque, David Pointcheval, Jacques Stern, Guillaume Poupard
2001 A* conf
CRYPTO
Eiichiro Fujisaki, Tatsuaki Okamoto, David Pointcheval, Jacques Stern
2001 conf
CaLC
Phong Q. Nguyen, Jacques Stern
2001 A* conf
CCS
David Naccache, David Pointcheval, Jacques Stern
2000 A* conf
ICALP
Olivier Baudron, David Pointcheval, Jacques Stern
2000 A* conf
EUROCRYPT
Guillaume Poupard, Jacques Stern
2000 conf
ANTS
Phong Q. Nguyen, Jacques Stern
2000 J jnl
IACR Cryptol. ePrint Arch.
Eiichiro Fujisaki, Tatsuaki Okamoto, David Pointcheval, Jacques Stern
2000 J jnl
J. Cryptol.
David Pointcheval, Jacques Stern
2000 conf
Financial Cryptography
Pierre-Alain Fouque, Guillaume Poupard, Jacques Stern
2000 conf
Public Key Cryptography
Guillaume Poupard, Jacques Stern
2000 conf
Financial Cryptography
David Naccache, Jacques Stern
2000 A conf
CHES
Thomas Pornin, Jacques Stern
1999 A* ed.
EUROCRYPT
Jacques Stern
1999 A* conf
CCS
Guillaume Poupard, Jacques Stern
1999 A conf
CHES
Helena Handschuh, Pascal Paillier, Jacques Stern
1999 conf
Public Key Cryptography
Christophe Coupé, Phong Q. Nguyen, Jacques Stern
1999 A* conf
CRYPTO
Phong Q. Nguyen, Jacques Stern
1998 J jnl
Electron. Colloquium Comput. Complex.
Phong Q. Nguyen, Jacques Stern
1998 A* conf
CCS
David Naccache, Jacques Stern
1998 A* conf
FSE
Jacques Stern, Serge Vaudenay
1998 B conf
Selected Areas in Cryptography
Phong Q. Nguyen, Jacques Stern
1998 A* conf
CRYPTO
Phong Q. Nguyen, Jacques Stern
1998 A conf
ASIACRYPT
Guillaume Poupard, Jacques Stern
1998 J jnl
J. Cryptol.
Antoine Joux, Jacques Stern
1998 conf
Public Key Cryptography
Jacques Stern
1998 A* conf
EUROCRYPT
Guillaume Poupard, Jacques Stern
1998 A conf
ASIACRYPT
Phong Q. Nguyen, Jacques Stern
1998 J jnl
Random Struct. Algorithms
Joel Friedman, Antoine Joux, Yuval Roichman, Jacques Stern, Jean-Pierre Tillich
1997 A* conf
EUROCRYPT
David Naccache, Jacques Stern
1997 A* conf
CRYPTO
Phong Q. Nguyen, Jacques Stern
1997 A* conf
CCS
David Pointcheval, Jacques Stern
1997 conf
Financial Cryptography
Jacques Stern, Serge Vaudenay
1997 J jnl
J. Comput. Syst. Sci.
Sanjeev Arora, László Babai, Jacques Stern, Z. Sweedyk
1997 J jnl
J. Cryptol.
Don Coppersmith, Jacques Stern, Serge Vaudenay
1997 A* conf
FSE
David M'Raïhi, David Naccache, Jacques Stern, Serge Vaudenay
1996 J jnl
IEEE Trans. Inf. Theory
Jacques Stern
1996 A* conf
EUROCRYPT
Jean-Bernard Fischer, Jacques Stern
1996 A conf
ASIACRYPT
David Pointcheval, Jacques Stern
1996 A* conf
EUROCRYPT
David Pointcheval, Jacques Stern
1996 A conf
STACS
Joel Friedman, Antoine Joux, Yuval Roichman, Jacques Stern, Jean-Pierre Tillich
1996 A conf
ASIACRYPT
Florent Chabaud, Jacques Stern
1996 A conf
ASIACRYPT
Jacques Stern
1995 J jnl
J. Cryptol.
Simon R. Blackburn, Sean Murphy, Jacques Stern
1994 A conf
ASIACRYPT
Jacques Stern
1994 A* conf
CRYPTO
Jacques Stern
1994 A* conf
CRYPTO
Marc Girault, Jacques Stern
1994 J jnl
IEEE Trans. Inf. Theory
Gilles Lachaud, Jacques Stern
1993 A* conf
CRYPTO
Jacques Stern
1993 conf
AAECC
Jacques Stern
1993 A* conf
CRYPTO
Don Coppersmith, Jacques Stern, Serge Vaudenay
1993 A* conf
FOCS
Sanjeev Arora, László Babai, Jacques Stern, Z. Sweedyk
1993 A* conf
EUROCRYPT
Simon R. Blackburn, Sean Murphy, Jacques Stern
1992 J jnl
Comput. Complex.
Matthijs J. Coster, Antoine Joux, Brian A. LaMacchia, Andrew M. Odlyzko, Claus-Peter Schnorr, Jacques Stern
1992 J jnl
Appl. Algebra Eng. Commun. Comput.
Gilles Lachaud, Jacques Stern
1991 A conf
ASIACRYPT
Antoine Joux, Jacques Stern
1991 B conf
FCT
Antoine Joux, Jacques Stern
1991 conf
AAECC
Gilles Lachaud, Jacques Stern
1991 A* conf
CRYPTO
Yeow Meng Chee, Antoine Joux, Jacques Stern
1990 A* conf
EUROCRYPT
Jacques Stern, Philippe Toffin
1989 A* conf
EUROCRYPT
Jacques Stern
1988 conf
Coding Theory and Applications
Jacques Stern
1987 A* conf
FOCS
Jacques Stern
1985 J jnl
Theor. Comput. Sci.
Jacques Stern
1985 J jnl
Inf. Control.
Jacques Stern
1985 J jnl
Ann. Pure Appl. Log.
Jacques Stern
1983 J jnl
J. Symb. Log.
Jacques Stern
1978 conf
Jerusalem Conference on Information Technology
Jacques Stern
1975 J jnl
J. Symb. Log.
Jacques Stern
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