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
}