-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathkupyna256.h
38 lines (33 loc) · 906 Bytes
/
kupyna256.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#ifndef KUPYNA256_H_
#define KUPYNA256_H_
#include <stdint.h>
#if defined(__SSE2__)
#include <emmintrin.h>
#elif defined(__SSE__)
#include <xmmintrin.h>
#elif defined(__MMX__)
#include <mmintrin.h>
#endif
union uint512_t {
#if defined(__SSE2__)
__m128i h[4];
#elif defined(__SSE__)
__m128 h[4];
#elif defined(__MMX__)
__m64 mq[8];
#endif
uint64_t q[8];
uint8_t b[64];
};
struct kupyna256_ctx_t {
union uint512_t h;
union uint512_t m;
size_t pos;
uint64_t total;
};
void kupyna256_init(struct kupyna256_ctx_t* ctx);
void kupyna256_update(struct kupyna256_ctx_t* ctx, const uint8_t* data, size_t len);
void kupyna256_update_aligned(struct kupyna256_ctx_t* ctx, const uint8_t* data, size_t len);
void kupyna256_final(struct kupyna256_ctx_t* ctx, uint8_t* hash);
void kupyna256_final2(struct kupyna256_ctx_t* ctx, uint8_t* hash, size_t bits);
#endif /* KUPYNA256_H_ */