[openssl] master update

Dr. Paul Dale pauli at openssl.org
Thu Sep 30 10:46:05 UTC 2021


The branch master has been updated
       via  611685adc04a7c7e9612d51e743044fdcd9d1846 (commit)
      from  0865200fe59e7b18fbef07077897e09ab39741dc (commit)


- Log -----------------------------------------------------------------
commit 611685adc04a7c7e9612d51e743044fdcd9d1846
Author: marcfedorow <mark.fedorov at cloudbear.ru>
Date:   Mon Sep 20 19:52:23 2021 +0300

    RISC-V support for the SHA512
    
    Reviewed-by: Tomas Mraz <tomas at openssl.org>
    Reviewed-by: Paul Dale <pauli at openssl.org>
    (Merged from https://github.com/openssl/openssl/pull/16638)

-----------------------------------------------------------------------

Summary of changes:
 crypto/sha/sha512.c | 121 +++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 115 insertions(+), 6 deletions(-)

diff --git a/crypto/sha/sha512.c b/crypto/sha/sha512.c
index ff035c469f..9600b370b4 100644
--- a/crypto/sha/sha512.c
+++ b/crypto/sha/sha512.c
@@ -432,6 +432,103 @@ static const SHA_LONG64 K512[80] = {
                                 : "=r"(ret)                     \
                                 : "r"(*((const SHA_LONG64 *)(&(x))))); ret; })
 #    endif
