Proper support for encryption.
Add compression support.

Also supports using algorithms conditionally with AvailabilityInterface.