]>
git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/blake2/blake2_impl.h
2 * Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the OpenSSL license (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
11 * Derived from the BLAKE2 reference implementation written by Samuel Neves.
12 * Copyright 2012, Samuel Neves <sneves@dei.uc.pt>
13 * More information about the BLAKE2 hash function and its implementations
14 * can be found at https://blake2.net.
19 static ossl_inline
uint32_t load32(const uint8_t *src
)
26 if (is_endian
.little
) {
28 memcpy(&w
, src
, sizeof(w
));
31 uint32_t w
= ((uint32_t)src
[0])
32 | ((uint32_t)src
[1] << 8)
33 | ((uint32_t)src
[2] << 16)
34 | ((uint32_t)src
[3] << 24);
39 static ossl_inline
uint64_t load64(const uint8_t *src
)
46 if (is_endian
.little
) {
48 memcpy(&w
, src
, sizeof(w
));
51 uint64_t w
= ((uint64_t)src
[0])
52 | ((uint64_t)src
[1] << 8)
53 | ((uint64_t)src
[2] << 16)
54 | ((uint64_t)src
[3] << 24)
55 | ((uint64_t)src
[4] << 32)
56 | ((uint64_t)src
[5] << 40)
57 | ((uint64_t)src
[6] << 48)
58 | ((uint64_t)src
[7] << 56);
63 static ossl_inline
void store32(uint8_t *dst
, uint32_t w
)
70 if (is_endian
.little
) {
71 memcpy(dst
, &w
, sizeof(w
));
73 uint8_t *p
= (uint8_t *)dst
;
76 for (i
= 0; i
< 4; i
++)
77 p
[i
] = (uint8_t)(w
>> (8 * i
));
81 static ossl_inline
void store64(uint8_t *dst
, uint64_t w
)
88 if (is_endian
.little
) {
89 memcpy(dst
, &w
, sizeof(w
));
91 uint8_t *p
= (uint8_t *)dst
;
94 for (i
= 0; i
< 8; i
++)
95 p
[i
] = (uint8_t)(w
>> (8 * i
));
99 static ossl_inline
uint64_t load48(const uint8_t *src
)
101 uint64_t w
= ((uint64_t)src
[0])
102 | ((uint64_t)src
[1] << 8)
103 | ((uint64_t)src
[2] << 16)
104 | ((uint64_t)src
[3] << 24)
105 | ((uint64_t)src
[4] << 32)
106 | ((uint64_t)src
[5] << 40);
110 static ossl_inline
void store48(uint8_t *dst
, uint64_t w
)
112 uint8_t *p
= (uint8_t *)dst
;
114 p
[1] = (uint8_t)(w
>>8);
115 p
[2] = (uint8_t)(w
>>16);
116 p
[3] = (uint8_t)(w
>>24);
117 p
[4] = (uint8_t)(w
>>32);
118 p
[5] = (uint8_t)(w
>>40);
121 static ossl_inline
uint32_t rotr32(const uint32_t w
, const unsigned int c
)
123 return (w
>> c
) | (w
<< (32 - c
));
126 static ossl_inline
uint64_t rotr64(const uint64_t w
, const unsigned int c
)
128 return (w
>> c
) | (w
<< (64 - c
));