Validus 1.0.5
192-bit OWHF
Loading...
Searching...
No Matches
validus.h
Go to the documentation of this file.
1
30#ifndef _VALIDUS_H_INCLUDED
31# define _VALIDUS_H_INCLUDED
32
34
35# if defined(__linux__) || defined(__GNU__) || defined(__CYGWIN__) || \
36 defined(__GLIBC__) || defined(__HAIKU__) || defined(__APPLE__)
37# if defined(__APPLE__)
38# include <machine/endian.h>
39# else
40# include <endian.h>
41# endif
42# if !defined(LITTLE_ENDIAN) && defined(__LITTLE_ENDIAN)
43# define LITTLE_ENDIAN __LITTLE_ENDIAN
44# endif
45# if !defined(BIG_ENDIAN) && defined(__BIG_ENDIAN)
46# define BIG_ENDIAN __BIG_ENDIAN
47# endif
48# if !defined(BYTE_ORDER) && defined(__BYTE_ORDER)
49# define BYTE_ORDER __BYTE_ORDER
50# endif
51# endif
52
53# if defined(__sun)
54# include <sys/byteorder.h>
55# define LITTLE_ENDIAN 1234
56# define BIG_ENDIAN 4321
57# if defined(_BIG_ENDIAN)
58# define BYTE_ORDER BIG_ENDIAN
59# elif defined(_LITTLE_ENDIAN)
60# define BYTE_ORDER LITTLE_ENDIAN
61# else
62# error "failed to determine endian-ness of this Sun system."
63# endif
64# endif
65
66# if defined(_AIX) && !defined(BYTE_ORDER)
67# define LITTLE_ENDIAN 1234
68# define BIG_ENDIAN 4321
69# if defined(__BIG_ENDIAN__)
70# define BYTE_ORDER BIG_ENDIAN
71# elif defined(__LITTLE_ENDIAN__)
72# define BYTE_ORDER LITTLE_ENDIAN
73# else
74# error "failed to determine endian-ness of this IBM AIX system."
75# endif
76# endif
77
78# if defined(_WIN32)
79# define LITTLE_ENDIAN 1234
80# define BIG_ENDIAN 4321
81# define BYTE_ORDER LITTLE_ENDIAN
82# endif
83
84# if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN) || !defined(BIG_ENDIAN)
85# error "failed to determine endian-ness of this system."
86# endif
87
88# if BYTE_ORDER == BIG_ENDIAN
89# define VALIDUS_BIG_ENDIAN
90# endif
91
92# if !defined(_DEFAULT_SOURCE)
93# define _DEFAULT_SOURCE 1
94# endif
95
96# include <stdlib.h>
97# include <stdint.h>
98# include <stdbool.h>
99
111
113
114typedef uint8_t validus_octet;
115typedef uint32_t validus_word;
116
133
135
136# if defined(__cplusplus)
137extern "C" {
138# endif
139
153void validus_init(validus_state* state);
154
166void validus_append(validus_state* state, const void* data, size_t len);
167
177
185bool validus_compare(const validus_state *one, const validus_state *two);
186
197void _validus_process(validus_state* state, const validus_word* blk32);
198
199# if defined(__cplusplus)
200}
201# endif
202
207
209
217
219# define VALIDUS_FP_SIZE_B 192
220
222# define VALIDUS_FP_SIZE_O 48
223
225# define WORDALIGNED(addr) (((uintptr_t)(addr) & 0x3) == 0)
226
228# define OCTETSWAP(a, b) (a = ((b[3] << 24) | (b[2] << 16) | (b[1] << 8) | (b[0])))
229
231# define ROL(a, b) (((a) << (b)) | ((a) >> (32 - b)))
232
234# define ROR(a, b) (((a) >> (b)) | ((a) << (32 - b)))
235
237# define M0(a, b, c, d, e) ((((a) & (b)) ^ (((c) & (d)) ^ (e))))
238
240# define M1(a, b, c, d, e) ((((a) & (b)) ^ ((b) ^ ((c) & (d)) ^ (e))))
241
243# define M2(a, b, c, d, e) ((((a) & ((b) ^ (c))) ^ (~(d) & (e)) ^ (c)))
244
246# define M3(a, b, c, d, e) ((((a) & (b)) ^ ((c) & ((d) ^ (e))) ^ (e)))
247
249# define VC_0(a, b, c, d, e, f, r1, r2, blk, hcv) \
250 do { \
251 register validus_word t; \
252 t = a + M0(b, c, d, e, f) + ROL(blk + hcv, r1); \
253 a = ROR(t + blk, r2); \
254 } while (false)
255
257# define VC_1(a, b, c, d, e, f, r1, r2, blk, hcv) \
258 do { \
259 register validus_word t; \
260 t = a + M1(b, c, d, e, f) + ROL(blk + hcv, r1); \
261 a = ROR(t + blk, r2); \
262 } while (false)
263
265# define VC_2(a, b, c, d, e, f, r1, r2, blk, hcv) \
266 do { \
267 register validus_word t; \
268 t = a + M2(b, c, d, e, f) + ROL(blk + hcv, r1); \
269 a = ROR(t + blk, r2); \
270 } while (false)
271
273# define VC_3(a, b, c, d, e, f, r1, r2, blk, hcv) \
274 do { \
275 register validus_word t; \
276 t = a + M3(b, c, d, e, f) + ROL(blk + hcv, r1); \
277 a = ROR(t + blk, r2); \
278 } while (false)
279
280/* Initial state values. */
281# define VALIDUS_INIT_0 0x81010881U
282# define VALIDUS_INIT_1 0xA529298BU
283# define VALIDUS_INIT_2 0x66AC654AU
284# define VALIDUS_INIT_3 0x52865650U
285# define VALIDUS_INIT_4 0x18529234U
286# define VALIDUS_INIT_5 0x08508024U
287
288/* Constants used in compression functions. */
289# define VALIDUS_0 0x4528A03EU
290# define VALIDUS_1 0xCABBB352U
291# define VALIDUS_2 0x8147ED07U
292# define VALIDUS_3 0xAC5567E6U
293# define VALIDUS_4 0x244F0AE0U
294# define VALIDUS_5 0x7AE6DC24U
295# define VALIDUS_6 0x607FDE7AU
296# define VALIDUS_7 0xED604141U
297# define VALIDUS_8 0x8B601567U
298# define VALIDUS_9 0x94994DDDU
299# define VALIDUS_10 0x00910572U
300# define VALIDUS_11 0x6C036810U
301# define VALIDUS_12 0x74273753U
302# define VALIDUS_13 0x11809AECU
303# define VALIDUS_14 0x9EC28BE7U
304# define VALIDUS_15 0x856B6A07U
305# define VALIDUS_16 0xDCC772A0U
306# define VALIDUS_17 0x54854204U
307# define VALIDUS_18 0x7E8DDF77U
308# define VALIDUS_19 0x343C0872U
309# define VALIDUS_20 0xB9E401F3U
310# define VALIDUS_21 0x8001489EU
311# define VALIDUS_22 0xBBCC20ABU
312# define VALIDUS_23 0x364B7F69U
313# define VALIDUS_24 0x7EDFBBD5U
314# define VALIDUS_25 0x52CE4099U
315# define VALIDUS_26 0xDA9B320EU
316# define VALIDUS_27 0x84C954BCU
317# define VALIDUS_28 0xA03FA6A0U
318# define VALIDUS_29 0x13BE82F2U
319# define VALIDUS_30 0x7516470EU
320# define VALIDUS_31 0x6AC7D4C0U
321# define VALIDUS_32 0xFE4CF293U
322# define VALIDUS_33 0x93620C9CU
323# define VALIDUS_34 0x8C53D058U
324# define VALIDUS_35 0xEF9EE2C6U
325# define VALIDUS_36 0x61F9166FU
326# define VALIDUS_37 0x7A3FDA68U
327# define VALIDUS_38 0x22215B08U
328# define VALIDUS_39 0xAAA1C60CU
329# define VALIDUS_40 0x819EDDD8U
330# define VALIDUS_41 0xCCCD47FEU
331# define VALIDUS_42 0x470DF3E1U
332# define VALIDUS_43 0x7FFADD92U
333# define VALIDUS_44 0x433DC03CU
334# define VALIDUS_45 0xC8AE64A3U
335# define VALIDUS_46 0x80FB26C0U
336# define VALIDUS_47 0xAE0FC014U
337# define VALIDUS_48 0x2679D104U
338# define VALIDUS_49 0x7B8401BEU
339# define VALIDUS_50 0x5EFEE8A1U
340# define VALIDUS_51 0xEB231E3CU
341# define VALIDUS_52 0x8A75B5AEU
342# define VALIDUS_53 0x95D92CE8U
343# define VALIDUS_54 0x02D50CAFU
344# define VALIDUS_55 0x6D365104U
345# define VALIDUS_56 0x732ED60FU
346# define VALIDUS_57 0x0F414B6FU
347# define VALIDUS_58 0x9D4D3E47U
348# define VALIDUS_59 0x861754DCU
349# define VALIDUS_60 0xDEF6868EU
350# define VALIDUS_61 0x56357B91U
351# define VALIDUS_62 0x7E31DBF2U
352# define VALIDUS_63 0x322860B2U
353# define VALIDUS_64 0xB8018321U
354# define VALIDUS_65 0x800B8D5CU
355# define VALIDUS_66 0xBDB9B81FU
356# define VALIDUS_67 0x38569B47U
357# define VALIDUS_68 0x7F276A7BU
358# define VALIDUS_69 0x51109A87U
359# define VALIDUS_70 0xD871F179U
360# define VALIDUS_71 0x843121FCU
361# define VALIDUS_72 0xA1C46FE1U
362# define VALIDUS_73 0x15FAD577U
363# define VALIDUS_74 0x75FBF212U
364# define VALIDUS_75 0x6983B065U
365# define VALIDUS_76 0xFC09029AU
366# define VALIDUS_77 0x9233821DU
367# define VALIDUS_78 0x8D50D2F4U
368# define VALIDUS_79 0xF1DED4B0U
369# define VALIDUS_80 0x636A723DU
370# define VALIDUS_81 0x798F09EEU
371# define VALIDUS_82 0x1FF0EE3AU
372# define VALIDUS_83 0xA8F4FD78U
373# define VALIDUS_84 0x81FFF238U
374# define VALIDUS_85 0xCEE2F829U
375# define VALIDUS_86 0x48ED9435U
376# define VALIDUS_87 0x7FEB76B7U
377# define VALIDUS_88 0x414D7B3DU
378# define VALIDUS_89 0xC6A58615U
379# define VALIDUS_90 0x80B8912BU
380# define VALIDUS_91 0xAFD0AB19U
381# define VALIDUS_92 0x28A180F1U
382# define VALIDUS_93 0x7C173E98U
383# define VALIDUS_94 0x5D7653C5U
384# define VALIDUS_95 0xE8E7A7B1U
385# define VALIDUS_96 0x8994C3FBU
386# define VALIDUS_97 0x97219014U
387# define VALIDUS_98 0x0518D9C1U
388# define VALIDUS_99 0x6E6076FCU
389# define VALIDUS_100 0x722D372EU
390# define VALIDUS_101 0x0D00C2A5U
391# define VALIDUS_102 0x9BDFDBB4U
392# define VALIDUS_103 0x86CD0770U
393# define VALIDUS_104 0xE12840FFU
394# define VALIDUS_105 0x57DECA91U
395# define VALIDUS_106 0x7DCBB8A9U
396# define VALIDUS_107 0x3010B2D0U
397# define VALIDUS_108 0xB624CAE9U
398# define VALIDUS_109 0x80201605U
399# define VALIDUS_110 0xBFACA0B5U
400# define VALIDUS_111 0x3A5D3213U
401# define VALIDUS_112 0x7F64E5A9U
402# define VALIDUS_113 0x4F4C7390U
403# define VALIDUS_114 0xD64BDD44U
404# define VALIDUS_115 0x83A2DDFCU
405# define VALIDUS_116 0xA350C878U
406# define VALIDUS_117 0x18356491U
407# define VALIDUS_118 0x76D825F1U
408# define VALIDUS_119 0x683714FFU
409# define VALIDUS_120 0xF9C56410U
410# define VALIDUS_121 0x910DC6A7U
411# define VALIDUS_122 0x8E5708EEU
412# define VALIDUS_123 0xF41FE8CAU
413# define VALIDUS_124 0x64D3D441U
414# define VALIDUS_125 0x78D478E5U
415# define VALIDUS_126 0x1DBDF16BU
416# define VALIDUS_127 0xA74F3092U
417# define VALIDUS_128 0x826B225FU
418# define VALIDUS_129 0xD0FC9903U
419# define VALIDUS_130 0x4AC75AC1U
420# define VALIDUS_131 0x7FD1CCAAU
421# define VALIDUS_132 0x3F57F910U
422# define VALIDUS_133 0xC4A14172U
423# define VALIDUS_134 0x808031A0U
424# define VALIDUS_135 0xB19804F1U
425# define VALIDUS_136 0x2AC5EE66U
426# define VALIDUS_137 0x7CA086E3U
427# define VALIDUS_138 0x5BE63F66U
428# define VALIDUS_139 0xE6AE0B79U
429# define VALIDUS_140 0x88BD5259U
430# define VALIDUS_141 0x98725D07U
431# define VALIDUS_142 0x075C3E24U
432# define VALIDUS_143 0x6F81C20DU
433# define VALIDUS_144 0x71226F5DU
434# define VALIDUS_145 0x0ABF2ECDU
435# define VALIDUS_146 0x9A7A817EU
436# define VALIDUS_147 0x878C732EU
437# define VALIDUS_148 0xE35C74E1U
438# define VALIDUS_149 0x59810CE8U
439# define VALIDUS_150 0x7D5B7DCCU
440# define VALIDUS_151 0x2DF529C6U
441# define VALIDUS_152 0xB44DFF8AU
442# define VALIDUS_153 0x803EE0F3U
443# define VALIDUS_154 0xC1A4B268U
444# define VALIDUS_155 0x3C5F1A33U
445# define VALIDUS_156 0x7F982871U
446# define VALIDUS_157 0x4D81EFF9U
447# define VALIDUS_158 0xD429218FU
448# define VALIDUS_159 0x831E9426U
449# define VALIDUS_160 0xA4E49098U
450# define VALIDUS_161 0x1A6E027AU
451# define VALIDUS_162 0x77AAD103U
452# define VALIDUS_163 0x66E21D3FU
453# define VALIDUS_164 0xF7824573U
454# define VALIDUS_165 0x8FF0F1C9U
455# define VALIDUS_166 0x8F665D3EU
456# define VALIDUS_167 0xF661F0CAU
457# define VALIDUS_168 0x66351F7DU
458# define VALIDUS_169 0x78103647U
459# define VALIDUS_170 0x1B8891C7U
460# define VALIDUS_171 0xA5B08130U
461# define VALIDUS_172 0x82E065B1U
462# define VALIDUS_173 0xD319FF6AU
463# define VALIDUS_174 0x4C9B2181U
464# define VALIDUS_175 0x7FADE179U
465# define VALIDUS_176 0x3D5D61F3U
466# define VALIDUS_177 0xC2A1C024U
467# define VALIDUS_178 0x80520CA3U
468# define VALIDUS_179 0xB365A915U
469# define VALIDUS_180 0x2CE6ED63U
470# define VALIDUS_181 0x7D1FCF9CU
471# define VALIDUS_182 0x5A4ECB9DU
472# define VALIDUS_183 0xE4767747U
473# define VALIDUS_184 0x87EF7212U
474# define VALIDUS_185 0x99CB78BDU
475# define VALIDUS_186 0x099F0B5DU
476# define VALIDUS_187 0x709A1B02U
477# define VALIDUS_188 0x700E9401U
478# define VALIDUS_189 0x087CBE3DU
479# define VALIDUS_190 0x991D4C51U
480# define VALIDUS_191 0x885588BDU
481
486
487#endif /* !_VALIDUS_H_INCLUDED */
uint32_t validus_word
Validus word (32-bit).
Definition validus.h:115
void validus_init(validus_state *state)
Initializes a validus_state object.
Definition validus.c:32
void validus_append(validus_state *state, const void *data, size_t len)
Processes a block of data, accumulating the results in the validus_state object.
Definition validus.c:46
uint8_t validus_octet
Validus byte (8-bit).
Definition validus.h:114
void validus_finalize(validus_state *state)
Finalizes a Validus hashing operation.
Definition validus.c:76
void _validus_process(validus_state *state, const validus_word *blk32)
Processes a 192-bit block of data, accumulating the results in the validus_state object.
Definition validus.c:118
bool validus_compare(const validus_state *one, const validus_state *two)
Compares two validus_state objects for equality.
Definition validus.c:108
Represents the state of an individual Validus hash operation.
Definition validus.h:124
validus_word f5
Fingerprint word 5.
Definition validus.h:131
validus_word f4
Fingerprint word 4.
Definition validus.h:130
validus_word f0
Fingerprint word 0.
Definition validus.h:126
validus_word bits[2]
64-bit counter.
Definition validus.h:125
validus_word f1
Fingerprint word 1.
Definition validus.h:127
validus_word f3
Fingerprint word 3.
Definition validus.h:129
validus_word f2
Fingerprint word 2.
Definition validus.h:128