Paper 2016/619

5Gen: A Framework for Prototyping Applications Using Multilinear Maps and Matrix Branching Programs

Kevin Lewi, Alex J. Malozemoff, Daniel Apon, Brent Carmer, Adam Foltzer, Daniel Wagner, David W. Archer, Dan Boneh, Jonathan Katz, and Mariana Raykova


Secure multilinear maps (mmaps) have been shown to have remarkable applications in cryptography, such as program obfuscation and multi-input functional encryption (MIFE). To date, there has been little evaluation of the performance of these applications. In this paper we initiate a systematic study of mmap-based constructions. We build a general framework, called 5Gen, to experiment with these applications. At the top layer we develop an optimizing compiler that takes in a high-level program and compiles it to an optimized matrix branching program needed for the applications we consider. Next, we optimize and experiment with several obfuscators and MIFE constructions and evaluate their performance. The 5Gen framework is modular and can easily accommodate new mmap constructions as well as new obfuscators and MIFE constructions. 5Gen is an open-source tool that can be used by other research groups to experiment with a variety of mmap-based constructions.

Note: Removed erroneous reference to 128-core machine in Table 8.3.

Available format(s)
Publication info
Published elsewhere. Major revision.ACM CCS 2016
multilinear mapsmatrix branching programsfunctional encryptionobfuscation
Contact author(s)
klewi @ cs stanford edu
2016-11-15: last of 2 revisions
2016-06-16: received
See all versions
Short URL
Creative Commons Attribution


      author = {Kevin Lewi and Alex J.  Malozemoff and Daniel Apon and Brent Carmer and Adam Foltzer and Daniel Wagner and David W.  Archer and Dan Boneh and Jonathan Katz and Mariana Raykova},
      title = {5Gen: A Framework for Prototyping Applications Using Multilinear Maps and Matrix Branching Programs},
      howpublished = {Cryptology ePrint Archive, Paper 2016/619},
      year = {2016},
      note = {\url{}},
      url = {}
Note: In order to protect the privacy of readers, does not use cookies or embedded third party content.