Tom Rini | 10e4779 | 2018-05-06 17:58:06 -0400 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
Akshay Saraswat | cbd8f2c | 2013-03-20 21:00:58 +0000 | [diff] [blame] | 2 | /* |
| 3 | * Header file for SHA hardware acceleration |
| 4 | * |
| 5 | * Copyright (c) 2012 Samsung Electronics |
Akshay Saraswat | cbd8f2c | 2013-03-20 21:00:58 +0000 | [diff] [blame] | 6 | */ |
| 7 | #ifndef __HW_SHA_H |
| 8 | #define __HW_SHA_H |
gaurav rana | ef20159 | 2015-02-20 12:51:46 +0530 | [diff] [blame] | 9 | #include <hash.h> |
Akshay Saraswat | cbd8f2c | 2013-03-20 21:00:58 +0000 | [diff] [blame] | 10 | |
| 11 | /** |
| 12 | * Computes hash value of input pbuf using h/w acceleration |
| 13 | * |
| 14 | * @param in_addr A pointer to the input buffer |
| 15 | * @param bufleni Byte length of input buffer |
| 16 | * @param out_addr A pointer to the output buffer. When complete |
Joel Stanley | 92efc1f | 2021-02-17 13:50:42 +1030 | [diff] [blame] | 17 | * 64 bytes are copied to pout[0]...pout[63]. Thus, a user |
| 18 | * should allocate at least 64 bytes at pOut in advance. |
| 19 | * @param chunk_size chunk size for sha512 |
| 20 | */ |
| 21 | void hw_sha512(const uchar *in_addr, uint buflen, uchar *out_addr, |
| 22 | uint chunk_size); |
| 23 | |
| 24 | /** |
| 25 | * Computes hash value of input pbuf using h/w acceleration |
| 26 | * |
| 27 | * @param in_addr A pointer to the input buffer |
| 28 | * @param bufleni Byte length of input buffer |
| 29 | * @param out_addr A pointer to the output buffer. When complete |
| 30 | * 48 bytes are copied to pout[0]...pout[47]. Thus, a user |
| 31 | * should allocate at least 48 bytes at pOut in advance. |
| 32 | * @param chunk_size chunk size for sha384 |
| 33 | */ |
| 34 | void hw_sha384(const uchar *in_addr, uint buflen, uchar *out_addr, |
| 35 | uint chunk_size); |
| 36 | |
| 37 | /** |
| 38 | * Computes hash value of input pbuf using h/w acceleration |
| 39 | * |
| 40 | * @param in_addr A pointer to the input buffer |
| 41 | * @param bufleni Byte length of input buffer |
| 42 | * @param out_addr A pointer to the output buffer. When complete |
Akshay Saraswat | cbd8f2c | 2013-03-20 21:00:58 +0000 | [diff] [blame] | 43 | * 32 bytes are copied to pout[0]...pout[31]. Thus, a user |
| 44 | * should allocate at least 32 bytes at pOut in advance. |
| 45 | * @param chunk_size chunk size for sha256 |
| 46 | */ |
Joel Stanley | a9ec8f0 | 2021-02-17 13:50:40 +1030 | [diff] [blame] | 47 | void hw_sha256(const uchar *in_addr, uint buflen, uchar *out_addr, |
| 48 | uint chunk_size); |
Akshay Saraswat | cbd8f2c | 2013-03-20 21:00:58 +0000 | [diff] [blame] | 49 | |
| 50 | /** |
| 51 | * Computes hash value of input pbuf using h/w acceleration |
| 52 | * |
| 53 | * @param in_addr A pointer to the input buffer |
| 54 | * @param bufleni Byte length of input buffer |
| 55 | * @param out_addr A pointer to the output buffer. When complete |
| 56 | * 32 bytes are copied to pout[0]...pout[31]. Thus, a user |
| 57 | * should allocate at least 32 bytes at pOut in advance. |
| 58 | * @param chunk_size chunk_size for sha1 |
| 59 | */ |
Joel Stanley | a9ec8f0 | 2021-02-17 13:50:40 +1030 | [diff] [blame] | 60 | void hw_sha1(const uchar *in_addr, uint buflen, uchar *out_addr, |
| 61 | uint chunk_size); |
gaurav rana | ef20159 | 2015-02-20 12:51:46 +0530 | [diff] [blame] | 62 | |
| 63 | /* |
| 64 | * Create the context for sha progressive hashing using h/w acceleration |
| 65 | * |
| 66 | * @algo: Pointer to the hash_algo struct |
| 67 | * @ctxp: Pointer to the pointer of the context for hashing |
Heinrich Schuchardt | 47b4c02 | 2022-01-19 18:05:50 +0100 | [diff] [blame] | 68 | * Return: 0 if ok, -ve on error |
gaurav rana | ef20159 | 2015-02-20 12:51:46 +0530 | [diff] [blame] | 69 | */ |
| 70 | int hw_sha_init(struct hash_algo *algo, void **ctxp); |
| 71 | |
| 72 | /* |
| 73 | * Update buffer for sha progressive hashing using h/w acceleration |
| 74 | * |
| 75 | * The context is freed by this function if an error occurs. |
| 76 | * |
| 77 | * @algo: Pointer to the hash_algo struct |
| 78 | * @ctx: Pointer to the context for hashing |
| 79 | * @buf: Pointer to the buffer being hashed |
| 80 | * @size: Size of the buffer being hashed |
| 81 | * @is_last: 1 if this is the last update; 0 otherwise |
Heinrich Schuchardt | 47b4c02 | 2022-01-19 18:05:50 +0100 | [diff] [blame] | 82 | * Return: 0 if ok, -ve on error |
gaurav rana | ef20159 | 2015-02-20 12:51:46 +0530 | [diff] [blame] | 83 | */ |
| 84 | int hw_sha_update(struct hash_algo *algo, void *ctx, const void *buf, |
Joel Stanley | a9ec8f0 | 2021-02-17 13:50:40 +1030 | [diff] [blame] | 85 | unsigned int size, int is_last); |
gaurav rana | ef20159 | 2015-02-20 12:51:46 +0530 | [diff] [blame] | 86 | |
| 87 | /* |
| 88 | * Copy sha hash result at destination location |
| 89 | * |
| 90 | * The context is freed after completion of hash operation or after an error. |
| 91 | * |
| 92 | * @algo: Pointer to the hash_algo struct |
| 93 | * @ctx: Pointer to the context for hashing |
| 94 | * @dest_buf: Pointer to the destination buffer where hash is to be copied |
| 95 | * @size: Size of the buffer being hashed |
Heinrich Schuchardt | 47b4c02 | 2022-01-19 18:05:50 +0100 | [diff] [blame] | 96 | * Return: 0 if ok, -ve on error |
gaurav rana | ef20159 | 2015-02-20 12:51:46 +0530 | [diff] [blame] | 97 | */ |
| 98 | int hw_sha_finish(struct hash_algo *algo, void *ctx, void *dest_buf, |
Joel Stanley | a9ec8f0 | 2021-02-17 13:50:40 +1030 | [diff] [blame] | 99 | int size); |
gaurav rana | ef20159 | 2015-02-20 12:51:46 +0530 | [diff] [blame] | 100 | |
Akshay Saraswat | cbd8f2c | 2013-03-20 21:00:58 +0000 | [diff] [blame] | 101 | #endif |