1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * Header file for SHA hardware acceleration 4 * 5 * Copyright (c) 2012 Samsung Electronics 6 */ 7 #ifndef __HW_SHA_H 8 #define __HW_SHA_H 9 #include <hash.h> 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 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 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 */ 47 void hw_sha256(const uchar *in_addr, uint buflen, uchar *out_addr, 48 uint chunk_size); 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 */ 60 void hw_sha1(const uchar *in_addr, uint buflen, uchar *out_addr, 61 uint chunk_size); 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 68 * @return 0 if ok, -ve on error 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 82 * @return 0 if ok, -ve on error 83 */ 84 int hw_sha_update(struct hash_algo *algo, void *ctx, const void *buf, 85 unsigned int size, int is_last); 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 96 * @return 0 if ok, -ve on error 97 */ 98 int hw_sha_finish(struct hash_algo *algo, void *ctx, void *dest_buf, 99 int size); 100 101 #endif 102