diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig index c1d971a2cad7..951f62396cce 100644 --- a/drivers/crypto/Kconfig +++ b/drivers/crypto/Kconfig @@ -658,6 +658,7 @@ config CRYPTO_DEV_ROCKCHIP select CRYPTO_SM3 select CRYPTO_SM4 select CRYPTO_SHA256 + select CRTPTO_SHA512 select CRYPTO_HASH select CRYPTO_SKCIPHER select CRYPTO_RSA diff --git a/drivers/crypto/rockchip/rk_crypto_core.c b/drivers/crypto/rockchip/rk_crypto_core.c index 60b269659492..f49988b3ea29 100644 --- a/drivers/crypto/rockchip/rk_crypto_core.c +++ b/drivers/crypto/rockchip/rk_crypto_core.c @@ -569,7 +569,9 @@ static struct rk_crypto_algt *crypto_v2_algs[] = { &rk_v2_ofb_des3_ede_alg, /* ofb(des3_ede) */ &rk_v2_ahash_sha1, /* sha1 */ + &rk_v2_ahash_sha224, /* sha224 */ &rk_v2_ahash_sha256, /* sha256 */ + &rk_v2_ahash_sha384, /* sha384 */ &rk_v2_ahash_sha512, /* sha512 */ &rk_v2_ahash_md5, /* md5 */ &rk_v2_ahash_sm3, /* sm3 */ @@ -583,16 +585,18 @@ static struct rk_crypto_algt *crypto_v2_algs[] = { &rk_v2_asym_rsa, /* rsa */ }; -static char *px30_algs_name[] = { - "ecb(aes)", "cbc(aes)", "xts(aes)", - "ecb(des)", "cbc(des)", - "ecb(des3_ede)", "cbc(des3_ede)", - "sha1", "sha256", "sha512", "md5", +static char *crypto_no_sm_algs_name[] = { + "ecb(aes)", "cbc(aes)", "cfb(aes)", "ofb(aes)", "ctr(aes)", + "ecb(des)", "cbc(des)", "cfb(des)", "ofb(des)", + "ecb(des3_ede)", "cbc(des3_ede)", "cfb(des3_ede)", "ofb(des3_ede)", + "sha1", "sha224", "sha256", "sha384", "sha512", "md5", + "hmac(sha1)", "hmac(sha256)", "hmac(sha512)", "hmac(md5)", + "rsa" }; -static char *crypto_full_algs_name[] = { - "ecb(sm4)", "cbc(sm4)", "cfb(sm4)", "ofb(sm4)", "ctr(sm4)", "xts(sm4)", - "ecb(aes)", "cbc(aes)", "cfb(aes)", "ofb(aes)", "ctr(aes)", "xts(aes)", +static char *crypto_rv1126_algs_name[] = { + "ecb(sm4)", "cbc(sm4)", "cfb(sm4)", "ofb(sm4)", "ctr(sm4)", + "ecb(aes)", "cbc(aes)", "cfb(aes)", "ofb(aes)", "ctr(aes)", "ecb(des)", "cbc(des)", "cfb(des)", "ofb(des)", "ecb(des3_ede)", "cbc(des3_ede)", "cfb(des3_ede)", "ofb(des3_ede)", "sha1", "sha256", "sha512", "md5", "sm3", @@ -600,11 +604,21 @@ static char *crypto_full_algs_name[] = { "rsa" }; +static char *crypto_full_algs_name[] = { + "ecb(sm4)", "cbc(sm4)", "cfb(sm4)", "ofb(sm4)", "ctr(sm4)", + "ecb(aes)", "cbc(aes)", "cfb(aes)", "ofb(aes)", "ctr(aes)", + "ecb(des)", "cbc(des)", "cfb(des)", "ofb(des)", + "ecb(des3_ede)", "cbc(des3_ede)", "cfb(des3_ede)", "ofb(des3_ede)", + "sha1", "sha224", "sha256", "sha384", "sha512", "md5", "sm3", + "hmac(sha1)", "hmac(sha256)", "hmac(sha512)", "hmac(md5)", "hmac(sm3)", + "rsa" +}; + static const struct rk_crypto_soc_data px30_soc_data = - RK_CRYPTO_V2_SOC_DATA_INIT(px30_algs_name, false); + RK_CRYPTO_V2_SOC_DATA_INIT(crypto_no_sm_algs_name, false); static const struct rk_crypto_soc_data rv1126_soc_data = - RK_CRYPTO_V2_SOC_DATA_INIT(crypto_full_algs_name, true); + RK_CRYPTO_V2_SOC_DATA_INIT(crypto_rv1126_algs_name, true); static const struct rk_crypto_soc_data full_soc_data = RK_CRYPTO_V2_SOC_DATA_INIT(crypto_full_algs_name, false); diff --git a/drivers/crypto/rockchip/rk_crypto_core.h b/drivers/crypto/rockchip/rk_crypto_core.h index 329e79bbd085..5a75837ffaab 100644 --- a/drivers/crypto/rockchip/rk_crypto_core.h +++ b/drivers/crypto/rockchip/rk_crypto_core.h @@ -44,6 +44,10 @@ #define RK_BUFFER_ORDER 3 #define RK_BUFFER_SIZE (PAGE_SIZE << RK_BUFFER_ORDER) +#define RK_DMA_ALIGNMENT 64 +#define sha384_state sha512_state +#define sha224_state sha256_state + struct rk_crypto_soc_data { char **valid_algs_name; int valid_algs_num; @@ -189,7 +193,9 @@ struct rk_crypto_algt { enum rk_hash_algo { HASH_ALGO_MD5, HASH_ALGO_SHA1, + HASH_ALGO_SHA224, HASH_ALGO_SHA256, + HASH_ALGO_SHA384, HASH_ALGO_SHA512, HASH_ALGO_SM3, }; diff --git a/drivers/crypto/rockchip/rk_crypto_v2.h b/drivers/crypto/rockchip/rk_crypto_v2.h index a166fc6effdf..613bb94a6972 100644 --- a/drivers/crypto/rockchip/rk_crypto_v2.h +++ b/drivers/crypto/rockchip/rk_crypto_v2.h @@ -48,7 +48,9 @@ extern struct rk_crypto_algt rk_v2_cfb_des3_ede_alg; extern struct rk_crypto_algt rk_v2_ofb_des3_ede_alg; extern struct rk_crypto_algt rk_v2_ahash_sha1; +extern struct rk_crypto_algt rk_v2_ahash_sha224; extern struct rk_crypto_algt rk_v2_ahash_sha256; +extern struct rk_crypto_algt rk_v2_ahash_sha384; extern struct rk_crypto_algt rk_v2_ahash_sha512; extern struct rk_crypto_algt rk_v2_ahash_md5; extern struct rk_crypto_algt rk_v2_ahash_sm3; diff --git a/drivers/crypto/rockchip/rk_crypto_v2_ahash.c b/drivers/crypto/rockchip/rk_crypto_v2_ahash.c index 1b254c6e5a98..8355d10cb157 100644 --- a/drivers/crypto/rockchip/rk_crypto_v2_ahash.c +++ b/drivers/crypto/rockchip/rk_crypto_v2_ahash.c @@ -23,7 +23,9 @@ static const u32 hash_algo2bc[] = { [HASH_ALGO_MD5] = CRYPTO_MD5, [HASH_ALGO_SHA1] = CRYPTO_SHA1, + [HASH_ALGO_SHA224] = CRYPTO_SHA224, [HASH_ALGO_SHA256] = CRYPTO_SHA256, + [HASH_ALGO_SHA384] = CRYPTO_SHA384, [HASH_ALGO_SHA512] = CRYPTO_SHA512, [HASH_ALGO_SM3] = CRYPTO_SM3, }; @@ -31,7 +33,9 @@ static const u32 hash_algo2bc[] = { const char *hash_algo2name[] = { [HASH_ALGO_MD5] = "md5", [HASH_ALGO_SHA1] = "sha1", + [HASH_ALGO_SHA224] = "sha224", [HASH_ALGO_SHA256] = "sha256", + [HASH_ALGO_SHA384] = "sha384", [HASH_ALGO_SHA512] = "sha512", [HASH_ALGO_SM3] = "sm3", }; @@ -563,7 +567,9 @@ static void rk_cra_hash_exit(struct crypto_tfm *tfm) struct rk_crypto_algt rk_v2_ahash_md5 = RK_HASH_ALGO_INIT(MD5, md5); struct rk_crypto_algt rk_v2_ahash_sha1 = RK_HASH_ALGO_INIT(SHA1, sha1); +struct rk_crypto_algt rk_v2_ahash_sha224 = RK_HASH_ALGO_INIT(SHA224, sha224); struct rk_crypto_algt rk_v2_ahash_sha256 = RK_HASH_ALGO_INIT(SHA256, sha256); +struct rk_crypto_algt rk_v2_ahash_sha384 = RK_HASH_ALGO_INIT(SHA384, sha384); struct rk_crypto_algt rk_v2_ahash_sha512 = RK_HASH_ALGO_INIT(SHA512, sha512); struct rk_crypto_algt rk_v2_ahash_sm3 = RK_HASH_ALGO_INIT(SM3, sm3);