+#   elif (__riscv_zbkb || __riscv_zbb) && __riscv_xlen == 32
+#    define PULL64(x) ({ SHA_LONG64 ret;                                        \
+                        unsigned int *r = (unsigned int *)(&(ret));             \
+                        const unsigned int *p = (const unsigned int *)(&(x));   \
+                        asm ("rev8 %0, %1"                                      \
+                        : "=r"(r[0])                                            \
+                        : "r" (p[1]));                                          \
+                        asm ("rev8 %0, %1"                                      \
+                        : "=r"(r[1])                                            \
+                        : "r" (p[0])); ret;                                     })
+#   elif (__riscv_zbkb || __riscv_zbb) && __riscv_xlen == 64
+#    define PULL64(x) ({ SHA_LONG64 ret;    \
+                        asm ("rev8 %0, %1"  \
+                        : "=r"(ret)         \
+                        : "r"(x)); ret;     })
+#   endif
+#   if __riscv_zknh && __riscv_xlen == 32
+#    define Sigma0(x) ({ SHA_LONG64 ret; unsigned int *r = (unsigned int *)(&(ret));    \
+                        const unsigned int *p = (const unsigned int *)(&(x));           \
+                        asm ("sha512sum0r %0, %1, %2"                                   \
+                        : "=r"(r[0])                                                    \
+                        : "r" (p[0]), "r" (p[1]));                                      \
+                        asm ("sha512sum0r %0, %2, %1"                                   \
+                        : "=r"(r[1])                                                    \
+                        : "r" (p[0]), "r" (p[1])); ret;                                 })
+#    define Sigma1(x) ({ SHA_LONG64 ret; unsigned int *r = (unsigned int *)(&(ret));    \
+                        const unsigned int *p = (const unsigned int *)(&(x));           \
+                        asm ("sha512sum1r %0, %1, %2"                                   \
+                        : "=r"(r[0])                                                    \
+                        : "r" (p[0]), "r" (p[1]));                                      \
+                        asm ("sha512sum1r %0, %2, %1"                                   \
+                        : "=r"(r[1])                                                    \
+                        : "r" (p[0]), "r" (p[1])); ret;                                 })
+#    define sigma0(x) ({ SHA_LONG64 ret; unsigned int *r = (unsigned int *)(&(ret));    \
+                        const unsigned int *p = (const unsigned int *)(&(x));           \
+                        asm ("sha512sig0l %0, %1, %2"                                   \
+                        : "=r"(r[0])                                                    \
+                        : "r" (p[0]), "r" (p[1]));                                      \
+                        asm ("sha512sig0h %0, %2, %1"                                   \
+                        : "=r"(r[1])                                                    \
+                        : "r" (p[0]), "r" (p[1])); ret;                                 })
+#    define sigma1(x) ({ SHA_LONG64 ret; unsigned int *r = (unsigned int *)(&(ret));    \
+                        const unsigned int *p = (const unsigned int *)(&(x));           \
+                        asm ("sha512sig1l %0, %1, %2"                                   \
+                        : "=r"(r[0])                                                    \
+                        : "r" (p[0]), "r" (p[1]));                                      \
+                        asm ("sha512sig1h %0, %2, %1"                                   \
+                        : "=r"(r[1])                                                    \
+                        : "r" (p[0]), "r" (p[1])); ret;                                 })
+#   elif __riscv_zknh && __riscv_xlen == 64
+#    define Sigma0(x) ({ SHA_LONG64 ret;            \
+                        asm ("sha512sum0 %0, %1"    \
+                        : "=r"(ret)                 \
+                        : "r"(x)); ret;             })
+#    define Sigma1(x) ({ SHA_LONG64 ret;            \
+                        asm ("sha512sum1 %0, %1"    \
+                        : "=r"(ret)                 \
+                        : "r"(x)); ret;             })
+#    define sigma0(x) ({ SHA_LONG64 ret;            \
+                        asm ("sha512sig0 %0, %1"    \
+                        : "=r"(ret)                 \
+                        : "r"(x)); ret;             })
+#    define sigma1(x) ({ SHA_LONG64 ret;            \
+                        asm ("sha512sig1 %0, %1"    \
+                        : "=r"(ret)                 \
+                        : "r"(x)); ret;             })
+#   endif
+#   if (__riscv_zbt || __riscv_zpn) && __riscv_xlen == 32
+#    define Ch(x,y,z) ({  SHA_LONG64 ret; unsigned int *r = (unsigned int *)(&(ret));   \
+                        const unsigned int *xp = (const unsigned int *)(&(x));          \
+                        const unsigned int *yp = (const unsigned int *)(&(y));          \
+                        const unsigned int *zp = (const unsigned int *)(&(z));          \
+                        asm (".insn r4 0x33, 1, 0x3, %0, %2, %1, %3\n\t"                \
+                        : "=r"(r[0])                                                    \
+                        : "r"(xp[0]), "r"(yp[0]), "r"(zp[0]));                          \
+                        asm (".insn r4 0x33, 1, 0x3, %0, %2, %1, %3\n\t"                \
+                        : "=r"(r[1])                                                    \
+                        : "r"(xp[1]), "r"(yp[1]), "r"(zp[1])); ret;                     })
+#    define Maj(x,y,z) ({ SHA_LONG64 ret; unsigned int *r = (unsigned int *)(&(ret));   \
+                        const unsigned int *xp = (const unsigned int *)(&(x));          \
+                        const unsigned int *yp = (const unsigned int *)(&(y));          \
+                        const unsigned int *zp = (const unsigned int *)(&(z));          \
+                        asm (".insn r4 0x33, 1, 0x3, %0, %2, %1, %3\n\t"                \
+                        : "=r"(r[0])                                                    \
+                        : "r"(xp[0]^zp[0]), "r"(yp[0]), "r"(zp[0]));                    \
+                        asm (".insn r4 0x33, 1, 0x3, %0, %2, %1, %3\n\t"                \
+                        : "=r"(r[1])                                                    \
+                        : "r"(xp[1]^zp[1]), "r"(yp[1]), "r"(zp[1])); ret;               })
+#   elif (__riscv_zbt || __riscv_zpn) && __riscv_xlen == 64
+#    define Ch(x,y,z) ({  SHA_LONG64 ret;                           \
+                        asm (".insn r4 0x33, 1, 0x3, %0, %2, %1, %3"\
+                        : "=r"(ret)                                 \
+                        : "r"(x), "r"(y), "r"(z)); ret;             })
+#    define Maj(x,y,z) ({ SHA_LONG64 ret;                           \
+                        asm (".insn r4 0x33, 1, 0x3, %0, %2, %1, %3"\
+                        : "=r"(ret)                                 \
+                        : "r"(x^z), "r"(y), "r"(x)); ret;           })
 #   endif
 #  elif defined(_MSC_VER)
 #   if defined(_WIN64)         /* applies to both IA-64 and AMD64 */
@@ -472,12 +569,24 @@ static SHA_LONG64 __fastcall __pull64be(const void *x)
 # ifndef ROTR
 #  define ROTR(x,s)       (((x)>>s) | (x)<<(64-s))
 # endif
-# define Sigma0(x)       (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
-# define Sigma1(x)       (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))
-# define sigma0(x)       (ROTR((x),1)  ^ ROTR((x),8)  ^ ((x)>>7))
-# define sigma1(x)       (ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6))
-# define Ch(x,y,z)       (((x) & (y)) ^ ((~(x)) & (z)))
-# define Maj(x,y,z)      (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
+# ifndef Sigma0
+#  define Sigma0(x)       (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
+# endif
+# ifndef Sigma1
+#  define Sigma1(x)       (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))
+# endif
+# ifndef sigma0
+#  define sigma0(x)       (ROTR((x),1)  ^ ROTR((x),8)  ^ ((x)>>7))
+# endif
+# ifndef sigma1
+#  define sigma1(x)       (ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6))
+# endif
+# ifndef Ch
+#  define Ch(x,y,z)       (((x) & (y)) ^ ((~(x)) & (z)))
+# endif
+# ifndef Maj
+#  define Maj(x,y,z)      (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
+# endif
 
 # if defined(__i386) || defined(__i386__) || defined(_M_IX86)
 /*


More information about the openssl-commits mailing list