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