Oded Goldreich

567 papers A* 95A 20B 3Journal 311Unranked 27
YearRankTypeTitle / Venue / Authors
2025 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Roei Tell
2025 book
Computational Complexity and Local Algorithms
Oded Goldreich
2025 A conf
ITCS
Noga Amir, Oded Goldreich, Guy N. Rothblum
2025 J jnl
Electron. Colloquium Comput. Complex.
Irit Dinur, Oded Goldreich
2025 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Tal Herman, Guy N. Rothblum
2025 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Guy N. Rothblum
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Nader H. Bshouty, Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich, Laliv Tauber
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich, Laliv Tauber
2025 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Guy N. Rothblum
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich, Dana Ron
2025 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich
2025 ch.
Computational Complexity and Local Algorithms
Oded Goldreich, Laliv Tauber
2024 J jnl
Electron. Colloquium Comput. Complex.
Noga Amir, Oded Goldreich, Guy N. Rothblum
2024 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2024 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2024 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2024 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2024 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2024 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2023 J jnl
Comput. Complex.
Oded Goldreich, Dana Ron
2023 A conf
ITCS
Oded Goldreich, Guy N. Rothblum, Tal Skverer
2023 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Laliv Tauber
2023 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Laliv Tauber
2023 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2023 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2023 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2023 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2023 J jnl
TheoretiCS
Oded Goldreich, Dana Ron
2022 J jnl
Comput. Complex.
Oded Goldreich
2022 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Guy N. Rothblum, Tal Skverer
2022 J jnl
Electron. Colloquium Comput. Complex.
Nader H. Bshouty, Oded Goldreich
2022 A conf
ITCS
Marshall Ball, Oded Goldreich, Tal Malkin
2022 J jnl
TheoretiCS
Oded Goldreich, Avi Wigderson
2022 A conf
ITCS
Oded Goldreich, Dana Ron
2022 J jnl
CoRR
Oded Goldreich, Dana Ron
2022 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Laliv Tauber
2021 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Dana Ron
2021 A conf
CCC
Marshall Ball, Oded Goldreich, Tal Malkin
2021 A* conf
FOCS
Oded Goldreich, Avi Wigderson
2021 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2021 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2021 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2021 A conf
CCC
Oded Goldreich, Avi Wigderson
2021 J jnl
CoRR
Oded Goldreich, Avi Wigderson
2021 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Dana Ron
2021 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2021 J jnl
Theor. Comput. Sci.
Oded Goldreich, Tom Gur
2020 ch.
Computational Complexity and Property Testing
Scott E. Decatur, Oded Goldreich, Dana Ron
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich, Or Meir
2020 J jnl
Electron. Colloquium Comput. Complex.
Marshall Ball, Oded Goldreich, Tal Malkin
2020 book
Computational Complexity and Property Testing
Oded Goldreich
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich, Guy N. Rothblum
2020 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Avi Wigderson
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich
2020 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Avi Wigderson
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich, Avishay Tal
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich
2020 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich, Maya Leshkowitz
2020 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2020 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich, Dana Ron
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich, Avi Wigderson
2020 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Dana Ron
2020 ch.
Computational Complexity and Property Testing
Itai Benjamini, Oded Goldreich
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich
2020 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Avi Wigderson
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich, Liav Teichner
2020 J jnl
ACM Trans. Comput. Theory
Oded Goldreich, Dana Ron
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich
2020 ch.
Computational Complexity and Property Testing
Oded Goldreich, Guy N. Rothblum
2019 A conf
ITCS
Irit Dinur, Oded Goldreich, Tom Gur
2019 J jnl
Comput. Complex.
Oded Goldreich
2019 ch.
Providing Sound Foundations for Cryptography
Oded Goldreich, Shafi Goldwasser, Silvio Micali
2019 ch.
Providing Sound Foundations for Cryptography
Oded Goldreich, Silvio Micali, Avi Wigderson
2019 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2019 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2019 ch.
Providing Sound Foundations for Cryptography
Oded Goldreich
2019 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2019 ch.
Providing Sound Foundations for Cryptography
Oded Goldreich
2019 ch.
Providing Sound Foundations for Cryptography
Oded Goldreich
2019 ch.
Providing Sound Foundations for Cryptography
Oded Goldreich
2019 ch.
Providing Sound Foundations for Cryptography
Oded Goldreich, Silvio Micali, Avi Wigderson
2019 book
Providing Sound Foundations for Cryptography
Oded Goldreich
2019 J jnl
Electron. Colloquium Comput. Complex.
Itai Benjamini, Oded Goldreich
2019 J jnl
Electron. Colloquium Comput. Complex.
Marshall Ball, Oded Goldreich, Tal Malkin
2019 J jnl
ACM Trans. Comput. Theory
Oded Goldreich, Tom Gur, Ilan Komargodski
2019 J jnl
CoRR
Oded Goldreich
2019 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2019 A* conf
STOC
Oded Goldreich
2019 A conf
ITCS
Oded Goldreich, Dana Ron
2018 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Guy N. Rothblum
2018 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Guy N. Rothblum
2018 A* conf
FOCS
Oded Goldreich, Guy N. Rothblum
2018 J jnl
Electron. Colloquium Comput. Complex.
Irit Dinur, Oded Goldreich, Tom Gur
2018 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2018 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2018 J jnl
Comput. Complex.
Oded Goldreich, Avishay Tal
2018 J jnl
Found. Trends Theor. Comput. Sci.
Oded Goldreich
2018 J jnl
Inf. Comput.
Oded Goldreich, Tom Gur, Ron D. Rothblum
2018 A conf
ITCS
Oded Goldreich, Guy N. Rothblum
2018 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2018 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Dana Ron
2018 J jnl
Chic. J. Theor. Comput. Sci.
Oded Goldreich, Tom Gur
2017 book
Oded Goldreich
2017 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Avishay Tal
2017 J jnl
J. ACM
Oded Goldreich, Dana Ron
2017 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2017 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2017 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Guy N. Rothblum
2017 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Guy N. Rothblum
2016 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2016 ch.
Encyclopedia of Algorithms
Oded Goldreich, Dana Ron
2016 A* conf
STOC
Oded Goldreich, Avishay Tal
2016 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Maya Leshkowitz
2016 J jnl
ACM Trans. Comput. Theory
Oded Goldreich, Dana Ron
2016 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2016 J jnl
Comput. Complex.
Oded Goldreich
2016 ch.
Encyclopedia of Algorithms
Oded Goldreich, Dana Ron
2016 ch.
Encyclopedia of Algorithms
Oded Goldreich, Dana Ron
2016 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2016 J jnl
Random Struct. Algorithms
Oded Goldreich, Igor Shinkar
2016 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Tom Gur
2016 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Tom Gur
2015 J jnl
ACM Trans. Comput. Theory
Oded Goldreich, Or Meir
2015 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Avishay Tal
2015 A conf
CCC
Oded Goldreich, Emanuele Viola, Avi Wigderson
2015 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Emanuele Viola, Avi Wigderson
2015 A conf
ITCS
Oded Goldreich, Dana Ron
2015 conf
ICALP (1)
Oded Goldreich, Tom Gur, Ron D. Rothblum
2015 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Tom Gur, Ron Rothblum
2015 A conf
CCC
Oded Goldreich, Tom Gur, Ilan Komargodski
2014 J jnl
Random Struct. Algorithms
Artur Czumaj, Oded Goldreich, Dana Ron, C. Seshadhri, Asaf Shapira, Christian Sohler
2014 A* conf
FOCS
Oded Goldreich, Dana Ron
2014 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Dana Ron
2014 conf
APPROX-RANDOM
Oded Goldreich
2014 A* conf
STOC
Oded Goldreich, Avi Wigderson
2014 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Tom Gur, Ilan Komargodski
2014 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Liav Teichner
2013 ch.
Secure Multi-Party Computation
Oded Goldreich
2013 J jnl
J. Cryptol.
Oded Goldreich, Ron D. Rothblum
2013 ch.
Secure Multi-Party Computation
Oded Goldreich
2013 J jnl
J. Cryptol.
David Mandell Freeman, Oded Goldreich, Eike Kiltz, Alon Rosen, Gil Segev
2013 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Avi Wigderson
2013 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2013 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Dana Ron
2013 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2013 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Avi Wigderson
2013 A conf
ITCS
Oded Goldreich, Shafi Goldwasser, Dana Ron
2012 J jnl
J. ACM
Oded Goldreich, Brendan Juba, Madhu Sudan
2012 J jnl
Electron. Colloquium Comput. Complex.
Artur Czumaj, Oded Goldreich, Dana Ron, C. Seshadhri, Asaf Shapira, Christian Sohler
2012 J jnl
Comput. Complex.
Oded Goldreich, Michael Krivelevich, Ilan Newman, Eyal Rozenberg
2012 J jnl
XRDS
Oded Goldreich
2012 J jnl
Theory Comput.
Oded Goldreich, Rani Izsak
2012 J jnl
SIGACT News
Oded Goldreich
2012 J jnl
SIGACT News
Oded Goldreich
2012 J jnl
J. ACM
Boaz Barak, Oded Goldreich, Russell Impagliazzo, Steven Rudich, Amit Sahai, Salil P. Vadhan, Ke Yang
2012 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2012 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Shafi Goldwasser, Dana Ron
2012 J jnl
Comput. Complex.
Oded Goldreich, Salil P. Vadhan
2012 J jnl
Inf. Process. Lett.
Oded Goldreich, Or Meir
2012 conf
APPROX-RANDOM
Oded Goldreich, Igor Shinkar
2012 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 A* conf
PODC
Oded Goldreich, Brendan Juba, Madhu Sudan
2011 J jnl
SIAM J. Comput.
Oded Goldreich, Dana Ron
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich, David Zuckerman
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich, Shafi Goldwasser, Shai Halevi
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Ron Rothblum
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Zvika Brakerski, Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich, Madhu Sudan, Luca Trevisan
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Or Meir
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Rani Izsak
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich, Leonid A. Levin, Noam Nisan
2011 ch.
Studies in Complexity and Cryptography
Mihir Bellare, Oded Goldreich
2011 J jnl
SIAM J. Comput.
Oded Goldreich, Dana Ron
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich, Dana Ron
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich, Noam Nisan, Avi Wigderson
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich, Avi Wigderson
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich, Salil P. Vadhan
2011 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Salil P. Vadhan
2011 ch.
Studies in Complexity and Cryptography
Mihir Bellare, Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich, Tali Kaufman
2011 conf
APPROX-RANDOM
Oded Goldreich, Tali Kaufman
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich, Salil P. Vadhan, Avi Wigderson
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 book
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Lidor Avigad, Oded Goldreich
2011 conf
APPROX-RANDOM
Lidor Avigad, Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2011 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2011 ch.
Studies in Complexity and Cryptography
Oded Goldreich
2010 ch.
Property Testing
Oded Goldreich
2010 ch.
Property Testing
Oded Goldreich, Dana Ron
2010 A* conf
STOC
Adi Akavia, Oded Goldreich, Shafi Goldwasser, Dana Moshkovitz
2010 J jnl
CoRR
Artur Czumaj, Oded Goldreich, Dana Ron, C. Seshadhri, Asaf Shapira, Christian Sohler
2010 ch.
Property Testing
Oded Goldreich, Michael Krivelevich, Ilan Newman, Eyal Rozenberg
2010 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2010 ch.
Property Testing
Oded Goldreich
2010 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2010 conf
Public Key Cryptography
David Mandell Freeman, Oded Goldreich, Eike Kiltz, Alon Rosen, Gil Segev
2010 J jnl
J. Cryptol.
Oded Goldreich
2010 conf
APPROX-RANDOM
Oded Goldreich
2010 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2010 J jnl
Comput. Complex.
Oded Goldreich, Or Sheffet
2010 J jnl
SIAM J. Comput.
Oded Goldreich, Shafi Goldwasser, Asaf Nussboim
2010 book
Oded Goldreich
2010 book
Property Testing
Oded Goldreich
2010 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Tali Kaufman
2010 ch.
Property Testing
Oded Goldreich
2010 ch.
Property Testing
Oded Goldreich
2009 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2009 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Brendan Juba, Madhu Sudan
2009 conf
APPROX-RANDOM
Oded Goldreich, Dana Ron
2009 J jnl
Electron. Colloquium Comput. Complex.
Zvika Brakerski, Oded Goldreich
2009 conf
APPROX-RANDOM
Oded Goldreich, Michael Krivelevich, Ilan Newman, Eyal Rozenberg
2009 J jnl
IACR Cryptol. ePrint Arch.
David Mandell Freeman, Oded Goldreich, Eike Kiltz, Alon Rosen, Gil Segev
2009 J jnl
SIGACT News
Oded Goldreich
2009 A* conf
STOC
Oded Goldreich, Dana Ron
2008 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Dana Ron
2008 J jnl
Random Struct. Algorithms
Oded Goldreich, Dana Ron
2008 book
Oded Goldreich
2008 J jnl
SIGACT News
Oded Goldreich
2008 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Michael Krivelevich, Ilan Newman, Eyal Rozenberg
2008 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Dana Ron
2008 J jnl
Comput. Complex.
Oded Goldreich
2008 J jnl
Found. Trends Theor. Comput. Sci.
Oded Goldreich
2008 J jnl
SIAM J. Comput.
Boaz Barak, Oded Goldreich
2007 conf
APPROX-RANDOM
Kfir Barhum, Oded Goldreich, Adi Shraibman
2007 B conf
TCC
Oded Goldreich
2007 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2007 conf
APPROX-RANDOM
Oded Goldreich, Or Sheffet
2007 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Or Sheffet
2007 J jnl
Comput. Complex.
Oded Goldreich, Salil P. Vadhan
2007 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Or Meir
2006 conf
APPROX-RANDOM
Oded Goldreich, Dana Ron
2006 conf
Essays in Memory of Shimon Even
Oded Goldreich
2006 J jnl
J. ACM
Oded Goldreich, Madhu Sudan
2006 J jnl
Comput. Complex.
Oded Goldreich, Howard J. Karloff, Leonard J. Schulman, Luca Trevisan
2006 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich
2006 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2006 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich
2006 J jnl
Electron. Colloquium Comput. Complex.
Mihir Bellare, Oded Goldreich
2006 J jnl
IACR Cryptol. ePrint Arch.
Mihir Bellare, Oded Goldreich
2006 conf
Essays in Memory of Shimon Even
Oded Goldreich
2006 conf
Essays in Memory of Shimon Even
Oded Goldreich
2006 A* conf
STOC
Adi Akavia, Oded Goldreich, Shafi Goldwasser, Dana Moshkovitz
2006 J jnl
SIAM J. Comput.
Eli Ben-Sasson, Oded Goldreich, Prahladh Harsha, Madhu Sudan, Salil P. Vadhan
2006 J jnl
J. Cryptol.
Oded Goldreich, Yehuda Lindell
2006 J jnl
SIAM J. Comput.
Oded Goldreich, Madhu Sudan
2006 ed.
Essays in Memory of Shimon Even
Oded Goldreich, Arnold L. Rosenberg, Alan L. Selman
2005 conf
Sublinear Algorithms
Oded Goldreich, Dana Ron
2005 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Dana Ron
2005 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2005 conf
Sublinear Algorithms
Oded Goldreich
2005 J jnl
Found. Trends Theor. Comput. Sci.
Oded Goldreich
2005 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2005 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2005 A conf
CCC
Eli Ben-Sasson, Oded Goldreich, Prahladh Harsha, Madhu Sudan, Salil P. Vadhan
2004 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Madhu Sudan, Luca Trevisan
2004 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Dana Ron
2004 B conf
TCC
Ran Canetti, Oded Goldreich, Shai Halevi
2004 ch.
Computational Complexity Theory
Oded Goldreich
2004 J jnl
J. Cryptol.
Oded Goldreich
2004 ch.
Computational Complexity Theory
Oded Goldreich
2004 J jnl
Electron. Colloquium Comput. Complex.
Eli Ben-Sasson, Oded Goldreich, Prahladh Harsha, Madhu Sudan, Salil P. Vadhan
2004 A* conf
STOC
Eli Ben-Sasson, Oded Goldreich, Prahladh Harsha, Madhu Sudan, Salil P. Vadhan
2004 book
Oded Goldreich
2004 J jnl
IACR Cryptol. ePrint Arch.
Mihir Bellare, Oded Goldreich, Anton Mityagin
2004 J jnl
J. ACM
Ran Canetti, Oded Goldreich, Shai Halevi
2003 J jnl
Inf. Process. Lett.
Noga Alon, Oded Goldreich, Yishay Mansour
2003 conf
RANDOM-APPROX
Eli Ben-Sasson, Oded Goldreich, Madhu Sudan
2003 J jnl
Electron. Colloquium Comput. Complex.
Eli Ben-Sasson, Oded Goldreich, Madhu Sudan
2003 J jnl
Distributed Comput.
Oded Goldreich
2003 A* conf
FOCS
Oded Goldreich, Shafi Goldwasser, Asaf Nussboim
2003 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Shafi Goldwasser, Asaf Nussboim
2003 J jnl
J. Cryptol.
Oded Goldreich, Vered Rosen
2003 J jnl
IACR Cryptol. ePrint Arch.
Ran Canetti, Oded Goldreich, Shai Halevi
2003 J jnl
Random Struct. Algorithms
Oded Goldreich, Luca Trevisan
2002 J jnl
Electron. Colloquium Comput. Complex.
Noga Alon, Oded Goldreich, Yishay Mansour
2002 A* conf
STOC
Oded Goldreich
2002 conf
RANDOM
Oded Goldreich, Avi Wigderson
2002 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Avi Wigderson
2002 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Madhu Sudan
2002 A* conf
FOCS
Oded Goldreich, Madhu Sudan
2002 A conf
CCC
Oded Goldreich, Howard J. Karloff, Leonard J. Schulman, Luca Trevisan
2002 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich, Yoad Lustig, Moni Naor
2002 J jnl
Comput. Complex.
Oded Goldreich, Salil P. Vadhan, Avi Wigderson
2002 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Vered Rosen
2002 J jnl
Algorithmica
Oded Goldreich, Dana Ron
2002 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2002 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich
2002 A conf
CCC
Boaz Barak, Oded Goldreich
2002 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2002 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich
2002 A* conf
FOCS
Oded Goldreich
2001 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2001 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich
2001 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Howard J. Karloff, Leonard J. Schulman, Luca Trevisan
2001 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Salil P. Vadhan, Avi Wigderson
2001 A* conf
ICALP
Oded Goldreich, Salil P. Vadhan, Avi Wigderson
2001 J jnl
Electron. Colloquium Comput. Complex.
Boaz Barak, Oded Goldreich, Russell Impagliazzo, Steven Rudich, Amit Sahai, Salil P. Vadhan, Ke Yang
2001 A* conf
CRYPTO
Boaz Barak, Oded Goldreich, Russell Impagliazzo, Steven Rudich, Amit Sahai, Salil P. Vadhan, Ke Yang
2001 J jnl
IACR Cryptol. ePrint Arch.
Boaz Barak, Oded Goldreich, Russell Impagliazzo, Steven Rudich, Amit Sahai, Salil P. Vadhan, Ke Yang
2001 A* conf
FOCS
Boaz Barak, Oded Goldreich, Shafi Goldwasser, Yehuda Lindell
2001 J jnl
IACR Cryptol. ePrint Arch.
Boaz Barak, Oded Goldreich, Shafi Goldwasser, Yehuda Lindell
2001 A* conf
CRYPTO
Oded Goldreich, Yehuda Lindell
2001 book
Oded Goldreich
2001 A* conf
FOCS
Oded Goldreich, Luca Trevisan
2001 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Luca Trevisan
2001 J jnl
Electron. Colloquium Comput. Complex.
Boaz Barak, Oded Goldreich
2001 J jnl
IACR Cryptol. ePrint Arch.
Boaz Barak, Oded Goldreich
2001 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2000 J jnl
SIAM J. Comput.
Oded Goldreich, Shmuel Safra
2000 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
2000 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich
2000 J jnl
IEEE Trans. Inf. Theory
Oded Goldreich, Dana Ron, Madhu Sudan
2000 J jnl
SIAM J. Discret. Math.
Oded Goldreich, Ronitt Rubinfeld, Madhu Sudan
2000 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Avi Wigderson
2000 conf
ICALP Satellite Workshops
Oded Goldreich, Avi Wigderson
2000 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich
2000 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Dana Ron
2000 J jnl
J. Comput. Syst. Sci.
Oded Goldreich, Shafi Goldwasser
2000 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich, Vered Rosen
2000 J jnl
J. Cryptol.
Oded Goldreich
2000 A* conf
ICALP
Oded Goldreich
2000 A* conf
STOC
Ran Canetti, Oded Goldreich, Shafi Goldwasser, Silvio Micali
2000 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich, Yehuda Lindell
2000 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Salil P. Vadhan, Avi Wigderson
2000 J jnl
Comb.
Oded Goldreich, Shafi Goldwasser, Eric Lehman, Dana Ron, Alex Samorodnitsky
2000 J jnl
CoRR
Ran Canetti, Oded Goldreich, Shai Halevi
2000 J jnl
Inf. Comput.
Mihir Bellare, Oded Goldreich, Erez Petrank
1999 J jnl
Comb.
Oded Goldreich, Dana Ron
1999 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Daniele Micciancio, Shmuel Safra, Jean-Pierre Seifert
1999 J jnl
Inf. Process. Lett.
Oded Goldreich, Daniele Micciancio, Shmuel Safra, Jean-Pierre Seifert
1999 A* conf
CRYPTO
Oded Goldreich, Amit Sahai, Salil P. Vadhan
1999 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Amit Sahai, Salil P. Vadhan
1999 A* conf
STOC
Oded Goldreich, Dana Ron, Madhu Sudan
1999 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich, Dana Ron, Madhu Sudan
1999 A conf
CCC
Oded Goldreich, Salil P. Vadhan
1999 J jnl
J. Comput. Syst. Sci.
Oded Goldreich, Madhu Sudan
1999 J jnl
SIAM J. Comput.
Scott E. Decatur, Oded Goldreich, Dana Ron
1999 A conf
CCC
Ziv Bar-Yossef, Oded Goldreich, Avi Wigderson
1999 conf
RANDOM-APPROX
Oded Goldreich, Avi Wigderson
1999 conf
RANDOM-APPROX
Yevgeniy Dodis, Oded Goldreich, Eric Lehman, Sofya Raskhodnikova, Dana Ron, Alex Samorodnitsky
1999 J jnl
Electron. Colloquium Comput. Complex.
Yevgeniy Dodis, Oded Goldreich, Eric Lehman, Sofya Raskhodnikova, Dana Ron, Alex Samorodnitsky
1999 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Shafi Goldwasser, Silvio Micali
1999 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich, Shafi Goldwasser, Silvio Micali
1999 J jnl
Comput. Complex.
Oded Goldreich, Erez Petrank
1999 J jnl
Electron. Colloquium Comput. Complex.
Ran Canetti, Oded Goldreich, Shafi Goldwasser, Silvio Micali
1999 J jnl
IACR Cryptol. ePrint Arch.
Ran Canetti, Oded Goldreich, Shafi Goldwasser, Silvio Micali
1999 A* conf
CRYPTO
Mihir Bellare, Oded Goldreich, Hugo Krawczyk
1999 J jnl
Inf. Process. Lett.
Alfredo De Santis, Giovanni Di Crescenzo, Oded Goldreich, Giuseppe Persiano
1998 A* conf
STOC
Oded Goldreich, Dana Ron
1998 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Dana Ron, Madhu Sudan
1998 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Salil P. Vadhan
1998 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich, Salil P. Vadhan
1998 J jnl
SIAM J. Comput.
Oded Goldreich, Rafail Ostrovsky, Erez Petrank
1998 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Madhu Sudan
1998 A conf
CCC
Oded Goldreich, Madhu Sudan
1998 J jnl
Theor. Comput. Sci.
Oded Goldreich, Bernd Meyer
1998 J jnl
Electron. Colloquium Comput. Complex.
Ziv Bar-Yossef, Oded Goldreich, Avi Wigderson
1998 J jnl
Random Struct. Algorithms
Guy Even, Oded Goldreich, Michael Luby, Noam Nisan, Boban Velickovic
1998 J jnl
SIAM J. Comput.
Oded Goldreich, Shafi Goldwasser, Nathan Linial
1998 J jnl
SIAM J. Comput.
Mihir Bellare, Oded Goldreich, Madhu Sudan
1998 A* conf
STOC
Oded Goldreich, Amit Sahai, Salil P. Vadhan
1998 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Ronitt Rubinfeld, Madhu Sudan
1998 book
Oded Goldreich
1998 J jnl
Inf. Process. Lett.
Oded Goldreich, Johan Håstad
1998 A* conf
STOC
Oded Goldreich, Shafi Goldwasser
1998 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich, Shafi Goldwasser
1998 J jnl
J. ACM
Benny Chor, Eyal Kushilevitz, Oded Goldreich, Madhu Sudan
1998 J jnl
J. ACM
Oded Goldreich, Shafi Goldwasser, Dana Ron
1998 A* conf
CRYPTO
Oded Goldreich, Birgit Pfitzmann, Ronald L. Rivest
1998 A* conf
FOCS
Oded Goldreich, Shafi Goldwasser, Eric Lehman, Dana Ron
1998 J jnl
Electron. Colloquium Comput. Complex.
Alfredo De Santis, Giovanni Di Crescenzo, Oded Goldreich, Giuseppe Persiano
1998 J jnl
IACR Cryptol. ePrint Arch.
Alfredo De Santis, Giovanni Di Crescenzo, Oded Goldreich, Giuseppe Persiano
1998 A* conf
STOC
Ran Canetti, Oded Goldreich, Shai Halevi
1998 J jnl
IACR Cryptol. ePrint Arch.
Ran Canetti, Oded Goldreich, Shai Halevi
1998 J jnl
Electron. Colloquium Comput. Complex.
Mihir Bellare, Oded Goldreich, Erez Petrank
1997 conf
RANDOM
Oded Goldreich, Shmuel Safra
1997 J jnl
IACR Cryptol. ePrint Arch.
Scott E. Decatur, Oded Goldreich, Dana Ron
1997 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
1997 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, David Zuckerman
1997 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
1997 conf
Randomization Methods in Algorithm Design
Oded Goldreich
1997 J jnl
Electron. Colloquium Comput. Complex.
Scott E. Decatur, Oded Goldreich, Dana Ron
1997 A* conf
COLT
Scott E. Decatur, Oded Goldreich, Dana Ron
1997 A* conf
CRYPTO
Oded Goldreich, Shafi Goldwasser, Shai Halevi
1997 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Shafi Goldwasser, Shai Halevi
1997 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
1997 J jnl
Inf. Process. Lett.
Oded Goldreich, Dana Ron
1997 A* conf
CRYPTO
Oded Goldreich
1997 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Shafi Goldwasser
1997 A conf
STACS
Oded Goldreich
1997 A* conf
STOC
Oded Goldreich, Dana Ron
1997 A* conf
CRYPTO
Oded Goldreich, Shafi Goldwasser, Shai Halevi
1997 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich, Birgit Pfitzmann, Ronald L. Rivest
1997 J jnl
SIGACT News
Oded Goldreich, Avi Wigderson
1997 J jnl
Random Struct. Algorithms
Oded Goldreich, Avi Wigderson
1996 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Shmuel Safra
1996 A* conf
STOC
Ran Canetti, Uriel Feige, Oded Goldreich, Moni Naor
1996 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Shafi Goldwasser, Shai Halevi
1996 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich, Shafi Goldwasser, Shai Halevi
1996 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Bernd Meyer
1996 J jnl
J. Cryptol.
Oded Goldreich, Ariel Kahan
1996 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Avi Wigderson
1996 J jnl
SIAM J. Comput.
Oded Goldreich, Hugo Krawczyk
1996 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Johan Håstad
1996 J jnl
J. Cryptol.
Shimon Even, Oded Goldreich, Silvio Micali
1996 A* conf
FOCS
Oded Goldreich, Shafi Goldwasser, Dana Ron
1996 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Shafi Goldwasser, Dana Ron
1996 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Shafi Goldwasser, Shai Halevi
1996 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich, Shafi Goldwasser, Shai Halevi
1996 J jnl
J. ACM
Oded Goldreich, Rafail Ostrovsky
1996 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
1996 J jnl
IACR Cryptol. ePrint Arch.
Oded Goldreich
1996 J jnl
SIGACT News
Christos H. Papadimitriou, Oded Goldreich, Avi Wigderson, Alexander A. Razborov, Michael Sipser
1996 J jnl
ACM Comput. Surv.
Oded Goldreich, Avi Wigderson
1995 J jnl
Electron. Colloquium Comput. Complex.
Mihir Bellare, Oded Goldreich, Madhu Sudan
1995 A* conf
FOCS
Mihir Bellare, Oded Goldreich, Madhu Sudan
1995 A* conf
CRYPTO
Ivan Damgård, Oded Goldreich, Tatsuaki Okamoto, Avi Wigderson
1995 A* conf
STOC
Mihir Bellare, Oded Goldreich, Shafi Goldwasser
1995 A* conf
FOCS
Oded Goldreich, Ronitt Rubinfeld, Madhu Sudan
1995 J jnl
Inf. Process. Lett.
Ran Canetti, Guy Even, Oded Goldreich
1995 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Leonid A. Levin, Noam Nisan
1995 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Noam Nisan, Avi Wigderson
1995 A* conf
FOCS
Benny Chor, Oded Goldreich, Eyal Kushilevitz, Madhu Sudan
1995 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
1994 J jnl
SIGACT News
Oded Goldreich
1994 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Rafail Ostrovsky, Erez Petrank
1994 A* conf
STOC
Oded Goldreich, Rafail Ostrovsky, Erez Petrank
1994 J jnl
J. Cryptol.
Oded Goldreich, Yair Oren
1994 A* conf
CRYPTO
Mihir Bellare, Oded Goldreich, Shafi Goldwasser
1994 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich
1994 J jnl
J. Comput. Syst. Sci.
Richard Chang, Benny Chor, Oded Goldreich, Juris Hartmanis, Johan Håstad, Desh Ranjan, Pankaj Rohatgi
1994 J jnl
Electron. Colloquium Comput. Complex.
Oded Goldreich, Avi Wigderson
1994 A* conf
STOC
Oded Goldreich, Avi Wigderson
1993 J jnl
J. Cryptol.
Oded Goldreich, Eyal Kushilevitz
1993 J jnl
J. Cryptol.
Oded Goldreich
1993 J jnl
SIGACT News
Oded Goldreich
1993 J jnl
Random Struct. Algorithms
Noga Alon, Oded Goldreich, Johan Håstad, René Peralta
1993 A* conf
STOC
Michael Ben-Or, Ran Canetti, Oded Goldreich
1993 J jnl
Comput. Complex.
Ran Canetti, Oded Goldreich
1993 J jnl
SIAM J. Comput.
Oded Goldreich, Hugo Krawczyk, Michael Luby
1993 J jnl
Comput. Complex.
Mihir Bellare, Oded Goldreich, Shafi Goldwasser
1992 A* conf
STOC
Guy Even, Oded Goldreich, Michael Luby, Noam Nisan, Boban Velickovic
1992 J jnl
SIGACT News
Oded Goldreich
1992 A* conf
CRYPTO
Mihir Bellare, Oded Goldreich
1992 A* conf
PODC
Oded Goldreich, Dror Sneh
1992 J jnl
J. Comput. Syst. Sci.
Shai Ben-David, Benny Chor, Oded Goldreich, Michael Luby
1992 J jnl
J. Comput. Syst. Sci.
Reuven Bar-Yehuda, Oded Goldreich, Alon Itai
1992 J jnl
Random Struct. Algorithms
Noga Alon, Oded Goldreich, Johan Håstad, René Peralta
1992 J jnl
Random Struct. Algorithms
Oded Goldreich, Hugo Krawczyk
1992 A* conf
FOCS
Manuel Blum, Oded Goldreich
1991 J jnl
Distributed Comput.
Reuven Bar-Yehuda, Oded Goldreich, Alon Itai
1991 A* conf
FOCS
Oded Goldreich, Shafi Goldwasser, Nathan Linial
1991 J jnl
Distributed Comput.
Oded Goldreich, Liuba Shrira
1991 J jnl
J. ACM
Oded Goldreich, Silvio Micali, Avi Wigderson
1991 A* conf
FOCS
Oded Goldreich, Erez Petrank
1990 J jnl
Inf. Process. Lett.
Oded Goldreich
1990 A* conf
PODC
Baruch Awerbuch, Oded Goldreich, Amir Herzberg
1990 J jnl
J. ACM
Baruch Awerbuch, Oded Goldreich, David Peleg, Ronen Vainish
1990 J jnl
IEEE Trans. Inf. Theory
Michael Ben-Or, Oded Goldreich, Silvio Micali, Ronald L. Rivest
1990 J jnl
Algorithmica
Benny Chor, Oded Goldreich
1990 A* conf
FOCS
Ran Canetti, Oded Goldreich
1990 A* conf
ICALP
Oded Goldreich, Hugo Krawczyk
1990 J jnl
Discret. Math.
Oded Goldreich
1990 A* conf
FOCS
Mihir Bellare, Oded Goldreich, Shafi Goldwasser
1990 A* conf
FOCS
Oded Goldreich, Russell Impagliazzo, Leonid A. Levin, Ramarathnam Venkatesan, David Zuckerman
1990 A* conf
FOCS
Noga Alon, Oded Goldreich, Johan Håstad, René Peralta
1990 J jnl
Inf. Process. Lett.
Oded Goldreich, Erez Petrank
1989 A* conf
STOC
Oded Goldreich, Leonid A. Levin
1989 conf
WDAG
Reuven Bar-Yehuda, Oded Goldreich, Alon Itai
1989 J jnl
Adv. Comput. Res.
Martin Fürer, Oded Goldreich, Yishay Mansour, Michael Sipser, Stathis Zachos
1989 A* conf
STOC
Shai Ben-David, Benny Chor, Oded Goldreich, Michael Luby
1989 conf
SCT
Shai Ben-David, Benny Chor, Oded Goldreich, Michael Luby
1989 J jnl
J. Complex.
Benny Chor, Oded Goldreich
1989 A* conf
CRYPTO
Shimon Even, Oded Goldreich, Silvio Micali
1989 A* conf
PODC
Oded Goldreich, Amir Herzberg, Yishay Mansour
1989 A* conf
CRYPTO
Oded Goldreich, Hugo Krawczyk
1988 A* conf
CRYPTO
Oded Goldreich, Eyal Kushilevitz
1988 conf
AWOC
Baruch Awerbuch, Oded Goldreich, David Peleg, Ronen Vainish
1988 A* conf
CRYPTO
Michael Ben-Or, Oded Goldreich, Shafi Goldwasser, Johan Håstad, Joe Kilian, Silvio Micali, Phillip Rogaway
1988 A* conf
FOCS
Oded Goldreich, Hugo Krawczyk, Michael Luby
1988 A* conf
CRYPTO
Oded Goldreich, Hugo Krawczyk, Michael Luby
1988 J jnl
SIAM J. Comput.
Werner Alexi, Benny Chor, Oded Goldreich, Claus-Peter Schnorr
1988 J jnl
SIAM J. Comput.
Benny Chor, Oded Goldreich
1987 J jnl
Acta Informatica
Oded Goldreich, Liuba Shrira
1987 A* conf
STOC
Oded Goldreich, Silvio Micali, Avi Wigderson
1987 A* conf
CRYPTO
Oded Goldreich, Ronen Vainish
1987 A* conf
FOCS
Oded Goldreich, Yishay Mansour, Michael Sipser
1987 A* conf
PODC
Reuven Bar-Yehuda, Oded Goldreich, Alon Itai
1987 A* conf
STOC
Oded Goldreich
1986 A* conf
CRYPTO
Oded Goldreich, Silvio Micali, Avi Wigderson
1986 J jnl
J. ACM
Oded Goldreich, Shafi Goldwasser, Silvio Micali
1986 B conf
MFCS
Oded Goldreich, Silvio Micali, Avi Wigderson
1986 A* conf
FOCS
Oded Goldreich, Silvio Micali, Avi Wigderson
1986 A* conf
PODC
Oded Goldreich, Liuba Shrira
1986 A* conf
CRYPTO
Oded Goldreich
1986 A* conf
CRYPTO
Oded Goldreich
1985 A* conf
ICALP
Michael Ben-Or, Oded Goldreich, Silvio Micali, Ronald L. Rivest
1985 J jnl
Commun. ACM
Shimon Even, Oded Goldreich, Abraham Lempel
1985 J jnl
ACM Trans. Comput. Syst.
Shimon Even, Oded Goldreich
1985 A* conf
CRYPTO
Shimon Even, Oded Goldreich, Adi Shamir
1985 A* conf
FOCS
Benny Chor, Oded Goldreich, Johan Håstad, Joel Friedman, Steven Rudich, Roman Smolensky
1985 A* conf
CRYPTO
Benny Chor, Oded Goldreich, Shafi Goldwasser
1985 A* conf
FOCS
Benny Chor, Oded Goldreich
1984 J jnl
IEEE Trans. Inf. Theory
Shimon Even, Oded Goldreich
1984 A* conf
FOCS
Oded Goldreich, Shafi Goldwasser, Silvio Micali
1984 A* conf
EUROCRYPT
Oded Goldreich
1984 A* conf
CRYPTO
Oded Goldreich, Shafi Goldwasser, Silvio Micali
1984 A* conf
EUROCRYPT
Oded Goldreich
1984 J jnl
Networks
Shimon Even, Oded Goldreich, Shlomo Moran, Po Tong
1984 A* conf
FOCS
Werner Alexi, Benny Chor, Oded Goldreich, Claus-Peter Schnorr
1984 A* conf
CRYPTO
Benny Chor, Oded Goldreich
1983 A* conf
CRYPTO
Oded Goldreich
1983 J jnl
IEEE Trans. Inf. Theory
Shimon Even, Oded Goldreich
1983 A* conf
CRYPTO
Shimon Even, Oded Goldreich
1983 A* conf
CRYPTO
Shimon Even, Oded Goldreich
1983 A* conf
FOCS
Shimon Even, Oded Goldreich
1982 A* conf
CRYPTO
Shimon Even, Oded Goldreich, Abraham Lempel
1982 A* conf
CRYPTO
Shimon Even, Oded Goldreich
1981 J jnl
J. Algorithms
Shimon Even, Oded Goldreich
tests/unit/test_apk_code_analyzer.py
← Index tests/unit/test_apk_code_analyzer.py python
"""
Unit tests for APK code analysis components.

Tests APKCodeAnalyzer, LibraryFilter, SmaliParser, method enumeration,
library filtering, and method key matching. All external tools are mocked.
"""
import os
import tempfile
import textwrap

