Path: blob/main/sys/contrib/openzfs/module/icp/include/sha2/sha2_impl.h
48775 views
// SPDX-License-Identifier: CDDL-1.01/*2* CDDL HEADER START3*4* The contents of this file are subject to the terms of the5* 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.LICENSE9* or https://opensource.org/licenses/CDDL-1.0.10* See the License for the specific language governing permissions11* and limitations under the License.12*13* When distributing Covered Code, include this CDDL HEADER in each14* file and include the License file at usr/src/OPENSOLARIS.LICENSE.15* If applicable, add the following below this CDDL HEADER, with the16* fields enclosed by brackets "[]" replaced with your own identifying17* information: Portions Copyright [yyyy] [name of copyright owner]18*19* CDDL HEADER END20*/2122/*23* Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.24* Copyright (c) 2022 Tino Reichardt <[email protected]>25*/2627#ifndef _SHA2_IMPL_H28#define _SHA2_IMPL_H2930#include <sys/sha2.h>3132#ifdef __cplusplus33extern "C" {34#endif3536/* transform function definition */37typedef void (*sha256_f)(uint32_t state[8], const void *data, size_t blks);38typedef void (*sha512_f)(uint64_t state[8], const void *data, size_t blks);3940/* needed for checking valid implementations */41typedef boolean_t (*sha2_is_supported_f)(void);4243typedef struct {44const char *name;45sha256_f transform;46sha2_is_supported_f is_supported;47} sha256_ops_t;4849typedef struct {50const char *name;51sha512_f transform;52sha2_is_supported_f is_supported;53} sha512_ops_t;5455extern const sha256_ops_t *sha256_get_ops(void);56extern const sha512_ops_t *sha512_get_ops(void);5758typedef enum {59SHA1_TYPE,60SHA256_TYPE,61SHA384_TYPE,62SHA512_TYPE63} sha2_mech_t;6465/*66* Context for SHA2 mechanism.67*/68typedef struct sha2_ctx {69sha2_mech_type_t sc_mech_type; /* type of context */70SHA2_CTX sc_sha2_ctx; /* SHA2 context */71} sha2_ctx_t;7273/*74* Context for SHA2 HMAC and HMAC GENERAL mechanisms.75*/76typedef struct sha2_hmac_ctx {77sha2_mech_type_t hc_mech_type; /* type of context */78uint32_t hc_digest_len; /* digest len in bytes */79SHA2_CTX hc_icontext; /* inner SHA2 context */80SHA2_CTX hc_ocontext; /* outer SHA2 context */81} sha2_hmac_ctx_t;8283#ifdef __cplusplus84}85#endif8687#endif /* _SHA2_IMPL_H */888990