Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto update from Herbert Xu: "Here is the crypto update for 4.2: API: - Convert RNG interface to new style. - New AEAD interface with one SG list for AD and plain/cipher text. All external AEAD users have been converted. - New asymmetric key interface (akcipher). Algorithms: - Chacha20, Poly1305 and RFC7539 support. - New RSA implementation. - Jitter RNG. - DRBG is now seeded with both /dev/random and Jitter RNG. If kernel pool isn't ready then DRBG will be reseeded when it is. - DRBG is now the default crypto API RNG, replacing krng. - 842 compression (previously part of powerpc nx driver). Drivers: - Accelerated SHA-512 for arm64. - New Marvell CESA driver that supports DMA and more algorithms. - Updated powerpc nx 842 support. - Added support for SEC1 hardware to talitos" * git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (292 commits) crypto: marvell/cesa - remove COMPILE_TEST dependency crypto: algif_aead - Temporarily disable all AEAD algorithms crypto: af_alg - Forbid the use internal algorithms crypto: echainiv - Only hold RNG during initialisation crypto: seqiv - Add compatibility support without RNG crypto: eseqiv - Offer normal cipher functionality without RNG crypto: chainiv - Offer normal cipher functionality without RNG crypto: user - Add CRYPTO_MSG_DELRNG crypto: user - Move cryptouser.h to uapi crypto: rng - Do not free default RNG when it becomes unused crypto: skcipher - Allow givencrypt to be NULL crypto: sahara - propagate the error on clk_disable_unprepare() failure crypto: rsa - fix invalid select for AKCIPHER crypto: picoxcell - Update to the current clk API crypto: nx - Check for bogus firmware properties crypto: marvell/cesa - add DT bindings documentation crypto: marvell/cesa - add support for Kirkwood and Dove SoCs crypto: marvell/cesa - add support for Orion SoCs crypto: marvell/cesa - add allhwsupport module parameter crypto: marvell/cesa - add support for all armada SoCs ...
This commit is contained in:
@@ -31,6 +31,7 @@ static struct xfrm_algo_desc aead_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.aead = {
|
||||
.geniv = "seqniv",
|
||||
.icv_truncbits = 64,
|
||||
}
|
||||
},
|
||||
@@ -49,6 +50,7 @@ static struct xfrm_algo_desc aead_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.aead = {
|
||||
.geniv = "seqniv",
|
||||
.icv_truncbits = 96,
|
||||
}
|
||||
},
|
||||
@@ -67,6 +69,7 @@ static struct xfrm_algo_desc aead_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.aead = {
|
||||
.geniv = "seqniv",
|
||||
.icv_truncbits = 128,
|
||||
}
|
||||
},
|
||||
@@ -85,6 +88,7 @@ static struct xfrm_algo_desc aead_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.aead = {
|
||||
.geniv = "seqniv",
|
||||
.icv_truncbits = 64,
|
||||
}
|
||||
},
|
||||
@@ -103,6 +107,7 @@ static struct xfrm_algo_desc aead_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.aead = {
|
||||
.geniv = "seqniv",
|
||||
.icv_truncbits = 96,
|
||||
}
|
||||
},
|
||||
@@ -121,6 +126,7 @@ static struct xfrm_algo_desc aead_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.aead = {
|
||||
.geniv = "seqniv",
|
||||
.icv_truncbits = 128,
|
||||
}
|
||||
},
|
||||
@@ -139,6 +145,7 @@ static struct xfrm_algo_desc aead_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.aead = {
|
||||
.geniv = "seqiv",
|
||||
.icv_truncbits = 128,
|
||||
}
|
||||
},
|
||||
@@ -152,6 +159,18 @@ static struct xfrm_algo_desc aead_list[] = {
|
||||
.sadb_alg_maxbits = 256
|
||||
}
|
||||
},
|
||||
{
|
||||
.name = "rfc7539esp(chacha20,poly1305)",
|
||||
|
||||
.uinfo = {
|
||||
.aead = {
|
||||
.geniv = "seqniv",
|
||||
.icv_truncbits = 128,
|
||||
}
|
||||
},
|
||||
|
||||
.pfkey_supported = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct xfrm_algo_desc aalg_list[] = {
|
||||
@@ -353,6 +372,7 @@ static struct xfrm_algo_desc ealg_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.encr = {
|
||||
.geniv = "echainiv",
|
||||
.blockbits = 64,
|
||||
.defkeybits = 64,
|
||||
}
|
||||
@@ -373,6 +393,7 @@ static struct xfrm_algo_desc ealg_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.encr = {
|
||||
.geniv = "echainiv",
|
||||
.blockbits = 64,
|
||||
.defkeybits = 192,
|
||||
}
|
||||
@@ -393,6 +414,7 @@ static struct xfrm_algo_desc ealg_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.encr = {
|
||||
.geniv = "echainiv",
|
||||
.blockbits = 64,
|
||||
.defkeybits = 128,
|
||||
}
|
||||
@@ -413,6 +435,7 @@ static struct xfrm_algo_desc ealg_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.encr = {
|
||||
.geniv = "echainiv",
|
||||
.blockbits = 64,
|
||||
.defkeybits = 128,
|
||||
}
|
||||
@@ -433,6 +456,7 @@ static struct xfrm_algo_desc ealg_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.encr = {
|
||||
.geniv = "echainiv",
|
||||
.blockbits = 128,
|
||||
.defkeybits = 128,
|
||||
}
|
||||
@@ -453,6 +477,7 @@ static struct xfrm_algo_desc ealg_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.encr = {
|
||||
.geniv = "echainiv",
|
||||
.blockbits = 128,
|
||||
.defkeybits = 128,
|
||||
}
|
||||
@@ -473,6 +498,7 @@ static struct xfrm_algo_desc ealg_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.encr = {
|
||||
.geniv = "echainiv",
|
||||
.blockbits = 128,
|
||||
.defkeybits = 128,
|
||||
}
|
||||
@@ -493,6 +519,7 @@ static struct xfrm_algo_desc ealg_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.encr = {
|
||||
.geniv = "echainiv",
|
||||
.blockbits = 128,
|
||||
.defkeybits = 128,
|
||||
}
|
||||
@@ -512,6 +539,7 @@ static struct xfrm_algo_desc ealg_list[] = {
|
||||
|
||||
.uinfo = {
|
||||
.encr = {
|
||||
.geniv = "seqiv",
|
||||
.blockbits = 128,
|
||||
.defkeybits = 160, /* 128-bit key + 32-bit nonce */
|
||||
}
|
||||
|
@@ -289,6 +289,31 @@ static int attach_one_algo(struct xfrm_algo **algpp, u8 *props,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int attach_crypt(struct xfrm_state *x, struct nlattr *rta)
|
||||
{
|
||||
struct xfrm_algo *p, *ualg;
|
||||
struct xfrm_algo_desc *algo;
|
||||
|
||||
if (!rta)
|
||||
return 0;
|
||||
|
||||
ualg = nla_data(rta);
|
||||
|
||||
algo = xfrm_ealg_get_byname(ualg->alg_name, 1);
|
||||
if (!algo)
|
||||
return -ENOSYS;
|
||||
x->props.ealgo = algo->desc.sadb_alg_id;
|
||||
|
||||
p = kmemdup(ualg, xfrm_alg_len(ualg), GFP_KERNEL);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
|
||||
strcpy(p->alg_name, algo->name);
|
||||
x->ealg = p;
|
||||
x->geniv = algo->uinfo.encr.geniv;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int attach_auth(struct xfrm_algo_auth **algpp, u8 *props,
|
||||
struct nlattr *rta)
|
||||
{
|
||||
@@ -349,8 +374,7 @@ static int attach_auth_trunc(struct xfrm_algo_auth **algpp, u8 *props,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int attach_aead(struct xfrm_algo_aead **algpp, u8 *props,
|
||||
struct nlattr *rta)
|
||||
static int attach_aead(struct xfrm_state *x, struct nlattr *rta)
|
||||
{
|
||||
struct xfrm_algo_aead *p, *ualg;
|
||||
struct xfrm_algo_desc *algo;
|
||||
@@ -363,14 +387,15 @@ static int attach_aead(struct xfrm_algo_aead **algpp, u8 *props,
|
||||
algo = xfrm_aead_get_byname(ualg->alg_name, ualg->alg_icv_len, 1);
|
||||
if (!algo)
|
||||
return -ENOSYS;
|
||||
*props = algo->desc.sadb_alg_id;
|
||||
x->props.ealgo = algo->desc.sadb_alg_id;
|
||||
|
||||
p = kmemdup(ualg, aead_len(ualg), GFP_KERNEL);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
|
||||
strcpy(p->alg_name, algo->name);
|
||||
*algpp = p;
|
||||
x->aead = p;
|
||||
x->geniv = algo->uinfo.aead.geniv;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -515,8 +540,7 @@ static struct xfrm_state *xfrm_state_construct(struct net *net,
|
||||
if (attrs[XFRMA_SA_EXTRA_FLAGS])
|
||||
x->props.extra_flags = nla_get_u32(attrs[XFRMA_SA_EXTRA_FLAGS]);
|
||||
|
||||
if ((err = attach_aead(&x->aead, &x->props.ealgo,
|
||||
attrs[XFRMA_ALG_AEAD])))
|
||||
if ((err = attach_aead(x, attrs[XFRMA_ALG_AEAD])))
|
||||
goto error;
|
||||
if ((err = attach_auth_trunc(&x->aalg, &x->props.aalgo,
|
||||
attrs[XFRMA_ALG_AUTH_TRUNC])))
|
||||
@@ -526,9 +550,7 @@ static struct xfrm_state *xfrm_state_construct(struct net *net,
|
||||
attrs[XFRMA_ALG_AUTH])))
|
||||
goto error;
|
||||
}
|
||||
if ((err = attach_one_algo(&x->ealg, &x->props.ealgo,
|
||||
xfrm_ealg_get_byname,
|
||||
attrs[XFRMA_ALG_CRYPT])))
|
||||
if ((err = attach_crypt(x, attrs[XFRMA_ALG_CRYPT])))
|
||||
goto error;
|
||||
if ((err = attach_one_algo(&x->calg, &x->props.calgo,
|
||||
xfrm_calg_get_byname,
|
||||
|
Reference in New Issue
Block a user