On 21/10/26 08:46, Stian Halseth wrote:
Implement the SHA1, SHA256 and SHA512 instructions according
to OSA (Oracle SPARC Architecture) 2011 section 7.115,
using the algorithms defined in FIPS 180-4, and set the
SHA1/SHA256/SHA512 bits in the CFR.
Read and update the fixed floating-point registers and mark the
lower FPR bank dirty. Share the SHA-2 Boolean functions between
the SHA256 and SHA512 helpers.
Gated behind the crypto CPU feature and disabled for sparc32.
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Tested-by: Philippe Mathieu-Daudé <[email protected]>
Signed-off-by: Stian Halseth <[email protected]>
---
target/sparc/crypto_helper.c | 274 +++++++++++++++++++++++++++++++++++
target/sparc/helper.h | 4 +
target/sparc/insns.decode | 4 +
target/sparc/translate.c | 21 ++-
4 files changed, 302 insertions(+), 1 deletion(-)
+/*
+ * Compress one SHA-1 block from f8-f23 into f0-f4.
+ * Clear f5 to match SPARC M7 behavior.
+ */
+void helper_sha1(CPUSPARCState *env)
+{
Looking deeper, this is a dup of mips::octeon_sha1_transform()
in target/mips/tcg/octeon_crypto.c.
+}
+
+/* SHA-2 Boolean functions. */
+static inline uint64_t sha_ch(uint64_t x, uint64_t y, uint64_t z)
+{
+ return (x & y) ^ (~x & z);
+}
+
+static inline uint64_t sha_maj(uint64_t x, uint64_t y, uint64_t z)
+{
+ return (x & y) ^ (x & z) ^ (y & z);
+}
+
+static const uint32_t sha256_k[64] = {
Dup of s390x::K and mips::k.
(target/s390x/tcg/cpacf_sha256.c)
+};
+
+static const uint64_t sha512_k[80] = {
Dup of s390x::K and mips::k.
(target/s390x/tcg/cpacf_sha512.c)
+};
+
+/* Compress 16 numeric message words into the supplied SHA-256 state. */
+static void sha256_compress(uint32_t state[8], const uint32_t block[16])
+{
Dup of s390x::sha256_bda() and mips::octeon_sha256_transform().
Worth consolidate as include/crypto/sha-block.h
+}
+
+/* Compress 16 numeric message words into the supplied SHA-512 state. */
+static void sha512_compress(uint64_t state[8], const uint64_t block[16])
+{
Dup of s390x::sha512_bda() and mips::octeon_sha512_transform().
+}
Since this commit is reviewed, let's do a consolidation cleanup on top.