diff options
| author | George Hazan <george.hazan@gmail.com> | 2024-06-21 14:29:17 +0300 |
|---|---|---|
| committer | George Hazan <george.hazan@gmail.com> | 2024-06-21 14:29:17 +0300 |
| commit | 46ea86584a9787c8b9dc3983cf23d9b5b93b5841 (patch) | |
| tree | fbaf3793ae2170f7982f08a62c028a23cd9afedd /libs/libsodium/src/crypto_verify | |
| parent | 82e75be329dd0f30c0281ef9c3c08488b89d109f (diff) | |
fixes #4477 (libsodium: update to 1.0.20)
Diffstat (limited to 'libs/libsodium/src/crypto_verify')
| -rw-r--r-- | libs/libsodium/src/crypto_verify/verify.c (renamed from libs/libsodium/src/crypto_verify/sodium/verify.c) | 194 |
1 files changed, 96 insertions, 98 deletions
diff --git a/libs/libsodium/src/crypto_verify/sodium/verify.c b/libs/libsodium/src/crypto_verify/verify.c index 18e8c9c898..c79d4aaf22 100644 --- a/libs/libsodium/src/crypto_verify/sodium/verify.c +++ b/libs/libsodium/src/crypto_verify/verify.c @@ -1,98 +1,96 @@ -
-#include <stddef.h>
-#include <stdint.h>
-
-#include "crypto_verify_16.h"
-#include "crypto_verify_32.h"
-#include "crypto_verify_64.h"
-
-size_t
-crypto_verify_16_bytes(void)
-{
- return crypto_verify_16_BYTES;
-}
-
-size_t
-crypto_verify_32_bytes(void)
-{
- return crypto_verify_32_BYTES;
-}
-
-size_t
-crypto_verify_64_bytes(void)
-{
- return crypto_verify_64_BYTES;
-}
-
-#if defined(HAVE_EMMINTRIN_H) && defined(__SSE2__)
-
-# ifdef __GNUC__
-# pragma GCC target("sse2")
-# endif
-# include <emmintrin.h>
-
-static inline int
-crypto_verify_n(const unsigned char *x_, const unsigned char *y_,
- const int n)
-{
- const __m128i zero = _mm_setzero_si128();
- volatile __m128i v1, v2, z;
- volatile int m;
- int i;
-
- const volatile __m128i *volatile x =
- (const volatile __m128i *volatile) (const void *) x_;
- const volatile __m128i *volatile y =
- (const volatile __m128i *volatile) (const void *) y_;
- v1 = _mm_loadu_si128((const __m128i *) &x[0]);
- v2 = _mm_loadu_si128((const __m128i *) &y[0]);
- z = _mm_xor_si128(v1, v2);
- for (i = 1; i < n / 16; i++) {
- v1 = _mm_loadu_si128((const __m128i *) &x[i]);
- v2 = _mm_loadu_si128((const __m128i *) &y[i]);
- z = _mm_or_si128(z, _mm_xor_si128(v1, v2));
- }
- m = _mm_movemask_epi8(_mm_cmpeq_epi32(z, zero));
- v1 = zero; v2 = zero; z = zero;
-
- return (int) (((uint32_t) m + 1U) >> 16) - 1;
-}
-
-#else
-
-static inline int
-crypto_verify_n(const unsigned char *x_, const unsigned char *y_,
- const int n)
-{
- const volatile unsigned char *volatile x =
- (const volatile unsigned char *volatile) x_;
- const volatile unsigned char *volatile y =
- (const volatile unsigned char *volatile) y_;
- volatile uint_fast16_t d = 0U;
- int i;
-
- for (i = 0; i < n; i++) {
- d |= x[i] ^ y[i];
- }
- return (1 & ((d - 1) >> 8)) - 1;
-}
-
-#endif
-
-int
-crypto_verify_16(const unsigned char *x, const unsigned char *y)
-{
- return crypto_verify_n(x, y, crypto_verify_16_BYTES);
-}
-
-int
-crypto_verify_32(const unsigned char *x, const unsigned char *y)
-{
- return crypto_verify_n(x, y, crypto_verify_32_BYTES);
-}
-
-int
-crypto_verify_64(const unsigned char *x, const unsigned char *y)
-{
- return crypto_verify_n(x, y, crypto_verify_64_BYTES);
-}
+ +#include <stddef.h> +#include <stdint.h> + +#include "crypto_verify_16.h" +#include "crypto_verify_32.h" +#include "crypto_verify_64.h" +#include "private/common.h" + +size_t +crypto_verify_16_bytes(void) +{ + return crypto_verify_16_BYTES; +} + +size_t +crypto_verify_32_bytes(void) +{ + return crypto_verify_32_BYTES; +} + +size_t +crypto_verify_64_bytes(void) +{ + return crypto_verify_64_BYTES; +} + +#if defined(HAVE_EMMINTRIN_H) && defined(__SSE2__) + +# include <emmintrin.h> + +static inline int +crypto_verify_n(const unsigned char *x_, const unsigned char *y_, + const int n) +{ + const __m128i zero = _mm_setzero_si128(); + volatile __m128i v1, v2, z; + volatile int m; + int i; + + const volatile __m128i *volatile x = + (const volatile __m128i *volatile) (const void *) x_; + const volatile __m128i *volatile y = + (const volatile __m128i *volatile) (const void *) y_; + v1 = _mm_loadu_si128((const __m128i *) &x[0]); + v2 = _mm_loadu_si128((const __m128i *) &y[0]); + z = _mm_xor_si128(v1, v2); + for (i = 1; i < n / 16; i++) { + v1 = _mm_loadu_si128((const __m128i *) &x[i]); + v2 = _mm_loadu_si128((const __m128i *) &y[i]); + z = _mm_or_si128(z, _mm_xor_si128(v1, v2)); + } + m = _mm_movemask_epi8(_mm_cmpeq_epi32(z, zero)); + v1 = zero; v2 = zero; z = zero; + + return (int) (((uint32_t) m + 1U) >> 16) - 1; +} + +#else + +static inline int +crypto_verify_n(const unsigned char *x_, const unsigned char *y_, + const int n) +{ + const volatile unsigned char *volatile x = + (const volatile unsigned char *volatile) x_; + const volatile unsigned char *volatile y = + (const volatile unsigned char *volatile) y_; + volatile uint_fast16_t d = 0U; + int i; + + for (i = 0; i < n; i++) { + d |= x[i] ^ y[i]; + } + return (1 & ((d - 1) >> 8)) - 1; +} + +#endif + +int +crypto_verify_16(const unsigned char *x, const unsigned char *y) +{ + return crypto_verify_n(x, y, crypto_verify_16_BYTES); +} + +int +crypto_verify_32(const unsigned char *x, const unsigned char *y) +{ + return crypto_verify_n(x, y, crypto_verify_32_BYTES); +} + +int +crypto_verify_64(const unsigned char *x, const unsigned char *y) +{ + return crypto_verify_n(x, y, crypto_verify_64_BYTES); +} |
