Search code examples
c++ccryptographyx86sha

Are there in x86 any instructions to accelerate SHA (SHA1/2/256/512) encoding?


An example, in x86 are Instruction Set to hardware acceleration AES. But are there in x86 any instructions to accelerate SHA (SHA1/2/256/512) encoding, and what library is the fastet to encoding SHA on x86?


Solution

  • Are there in x86 any instructions to accelerate SHA (SHA1/2/256/512) encoding?

    It's November 2016 and the answer is finally Yes. But its only SHA-1 and SHA-256 (and by extension, SHA-224).

    Intel CPUs with SHA extensions hit the market recently. It looks like processors which support it are Goldmont microarchitecture:

    • Pentium J4205 (desktop)
    • Pentium N4200 (mobile)
    • Celeron J3455 (desktop)
    • Celeron J3355 (desktop)
    • Celeron N3450 (mobile)
    • Celeron N3350 (mobile)

    I looked through offerings at Amazon for machines with the architecture or the processor numbers, but I did not find any available (yet). I believe HP Acer had one laptop with Pentium N4200 expected to be available in November 2016 December 2016 that would meet testing needs.

    For some of the technical details why it's only SHA-1, SHA-224 and SHA-256, then see crypto: arm64/sha256 - add support for SHA256 using NEON instructions on the kernel crypto mailing list. The short answer is, above SHA-256, things are not easily parallelizable.


    You can find source code for both Intel SHA intrinsics and ARMv8 SHA intrinsics at Noloader GitHub | SHA-Intrinsics. They are C source files, and provide the compress function for SHA-1, SHA-224 and SHA-256. The intrinsic-based implementations increase throughput approximately 3× to 4× for SHA-1, and approximately 6× to 12× for SHA-224 and SHA-256.