1/* 2 * Copyright (c) 2010-2014, The Linux Foundation. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 and 6 * only version 2 as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 */ 13 14#ifndef _COMMON_H_ 15#define _COMMON_H_ 16 17#include <linux/crypto.h> 18#include <linux/types.h> 19#include <crypto/aes.h> 20#include <crypto/hash.h> 21 22/* key size in bytes */ 23#define QCE_SHA_HMAC_KEY_SIZE 64 24#define QCE_MAX_CIPHER_KEY_SIZE AES_KEYSIZE_256 25 26/* IV length in bytes */ 27#define QCE_AES_IV_LENGTH AES_BLOCK_SIZE 28/* max of AES_BLOCK_SIZE, DES3_EDE_BLOCK_SIZE */ 29#define QCE_MAX_IV_SIZE AES_BLOCK_SIZE 30 31/* maximum nonce bytes */ 32#define QCE_MAX_NONCE 16 33#define QCE_MAX_NONCE_WORDS (QCE_MAX_NONCE / sizeof(u32)) 34 35/* burst size alignment requirement */ 36#define QCE_MAX_ALIGN_SIZE 64 37 38/* cipher algorithms */ 39#define QCE_ALG_DES BIT(0) 40#define QCE_ALG_3DES BIT(1) 41#define QCE_ALG_AES BIT(2) 42 43/* hash and hmac algorithms */ 44#define QCE_HASH_SHA1 BIT(3) 45#define QCE_HASH_SHA256 BIT(4) 46#define QCE_HASH_SHA1_HMAC BIT(5) 47#define QCE_HASH_SHA256_HMAC BIT(6) 48#define QCE_HASH_AES_CMAC BIT(7) 49 50/* cipher modes */ 51#define QCE_MODE_CBC BIT(8) 52#define QCE_MODE_ECB BIT(9) 53#define QCE_MODE_CTR BIT(10) 54#define QCE_MODE_XTS BIT(11) 55#define QCE_MODE_CCM BIT(12) 56#define QCE_MODE_MASK GENMASK(12, 8) 57 58/* cipher encryption/decryption operations */ 59#define QCE_ENCRYPT BIT(13) 60#define QCE_DECRYPT BIT(14) 61 62#define IS_DES(flags) (flags & QCE_ALG_DES) 63#define IS_3DES(flags) (flags & QCE_ALG_3DES) 64#define IS_AES(flags) (flags & QCE_ALG_AES) 65 66#define IS_SHA1(flags) (flags & QCE_HASH_SHA1) 67#define IS_SHA256(flags) (flags & QCE_HASH_SHA256) 68#define IS_SHA1_HMAC(flags) (flags & QCE_HASH_SHA1_HMAC) 69#define IS_SHA256_HMAC(flags) (flags & QCE_HASH_SHA256_HMAC) 70#define IS_CMAC(flags) (flags & QCE_HASH_AES_CMAC) 71#define IS_SHA(flags) (IS_SHA1(flags) || IS_SHA256(flags)) 72#define IS_SHA_HMAC(flags) \ 73 (IS_SHA1_HMAC(flags) || IS_SHA256_HMAC(flags)) 74 75#define IS_CBC(mode) (mode & QCE_MODE_CBC) 76#define IS_ECB(mode) (mode & QCE_MODE_ECB) 77#define IS_CTR(mode) (mode & QCE_MODE_CTR) 78#define IS_XTS(mode) (mode & QCE_MODE_XTS) 79#define IS_CCM(mode) (mode & QCE_MODE_CCM) 80 81#define IS_ENCRYPT(dir) (dir & QCE_ENCRYPT) 82#define IS_DECRYPT(dir) (dir & QCE_DECRYPT) 83 84struct qce_alg_template { 85 struct list_head entry; 86 u32 crypto_alg_type; 87 unsigned long alg_flags; 88 const u32 *std_iv; 89 union { 90 struct crypto_alg crypto; 91 struct ahash_alg ahash; 92 } alg; 93 struct qce_device *qce; 94}; 95 96void qce_cpu_to_be32p_array(__be32 *dst, const u8 *src, unsigned int len); 97int qce_check_status(struct qce_device *qce, u32 *status); 98void qce_get_version(struct qce_device *qce, u32 *major, u32 *minor, u32 *step); 99int qce_start(struct crypto_async_request *async_req, u32 type, u32 totallen, 100 u32 offset); 101 102#endif /* _COMMON_H_ */ 103