Commit bdd75064 authored by LABBE Corentin's avatar LABBE Corentin Committed by Herbert Xu
Browse files

crypto: ccp - Use precalculated hash from headers



Precalculated hash for empty message are now present in hash headers.
This patch just use them.

Signed-off-by: default avatarLABBE Corentin <clabbe.montjoie@gmail.com>
Tested-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
Acked-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 8054b800
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -3,6 +3,8 @@ config CRYPTO_DEV_CCP_DD
	depends on CRYPTO_DEV_CCP
	depends on CRYPTO_DEV_CCP
	default m
	default m
	select HW_RANDOM
	select HW_RANDOM
	select CRYPTO_SHA1
	select CRYPTO_SHA256
	help
	help
	  Provides the interface to use the AMD Cryptographic Coprocessor
	  Provides the interface to use the AMD Cryptographic Coprocessor
	  which can be used to offload encryption operations such as SHA,
	  which can be used to offload encryption operations such as SHA,
+8 −31
Original line number Original line Diff line number Diff line
@@ -152,32 +152,6 @@ static const __be32 ccp_sha256_init[CCP_SHA_CTXSIZE / sizeof(__be32)] = {
	cpu_to_be32(SHA256_H6), cpu_to_be32(SHA256_H7),
	cpu_to_be32(SHA256_H6), cpu_to_be32(SHA256_H7),
};
};


/* The CCP cannot perform zero-length sha operations so the caller
 * is required to buffer data for the final operation.  However, a
 * sha operation for a message with a total length of zero is valid
 * so known values are required to supply the result.
 */
static const u8 ccp_sha1_zero[CCP_SHA_CTXSIZE] = {
	0xda, 0x39, 0xa3, 0xee, 0x5e, 0x6b, 0x4b, 0x0d,
	0x32, 0x55, 0xbf, 0xef, 0x95, 0x60, 0x18, 0x90,
	0xaf, 0xd8, 0x07, 0x09, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

static const u8 ccp_sha224_zero[CCP_SHA_CTXSIZE] = {
	0xd1, 0x4a, 0x02, 0x8c, 0x2a, 0x3a, 0x2b, 0xc9,
	0x47, 0x61, 0x02, 0xbb, 0x28, 0x82, 0x34, 0xc4,
	0x15, 0xa2, 0xb0, 0x1f, 0x82, 0x8e, 0xa6, 0x2a,
	0xc5, 0xb3, 0xe4, 0x2f, 0x00, 0x00, 0x00, 0x00,
};

static const u8 ccp_sha256_zero[CCP_SHA_CTXSIZE] = {
	0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14,
	0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24,
	0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c,
	0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55,
};

static u32 ccp_addr_lo(struct ccp_dma_info *info)
static u32 ccp_addr_lo(struct ccp_dma_info *info)
{
{
	return lower_32_bits(info->address + info->offset);
	return lower_32_bits(info->address + info->offset);
@@ -1391,18 +1365,21 @@ static int ccp_run_sha_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
		if (sha->msg_bits)
		if (sha->msg_bits)
			return -EINVAL;
			return -EINVAL;


		/* A sha operation for a message with a total length of zero,
		/* The CCP cannot perform zero-length sha operations so the
		 * return known result.
		 * caller is required to buffer data for the final operation.
		 * However, a sha operation for a message with a total length
		 * of zero is valid so known values are required to supply
		 * the result.
		 */
		 */
		switch (sha->type) {
		switch (sha->type) {
		case CCP_SHA_TYPE_1:
		case CCP_SHA_TYPE_1:
			sha_zero = ccp_sha1_zero;
			sha_zero = sha1_zero_message_hash;
			break;
			break;
		case CCP_SHA_TYPE_224:
		case CCP_SHA_TYPE_224:
			sha_zero = ccp_sha224_zero;
			sha_zero = sha224_zero_message_hash;
			break;
			break;
		case CCP_SHA_TYPE_256:
		case CCP_SHA_TYPE_256:
			sha_zero = ccp_sha256_zero;
			sha_zero = sha256_zero_message_hash;
			break;
			break;
		default:
		default:
			return -EINVAL;
			return -EINVAL;