2007-12-17 20:07:31 +08:00
/*
* Symmetric key ciphers .
*
* Copyright ( c ) 2007 Herbert Xu < herbert @ gondor . apana . org . au >
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation ; either version 2 of the License , or ( at your option )
* any later version .
*
*/
# ifndef _CRYPTO_INTERNAL_SKCIPHER_H
# define _CRYPTO_INTERNAL_SKCIPHER_H
# include <crypto/algapi.h>
2007-12-17 21:51:27 +08:00
# include <crypto/skcipher.h>
2007-12-05 21:08:36 +11:00
# include <linux/types.h>
struct rtattr ;
2007-12-17 20:07:31 +08:00
struct crypto_skcipher_spawn {
struct crypto_spawn base ;
} ;
2007-12-17 21:51:27 +08:00
extern const struct crypto_type crypto_givcipher_type ;
2007-12-17 20:07:31 +08:00
static inline void crypto_set_skcipher_spawn (
struct crypto_skcipher_spawn * spawn , struct crypto_instance * inst )
{
crypto_set_spawn ( & spawn - > base , inst ) ;
}
int crypto_grab_skcipher ( struct crypto_skcipher_spawn * spawn , const char * name ,
u32 type , u32 mask ) ;
2012-03-29 09:03:47 +02:00
struct crypto_alg * crypto_lookup_skcipher ( const char * name , u32 type , u32 mask ) ;
2007-12-17 20:07:31 +08:00
static inline void crypto_drop_skcipher ( struct crypto_skcipher_spawn * spawn )
{
crypto_drop_spawn ( & spawn - > base ) ;
}
static inline struct crypto_alg * crypto_skcipher_spawn_alg (
struct crypto_skcipher_spawn * spawn )
{
return spawn - > base . alg ;
}
static inline struct crypto_ablkcipher * crypto_spawn_skcipher (
struct crypto_skcipher_spawn * spawn )
{
return __crypto_ablkcipher_cast (
crypto_spawn_tfm ( & spawn - > base , crypto_skcipher_type ( 0 ) ,
crypto_skcipher_mask ( 0 ) ) ) ;
}
2007-12-04 12:46:48 +11:00
int skcipher_null_givencrypt ( struct skcipher_givcrypt_request * req ) ;
int skcipher_null_givdecrypt ( struct skcipher_givcrypt_request * req ) ;
2007-12-05 21:08:36 +11:00
const char * crypto_default_geniv ( const struct crypto_alg * alg ) ;
struct crypto_instance * skcipher_geniv_alloc ( struct crypto_template * tmpl ,
struct rtattr * * tb , u32 type ,
u32 mask ) ;
void skcipher_geniv_free ( struct crypto_instance * inst ) ;
int skcipher_geniv_init ( struct crypto_tfm * tfm ) ;
void skcipher_geniv_exit ( struct crypto_tfm * tfm ) ;
static inline struct crypto_ablkcipher * skcipher_geniv_cipher (
struct crypto_ablkcipher * geniv )
{
return crypto_ablkcipher_crt ( geniv ) - > base ;
}
2007-12-14 22:28:14 +08:00
static inline int skcipher_enqueue_givcrypt (
struct crypto_queue * queue , struct skcipher_givcrypt_request * request )
{
return ablkcipher_enqueue_request ( queue , & request - > creq ) ;
}
static inline struct skcipher_givcrypt_request * skcipher_dequeue_givcrypt (
struct crypto_queue * queue )
{
2014-05-26 18:51:48 +02:00
return skcipher_givcrypt_cast ( crypto_dequeue_request ( queue ) ) ;
2007-12-14 22:28:14 +08:00
}
2007-12-17 21:51:27 +08:00
static inline void * skcipher_givcrypt_reqctx (
struct skcipher_givcrypt_request * req )
{
return ablkcipher_request_ctx ( & req - > creq ) ;
}
2007-11-30 20:17:28 +11:00
static inline void ablkcipher_request_complete ( struct ablkcipher_request * req ,
int err )
{
req - > base . complete ( & req - > base , err ) ;
}
static inline void skcipher_givcrypt_complete (
struct skcipher_givcrypt_request * req , int err )
{
ablkcipher_request_complete ( & req - > creq , err ) ;
}
2007-12-13 22:28:59 +08:00
static inline u32 ablkcipher_request_flags ( struct ablkcipher_request * req )
{
return req - > base . flags ;
}
2015-08-20 15:21:45 +08:00
static inline void * crypto_skcipher_ctx ( struct crypto_skcipher * tfm )
{
return crypto_tfm_ctx ( & tfm - > base ) ;
}
static inline void * skcipher_request_ctx ( struct skcipher_request * req )
{
return req - > __ctx ;
}
static inline u32 skcipher_request_flags ( struct skcipher_request * req )
{
return req - > base . flags ;
}
2007-12-17 20:07:31 +08:00
# endif /* _CRYPTO_INTERNAL_SKCIPHER_H */