Cryptoprovider

Add custom interfaces for encryption and public key algorithms (see #9). A CryptoProvider allows accessing these algorithms by a string name.