crypto: arm64/sha2: integrate OpenSSL implementations of SHA256/SHA512
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH v4 1/1 crypto: arm64/sha2: integrate OpenSSL implementations of SHA256/SHA512
Quoted 18 lines · Ard Biesheuvel
This integrates both the accelerated scalar and the NEON implementations of SHA-224/256 as well as SHA-384/512 from the OpenSSL project.
Relative performance compared to the respective generic C versions:
| SHA256-scalar | SHA256-NEON* | SHA512 | ------------+-----------------+--------------+----------+ Cortex-A53 | 1.63x | 1.63x | 2.34x | Cortex-A57 | 1.43x | 1.59x | 1.95x | Cortex-A73 | 1.26x | 1.56x | ? |The core crypto code was authored by Andy Polyakov of the OpenSSL project, in collaboration with whom the upstream code was adapted so that this module can be built from the same version of sha512-armv8.pl.
The version in this patch was taken from OpenSSL commit
32bbb62ea634("sha/asm/sha512-armv8.pl: fix big-endian support in__KERNEL__case.")
Quoted 8 lines
* The core SHA algorithm is fundamentally sequential, but there is a secondary transformation involved, called the schedule update, which can be performed independently. The NEON version of SHA-224/SHA-256 only implements this part of the algorithm using NEON instructions, the sequential part is always done using scalar instructions.
Signed-off-by Ard Biesheuvel <[email protected]>---
Missing changelog:
v4: fixed the big-endian build; this required an upstream change (even
though upstream was not actually broken, since it explicitly defines __ARMEB__ on AArch64 big-endian builds), so this patch is now based on a more recent upstream OpenSSL commit (the __ILP32__ #ifdefs are still present but never active)
v3: at Will's request, the generated assembly files are now included
as .S_shipped files, for which generic build rules are defined already.
Note that sizeable patches like this one have caused issues in the past with patchwork, so for Herbert's convenience, the patch can be pulled from
http://git.kernel.org/cgit/linux/kernel/git/ardb/linux.git, branch arm64-sha256 (based on today's cryptodev)
PATCH v4 1/1 crypto: arm64/sha2: integrate OpenSSL implementations of SHA256/SHA512
Quoted 36 lines · Ard Biesheuvel
Quoted 18 lines · Ard Biesheuvel
This integrates both the accelerated scalar and the NEON implementations of SHA-224/256 as well as SHA-384/512 from the OpenSSL project.
Relative performance compared to the respective generic C versions:
| SHA256-scalar | SHA256-NEON* | SHA512 | ------------+-----------------+--------------+----------+ Cortex-A53 | 1.63x | 1.63x | 2.34x | Cortex-A57 | 1.43x | 1.59x | 1.95x | Cortex-A73 | 1.26x | 1.56x | ? |The core crypto code was authored by Andy Polyakov of the OpenSSL project, in collaboration with whom the upstream code was adapted so that this module can be built from the same version of sha512-armv8.pl.
The version in this patch was taken from OpenSSL commit
32bbb62ea634("sha/asm/sha512-armv8.pl: fix big-endian support in__KERNEL__case.")Quoted 8 lines
* The core SHA algorithm is fundamentally sequential, but there is a secondary transformation involved, called the schedule update, which can be performed independently. The NEON version of SHA-224/SHA-256 only implements this part of the algorithm using NEON instructions, the sequential part is always done using scalar instructions.
Signed-off-by Ard Biesheuvel <[email protected]>---
Missing changelog:
v4: fixed the big-endian build; this required an upstream change (even
though upstream was not actually broken, since it explicitly defines__ARMEB__on AArch64 big-endian builds), so this patch is now based on a more recent upstream OpenSSL commit (the__ILP32__#ifdefs are still present but never active)
Quoted 8 lines
v3: at Will's request, the generated assembly files are now included
as .S_shipped files, for which generic build rules are defined already.Note that sizeable patches like this one have caused issues in the past with patchwork, so for Herbert's convenience, the patch can be pulled from
http://git.kernel.org/cgit/linux/kernel/git/ardb/linux.git, branch arm64-sha256 (based on today's cryptodev)
Herbert,
Assuming that everyone is happy now (Will?), could we get this one queued for v4.10? The CRC stuff I sent over the past week can wait for v4.11 (and I should probably do a v2 roundup with everything combined), but this patch is good to go IMO
Thanks,
Ard.
Herbert Xu
maintainerPATCH v4 1/1 crypto: arm64/sha2: integrate OpenSSL implementations of SHA256/SHA512
Quoted 5 lines · Ard Biesheuvel
Assuming that everyone is happy now (Will?), could we get this one queued for v4.10? The CRC stuff I sent over the past week can wait for v4.11 (and I should probably do a v2 roundup with everything combined), but this patch is good to go IMO
Sorry, I overlooked it because it wasn't in patchwork. I have applied it now and will push it out soon.
Thanks,
Signature · 3 lines
Email: Herbert Xu <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
PATCH v4 1/1 crypto: arm64/sha2: integrate OpenSSL implementations of SHA256/SHA512
In reply to a message not in the archiveQuoted 25 lines · Ard Biesheuvel
This integrates both the accelerated scalar and the NEON implementations of SHA-224/256 as well as SHA-384/512 from the OpenSSL project.
Relative performance compared to the respective generic C versions:
| SHA256-scalar | SHA256-NEON* | SHA512 | ------------+-----------------+--------------+----------+ Cortex-A53 | 1.63x | 1.63x | 2.34x | Cortex-A57 | 1.43x | 1.59x | 1.95x | Cortex-A73 | 1.26x | 1.56x | ? |The core crypto code was authored by Andy Polyakov of the OpenSSL project, in collaboration with whom the upstream code was adapted so that this module can be built from the same version of sha512-armv8.pl.
The version in this patch was taken from OpenSSL commit
32bbb62ea634("sha/asm/sha512-armv8.pl: fix big-endian support in__KERNEL__case.")* The core SHA algorithm is fundamentally sequential, but there is a secondary transformation involved, called the schedule update, which can be performed independently. The NEON version of SHA-224/SHA-256 only implements this part of the algorithm using NEON instructions, the sequential part is always done using scalar instructions.
Signed-off-by Ard Biesheuvel <[email protected]>
Quoted 9 lines
--- arch/arm64/crypto/Kconfig | 8 + arch/arm64/crypto/Makefile | 17 + arch/arm64/crypto/sha256-core.S_shipped | 2061 ++++++++++++++++++++ arch/arm64/crypto/sha256-glue.c | 185 ++ arch/arm64/crypto/sha512-armv8.pl | 778 ++++++++ arch/arm64/crypto/sha512-core.S_shipped | 1085 +++++++++++ arch/arm64/crypto/sha512-glue.c | 94 + 7 files changed, 4228 insertions(+)
If I build a kernel with this applied and CRYPTO_SHA{256,512}_ARM64=y, then I end up with untracked .S files according to git:
$ git status Untracked files: arch/arm64/crypto/sha256-core.S arch/arm64/crypto/sha512-core.S
Will
PATCH v4 1/1 crypto: arm64/sha2: integrate OpenSSL implementations of SHA256/SHA512
Quoted 36 lines · Will Deacon
Quoted 25 lines · Ard Biesheuvel
This integrates both the accelerated scalar and the NEON implementations of SHA-224/256 as well as SHA-384/512 from the OpenSSL project.
Relative performance compared to the respective generic C versions:
| SHA256-scalar | SHA256-NEON* | SHA512 | ------------+-----------------+--------------+----------+ Cortex-A53 | 1.63x | 1.63x | 2.34x | Cortex-A57 | 1.43x | 1.59x | 1.95x | Cortex-A73 | 1.26x | 1.56x | ? |The core crypto code was authored by Andy Polyakov of the OpenSSL project, in collaboration with whom the upstream code was adapted so that this module can be built from the same version of sha512-armv8.pl.
The version in this patch was taken from OpenSSL commit
32bbb62ea634("sha/asm/sha512-armv8.pl: fix big-endian support in__KERNEL__case.")* The core SHA algorithm is fundamentally sequential, but there is a secondary transformation involved, called the schedule update, which can be performed independently. The NEON version of SHA-224/SHA-256 only implements this part of the algorithm using NEON instructions, the sequential part is always done using scalar instructions.
Signed-off-by Ard Biesheuvel <[email protected]>Quoted 9 lines
--- arch/arm64/crypto/Kconfig | 8 + arch/arm64/crypto/Makefile | 17 + arch/arm64/crypto/sha256-core.S_shipped | 2061 ++++++++++++++++++++ arch/arm64/crypto/sha256-glue.c | 185 ++ arch/arm64/crypto/sha512-armv8.pl | 778 ++++++++ arch/arm64/crypto/sha512-core.S_shipped | 1085 +++++++++++ arch/arm64/crypto/sha512-glue.c | 94 + 7 files changed, 4228 insertions(+)
Quoted 8 lines
If I build a kernel with this applied and CRYPTO_SHA{256,512}_ARM64=y, then I end up with untracked .S files according to git:
$ git status Untracked files: arch/arm64/crypto/sha256-core.S arch/arm64/crypto/sha512-core.S
Ah right, I forgot to add a .gitignore for these: that is required with .S_shipped files. I didn't spot this myself because I always build out of tree
Would you mind taking a separate patch for that?
PATCH v4 1/1 crypto: arm64/sha2: integrate OpenSSL implementations of SHA256/SHA512
Quoted 46 lines · Ard Biesheuvel
Quoted 36 lines · Will Deacon
Quoted 25 lines · Ard Biesheuvel
This integrates both the accelerated scalar and the NEON implementations of SHA-224/256 as well as SHA-384/512 from the OpenSSL project.
Relative performance compared to the respective generic C versions:
| SHA256-scalar | SHA256-NEON* | SHA512 | ------------+-----------------+--------------+----------+ Cortex-A53 | 1.63x | 1.63x | 2.34x | Cortex-A57 | 1.43x | 1.59x | 1.95x | Cortex-A73 | 1.26x | 1.56x | ? |The core crypto code was authored by Andy Polyakov of the OpenSSL project, in collaboration with whom the upstream code was adapted so that this module can be built from the same version of sha512-armv8.pl.
The version in this patch was taken from OpenSSL commit
32bbb62ea634("sha/asm/sha512-armv8.pl: fix big-endian support in__KERNEL__case.")* The core SHA algorithm is fundamentally sequential, but there is a secondary transformation involved, called the schedule update, which can be performed independently. The NEON version of SHA-224/SHA-256 only implements this part of the algorithm using NEON instructions, the sequential part is always done using scalar instructions.
Signed-off-by Ard Biesheuvel <[email protected]>Quoted 9 lines
--- arch/arm64/crypto/Kconfig | 8 + arch/arm64/crypto/Makefile | 17 + arch/arm64/crypto/sha256-core.S_shipped | 2061 ++++++++++++++++++++ arch/arm64/crypto/sha256-glue.c | 185 ++ arch/arm64/crypto/sha512-armv8.pl | 778 ++++++++ arch/arm64/crypto/sha512-core.S_shipped | 1085 +++++++++++ arch/arm64/crypto/sha512-glue.c | 94 + 7 files changed, 4228 insertions(+)Quoted 8 lines
If I build a kernel with this applied and CRYPTO_SHA{256,512}_ARM64=y, then I end up with untracked .S files according to git:
$ git status Untracked files: arch/arm64/crypto/sha256-core.S arch/arm64/crypto/sha512-core.S
Quoted 5 lines
Ah right, I forgot to add a .gitignore for these: that is required with .S_shipped files. I didn't spot this myself because I always build out of tree
Would you mind taking a separate patch for that?
I think this should all go via herbert, so I guess just send him the extra patch.
Will