88c02b3f79
On newer machines the SHA3 performance of CPACF instructions KIMD and KLMD can be enhanced by using additional modifier bits. This allows the application to omit initializing the ICV, but also affects the internal processing of the instructions. Performance is mostly gained when processing short messages. The new CPACF feature is backwards compatible with older machines, i.e. the new modifier bits are ignored on older machines. However, to save the ICV initialization, the application must detect the MSA level and omit the ICV initialization only if this feature is supported. Reviewed-by: Holger Dengler <dengler@linux.ibm.com> Signed-off-by: Joerg Schmidbauer <jschmidb@de.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
37 lines
937 B
C
37 lines
937 B
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* Cryptographic API.
|
|
*
|
|
* s390 generic implementation of the SHA Secure Hash Algorithms.
|
|
*
|
|
* Copyright IBM Corp. 2007
|
|
* Author(s): Jan Glauber (jang@de.ibm.com)
|
|
*/
|
|
#ifndef _CRYPTO_ARCH_S390_SHA_H
|
|
#define _CRYPTO_ARCH_S390_SHA_H
|
|
|
|
#include <linux/crypto.h>
|
|
#include <crypto/sha1.h>
|
|
#include <crypto/sha2.h>
|
|
#include <crypto/sha3.h>
|
|
|
|
/* must be big enough for the largest SHA variant */
|
|
#define SHA3_STATE_SIZE 200
|
|
#define CPACF_MAX_PARMBLOCK_SIZE SHA3_STATE_SIZE
|
|
#define SHA_MAX_BLOCK_SIZE SHA3_224_BLOCK_SIZE
|
|
|
|
struct s390_sha_ctx {
|
|
u64 count; /* message length in bytes */
|
|
u32 state[CPACF_MAX_PARMBLOCK_SIZE / sizeof(u32)];
|
|
u8 buf[SHA_MAX_BLOCK_SIZE];
|
|
int func; /* KIMD function to use */
|
|
int first_message_part;
|
|
};
|
|
|
|
struct shash_desc;
|
|
|
|
int s390_sha_update(struct shash_desc *desc, const u8 *data, unsigned int len);
|
|
int s390_sha_final(struct shash_desc *desc, u8 *out);
|
|
|
|
#endif
|