Line data Source code
1 1 : /*
2 : * Copyright (c) 2022 Intel Corporation.
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : /**
8 : * @file
9 : * @brief Crypto Hash APIs
10 : *
11 : * This file contains the Crypto Abstraction layer APIs.
12 : */
13 : #ifndef ZEPHYR_INCLUDE_CRYPTO_HASH_H_
14 : #define ZEPHYR_INCLUDE_CRYPTO_HASH_H_
15 :
16 :
17 : /**
18 : * @addtogroup crypto_hash
19 : * @{
20 : */
21 :
22 :
23 : /**
24 : * Hash algorithm
25 : */
26 0 : enum hash_algo {
27 : CRYPTO_HASH_ALGO_SHA224 = 1,
28 : CRYPTO_HASH_ALGO_SHA256 = 2,
29 : CRYPTO_HASH_ALGO_SHA384 = 3,
30 : CRYPTO_HASH_ALGO_SHA512 = 4,
31 : };
32 :
33 : /* Forward declarations */
34 : struct hash_ctx;
35 : struct hash_pkt;
36 :
37 :
38 0 : typedef int (*hash_op_t)(struct hash_ctx *ctx, struct hash_pkt *pkt,
39 : bool finish);
40 :
41 : /**
42 : * Structure encoding session parameters.
43 : *
44 : * Refer to comments for individual fields to know the contract
45 : * in terms of who fills what and when w.r.t begin_session() call.
46 : */
47 1 : struct hash_ctx {
48 : /** The device driver instance this crypto context relates to. Will be
49 : * populated by the begin_session() API.
50 : */
51 1 : const struct device *device;
52 :
53 : /** If the driver supports multiple simultaneously crypto sessions, this
54 : * will identify the specific driver state this crypto session relates
55 : * to. Since dynamic memory allocation is not possible, it is
56 : * suggested that at build time drivers allocate space for the
57 : * max simultaneous sessions they intend to support. To be populated
58 : * by the driver on return from begin_session().
59 : */
60 1 : void *drv_sessn_state;
61 :
62 : /**
63 : * Hash handler set up when the session begins.
64 : */
65 1 : hash_op_t hash_hndlr;
66 :
67 : /**
68 : * If it has started a multipart hash operation.
69 : */
70 1 : bool started;
71 :
72 : /** How certain fields are to be interpreted for this session.
73 : * (A bitmask of CAP_* below.)
74 : * To be populated by the app before calling hash_begin_session().
75 : * An app can obtain the capability flags supported by a hw/driver
76 : * by calling crypto_query_hwcaps().
77 : */
78 1 : uint16_t flags;
79 : };
80 :
81 : /**
82 : * Structure encoding IO parameters of a hash
83 : * operation.
84 : *
85 : * The fields which has not been explicitly called out has to
86 : * be filled up by the app before calling hash_compute().
87 : */
88 1 : struct hash_pkt {
89 :
90 : /** Start address of input buffer */
91 1 : uint8_t *in_buf;
92 :
93 : /** Bytes to be operated upon */
94 1 : size_t in_len;
95 :
96 : /**
97 : * Start of the output buffer, to be allocated by
98 : * the application. Can be NULL for in-place ops. To be populated
99 : * with contents by the driver on return from op / async callback.
100 : */
101 1 : uint8_t *out_buf;
102 :
103 : /**
104 : * Context this packet relates to. This can be useful to get the
105 : * session details, especially for async ops.
106 : */
107 1 : struct hash_ctx *ctx;
108 : };
109 :
110 : /* Prototype for the application function to be invoked by the crypto driver
111 : * on completion of an async request. The app may get the session context
112 : * via the pkt->ctx field.
113 : */
114 0 : typedef void (*hash_completion_cb)(struct hash_pkt *completed, int status);
115 :
116 :
117 : /**
118 : * @}
119 : */
120 : #endif /* ZEPHYR_INCLUDE_CRYPTO_HASH_H_ */
|