16ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/*
26ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * math.h
36ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
46ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * crypto math operations and data types
56ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
66ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * David A. McGrew
76ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Cisco Systems, Inc.
86ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */
96ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/*
106ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
116ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Copyright (c) 2001-2006 Cisco Systems, Inc.
126ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * All rights reserved.
136ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
146ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Redistribution and use in source and binary forms, with or without
156ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * modification, are permitted provided that the following conditions
166ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * are met:
176ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
186ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   Redistributions of source code must retain the above copyright
196ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   notice, this list of conditions and the following disclaimer.
206ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
216ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   Redistributions in binary form must reproduce the above
226ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   copyright notice, this list of conditions and the following
236ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   disclaimer in the documentation and/or other materials provided
246ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   with the distribution.
256ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
266ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   Neither the name of the Cisco Systems, Inc. nor the names of its
276ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   contributors may be used to endorse or promote products derived
286ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   from this software without specific prior written permission.
296ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
306ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
316ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
326ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
336ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
346ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
356ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
366ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
376ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
386ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
396ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
406ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
416ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * OF THE POSSIBILITY OF SUCH DAMAGE.
426ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
436ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */
446ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
456ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#ifndef MATH_H
466ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define MATH_H
476ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
486ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#include "datatypes.h"
496ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
506ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgunsigned char
516ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv32_weight(v32_t a);
526ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
536ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgunsigned char
546ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv32_distance(v32_t x, v32_t y);
556ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
566ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgunsigned int
576ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv32_dot_product(v32_t a, v32_t b);
586ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
596ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgchar *
606ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv16_bit_string(v16_t x);
616ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
626ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgchar *
636ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv32_bit_string(v32_t x);
646ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
656ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgchar *
666ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv64_bit_string(const v64_t *x);
676ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
686ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgchar *
696ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgoctet_hex_string(uint8_t x);
706ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
716ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgchar *
726ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv16_hex_string(v16_t x);
736ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
746ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgchar *
756ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv32_hex_string(v32_t x);
766ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
776ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgchar *
786ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv64_hex_string(const v64_t *x);
796ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
806ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgint
816ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orghex_char_to_nibble(uint8_t c);
826ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
836ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgint
846ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgis_hex_string(char *s);
856ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
866ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv16_t
876ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orghex_string_to_v16(char *s);
886ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
896ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv32_t
906ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orghex_string_to_v32(char *s);
916ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
926ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv64_t
936ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orghex_string_to_v64(char *s);
946ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
956ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/* the matrix A[] is stored in column format, i.e., A[i] is
966ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org   the ith column of the matrix */
976ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
986ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orguint8_t
996ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgA_times_x_plus_b(uint8_t A[8], uint8_t x, uint8_t b);
1006ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1016ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
1026ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv16_copy_octet_string(v16_t *x, const uint8_t s[2]);
1036ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1046ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
1056ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv32_copy_octet_string(v32_t *x, const uint8_t s[4]);
1066ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1076ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
1086ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv64_copy_octet_string(v64_t *x, const uint8_t s[8]);
1096ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1106ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
1116ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv128_add(v128_t *z, v128_t *x, v128_t *y);
1126ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1136ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgint
1146ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgoctet_string_is_eq(uint8_t *a, uint8_t *b, int len);
1156ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1166ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
1176ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgoctet_string_set_to_zero(uint8_t *s, int len);
1186ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1196ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1206ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1216ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/*
1226ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * the matrix A[] is stored in column format, i.e., A[i] is the ith
1236ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * column of the matrix
1246ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org*/
1256ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orguint8_t
1266ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgA_times_x_plus_b(uint8_t A[8], uint8_t x, uint8_t b);
1276ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1286ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1296ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#if 0
1306ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#if WORDS_BIGENDIAN
1316ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1326ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define _v128_add(z, x, y) {                    \
1336ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  uint64_t tmp;					\
1346ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    						\
1356ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  tmp = x->v32[3] + y->v32[3];                  \
1366ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  z->v32[3] = (uint32_t) tmp;			\
1376ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  						\
1386ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  tmp =  x->v32[2] + y->v32[2] + (tmp >> 32);	\
1396ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  z->v32[2] = (uint32_t) tmp;                   \
1406ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org						\
1416ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  tmp =  x->v32[1] + y->v32[1] + (tmp >> 32);	\
1426ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  z->v32[1] = (uint32_t) tmp;			\
1436ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org                                                \
1446ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  tmp =  x->v32[0] + y->v32[0] + (tmp >> 32);	\
1456ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  z->v32[0] = (uint32_t) tmp;			\
1466ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org}
1476ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1486ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#else /* assume little endian architecture */
1496ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1506ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define _v128_add(z, x, y) {                    \
1516ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  uint64_t tmp;					\
1526ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org						\
1536ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  tmp = htonl(x->v32[3]) + htonl(y->v32[3]);	\
1546ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  z->v32[3] = ntohl((uint32_t) tmp);		\
1556ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  						\
1566ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  tmp =  htonl(x->v32[2]) + htonl(y->v32[2])	\
1576ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org       + htonl(tmp >> 32);			\
1586ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  z->v32[2] = ntohl((uint32_t) tmp);		\
1596ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org                                                \
1606ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  tmp =  htonl(x->v32[1]) + htonl(y->v32[1])	\
1616ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org       + htonl(tmp >> 32);			\
1626ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  z->v32[1] = ntohl((uint32_t) tmp);		\
1636ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  						\
1646ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  tmp =  htonl(x->v32[0]) + htonl(y->v32[0])	\
1656ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org       + htonl(tmp >> 32);			\
1666ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  z->v32[0] = ntohl((uint32_t) tmp);		\
1676ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org}
1686ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1696ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#endif /* WORDS_BIGENDIAN */
1706ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#endif
1716ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1726ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#ifdef DATATYPES_USE_MACROS  /* little functions are really macros */
1736ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1746ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define v128_set_to_zero(z)       _v128_set_to_zero(z)
1756ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define v128_copy(z, x)           _v128_copy(z, x)
1766ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define v128_xor(z, x, y)         _v128_xor(z, x, y)
1776ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define v128_and(z, x, y)         _v128_and(z, x, y)
1786ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define v128_or(z, x, y)          _v128_or(z, x, y)
1796ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define v128_complement(x)        _v128_complement(x)
1806ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define v128_is_eq(x, y)          _v128_is_eq(x, y)
1816ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define v128_xor_eq(x, y)         _v128_xor_eq(x, y)
1826ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define v128_get_bit(x, i)        _v128_get_bit(x, i)
1836ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define v128_set_bit(x, i)        _v128_set_bit(x, i)
1846ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define v128_clear_bit(x, i)      _v128_clear_bit(x, i)
1856ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define v128_set_bit_to(x, i, y)  _v128_set_bit_to(x, i, y)
1866ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1876ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#else
1886ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1896ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
1906ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv128_set_to_zero(v128_t *x);
1916ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1926ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgint
1936ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv128_is_eq(const v128_t *x, const v128_t *y);
1946ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1956ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
1966ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv128_copy(v128_t *x, const v128_t *y);
1976ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1986ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
1996ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv128_xor(v128_t *z, v128_t *x, v128_t *y);
2006ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2016ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
2026ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv128_and(v128_t *z, v128_t *x, v128_t *y);
2036ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2046ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
2056ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv128_or(v128_t *z, v128_t *x, v128_t *y);
2066ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2076ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
2086ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv128_complement(v128_t *x);
2096ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2106ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgint
2116ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv128_get_bit(const v128_t *x, int i);
2126ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2136ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
2146ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv128_set_bit(v128_t *x, int i) ;
2156ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2166ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
2176ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv128_clear_bit(v128_t *x, int i);
2186ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2196ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
2206ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgv128_set_bit_to(v128_t *x, int i, int y);
2216ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2226ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#endif /* DATATYPES_USE_MACROS */
2236ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2246ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/*
2256ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * octet_string_is_eq(a,b, len) returns 1 if the length len strings a
2266ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * and b are not equal, returns 0 otherwise
2276ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */
2286ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2296ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgint
2306ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgoctet_string_is_eq(uint8_t *a, uint8_t *b, int len);
2316ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2326ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
2336ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgoctet_string_set_to_zero(uint8_t *s, int len);
2346ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2356ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2366ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#endif /* MATH_H */
2376ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2386ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2396ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
240