1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
---|---|
2 | /* |
3 | * Cryptographic API. |
4 | * |
5 | * Copyright (c) 2023 Herbert Xu <herbert@gondor.apana.org.au> |
6 | */ |
7 | #ifndef _LOCAL_CRYPTO_HASH_H |
8 | #define _LOCAL_CRYPTO_HASH_H |
9 | |
10 | #include <crypto/internal/hash.h> |
11 | #include <linux/cryptouser.h> |
12 | |
13 | #include "internal.h" |
14 | |
15 | static inline struct crypto_istat_hash *hash_get_stat( |
16 | struct hash_alg_common *alg) |
17 | { |
18 | #ifdef CONFIG_CRYPTO_STATS |
19 | return &alg->stat; |
20 | #else |
21 | return NULL; |
22 | #endif |
23 | } |
24 | |
25 | static inline int crypto_hash_report_stat(struct sk_buff *skb, |
26 | struct crypto_alg *alg, |
27 | const char *type) |
28 | { |
29 | struct hash_alg_common *halg = __crypto_hash_alg_common(alg); |
30 | struct crypto_istat_hash *istat = hash_get_stat(alg: halg); |
31 | struct crypto_stat_hash rhash; |
32 | |
33 | memset(&rhash, 0, sizeof(rhash)); |
34 | |
35 | strscpy(rhash.type, type, sizeof(rhash.type)); |
36 | |
37 | rhash.stat_hash_cnt = atomic64_read(v: &istat->hash_cnt); |
38 | rhash.stat_hash_tlen = atomic64_read(v: &istat->hash_tlen); |
39 | rhash.stat_err_cnt = atomic64_read(v: &istat->err_cnt); |
40 | |
41 | return nla_put(skb, attrtype: CRYPTOCFGA_STAT_HASH, attrlen: sizeof(rhash), data: &rhash); |
42 | } |
43 | |
44 | extern const struct crypto_type crypto_shash_type; |
45 | |
46 | int hash_prepare_alg(struct hash_alg_common *alg); |
47 | |
48 | #endif /* _LOCAL_CRYPTO_HASH_H */ |
49 |