Branch data Line data Source code
1 : : /* utils.c - TinyCrypt platform-dependent run-time operations */ 2 : : 3 : : /* 4 : : * Copyright (C) 2017 by Intel Corporation, All Rights Reserved. 5 : : * 6 : : * Redistribution and use in source and binary forms, with or without 7 : : * modification, are permitted provided that the following conditions are met: 8 : : * 9 : : * - Redistributions of source code must retain the above copyright notice, 10 : : * this list of conditions and the following disclaimer. 11 : : * 12 : : * - Redistributions in binary form must reproduce the above copyright 13 : : * notice, this list of conditions and the following disclaimer in the 14 : : * documentation and/or other materials provided with the distribution. 15 : : * 16 : : * - Neither the name of Intel Corporation nor the names of its contributors 17 : : * may be used to endorse or promote products derived from this software 18 : : * without specific prior written permission. 19 : : * 20 : : * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 : : * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 : : * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 : : * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 24 : : * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 : : * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 : : * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 : : * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 : : * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 : : * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 : : * POSSIBILITY OF SUCH DAMAGE. 31 : : */ 32 : : 33 : : #include <tinycrypt/utils.h> 34 : : #include <tinycrypt/constants.h> 35 : : 36 : : #include <string.h> 37 : : 38 : : #define MASK_TWENTY_SEVEN 0x1b 39 : : 40 : 0 : unsigned int _copy(uint8_t *to, unsigned int to_len, 41 : : const uint8_t *from, unsigned int from_len) 42 : : { 43 [ # # ]: 0 : if (from_len <= to_len) { 44 : 0 : (void)memcpy(to, from, from_len); 45 : 0 : return from_len; 46 : : } else { 47 : : return TC_CRYPTO_FAIL; 48 : : } 49 : : } 50 : : 51 : 0 : void _set(void *to, uint8_t val, unsigned int len) 52 : : { 53 : 0 : (void)memset(to, val, len); 54 : 0 : } 55 : : 56 : : /* 57 : : * Doubles the value of a byte for values up to 127. 58 : : */ 59 : 0 : uint8_t _double_byte(uint8_t a) 60 : : { 61 : 0 : return ((a<<1) ^ ((a>>7) * MASK_TWENTY_SEVEN)); 62 : : } 63 : : 64 : 0 : int _compare(const uint8_t *a, const uint8_t *b, size_t size) 65 : : { 66 : 0 : const uint8_t *tempa = a; 67 : 0 : const uint8_t *tempb = b; 68 : 0 : uint8_t result = 0; 69 : : 70 [ # # ]: 0 : for (unsigned int i = 0; i < size; i++) { 71 : 0 : result |= tempa[i] ^ tempb[i]; 72 : : } 73 : 0 : return result; 74 : : }