^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (c) 2010-2014, The Linux Foundation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #ifndef _COMMON_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #define _COMMON_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <linux/crypto.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <crypto/aes.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <crypto/hash.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <crypto/internal/skcipher.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) /* xts du size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #define QCE_SECTOR_SIZE 512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) /* key size in bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define QCE_SHA_HMAC_KEY_SIZE 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define QCE_MAX_CIPHER_KEY_SIZE AES_KEYSIZE_256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) /* IV length in bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define QCE_AES_IV_LENGTH AES_BLOCK_SIZE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) /* max of AES_BLOCK_SIZE, DES3_EDE_BLOCK_SIZE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define QCE_MAX_IV_SIZE AES_BLOCK_SIZE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) /* maximum nonce bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define QCE_MAX_NONCE 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define QCE_MAX_NONCE_WORDS (QCE_MAX_NONCE / sizeof(u32))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) /* burst size alignment requirement */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define QCE_MAX_ALIGN_SIZE 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) /* cipher algorithms */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #define QCE_ALG_DES BIT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define QCE_ALG_3DES BIT(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define QCE_ALG_AES BIT(2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) /* hash and hmac algorithms */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define QCE_HASH_SHA1 BIT(3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define QCE_HASH_SHA256 BIT(4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define QCE_HASH_SHA1_HMAC BIT(5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define QCE_HASH_SHA256_HMAC BIT(6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define QCE_HASH_AES_CMAC BIT(7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) /* cipher modes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define QCE_MODE_CBC BIT(8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define QCE_MODE_ECB BIT(9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define QCE_MODE_CTR BIT(10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define QCE_MODE_XTS BIT(11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define QCE_MODE_CCM BIT(12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define QCE_MODE_MASK GENMASK(12, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) /* cipher encryption/decryption operations */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define QCE_ENCRYPT BIT(13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define QCE_DECRYPT BIT(14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define IS_DES(flags) (flags & QCE_ALG_DES)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define IS_3DES(flags) (flags & QCE_ALG_3DES)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) #define IS_AES(flags) (flags & QCE_ALG_AES)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define IS_SHA1(flags) (flags & QCE_HASH_SHA1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define IS_SHA256(flags) (flags & QCE_HASH_SHA256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define IS_SHA1_HMAC(flags) (flags & QCE_HASH_SHA1_HMAC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define IS_SHA256_HMAC(flags) (flags & QCE_HASH_SHA256_HMAC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define IS_CMAC(flags) (flags & QCE_HASH_AES_CMAC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #define IS_SHA(flags) (IS_SHA1(flags) || IS_SHA256(flags))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define IS_SHA_HMAC(flags) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) (IS_SHA1_HMAC(flags) || IS_SHA256_HMAC(flags))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #define IS_CBC(mode) (mode & QCE_MODE_CBC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define IS_ECB(mode) (mode & QCE_MODE_ECB)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define IS_CTR(mode) (mode & QCE_MODE_CTR)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #define IS_XTS(mode) (mode & QCE_MODE_XTS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define IS_CCM(mode) (mode & QCE_MODE_CCM)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define IS_ENCRYPT(dir) (dir & QCE_ENCRYPT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define IS_DECRYPT(dir) (dir & QCE_DECRYPT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) struct qce_alg_template {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) struct list_head entry;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) u32 crypto_alg_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) unsigned long alg_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) const u32 *std_iv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) struct skcipher_alg skcipher;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) struct ahash_alg ahash;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) } alg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) struct qce_device *qce;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) const u8 *hash_zero;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) const u32 digest_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) void qce_cpu_to_be32p_array(__be32 *dst, const u8 *src, unsigned int len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) int qce_check_status(struct qce_device *qce, u32 *status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) void qce_get_version(struct qce_device *qce, u32 *major, u32 *minor, u32 *step);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) int qce_start(struct crypto_async_request *async_req, u32 type, u32 totallen,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) u32 offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #endif /* _COMMON_H_ */