mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Merge the crypto tree to pull in chelsio chcr fix.
This commit is contained in:
commit
479d014de5
@ -40,6 +40,7 @@ obj-$(CONFIG_CRYPTO_ECDH) += ecdh_generic.o
|
|||||||
|
|
||||||
$(obj)/rsapubkey-asn1.o: $(obj)/rsapubkey-asn1.c $(obj)/rsapubkey-asn1.h
|
$(obj)/rsapubkey-asn1.o: $(obj)/rsapubkey-asn1.c $(obj)/rsapubkey-asn1.h
|
||||||
$(obj)/rsaprivkey-asn1.o: $(obj)/rsaprivkey-asn1.c $(obj)/rsaprivkey-asn1.h
|
$(obj)/rsaprivkey-asn1.o: $(obj)/rsaprivkey-asn1.c $(obj)/rsaprivkey-asn1.h
|
||||||
|
$(obj)/rsa_helper.o: $(obj)/rsapubkey-asn1.h $(obj)/rsaprivkey-asn1.h
|
||||||
clean-files += rsapubkey-asn1.c rsapubkey-asn1.h
|
clean-files += rsapubkey-asn1.c rsapubkey-asn1.h
|
||||||
clean-files += rsaprivkey-asn1.c rsaprivkey-asn1.h
|
clean-files += rsaprivkey-asn1.c rsaprivkey-asn1.h
|
||||||
|
|
||||||
|
@ -214,23 +214,26 @@ static int hash_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
|
|||||||
|
|
||||||
ahash_request_set_crypt(&ctx->req, NULL, ctx->result, 0);
|
ahash_request_set_crypt(&ctx->req, NULL, ctx->result, 0);
|
||||||
|
|
||||||
if (ctx->more) {
|
if (!result && !ctx->more) {
|
||||||
|
err = af_alg_wait_for_completion(
|
||||||
|
crypto_ahash_init(&ctx->req),
|
||||||
|
&ctx->completion);
|
||||||
|
if (err)
|
||||||
|
goto unlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!result || ctx->more) {
|
||||||
ctx->more = 0;
|
ctx->more = 0;
|
||||||
err = af_alg_wait_for_completion(crypto_ahash_final(&ctx->req),
|
err = af_alg_wait_for_completion(crypto_ahash_final(&ctx->req),
|
||||||
&ctx->completion);
|
&ctx->completion);
|
||||||
if (err)
|
if (err)
|
||||||
goto unlock;
|
goto unlock;
|
||||||
} else if (!result) {
|
|
||||||
err = af_alg_wait_for_completion(
|
|
||||||
crypto_ahash_digest(&ctx->req),
|
|
||||||
&ctx->completion);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = memcpy_to_msg(msg, ctx->result, len);
|
err = memcpy_to_msg(msg, ctx->result, len);
|
||||||
|
|
||||||
hash_free_result(sk, ctx);
|
|
||||||
|
|
||||||
unlock:
|
unlock:
|
||||||
|
hash_free_result(sk, ctx);
|
||||||
release_sock(sk);
|
release_sock(sk);
|
||||||
|
|
||||||
return err ?: len;
|
return err ?: len;
|
||||||
|
@ -262,6 +262,7 @@ static int drbg_kcapi_sym_ctr(struct drbg_state *drbg,
|
|||||||
u8 *inbuf, u32 inbuflen,
|
u8 *inbuf, u32 inbuflen,
|
||||||
u8 *outbuf, u32 outlen);
|
u8 *outbuf, u32 outlen);
|
||||||
#define DRBG_CTR_NULL_LEN 128
|
#define DRBG_CTR_NULL_LEN 128
|
||||||
|
#define DRBG_OUTSCRATCHLEN DRBG_CTR_NULL_LEN
|
||||||
|
|
||||||
/* BCC function for CTR DRBG as defined in 10.4.3 */
|
/* BCC function for CTR DRBG as defined in 10.4.3 */
|
||||||
static int drbg_ctr_bcc(struct drbg_state *drbg,
|
static int drbg_ctr_bcc(struct drbg_state *drbg,
|
||||||
@ -1644,6 +1645,9 @@ static int drbg_fini_sym_kernel(struct drbg_state *drbg)
|
|||||||
kfree(drbg->ctr_null_value_buf);
|
kfree(drbg->ctr_null_value_buf);
|
||||||
drbg->ctr_null_value = NULL;
|
drbg->ctr_null_value = NULL;
|
||||||
|
|
||||||
|
kfree(drbg->outscratchpadbuf);
|
||||||
|
drbg->outscratchpadbuf = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1708,6 +1712,15 @@ static int drbg_init_sym_kernel(struct drbg_state *drbg)
|
|||||||
drbg->ctr_null_value = (u8 *)PTR_ALIGN(drbg->ctr_null_value_buf,
|
drbg->ctr_null_value = (u8 *)PTR_ALIGN(drbg->ctr_null_value_buf,
|
||||||
alignmask + 1);
|
alignmask + 1);
|
||||||
|
|
||||||
|
drbg->outscratchpadbuf = kmalloc(DRBG_OUTSCRATCHLEN + alignmask,
|
||||||
|
GFP_KERNEL);
|
||||||
|
if (!drbg->outscratchpadbuf) {
|
||||||
|
drbg_fini_sym_kernel(drbg);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
drbg->outscratchpad = (u8 *)PTR_ALIGN(drbg->outscratchpadbuf,
|
||||||
|
alignmask + 1);
|
||||||
|
|
||||||
return alignmask;
|
return alignmask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1737,15 +1750,16 @@ static int drbg_kcapi_sym_ctr(struct drbg_state *drbg,
|
|||||||
u8 *outbuf, u32 outlen)
|
u8 *outbuf, u32 outlen)
|
||||||
{
|
{
|
||||||
struct scatterlist sg_in;
|
struct scatterlist sg_in;
|
||||||
|
int ret;
|
||||||
|
|
||||||
sg_init_one(&sg_in, inbuf, inlen);
|
sg_init_one(&sg_in, inbuf, inlen);
|
||||||
|
|
||||||
while (outlen) {
|
while (outlen) {
|
||||||
u32 cryptlen = min_t(u32, inlen, outlen);
|
u32 cryptlen = min3(inlen, outlen, (u32)DRBG_OUTSCRATCHLEN);
|
||||||
struct scatterlist sg_out;
|
struct scatterlist sg_out;
|
||||||
int ret;
|
|
||||||
|
|
||||||
sg_init_one(&sg_out, outbuf, cryptlen);
|
/* Output buffer may not be valid for SGL, use scratchpad */
|
||||||
|
sg_init_one(&sg_out, drbg->outscratchpad, cryptlen);
|
||||||
skcipher_request_set_crypt(drbg->ctr_req, &sg_in, &sg_out,
|
skcipher_request_set_crypt(drbg->ctr_req, &sg_in, &sg_out,
|
||||||
cryptlen, drbg->V);
|
cryptlen, drbg->V);
|
||||||
ret = crypto_skcipher_encrypt(drbg->ctr_req);
|
ret = crypto_skcipher_encrypt(drbg->ctr_req);
|
||||||
@ -1761,15 +1775,20 @@ static int drbg_kcapi_sym_ctr(struct drbg_state *drbg,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return ret;
|
goto out;
|
||||||
}
|
}
|
||||||
init_completion(&drbg->ctr_completion);
|
init_completion(&drbg->ctr_completion);
|
||||||
|
|
||||||
|
memcpy(outbuf, drbg->outscratchpad, cryptlen);
|
||||||
|
|
||||||
outlen -= cryptlen;
|
outlen -= cryptlen;
|
||||||
outbuf += cryptlen;
|
outbuf += cryptlen;
|
||||||
}
|
}
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
return 0;
|
out:
|
||||||
|
memzero_explicit(drbg->outscratchpad, DRBG_OUTSCRATCHLEN);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_CRYPTO_DRBG_CTR */
|
#endif /* CONFIG_CRYPTO_DRBG_CTR */
|
||||||
|
|
||||||
|
@ -68,10 +68,6 @@ void scatterwalk_map_and_copy(void *buf, struct scatterlist *sg,
|
|||||||
|
|
||||||
sg = scatterwalk_ffwd(tmp, sg, start);
|
sg = scatterwalk_ffwd(tmp, sg, start);
|
||||||
|
|
||||||
if (sg_page(sg) == virt_to_page(buf) &&
|
|
||||||
sg->offset == offset_in_page(buf))
|
|
||||||
return;
|
|
||||||
|
|
||||||
scatterwalk_start(&walk, sg);
|
scatterwalk_start(&walk, sg);
|
||||||
scatterwalk_copychunks(buf, &walk, nbytes, out);
|
scatterwalk_copychunks(buf, &walk, nbytes, out);
|
||||||
scatterwalk_done(&walk, out, 0);
|
scatterwalk_done(&walk, out, 0);
|
||||||
|
@ -3568,6 +3568,15 @@ static int __init caam_algapi_init(void)
|
|||||||
if (!aes_inst && (alg_sel == OP_ALG_ALGSEL_AES))
|
if (!aes_inst && (alg_sel == OP_ALG_ALGSEL_AES))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check support for AES modes not available
|
||||||
|
* on LP devices.
|
||||||
|
*/
|
||||||
|
if ((cha_vid & CHA_ID_LS_AES_MASK) == CHA_ID_LS_AES_LP)
|
||||||
|
if ((alg->class1_alg_type & OP_ALG_AAI_MASK) ==
|
||||||
|
OP_ALG_AAI_XTS)
|
||||||
|
continue;
|
||||||
|
|
||||||
t_alg = caam_alg_alloc(alg);
|
t_alg = caam_alg_alloc(alg);
|
||||||
if (IS_ERR(t_alg)) {
|
if (IS_ERR(t_alg)) {
|
||||||
err = PTR_ERR(t_alg);
|
err = PTR_ERR(t_alg);
|
||||||
|
@ -422,7 +422,7 @@ static inline void get_aes_decrypt_key(unsigned char *dec_key,
|
|||||||
{
|
{
|
||||||
u32 temp;
|
u32 temp;
|
||||||
u32 w_ring[MAX_NK];
|
u32 w_ring[MAX_NK];
|
||||||
int i, j, k = 0;
|
int i, j, k;
|
||||||
u8 nr, nk;
|
u8 nr, nk;
|
||||||
|
|
||||||
switch (keylength) {
|
switch (keylength) {
|
||||||
@ -460,6 +460,7 @@ static inline void get_aes_decrypt_key(unsigned char *dec_key,
|
|||||||
temp = w_ring[i % nk];
|
temp = w_ring[i % nk];
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
i--;
|
||||||
for (k = 0, j = i % nk; k < nk; k++) {
|
for (k = 0, j = i % nk; k < nk; k++) {
|
||||||
*((u32 *)dec_key + k) = htonl(w_ring[j]);
|
*((u32 *)dec_key + k) = htonl(w_ring[j]);
|
||||||
j--;
|
j--;
|
||||||
|
@ -124,6 +124,8 @@ struct drbg_state {
|
|||||||
struct skcipher_request *ctr_req; /* CTR mode request handle */
|
struct skcipher_request *ctr_req; /* CTR mode request handle */
|
||||||
__u8 *ctr_null_value_buf; /* CTR mode unaligned buffer */
|
__u8 *ctr_null_value_buf; /* CTR mode unaligned buffer */
|
||||||
__u8 *ctr_null_value; /* CTR mode aligned zero buf */
|
__u8 *ctr_null_value; /* CTR mode aligned zero buf */
|
||||||
|
__u8 *outscratchpadbuf; /* CTR mode output scratchpad */
|
||||||
|
__u8 *outscratchpad; /* CTR mode aligned outbuf */
|
||||||
struct completion ctr_completion; /* CTR mode async handler */
|
struct completion ctr_completion; /* CTR mode async handler */
|
||||||
int ctr_async_err; /* CTR mode async error */
|
int ctr_async_err; /* CTR mode async error */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user