blob: c2f548406c86fd365becafbc6da30439993513b6 [file] [log] [blame]
/*
* 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_ */