Traditional public-key encryption is an invaluable tool for the Web and is used by billions of users everyday for secure communication. Notwithstanding, traditional public-key encryption is an all-or-nothing concept: if you have the secret-key you can decrypt the ciphertext, otherwise you can not recover any information of the encrypted plaintext.This is becoming a limitation nowadays.In fact, the Internet 2.0 is moving towards the emerging paradigm of cloud computing, in which the users delegate their data to a cloud server and need to compute functions over the encrypted data.For these applications the notion of traditional encryption is unsatisfactory.When the data are encrypted the server needs a secret key to decrypt them but giving the secret key to the server enables it to learn all information not just the result of the computation over the encrypted data, as the users wish.Functional cryptography allows to selectively control the amount of information that the users can decrypt, thus enabling novel and powerful applications. Using Functional Encryption, Alice can publish a public-key that her colleagues can use to send to her Gmail’s account encrypted emails. If the emails were encrypted with traditional encryption schemes Gmail could not perform any meaningful operation, but if the emails are encrypted with a functional encryption system, Alice can give to Gmail a token for functions of her choice, for example a function that forwards messages coming from Bob to another account or discards messages coming from Eve. Google can apply this token to the encrypted data to compute what Alice wishes (e.g., forwarding a message to Bob or discarding a message).Moreover Google will only leak a minimal amount of information (e,g., whether a message have to be discarded) but not all the content of the encrypted messages.Software obfuscation is a tightly related primitive that allows to “obfuscate” a computer program so as to make it sufficiently unintelligible while preserving its functionality.This primitive was shown to be impossible to achieve in general but only recently in a breakthrough Garg, Gentry, Raykova, Halevi, Sahai and Waters constructed a variant of it that is called indistinguishability obfuscation and showed its tremendous power and in subsequent works many open problems in cryptography were solved using it.In this project, we will try to advance the area of functional cryptography and software obfuscation by tackling known problems, proposing and solving new ones, and finding new applications for these powerful primitives.In particular we identified several research directions in this area, specifically variants of functional encryption and related primitives, deniable cryptography, and definitional issues for functional encryption.