Coverage Report

Created: 2025-04-11 06:45

/src/wolfssl/wolfssl/wolfcrypt/blake2-int.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
   BLAKE2 reference source code package - reference C implementations
3
4
   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>
5
6
   To the extent possible under law, the author(s) have dedicated all copyright
7
   and related and neighboring rights to this software to the public domain
8
   worldwide. This software is distributed without any warranty.
9
10
   You should have received a copy of the CC0 Public Domain Dedication along with
11
   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
12
*/
13
/* blake2-int.h
14
 *
15
 * Copyright (C) 2006-2023 wolfSSL Inc.
16
 *
17
 * This file is part of wolfSSL.
18
 *
19
 * wolfSSL is free software; you can redistribute it and/or modify
20
 * it under the terms of the GNU General Public License as published by
21
 * the Free Software Foundation; either version 2 of the License, or
22
 * (at your option) any later version.
23
 *
24
 * wolfSSL is distributed in the hope that it will be useful,
25
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
26
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
 * GNU General Public License for more details.
28
 *
29
 * You should have received a copy of the GNU General Public License
30
 * along with this program; if not, write to the Free Software
31
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
32
 */
33
34
35
36
37
#ifndef WOLFCRYPT_BLAKE2_INT_H
38
#define WOLFCRYPT_BLAKE2_INT_H
39
40
#include <wolfssl/wolfcrypt/types.h>
41
42
#if defined(__cplusplus)
43
    extern "C" {
44
#endif
45
46
  enum blake2s_constant
47
  {
48
    BLAKE2S_BLOCKBYTES = 64,
49
    BLAKE2S_OUTBYTES   = 32,
50
    BLAKE2S_KEYBYTES   = 32,
51
    BLAKE2S_SALTBYTES  = 8,
52
    BLAKE2S_PERSONALBYTES = 8
53
  };
54
55
  enum blake2b_constant
56
  {
57
    BLAKE2B_BLOCKBYTES = 128,
58
    BLAKE2B_OUTBYTES   = 64,
59
    BLAKE2B_KEYBYTES   = 64,
60
    BLAKE2B_SALTBYTES  = 16,
61
    BLAKE2B_PERSONALBYTES = 16
62
  };
63
64
#pragma pack(push, 1)
65
  typedef struct __blake2s_param
66
  {
67
    byte  digest_length; /* 1 */
68
    byte  key_length;    /* 2 */
69
    byte  fanout;        /* 3 */
70
    byte  depth;         /* 4 */
71
    word32 leaf_length;   /* 8 */
72
    byte  node_offset[6];/* 14 */
73
    byte  node_depth;    /* 15 */
74
    byte  inner_length;  /* 16 */
75
    /* byte  reserved[0]; */
76
    byte  salt[BLAKE2S_SALTBYTES]; /* 24 */
77
    byte  personal[BLAKE2S_PERSONALBYTES];  /* 32 */
78
  } blake2s_param;
79
80
  typedef struct __blake2s_state
81
  {
82
    word32 h[8];
83
    word32 t[2];
84
    word32 f[2];
85
    byte  buf[2 * BLAKE2S_BLOCKBYTES];
86
    word32 buflen;
87
    byte  last_node;
88
  } blake2s_state ;
89
90
  typedef struct __blake2b_param
91
  {
92
    byte  digest_length; /* 1 */
93
    byte  key_length;    /* 2 */
94
    byte  fanout;        /* 3 */
95
    byte  depth;         /* 4 */
96
    word32 leaf_length;   /* 8 */
97
    word64 node_offset;   /* 16 */
98
    byte  node_depth;    /* 17 */
99
    byte  inner_length;  /* 18 */
100
    byte  reserved[14];  /* 32 */
101
    byte  salt[BLAKE2B_SALTBYTES]; /* 48 */
102
    byte  personal[BLAKE2B_PERSONALBYTES];  /* 64 */
103
  } blake2b_param;
104
105
  typedef struct __blake2b_state
106
  {
107
    word64 h[8];
108
    word64 t[2];
109
    word64 f[2];
110
    byte  buf[2 * BLAKE2B_BLOCKBYTES];
111
    word64 buflen;
112
    byte  last_node;
113
  } blake2b_state;
114
115
  typedef struct __blake2sp_state
116
  {
117
    blake2s_state S[8][1];
118
    blake2s_state R[1];
119
    byte buf[8 * BLAKE2S_BLOCKBYTES];
120
    word32 buflen;
121
  } blake2sp_state;
122
123
  typedef struct __blake2bp_state
124
  {
125
    blake2b_state S[4][1];
126
    blake2b_state R[1];
127
    byte buf[4 * BLAKE2B_BLOCKBYTES];
128
    word64 buflen;
129
  } blake2bp_state;
130
#pragma pack(pop)
131
132
  /* Streaming API */
133
  int blake2s_init( blake2s_state *S, byte outlen );
134
  int blake2s_init_key( blake2s_state *S, byte outlen, const void *key, byte keylen );
135
  int blake2s_init_param( blake2s_state *S, const blake2s_param *P );
136
  int blake2s_update( blake2s_state *S, const byte *in, word32 inlen );
137
  int blake2s_final( blake2s_state *S, byte *out, byte outlen );
138
139
  int blake2b_init( blake2b_state *S, byte outlen );
140
  int blake2b_init_key( blake2b_state *S, byte outlen, const void *key, byte keylen );
141
  int blake2b_init_param( blake2b_state *S, const blake2b_param *P );
142
  int blake2b_update( blake2b_state *S, const byte *in, word64 inlen );
143
  int blake2b_final( blake2b_state *S, byte *out, byte outlen );
144
145
  int blake2sp_init( blake2sp_state *S, byte outlen );
146
  int blake2sp_init_key( blake2sp_state *S, byte outlen, const void *key, byte keylen );
147
  int blake2sp_update( blake2sp_state *S, const byte *in, word32 inlen );
148
  int blake2sp_final( blake2sp_state *S, byte *out, byte outlen );
149
150
  int blake2bp_init( blake2bp_state *S, byte outlen );
151
  int blake2bp_init_key( blake2bp_state *S, byte outlen, const void *key, byte keylen );
152
  int blake2bp_update( blake2bp_state *S, const byte *in, word64 inlen );
153
  int blake2bp_final( blake2bp_state *S, byte *out, byte outlen );
154
155
  /* Simple API */
156
  int blake2s( byte *out, const void *in, const void *key, byte outlen, word32 inlen, byte keylen );
157
  int blake2b( byte *out, const void *in, const void *key, byte outlen, word64 inlen, byte keylen );
158
159
  int blake2sp( byte *out, const void *in, const void *key, byte outlen, word32 inlen, byte keylen );
160
  int blake2bp( byte *out, const void *in, const void *key, byte outlen, word64 inlen, byte keylen );
161
162
  static WC_INLINE int blake2( byte *out, const void *in, const void *key, byte outlen, word64 inlen, byte keylen )
163
0
  {
164
0
    return blake2b( out, in, key, outlen, inlen, keylen );
165
0
  }
Unexecuted instantiation: module.cpp:blake2(unsigned char*, void const*, void const*, unsigned char, unsigned long, unsigned char)
Unexecuted instantiation: bn_ops.cpp:blake2(unsigned char*, void const*, void const*, unsigned char, unsigned long, unsigned char)
Unexecuted instantiation: bn_helper.cpp:blake2(unsigned char*, void const*, void const*, unsigned char, unsigned long, unsigned char)
Unexecuted instantiation: ecdsa_generic.cpp:blake2(unsigned char*, void const*, void const*, unsigned char, unsigned long, unsigned char)
Unexecuted instantiation: ecdsa_448.cpp:blake2(unsigned char*, void const*, void const*, unsigned char, unsigned long, unsigned char)
Unexecuted instantiation: ecdsa_25519.cpp:blake2(unsigned char*, void const*, void const*, unsigned char, unsigned long, unsigned char)
Unexecuted instantiation: aes.c:blake2
Unexecuted instantiation: asn.c:blake2
Unexecuted instantiation: blake2b.c:blake2
Unexecuted instantiation: blake2s.c:blake2
Unexecuted instantiation: camellia.c:blake2
Unexecuted instantiation: chacha.c:blake2
Unexecuted instantiation: chacha20_poly1305.c:blake2
Unexecuted instantiation: cmac.c:blake2
Unexecuted instantiation: coding.c:blake2
Unexecuted instantiation: cryptocb.c:blake2
Unexecuted instantiation: curve25519.c:blake2
Unexecuted instantiation: curve448.c:blake2
Unexecuted instantiation: des3.c:blake2
Unexecuted instantiation: dh.c:blake2
Unexecuted instantiation: ecc.c:blake2
Unexecuted instantiation: ed25519.c:blake2
Unexecuted instantiation: ed448.c:blake2
Unexecuted instantiation: fe_448.c:blake2
Unexecuted instantiation: fe_operations.c:blake2
Unexecuted instantiation: ge_448.c:blake2
Unexecuted instantiation: ge_operations.c:blake2
Unexecuted instantiation: hash.c:blake2
Unexecuted instantiation: hmac.c:blake2
Unexecuted instantiation: kdf.c:blake2
Unexecuted instantiation: md2.c:blake2
Unexecuted instantiation: md4.c:blake2
Unexecuted instantiation: md5.c:blake2
Unexecuted instantiation: poly1305.c:blake2
Unexecuted instantiation: pwdbased.c:blake2
Unexecuted instantiation: random.c:blake2
Unexecuted instantiation: ripemd.c:blake2
Unexecuted instantiation: rsa.c:blake2
Unexecuted instantiation: sha.c:blake2
Unexecuted instantiation: sha256.c:blake2
Unexecuted instantiation: sha3.c:blake2
Unexecuted instantiation: sha512.c:blake2
Unexecuted instantiation: siphash.c:blake2
Unexecuted instantiation: sm2.c:blake2
Unexecuted instantiation: sm3.c:blake2
Unexecuted instantiation: sp_int.c:blake2
Unexecuted instantiation: wc_encrypt.c:blake2
Unexecuted instantiation: wc_port.c:blake2
Unexecuted instantiation: wolfmath.c:blake2
Unexecuted instantiation: ssl.c:blake2
Unexecuted instantiation: tls.c:blake2
Unexecuted instantiation: tls13.c:blake2
Unexecuted instantiation: internal.c:blake2
Unexecuted instantiation: keys.c:blake2
Unexecuted instantiation: wolfio.c:blake2
166
167
168
169
#if defined(__cplusplus)
170
    }
171
#endif
172
173
#endif  /* WOLFCRYPT_BLAKE2_INT_H */
174