xref: /freebsd/sys/contrib/openzfs/module/icp/include/sha2/sha2_impl.h (revision 61145dc2b94f12f6a47344fb9aac702321880e43)
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 <milky-zfs@mcmilk.de>
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