brintos

brintos / linux-shallow public Read only

0
0
Text · 4.0 KiB · 28a95eb Raw
169 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * AEAD: Authenticated Encryption with Associated Data4 * 5 * Copyright (c) 2007-2015 Herbert Xu <herbert@gondor.apana.org.au>6 */7 8#ifndef _CRYPTO_INTERNAL_AEAD_H9#define _CRYPTO_INTERNAL_AEAD_H10 11#include <crypto/aead.h>12#include <crypto/algapi.h>13#include <linux/stddef.h>14#include <linux/types.h>15 16struct rtattr;17 18struct aead_instance {19	void (*free)(struct aead_instance *inst);20	union {21		struct {22			char head[offsetof(struct aead_alg, base)];23			struct crypto_instance base;24		} s;25		struct aead_alg alg;26	};27};28 29struct crypto_aead_spawn {30	struct crypto_spawn base;31};32 33struct aead_queue {34	struct crypto_queue base;35};36 37static inline void *crypto_aead_ctx(struct crypto_aead *tfm)38{39	return crypto_tfm_ctx(&tfm->base);40}41 42static inline void *crypto_aead_ctx_dma(struct crypto_aead *tfm)43{44	return crypto_tfm_ctx_dma(&tfm->base);45}46 47static inline struct crypto_instance *aead_crypto_instance(48	struct aead_instance *inst)49{50	return container_of(&inst->alg.base, struct crypto_instance, alg);51}52 53static inline struct aead_instance *aead_instance(struct crypto_instance *inst)54{55	return container_of(&inst->alg, struct aead_instance, alg.base);56}57 58static inline struct aead_instance *aead_alg_instance(struct crypto_aead *aead)59{60	return aead_instance(crypto_tfm_alg_instance(&aead->base));61}62 63static inline void *aead_instance_ctx(struct aead_instance *inst)64{65	return crypto_instance_ctx(aead_crypto_instance(inst));66}67 68static inline void *aead_request_ctx(struct aead_request *req)69{70	return req->__ctx;71}72 73static inline void *aead_request_ctx_dma(struct aead_request *req)74{75	unsigned int align = crypto_dma_align();76 77	if (align <= crypto_tfm_ctx_alignment())78		align = 1;79 80	return PTR_ALIGN(aead_request_ctx(req), align);81}82 83static inline void aead_request_complete(struct aead_request *req, int err)84{85	crypto_request_complete(&req->base, err);86}87 88static inline u32 aead_request_flags(struct aead_request *req)89{90	return req->base.flags;91}92 93static inline struct aead_request *aead_request_cast(94	struct crypto_async_request *req)95{96	return container_of(req, struct aead_request, base);97}98 99int crypto_grab_aead(struct crypto_aead_spawn *spawn,100		     struct crypto_instance *inst,101		     const char *name, u32 type, u32 mask);102 103static inline void crypto_drop_aead(struct crypto_aead_spawn *spawn)104{105	crypto_drop_spawn(&spawn->base);106}107 108static inline struct aead_alg *crypto_spawn_aead_alg(109	struct crypto_aead_spawn *spawn)110{111	return container_of(spawn->base.alg, struct aead_alg, base);112}113 114static inline struct crypto_aead *crypto_spawn_aead(115	struct crypto_aead_spawn *spawn)116{117	return crypto_spawn_tfm2(&spawn->base);118}119 120static inline void crypto_aead_set_reqsize(struct crypto_aead *aead,121					   unsigned int reqsize)122{123	aead->reqsize = reqsize;124}125 126static inline void crypto_aead_set_reqsize_dma(struct crypto_aead *aead,127					       unsigned int reqsize)128{129	reqsize += crypto_dma_align() & ~(crypto_tfm_ctx_alignment() - 1);130	aead->reqsize = reqsize;131}132 133static inline void aead_init_queue(struct aead_queue *queue,134				   unsigned int max_qlen)135{136	crypto_init_queue(&queue->base, max_qlen);137}138 139static inline unsigned int crypto_aead_alg_chunksize(struct aead_alg *alg)140{141	return alg->chunksize;142}143 144/**145 * crypto_aead_chunksize() - obtain chunk size146 * @tfm: cipher handle147 *148 * The block size is set to one for ciphers such as CCM.  However,149 * you still need to provide incremental updates in multiples of150 * the underlying block size as the IV does not have sub-block151 * granularity.  This is known in this API as the chunk size.152 *153 * Return: chunk size in bytes154 */155static inline unsigned int crypto_aead_chunksize(struct crypto_aead *tfm)156{157	return crypto_aead_alg_chunksize(crypto_aead_alg(tfm));158}159 160int crypto_register_aead(struct aead_alg *alg);161void crypto_unregister_aead(struct aead_alg *alg);162int crypto_register_aeads(struct aead_alg *algs, int count);163void crypto_unregister_aeads(struct aead_alg *algs, int count);164int aead_register_instance(struct crypto_template *tmpl,165			   struct aead_instance *inst);166 167#endif	/* _CRYPTO_INTERNAL_AEAD_H */168 169