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