pqc/crypto_kem/ntruhps4096821/clean/verify.c

30 lines
708 B
C
Raw Normal View History

2019-04-15 00:58:56 +01:00
#include <stdint.h>
#include <stdlib.h>
#include "verify.h"
/* returns 0 for equal strings, 1 for non-equal strings */
unsigned char PQCLEAN_NTRUHPS4096821_CLEAN_verify(const unsigned char *a, const unsigned char *b, size_t len) {
uint64_t r;
size_t i;
r = 0;
for (i = 0; i < len; i++) {
r |= a[i] ^ b[i];
}
r = (~r + 1); // Two's complement
r >>= 63;
return (unsigned char)r;
}
/* b = 1 means mov, b = 0 means don't mov*/
void PQCLEAN_NTRUHPS4096821_CLEAN_cmov(unsigned char *r, const unsigned char *x, size_t len, unsigned char b) {
size_t i;
b = (~b + 1); // Two's complement
for (i = 0; i < len; i++) {
r[i] ^= b & (x[i] ^ r[i]);
}
}