[fpc-devel] x86_64 SHA1 implementation
J. Gareth Moreton
gareth at moreton-family.com
Sat Sep 16 17:45:18 CEST 2023
I missed this post - thanks Florian!
Indeed, SHA-1 is deprecated at least as far as being a cryptographic
algorithm is concerned, but it still has some uses in data verification
in a similar vein to MD5. I know git uses it internally so server
branches can't be corrupted.
I have probably spent too much time on SHA-1 already - its awkward size
of 160 bits has always irked me... not a clean power of two!
Speaking of the Intel SHA instructions, can I introduce a merge request
that adds "CPUX86_HAS_SHA" as a feature flag? I know to add it for
"cpu_zen" and later, but I'm not sure what the equivalent Intel
processor is... is "cpu_core_avx2" okay or does there need to be a new one?
On 15/09/2023 22:48, Florian Klämpfl via fpc-devel wrote:
> Am 16.09.23 um 15:13 schrieb J. Gareth Moreton via fpc-devel:
>> Hi everyone,
>> So this past week I've been building on Rika's work by adding an
>> assembly version of SHA-1 for x86_64 to complement Rika's i386
>> version. So far I've successfully made a version that runs twice as
>> fast as the Pascal code. I hoped to go even faster by making use of
>> the SSE2 instruction set, but currently the end result is slower even
>> though computing the common parts of 4 rounds simultaneously should
>> be much faster. This occurs even when I forgo writing to the stack
>> and keep pretty much all of the state within registers. Preliminary
>> investigation suggests that the slowdown comes from using MOVD/Q to
>> transfer data between the XMM registers and general-purpose
>> registers, since they are different parts of the CPU. I'm still
>> amazed it causes this much latency though.
>> I'll keep investigating and seeing if I can squeeze out more
>> performance, but otherwise I may just have to fall back on a
>> non-SIMD-optimised implementation.
> As SHA-1 is basically deprecated and not recommended to be used
> anymore, I wouldn't spend too much into this. Besides this, for SHA-1
> and SHA-256, it might be even more useful to use the SHA CPU
> extensions if available. While they are only introduced in Ice Lake
> and Zen, they will get more and more available in the future.
> fpc-devel maillist - fpc-devel at lists.freepascal.org
More information about the fpc-devel