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