Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

30 rader
708 B

  1. #include <stdint.h>
  2. #include <stdlib.h>
  3. #include "verify.h"
  4. /* returns 0 for equal strings, 1 for non-equal strings */
  5. unsigned char PQCLEAN_NTRUHPS4096821_CLEAN_verify(const unsigned char *a, const unsigned char *b, size_t len) {
  6. uint64_t r;
  7. size_t i;
  8. r = 0;
  9. for (i = 0; i < len; i++) {
  10. r |= a[i] ^ b[i];
  11. }
  12. r = (~r + 1); // Two's complement
  13. r >>= 63;
  14. return (unsigned char)r;
  15. }
  16. /* b = 1 means mov, b = 0 means don't mov*/
  17. void PQCLEAN_NTRUHPS4096821_CLEAN_cmov(unsigned char *r, const unsigned char *x, size_t len, unsigned char b) {
  18. size_t i;
  19. b = (~b + 1); // Two's complement
  20. for (i = 0; i < len; i++) {
  21. r[i] ^= b & (x[i] ^ r[i]);
  22. }
  23. }