import pytest
from unittest.mock import MagicMock, patch, PropertyMock

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


def _has_mmh3():
    try:
        import mmh3  # noqa: F401
        return True
    except ImportError:
        return False


# ============================================================================
# LibraryFilter Tests
# ============================================================================

class TestLibraryFilter:
    """Tests for package-based library filtering."""

    def test_default_prefixes_loaded(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("android.app.Activity")
        assert lf.is_library("androidx.core.app.NotificationCompat")

    def test_user_class_not_filtered(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert not lf.is_library("com.example.myapp.MainActivity")
        assert not lf.is_library("org.myorg.MyClass")

    def test_dalvik_descriptor_format(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("Landroid/app/Activity;")
        assert lf.is_library("Landroidx/core/app/NotificationCompat;")
        assert not lf.is_library("Lcom/example/myapp/MainActivity;")

    def test_custom_prefixes(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter(prefixes=["com.custom."])
        assert lf.is_library("com.custom.SomeClass")
        assert not lf.is_library("android.app.Activity")

    def test_env_var_override(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        with patch.dict(os.environ, {"APK_LIBRARY_PREFIXES": "my.lib.,other.lib."}):
            lf = LibraryFilter()
            assert lf.is_library("my.lib.SomeClass")
            assert lf.is_library("other.lib.AnotherClass")
            assert not lf.is_library("android.app.Activity")

    def test_filter_stats(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        lf.is_library("android.app.Activity")
        lf.is_library("com.example.MyClass")
        lf.is_library("kotlin.Unit")
        stats = lf.get_filter_stats()
        assert stats["library"] == 2
        assert stats["user"] == 1

    def test_normalize_class_name(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        assert LibraryFilter._normalize_class_name("Lcom/example/Foo;") == "com.example.Foo"
        assert LibraryFilter._normalize_class_name("com.example.Foo") == "com.example.Foo"
        assert LibraryFilter._normalize_class_name("com/example/Foo") == "com.example.Foo"

    def test_google_libraries_filtered(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("com.google.android.gms.ads.AdView")
        assert lf.is_library("com.google.firebase.messaging.FirebaseMessagingService")
        assert lf.is_library("com.google.gson.Gson")

    def test_kotlin_filtered(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("kotlin.Unit")
        assert lf.is_library("kotlinx.coroutines.CoroutineScope")

    def test_third_party_libs_filtered(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("com.squareup.okhttp3.OkHttpClient")
        assert lf.is_library("io.reactivex.Observable")
        assert lf.is_library("org.apache.commons.io.IOUtils")

    def test_empty_class_name(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert not lf.is_library("")


# ============================================================================
# SmaliParser Tests
# ============================================================================

class TestSmaliParser:
    """Tests for smali file parsing."""

    SAMPLE_SMALI = textwrap.dedent("""\
        .class public Lcom/example/MyClass;
        .super Ljava/lang/Object;

        .method public constructor <init>()V
            .registers 1
            invoke-direct {p0}, Ljava/lang/Object;-><init>()V
            return-void
        .end method

        .method public onCreate(Landroid/os/Bundle;)V
            .registers 4
            .param p1, "savedInstanceState"

            .line 10
            invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
            const/high16 v0, 0x7f090000
            invoke-virtual {p0, v0}, Lcom/example/MyClass;->setContentView(I)V
            const-string v1, "hello"
            invoke-virtual {p0, v1}, Lcom/example/MyClass;->log(Ljava/lang/String;)V
            return-void
        .end method

        .method public abstract doSomething()V
        .end method

        .method public native nativeMethod()V
        .end method
    """)

    def test_parse_smali_content(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        # abstract and native should be skipped
        assert len(methods) == 2

    def test_method_names_extracted(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        names = {m.method_name for m in methods}
        assert "<init>" in names
        assert "onCreate" in names

    def test_class_name_extracted(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        for m in methods:
            assert m.class_name == "Lcom/example/MyClass;"

    def test_method_signature(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        oncreate = [m for m in methods if m.method_name == "onCreate"][0]
        assert oncreate.method_signature == "(Landroid/os/Bundle;)V"

    def test_instruction_count(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        oncreate = [m for m in methods if m.method_name == "onCreate"][0]
        # invoke-super, const/high16, invoke-virtual, const-string, invoke-virtual, return-void
        assert oncreate.instruction_count == 6

    def test_register_count(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        oncreate = [m for m in methods if m.method_name == "onCreate"][0]
        assert oncreate.register_count == 4

    def test_register_count_locals_directive(self):
        """apktool outputs .locals by default, not .registers."""
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        smali_with_locals = textwrap.dedent("""\
            .class public Lcom/example/Locals;
            .super Ljava/lang/Object;

            .method public doWork()V
                .locals 3
                const/4 v0, 0x0
                const/4 v1, 0x1
                add-int v2, v0, v1
                return-void
            .end method
        """)
        methods = SmaliParser._parse_smali_content(smali_with_locals)
        assert len(methods) == 1
        assert methods[0].register_count == 3

    def test_abstract_native_skipped(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        names = {m.method_name for m in methods}
        assert "doSomething" not in names
        assert "nativeMethod" not in names

    def test_normalize_smali_body(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        body = textwrap.dedent("""\
            .registers 4
            .line 10
            # comment
            invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

            const-string v1, "hello"
        """)
        normalized = SmaliParser.normalize_smali_body(body)
        assert ".line" not in normalized
        assert "# comment" not in normalized
        assert "invoke-super" in normalized
        assert "const-string" in normalized

    def test_count_instructions(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        body = textwrap.dedent("""\
            .registers 4
            .param p1, "x"
            invoke-virtual {p0}, Lcom/example/Foo;->bar()V
            const/4 v0, 0x0
            :label_0
            if-eqz v0, :label_1
            return-void
            :label_1
            goto :label_0
        """)
        assert SmaliParser.count_instructions(body) == 5

    def test_make_method_key(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        key = SmaliParser.make_method_key(
            "Lcom/example/Foo;", "bar", "(I)V"
        )
        assert key == "Lcom/example/Foo;->bar(I)V"

    def test_parse_smali_file(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        with tempfile.NamedTemporaryFile(
            mode="w", suffix=".smali", delete=False
        ) as f:
            f.write(self.SAMPLE_SMALI)
            f.flush()
            try:
                methods = SmaliParser.parse_smali_file(f.name)
                assert len(methods) == 2
            finally:
                os.unlink(f.name)

    def test_parse_smali_directory(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        with tempfile.TemporaryDirectory() as tmpdir:
            # Create nested dir structure
            pkg_dir = os.path.join(tmpdir, "com", "example")
            os.makedirs(pkg_dir)
            with open(os.path.join(pkg_dir, "MyClass.smali"), "w") as f:
                f.write(self.SAMPLE_SMALI)

            result = SmaliParser.parse_smali_directory(tmpdir)
            assert len(result) == 2
            # Check keys are in expected format
            for key in result:
                assert "->" in key

    def test_empty_smali_file(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content("")
        assert methods == []

    def test_class_only_no_methods(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        content = ".class public Lcom/example/Empty;\n.super Ljava/lang/Object;\n"
        methods = SmaliParser._parse_smali_content(content)
        assert methods == []


# ============================================================================
# MethodExtractor Tests (Hashing, Obfuscation, Type Conversion)
# ============================================================================

class TestMethodExtractor:
    """Tests for method-level content extraction and hashing."""

    def test_compute_sha256(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        h = compute_sha256("test content")
        assert len(h) == 64
        assert h == compute_sha256("test content")  # deterministic

    def test_compute_sha256_different_input(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        assert compute_sha256("a") != compute_sha256("b")

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

    def test_compute_ssdeep_long_input(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_ssdeep
        result = compute_ssdeep("x" * 200)
        # May be None depending on entropy, but shouldn't crash
        assert result is None or isinstance(result, str)

    def test_compute_tlsh_short_input(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_tlsh
        result = compute_tlsh("short")
        assert result is None

    def test_compute_tlsh_long_input(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_tlsh
        data = "".join(chr(i % 256) for i in range(200))
        result = compute_tlsh(data)
        assert result is None or isinstance(result, str)

    def test_compute_minhash_returns_none_without_mmh3(self):
        from unittest.mock import patch
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        with patch.dict("sys.modules", {"mmh3": None}):
            # Force reimport to hit ImportError
            import importlib
            import redb.extractors.decompiler.apk.method_extractor as mod
            importlib.reload(mod)
            result = mod.compute_minhash("line1\nline2\nline3\nline4")
            # mmh3 may or may not be available; just check it doesn't crash
            assert result is None or isinstance(result, list)
            importlib.reload(mod)  # restore

    def test_compute_minhash_too_few_lines(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        result = compute_minhash("invoke-direct {v0}, Lfoo;->bar()V")
        # Only 1 instruction line, need at least 3 for 3-grams
        assert result is None

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_deterministic(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        smali = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        sig1 = compute_minhash(smali)
        sig2 = compute_minhash(smali)
        assert sig1 is not None
        assert sig1 == sig2

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_signature_length(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        smali = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        sig = compute_minhash(smali)
        assert sig is not None
        assert len(sig) == 64  # SIGNATURE_LENGTH

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_value_range(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        smali = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        sig = compute_minhash(smali)
        assert sig is not None
        for val in sig:
            assert 0 <= val < 256  # 8-bit values

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_different_inputs_differ(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        smali_a = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        smali_b = (
            "sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;\n"
            "const-string v1, \"world\"\n"
            "invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V\n"
            "return-void"
        )
        sig_a = compute_minhash(smali_a)
        sig_b = compute_minhash(smali_b)
        assert sig_a is not None
        assert sig_b is not None
        assert sig_a != sig_b

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_skips_directives_and_labels(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        # Directives and labels should be filtered out
        smali = (
            ".registers 3\n"
            ":start\n"
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            ".line 10\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        smali_clean = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        sig_with_directives = compute_minhash(smali)
        sig_clean = compute_minhash(smali_clean)
        assert sig_with_directives == sig_clean

    def test_dalvik_to_java_class(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_class
        assert dalvik_to_java_class("Lcom/example/Foo;") == "com.example.Foo"
        assert dalvik_to_java_class("com.example.Foo") == "com.example.Foo"

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

    def test_dalvik_to_java_prototype(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("onCreate", "(Landroid/os/Bundle;)V")
        assert result == "void onCreate(Bundle)"

    def test_dalvik_to_java_prototype_no_params(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("toString", "()Ljava/lang/String;")
        assert result == "String toString()"

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

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

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

    def test_detect_reflection_calls(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "invoke-virtual {v0}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;"
        result = detect_obfuscation_indicators("foo", "Lcom/Foo;", smali, 10)
        assert result["has_reflection_calls"] is True

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

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

    def test_detect_excessive_goto(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "\n".join(["goto :label_0"] * 20)
        result = detect_obfuscation_indicators("foo", "Lcom/Foo;", smali, 30)
        # threshold = max(5, 30*0.15) = 5, 20 > 5
        assert result["excessive_goto_count"] is True

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

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

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

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

    def test_parse_dalvik_params_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_parse_dalvik_params_array(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;"]


# ============================================================================
# APKCodeAnalyzer Tests (mocked tools)
# ============================================================================

class TestAPKCodeAnalyzer:
    """Tests for the APKCodeAnalyzer orchestration."""

    def test_init_defaults(self):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        analyzer = APKCodeAnalyzer("/fake/path.apk")
        assert analyzer.filepath == "/fake/path.apk"
        assert analyzer.timeout == 600
        assert analyzer.min_instructions == 5

    def test_init_custom_timeout(self):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        analyzer = APKCodeAnalyzer("/fake/path.apk", timeout=300)
        assert analyzer.timeout == 300

    def test_init_min_instructions_env(self):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        with patch.dict(os.environ, {"APK_MIN_METHOD_INSTRUCTIONS": "10"}):
            analyzer = APKCodeAnalyzer("/fake/path.apk")
            assert analyzer.min_instructions == 10

    @patch("redb.extractors.decompiler.apk.analyzer.APKCodeAnalyzer._run_androguard")
    @patch.object(
        __import__("redb.extractors.decompiler.apk.apktool_wrapper", fromlist=["ApktoolDisassembler"]).ApktoolDisassembler,
        "disassemble",
        return_value=False,
    )
    @patch.object(
        __import__("redb.extractors.decompiler.apk.jadx_wrapper", fromlist=["JADXDecompiler"]).JADXDecompiler,
        "decompile",
        return_value=False,
    )
    def test_extract_returns_dict_keys(self, mock_jadx, mock_apktool, mock_androguard):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        mock_analysis = MagicMock()
        mock_analysis.get_methods.return_value = []
        mock_androguard.return_value = (MagicMock(), [], mock_analysis)

        analyzer = APKCodeAnalyzer("/fake/path.apk", log=MagicMock())
        results = analyzer.extract()

        assert "decompiled_content" in results
        assert "decompiled_refs" in results
        assert "smali_content" in results
        assert "smali_refs" in results
        assert "similarity_metrics" in results
        assert "strings" in results
        assert "analysis_errors" in results
        analyzer.cleanup()

    @patch("redb.extractors.decompiler.apk.analyzer.APKCodeAnalyzer._run_androguard")
    def test_extract_androguard_failure(self, mock_androguard):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        mock_androguard.side_effect = Exception("Analysis failed")

        analyzer = APKCodeAnalyzer("/fake/path.apk", log=MagicMock())
        results = analyzer.extract()

        assert len(results["analysis_errors"]) > 0
        analyzer.cleanup()

    def test_cleanup_removes_temp_dirs(self):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        analyzer = APKCodeAnalyzer("/fake/path.apk")
        tmpdir = tempfile.mkdtemp()
        analyzer._temp_dirs.append(tmpdir)
        assert os.path.isdir(tmpdir)
        analyzer.cleanup()
        assert not os.path.isdir(tmpdir)

    def test_normalize_java(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_java
        source = "  public void foo() {\n    int x = 1;\n  }\n"
        normalized = _normalize_java(source)
        assert normalized == "public void foo() {\nint x = 1;\n}"


class TestNormalizeAndroguardOperands:
    """Tests for androguard-to-apktool output normalization."""

    def test_invoke_adds_braces(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "invoke-direct",
            "v1, Ljava/lang/Object;-><init>()V"
        )
        assert result == "{v1}, Ljava/lang/Object;-><init>()V"

    def test_invoke_virtual_multiple_regs(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "invoke-virtual",
            "v0, v1, Ljava/lang/String;->equals(Ljava/lang/Object;)Z"
        )
        assert result == "{v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z"

    def test_invoke_static_no_regs(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        # invoke-static with no register args (rare but possible)
        result = _normalize_androguard_operands(
            "invoke-static",
            "Ljava/lang/System;->gc()V"
        )
        # First part starts with L, so no registers to wrap
        assert result == "Ljava/lang/System;->gc()V"

    def test_invoke_range(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "invoke-virtual/range",
            "v3, v4, v5, Landroid/util/Log;->d(Ljava/lang/String; Ljava/lang/String;)I"
        )
        assert result == "{v3, v4, v5}, Landroid/util/Log;->d(Ljava/lang/String; Ljava/lang/String;)I"

    def test_iget_field_colon(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "iget-object",
            "v0, v4, LF;->a Ljava/lang/String;"
        )
        assert result == "v0, v4, LF;->a:Ljava/lang/String;"

    def test_iput_field_colon(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "iput-object",
            "v0, v1, LA;->b Ljava/lang/String;"
        )
        assert result == "v0, v1, LA;->b:Ljava/lang/String;"

    def test_sget_primitive_field(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "sget",
            "v0, Lcom/Foo;->count I"
        )
        assert result == "v0, Lcom/Foo;->count:I"

    def test_sput_array_field(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "sput-object",
            "v0, Lcom/Foo;->data [B"
        )
        assert result == "v0, Lcom/Foo;->data:[B"

    def test_non_invoke_non_field_passthrough(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "const-string",
            'v0, "hello world"'
        )
        assert result == 'v0, "hello world"'

    def test_move_passthrough(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands("move", "v0, v4")
        assert result == "v0, v4"

    def test_goto_passthrough(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands("goto", "+005h")
        assert result == "+005h"


class TestSmaliCFG:
    """Tests for smali CFG construction and metrics computation."""

    def test_empty_body(self):
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        m = compute_cfg_metrics("")
        assert m.block_count == 0
        assert m.cyclomatic_complexity == 1

    def test_linear_method_apktool(self):
        """Single basic block — no branches."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 2
            invoke-direct {v1}, Ljava/lang/Object;-><init>()V
            const-string v0, "hello"
            iput-object v0, v1, LA;->a:Ljava/lang/String;
            return-void
        """)
        m = compute_cfg_metrics(smali)
        assert m.block_count == 1
        assert m.edge_count == 0
        assert m.cyclomatic_complexity == 1
        assert m.loop_count == 0
        assert m.max_depth == 0
        assert m.max_fan_out == 0

    def test_linear_method_androguard(self):
        """Single basic block — androguard format (no labels/directives)."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = (
            "    invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "    const-string v0, \"hello\"\n"
            "    iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "    return-void"
        )
        m = compute_cfg_metrics(smali)
        assert m.block_count == 1
        assert m.edge_count == 0
        assert m.cyclomatic_complexity == 1

    def test_if_branch_apktool(self):
        """Diamond pattern: if-else with two paths merging."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 2
            const/4 v0, 0x0
            if-eqz v0, :cond_0
            const/4 v0, 0x1
            goto :goto_0
            :cond_0
            const/4 v0, 0x2
            :goto_0
            return v0
        """)
        m = compute_cfg_metrics(smali)
        # Blocks: [const,if] [const,goto] [const] [return]
        assert m.block_count == 4
        assert m.cyclomatic_complexity == 2  # E - N + 2
        assert m.loop_count == 0
        assert m.max_fan_out == 2  # if-branch has 2 successors

    def test_loop_apktool(self):
        """Simple loop: goto back to earlier label."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 2
            const/4 v0, 0x0
            :loop_start
            add-int/lit8 v0, v0, 0x1
            const/16 v1, 0xa
            if-lt v0, v1, :loop_start
            return v0
        """)
        m = compute_cfg_metrics(smali)
        assert m.loop_count == 1  # back edge from if-lt to loop_start
        assert m.cyclomatic_complexity >= 2

    def test_if_branch_androguard(self):
        """If-else in androguard offset format."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = (
            "    const/4 v0, 0x0\n"
            "    if-eqz v0, +2h\n"        # skip 2 instructions ahead
            "    const/4 v0, 0x1\n"
            "    goto +1h\n"               # skip 1 ahead
            "    const/4 v0, 0x2\n"
            "    return v0"
        )
        m = compute_cfg_metrics(smali)
        assert m.block_count >= 3
        assert m.cyclomatic_complexity >= 2

    def test_multiple_if_branches(self):
        """Multiple if-branches increase cyclomatic complexity."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 3
            if-eqz v0, :cond_0
            if-eqz v1, :cond_1
            const/4 v2, 0x0
            goto :end
            :cond_0
            const/4 v2, 0x1
            goto :end
            :cond_1
            const/4 v2, 0x2
            :end
            return v2
        """)
        m = compute_cfg_metrics(smali)
        # Two if-branches: CC should be >= 3
        assert m.cyclomatic_complexity >= 3

    def test_return_terminates_block(self):
        """Return instruction terminates block with no successor."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 1
            const/4 v0, 0x0
            return v0
        """)
        m = compute_cfg_metrics(smali)
        assert m.block_count == 1
        assert m.edge_count == 0

    def test_throw_terminates_block(self):
        """Throw instruction terminates block with no successor."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 1
            new-instance v0, Ljava/lang/RuntimeException;
            invoke-direct {v0}, Ljava/lang/RuntimeException;-><init>()V
            throw v0
        """)
        m = compute_cfg_metrics(smali)
        assert m.block_count == 1
        assert m.edge_count == 0

    def test_max_depth_linear_chain(self):
        """Chain of blocks gives increasing depth."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        # 3 blocks chained: entry -> if -> fall-through -> return
        smali = textwrap.dedent("""\
            .registers 2
            const/4 v0, 0x0
            if-nez v0, :cond_0
            const/4 v0, 0x1
            :cond_0
            return v0
        """)
        m = compute_cfg_metrics(smali)
        assert m.max_depth >= 1

    def test_nested_loop_apktool(self):
        """Nested loop: two back edges."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 3
            const/4 v0, 0x0
            :outer
            const/4 v1, 0x0
            :inner
            add-int/lit8 v1, v1, 0x1
            if-lt v1, v2, :inner
            add-int/lit8 v0, v0, 0x1
            if-lt v0, v2, :outer
            return-void
        """)
        m = compute_cfg_metrics(smali)
        assert m.loop_count == 2

    def test_consistency_formula(self):
        """Verify E - N + 2 formula matches cyclomatic_complexity."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 2
            const/4 v0, 0x0
            if-eqz v0, :cond_0
            const/4 v0, 0x1
            goto :goto_0
            :cond_0
            const/4 v0, 0x2
            :goto_0
            return v0
        """)
        m = compute_cfg_metrics(smali)
        expected_cc = m.edge_count - m.block_count + 2
        assert m.cyclomatic_complexity == max(1, expected_cc)