boto/boto — pull request #1453 by codyhanson (2013-04-22 17:09:11+00:00)
Title: S3 EncryptedKey class for transparent client-side AES256 encryption.

I have implemented a class for S3 called **EncryptedKey** which extends the functionality of Key by allowing the user to transparently encrypt and decrypt their data on their local machine before it is pushed/pulled from S3. **PyCrypto** and it's AES256 encryption are used, in Cipher Block Chaining mode. I thought that this could be an interesting feature, since the AWS Java SDK has a similar client-side encryption capability, and for privacy concerns, client-side encryption is far superior to trusting that it will be done on the server-side.

Here is an overview of what was done.

1. New boto.s3.encryptedkey.EncryptedKey class extends boto.s3.key.Key
* Overrides boto.s3.key.Key.get_contents_to_file and set_contents_from_file to enable an encryption/decryption step before being passed to the superclass's method.
2. Adapted the integration tests for Key to be compatible with EncryptedKey, in a new file.
3. Added Pycrypto 2.6.0 to the requirements.txt file.

If you think that this could be a good feature to add to the project, I would appreciate feedback on anything I can improve before it is merged into develop. This is my first open source contribution and there may be some procedures that I am not familiar with, or things that I need to cleanup, just let me know!

Cheers,
codyhanson