stellar-veritas/bundled/cbits/ref10/crypto_verify.c
2026-01-25 02:27:22 +01:00

67 lines
1.1 KiB
C

#include "crypto_verify.h"
#define VERIFY_F(i) differentbits |= x[i] ^ y[i];
static inline
int crypto_verify_16(const unsigned char *x,const unsigned char *y)
{
unsigned int differentbits = 0;
VERIFY_F(0)
VERIFY_F(1)
VERIFY_F(2)
VERIFY_F(3)
VERIFY_F(4)
VERIFY_F(5)
VERIFY_F(6)
VERIFY_F(7)
VERIFY_F(8)
VERIFY_F(9)
VERIFY_F(10)
VERIFY_F(11)
VERIFY_F(12)
VERIFY_F(13)
VERIFY_F(14)
VERIFY_F(15)
return (1 & ((differentbits - 1) >> 8)) - 1;
}
static inline
int crypto_verify_32(const unsigned char *x,const unsigned char *y)
{
unsigned int differentbits = 0;
VERIFY_F(0)
VERIFY_F(1)
VERIFY_F(2)
VERIFY_F(3)
VERIFY_F(4)
VERIFY_F(5)
VERIFY_F(6)
VERIFY_F(7)
VERIFY_F(8)
VERIFY_F(9)
VERIFY_F(10)
VERIFY_F(11)
VERIFY_F(12)
VERIFY_F(13)
VERIFY_F(14)
VERIFY_F(15)
VERIFY_F(16)
VERIFY_F(17)
VERIFY_F(18)
VERIFY_F(19)
VERIFY_F(20)
VERIFY_F(21)
VERIFY_F(22)
VERIFY_F(23)
VERIFY_F(24)
VERIFY_F(25)
VERIFY_F(26)
VERIFY_F(27)
VERIFY_F(28)
VERIFY_F(29)
VERIFY_F(30)
VERIFY_F(31)
return (1 & ((differentbits - 1) >> 8)) - 1;
}
#undef VERIFY_F