Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto updates from Herbert Xu: "API: - Enforce the setting of keys for keyed aead/hash/skcipher algorithms. - Add multibuf speed tests in tcrypt. Algorithms: - Improve performance of sha3-generic. - Add native sha512 support on arm64. - Add v8.2 Crypto Extentions version of sha3/sm3 on arm64. - Avoid hmac nesting by requiring underlying algorithm to be unkeyed. - Add cryptd_max_cpu_qlen module parameter to cryptd. Drivers: - Add support for EIP97 engine in inside-secure. - Add inline IPsec support to chelsio. - Add RevB core support to crypto4xx. - Fix AEAD ICV check in crypto4xx. - Add stm32 crypto driver. - Add support for BCM63xx platforms in bcm2835 and remove bcm63xx. - Add Derived Key Protocol (DKP) support in caam. - Add Samsung Exynos True RNG driver. - Add support for Exynos5250+ SoCs in exynos PRNG driver" * 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (166 commits) crypto: picoxcell - Fix error handling in spacc_probe() crypto: arm64/sha512 - fix/improve new v8.2 Crypto Extensions code crypto: arm64/sm3 - new v8.2 Crypto Extensions implementation crypto: arm64/sha3 - new v8.2 Crypto Extensions implementation crypto: testmgr - add new testcases for sha3 crypto: sha3-generic - export init/update/final routines crypto: sha3-generic - simplify code crypto: sha3-generic - rewrite KECCAK transform to help the compiler optimize crypto: sha3-generic - fixes for alignment and big endian operation crypto: aesni - handle zero length dst buffer crypto: artpec6 - remove select on non-existing CRYPTO_SHA384 hwrng: bcm2835 - Remove redundant dev_err call in bcm2835_rng_probe() crypto: stm32 - remove redundant dev_err call in stm32_cryp_probe() crypto: axis - remove unnecessary platform_get_resource() error check crypto: testmgr - test misuse of result in ahash crypto: inside-secure - make function safexcel_try_push_requests static crypto: aes-generic - fix aes-generic regression on powerpc crypto: chelsio - Fix indentation warning crypto: arm64/sha1-ce - get rid of literal pool crypto: arm64/sha2-ce - move the round constant table to .rodata section ...
This commit is contained in:
@@ -327,7 +327,12 @@ static inline struct crypto_aead *crypto_aead_reqtfm(struct aead_request *req)
|
||||
*/
|
||||
static inline int crypto_aead_encrypt(struct aead_request *req)
|
||||
{
|
||||
return crypto_aead_alg(crypto_aead_reqtfm(req))->encrypt(req);
|
||||
struct crypto_aead *aead = crypto_aead_reqtfm(req);
|
||||
|
||||
if (crypto_aead_get_flags(aead) & CRYPTO_TFM_NEED_KEY)
|
||||
return -ENOKEY;
|
||||
|
||||
return crypto_aead_alg(aead)->encrypt(req);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -356,6 +361,9 @@ static inline int crypto_aead_decrypt(struct aead_request *req)
|
||||
{
|
||||
struct crypto_aead *aead = crypto_aead_reqtfm(req);
|
||||
|
||||
if (crypto_aead_get_flags(aead) & CRYPTO_TFM_NEED_KEY)
|
||||
return -ENOKEY;
|
||||
|
||||
if (req->cryptlen < crypto_aead_authsize(aead))
|
||||
return -EINVAL;
|
||||
|
||||
|
@@ -13,12 +13,13 @@
|
||||
#define CHACHA20_IV_SIZE 16
|
||||
#define CHACHA20_KEY_SIZE 32
|
||||
#define CHACHA20_BLOCK_SIZE 64
|
||||
#define CHACHA20_BLOCK_WORDS (CHACHA20_BLOCK_SIZE / sizeof(u32))
|
||||
|
||||
struct chacha20_ctx {
|
||||
u32 key[8];
|
||||
};
|
||||
|
||||
void chacha20_block(u32 *state, void *stream);
|
||||
void chacha20_block(u32 *state, u32 *stream);
|
||||
void crypto_chacha20_init(u32 *state, struct chacha20_ctx *ctx, u8 *iv);
|
||||
int crypto_chacha20_setkey(struct crypto_skcipher *tfm, const u8 *key,
|
||||
unsigned int keysize);
|
||||
|
@@ -71,12 +71,11 @@ struct ahash_request {
|
||||
|
||||
/**
|
||||
* struct ahash_alg - asynchronous message digest definition
|
||||
* @init: Initialize the transformation context. Intended only to initialize the
|
||||
* @init: **[mandatory]** Initialize the transformation context. Intended only to initialize the
|
||||
* state of the HASH transformation at the beginning. This shall fill in
|
||||
* the internal structures used during the entire duration of the whole
|
||||
* transformation. No data processing happens at this point.
|
||||
* Note: mandatory.
|
||||
* @update: Push a chunk of data into the driver for transformation. This
|
||||
* @update: **[mandatory]** Push a chunk of data into the driver for transformation. This
|
||||
* function actually pushes blocks of data from upper layers into the
|
||||
* driver, which then passes those to the hardware as seen fit. This
|
||||
* function must not finalize the HASH transformation by calculating the
|
||||
@@ -85,20 +84,17 @@ struct ahash_request {
|
||||
* context, as this function may be called in parallel with the same
|
||||
* transformation object. Data processing can happen synchronously
|
||||
* [SHASH] or asynchronously [AHASH] at this point.
|
||||
* Note: mandatory.
|
||||
* @final: Retrieve result from the driver. This function finalizes the
|
||||
* @final: **[mandatory]** Retrieve result from the driver. This function finalizes the
|
||||
* transformation and retrieves the resulting hash from the driver and
|
||||
* pushes it back to upper layers. No data processing happens at this
|
||||
* point unless hardware requires it to finish the transformation
|
||||
* (then the data buffered by the device driver is processed).
|
||||
* Note: mandatory.
|
||||
* @finup: Combination of @update and @final. This function is effectively a
|
||||
* @finup: **[optional]** Combination of @update and @final. This function is effectively a
|
||||
* combination of @update and @final calls issued in sequence. As some
|
||||
* hardware cannot do @update and @final separately, this callback was
|
||||
* added to allow such hardware to be used at least by IPsec. Data
|
||||
* processing can happen synchronously [SHASH] or asynchronously [AHASH]
|
||||
* at this point.
|
||||
* Note: optional.
|
||||
* @digest: Combination of @init and @update and @final. This function
|
||||
* effectively behaves as the entire chain of operations, @init,
|
||||
* @update and @final issued in sequence. Just like @finup, this was
|
||||
@@ -210,7 +206,6 @@ struct crypto_ahash {
|
||||
unsigned int keylen);
|
||||
|
||||
unsigned int reqsize;
|
||||
bool has_setkey;
|
||||
struct crypto_tfm base;
|
||||
};
|
||||
|
||||
@@ -410,11 +405,6 @@ static inline void *ahash_request_ctx(struct ahash_request *req)
|
||||
int crypto_ahash_setkey(struct crypto_ahash *tfm, const u8 *key,
|
||||
unsigned int keylen);
|
||||
|
||||
static inline bool crypto_ahash_has_setkey(struct crypto_ahash *tfm)
|
||||
{
|
||||
return tfm->has_setkey;
|
||||
}
|
||||
|
||||
/**
|
||||
* crypto_ahash_finup() - update and finalize message digest
|
||||
* @req: reference to the ahash_request handle that holds all information
|
||||
@@ -487,7 +477,12 @@ static inline int crypto_ahash_export(struct ahash_request *req, void *out)
|
||||
*/
|
||||
static inline int crypto_ahash_import(struct ahash_request *req, const void *in)
|
||||
{
|
||||
return crypto_ahash_reqtfm(req)->import(req, in);
|
||||
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
|
||||
|
||||
if (crypto_ahash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)
|
||||
return -ENOKEY;
|
||||
|
||||
return tfm->import(req, in);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -503,7 +498,12 @@ static inline int crypto_ahash_import(struct ahash_request *req, const void *in)
|
||||
*/
|
||||
static inline int crypto_ahash_init(struct ahash_request *req)
|
||||
{
|
||||
return crypto_ahash_reqtfm(req)->init(req);
|
||||
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
|
||||
|
||||
if (crypto_ahash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)
|
||||
return -ENOKEY;
|
||||
|
||||
return tfm->init(req);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -855,7 +855,12 @@ static inline int crypto_shash_export(struct shash_desc *desc, void *out)
|
||||
*/
|
||||
static inline int crypto_shash_import(struct shash_desc *desc, const void *in)
|
||||
{
|
||||
return crypto_shash_alg(desc->tfm)->import(desc, in);
|
||||
struct crypto_shash *tfm = desc->tfm;
|
||||
|
||||
if (crypto_shash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)
|
||||
return -ENOKEY;
|
||||
|
||||
return crypto_shash_alg(tfm)->import(desc, in);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -871,7 +876,12 @@ static inline int crypto_shash_import(struct shash_desc *desc, const void *in)
|
||||
*/
|
||||
static inline int crypto_shash_init(struct shash_desc *desc)
|
||||
{
|
||||
return crypto_shash_alg(desc->tfm)->init(desc);
|
||||
struct crypto_shash *tfm = desc->tfm;
|
||||
|
||||
if (crypto_shash_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)
|
||||
return -ENOKEY;
|
||||
|
||||
return crypto_shash_alg(tfm)->init(desc);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -90,6 +90,8 @@ static inline bool crypto_shash_alg_has_setkey(struct shash_alg *alg)
|
||||
return alg->setkey != shash_no_setkey;
|
||||
}
|
||||
|
||||
bool crypto_hash_alg_has_setkey(struct hash_alg_common *halg);
|
||||
|
||||
int crypto_init_ahash_spawn(struct crypto_ahash_spawn *spawn,
|
||||
struct hash_alg_common *alg,
|
||||
struct crypto_instance *inst);
|
||||
|
@@ -28,17 +28,6 @@ struct crypto_scomp {
|
||||
* @free_ctx: Function frees context allocated with alloc_ctx
|
||||
* @compress: Function performs a compress operation
|
||||
* @decompress: Function performs a de-compress operation
|
||||
* @init: Initialize the cryptographic transformation object.
|
||||
* This function is used to initialize the cryptographic
|
||||
* transformation object. This function is called only once at
|
||||
* the instantiation time, right after the transformation context
|
||||
* was allocated. In case the cryptographic hardware has some
|
||||
* special requirements which need to be handled by software, this
|
||||
* function shall check for the precise requirement of the
|
||||
* transformation and put any software fallbacks in place.
|
||||
* @exit: Deinitialize the cryptographic transformation object. This is a
|
||||
* counterpart to @init, used to remove various changes set in
|
||||
* @init.
|
||||
* @base: Common crypto API algorithm data structure
|
||||
*/
|
||||
struct scomp_alg {
|
||||
|
@@ -12,14 +12,4 @@
|
||||
struct crypto_skcipher *crypto_get_default_null_skcipher(void);
|
||||
void crypto_put_default_null_skcipher(void);
|
||||
|
||||
static inline struct crypto_skcipher *crypto_get_default_null_skcipher2(void)
|
||||
{
|
||||
return crypto_get_default_null_skcipher();
|
||||
}
|
||||
|
||||
static inline void crypto_put_default_null_skcipher2(void)
|
||||
{
|
||||
crypto_put_default_null_skcipher();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -31,8 +31,6 @@ struct poly1305_desc_ctx {
|
||||
};
|
||||
|
||||
int crypto_poly1305_init(struct shash_desc *desc);
|
||||
int crypto_poly1305_setkey(struct crypto_shash *tfm,
|
||||
const u8 *key, unsigned int keylen);
|
||||
unsigned int crypto_poly1305_setdesckey(struct poly1305_desc_ctx *dctx,
|
||||
const u8 *src, unsigned int srclen);
|
||||
int crypto_poly1305_update(struct shash_desc *desc,
|
||||
|
27
include/crypto/salsa20.h
Normal file
27
include/crypto/salsa20.h
Normal file
@@ -0,0 +1,27 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Common values for the Salsa20 algorithm
|
||||
*/
|
||||
|
||||
#ifndef _CRYPTO_SALSA20_H
|
||||
#define _CRYPTO_SALSA20_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define SALSA20_IV_SIZE 8
|
||||
#define SALSA20_MIN_KEY_SIZE 16
|
||||
#define SALSA20_MAX_KEY_SIZE 32
|
||||
#define SALSA20_BLOCK_SIZE 64
|
||||
|
||||
struct crypto_skcipher;
|
||||
|
||||
struct salsa20_ctx {
|
||||
u32 initial_state[16];
|
||||
};
|
||||
|
||||
void crypto_salsa20_init(u32 *state, const struct salsa20_ctx *ctx,
|
||||
const u8 *iv);
|
||||
int crypto_salsa20_setkey(struct crypto_skcipher *tfm, const u8 *key,
|
||||
unsigned int keysize);
|
||||
|
||||
#endif /* _CRYPTO_SALSA20_H */
|
@@ -19,7 +19,6 @@
|
||||
|
||||
struct sha3_state {
|
||||
u64 st[25];
|
||||
unsigned int md_len;
|
||||
unsigned int rsiz;
|
||||
unsigned int rsizw;
|
||||
|
||||
@@ -27,4 +26,9 @@ struct sha3_state {
|
||||
u8 buf[SHA3_224_BLOCK_SIZE];
|
||||
};
|
||||
|
||||
int crypto_sha3_init(struct shash_desc *desc);
|
||||
int crypto_sha3_update(struct shash_desc *desc, const u8 *data,
|
||||
unsigned int len);
|
||||
int crypto_sha3_final(struct shash_desc *desc, u8 *out);
|
||||
|
||||
#endif
|
||||
|
@@ -401,11 +401,6 @@ static inline int crypto_skcipher_setkey(struct crypto_skcipher *tfm,
|
||||
return tfm->setkey(tfm, key, keylen);
|
||||
}
|
||||
|
||||
static inline bool crypto_skcipher_has_setkey(struct crypto_skcipher *tfm)
|
||||
{
|
||||
return tfm->keysize;
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_skcipher_default_keysize(
|
||||
struct crypto_skcipher *tfm)
|
||||
{
|
||||
@@ -442,6 +437,9 @@ static inline int crypto_skcipher_encrypt(struct skcipher_request *req)
|
||||
{
|
||||
struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
|
||||
|
||||
if (crypto_skcipher_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)
|
||||
return -ENOKEY;
|
||||
|
||||
return tfm->encrypt(req);
|
||||
}
|
||||
|
||||
@@ -460,6 +458,9 @@ static inline int crypto_skcipher_decrypt(struct skcipher_request *req)
|
||||
{
|
||||
struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
|
||||
|
||||
if (crypto_skcipher_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)
|
||||
return -ENOKEY;
|
||||
|
||||
return tfm->decrypt(req);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user