mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 15:03:52 +08:00
crypto: ahash - Add core export and import
Add crypto_ahash_export_core and crypto_ahash_import_core. For now they only differ from the normal export/import functions when going through shash. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
@@ -698,6 +698,16 @@ static int ahash_def_finup(struct ahash_request *req)
|
||||
return ahash_def_finup_finish1(req, err);
|
||||
}
|
||||
|
||||
int crypto_ahash_export_core(struct ahash_request *req, void *out)
|
||||
{
|
||||
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
|
||||
|
||||
if (likely(tfm->using_shash))
|
||||
return crypto_shash_export_core(ahash_request_ctx(req), out);
|
||||
return crypto_ahash_alg(tfm)->export(req, out);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(crypto_ahash_export_core);
|
||||
|
||||
int crypto_ahash_export(struct ahash_request *req, void *out)
|
||||
{
|
||||
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
|
||||
@@ -708,6 +718,19 @@ int crypto_ahash_export(struct ahash_request *req, void *out)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(crypto_ahash_export);
|
||||
|
||||
int crypto_ahash_import_core(struct ahash_request *req, const void *in)
|
||||
{
|
||||
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
|
||||
|
||||
if (likely(tfm->using_shash))
|
||||
return crypto_shash_import_core(prepare_shash_desc(req, tfm),
|
||||
in);
|
||||
if (crypto_ahash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)
|
||||
return -ENOKEY;
|
||||
return crypto_ahash_alg(tfm)->import(req, in);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(crypto_ahash_import_core);
|
||||
|
||||
int crypto_ahash_import(struct ahash_request *req, const void *in)
|
||||
{
|
||||
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
|
||||
@@ -716,7 +739,7 @@ int crypto_ahash_import(struct ahash_request *req, const void *in)
|
||||
return crypto_shash_import(prepare_shash_desc(req, tfm), in);
|
||||
if (crypto_ahash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)
|
||||
return -ENOKEY;
|
||||
return crypto_ahash_alg(tfm)->import(req, in);
|
||||
return crypto_ahash_import_core(req, in);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(crypto_ahash_import);
|
||||
|
||||
|
||||
@@ -506,6 +506,18 @@ int crypto_ahash_digest(struct ahash_request *req);
|
||||
*/
|
||||
int crypto_ahash_export(struct ahash_request *req, void *out);
|
||||
|
||||
/**
|
||||
* crypto_ahash_export_core() - extract core state for message digest
|
||||
* @req: reference to the ahash_request handle whose state is exported
|
||||
* @out: output buffer of sufficient size that can hold the hash state
|
||||
*
|
||||
* Export the hash state without the partial block buffer.
|
||||
*
|
||||
* Context: Softirq or process context.
|
||||
* Return: 0 if the export creation was successful; < 0 if an error occurred
|
||||
*/
|
||||
int crypto_ahash_export_core(struct ahash_request *req, void *out);
|
||||
|
||||
/**
|
||||
* crypto_ahash_import() - import message digest state
|
||||
* @req: reference to ahash_request handle the state is imported into
|
||||
@@ -519,6 +531,18 @@ int crypto_ahash_export(struct ahash_request *req, void *out);
|
||||
*/
|
||||
int crypto_ahash_import(struct ahash_request *req, const void *in);
|
||||
|
||||
/**
|
||||
* crypto_ahash_import_core() - import core state
|
||||
* @req: reference to ahash_request handle the state is imported into
|
||||
* @in: buffer holding the state
|
||||
*
|
||||
* Import the hash state without the partial block buffer.
|
||||
*
|
||||
* Context: Softirq or process context.
|
||||
* Return: 0 if the import was successful; < 0 if an error occurred
|
||||
*/
|
||||
int crypto_ahash_import_core(struct ahash_request *req, const void *in);
|
||||
|
||||
/**
|
||||
* crypto_ahash_init() - (re)initialize message digest handle
|
||||
* @req: ahash_request handle that already is initialized with all necessary
|
||||
|
||||
Reference in New Issue
Block a user