crypto: shash - Add shash_instance
This patch adds shash_instance and the associated alloc/free functions. This is meant to be an instance that with a shash algorithm under it. Note that the instance itself doesn't have to be shash. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
		
							parent
							
								
									70ec7bb91a
								
							
						
					
					
						commit
						2e4fddd8e4
					
				| @ -502,5 +502,12 @@ int crypto_unregister_shash(struct shash_alg *alg) | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(crypto_unregister_shash); | ||||
| 
 | ||||
| void shash_free_instance(struct crypto_instance *inst) | ||||
| { | ||||
| 	crypto_drop_spawn(crypto_instance_ctx(inst)); | ||||
| 	kfree(shash_instance(inst)); | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(shash_free_instance); | ||||
| 
 | ||||
| MODULE_LICENSE("GPL"); | ||||
| MODULE_DESCRIPTION("Synchronous cryptographic hash type"); | ||||
|  | ||||
| @ -34,6 +34,10 @@ struct crypto_hash_walk { | ||||
| 	unsigned int flags; | ||||
| }; | ||||
| 
 | ||||
| struct shash_instance { | ||||
| 	struct shash_alg alg; | ||||
| }; | ||||
| 
 | ||||
| extern const struct crypto_type crypto_ahash_type; | ||||
| 
 | ||||
| int crypto_hash_walk_done(struct crypto_hash_walk *walk, int err); | ||||
| @ -46,6 +50,8 @@ int crypto_hash_walk_first_compat(struct hash_desc *hdesc, | ||||
| int crypto_register_shash(struct shash_alg *alg); | ||||
| int crypto_unregister_shash(struct shash_alg *alg); | ||||
| 
 | ||||
| void shash_free_instance(struct crypto_instance *inst); | ||||
| 
 | ||||
| static inline void *crypto_ahash_ctx(struct crypto_ahash *tfm) | ||||
| { | ||||
| 	return crypto_tfm_ctx(&tfm->base); | ||||
| @ -80,5 +86,25 @@ static inline void *crypto_shash_ctx(struct crypto_shash *tfm) | ||||
| 	return crypto_tfm_ctx(&tfm->base); | ||||
| } | ||||
| 
 | ||||
| static inline struct crypto_instance *shash_crypto_instance( | ||||
| 	struct shash_instance *inst) | ||||
| { | ||||
| 	return container_of(&inst->alg.base, struct crypto_instance, alg); | ||||
| } | ||||
| 
 | ||||
| static inline struct shash_instance *shash_instance( | ||||
| 	struct crypto_instance *inst) | ||||
| { | ||||
| 	return container_of(__crypto_shash_alg(&inst->alg), | ||||
| 			    struct shash_instance, alg); | ||||
| } | ||||
| 
 | ||||
| static inline struct shash_instance *shash_alloc_instance( | ||||
| 	const char *name, struct crypto_alg *alg) | ||||
| { | ||||
| 	return crypto_alloc_instance2(name, alg, | ||||
| 				      sizeof(struct shash_alg) - sizeof(*alg)); | ||||
| } | ||||
| 
 | ||||
| #endif	/* _CRYPTO_INTERNAL_HASH_H */ | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user