Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.19-rc4 211 lines 5.3 kB view raw
1/* 2 * Symmetric key ciphers. 3 * 4 * Copyright (c) 2007 Herbert Xu <herbert@gondor.apana.org.au> 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License as published by the Free 8 * Software Foundation; either version 2 of the License, or (at your option) 9 * any later version. 10 * 11 */ 12 13#ifndef _CRYPTO_INTERNAL_SKCIPHER_H 14#define _CRYPTO_INTERNAL_SKCIPHER_H 15 16#include <crypto/algapi.h> 17#include <crypto/skcipher.h> 18#include <linux/list.h> 19#include <linux/types.h> 20 21struct aead_request; 22struct rtattr; 23 24struct skcipher_instance { 25 void (*free)(struct skcipher_instance *inst); 26 union { 27 struct { 28 char head[offsetof(struct skcipher_alg, base)]; 29 struct crypto_instance base; 30 } s; 31 struct skcipher_alg alg; 32 }; 33}; 34 35struct crypto_skcipher_spawn { 36 struct crypto_spawn base; 37}; 38 39struct skcipher_walk { 40 union { 41 struct { 42 struct page *page; 43 unsigned long offset; 44 } phys; 45 46 struct { 47 u8 *page; 48 void *addr; 49 } virt; 50 } src, dst; 51 52 struct scatter_walk in; 53 unsigned int nbytes; 54 55 struct scatter_walk out; 56 unsigned int total; 57 58 struct list_head buffers; 59 60 u8 *page; 61 u8 *buffer; 62 u8 *oiv; 63 void *iv; 64 65 unsigned int ivsize; 66 67 int flags; 68 unsigned int blocksize; 69 unsigned int stride; 70 unsigned int alignmask; 71}; 72 73extern const struct crypto_type crypto_givcipher_type; 74 75static inline struct crypto_instance *skcipher_crypto_instance( 76 struct skcipher_instance *inst) 77{ 78 return &inst->s.base; 79} 80 81static inline struct skcipher_instance *skcipher_alg_instance( 82 struct crypto_skcipher *skcipher) 83{ 84 return container_of(crypto_skcipher_alg(skcipher), 85 struct skcipher_instance, alg); 86} 87 88static inline void *skcipher_instance_ctx(struct skcipher_instance *inst) 89{ 90 return crypto_instance_ctx(skcipher_crypto_instance(inst)); 91} 92 93static inline void skcipher_request_complete(struct skcipher_request *req, int err) 94{ 95 req->base.complete(&req->base, err); 96} 97 98static inline void crypto_set_skcipher_spawn( 99 struct crypto_skcipher_spawn *spawn, struct crypto_instance *inst) 100{ 101 crypto_set_spawn(&spawn->base, inst); 102} 103 104int crypto_grab_skcipher(struct crypto_skcipher_spawn *spawn, const char *name, 105 u32 type, u32 mask); 106 107static inline void crypto_drop_skcipher(struct crypto_skcipher_spawn *spawn) 108{ 109 crypto_drop_spawn(&spawn->base); 110} 111 112static inline struct skcipher_alg *crypto_skcipher_spawn_alg( 113 struct crypto_skcipher_spawn *spawn) 114{ 115 return container_of(spawn->base.alg, struct skcipher_alg, base); 116} 117 118static inline struct skcipher_alg *crypto_spawn_skcipher_alg( 119 struct crypto_skcipher_spawn *spawn) 120{ 121 return crypto_skcipher_spawn_alg(spawn); 122} 123 124static inline struct crypto_skcipher *crypto_spawn_skcipher( 125 struct crypto_skcipher_spawn *spawn) 126{ 127 return crypto_spawn_tfm2(&spawn->base); 128} 129 130static inline void crypto_skcipher_set_reqsize( 131 struct crypto_skcipher *skcipher, unsigned int reqsize) 132{ 133 skcipher->reqsize = reqsize; 134} 135 136int crypto_register_skcipher(struct skcipher_alg *alg); 137void crypto_unregister_skcipher(struct skcipher_alg *alg); 138int crypto_register_skciphers(struct skcipher_alg *algs, int count); 139void crypto_unregister_skciphers(struct skcipher_alg *algs, int count); 140int skcipher_register_instance(struct crypto_template *tmpl, 141 struct skcipher_instance *inst); 142 143int skcipher_walk_done(struct skcipher_walk *walk, int err); 144int skcipher_walk_virt(struct skcipher_walk *walk, 145 struct skcipher_request *req, 146 bool atomic); 147void skcipher_walk_atomise(struct skcipher_walk *walk); 148int skcipher_walk_async(struct skcipher_walk *walk, 149 struct skcipher_request *req); 150int skcipher_walk_aead(struct skcipher_walk *walk, struct aead_request *req, 151 bool atomic); 152int skcipher_walk_aead_encrypt(struct skcipher_walk *walk, 153 struct aead_request *req, bool atomic); 154int skcipher_walk_aead_decrypt(struct skcipher_walk *walk, 155 struct aead_request *req, bool atomic); 156void skcipher_walk_complete(struct skcipher_walk *walk, int err); 157 158static inline void ablkcipher_request_complete(struct ablkcipher_request *req, 159 int err) 160{ 161 req->base.complete(&req->base, err); 162} 163 164static inline u32 ablkcipher_request_flags(struct ablkcipher_request *req) 165{ 166 return req->base.flags; 167} 168 169static inline void *crypto_skcipher_ctx(struct crypto_skcipher *tfm) 170{ 171 return crypto_tfm_ctx(&tfm->base); 172} 173 174static inline void *skcipher_request_ctx(struct skcipher_request *req) 175{ 176 return req->__ctx; 177} 178 179static inline u32 skcipher_request_flags(struct skcipher_request *req) 180{ 181 return req->base.flags; 182} 183 184static inline unsigned int crypto_skcipher_alg_min_keysize( 185 struct skcipher_alg *alg) 186{ 187 if ((alg->base.cra_flags & CRYPTO_ALG_TYPE_MASK) == 188 CRYPTO_ALG_TYPE_BLKCIPHER) 189 return alg->base.cra_blkcipher.min_keysize; 190 191 if (alg->base.cra_ablkcipher.encrypt) 192 return alg->base.cra_ablkcipher.min_keysize; 193 194 return alg->min_keysize; 195} 196 197static inline unsigned int crypto_skcipher_alg_max_keysize( 198 struct skcipher_alg *alg) 199{ 200 if ((alg->base.cra_flags & CRYPTO_ALG_TYPE_MASK) == 201 CRYPTO_ALG_TYPE_BLKCIPHER) 202 return alg->base.cra_blkcipher.max_keysize; 203 204 if (alg->base.cra_ablkcipher.encrypt) 205 return alg->base.cra_ablkcipher.max_keysize; 206 207 return alg->max_keysize; 208} 209 210#endif /* _CRYPTO_INTERNAL_SKCIPHER_H */ 211