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