I see this discrepancy in the implementation
Code:
// in DECHash.pas
THashBaseMD4 = class(TDECHashAuthentication)
THash_SHA0 = class(THashBaseMD4)
THash_SHA256 = class(THash_SHA0)
// while in DECHashAuthentication.pas
TDECHashAuthentication = class(TDECHash)
// but in DECHashBase.pas
TDECHash = class(TDECObject, IDECHash)
Now we left with TDECHash without visibility to TDECHashAuthentication and its class methods, while all the derived class has full functionality of HashAuthentication,
What is misleading is the naming in TDECHashAuthentication, as the main class (core type) to be used is TDECHashAuthenticationClass from DECHashAuthentication.pas, not TDECHashClass from DECHashBase.
With current implementation, de facto the base class is TDECHashAuthentication !
and that why i suggest to not change anything for now, just add documented global function (like ValidPasswordHash) to serve this functionality where the result is TDECHashAuthenticationClass , but the input is TDECHashClass !!