"Fossies" - the Fresh Open Source Software Archive

Member "cryptsetup-2.4.3/lib/crypto_backend/argon2/blake2/blamka-round-ref.h" (13 Jan 2022, 2732 Bytes) of package /linux/misc/cryptsetup-2.4.3.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "blamka-round-ref.h" see the Fossies "Dox" file reference documentation.

    1 /*
    2  * Argon2 reference source code package - reference C implementations
    3  *
    4  * Copyright 2015
    5  * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves
    6  *
    7  * You may use this work under the terms of a Creative Commons CC0 1.0
    8  * License/Waiver or the Apache Public License 2.0, at your option. The terms of
    9  * these licenses can be found at:
   10  *
   11  * - CC0 1.0 Universal : https://creativecommons.org/publicdomain/zero/1.0
   12  * - Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
   13  *
   14  * You should have received a copy of both of these licenses along with this
   15  * software. If not, they may be obtained at the above URLs.
   16  */
   17 
   18 #ifndef BLAKE_ROUND_MKA_H
   19 #define BLAKE_ROUND_MKA_H
   20 
   21 #include "blake2.h"
   22 #include "blake2-impl.h"
   23 
   24 /* designed by the Lyra PHC team */
   25 static BLAKE2_INLINE uint64_t fBlaMka(uint64_t x, uint64_t y) {
   26     const uint64_t m = UINT64_C(0xFFFFFFFF);
   27     const uint64_t xy = (x & m) * (y & m);
   28     return x + y + 2 * xy;
   29 }
   30 
   31 #define G(a, b, c, d)                                                          \
   32     do {                                                                       \
   33         a = fBlaMka(a, b);                                                     \
   34         d = rotr64(d ^ a, 32);                                                 \
   35         c = fBlaMka(c, d);                                                     \
   36         b = rotr64(b ^ c, 24);                                                 \
   37         a = fBlaMka(a, b);                                                     \
   38         d = rotr64(d ^ a, 16);                                                 \
   39         c = fBlaMka(c, d);                                                     \
   40         b = rotr64(b ^ c, 63);                                                 \
   41     } while ((void)0, 0)
   42 
   43 #define BLAKE2_ROUND_NOMSG(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,   \
   44                            v12, v13, v14, v15)                                 \
   45     do {                                                                       \
   46         G(v0, v4, v8, v12);                                                    \
   47         G(v1, v5, v9, v13);                                                    \
   48         G(v2, v6, v10, v14);                                                   \
   49         G(v3, v7, v11, v15);                                                   \
   50         G(v0, v5, v10, v15);                                                   \
   51         G(v1, v6, v11, v12);                                                   \
   52         G(v2, v7, v8, v13);                                                    \
   53         G(v3, v4, v9, v14);                                                    \
   54     } while ((void)0, 0)
   55 
   56 #endif