/* * Cryptographic API for algorithms (i.e., low-level API). * * Copyright (c) 2006 Herbert Xu * * 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_ALGAPI_H #define _CRYPTO_ALGAPI_H #include struct module; struct crypto_instance { struct crypto_alg alg; struct crypto_template *tmpl; struct hlist_node list; void *__ctx[] CRYPTO_MINALIGN_ATTR; }; struct crypto_template { struct list_head list; struct hlist_head instances; struct module *module; struct crypto_instance *(*alloc)(void *param, unsigned int len); void (*free)(struct crypto_instance *inst); char name[CRYPTO_MAX_ALG_NAME]; }; struct crypto_spawn { struct list_head list; struct crypto_alg *alg; struct crypto_instance *inst; }; int crypto_register_template(struct crypto_template *tmpl); void crypto_unregister_template(struct crypto_template *tmpl); struct crypto_template *crypto_lookup_template(const char *name); int crypto_init_spawn(struct crypto_spawn *spawn, struct crypto_alg *alg, struct crypto_instance *inst); void crypto_drop_spawn(struct crypto_spawn *spawn); struct crypto_tfm *crypto_spawn_tfm(struct crypto_spawn *spawn); struct crypto_alg *crypto_get_attr_alg(void *param, unsigned int len, u32 type, u32 mask); struct crypto_instance *crypto_alloc_instance(const char *name, struct crypto_alg *alg); static inline void *crypto_instance_ctx(struct crypto_instance *inst) { return inst->__ctx; } #endif /* _CRYPTO_ALGAPI_H */