xref: /linux/drivers/crypto/inside-secure/eip93/eip93-hash.h (revision bbfd5594756011167b8f8de9a00e0c946afda1e6)
1*9739f5f9SChristian Marangi /* SPDX-License-Identifier: GPL-2.0
2*9739f5f9SChristian Marangi  *
3*9739f5f9SChristian Marangi  * Copyright (C) 2019 - 2021
4*9739f5f9SChristian Marangi  *
5*9739f5f9SChristian Marangi  * Richard van Schagen <vschagen@icloud.com>
6*9739f5f9SChristian Marangi  * Christian Marangi <ansuelsmth@gmail.com
7*9739f5f9SChristian Marangi  */
8*9739f5f9SChristian Marangi #ifndef _EIP93_HASH_H_
9*9739f5f9SChristian Marangi #define _EIP93_HASH_H_
10*9739f5f9SChristian Marangi 
11*9739f5f9SChristian Marangi #include <crypto/sha2.h>
12*9739f5f9SChristian Marangi 
13*9739f5f9SChristian Marangi #include "eip93-main.h"
14*9739f5f9SChristian Marangi #include "eip93-regs.h"
15*9739f5f9SChristian Marangi 
16*9739f5f9SChristian Marangi struct eip93_hash_ctx {
17*9739f5f9SChristian Marangi 	struct eip93_device	*eip93;
18*9739f5f9SChristian Marangi 	u32			flags;
19*9739f5f9SChristian Marangi 
20*9739f5f9SChristian Marangi 	u8			ipad[SHA256_BLOCK_SIZE] __aligned(sizeof(u32));
21*9739f5f9SChristian Marangi 	u8			opad[SHA256_DIGEST_SIZE] __aligned(sizeof(u32));
22*9739f5f9SChristian Marangi };
23*9739f5f9SChristian Marangi 
24*9739f5f9SChristian Marangi struct eip93_hash_reqctx {
25*9739f5f9SChristian Marangi 	/* Placement is important for DMA align */
26*9739f5f9SChristian Marangi 	struct {
27*9739f5f9SChristian Marangi 		struct sa_record	sa_record;
28*9739f5f9SChristian Marangi 		struct sa_record	sa_record_hmac;
29*9739f5f9SChristian Marangi 		struct sa_state		sa_state;
30*9739f5f9SChristian Marangi 	} __aligned(CRYPTO_DMA_ALIGN);
31*9739f5f9SChristian Marangi 
32*9739f5f9SChristian Marangi 	dma_addr_t		sa_record_base;
33*9739f5f9SChristian Marangi 	dma_addr_t		sa_record_hmac_base;
34*9739f5f9SChristian Marangi 	dma_addr_t		sa_state_base;
35*9739f5f9SChristian Marangi 
36*9739f5f9SChristian Marangi 	/* Don't enable HASH_FINALIZE when last block is sent */
37*9739f5f9SChristian Marangi 	bool			partial_hash;
38*9739f5f9SChristian Marangi 
39*9739f5f9SChristian Marangi 	/* Set to signal interrupt is for final packet */
40*9739f5f9SChristian Marangi 	bool			finalize;
41*9739f5f9SChristian Marangi 
42*9739f5f9SChristian Marangi 	/*
43*9739f5f9SChristian Marangi 	 * EIP93 requires data to be accumulated in block of 64 bytes
44*9739f5f9SChristian Marangi 	 * for intermediate hash calculation.
45*9739f5f9SChristian Marangi 	 */
46*9739f5f9SChristian Marangi 	u64			len;
47*9739f5f9SChristian Marangi 	u32			data_used;
48*9739f5f9SChristian Marangi 
49*9739f5f9SChristian Marangi 	u8			data[SHA256_BLOCK_SIZE] __aligned(sizeof(u32));
50*9739f5f9SChristian Marangi 	dma_addr_t		data_dma;
51*9739f5f9SChristian Marangi 
52*9739f5f9SChristian Marangi 	struct list_head	blocks;
53*9739f5f9SChristian Marangi };
54*9739f5f9SChristian Marangi 
55*9739f5f9SChristian Marangi struct mkt_hash_block {
56*9739f5f9SChristian Marangi 	struct list_head	list;
57*9739f5f9SChristian Marangi 	u8			data[SHA256_BLOCK_SIZE] __aligned(sizeof(u32));
58*9739f5f9SChristian Marangi 	dma_addr_t		data_dma;
59*9739f5f9SChristian Marangi };
60*9739f5f9SChristian Marangi 
61*9739f5f9SChristian Marangi struct eip93_hash_export_state {
62*9739f5f9SChristian Marangi 	u64			len;
63*9739f5f9SChristian Marangi 	u32			data_used;
64*9739f5f9SChristian Marangi 
65*9739f5f9SChristian Marangi 	u32			state_len[2];
66*9739f5f9SChristian Marangi 	u8			state_hash[SHA256_DIGEST_SIZE] __aligned(sizeof(u32));
67*9739f5f9SChristian Marangi 
68*9739f5f9SChristian Marangi 	u8			data[SHA256_BLOCK_SIZE] __aligned(sizeof(u32));
69*9739f5f9SChristian Marangi };
70*9739f5f9SChristian Marangi 
71*9739f5f9SChristian Marangi void eip93_hash_handle_result(struct crypto_async_request *async, int err);
72*9739f5f9SChristian Marangi 
73*9739f5f9SChristian Marangi extern struct eip93_alg_template eip93_alg_md5;
74*9739f5f9SChristian Marangi extern struct eip93_alg_template eip93_alg_sha1;
75*9739f5f9SChristian Marangi extern struct eip93_alg_template eip93_alg_sha224;
76*9739f5f9SChristian Marangi extern struct eip93_alg_template eip93_alg_sha256;
77*9739f5f9SChristian Marangi extern struct eip93_alg_template eip93_alg_hmac_md5;
78*9739f5f9SChristian Marangi extern struct eip93_alg_template eip93_alg_hmac_sha1;
79*9739f5f9SChristian Marangi extern struct eip93_alg_template eip93_alg_hmac_sha224;
80*9739f5f9SChristian Marangi extern struct eip93_alg_template eip93_alg_hmac_sha256;
81*9739f5f9SChristian Marangi 
82*9739f5f9SChristian Marangi #endif /* _EIP93_HASH_H_ */
83