| /* |
| * Copyright (c) 2022 Intel Corporation. |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * @file |
| * @brief Crypto Hash APIs |
| * |
| * This file contains the Crypto Abstraction layer APIs. |
| */ |
| #ifndef ZEPHYR_INCLUDE_CRYPTO_HASH_H_ |
| #define ZEPHYR_INCLUDE_CRYPTO_HASH_H_ |
| |
| |
| /** |
| * @addtogroup crypto_hash |
| * @{ |
| */ |
| |
| |
| /** |
| * Hash algorithm |
| */ |
| enum hash_algo { |
| CRYPTO_HASH_ALGO_SHA224 = 1, |
| CRYPTO_HASH_ALGO_SHA256 = 2, |
| CRYPTO_HASH_ALGO_SHA384 = 3, |
| CRYPTO_HASH_ALGO_SHA512 = 4, |
| }; |
| |
| /* Forward declarations */ |
| struct hash_ctx; |
| struct hash_pkt; |
| |
| |
| typedef int (*hash_op_t)(struct hash_ctx *ctx, struct hash_pkt *pkt, |
| bool finish); |
| |
| /** |
| * Structure encoding session parameters. |
| * |
| * Refer to comments for individual fields to know the contract |
| * in terms of who fills what and when w.r.t begin_session() call. |
| */ |
| struct hash_ctx { |
| /** The device driver instance this crypto context relates to. Will be |
| * populated by the begin_session() API. |
| */ |
| const struct device *device; |
| |
| /** If the driver supports multiple simultaneously crypto sessions, this |
| * will identify the specific driver state this crypto session relates |
| * to. Since dynamic memory allocation is not possible, it is |
| * suggested that at build time drivers allocate space for the |
| * max simultaneous sessions they intend to support. To be populated |
| * by the driver on return from begin_session(). |
| */ |
| void *drv_sessn_state; |
| |
| /** |
| * Hash handler set up when the session begins. |
| */ |
| hash_op_t hash_hndlr; |
| |
| /** |
| * If it has started a multipart hash operation. |
| */ |
| bool started; |
| |
| /** How certain fields are to be interpreted for this session. |
| * (A bitmask of CAP_* below.) |
| * To be populated by the app before calling hash_begin_session(). |
| * An app can obtain the capability flags supported by a hw/driver |
| * by calling crypto_query_hwcaps(). |
| */ |
| uint16_t flags; |
| }; |
| |
| /** |
| * Structure encoding IO parameters of a hash |
| * operation. |
| * |
| * The fields which has not been explicitly called out has to |
| * be filled up by the app before calling hash_compute(). |
| */ |
| struct hash_pkt { |
| |
| /** Start address of input buffer */ |
| uint8_t *in_buf; |
| |
| /** Bytes to be operated upon */ |
| size_t in_len; |
| |
| /** |
| * Start of the output buffer, to be allocated by |
| * the application. Can be NULL for in-place ops. To be populated |
| * with contents by the driver on return from op / async callback. |
| */ |
| uint8_t *out_buf; |
| |
| /** |
| * Context this packet relates to. This can be useful to get the |
| * session details, especially for async ops. |
| */ |
| struct hash_ctx *ctx; |
| }; |
| |
| /* Prototype for the application function to be invoked by the crypto driver |
| * on completion of an async request. The app may get the session context |
| * via the pkt->ctx field. |
| */ |
| typedef void (*hash_completion_cb)(struct hash_pkt *completed, int status); |
| |
| |
| /** |
| * @} |
| */ |
| #endif /* ZEPHYR_INCLUDE_CRYPTO_HASH_H_ */ |