Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/openzfs/module/icp/include/sha2/sha2_impl.h
48775 views
1
// SPDX-License-Identifier: CDDL-1.0
2
/*
3
* CDDL HEADER START
4
*
5
* The contents of this file are subject to the terms of the
6
* Common Development and Distribution License (the "License").
7
* You may not use this file except in compliance with the License.
8
*
9
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10
* or https://opensource.org/licenses/CDDL-1.0.
11
* See the License for the specific language governing permissions
12
* and limitations under the License.
13
*
14
* When distributing Covered Code, include this CDDL HEADER in each
15
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16
* If applicable, add the following below this CDDL HEADER, with the
17
* fields enclosed by brackets "[]" replaced with your own identifying
18
* information: Portions Copyright [yyyy] [name of copyright owner]
19
*
20
* CDDL HEADER END
21
*/
22
23
/*
24
* Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.
25
* Copyright (c) 2022 Tino Reichardt <[email protected]>
26
*/
27
28
#ifndef _SHA2_IMPL_H
29
#define _SHA2_IMPL_H
30
31
#include <sys/sha2.h>
32
33
#ifdef __cplusplus
34
extern "C" {
35
#endif
36
37
/* transform function definition */
38
typedef void (*sha256_f)(uint32_t state[8], const void *data, size_t blks);
39
typedef void (*sha512_f)(uint64_t state[8], const void *data, size_t blks);
40
41
/* needed for checking valid implementations */
42
typedef boolean_t (*sha2_is_supported_f)(void);
43
44
typedef struct {
45
const char *name;
46
sha256_f transform;
47
sha2_is_supported_f is_supported;
48
} sha256_ops_t;
49
50
typedef struct {
51
const char *name;
52
sha512_f transform;
53
sha2_is_supported_f is_supported;
54
} sha512_ops_t;
55
56
extern const sha256_ops_t *sha256_get_ops(void);
57
extern const sha512_ops_t *sha512_get_ops(void);
58
59
typedef enum {
60
SHA1_TYPE,
61
SHA256_TYPE,
62
SHA384_TYPE,
63
SHA512_TYPE
64
} sha2_mech_t;
65
66
/*
67
* Context for SHA2 mechanism.
68
*/
69
typedef struct sha2_ctx {
70
sha2_mech_type_t sc_mech_type; /* type of context */
71
SHA2_CTX sc_sha2_ctx; /* SHA2 context */
72
} sha2_ctx_t;
73
74
/*
75
* Context for SHA2 HMAC and HMAC GENERAL mechanisms.
76
*/
77
typedef struct sha2_hmac_ctx {
78
sha2_mech_type_t hc_mech_type; /* type of context */
79
uint32_t hc_digest_len; /* digest len in bytes */
80
SHA2_CTX hc_icontext; /* inner SHA2 context */
81
SHA2_CTX hc_ocontext; /* outer SHA2 context */
82
} sha2_hmac_ctx_t;
83
84
#ifdef __cplusplus
85
}
86
#endif
87
88
#endif /* _SHA2_IMPL_H */
89
90