/src/qtbase/src/3rdparty/blake2/src/blake2-impl.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | BLAKE2 reference source code package - reference C implementations |
3 | | |
4 | | Copyright 2012, Samuel Neves <sneves@dei.uc.pt>. You may use this under the |
5 | | terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at |
6 | | your option. The terms of these licenses can be found at: |
7 | | |
8 | | - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 |
9 | | - OpenSSL license : https://www.openssl.org/source/license.html |
10 | | - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 |
11 | | |
12 | | More information about the BLAKE2 hash function can be found at |
13 | | https://blake2.net. |
14 | | */ |
15 | | #ifndef BLAKE2_IMPL_H |
16 | | #define BLAKE2_IMPL_H |
17 | | |
18 | | #include <stdint.h> |
19 | | #include <string.h> |
20 | | |
21 | | #if !defined(__cplusplus) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L) |
22 | | #if defined(_MSC_VER) |
23 | | #define BLAKE2_INLINE __inline |
24 | | #elif defined(__GNUC__) |
25 | | #define BLAKE2_INLINE __inline__ |
26 | | #else |
27 | | #define BLAKE2_INLINE |
28 | | #endif |
29 | | #else |
30 | | #define BLAKE2_INLINE inline |
31 | | #endif |
32 | | |
33 | | static BLAKE2_INLINE uint32_t load32( const void *src ) |
34 | 0 | { |
35 | | #if defined(NATIVE_LITTLE_ENDIAN) |
36 | | uint32_t w; |
37 | | memcpy(&w, src, sizeof w); |
38 | | return w; |
39 | | #else |
40 | 0 | const uint8_t *p = ( const uint8_t * )src; |
41 | 0 | return (( uint32_t )( p[0] ) << 0) | |
42 | 0 | (( uint32_t )( p[1] ) << 8) | |
43 | 0 | (( uint32_t )( p[2] ) << 16) | |
44 | 0 | (( uint32_t )( p[3] ) << 24) ; |
45 | 0 | #endif |
46 | 0 | } |
47 | | |
48 | | static BLAKE2_INLINE uint64_t load64( const void *src ) |
49 | 0 | { |
50 | | #if defined(NATIVE_LITTLE_ENDIAN) |
51 | | uint64_t w; |
52 | | memcpy(&w, src, sizeof w); |
53 | | return w; |
54 | | #else |
55 | 0 | const uint8_t *p = ( const uint8_t * )src; |
56 | 0 | return (( uint64_t )( p[0] ) << 0) | |
57 | 0 | (( uint64_t )( p[1] ) << 8) | |
58 | 0 | (( uint64_t )( p[2] ) << 16) | |
59 | 0 | (( uint64_t )( p[3] ) << 24) | |
60 | 0 | (( uint64_t )( p[4] ) << 32) | |
61 | 0 | (( uint64_t )( p[5] ) << 40) | |
62 | 0 | (( uint64_t )( p[6] ) << 48) | |
63 | 0 | (( uint64_t )( p[7] ) << 56) ; |
64 | 0 | #endif |
65 | 0 | } |
66 | | |
67 | | static BLAKE2_INLINE uint16_t load16( const void *src ) |
68 | 0 | { |
69 | 0 | #if defined(NATIVE_LITTLE_ENDIAN) |
70 | 0 | uint16_t w; |
71 | 0 | memcpy(&w, src, sizeof w); |
72 | 0 | return w; |
73 | 0 | #else |
74 | 0 | const uint8_t *p = ( const uint8_t * )src; |
75 | 0 | return ( uint16_t )((( uint32_t )( p[0] ) << 0) | |
76 | 0 | (( uint32_t )( p[1] ) << 8)); |
77 | 0 | #endif |
78 | 0 | } |
79 | | |
80 | | static BLAKE2_INLINE void store16( void *dst, uint16_t w ) |
81 | 0 | { |
82 | | #if defined(NATIVE_LITTLE_ENDIAN) |
83 | | memcpy(dst, &w, sizeof w); |
84 | | #else |
85 | 0 | uint8_t *p = ( uint8_t * )dst; |
86 | 0 | *p++ = ( uint8_t )w; w >>= 8; |
87 | 0 | *p++ = ( uint8_t )w; |
88 | 0 | #endif |
89 | 0 | } |
90 | | |
91 | | static BLAKE2_INLINE void store32( void *dst, uint32_t w ) |
92 | 0 | { |
93 | | #if defined(NATIVE_LITTLE_ENDIAN) |
94 | | memcpy(dst, &w, sizeof w); |
95 | | #else |
96 | 0 | uint8_t *p = ( uint8_t * )dst; |
97 | 0 | p[0] = (uint8_t)(w >> 0); |
98 | 0 | p[1] = (uint8_t)(w >> 8); |
99 | 0 | p[2] = (uint8_t)(w >> 16); |
100 | 0 | p[3] = (uint8_t)(w >> 24); |
101 | 0 | #endif |
102 | 0 | } |
103 | | |
104 | | static BLAKE2_INLINE void store64( void *dst, uint64_t w ) |
105 | 0 | { |
106 | | #if defined(NATIVE_LITTLE_ENDIAN) |
107 | | memcpy(dst, &w, sizeof w); |
108 | | #else |
109 | 0 | uint8_t *p = ( uint8_t * )dst; |
110 | 0 | p[0] = (uint8_t)(w >> 0); |
111 | 0 | p[1] = (uint8_t)(w >> 8); |
112 | 0 | p[2] = (uint8_t)(w >> 16); |
113 | 0 | p[3] = (uint8_t)(w >> 24); |
114 | 0 | p[4] = (uint8_t)(w >> 32); |
115 | 0 | p[5] = (uint8_t)(w >> 40); |
116 | 0 | p[6] = (uint8_t)(w >> 48); |
117 | 0 | p[7] = (uint8_t)(w >> 56); |
118 | 0 | #endif |
119 | 0 | } |
120 | | |
121 | | static BLAKE2_INLINE uint64_t load48( const void *src ) |
122 | 0 | { |
123 | 0 | const uint8_t *p = ( const uint8_t * )src; |
124 | 0 | return (( uint64_t )( p[0] ) << 0) | |
125 | 0 | (( uint64_t )( p[1] ) << 8) | |
126 | 0 | (( uint64_t )( p[2] ) << 16) | |
127 | 0 | (( uint64_t )( p[3] ) << 24) | |
128 | 0 | (( uint64_t )( p[4] ) << 32) | |
129 | 0 | (( uint64_t )( p[5] ) << 40) ; |
130 | 0 | } |
131 | | |
132 | | static BLAKE2_INLINE void store48( void *dst, uint64_t w ) |
133 | 0 | { |
134 | 0 | uint8_t *p = ( uint8_t * )dst; |
135 | 0 | p[0] = (uint8_t)(w >> 0); |
136 | 0 | p[1] = (uint8_t)(w >> 8); |
137 | 0 | p[2] = (uint8_t)(w >> 16); |
138 | 0 | p[3] = (uint8_t)(w >> 24); |
139 | 0 | p[4] = (uint8_t)(w >> 32); |
140 | 0 | p[5] = (uint8_t)(w >> 40); |
141 | 0 | } |
142 | | |
143 | | static BLAKE2_INLINE uint32_t rotr32( const uint32_t w, const unsigned c ) |
144 | 0 | { |
145 | 0 | return ( w >> c ) | ( w << ( 32 - c ) ); |
146 | 0 | } |
147 | | |
148 | | static BLAKE2_INLINE uint64_t rotr64( const uint64_t w, const unsigned c ) |
149 | 0 | { |
150 | 0 | return ( w >> c ) | ( w << ( 64 - c ) ); |
151 | 0 | } |
152 | | |
153 | | /* prevents compiler optimizing out memset() */ |
154 | | static BLAKE2_INLINE void secure_zero_memory(void *v, size_t n) |
155 | 0 | { |
156 | 0 | static void *(*const volatile memset_v)(void *, int, size_t) = &memset; |
157 | 0 | memset_v(v, 0, n); |
158 | 0 | } |
159 | | |
160 | | #endif |