You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

44 lines
1.1 KiB

  1. /* Copyright (c) 2015 Cryptography Research, Inc.
  2. * Released under the MIT License. See LICENSE.txt for license information.
  3. */
  4. /**
  5. * @file utils.c
  6. * @author Mike Hamburg
  7. * @brief Decaf utility functions.
  8. */
  9. #include <decaf/common.h>
  10. void decaf_bzero (
  11. void *s,
  12. size_t size
  13. ) {
  14. #ifdef __STDC_LIB_EXT1__
  15. memset_s(s, size, 0, size);
  16. #else
  17. const size_t sw = sizeof(decaf_word_t);
  18. volatile uint8_t *destroy = (volatile uint8_t *)s;
  19. for (; size && ((uintptr_t)destroy)%sw; size--, destroy++)
  20. *destroy = 0;
  21. for (; size >= sw; size -= sw, destroy += sw)
  22. *(volatile decaf_word_t *)destroy = 0;
  23. for (; size; size--, destroy++)
  24. *destroy = 0;
  25. #endif
  26. }
  27. decaf_bool_t decaf_memeq (
  28. const void *data1_,
  29. const void *data2_,
  30. size_t size
  31. ) {
  32. const unsigned char *data1 = (const unsigned char *)data1_;
  33. const unsigned char *data2 = (const unsigned char *)data2_;
  34. unsigned char ret = 0;
  35. for (; size; size--, data1++, data2++) {
  36. ret |= *data1 ^ *data2;
  37. }
  38. return (((decaf_dword_t)ret) - 1) >> 8;
  39. }