Embedded SDK
Embedded SDK
Loading...
Searching...
No Matches
cx_Groestl-ref.h
Go to the documentation of this file.
1#ifdef HAVE_GROESTL
2
3#ifndef __groestl_ref_h
4#define __groestl_ref_h
5
6// #include <stdio.h>
7// #include <stdlib.h>
8#define NEED_UINT_64T
9
10/* ****
11#include "brg_types.h"
12//Inline the file here:
13*/
14
15/*
16 ---------------------------------------------------------------------------
17 Copyright (c) 1998-2008, Brian Gladman, Worcester, UK. All rights reserved.
18
19 (a few lines added by Soeren S. Thomsen, October 2008)
20
21 LICENSE TERMS
22
23 The redistribution and use of this software (with or without changes)
24 is allowed without the payment of fees or royalties provided that:
25
26 1. source code distributions include the above copyright notice, this
27 list of conditions and the following disclaimer;
28
29 2. binary distributions include the above copyright notice, this list
30 of conditions and the following disclaimer in their documentation;
31
32 3. the name of the copyright holder is not used to endorse products
33 built using this software without specific written permission.
34
35 DISCLAIMER
36
37 This software is provided 'as is' with no explicit or implied warranties
38 in respect of its properties, including, but not limited to, correctness
39 and/or fitness for purpose.
40 ---------------------------------------------------------------------------
41 Issue Date: 20/12/2007
42
43 The unsigned integer types defined here are of the form uint_<nn>t where
44 <nn> is the length of the type; for example, the unsigned 32-bit type is
45 'uint_32t'. These are NOT the same as the 'C99 integer types' that are
46 defined in the inttypes.h and stdint.h headers since attempts to use these
47 types have shown that support for them is still highly variable. However,
48 since the latter are of the form uint<nn>_t, a regular expression search
49 and replace (in VC++ search on 'uint_{:z}t' and replace with 'uint\1_t')
50 can be used to convert the types used here to the C99 standard types.
51*/
52
53#ifndef _BRG_TYPES_H
54#define _BRG_TYPES_H
55
56#include <limits.h>
57
58#if defined(_MSC_VER) && (_MSC_VER >= 1300)
59#include <stddef.h>
60#define ptrint_t intptr_t
61#elif defined(__GNUC__) && (__GNUC__ >= 3)
62#include <stdint.h>
63#define ptrint_t intptr_t
64#else
65#define ptrint_t int
66#endif
67
68#ifndef BRG_UI8
69#define BRG_UI8
70#if UCHAR_MAX == 255u
71typedef unsigned char uint_8t;
72#else
73#error Please define uint_8t as an 8-bit unsigned integer type in brg_types.h
74#endif
75#endif
76
77#ifndef BRG_UI16
78#define BRG_UI16
79#if USHRT_MAX == 65535u
80typedef unsigned short uint_16t;
81#else
82#error Please define uint_16t as a 16-bit unsigned short type in brg_types.h
83#endif
84#endif
85
86#ifndef BRG_UI32
87#define BRG_UI32
88#if UINT_MAX == 4294967295u
89#define li_32(h) 0x##h##u
90typedef unsigned int uint_32t;
91#elif ULONG_MAX == 4294967295u
92#define li_32(h) 0x##h##ul
93typedef unsigned long uint_32t;
94#elif defined(_CRAY)
95#error This code needs 32-bit data types, which Cray machines do not provide
96#else
97#error Please define uint_32t as a 32-bit unsigned integer type in brg_types.h
98#endif
99#endif
100
101#ifndef BRG_UI64
102#if defined(__BORLANDC__) && !defined(__MSDOS__)
103#define BRG_UI64
104#define li_64(h) 0x##h##ui64
105typedef unsigned __int64 uint_64t;
106#elif defined(_MSC_VER) && (_MSC_VER < 1300) /* 1300 == VC++ 7.0 */
107#define BRG_UI64
108#define li_64(h) 0x##h##ui64
109typedef unsigned __int64 uint_64t;
110#elif defined(__sun) && defined(ULONG_MAX) && ULONG_MAX == 0xfffffffful
111#define BRG_UI64
112#define li_64(h) 0x##h##ull
113typedef unsigned long long uint_64t;
114#elif defined(__MVS__)
115#define BRG_UI64
116#define li_64(h) 0x##h##ull
117typedef unsigned int long long uint_64t;
118#elif defined(UINT_MAX) && UINT_MAX > 4294967295u
119#if UINT_MAX == 18446744073709551615u
120#define BRG_UI64
121#define li_64(h) 0x##h##u
122typedef unsigned int uint_64t;
123#endif
124#elif defined(ULONG_MAX) && ULONG_MAX > 4294967295u
125#if ULONG_MAX == 18446744073709551615ul
126#define BRG_UI64
127#define li_64(h) 0x##h##ul
128typedef unsigned long uint_64t;
129#endif
130#elif defined(ULLONG_MAX) && ULLONG_MAX > 4294967295u
131#if ULLONG_MAX == 18446744073709551615ull
132#define BRG_UI64
133#define li_64(h) 0x##h##ull
134typedef unsigned long long uint_64t;
135#endif
136#elif defined(ULONG_LONG_MAX) && ULONG_LONG_MAX > 4294967295u
137#if ULONG_LONG_MAX == 18446744073709551615ull
138#define BRG_UI64
139#define li_64(h) 0x##h##ull
140typedef unsigned long long uint_64t;
141#endif
142#endif
143#endif
144
145#if !defined(BRG_UI64)
146#if defined(NEED_UINT_64T)
147#error Please define uint_64t as an unsigned 64 bit type in brg_types.h
148#endif
149#endif
150
151#ifndef RETURN_VALUES
152#define RETURN_VALUES
153#if defined(DLL_EXPORT)
154#if defined(_MSC_VER) || defined(__INTEL_COMPILER)
155#define VOID_RETURN __declspec(dllexport) void __stdcall
156#define INT_RETURN __declspec(dllexport) int __stdcall
157#elif defined(__GNUC__)
158#define VOID_RETURN __declspec(__dllexport__) void
159#define INT_RETURN __declspec(__dllexport__) int
160#else
161#error Use of the DLL is only available on the Microsoft, Intel and GCC compilers
162#endif
163#elif defined(DLL_IMPORT)
164#if defined(_MSC_VER) || defined(__INTEL_COMPILER)
165#define VOID_RETURN __declspec(dllimport) void __stdcall
166#define INT_RETURN __declspec(dllimport) int __stdcall
167#elif defined(__GNUC__)
168#define VOID_RETURN __declspec(__dllimport__) void
169#define INT_RETURN __declspec(__dllimport__) int
170#else
171#error Use of the DLL is only available on the Microsoft, Intel and GCC compilers
172#endif
173#elif defined(__WATCOMC__)
174#define VOID_RETURN void __cdecl
175#define INT_RETURN int __cdecl
176#else
177#define VOID_RETURN void
178#define INT_RETURN int
179#endif
180#endif
181
182/* These defines are used to detect and set the memory alignment of pointers.
183 Note that offsets are in bytes.
184
185 ALIGN_OFFSET(x,n) return the positive or zero offset of
186 the memory addressed by the pointer 'x'
187 from an address that is aligned on an
188 'n' byte boundary ('n' is a power of 2)
189
190 ALIGN_FLOOR(x,n) return a pointer that points to memory
191 that is aligned on an 'n' byte boundary
192 and is not higher than the memory address
193 pointed to by 'x' ('n' is a power of 2)
194
195 ALIGN_CEIL(x,n) return a pointer that points to memory
196 that is aligned on an 'n' byte boundary
197 and is not lower than the memory address
198 pointed to by 'x' ('n' is a power of 2)
199*/
200
201#define ALIGN_OFFSET(x, n) (((ptrint_t) (x)) & ((n) -1))
202#define ALIGN_FLOOR(x, n) ((uint_8t *) (x) - (((ptrint_t) (x)) & ((n) -1)))
203#define ALIGN_CEIL(x, n) ((uint_8t *) (x) + (-((ptrint_t) (x)) & ((n) -1)))
204
205/* These defines are used to declare buffers in a way that allows
206 faster operations on longer variables to be used. In all these
207 defines 'size' must be a power of 2 and >= 8. NOTE that the
208 buffer size is in bytes but the type length is in bits
209
210 UNIT_TYPEDEF(x,size) declares a variable 'x' of length
211 'size' bits
212
213 BUFR_TYPEDEF(x,size,bsize) declares a buffer 'x' of length 'bsize'
214 bytes defined as an array of variables
215 each of 'size' bits (bsize must be a
216 multiple of size / 8)
217
218 UNIT_CAST(x,size) casts a variable to a type of
219 length 'size' bits
220
221 UPTR_CAST(x,size) casts a pointer to a pointer to a
222 variable of length 'size' bits
223*/
224
225#define UI_TYPE(size) uint_##size##t
226#define UNIT_TYPEDEF(x, size) typedef UI_TYPE(size) x
227#define BUFR_TYPEDEF(x, size, bsize) typedef UI_TYPE(size) x[bsize / (size >> 3)]
228#define UNIT_CAST(x, size) ((UI_TYPE(size))(x))
229#define UPTR_CAST(x, size) ((UI_TYPE(size) *) (x))
230
231/* Added by Soeren S. Thomsen (begin) */
232#define u8 uint_8t
233#define u32 uint_32t
234#define u64 uint_64t
235/* (end) */
236
237#endif
238
239/*
240//End of inline
241**** */
242
243#define ROWS 8
244#define LENGTHFIELDLEN ROWS
245#define COLS512 8
246#define COLS1024 16
247#define SIZE512 (ROWS * COLS512)
248// #define SIZE1024 (ROWS*COLS1024)
249#define ROUNDS512 10
250#define ROUNDS1024 14
251
252typedef enum {
253 P512 = 0,
254 Q512 = 1,
255 P1024 = 2,
256 Q1024 = 3
257} Variant;
258
259#define mul1(b) ((u8) (b))
260#define mul2(b) ((u8) ((b) >> 7 ? ((b) << 1) ^ 0x1b : ((b) << 1)))
261#define mul3(b) (mul2(b) ^ mul1(b))
262#define mul4(b) mul2(mul2(b))
263#define mul5(b) (mul4(b) ^ mul1(b))
264#define mul6(b) (mul4(b) ^ mul2(b))
265#define mul7(b) (mul4(b) ^ mul2(b) ^ mul1(b))
266
267/* NIST API begin */
268typedef unsigned long long DataLength;
269typedef enum {
270 SUCCESS = 0,
271 FAIL = 1,
272 BAD_HASHLEN = 2
273} HashReturn;
274/* NIST API end */
275
276/* helper functions */
277void PrintHash(BitSequence *, int);
278
279#endif /* __groestl_ref_h */
280
281#endif // HAVE_GROESTL