Construct a cmCryptoHash subclass instance based on the name of the desired hash algorithm.
Add a file() command API for SHA1, SHA224, SHA256, SHA384, and SHA512.
Define an abstract API around the backend hash algorithm. Expose ifstream errors to HashFile callers. Always try opening the file. Succeed only if the end of file is reached without error.