The IdFIPS unit declares function pointers that allow Indy to interface with external hashing libraries, such as OpenSSL.
The TIdHashSHA1 class uses an external library if the appropriate SHA-1 function pointers have been assigned. Otherwise, it uses its own native implementation. However, the TIdHMACSHA1 class was ignoring that feature, relying solely on an external SHA-1 library being used.
TIdHMACSHA1 has been updated to now utilize Indy’s native SHA-1 implementation when an external SHA-1 library is not available. The TIdHashSHA1.IsAvailable() method now returns True on all platforms, not just on DotNet.
Hashing classes for SHA-224, SHA-256, SHA-384, and SHA-512 are not being updated at this time, as Indy does not yet have native implementations for those SHA versions. The classes still rely on an external SHA library being assigned to the IdFIPS function pointers. However, all of the TIdHMACSHAxxx classes now raise an exception during construction if their respective SHA implementations are not available at runtime.