The paper describes an implementation of Craig Gentry's fully homomorphic encryption scheme, similar to the variant used by Smart and Vercauteren. The main optimization is a key-generation method for the underlying somewhat homomorphic encryption that does not require full polynomial inversion, reducing the asymptotic complexity from $\widetilde{O}(n^{2.5})$ to $\widetilde{O}(n^{1.5})$. Other optimizations include a batching technique for encryption, a careful analysis of the degree of the decryption polynomial, and space/time trade-offs for the fully-homomorphic scheme. The implementation supports lattices of various dimensions, from 512 to 32768, with public-key sizes ranging from 70 MB to 2.3 GB, and bootstrapping operations taking from 30 seconds to 30 minutes. The key-generation process is decoupled from the lattice dimension, allowing for bootstrappable schemes in any given dimension, though security may be compromised for lower dimensions. The paper also discusses the background on lattices, ideal lattices, and GGH-type cryptosystems, and provides a detailed description of the key generation, polynomial inversion, and encryption processes.The paper describes an implementation of Craig Gentry's fully homomorphic encryption scheme, similar to the variant used by Smart and Vercauteren. The main optimization is a key-generation method for the underlying somewhat homomorphic encryption that does not require full polynomial inversion, reducing the asymptotic complexity from $\widetilde{O}(n^{2.5})$ to $\widetilde{O}(n^{1.5})$. Other optimizations include a batching technique for encryption, a careful analysis of the degree of the decryption polynomial, and space/time trade-offs for the fully-homomorphic scheme. The implementation supports lattices of various dimensions, from 512 to 32768, with public-key sizes ranging from 70 MB to 2.3 GB, and bootstrapping operations taking from 30 seconds to 30 minutes. The key-generation process is decoupled from the lattice dimension, allowing for bootstrappable schemes in any given dimension, though security may be compromised for lower dimensions. The paper also discusses the background on lattices, ideal lattices, and GGH-type cryptosystems, and provides a detailed description of the key generation, polynomial inversion, and encryption processes.