General Design:
- Basic required arguments: provider, algorithm, algorithm parameters, key specification
- Parameters available by Name and
ID
- Operations can be manually bound for performance. Function pointers can be retreived from algorithms
- Encryption/Decryption mechanisms available with algorithm parameters and key specification separately.
- Streams are available (may actually point to an underlying stream (ex: OpenSSL BIO)
- Asynchronous operations should be available. begin_hash, end_hash ... a la .Net-type API
Message Digest
digestAlg = get_digest_alg(name)
digestParams = create_digest_params(digestAlg)
set_digest_pram(param, name, value...)
digest = create_digest(digestAlg, params)