Blame cbits/decaf/utils.c
|
Packit |
141393 |
/* Copyright (c) 2015 Cryptography Research, Inc.
|
|
Packit |
141393 |
* Released under the MIT License. See LICENSE.txt for license information.
|
|
Packit |
141393 |
*/
|
|
Packit |
141393 |
|
|
Packit |
141393 |
/**
|
|
Packit |
141393 |
* @file utils.c
|
|
Packit |
141393 |
* @author Mike Hamburg
|
|
Packit |
141393 |
* @brief Decaf utility functions.
|
|
Packit |
141393 |
*/
|
|
Packit |
141393 |
|
|
Packit |
141393 |
#include <decaf/common.h>
|
|
Packit |
141393 |
|
|
Packit |
141393 |
void cryptonite_decaf_bzero (
|
|
Packit |
141393 |
void *s,
|
|
Packit |
141393 |
size_t size
|
|
Packit |
141393 |
) {
|
|
Packit |
141393 |
#ifdef __STDC_LIB_EXT1__
|
|
Packit |
141393 |
memset_s(s, size, 0, size);
|
|
Packit |
141393 |
#else
|
|
Packit |
141393 |
const size_t sw = sizeof(cryptonite_decaf_word_t);
|
|
Packit |
141393 |
volatile uint8_t *destroy = (volatile uint8_t *)s;
|
|
Packit |
141393 |
for (; size && ((uintptr_t)destroy)%sw; size--, destroy++)
|
|
Packit |
141393 |
*destroy = 0;
|
|
Packit |
141393 |
for (; size >= sw; size -= sw, destroy += sw)
|
|
Packit |
141393 |
*(volatile cryptonite_decaf_word_t *)destroy = 0;
|
|
Packit |
141393 |
for (; size; size--, destroy++)
|
|
Packit |
141393 |
*destroy = 0;
|
|
Packit |
141393 |
#endif
|
|
Packit |
141393 |
}
|
|
Packit |
141393 |
|
|
Packit |
141393 |
cryptonite_decaf_bool_t cryptonite_decaf_memeq (
|
|
Packit |
141393 |
const void *data1_,
|
|
Packit |
141393 |
const void *data2_,
|
|
Packit |
141393 |
size_t size
|
|
Packit |
141393 |
) {
|
|
Packit |
141393 |
const unsigned char *data1 = (const unsigned char *)data1_;
|
|
Packit |
141393 |
const unsigned char *data2 = (const unsigned char *)data2_;
|
|
Packit |
141393 |
unsigned char ret = 0;
|
|
Packit |
141393 |
for (; size; size--, data1++, data2++) {
|
|
Packit |
141393 |
ret |= *data1 ^ *data2;
|
|
Packit |
141393 |
}
|
|
Packit |
141393 |
return (((cryptonite_decaf_dword_t)ret) - 1) >> 8;
|
|
Packit |
141393 |
}
|