Added a set function to the smart pointers
Now there are only two encryption functions which should work for all inputs
and outputs. Now you can supply arbitrary input objects as well as outputs,
so the data can come from and go anywhere.