Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto updates from Herbert Xu: "API: - Remove VLA usage - Add cryptostat user-space interface - Add notifier for new crypto algorithms Algorithms: - Add OFB mode - Remove speck Drivers: - Remove x86/sha*-mb as they are buggy - Remove pcbc(aes) from x86/aesni - Improve performance of arm/ghash-ce by up to 85% - Implement CTS-CBC in arm64/aes-blk, faster by up to 50% - Remove PMULL based arm64/crc32 driver - Use PMULL in arm64/crct10dif - Add aes-ctr support in s5p-sss - Add caam/qi2 driver Others: - Pick better transform if one becomes available in crc-t10dif" * 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (124 commits) crypto: chelsio - Update ntx queue received from cxgb4 crypto: ccree - avoid implicit enum conversion crypto: caam - add SPDX license identifier to all files crypto: caam/qi - simplify CGR allocation, freeing crypto: mxs-dcp - make symbols 'sha1_null_hash' and 'sha256_null_hash' static crypto: arm64/aes-blk - ensure XTS mask is always loaded crypto: testmgr - fix sizeof() on COMP_BUF_SIZE crypto: chtls - remove set but not used variable 'csk' crypto: axis - fix platform_no_drv_owner.cocci warnings crypto: x86/aes-ni - fix build error following fpu template removal crypto: arm64/aes - fix handling sub-block CTS-CBC inputs crypto: caam/qi2 - avoid double export crypto: mxs-dcp - Fix AES issues crypto: mxs-dcp - Fix SHA null hashes and output length crypto: mxs-dcp - Implement sha import/export crypto: aegis/generic - fix for big endian systems crypto: morus/generic - fix for big endian systems crypto: lrw - fix rebase error after out of bounds fix crypto: cavium/nitrox - use pci_alloc_irq_vectors() while enabling MSI-X. crypto: cavium/nitrox - NITROX command queue changes. ...
This commit is contained in:
@@ -234,6 +234,34 @@ static inline void acomp_request_set_params(struct acomp_req *req,
|
||||
req->flags |= CRYPTO_ACOMP_ALLOC_OUTPUT;
|
||||
}
|
||||
|
||||
static inline void crypto_stat_compress(struct acomp_req *req, int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
struct crypto_acomp *tfm = crypto_acomp_reqtfm(req);
|
||||
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY) {
|
||||
atomic_inc(&tfm->base.__crt_alg->compress_err_cnt);
|
||||
} else {
|
||||
atomic_inc(&tfm->base.__crt_alg->compress_cnt);
|
||||
atomic64_add(req->slen, &tfm->base.__crt_alg->compress_tlen);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void crypto_stat_decompress(struct acomp_req *req, int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
struct crypto_acomp *tfm = crypto_acomp_reqtfm(req);
|
||||
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY) {
|
||||
atomic_inc(&tfm->base.__crt_alg->compress_err_cnt);
|
||||
} else {
|
||||
atomic_inc(&tfm->base.__crt_alg->decompress_cnt);
|
||||
atomic64_add(req->slen, &tfm->base.__crt_alg->decompress_tlen);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* crypto_acomp_compress() -- Invoke asynchronous compress operation
|
||||
*
|
||||
@@ -246,8 +274,11 @@ static inline void acomp_request_set_params(struct acomp_req *req,
|
||||
static inline int crypto_acomp_compress(struct acomp_req *req)
|
||||
{
|
||||
struct crypto_acomp *tfm = crypto_acomp_reqtfm(req);
|
||||
int ret;
|
||||
|
||||
return tfm->compress(req);
|
||||
ret = tfm->compress(req);
|
||||
crypto_stat_compress(req, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -262,8 +293,11 @@ static inline int crypto_acomp_compress(struct acomp_req *req)
|
||||
static inline int crypto_acomp_decompress(struct acomp_req *req)
|
||||
{
|
||||
struct crypto_acomp *tfm = crypto_acomp_reqtfm(req);
|
||||
int ret;
|
||||
|
||||
return tfm->decompress(req);
|
||||
ret = tfm->decompress(req);
|
||||
crypto_stat_decompress(req, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -306,6 +306,34 @@ static inline struct crypto_aead *crypto_aead_reqtfm(struct aead_request *req)
|
||||
return __crypto_aead_cast(req->base.tfm);
|
||||
}
|
||||
|
||||
static inline void crypto_stat_aead_encrypt(struct aead_request *req, int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
struct crypto_aead *tfm = crypto_aead_reqtfm(req);
|
||||
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY) {
|
||||
atomic_inc(&tfm->base.__crt_alg->aead_err_cnt);
|
||||
} else {
|
||||
atomic_inc(&tfm->base.__crt_alg->encrypt_cnt);
|
||||
atomic64_add(req->cryptlen, &tfm->base.__crt_alg->encrypt_tlen);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void crypto_stat_aead_decrypt(struct aead_request *req, int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
struct crypto_aead *tfm = crypto_aead_reqtfm(req);
|
||||
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY) {
|
||||
atomic_inc(&tfm->base.__crt_alg->aead_err_cnt);
|
||||
} else {
|
||||
atomic_inc(&tfm->base.__crt_alg->decrypt_cnt);
|
||||
atomic64_add(req->cryptlen, &tfm->base.__crt_alg->decrypt_tlen);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* crypto_aead_encrypt() - encrypt plaintext
|
||||
* @req: reference to the aead_request handle that holds all information
|
||||
@@ -328,11 +356,14 @@ static inline struct crypto_aead *crypto_aead_reqtfm(struct aead_request *req)
|
||||
static inline int crypto_aead_encrypt(struct aead_request *req)
|
||||
{
|
||||
struct crypto_aead *aead = crypto_aead_reqtfm(req);
|
||||
int ret;
|
||||
|
||||
if (crypto_aead_get_flags(aead) & CRYPTO_TFM_NEED_KEY)
|
||||
return -ENOKEY;
|
||||
|
||||
return crypto_aead_alg(aead)->encrypt(req);
|
||||
ret = -ENOKEY;
|
||||
else
|
||||
ret = crypto_aead_alg(aead)->encrypt(req);
|
||||
crypto_stat_aead_encrypt(req, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -360,14 +391,16 @@ static inline int crypto_aead_encrypt(struct aead_request *req)
|
||||
static inline int crypto_aead_decrypt(struct aead_request *req)
|
||||
{
|
||||
struct crypto_aead *aead = crypto_aead_reqtfm(req);
|
||||
int ret;
|
||||
|
||||
if (crypto_aead_get_flags(aead) & CRYPTO_TFM_NEED_KEY)
|
||||
return -ENOKEY;
|
||||
|
||||
if (req->cryptlen < crypto_aead_authsize(aead))
|
||||
return -EINVAL;
|
||||
|
||||
return crypto_aead_alg(aead)->decrypt(req);
|
||||
ret = -ENOKEY;
|
||||
else if (req->cryptlen < crypto_aead_authsize(aead))
|
||||
ret = -EINVAL;
|
||||
else
|
||||
ret = crypto_aead_alg(aead)->decrypt(req);
|
||||
crypto_stat_aead_decrypt(req, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -271,6 +271,62 @@ static inline unsigned int crypto_akcipher_maxsize(struct crypto_akcipher *tfm)
|
||||
return alg->max_size(tfm);
|
||||
}
|
||||
|
||||
static inline void crypto_stat_akcipher_encrypt(struct akcipher_request *req,
|
||||
int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
|
||||
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY) {
|
||||
atomic_inc(&tfm->base.__crt_alg->akcipher_err_cnt);
|
||||
} else {
|
||||
atomic_inc(&tfm->base.__crt_alg->encrypt_cnt);
|
||||
atomic64_add(req->src_len, &tfm->base.__crt_alg->encrypt_tlen);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void crypto_stat_akcipher_decrypt(struct akcipher_request *req,
|
||||
int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
|
||||
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY) {
|
||||
atomic_inc(&tfm->base.__crt_alg->akcipher_err_cnt);
|
||||
} else {
|
||||
atomic_inc(&tfm->base.__crt_alg->decrypt_cnt);
|
||||
atomic64_add(req->src_len, &tfm->base.__crt_alg->decrypt_tlen);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void crypto_stat_akcipher_sign(struct akcipher_request *req,
|
||||
int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
|
||||
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY)
|
||||
atomic_inc(&tfm->base.__crt_alg->akcipher_err_cnt);
|
||||
else
|
||||
atomic_inc(&tfm->base.__crt_alg->sign_cnt);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void crypto_stat_akcipher_verify(struct akcipher_request *req,
|
||||
int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
|
||||
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY)
|
||||
atomic_inc(&tfm->base.__crt_alg->akcipher_err_cnt);
|
||||
else
|
||||
atomic_inc(&tfm->base.__crt_alg->verify_cnt);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* crypto_akcipher_encrypt() - Invoke public key encrypt operation
|
||||
*
|
||||
@@ -285,8 +341,11 @@ static inline int crypto_akcipher_encrypt(struct akcipher_request *req)
|
||||
{
|
||||
struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
|
||||
struct akcipher_alg *alg = crypto_akcipher_alg(tfm);
|
||||
int ret;
|
||||
|
||||
return alg->encrypt(req);
|
||||
ret = alg->encrypt(req);
|
||||
crypto_stat_akcipher_encrypt(req, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -303,8 +362,11 @@ static inline int crypto_akcipher_decrypt(struct akcipher_request *req)
|
||||
{
|
||||
struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
|
||||
struct akcipher_alg *alg = crypto_akcipher_alg(tfm);
|
||||
int ret;
|
||||
|
||||
return alg->decrypt(req);
|
||||
ret = alg->decrypt(req);
|
||||
crypto_stat_akcipher_decrypt(req, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -321,8 +383,11 @@ static inline int crypto_akcipher_sign(struct akcipher_request *req)
|
||||
{
|
||||
struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
|
||||
struct akcipher_alg *alg = crypto_akcipher_alg(tfm);
|
||||
int ret;
|
||||
|
||||
return alg->sign(req);
|
||||
ret = alg->sign(req);
|
||||
crypto_stat_akcipher_sign(req, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -339,8 +404,11 @@ static inline int crypto_akcipher_verify(struct akcipher_request *req)
|
||||
{
|
||||
struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
|
||||
struct akcipher_alg *alg = crypto_akcipher_alg(tfm);
|
||||
int ret;
|
||||
|
||||
return alg->verify(req);
|
||||
ret = alg->verify(req);
|
||||
crypto_stat_akcipher_verify(req, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -20,8 +20,10 @@
|
||||
/*
|
||||
* Maximum values for blocksize and alignmask, used to allocate
|
||||
* static buffers that are big enough for any combination of
|
||||
* ciphers and architectures.
|
||||
* algs and architectures. Ciphers have a lower maximum size.
|
||||
*/
|
||||
#define MAX_ALGAPI_BLOCKSIZE 160
|
||||
#define MAX_ALGAPI_ALIGNMASK 63
|
||||
#define MAX_CIPHER_BLOCKSIZE 16
|
||||
#define MAX_CIPHER_ALIGNMASK 15
|
||||
|
||||
@@ -425,4 +427,14 @@ static inline void crypto_yield(u32 flags)
|
||||
#endif
|
||||
}
|
||||
|
||||
int crypto_register_notifier(struct notifier_block *nb);
|
||||
int crypto_unregister_notifier(struct notifier_block *nb);
|
||||
|
||||
/* Crypto notification events. */
|
||||
enum {
|
||||
CRYPTO_MSG_ALG_REQUEST,
|
||||
CRYPTO_MSG_ALG_REGISTER,
|
||||
CRYPTO_MSG_ALG_LOADED,
|
||||
};
|
||||
|
||||
#endif /* _CRYPTO_ALGAPI_H */
|
||||
|
@@ -113,7 +113,7 @@ static inline int crypto_cbc_decrypt_inplace(
|
||||
unsigned int bsize = crypto_skcipher_blocksize(tfm);
|
||||
unsigned int nbytes = walk->nbytes;
|
||||
u8 *src = walk->src.virt.addr;
|
||||
u8 last_iv[bsize];
|
||||
u8 last_iv[MAX_CIPHER_BLOCKSIZE];
|
||||
|
||||
/* Start of the last block. */
|
||||
src += nbytes - (nbytes & (bsize - 1)) - bsize;
|
||||
|
@@ -13,13 +13,12 @@
|
||||
#define CHACHA20_IV_SIZE 16
|
||||
#define CHACHA20_KEY_SIZE 32
|
||||
#define CHACHA20_BLOCK_SIZE 64
|
||||
#define CHACHA20_BLOCK_WORDS (CHACHA20_BLOCK_SIZE / sizeof(u32))
|
||||
|
||||
struct chacha20_ctx {
|
||||
u32 key[8];
|
||||
};
|
||||
|
||||
void chacha20_block(u32 *state, u32 *stream);
|
||||
void chacha20_block(u32 *state, u8 *stream);
|
||||
void crypto_chacha20_init(u32 *state, struct chacha20_ctx *ctx, u8 *iv);
|
||||
int crypto_chacha20_setkey(struct crypto_skcipher *tfm, const u8 *key,
|
||||
unsigned int keysize);
|
||||
|
@@ -151,9 +151,13 @@ struct shash_desc {
|
||||
void *__ctx[] CRYPTO_MINALIGN_ATTR;
|
||||
};
|
||||
|
||||
#define HASH_MAX_DIGESTSIZE 64
|
||||
#define HASH_MAX_DESCSIZE 360
|
||||
#define HASH_MAX_STATESIZE 512
|
||||
|
||||
#define SHASH_DESC_ON_STACK(shash, ctx) \
|
||||
char __##shash##_desc[sizeof(struct shash_desc) + \
|
||||
crypto_shash_descsize(ctx)] CRYPTO_MINALIGN_ATTR; \
|
||||
HASH_MAX_DESCSIZE] CRYPTO_MINALIGN_ATTR; \
|
||||
struct shash_desc *shash = (struct shash_desc *)__##shash##_desc
|
||||
|
||||
/**
|
||||
@@ -408,6 +412,32 @@ static inline void *ahash_request_ctx(struct ahash_request *req)
|
||||
int crypto_ahash_setkey(struct crypto_ahash *tfm, const u8 *key,
|
||||
unsigned int keylen);
|
||||
|
||||
static inline void crypto_stat_ahash_update(struct ahash_request *req, int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
|
||||
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY)
|
||||
atomic_inc(&tfm->base.__crt_alg->hash_err_cnt);
|
||||
else
|
||||
atomic64_add(req->nbytes, &tfm->base.__crt_alg->hash_tlen);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void crypto_stat_ahash_final(struct ahash_request *req, int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
|
||||
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY) {
|
||||
atomic_inc(&tfm->base.__crt_alg->hash_err_cnt);
|
||||
} else {
|
||||
atomic_inc(&tfm->base.__crt_alg->hash_cnt);
|
||||
atomic64_add(req->nbytes, &tfm->base.__crt_alg->hash_tlen);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* crypto_ahash_finup() - update and finalize message digest
|
||||
* @req: reference to the ahash_request handle that holds all information
|
||||
@@ -522,7 +552,11 @@ static inline int crypto_ahash_init(struct ahash_request *req)
|
||||
*/
|
||||
static inline int crypto_ahash_update(struct ahash_request *req)
|
||||
{
|
||||
return crypto_ahash_reqtfm(req)->update(req);
|
||||
int ret;
|
||||
|
||||
ret = crypto_ahash_reqtfm(req)->update(req);
|
||||
crypto_stat_ahash_update(req, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
8
include/crypto/internal/cryptouser.h
Normal file
8
include/crypto/internal/cryptouser.h
Normal file
@@ -0,0 +1,8 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#include <net/netlink.h>
|
||||
|
||||
struct crypto_alg *crypto_alg_match(struct crypto_user_alg *p, int exact);
|
||||
|
||||
int crypto_dump_reportstat(struct sk_buff *skb, struct netlink_callback *cb);
|
||||
int crypto_reportstat(struct sk_buff *in_skb, struct nlmsghdr *in_nlh, struct nlattr **attrs);
|
||||
int crypto_dump_reportstat_done(struct netlink_callback *cb);
|
@@ -20,7 +20,7 @@
|
||||
struct aead_geniv_ctx {
|
||||
spinlock_t lock;
|
||||
struct crypto_aead *child;
|
||||
struct crypto_skcipher *sknull;
|
||||
struct crypto_sync_skcipher *sknull;
|
||||
u8 salt[] __attribute__ ((aligned(__alignof__(u32))));
|
||||
};
|
||||
|
||||
|
@@ -268,6 +268,42 @@ struct kpp_secret {
|
||||
unsigned short len;
|
||||
};
|
||||
|
||||
static inline void crypto_stat_kpp_set_secret(struct crypto_kpp *tfm, int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
if (ret)
|
||||
atomic_inc(&tfm->base.__crt_alg->kpp_err_cnt);
|
||||
else
|
||||
atomic_inc(&tfm->base.__crt_alg->setsecret_cnt);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void crypto_stat_kpp_generate_public_key(struct kpp_request *req,
|
||||
int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
struct crypto_kpp *tfm = crypto_kpp_reqtfm(req);
|
||||
|
||||
if (ret)
|
||||
atomic_inc(&tfm->base.__crt_alg->kpp_err_cnt);
|
||||
else
|
||||
atomic_inc(&tfm->base.__crt_alg->generate_public_key_cnt);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void crypto_stat_kpp_compute_shared_secret(struct kpp_request *req,
|
||||
int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
struct crypto_kpp *tfm = crypto_kpp_reqtfm(req);
|
||||
|
||||
if (ret)
|
||||
atomic_inc(&tfm->base.__crt_alg->kpp_err_cnt);
|
||||
else
|
||||
atomic_inc(&tfm->base.__crt_alg->compute_shared_secret_cnt);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* crypto_kpp_set_secret() - Invoke kpp operation
|
||||
*
|
||||
@@ -287,8 +323,11 @@ static inline int crypto_kpp_set_secret(struct crypto_kpp *tfm,
|
||||
const void *buffer, unsigned int len)
|
||||
{
|
||||
struct kpp_alg *alg = crypto_kpp_alg(tfm);
|
||||
int ret;
|
||||
|
||||
return alg->set_secret(tfm, buffer, len);
|
||||
ret = alg->set_secret(tfm, buffer, len);
|
||||
crypto_stat_kpp_set_secret(tfm, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -308,8 +347,11 @@ static inline int crypto_kpp_generate_public_key(struct kpp_request *req)
|
||||
{
|
||||
struct crypto_kpp *tfm = crypto_kpp_reqtfm(req);
|
||||
struct kpp_alg *alg = crypto_kpp_alg(tfm);
|
||||
int ret;
|
||||
|
||||
return alg->generate_public_key(req);
|
||||
ret = alg->generate_public_key(req);
|
||||
crypto_stat_kpp_generate_public_key(req, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -326,8 +368,11 @@ static inline int crypto_kpp_compute_shared_secret(struct kpp_request *req)
|
||||
{
|
||||
struct crypto_kpp *tfm = crypto_kpp_reqtfm(req);
|
||||
struct kpp_alg *alg = crypto_kpp_alg(tfm);
|
||||
int ret;
|
||||
|
||||
return alg->compute_shared_secret(req);
|
||||
ret = alg->compute_shared_secret(req);
|
||||
crypto_stat_kpp_compute_shared_secret(req, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -1,114 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Software async multibuffer crypto daemon headers
|
||||
*
|
||||
* Author:
|
||||
* Tim Chen <tim.c.chen@linux.intel.com>
|
||||
*
|
||||
* Copyright (c) 2014, Intel Corporation.
|
||||
*/
|
||||
|
||||
#ifndef _CRYPTO_MCRYPT_H
|
||||
#define _CRYPTO_MCRYPT_H
|
||||
|
||||
#include <linux/crypto.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <crypto/hash.h>
|
||||
|
||||
struct mcryptd_ahash {
|
||||
struct crypto_ahash base;
|
||||
};
|
||||
|
||||
static inline struct mcryptd_ahash *__mcryptd_ahash_cast(
|
||||
struct crypto_ahash *tfm)
|
||||
{
|
||||
return (struct mcryptd_ahash *)tfm;
|
||||
}
|
||||
|
||||
struct mcryptd_cpu_queue {
|
||||
struct crypto_queue queue;
|
||||
spinlock_t q_lock;
|
||||
struct work_struct work;
|
||||
};
|
||||
|
||||
struct mcryptd_queue {
|
||||
struct mcryptd_cpu_queue __percpu *cpu_queue;
|
||||
};
|
||||
|
||||
struct mcryptd_instance_ctx {
|
||||
struct crypto_spawn spawn;
|
||||
struct mcryptd_queue *queue;
|
||||
};
|
||||
|
||||
struct mcryptd_hash_ctx {
|
||||
struct crypto_ahash *child;
|
||||
struct mcryptd_alg_state *alg_state;
|
||||
};
|
||||
|
||||
struct mcryptd_tag {
|
||||
/* seq number of request */
|
||||
unsigned seq_num;
|
||||
/* arrival time of request */
|
||||
unsigned long arrival;
|
||||
unsigned long expire;
|
||||
int cpu;
|
||||
};
|
||||
|
||||
struct mcryptd_hash_request_ctx {
|
||||
struct list_head waiter;
|
||||
crypto_completion_t complete;
|
||||
struct mcryptd_tag tag;
|
||||
struct crypto_hash_walk walk;
|
||||
u8 *out;
|
||||
int flag;
|
||||
struct ahash_request areq;
|
||||
};
|
||||
|
||||
struct mcryptd_ahash *mcryptd_alloc_ahash(const char *alg_name,
|
||||
u32 type, u32 mask);
|
||||
struct crypto_ahash *mcryptd_ahash_child(struct mcryptd_ahash *tfm);
|
||||
struct ahash_request *mcryptd_ahash_desc(struct ahash_request *req);
|
||||
void mcryptd_free_ahash(struct mcryptd_ahash *tfm);
|
||||
void mcryptd_flusher(struct work_struct *work);
|
||||
|
||||
enum mcryptd_req_type {
|
||||
MCRYPTD_NONE,
|
||||
MCRYPTD_UPDATE,
|
||||
MCRYPTD_FINUP,
|
||||
MCRYPTD_DIGEST,
|
||||
MCRYPTD_FINAL
|
||||
};
|
||||
|
||||
struct mcryptd_alg_cstate {
|
||||
unsigned long next_flush;
|
||||
unsigned next_seq_num;
|
||||
bool flusher_engaged;
|
||||
struct delayed_work flush;
|
||||
int cpu;
|
||||
struct mcryptd_alg_state *alg_state;
|
||||
void *mgr;
|
||||
spinlock_t work_lock;
|
||||
struct list_head work_list;
|
||||
struct list_head flush_list;
|
||||
};
|
||||
|
||||
struct mcryptd_alg_state {
|
||||
struct mcryptd_alg_cstate __percpu *alg_cstate;
|
||||
unsigned long (*flusher)(struct mcryptd_alg_cstate *cstate);
|
||||
};
|
||||
|
||||
/* return delay in jiffies from current time */
|
||||
static inline unsigned long get_delay(unsigned long t)
|
||||
{
|
||||
long delay;
|
||||
|
||||
delay = (long) t - (long) jiffies;
|
||||
if (delay <= 0)
|
||||
return 0;
|
||||
else
|
||||
return (unsigned long) delay;
|
||||
}
|
||||
|
||||
void mcryptd_arm_flusher(struct mcryptd_alg_cstate *cstate, unsigned long delay);
|
||||
|
||||
#endif
|
@@ -82,7 +82,7 @@ void cryptd_morus1280_glue_exit_tfm(struct crypto_aead *aead);
|
||||
{ \
|
||||
} \
|
||||
\
|
||||
struct aead_alg crypto_morus1280_##id##_algs[] = {\
|
||||
static struct aead_alg crypto_morus1280_##id##_algs[] = {\
|
||||
{ \
|
||||
.setkey = crypto_morus1280_glue_setkey, \
|
||||
.setauthsize = crypto_morus1280_glue_setauthsize, \
|
||||
|
@@ -82,7 +82,7 @@ void cryptd_morus640_glue_exit_tfm(struct crypto_aead *aead);
|
||||
{ \
|
||||
} \
|
||||
\
|
||||
struct aead_alg crypto_morus640_##id##_algs[] = {\
|
||||
static struct aead_alg crypto_morus640_##id##_algs[] = {\
|
||||
{ \
|
||||
.setkey = crypto_morus640_glue_setkey, \
|
||||
.setauthsize = crypto_morus640_glue_setauthsize, \
|
||||
|
@@ -9,7 +9,7 @@
|
||||
#define NULL_DIGEST_SIZE 0
|
||||
#define NULL_IV_SIZE 0
|
||||
|
||||
struct crypto_skcipher *crypto_get_default_null_skcipher(void);
|
||||
struct crypto_sync_skcipher *crypto_get_default_null_skcipher(void);
|
||||
void crypto_put_default_null_skcipher(void);
|
||||
|
||||
#endif
|
||||
|
@@ -122,6 +122,29 @@ static inline void crypto_free_rng(struct crypto_rng *tfm)
|
||||
crypto_destroy_tfm(tfm, crypto_rng_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline void crypto_stat_rng_seed(struct crypto_rng *tfm, int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY)
|
||||
atomic_inc(&tfm->base.__crt_alg->rng_err_cnt);
|
||||
else
|
||||
atomic_inc(&tfm->base.__crt_alg->seed_cnt);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void crypto_stat_rng_generate(struct crypto_rng *tfm,
|
||||
unsigned int dlen, int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY) {
|
||||
atomic_inc(&tfm->base.__crt_alg->rng_err_cnt);
|
||||
} else {
|
||||
atomic_inc(&tfm->base.__crt_alg->generate_cnt);
|
||||
atomic64_add(dlen, &tfm->base.__crt_alg->generate_tlen);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* crypto_rng_generate() - get random number
|
||||
* @tfm: cipher handle
|
||||
@@ -140,7 +163,11 @@ static inline int crypto_rng_generate(struct crypto_rng *tfm,
|
||||
const u8 *src, unsigned int slen,
|
||||
u8 *dst, unsigned int dlen)
|
||||
{
|
||||
return crypto_rng_alg(tfm)->generate(tfm, src, slen, dst, dlen);
|
||||
int ret;
|
||||
|
||||
ret = crypto_rng_alg(tfm)->generate(tfm, src, slen, dst, dlen);
|
||||
crypto_stat_rng_generate(tfm, dlen, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -65,6 +65,10 @@ struct crypto_skcipher {
|
||||
struct crypto_tfm base;
|
||||
};
|
||||
|
||||
struct crypto_sync_skcipher {
|
||||
struct crypto_skcipher base;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct skcipher_alg - symmetric key cipher definition
|
||||
* @min_keysize: Minimum key size supported by the transformation. This is the
|
||||
@@ -139,9 +143,17 @@ struct skcipher_alg {
|
||||
struct crypto_alg base;
|
||||
};
|
||||
|
||||
#define SKCIPHER_REQUEST_ON_STACK(name, tfm) \
|
||||
#define MAX_SYNC_SKCIPHER_REQSIZE 384
|
||||
/*
|
||||
* This performs a type-check against the "tfm" argument to make sure
|
||||
* all users have the correct skcipher tfm for doing on-stack requests.
|
||||
*/
|
||||
#define SYNC_SKCIPHER_REQUEST_ON_STACK(name, tfm) \
|
||||
char __##name##_desc[sizeof(struct skcipher_request) + \
|
||||
crypto_skcipher_reqsize(tfm)] CRYPTO_MINALIGN_ATTR; \
|
||||
MAX_SYNC_SKCIPHER_REQSIZE + \
|
||||
(!(sizeof((struct crypto_sync_skcipher *)1 == \
|
||||
(typeof(tfm))1))) \
|
||||
] CRYPTO_MINALIGN_ATTR; \
|
||||
struct skcipher_request *name = (void *)__##name##_desc
|
||||
|
||||
/**
|
||||
@@ -197,6 +209,9 @@ static inline struct crypto_skcipher *__crypto_skcipher_cast(
|
||||
struct crypto_skcipher *crypto_alloc_skcipher(const char *alg_name,
|
||||
u32 type, u32 mask);
|
||||
|
||||
struct crypto_sync_skcipher *crypto_alloc_sync_skcipher(const char *alg_name,
|
||||
u32 type, u32 mask);
|
||||
|
||||
static inline struct crypto_tfm *crypto_skcipher_tfm(
|
||||
struct crypto_skcipher *tfm)
|
||||
{
|
||||
@@ -212,6 +227,11 @@ static inline void crypto_free_skcipher(struct crypto_skcipher *tfm)
|
||||
crypto_destroy_tfm(tfm, crypto_skcipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline void crypto_free_sync_skcipher(struct crypto_sync_skcipher *tfm)
|
||||
{
|
||||
crypto_free_skcipher(&tfm->base);
|
||||
}
|
||||
|
||||
/**
|
||||
* crypto_has_skcipher() - Search for the availability of an skcipher.
|
||||
* @alg_name: is the cra_name / name or cra_driver_name / driver name of the
|
||||
@@ -280,6 +300,12 @@ static inline unsigned int crypto_skcipher_ivsize(struct crypto_skcipher *tfm)
|
||||
return tfm->ivsize;
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_sync_skcipher_ivsize(
|
||||
struct crypto_sync_skcipher *tfm)
|
||||
{
|
||||
return crypto_skcipher_ivsize(&tfm->base);
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_skcipher_alg_chunksize(
|
||||
struct skcipher_alg *alg)
|
||||
{
|
||||
@@ -356,6 +382,12 @@ static inline unsigned int crypto_skcipher_blocksize(
|
||||
return crypto_tfm_alg_blocksize(crypto_skcipher_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_sync_skcipher_blocksize(
|
||||
struct crypto_sync_skcipher *tfm)
|
||||
{
|
||||
return crypto_skcipher_blocksize(&tfm->base);
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_skcipher_alignmask(
|
||||
struct crypto_skcipher *tfm)
|
||||
{
|
||||
@@ -379,6 +411,24 @@ static inline void crypto_skcipher_clear_flags(struct crypto_skcipher *tfm,
|
||||
crypto_tfm_clear_flags(crypto_skcipher_tfm(tfm), flags);
|
||||
}
|
||||
|
||||
static inline u32 crypto_sync_skcipher_get_flags(
|
||||
struct crypto_sync_skcipher *tfm)
|
||||
{
|
||||
return crypto_skcipher_get_flags(&tfm->base);
|
||||
}
|
||||
|
||||
static inline void crypto_sync_skcipher_set_flags(
|
||||
struct crypto_sync_skcipher *tfm, u32 flags)
|
||||
{
|
||||
crypto_skcipher_set_flags(&tfm->base, flags);
|
||||
}
|
||||
|
||||
static inline void crypto_sync_skcipher_clear_flags(
|
||||
struct crypto_sync_skcipher *tfm, u32 flags)
|
||||
{
|
||||
crypto_skcipher_clear_flags(&tfm->base, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* crypto_skcipher_setkey() - set key for cipher
|
||||
* @tfm: cipher handle
|
||||
@@ -401,6 +451,12 @@ static inline int crypto_skcipher_setkey(struct crypto_skcipher *tfm,
|
||||
return tfm->setkey(tfm, key, keylen);
|
||||
}
|
||||
|
||||
static inline int crypto_sync_skcipher_setkey(struct crypto_sync_skcipher *tfm,
|
||||
const u8 *key, unsigned int keylen)
|
||||
{
|
||||
return crypto_skcipher_setkey(&tfm->base, key, keylen);
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_skcipher_default_keysize(
|
||||
struct crypto_skcipher *tfm)
|
||||
{
|
||||
@@ -422,6 +478,40 @@ static inline struct crypto_skcipher *crypto_skcipher_reqtfm(
|
||||
return __crypto_skcipher_cast(req->base.tfm);
|
||||
}
|
||||
|
||||
static inline struct crypto_sync_skcipher *crypto_sync_skcipher_reqtfm(
|
||||
struct skcipher_request *req)
|
||||
{
|
||||
struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
|
||||
|
||||
return container_of(tfm, struct crypto_sync_skcipher, base);
|
||||
}
|
||||
|
||||
static inline void crypto_stat_skcipher_encrypt(struct skcipher_request *req,
|
||||
int ret, struct crypto_alg *alg)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY) {
|
||||
atomic_inc(&alg->cipher_err_cnt);
|
||||
} else {
|
||||
atomic_inc(&alg->encrypt_cnt);
|
||||
atomic64_add(req->cryptlen, &alg->encrypt_tlen);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void crypto_stat_skcipher_decrypt(struct skcipher_request *req,
|
||||
int ret, struct crypto_alg *alg)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY) {
|
||||
atomic_inc(&alg->cipher_err_cnt);
|
||||
} else {
|
||||
atomic_inc(&alg->decrypt_cnt);
|
||||
atomic64_add(req->cryptlen, &alg->decrypt_tlen);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* crypto_skcipher_encrypt() - encrypt plaintext
|
||||
* @req: reference to the skcipher_request handle that holds all information
|
||||
@@ -436,11 +526,14 @@ static inline struct crypto_skcipher *crypto_skcipher_reqtfm(
|
||||
static inline int crypto_skcipher_encrypt(struct skcipher_request *req)
|
||||
{
|
||||
struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
|
||||
int ret;
|
||||
|
||||
if (crypto_skcipher_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)
|
||||
return -ENOKEY;
|
||||
|
||||
return tfm->encrypt(req);
|
||||
ret = -ENOKEY;
|
||||
else
|
||||
ret = tfm->encrypt(req);
|
||||
crypto_stat_skcipher_encrypt(req, ret, tfm->base.__crt_alg);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -457,11 +550,14 @@ static inline int crypto_skcipher_encrypt(struct skcipher_request *req)
|
||||
static inline int crypto_skcipher_decrypt(struct skcipher_request *req)
|
||||
{
|
||||
struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
|
||||
int ret;
|
||||
|
||||
if (crypto_skcipher_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)
|
||||
return -ENOKEY;
|
||||
|
||||
return tfm->decrypt(req);
|
||||
ret = -ENOKEY;
|
||||
else
|
||||
ret = tfm->decrypt(req);
|
||||
crypto_stat_skcipher_decrypt(req, ret, tfm->base.__crt_alg);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -500,6 +596,12 @@ static inline void skcipher_request_set_tfm(struct skcipher_request *req,
|
||||
req->base.tfm = crypto_skcipher_tfm(tfm);
|
||||
}
|
||||
|
||||
static inline void skcipher_request_set_sync_tfm(struct skcipher_request *req,
|
||||
struct crypto_sync_skcipher *tfm)
|
||||
{
|
||||
skcipher_request_set_tfm(req, &tfm->base);
|
||||
}
|
||||
|
||||
static inline struct skcipher_request *skcipher_request_cast(
|
||||
struct crypto_async_request *req)
|
||||
{
|
||||
|
@@ -1,62 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Common values for the Speck algorithm
|
||||
*/
|
||||
|
||||
#ifndef _CRYPTO_SPECK_H
|
||||
#define _CRYPTO_SPECK_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* Speck128 */
|
||||
|
||||
#define SPECK128_BLOCK_SIZE 16
|
||||
|
||||
#define SPECK128_128_KEY_SIZE 16
|
||||
#define SPECK128_128_NROUNDS 32
|
||||
|
||||
#define SPECK128_192_KEY_SIZE 24
|
||||
#define SPECK128_192_NROUNDS 33
|
||||
|
||||
#define SPECK128_256_KEY_SIZE 32
|
||||
#define SPECK128_256_NROUNDS 34
|
||||
|
||||
struct speck128_tfm_ctx {
|
||||
u64 round_keys[SPECK128_256_NROUNDS];
|
||||
int nrounds;
|
||||
};
|
||||
|
||||
void crypto_speck128_encrypt(const struct speck128_tfm_ctx *ctx,
|
||||
u8 *out, const u8 *in);
|
||||
|
||||
void crypto_speck128_decrypt(const struct speck128_tfm_ctx *ctx,
|
||||
u8 *out, const u8 *in);
|
||||
|
||||
int crypto_speck128_setkey(struct speck128_tfm_ctx *ctx, const u8 *key,
|
||||
unsigned int keysize);
|
||||
|
||||
/* Speck64 */
|
||||
|
||||
#define SPECK64_BLOCK_SIZE 8
|
||||
|
||||
#define SPECK64_96_KEY_SIZE 12
|
||||
#define SPECK64_96_NROUNDS 26
|
||||
|
||||
#define SPECK64_128_KEY_SIZE 16
|
||||
#define SPECK64_128_NROUNDS 27
|
||||
|
||||
struct speck64_tfm_ctx {
|
||||
u32 round_keys[SPECK64_128_NROUNDS];
|
||||
int nrounds;
|
||||
};
|
||||
|
||||
void crypto_speck64_encrypt(const struct speck64_tfm_ctx *ctx,
|
||||
u8 *out, const u8 *in);
|
||||
|
||||
void crypto_speck64_decrypt(const struct speck64_tfm_ctx *ctx,
|
||||
u8 *out, const u8 *in);
|
||||
|
||||
int crypto_speck64_setkey(struct speck64_tfm_ctx *ctx, const u8 *key,
|
||||
unsigned int keysize);
|
||||
|
||||
#endif /* _CRYPTO_SPECK_H */
|
@@ -198,7 +198,6 @@ struct ftrace_likely_data {
|
||||
*/
|
||||
#define __pure __attribute__((pure))
|
||||
#define __aligned(x) __attribute__((aligned(x)))
|
||||
#define __aligned_largest __attribute__((aligned))
|
||||
#define __printf(a, b) __attribute__((format(printf, a, b)))
|
||||
#define __scanf(a, b) __attribute__((format(scanf, a, b)))
|
||||
#define __maybe_unused __attribute__((unused))
|
||||
|
@@ -45,7 +45,7 @@
|
||||
* 'asm/cpufeature.h' of your favorite architecture.
|
||||
*/
|
||||
#define module_cpu_feature_match(x, __initfunc) \
|
||||
static struct cpu_feature const cpu_feature_match_ ## x[] = \
|
||||
static struct cpu_feature const __maybe_unused cpu_feature_match_ ## x[] = \
|
||||
{ { .feature = cpu_feature(x) }, { } }; \
|
||||
MODULE_DEVICE_TABLE(cpu, cpu_feature_match_ ## x); \
|
||||
\
|
||||
|
@@ -6,6 +6,7 @@
|
||||
|
||||
#define CRC_T10DIF_DIGEST_SIZE 2
|
||||
#define CRC_T10DIF_BLOCK_SIZE 1
|
||||
#define CRC_T10DIF_STRING "crct10dif"
|
||||
|
||||
extern __u16 crc_t10dif_generic(__u16 crc, const unsigned char *buffer,
|
||||
size_t len);
|
||||
|
@@ -454,6 +454,33 @@ struct compress_alg {
|
||||
* @cra_refcnt: internally used
|
||||
* @cra_destroy: internally used
|
||||
*
|
||||
* All following statistics are for this crypto_alg
|
||||
* @encrypt_cnt: number of encrypt requests
|
||||
* @decrypt_cnt: number of decrypt requests
|
||||
* @compress_cnt: number of compress requests
|
||||
* @decompress_cnt: number of decompress requests
|
||||
* @generate_cnt: number of RNG generate requests
|
||||
* @seed_cnt: number of times the rng was seeded
|
||||
* @hash_cnt: number of hash requests
|
||||
* @sign_cnt: number of sign requests
|
||||
* @setsecret_cnt: number of setsecrey operation
|
||||
* @generate_public_key_cnt: number of generate_public_key operation
|
||||
* @verify_cnt: number of verify operation
|
||||
* @compute_shared_secret_cnt: number of compute_shared_secret operation
|
||||
* @encrypt_tlen: total data size handled by encrypt requests
|
||||
* @decrypt_tlen: total data size handled by decrypt requests
|
||||
* @compress_tlen: total data size handled by compress requests
|
||||
* @decompress_tlen: total data size handled by decompress requests
|
||||
* @generate_tlen: total data size of generated data by the RNG
|
||||
* @hash_tlen: total data size hashed
|
||||
* @akcipher_err_cnt: number of error for akcipher requests
|
||||
* @cipher_err_cnt: number of error for akcipher requests
|
||||
* @compress_err_cnt: number of error for akcipher requests
|
||||
* @aead_err_cnt: number of error for akcipher requests
|
||||
* @hash_err_cnt: number of error for akcipher requests
|
||||
* @rng_err_cnt: number of error for akcipher requests
|
||||
* @kpp_err_cnt: number of error for akcipher requests
|
||||
*
|
||||
* The struct crypto_alg describes a generic Crypto API algorithm and is common
|
||||
* for all of the transformations. Any variable not documented here shall not
|
||||
* be used by a cipher implementation as it is internal to the Crypto API.
|
||||
@@ -487,6 +514,45 @@ struct crypto_alg {
|
||||
void (*cra_destroy)(struct crypto_alg *alg);
|
||||
|
||||
struct module *cra_module;
|
||||
|
||||
union {
|
||||
atomic_t encrypt_cnt;
|
||||
atomic_t compress_cnt;
|
||||
atomic_t generate_cnt;
|
||||
atomic_t hash_cnt;
|
||||
atomic_t setsecret_cnt;
|
||||
};
|
||||
union {
|
||||
atomic64_t encrypt_tlen;
|
||||
atomic64_t compress_tlen;
|
||||
atomic64_t generate_tlen;
|
||||
atomic64_t hash_tlen;
|
||||
};
|
||||
union {
|
||||
atomic_t akcipher_err_cnt;
|
||||
atomic_t cipher_err_cnt;
|
||||
atomic_t compress_err_cnt;
|
||||
atomic_t aead_err_cnt;
|
||||
atomic_t hash_err_cnt;
|
||||
atomic_t rng_err_cnt;
|
||||
atomic_t kpp_err_cnt;
|
||||
};
|
||||
union {
|
||||
atomic_t decrypt_cnt;
|
||||
atomic_t decompress_cnt;
|
||||
atomic_t seed_cnt;
|
||||
atomic_t generate_public_key_cnt;
|
||||
};
|
||||
union {
|
||||
atomic64_t decrypt_tlen;
|
||||
atomic64_t decompress_tlen;
|
||||
};
|
||||
union {
|
||||
atomic_t verify_cnt;
|
||||
atomic_t compute_shared_secret_cnt;
|
||||
};
|
||||
atomic_t sign_cnt;
|
||||
|
||||
} CRYPTO_MINALIGN_ATTR;
|
||||
|
||||
/*
|
||||
@@ -907,6 +973,38 @@ static inline struct crypto_ablkcipher *crypto_ablkcipher_reqtfm(
|
||||
return __crypto_ablkcipher_cast(req->base.tfm);
|
||||
}
|
||||
|
||||
static inline void crypto_stat_ablkcipher_encrypt(struct ablkcipher_request *req,
|
||||
int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
struct ablkcipher_tfm *crt =
|
||||
crypto_ablkcipher_crt(crypto_ablkcipher_reqtfm(req));
|
||||
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY) {
|
||||
atomic_inc(&crt->base->base.__crt_alg->cipher_err_cnt);
|
||||
} else {
|
||||
atomic_inc(&crt->base->base.__crt_alg->encrypt_cnt);
|
||||
atomic64_add(req->nbytes, &crt->base->base.__crt_alg->encrypt_tlen);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void crypto_stat_ablkcipher_decrypt(struct ablkcipher_request *req,
|
||||
int ret)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_STATS
|
||||
struct ablkcipher_tfm *crt =
|
||||
crypto_ablkcipher_crt(crypto_ablkcipher_reqtfm(req));
|
||||
|
||||
if (ret && ret != -EINPROGRESS && ret != -EBUSY) {
|
||||
atomic_inc(&crt->base->base.__crt_alg->cipher_err_cnt);
|
||||
} else {
|
||||
atomic_inc(&crt->base->base.__crt_alg->decrypt_cnt);
|
||||
atomic64_add(req->nbytes, &crt->base->base.__crt_alg->decrypt_tlen);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* crypto_ablkcipher_encrypt() - encrypt plaintext
|
||||
* @req: reference to the ablkcipher_request handle that holds all information
|
||||
@@ -922,7 +1020,11 @@ static inline int crypto_ablkcipher_encrypt(struct ablkcipher_request *req)
|
||||
{
|
||||
struct ablkcipher_tfm *crt =
|
||||
crypto_ablkcipher_crt(crypto_ablkcipher_reqtfm(req));
|
||||
return crt->encrypt(req);
|
||||
int ret;
|
||||
|
||||
ret = crt->encrypt(req);
|
||||
crypto_stat_ablkcipher_encrypt(req, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -940,7 +1042,11 @@ static inline int crypto_ablkcipher_decrypt(struct ablkcipher_request *req)
|
||||
{
|
||||
struct ablkcipher_tfm *crt =
|
||||
crypto_ablkcipher_crt(crypto_ablkcipher_reqtfm(req));
|
||||
return crt->decrypt(req);
|
||||
int ret;
|
||||
|
||||
ret = crt->decrypt(req);
|
||||
crypto_stat_ablkcipher_decrypt(req, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -405,6 +405,7 @@ extern struct device_type fsl_mc_bus_dpcon_type;
|
||||
extern struct device_type fsl_mc_bus_dpmcp_type;
|
||||
extern struct device_type fsl_mc_bus_dpmac_type;
|
||||
extern struct device_type fsl_mc_bus_dprtc_type;
|
||||
extern struct device_type fsl_mc_bus_dpseci_type;
|
||||
|
||||
static inline bool is_fsl_mc_bus_dprc(const struct fsl_mc_device *mc_dev)
|
||||
{
|
||||
@@ -451,6 +452,11 @@ static inline bool is_fsl_mc_bus_dprtc(const struct fsl_mc_device *mc_dev)
|
||||
return mc_dev->dev.type == &fsl_mc_bus_dprtc_type;
|
||||
}
|
||||
|
||||
static inline bool is_fsl_mc_bus_dpseci(const struct fsl_mc_device *mc_dev)
|
||||
{
|
||||
return mc_dev->dev.type == &fsl_mc_bus_dpseci_type;
|
||||
}
|
||||
|
||||
/*
|
||||
* Data Path Buffer Pool (DPBP) API
|
||||
* Contains initialization APIs and runtime control APIs for DPBP
|
||||
|
@@ -33,7 +33,8 @@
|
||||
* and max is a multiple of 4 and >= 32 bytes.
|
||||
* @priv: Private data, for use by the RNG driver.
|
||||
* @quality: Estimation of true entropy in RNG's bitstream
|
||||
* (per mill).
|
||||
* (in bits of entropy per 1024 bits of input;
|
||||
* valid values: 1 to 1024, or 0 for unknown).
|
||||
*/
|
||||
struct hwrng {
|
||||
const char *name;
|
||||
|
@@ -71,10 +71,10 @@ struct gss_krb5_enctype {
|
||||
const u32 keyed_cksum; /* is it a keyed cksum? */
|
||||
const u32 keybytes; /* raw key len, in bytes */
|
||||
const u32 keylength; /* final key len, in bytes */
|
||||
u32 (*encrypt) (struct crypto_skcipher *tfm,
|
||||
u32 (*encrypt) (struct crypto_sync_skcipher *tfm,
|
||||
void *iv, void *in, void *out,
|
||||
int length); /* encryption function */
|
||||
u32 (*decrypt) (struct crypto_skcipher *tfm,
|
||||
u32 (*decrypt) (struct crypto_sync_skcipher *tfm,
|
||||
void *iv, void *in, void *out,
|
||||
int length); /* decryption function */
|
||||
u32 (*mk_key) (const struct gss_krb5_enctype *gk5e,
|
||||
@@ -98,12 +98,12 @@ struct krb5_ctx {
|
||||
u32 enctype;
|
||||
u32 flags;
|
||||
const struct gss_krb5_enctype *gk5e; /* enctype-specific info */
|
||||
struct crypto_skcipher *enc;
|
||||
struct crypto_skcipher *seq;
|
||||
struct crypto_skcipher *acceptor_enc;
|
||||
struct crypto_skcipher *initiator_enc;
|
||||
struct crypto_skcipher *acceptor_enc_aux;
|
||||
struct crypto_skcipher *initiator_enc_aux;
|
||||
struct crypto_sync_skcipher *enc;
|
||||
struct crypto_sync_skcipher *seq;
|
||||
struct crypto_sync_skcipher *acceptor_enc;
|
||||
struct crypto_sync_skcipher *initiator_enc;
|
||||
struct crypto_sync_skcipher *acceptor_enc_aux;
|
||||
struct crypto_sync_skcipher *initiator_enc_aux;
|
||||
u8 Ksess[GSS_KRB5_MAX_KEYLEN]; /* session key */
|
||||
u8 cksum[GSS_KRB5_MAX_KEYLEN];
|
||||
s32 endtime;
|
||||
@@ -262,24 +262,24 @@ gss_unwrap_kerberos(struct gss_ctx *ctx_id, int offset,
|
||||
|
||||
|
||||
u32
|
||||
krb5_encrypt(struct crypto_skcipher *key,
|
||||
krb5_encrypt(struct crypto_sync_skcipher *key,
|
||||
void *iv, void *in, void *out, int length);
|
||||
|
||||
u32
|
||||
krb5_decrypt(struct crypto_skcipher *key,
|
||||
krb5_decrypt(struct crypto_sync_skcipher *key,
|
||||
void *iv, void *in, void *out, int length);
|
||||
|
||||
int
|
||||
gss_encrypt_xdr_buf(struct crypto_skcipher *tfm, struct xdr_buf *outbuf,
|
||||
gss_encrypt_xdr_buf(struct crypto_sync_skcipher *tfm, struct xdr_buf *outbuf,
|
||||
int offset, struct page **pages);
|
||||
|
||||
int
|
||||
gss_decrypt_xdr_buf(struct crypto_skcipher *tfm, struct xdr_buf *inbuf,
|
||||
gss_decrypt_xdr_buf(struct crypto_sync_skcipher *tfm, struct xdr_buf *inbuf,
|
||||
int offset);
|
||||
|
||||
s32
|
||||
krb5_make_seq_num(struct krb5_ctx *kctx,
|
||||
struct crypto_skcipher *key,
|
||||
struct crypto_sync_skcipher *key,
|
||||
int direction,
|
||||
u32 seqnum, unsigned char *cksum, unsigned char *buf);
|
||||
|
||||
@@ -320,12 +320,12 @@ gss_krb5_aes_decrypt(struct krb5_ctx *kctx, u32 offset,
|
||||
|
||||
int
|
||||
krb5_rc4_setup_seq_key(struct krb5_ctx *kctx,
|
||||
struct crypto_skcipher *cipher,
|
||||
struct crypto_sync_skcipher *cipher,
|
||||
unsigned char *cksum);
|
||||
|
||||
int
|
||||
krb5_rc4_setup_enc_key(struct krb5_ctx *kctx,
|
||||
struct crypto_skcipher *cipher,
|
||||
struct crypto_sync_skcipher *cipher,
|
||||
s32 seqnum);
|
||||
void
|
||||
gss_krb5_make_confounder(char *p, u32 conflen);
|
||||
|
@@ -66,6 +66,15 @@ struct dpaa2_fd {
|
||||
#define SG_BPID_MASK 0x3FFF
|
||||
#define SG_FINAL_FLAG_MASK 0x1
|
||||
#define SG_FINAL_FLAG_SHIFT 15
|
||||
#define FL_SHORT_LEN_FLAG_MASK 0x1
|
||||
#define FL_SHORT_LEN_FLAG_SHIFT 14
|
||||
#define FL_SHORT_LEN_MASK 0x3FFFF
|
||||
#define FL_OFFSET_MASK 0x0FFF
|
||||
#define FL_FORMAT_MASK 0x3
|
||||
#define FL_FORMAT_SHIFT 12
|
||||
#define FL_BPID_MASK 0x3FFF
|
||||
#define FL_FINAL_FLAG_MASK 0x1
|
||||
#define FL_FINAL_FLAG_SHIFT 15
|
||||
|
||||
/* Error bits in FD CTRL */
|
||||
#define FD_CTRL_ERR_MASK 0x000000FF
|
||||
@@ -435,4 +444,237 @@ static inline void dpaa2_sg_set_final(struct dpaa2_sg_entry *sg, bool final)
|
||||
sg->format_offset |= cpu_to_le16(final << SG_FINAL_FLAG_SHIFT);
|
||||
}
|
||||
|
||||
/**
|
||||
* struct dpaa2_fl_entry - structure for frame list entry.
|
||||
* @addr: address in the FLE
|
||||
* @len: length in the FLE
|
||||
* @bpid: buffer pool ID
|
||||
* @format_offset: format, offset, and short-length fields
|
||||
* @frc: frame context
|
||||
* @ctrl: control bits...including pta, pvt1, pvt2, err, etc
|
||||
* @flc: flow context address
|
||||
*/
|
||||
struct dpaa2_fl_entry {
|
||||
__le64 addr;
|
||||
__le32 len;
|
||||
__le16 bpid;
|
||||
__le16 format_offset;
|
||||
__le32 frc;
|
||||
__le32 ctrl;
|
||||
__le64 flc;
|
||||
};
|
||||
|
||||
enum dpaa2_fl_format {
|
||||
dpaa2_fl_single = 0,
|
||||
dpaa2_fl_res,
|
||||
dpaa2_fl_sg
|
||||
};
|
||||
|
||||
/**
|
||||
* dpaa2_fl_get_addr() - get the addr field of FLE
|
||||
* @fle: the given frame list entry
|
||||
*
|
||||
* Return the address in the frame list entry.
|
||||
*/
|
||||
static inline dma_addr_t dpaa2_fl_get_addr(const struct dpaa2_fl_entry *fle)
|
||||
{
|
||||
return (dma_addr_t)le64_to_cpu(fle->addr);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_set_addr() - Set the addr field of FLE
|
||||
* @fle: the given frame list entry
|
||||
* @addr: the address needs to be set in frame list entry
|
||||
*/
|
||||
static inline void dpaa2_fl_set_addr(struct dpaa2_fl_entry *fle,
|
||||
dma_addr_t addr)
|
||||
{
|
||||
fle->addr = cpu_to_le64(addr);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_get_frc() - Get the frame context in the FLE
|
||||
* @fle: the given frame list entry
|
||||
*
|
||||
* Return the frame context field in the frame lsit entry.
|
||||
*/
|
||||
static inline u32 dpaa2_fl_get_frc(const struct dpaa2_fl_entry *fle)
|
||||
{
|
||||
return le32_to_cpu(fle->frc);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_set_frc() - Set the frame context in the FLE
|
||||
* @fle: the given frame list entry
|
||||
* @frc: the frame context needs to be set in frame list entry
|
||||
*/
|
||||
static inline void dpaa2_fl_set_frc(struct dpaa2_fl_entry *fle, u32 frc)
|
||||
{
|
||||
fle->frc = cpu_to_le32(frc);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_get_ctrl() - Get the control bits in the FLE
|
||||
* @fle: the given frame list entry
|
||||
*
|
||||
* Return the control bits field in the frame list entry.
|
||||
*/
|
||||
static inline u32 dpaa2_fl_get_ctrl(const struct dpaa2_fl_entry *fle)
|
||||
{
|
||||
return le32_to_cpu(fle->ctrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_set_ctrl() - Set the control bits in the FLE
|
||||
* @fle: the given frame list entry
|
||||
* @ctrl: the control bits to be set in the frame list entry
|
||||
*/
|
||||
static inline void dpaa2_fl_set_ctrl(struct dpaa2_fl_entry *fle, u32 ctrl)
|
||||
{
|
||||
fle->ctrl = cpu_to_le32(ctrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_get_flc() - Get the flow context in the FLE
|
||||
* @fle: the given frame list entry
|
||||
*
|
||||
* Return the flow context in the frame list entry.
|
||||
*/
|
||||
static inline dma_addr_t dpaa2_fl_get_flc(const struct dpaa2_fl_entry *fle)
|
||||
{
|
||||
return (dma_addr_t)le64_to_cpu(fle->flc);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_set_flc() - Set the flow context field of FLE
|
||||
* @fle: the given frame list entry
|
||||
* @flc_addr: the flow context needs to be set in frame list entry
|
||||
*/
|
||||
static inline void dpaa2_fl_set_flc(struct dpaa2_fl_entry *fle,
|
||||
dma_addr_t flc_addr)
|
||||
{
|
||||
fle->flc = cpu_to_le64(flc_addr);
|
||||
}
|
||||
|
||||
static inline bool dpaa2_fl_short_len(const struct dpaa2_fl_entry *fle)
|
||||
{
|
||||
return !!((le16_to_cpu(fle->format_offset) >>
|
||||
FL_SHORT_LEN_FLAG_SHIFT) & FL_SHORT_LEN_FLAG_MASK);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_get_len() - Get the length in the FLE
|
||||
* @fle: the given frame list entry
|
||||
*
|
||||
* Return the length field in the frame list entry.
|
||||
*/
|
||||
static inline u32 dpaa2_fl_get_len(const struct dpaa2_fl_entry *fle)
|
||||
{
|
||||
if (dpaa2_fl_short_len(fle))
|
||||
return le32_to_cpu(fle->len) & FL_SHORT_LEN_MASK;
|
||||
|
||||
return le32_to_cpu(fle->len);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_set_len() - Set the length field of FLE
|
||||
* @fle: the given frame list entry
|
||||
* @len: the length needs to be set in frame list entry
|
||||
*/
|
||||
static inline void dpaa2_fl_set_len(struct dpaa2_fl_entry *fle, u32 len)
|
||||
{
|
||||
fle->len = cpu_to_le32(len);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_get_offset() - Get the offset field in the frame list entry
|
||||
* @fle: the given frame list entry
|
||||
*
|
||||
* Return the offset.
|
||||
*/
|
||||
static inline u16 dpaa2_fl_get_offset(const struct dpaa2_fl_entry *fle)
|
||||
{
|
||||
return le16_to_cpu(fle->format_offset) & FL_OFFSET_MASK;
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_set_offset() - Set the offset field of FLE
|
||||
* @fle: the given frame list entry
|
||||
* @offset: the offset needs to be set in frame list entry
|
||||
*/
|
||||
static inline void dpaa2_fl_set_offset(struct dpaa2_fl_entry *fle, u16 offset)
|
||||
{
|
||||
fle->format_offset &= cpu_to_le16(~FL_OFFSET_MASK);
|
||||
fle->format_offset |= cpu_to_le16(offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_get_format() - Get the format field in the FLE
|
||||
* @fle: the given frame list entry
|
||||
*
|
||||
* Return the format.
|
||||
*/
|
||||
static inline enum dpaa2_fl_format dpaa2_fl_get_format(const struct dpaa2_fl_entry *fle)
|
||||
{
|
||||
return (enum dpaa2_fl_format)((le16_to_cpu(fle->format_offset) >>
|
||||
FL_FORMAT_SHIFT) & FL_FORMAT_MASK);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_set_format() - Set the format field of FLE
|
||||
* @fle: the given frame list entry
|
||||
* @format: the format needs to be set in frame list entry
|
||||
*/
|
||||
static inline void dpaa2_fl_set_format(struct dpaa2_fl_entry *fle,
|
||||
enum dpaa2_fl_format format)
|
||||
{
|
||||
fle->format_offset &= cpu_to_le16(~(FL_FORMAT_MASK << FL_FORMAT_SHIFT));
|
||||
fle->format_offset |= cpu_to_le16(format << FL_FORMAT_SHIFT);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_get_bpid() - Get the bpid field in the FLE
|
||||
* @fle: the given frame list entry
|
||||
*
|
||||
* Return the buffer pool id.
|
||||
*/
|
||||
static inline u16 dpaa2_fl_get_bpid(const struct dpaa2_fl_entry *fle)
|
||||
{
|
||||
return le16_to_cpu(fle->bpid) & FL_BPID_MASK;
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_set_bpid() - Set the bpid field of FLE
|
||||
* @fle: the given frame list entry
|
||||
* @bpid: buffer pool id to be set
|
||||
*/
|
||||
static inline void dpaa2_fl_set_bpid(struct dpaa2_fl_entry *fle, u16 bpid)
|
||||
{
|
||||
fle->bpid &= cpu_to_le16(~(FL_BPID_MASK));
|
||||
fle->bpid |= cpu_to_le16(bpid);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_is_final() - Check final bit in FLE
|
||||
* @fle: the given frame list entry
|
||||
*
|
||||
* Return bool.
|
||||
*/
|
||||
static inline bool dpaa2_fl_is_final(const struct dpaa2_fl_entry *fle)
|
||||
{
|
||||
return !!(le16_to_cpu(fle->format_offset) >> FL_FINAL_FLAG_SHIFT);
|
||||
}
|
||||
|
||||
/**
|
||||
* dpaa2_fl_set_final() - Set the final bit in FLE
|
||||
* @fle: the given frame list entry
|
||||
* @final: the final boolean to be set
|
||||
*/
|
||||
static inline void dpaa2_fl_set_final(struct dpaa2_fl_entry *fle, bool final)
|
||||
{
|
||||
fle->format_offset &= cpu_to_le16((~(FL_FINAL_FLAG_MASK <<
|
||||
FL_FINAL_FLAG_SHIFT)) & 0xFFFF);
|
||||
fle->format_offset |= cpu_to_le16(final << FL_FINAL_FLAG_SHIFT);
|
||||
}
|
||||
|
||||
#endif /* __FSL_DPAA2_FD_H */
|
||||
|
@@ -174,4 +174,19 @@ static inline const struct dpaa2_fd *dpaa2_dq_fd(const struct dpaa2_dq *dq)
|
||||
return (const struct dpaa2_fd *)&dq->dq.fd[0];
|
||||
}
|
||||
|
||||
#define DPAA2_CSCN_SIZE sizeof(struct dpaa2_dq)
|
||||
#define DPAA2_CSCN_ALIGN 16
|
||||
#define DPAA2_CSCN_STATE_CG BIT(0)
|
||||
|
||||
/**
|
||||
* dpaa2_cscn_state_congested() - Check congestion state
|
||||
* @cscn: congestion SCN (delivered to WQ or memory)
|
||||
*
|
||||
i * Return true is congested.
|
||||
*/
|
||||
static inline bool dpaa2_cscn_state_congested(struct dpaa2_dq *cscn)
|
||||
{
|
||||
return !!(cscn->scn.state & DPAA2_CSCN_STATE_CG);
|
||||
}
|
||||
|
||||
#endif /* __FSL_DPAA2_GLOBAL_H */
|
||||
|
@@ -97,9 +97,13 @@ void dpaa2_io_service_deregister(struct dpaa2_io *service,
|
||||
int dpaa2_io_service_rearm(struct dpaa2_io *service,
|
||||
struct dpaa2_io_notification_ctx *ctx);
|
||||
|
||||
int dpaa2_io_service_pull_fq(struct dpaa2_io *d, u32 fqid,
|
||||
struct dpaa2_io_store *s);
|
||||
int dpaa2_io_service_pull_channel(struct dpaa2_io *d, u32 channelid,
|
||||
struct dpaa2_io_store *s);
|
||||
|
||||
int dpaa2_io_service_enqueue_fq(struct dpaa2_io *d, u32 fqid,
|
||||
const struct dpaa2_fd *fd);
|
||||
int dpaa2_io_service_enqueue_qd(struct dpaa2_io *d, u32 qdid, u8 prio,
|
||||
u16 qdbin, const struct dpaa2_fd *fd);
|
||||
int dpaa2_io_service_release(struct dpaa2_io *d, u32 bpid,
|
||||
|
@@ -29,6 +29,7 @@ enum {
|
||||
CRYPTO_MSG_UPDATEALG,
|
||||
CRYPTO_MSG_GETALG,
|
||||
CRYPTO_MSG_DELRNG,
|
||||
CRYPTO_MSG_GETSTAT,
|
||||
__CRYPTO_MSG_MAX
|
||||
};
|
||||
#define CRYPTO_MSG_MAX (__CRYPTO_MSG_MAX - 1)
|
||||
@@ -50,6 +51,16 @@ enum crypto_attr_type_t {
|
||||
CRYPTOCFGA_REPORT_AKCIPHER, /* struct crypto_report_akcipher */
|
||||
CRYPTOCFGA_REPORT_KPP, /* struct crypto_report_kpp */
|
||||
CRYPTOCFGA_REPORT_ACOMP, /* struct crypto_report_acomp */
|
||||
CRYPTOCFGA_STAT_LARVAL, /* struct crypto_stat */
|
||||
CRYPTOCFGA_STAT_HASH, /* struct crypto_stat */
|
||||
CRYPTOCFGA_STAT_BLKCIPHER, /* struct crypto_stat */
|
||||
CRYPTOCFGA_STAT_AEAD, /* struct crypto_stat */
|
||||
CRYPTOCFGA_STAT_COMPRESS, /* struct crypto_stat */
|
||||
CRYPTOCFGA_STAT_RNG, /* struct crypto_stat */
|
||||
CRYPTOCFGA_STAT_CIPHER, /* struct crypto_stat */
|
||||
CRYPTOCFGA_STAT_AKCIPHER, /* struct crypto_stat */
|
||||
CRYPTOCFGA_STAT_KPP, /* struct crypto_stat */
|
||||
CRYPTOCFGA_STAT_ACOMP, /* struct crypto_stat */
|
||||
__CRYPTOCFGA_MAX
|
||||
|
||||
#define CRYPTOCFGA_MAX (__CRYPTOCFGA_MAX - 1)
|
||||
@@ -65,6 +76,47 @@ struct crypto_user_alg {
|
||||
__u32 cru_flags;
|
||||
};
|
||||
|
||||
struct crypto_stat {
|
||||
char type[CRYPTO_MAX_NAME];
|
||||
union {
|
||||
__u32 stat_encrypt_cnt;
|
||||
__u32 stat_compress_cnt;
|
||||
__u32 stat_generate_cnt;
|
||||
__u32 stat_hash_cnt;
|
||||
__u32 stat_setsecret_cnt;
|
||||
};
|
||||
union {
|
||||
__u64 stat_encrypt_tlen;
|
||||
__u64 stat_compress_tlen;
|
||||
__u64 stat_generate_tlen;
|
||||
__u64 stat_hash_tlen;
|
||||
};
|
||||
union {
|
||||
__u32 stat_akcipher_err_cnt;
|
||||
__u32 stat_cipher_err_cnt;
|
||||
__u32 stat_compress_err_cnt;
|
||||
__u32 stat_aead_err_cnt;
|
||||
__u32 stat_hash_err_cnt;
|
||||
__u32 stat_rng_err_cnt;
|
||||
__u32 stat_kpp_err_cnt;
|
||||
};
|
||||
union {
|
||||
__u32 stat_decrypt_cnt;
|
||||
__u32 stat_decompress_cnt;
|
||||
__u32 stat_seed_cnt;
|
||||
__u32 stat_generate_public_key_cnt;
|
||||
};
|
||||
union {
|
||||
__u64 stat_decrypt_tlen;
|
||||
__u64 stat_decompress_tlen;
|
||||
};
|
||||
union {
|
||||
__u32 stat_verify_cnt;
|
||||
__u32 stat_compute_shared_secret_cnt;
|
||||
};
|
||||
__u32 stat_sign_cnt;
|
||||
};
|
||||
|
||||
struct crypto_report_larval {
|
||||
char type[CRYPTO_MAX_NAME];
|
||||
};
|
||||
|
@@ -279,8 +279,8 @@ struct fsxattr {
|
||||
#define FS_ENCRYPTION_MODE_AES_256_CTS 4
|
||||
#define FS_ENCRYPTION_MODE_AES_128_CBC 5
|
||||
#define FS_ENCRYPTION_MODE_AES_128_CTS 6
|
||||
#define FS_ENCRYPTION_MODE_SPECK128_256_XTS 7
|
||||
#define FS_ENCRYPTION_MODE_SPECK128_256_CTS 8
|
||||
#define FS_ENCRYPTION_MODE_SPECK128_256_XTS 7 /* Removed, do not use. */
|
||||
#define FS_ENCRYPTION_MODE_SPECK128_256_CTS 8 /* Removed, do not use. */
|
||||
|
||||
struct fscrypt_policy {
|
||||
__u8 version;
|
||||
|
Reference in New Issue
Block a user