[PATCH v2 0/2 ] Bug Fixes for 4.10

2017-01-23 Thread Harsh Jain
This patch series includes critical bug fixes

Atul Gupta (2):
  crypto:chcr- Fix panic on dma_unmap_sg
  crypto:chcr- Check device is allocated before use

 drivers/crypto/chelsio/chcr_algo.c   | 49 +++-
 drivers/crypto/chelsio/chcr_core.c   | 18 ++---
 drivers/crypto/chelsio/chcr_crypto.h |  3 +++
 3 files changed, 37 insertions(+), 33 deletions(-)

-- 
1.8.2.3

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 2/2] crypto:chcr- Check device is allocated before use

2017-01-23 Thread Harsh Jain
Ensure dev is allocated for crypto uld context before using the device
for crypto operations.

Signed-off-by: Atul Gupta 
---
 drivers/crypto/chelsio/chcr_core.c | 18 --
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/drivers/crypto/chelsio/chcr_core.c 
b/drivers/crypto/chelsio/chcr_core.c
index 918da8e..1c65f07 100644
--- a/drivers/crypto/chelsio/chcr_core.c
+++ b/drivers/crypto/chelsio/chcr_core.c
@@ -52,6 +52,7 @@
 int assign_chcr_device(struct chcr_dev **dev)
 {
struct uld_ctx *u_ctx;
+   int ret = -ENXIO;
 
/*
 * Which device to use if multiple devices are available TODO
@@ -59,15 +60,14 @@ int assign_chcr_device(struct chcr_dev **dev)
 * must go to the same device to maintain the ordering.
 */
mutex_lock(&dev_mutex); /* TODO ? */
-   u_ctx = list_first_entry(&uld_ctx_list, struct uld_ctx, entry);
-   if (!u_ctx) {
-   mutex_unlock(&dev_mutex);
-   return -ENXIO;
+   list_for_each_entry(u_ctx, &uld_ctx_list, entry)
+   if (u_ctx && u_ctx->dev) {
+   *dev = u_ctx->dev;
+   ret = 0;
+   break;
}
-
-   *dev = u_ctx->dev;
mutex_unlock(&dev_mutex);
-   return 0;
+   return ret;
 }
 
 static int chcr_dev_add(struct uld_ctx *u_ctx)
@@ -202,10 +202,8 @@ static int chcr_uld_state_change(void *handle, enum 
cxgb4_state state)
 
 static int __init chcr_crypto_init(void)
 {
-   if (cxgb4_register_uld(CXGB4_ULD_CRYPTO, &chcr_uld_info)) {
+   if (cxgb4_register_uld(CXGB4_ULD_CRYPTO, &chcr_uld_info))
pr_err("ULD register fail: No chcr crypto support in cxgb4");
-   return -1;
-   }
 
return 0;
 }
-- 
1.8.2.3

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 1/2] crypto:chcr- Fix panic on dma_unmap_sg

2017-01-23 Thread Harsh Jain
Save DMA mapped sg list addresses to request context buffer.

Signed-off-by: Atul Gupta 
---
 drivers/crypto/chelsio/chcr_algo.c   | 49 +++-
 drivers/crypto/chelsio/chcr_crypto.h |  3 +++
 2 files changed, 29 insertions(+), 23 deletions(-)

diff --git a/drivers/crypto/chelsio/chcr_algo.c 
b/drivers/crypto/chelsio/chcr_algo.c
index 2ed1e24..d29c2b4 100644
--- a/drivers/crypto/chelsio/chcr_algo.c
+++ b/drivers/crypto/chelsio/chcr_algo.c
@@ -158,7 +158,7 @@ int chcr_handle_resp(struct crypto_async_request *req, 
unsigned char *input,
case CRYPTO_ALG_TYPE_AEAD:
ctx_req.req.aead_req = (struct aead_request *)req;
ctx_req.ctx.reqctx = aead_request_ctx(ctx_req.req.aead_req);
-   dma_unmap_sg(&u_ctx->lldi.pdev->dev, ctx_req.req.aead_req->dst,
+   dma_unmap_sg(&u_ctx->lldi.pdev->dev, ctx_req.ctx.reqctx->dst,
 ctx_req.ctx.reqctx->dst_nents, DMA_FROM_DEVICE);
if (ctx_req.ctx.reqctx->skb) {
kfree_skb(ctx_req.ctx.reqctx->skb);
@@ -1362,8 +1362,7 @@ static struct sk_buff *create_authenc_wr(struct 
aead_request *req,
struct chcr_wr *chcr_req;
struct cpl_rx_phys_dsgl *phys_cpl;
struct phys_sge_parm sg_param;
-   struct scatterlist *src, *dst;
-   struct scatterlist src_sg[2], dst_sg[2];
+   struct scatterlist *src;
unsigned int frags = 0, transhdr_len;
unsigned int ivsize = crypto_aead_ivsize(tfm), dst_size = 0;
unsigned int   kctx_len = 0;
@@ -1383,19 +1382,21 @@ static struct sk_buff *create_authenc_wr(struct 
aead_request *req,
 
if (sg_nents_for_len(req->src, req->assoclen + req->cryptlen) < 0)
goto err;
-   src = scatterwalk_ffwd(src_sg, req->src, req->assoclen);
-   dst = src;
+   src = scatterwalk_ffwd(reqctx->srcffwd, req->src, req->assoclen);
+   reqctx->dst = src;
+
if (req->src != req->dst) {
err = chcr_copy_assoc(req, aeadctx);
if (err)
return ERR_PTR(err);
-   dst = scatterwalk_ffwd(dst_sg, req->dst, req->assoclen);
+   reqctx->dst = scatterwalk_ffwd(reqctx->dstffwd, req->dst,
+  req->assoclen);
}
if (get_aead_subtype(tfm) == CRYPTO_ALG_SUB_TYPE_AEAD_NULL) {
null = 1;
assoclen = 0;
}
-   reqctx->dst_nents = sg_nents_for_len(dst, req->cryptlen +
+   reqctx->dst_nents = sg_nents_for_len(reqctx->dst, req->cryptlen +
 (op_type ? -authsize : authsize));
if (reqctx->dst_nents <= 0) {
pr_err("AUTHENC:Invalid Destination sg entries\n");
@@ -1460,7 +1461,7 @@ static struct sk_buff *create_authenc_wr(struct 
aead_request *req,
sg_param.obsize = req->cryptlen + (op_type ? -authsize : authsize);
sg_param.qid = qid;
sg_param.align = 0;
-   if (map_writesg_phys_cpl(&u_ctx->lldi.pdev->dev, phys_cpl, dst,
+   if (map_writesg_phys_cpl(&u_ctx->lldi.pdev->dev, phys_cpl, reqctx->dst,
  &sg_param))
goto dstmap_fail;
 
@@ -1711,8 +1712,7 @@ static struct sk_buff *create_aead_ccm_wr(struct 
aead_request *req,
struct chcr_wr *chcr_req;
struct cpl_rx_phys_dsgl *phys_cpl;
struct phys_sge_parm sg_param;
-   struct scatterlist *src, *dst;
-   struct scatterlist src_sg[2], dst_sg[2];
+   struct scatterlist *src;
unsigned int frags = 0, transhdr_len, ivsize = AES_BLOCK_SIZE;
unsigned int dst_size = 0, kctx_len;
unsigned int sub_type;
@@ -1728,17 +1728,19 @@ static struct sk_buff *create_aead_ccm_wr(struct 
aead_request *req,
if (sg_nents_for_len(req->src, req->assoclen + req->cryptlen) < 0)
goto err;
sub_type = get_aead_subtype(tfm);
-   src = scatterwalk_ffwd(src_sg, req->src, req->assoclen);
-   dst = src;
+   src = scatterwalk_ffwd(reqctx->srcffwd, req->src, req->assoclen);
+   reqctx->dst = src;
+
if (req->src != req->dst) {
err = chcr_copy_assoc(req, aeadctx);
if (err) {
pr_err("AAD copy to destination buffer fails\n");
return ERR_PTR(err);
}
-   dst = scatterwalk_ffwd(dst_sg, req->dst, req->assoclen);
+   reqctx->dst = scatterwalk_ffwd(reqctx->dstffwd, req->dst,
+  req->assoclen);
}
-   reqctx->dst_nents = sg_nents_for_len(dst, req->cryptlen +
+   reqctx->dst_nents = sg_nents_for_len(reqctx->dst, req->cryptlen +
 (op_type ? -authsize : authsize));
if (reqctx->dst_nents <= 0) {
pr_err("CCM:Invalid Destination sg entries\n");
@@ -1777,7 +1779,7 @@ static struct sk_buff *create_aead_

Re: [PATCH v4 1/4] lib: Update LZ4 compressor module

2017-01-23 Thread Andrew Morton
On Sun, 22 Jan 2017 20:35:14 +0100 Sven Schmidt 
<4ssch...@informatik.uni-hamburg.de> wrote:

> This patch updates LZ4 kernel module to LZ4 v1.7.3 by Yann Collet.
> The kernel module is inspired by the previous work by Chanho Min.
> The updated LZ4 module will not break existing code since there were alias
> methods added to ensure backwards compatibility.
> 
> API changes:
> 
> New method LZ4_compress_fast which differs from the variant available
> in kernel by the new acceleration parameter,
> allowing to trade compression ratio for more compression speed
> and vice versa.
> 
> LZ4_decompress_fast is the respective decompression method, featuring a very
> fast decoder (multiple GB/s per core), able to reach RAM speed in multi-core
> systems. The decompressor allows to decompress data compressed with
> LZ4 fast as well as the LZ4 HC (high compression) algorithm.
> 
> Also the useful functions LZ4_decompress_safe_partial
> LZ4_compress_destsize were added. The latter reverses the logic by trying to
> compress as much data as possible from source to dest while the former aims
> to decompress partial blocks of data.
> 
> A bunch of streaming functions were also added
> which allow compressig/decompressing data in multiple steps
> (so called "streaming mode").
> 
> The methods lz4_compress and lz4_decompress_unknownoutputsize
> are now known as LZ4_compress_default respectivley LZ4_decompress_safe.
> The old methods are still available for providing backwards compatibility.
> 
> ...
>
> +/*
> + * For backward compatibility
> + */
> +static inline int lz4_compressbound(size_t isize)
>  {

Do we actually need the back-compat wrappers?  After your other three
patches we have no callers, correct?  If so, we should go ahead and
eliminate such back-compatibility interfaces.


> - return isize + (isize / 255) + 16;
> + return LZ4_COMPRESSBOUND(isize);
>  }

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH] crypto: api - Clear CRYPTO_ALG_DEAD bit before registering an alg

2017-01-23 Thread Benedetto, Salvatore
Hi Herbert,

> -Original Message-
> From: linux-crypto-ow...@vger.kernel.org [mailto:linux-crypto-
> ow...@vger.kernel.org] On Behalf Of Herbert Xu
> Sent: Monday, January 23, 2017 2:58 PM
> To: Benedetto, Salvatore 
> Cc: linux-crypto@vger.kernel.org
> Subject: Re: [PATCH] crypto: api - Clear CRYPTO_ALG_DEAD bit before
> registering an alg
> 
> On Fri, Jan 13, 2017 at 11:54:08AM +, Salvatore Benedetto wrote:
> > Make sure CRYPTO_ALG_DEAD bit is cleared before proceeding with the
> > algorithm registration. This fixes qat-dh registration when driver is
> > restarted
> >
> > Signed-off-by: Salvatore Benedetto 
> 
> Patch applied.  Thanks.

I forgot to add CC stable to it.

This error was introduced in 4.8 and so I think it should go into stable 4.8 
and 4.9.

Should I resend or can you add that?

Regards,
Salvatore

> --
> Email: Herbert Xu  Home Page:
> http://gondor.apana.org.au/~herbert/
> PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
> --
> To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the
> body of a message to majord...@vger.kernel.org More majordomo info at
> http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] crypto: vmx -- disable preemption to enable vsx in aes_ctr.c

2017-01-23 Thread Paulo Flabiano Smorigo
On Fri, 20 Jan 2017 16:35:33 +0800
Li Zhong  wrote:

> Some preemptible check warnings were reported from
> enable_kernel_vsx(). This patch disables preemption in aes_ctr.c
> before enabling vsx, and they are now consistent with other files in
> the same directory.
> 
> Signed-off-by: Li Zhong 
> ---
>  drivers/crypto/vmx/aes_ctr.c | 6 ++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/crypto/vmx/aes_ctr.c
> b/drivers/crypto/vmx/aes_ctr.c index 38ed10d..7cf6d31 100644
> --- a/drivers/crypto/vmx/aes_ctr.c
> +++ b/drivers/crypto/vmx/aes_ctr.c
> @@ -80,11 +80,13 @@ static int p8_aes_ctr_setkey(struct crypto_tfm
> *tfm, const u8 *key, int ret;
>   struct p8_aes_ctr_ctx *ctx = crypto_tfm_ctx(tfm);
> 
> + preempt_disable();
>   pagefault_disable();
>   enable_kernel_vsx();
>   ret = aes_p8_set_encrypt_key(key, keylen * 8, &ctx->enc_key);
>   disable_kernel_vsx();
>   pagefault_enable();
> + preempt_enable();
> 
>   ret += crypto_blkcipher_setkey(ctx->fallback, key, keylen);
>   return ret;
> @@ -99,11 +101,13 @@ static void p8_aes_ctr_final(struct
> p8_aes_ctr_ctx *ctx, u8 *dst = walk->dst.virt.addr;
>   unsigned int nbytes = walk->nbytes;
> 
> + preempt_disable();
>   pagefault_disable();
>   enable_kernel_vsx();
>   aes_p8_encrypt(ctrblk, keystream, &ctx->enc_key);
>   disable_kernel_vsx();
>   pagefault_enable();
> + preempt_enable();
> 
>   crypto_xor(keystream, src, nbytes);
>   memcpy(dst, keystream, nbytes);
> @@ -132,6 +136,7 @@ static int p8_aes_ctr_crypt(struct blkcipher_desc
> *desc, blkcipher_walk_init(&walk, dst, src, nbytes);
>   ret = blkcipher_walk_virt_block(desc, &walk,
> AES_BLOCK_SIZE); while ((nbytes = walk.nbytes) >= AES_BLOCK_SIZE) {
> + preempt_disable();
>   pagefault_disable();
>   enable_kernel_vsx();
>   aes_p8_ctr32_encrypt_blocks(walk.src.virt.addr,
> @@ -143,6 +148,7 @@ static int p8_aes_ctr_crypt(struct blkcipher_desc
> *desc, walk.iv);
>   disable_kernel_vsx();
>   pagefault_enable();
> + preempt_enable();
> 
>   /* We need to update IV mostly for last
> bytes/round */ inc = (nbytes & AES_BLOCK_MASK) / AES_BLOCK_SIZE;
> 
> 

Well observed, Thanks.

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] x86/crypto: make constants readonly, allow linker to merge them

2017-01-23 Thread Denys Vlasenko

On 01/20/2017 12:09 AM, Thomas Gleixner wrote:

On Thu, 19 Jan 2017, Denys Vlasenko wrote:


A lot of asm-optimized routines in arch/x86/crypto/ keep its
constants in .data. This is wrong, they should be on .rodata.

Mnay of these constants are the same in different modules.
For example, 128-bit shuffle mask 0x000102030405060708090A0B0C0D0E0F
exists in at least half a dozen places.

There is a way to let linker merge them and use just one copy.
The rules are as follows: mergeable objects of different sizes
should not share sections. You can't put them all in one .rodata
section, they will lose "mergeability".

GCC puts its mergeable constants in ".rodata.cstSIZE" sections,
or ".rodata.cstSIZE." if -fdata-sections is used.
This patch does the same:

.section .rodata.cst16.SHUF_MASK, "aM", @progbits, 16

It is important that all data in such section consists of
16-byte elements, not larger ones, and there are no implicit
use of one element from another.

When this is not the case, use non-mergeable section:

.section .rodata[.VAR_NAME], "a", @progbits

This reduces .data by ~15 kbytes:

textdata bss dec  hex filename
11097415 2705840 2630712 16433967  fac32f vmlinux-prev.o
2095 2690672 2630712 16433479  fac147 vmlinux.o


And at the same time it increases text size by ~15k. The overall change in
total size is 488 byte reduction. Weird.


Of course: the constants do need to go somewhere. They migrate to
.rodata.blabla sections, which eventually got appended to read-only .text

Without merging, if I would just move constants to .rodata,
there would be no net size win at all.

I did not look deepper why the overall change is smaller than expected.
It may be affected by changed padding. The linker is not too clever
about it, and also IIRC we don't actually giving it the best options
to sort sections during link time to pack them better.
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] crypto: tcrypt - Add mode to test specified algs

2017-01-23 Thread Rabin Vincent
On Mon, Jan 23, 2017 at 10:14:03PM +0800, Herbert Xu wrote:
> On Wed, Jan 18, 2017 at 05:25:00PM +0100, Rabin Vincent wrote:
> > From: Rabin Vincent 
> > tcrypt offers a bunch of mode= values to test various (groups of)
> > algorithms, but there is no way provided to test a subset of the
> > algorithms.  This adds a new mode=2000 which interprets alg= as a
> > colon-separated list of algorithms to test with alg_test().  Colon is
> > used since the names may contain commas.
> > 
> > This is useful during driver development and also for regression testing
> > to avoid the errors that are otherwise generated when attempting to test
> > non-enabled algorithms.
> > 
> >  # insmod tcrypt.ko dyndbg mode=2000 
> > alg="cbc(aes):ecb(aes):hmac(sha256):sha256:xts(aes)"
> >  [  649.418569] tcrypt: testing cbc(aes)
> >  [  649.420809] tcrypt: testing ecb(aes)
> >  [  649.422627] tcrypt: testing hmac(sha256)
> >  [  649.424861] tcrypt: testing sha256
> >  [  649.426368] tcrypt: testing xts(aes)
> >  [  649.430014] tcrypt: all tests passed
> > 
> > Signed-off-by: Rabin Vincent 
> 
> You can already do this with the existing mode=0 setting, no?

That's what I thought so too, but that doesn't seem to be the case.  The
mode=0 handling is this:

switch (m) {
case 0:
if (alg) {
if (!crypto_has_alg(alg, type,
mask ?: CRYPTO_ALG_TYPE_MASK))
ret = -ENOENT;
break;
}

for (i = 1; i < 200; i++)
ret += do_test(NULL, 0, 0, i);
break;

So, if alg= is specified, after first checking if the specified alg is
present, it just goes ahead and runs all the tests.  I'm not sure what
mode=0 alg=foo is meant to be used for.
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] crypto: vmx -- disable preemption to enable vsx in aes_ctr.c

2017-01-23 Thread Herbert Xu
Li Zhong  wrote:
> Some preemptible check warnings were reported from enable_kernel_vsx(). This
> patch disables preemption in aes_ctr.c before enabling vsx, and they are now 
> consistent with other files in the same directory.
> 
> Signed-off-by: Li Zhong 

Patch applied.  Thanks.
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] x86/crypto: fix %progbits -> @progbits

2017-01-23 Thread Herbert Xu
On Thu, Jan 19, 2017 at 10:28:05PM +0100, Denys Vlasenko wrote:
> %progbits form is used on ARM (where @ is a comment char).
> 
> x86 consistently uses @progbits everywhere else.
> 
> Signed-off-by: Denys Vlasenko 

Patch applied.  Thanks.
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 0/8] update mediatek crypto driver

2017-01-23 Thread Herbert Xu
On Fri, Jan 20, 2017 at 01:41:07PM +0800, Ryder Lee wrote:
> Hi,
> 
> This series of patches is a global rework of the mtk driver.
> Fix bug - incomplete DMA data transfer when SG buffer dst.len != src.len
> 
> It also updates some part of the code to make them more generic. For
> instance the crypto request queue management supports both async block
> cipher and AEAD requests, which allows us to add support the the GCM mode.
> GMAC mode is not supported yet.
> 
> Current implementation was validated using the tcrypt
> module running modes:
> - 10: ecb(aes), cbc(aes), ctr(aes), rfc3686(ctr(aes))
> - 35: gcm(aes)
> - 2,6,11,12: sha1, sha2 family
> 
> tcrypt speed test was run with modes:
> - 211: rfc4106(gcm(aes)), gcm(aes)
> - 500: ecb(aes), cbc(aes), ctr(aes), rfc3686(ctr(aes))
> - 403 ~ 406: sha1, sha2 family
> 
> IxChariot multiple pairs throughput 24 hours test:
> - IPSec VPN
> - MACSec
> 
> Ryder Lee (8):
>   crypto: mediatek - move HW control data to transformation context
>   crypto: mediatek - fix incorrect data transfer result
>   crypto: mediatek - make crypto request queue management more generic
>   crypto: mediatek - rework crypto request completion
>   crypto: mediatek - regroup functions by usage
>   crypto: mediatek - fix typo and indentation
>   crypto: mediatek - add support to CTR mode
>   crypto: mediatek - add support to GCM mode

All applied.  Thanks.
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] x86/crypto: make constants readonly, allow linker to merge them

2017-01-23 Thread Herbert Xu
On Thu, Jan 19, 2017 at 10:33:04PM +0100, Denys Vlasenko wrote:
> A lot of asm-optimized routines in arch/x86/crypto/ keep its
> constants in .data. This is wrong, they should be on .rodata.
> 
> Mnay of these constants are the same in different modules.
> For example, 128-bit shuffle mask 0x000102030405060708090A0B0C0D0E0F
> exists in at least half a dozen places.
> 
> There is a way to let linker merge them and use just one copy.
> The rules are as follows: mergeable objects of different sizes
> should not share sections. You can't put them all in one .rodata
> section, they will lose "mergeability".
> 
> GCC puts its mergeable constants in ".rodata.cstSIZE" sections,
> or ".rodata.cstSIZE." if -fdata-sections is used.
> This patch does the same:
> 
>   .section .rodata.cst16.SHUF_MASK, "aM", @progbits, 16
> 
> It is important that all data in such section consists of
> 16-byte elements, not larger ones, and there are no implicit
> use of one element from another.
> 
> When this is not the case, use non-mergeable section:
> 
>   .section .rodata[.VAR_NAME], "a", @progbits
> 
> This reduces .data by ~15 kbytes:
> 
> textdata bss dec  hex filename
> 11097415 2705840 2630712 16433967  fac32f vmlinux-prev.o
> 2095 2690672 2630712 16433479  fac147 vmlinux.o
> 
> Merged objects are visible in System.map:
> 
> 81a28810 r POLY
> 81a28810 r POLY
> 81a28820 r TWOONE
> 81a28820 r TWOONE
> 81a28830 r PSHUFFLE_BYTE_FLIP_MASK <- merged regardless of
> 81a28830 r SHUF_MASK   <- the name difference
> 81a28830 r SHUF_MASK
> 81a28830 r SHUF_MASK
> ..
> 81a28d00 r K512 <- merged three identical 640-byte tables
> 81a28d00 r K512
> 81a28d00 r K512
> 
> Use of object names in section name suffixes is not strictly necessary,
> but might help if someday link stage will use garbage collection
> to eliminate unused sections (ld --gc-sections).
> 
> Signed-off-by: Denys Vlasenko 

Patch applied.  Thanks.
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] crypto: tcrypt - Add mode to test specified algs

2017-01-23 Thread Herbert Xu
On Wed, Jan 18, 2017 at 05:25:00PM +0100, Rabin Vincent wrote:
> From: Rabin Vincent 
> 
> tcrypt offers a bunch of mode= values to test various (groups of)
> algorithms, but there is no way provided to test a subset of the
> algorithms.  This adds a new mode=2000 which interprets alg= as a
> colon-separated list of algorithms to test with alg_test().  Colon is
> used since the names may contain commas.
> 
> This is useful during driver development and also for regression testing
> to avoid the errors that are otherwise generated when attempting to test
> non-enabled algorithms.
> 
>  # insmod tcrypt.ko dyndbg mode=2000 
> alg="cbc(aes):ecb(aes):hmac(sha256):sha256:xts(aes)"
>  [  649.418569] tcrypt: testing cbc(aes)
>  [  649.420809] tcrypt: testing ecb(aes)
>  [  649.422627] tcrypt: testing hmac(sha256)
>  [  649.424861] tcrypt: testing sha256
>  [  649.426368] tcrypt: testing xts(aes)
>  [  649.430014] tcrypt: all tests passed
> 
> Signed-off-by: Rabin Vincent 

You can already do this with the existing mode=0 setting, no?

Cheers,
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] crypto: arm/aes-neonbs - fix issue with v2.22 and older assembler

2017-01-23 Thread Herbert Xu
On Thu, Jan 19, 2017 at 12:23:32PM +, Ard Biesheuvel wrote:
> The GNU assembler for ARM version 2.22 or older fails to infer the
> element size from the vmov instructions, and aborts the build in
> the following way;
> 
> .../aes-neonbs-core.S: Assembler messages:
> .../aes-neonbs-core.S:817: Error: bad type for scalar -- `vmov q1h[1],r10'
> .../aes-neonbs-core.S:817: Error: bad type for scalar -- `vmov q1h[0],r9'
> .../aes-neonbs-core.S:817: Error: bad type for scalar -- `vmov q1l[1],r8'
> .../aes-neonbs-core.S:817: Error: bad type for scalar -- `vmov q1l[0],r7'
> .../aes-neonbs-core.S:818: Error: bad type for scalar -- `vmov q2h[1],r10'
> .../aes-neonbs-core.S:818: Error: bad type for scalar -- `vmov q2h[0],r9'
> .../aes-neonbs-core.S:818: Error: bad type for scalar -- `vmov q2l[1],r8'
> .../aes-neonbs-core.S:818: Error: bad type for scalar -- `vmov q2l[0],r7'
> 
> Fix this by setting the element size explicitly, by replacing vmov with
> vmov.32.
> 
> Signed-off-by: Ard Biesheuvel 

Patch applied.  Thanks.
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] crypto: tcrypt - Add debug prints

2017-01-23 Thread Herbert Xu
On Wed, Jan 18, 2017 at 02:54:05PM +0100, Rabin Vincent wrote:
> From: Rabin Vincent 
> 
> tcrypt is very tight-lipped when it succeeds, but a bit more feedback
> would be useful when developing or debugging crypto drivers, especially
> since even a successful run ends with the module failing to insert. Add
> a couple of debug prints, which can be enabled with dynamic debug:
> 
> Before:
> 
>  # insmod tcrypt.ko mode=10
>  insmod: can't insert 'tcrypt.ko': Resource temporarily unavailable
> 
> After:
> 
>  # insmod tcrypt.ko mode=10 dyndbg
>  tcrypt: testing ecb(aes)
>  tcrypt: testing cbc(aes)
>  tcrypt: testing lrw(aes)
>  tcrypt: testing xts(aes)
>  tcrypt: testing ctr(aes)
>  tcrypt: testing rfc3686(ctr(aes))
>  tcrypt: all tests passed
>  insmod: can't insert 'tcrypt.ko': Resource temporarily unavailable
> 
> Signed-off-by: Rabin Vincent 

Patch applied.  Thanks.
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] crypto: arm64/aes-blk - honour iv_out requirement in CBC and CTR modes

2017-01-23 Thread Herbert Xu
On Tue, Jan 17, 2017 at 01:46:29PM +, Ard Biesheuvel wrote:
> Update the ARMv8 Crypto Extensions and the plain NEON AES implementations
> in CBC and CTR modes to return the next IV back to the skcipher API client.
> This is necessary for chaining to work correctly.
> 
> Note that for CTR, this is only done if the request is a round multiple of
> the block size, since otherwise, chaining is impossible anyway.
> 
> Cc:  # v3.16+
> Signed-off-by: Ard Biesheuvel 

Patch applied.  Thanks.
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/1] crypto: img-hash - use dma_data_direction when calling dma_map_sg

2017-01-23 Thread Herbert Xu
On Sun, Jan 15, 2017 at 01:37:50PM +0100, Nicolas Iooss wrote:
> The fourth argument of dma_map_sg() and dma_unmap_sg() is an item of
> dma_data_direction enum. Function img_hash_xmit_dma() wrongly used
> DMA_MEM_TO_DEV, which is an item of dma_transfer_direction enum.
> 
> Replace DMA_MEM_TO_DEV (which value is 1) with DMA_TO_DEVICE (which
> value is fortunately also 1) when calling dma_map_sg() and
> dma_unmap_sg().
> 
> Signed-off-by: Nicolas Iooss 

Patch applied.  Thanks.
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] crypto: api - Clear CRYPTO_ALG_DEAD bit before registering an alg

2017-01-23 Thread Herbert Xu
On Fri, Jan 13, 2017 at 11:54:08AM +, Salvatore Benedetto wrote:
> Make sure CRYPTO_ALG_DEAD bit is cleared before proceeding with
> the algorithm registration. This fixes qat-dh registration when
> driver is restarted
> 
> Signed-off-by: Salvatore Benedetto 

Patch applied.  Thanks.
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 0/6] Add support for ECDSA algorithm

2017-01-23 Thread Herbert Xu
On Fri, Jan 20, 2017 at 05:05:55PM +0530, Nitin Kumbhar wrote:
> Hello,
> 
> This patch series adds support for Elliptic Curve Digital Signature
> Algorithm (ECDSA). To reuse existing ECC functionality, which is
> added as part of ECDH, it separates out ECC and ECDH so that
> only ECC functionality is available for ECDSA even when ECDH is in
> a disabled state.
> 
> Patch #1 restructures ECC and ECDH code such that ECC is not
> dependent on ECDH config.
> 
> Patches #2 & #3 add vli and ecc functions which are required
> for other Elliptic curve algorithms like ECDSA and ECIES.
> 
> Patch #4 adds support for ECDSA. This has been validated for P192
> and P256 elliptic curves.
> 
> Patches #5 and #6 add ECDSA tests to validate ECDSA functionality
> and measure ECDSA performance.

Who is going to use this in the kernel?

Thanks,
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Urgent Please,,

2017-01-23 Thread Joyes Dadi
Good Day Dear,

My name is Ms. Joyes Dadi, I am glad you are reading this letter and I hope
we will start our communication and I know that this message will look strange,
surprising and probably unbelievable to you, but it is the reality. I want to
make a donation of money to you.

I contact you by the will of God. I am a firm German woman specialized in
mining gold and diamonds in Africa. But now, I'm very sick of a cancer. My
husband died in an accident two years ago with our two children and now I have
cancer of the esophagus that damaged almost all the cells in my system/agencies
and I'll die soon according to my doctor.

My most concern now is, we grew up in the orphanage and were married in
orphanage. If I die this deposited fund will soon be left alone in the hand of
the bank, and I do want to it that  way. Please, if you can be reliable and
sincere to accept my humble proposal; I have (10.5Millions Euro) in a fixed
deposit account; I will order the Bank to transfer the money into your account
in your country immediately, and then you will take the fund to  your country
and invest it to the orphanage homes Please, answer as quickly as possible.

God bless you.
Ms. Joyes Dadi
Email: joyesdadi...@citromail.hu
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 02/10] crypto: arm/aes-ce - remove cra_alignmask

2017-01-23 Thread Ard Biesheuvel
Remove the unnecessary alignmask: it is much more efficient to deal with
the misalignment in the core algorithm than relying on the crypto API to
copy the data to a suitably aligned buffer.

Signed-off-by: Ard Biesheuvel 
---
 arch/arm/crypto/aes-ce-core.S | 84 ++--
 arch/arm/crypto/aes-ce-glue.c | 15 ++--
 2 files changed, 47 insertions(+), 52 deletions(-)

diff --git a/arch/arm/crypto/aes-ce-core.S b/arch/arm/crypto/aes-ce-core.S
index 987aa632c9f0..ba8e6a32fdc9 100644
--- a/arch/arm/crypto/aes-ce-core.S
+++ b/arch/arm/crypto/aes-ce-core.S
@@ -169,19 +169,19 @@ ENTRY(ce_aes_ecb_encrypt)
 .Lecbencloop3x:
subsr4, r4, #3
bmi .Lecbenc1x
-   vld1.8  {q0-q1}, [r1, :64]!
-   vld1.8  {q2}, [r1, :64]!
+   vld1.8  {q0-q1}, [r1]!
+   vld1.8  {q2}, [r1]!
bl  aes_encrypt_3x
-   vst1.8  {q0-q1}, [r0, :64]!
-   vst1.8  {q2}, [r0, :64]!
+   vst1.8  {q0-q1}, [r0]!
+   vst1.8  {q2}, [r0]!
b   .Lecbencloop3x
 .Lecbenc1x:
addsr4, r4, #3
beq .Lecbencout
 .Lecbencloop:
-   vld1.8  {q0}, [r1, :64]!
+   vld1.8  {q0}, [r1]!
bl  aes_encrypt
-   vst1.8  {q0}, [r0, :64]!
+   vst1.8  {q0}, [r0]!
subsr4, r4, #1
bne .Lecbencloop
 .Lecbencout:
@@ -195,19 +195,19 @@ ENTRY(ce_aes_ecb_decrypt)
 .Lecbdecloop3x:
subsr4, r4, #3
bmi .Lecbdec1x
-   vld1.8  {q0-q1}, [r1, :64]!
-   vld1.8  {q2}, [r1, :64]!
+   vld1.8  {q0-q1}, [r1]!
+   vld1.8  {q2}, [r1]!
bl  aes_decrypt_3x
-   vst1.8  {q0-q1}, [r0, :64]!
-   vst1.8  {q2}, [r0, :64]!
+   vst1.8  {q0-q1}, [r0]!
+   vst1.8  {q2}, [r0]!
b   .Lecbdecloop3x
 .Lecbdec1x:
addsr4, r4, #3
beq .Lecbdecout
 .Lecbdecloop:
-   vld1.8  {q0}, [r1, :64]!
+   vld1.8  {q0}, [r1]!
bl  aes_decrypt
-   vst1.8  {q0}, [r0, :64]!
+   vst1.8  {q0}, [r0]!
subsr4, r4, #1
bne .Lecbdecloop
 .Lecbdecout:
@@ -226,10 +226,10 @@ ENTRY(ce_aes_cbc_encrypt)
vld1.8  {q0}, [r5]
prepare_key r2, r3
 .Lcbcencloop:
-   vld1.8  {q1}, [r1, :64]!@ get next pt block
+   vld1.8  {q1}, [r1]! @ get next pt block
veorq0, q0, q1  @ ..and xor with iv
bl  aes_encrypt
-   vst1.8  {q0}, [r0, :64]!
+   vst1.8  {q0}, [r0]!
subsr4, r4, #1
bne .Lcbcencloop
vst1.8  {q0}, [r5]
@@ -244,8 +244,8 @@ ENTRY(ce_aes_cbc_decrypt)
 .Lcbcdecloop3x:
subsr4, r4, #3
bmi .Lcbcdec1x
-   vld1.8  {q0-q1}, [r1, :64]!
-   vld1.8  {q2}, [r1, :64]!
+   vld1.8  {q0-q1}, [r1]!
+   vld1.8  {q2}, [r1]!
vmovq3, q0
vmovq4, q1
vmovq5, q2
@@ -254,19 +254,19 @@ ENTRY(ce_aes_cbc_decrypt)
veorq1, q1, q3
veorq2, q2, q4
vmovq6, q5
-   vst1.8  {q0-q1}, [r0, :64]!
-   vst1.8  {q2}, [r0, :64]!
+   vst1.8  {q0-q1}, [r0]!
+   vst1.8  {q2}, [r0]!
b   .Lcbcdecloop3x
 .Lcbcdec1x:
addsr4, r4, #3
beq .Lcbcdecout
vmovq15, q14@ preserve last round key
 .Lcbcdecloop:
-   vld1.8  {q0}, [r1, :64]!@ get next ct block
+   vld1.8  {q0}, [r1]! @ get next ct block
veorq14, q15, q6@ combine prev ct with last key
vmovq6, q0
bl  aes_decrypt
-   vst1.8  {q0}, [r0, :64]!
+   vst1.8  {q0}, [r0]!
subsr4, r4, #1
bne .Lcbcdecloop
 .Lcbcdecout:
@@ -300,15 +300,15 @@ ENTRY(ce_aes_ctr_encrypt)
rev ip, r6
add r6, r6, #1
vmovs11, ip
-   vld1.8  {q3-q4}, [r1, :64]!
-   vld1.8  {q5}, [r1, :64]!
+   vld1.8  {q3-q4}, [r1]!
+   vld1.8  {q5}, [r1]!
bl  aes_encrypt_3x
veorq0, q0, q3
veorq1, q1, q4
veorq2, q2, q5
rev ip, r6
-   vst1.8  {q0-q1}, [r0, :64]!
-   vst1.8  {q2}, [r0, :64]!
+   vst1.8  {q0-q1}, [r0]!
+   vst1.8  {q2}, [r0]!
vmovs27, ip
b   .Lctrloop3x
 .Lc

[PATCH v2 06/10] crypto: arm64/chacha20 - remove cra_alignmask

2017-01-23 Thread Ard Biesheuvel
Remove the unnecessary alignmask: it is much more efficient to deal with
the misalignment in the core algorithm than relying on the crypto API to
copy the data to a suitably aligned buffer.

Signed-off-by: Ard Biesheuvel 
---
 arch/arm64/crypto/chacha20-neon-glue.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/arm64/crypto/chacha20-neon-glue.c 
b/arch/arm64/crypto/chacha20-neon-glue.c
index a7f2337d46cf..a7cd575ea223 100644
--- a/arch/arm64/crypto/chacha20-neon-glue.c
+++ b/arch/arm64/crypto/chacha20-neon-glue.c
@@ -93,7 +93,6 @@ static struct skcipher_alg alg = {
.base.cra_priority  = 300,
.base.cra_blocksize = 1,
.base.cra_ctxsize   = sizeof(struct chacha20_ctx),
-   .base.cra_alignmask = 1,
.base.cra_module= THIS_MODULE,
 
.min_keysize= CHACHA20_KEY_SIZE,
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 07/10] crypto: arm64/aes - avoid literals for cross-module symbol references

2017-01-23 Thread Ard Biesheuvel
Using simple adrp/add pairs to refer to the AES lookup tables exposed by
the generic AES driver (which could be loaded far away from this driver
when KASLR is in effect) was unreliable at module load time before commit
41c066f2c4d4 ("arm64: assembler: make adr_l work in modules under KASLR"),
which is why the AES code used literals instead.

So now we can get rid of the literals, and switch to the adr_l macro.

Signed-off-by: Ard Biesheuvel 
---
 arch/arm64/crypto/aes-cipher-core.S | 7 ++-
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/arch/arm64/crypto/aes-cipher-core.S 
b/arch/arm64/crypto/aes-cipher-core.S
index 37590ab8121a..cd58c61e6677 100644
--- a/arch/arm64/crypto/aes-cipher-core.S
+++ b/arch/arm64/crypto/aes-cipher-core.S
@@ -89,8 +89,8 @@ CPU_BE(   rev w8, w8  )
eor w7, w7, w11
eor w8, w8, w12
 
-   ldr tt, =\ttab
-   ldr lt, =\ltab
+   adr_l   tt, \ttab
+   adr_l   lt, \ltab
 
tbnzrounds, #1, 1f
 
@@ -111,9 +111,6 @@ CPU_BE( rev w8, w8  )
stp w5, w6, [out]
stp w7, w8, [out, #8]
ret
-
-   .align  4
-   .ltorg
.endm
 
.align  5
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 09/10] crypto: arm64/aes-neon-blk - tweak performance for low end cores

2017-01-23 Thread Ard Biesheuvel
The non-bitsliced AES implementation using the NEON is highly sensitive
to micro-architectural details, and, as it turns out, the Cortex-A53 on
the Raspberry Pi 3 is a core that can benefit from this code, given that
its scalar AES performance is abysmal (32.9 cycles per byte).

The new bitsliced AES code manages 19.8 cycles per byte on this core,
but can only operate on 8 blocks at a time, which is not supported by
all chaining modes. With a bit of tweaking, we can get the plain NEON
code to run at 22.0 cycles per byte, making it useful for sequential
modes like CBC encryption. (Like bitsliced NEON, the plain NEON
implementation does not use any lookup tables, which makes it easy on
the D-cache, and invulnerable to cache timing attacks)

So tweak the plain NEON AES code to use tbl instructions rather than
shl/sri pairs, and to avoid the need to reload permutation vectors or
other constants from memory in every round.

To allow the ECB and CBC encrypt routines to be reused by the bitsliced
NEON code in a subsequent patch, export them from the module.

Signed-off-by: Ard Biesheuvel 
---
 arch/arm64/crypto/aes-glue.c |   2 +
 arch/arm64/crypto/aes-neon.S | 210 
 2 files changed, 81 insertions(+), 131 deletions(-)

diff --git a/arch/arm64/crypto/aes-glue.c b/arch/arm64/crypto/aes-glue.c
index 8ee1fb7aaa4f..055bc3f61138 100644
--- a/arch/arm64/crypto/aes-glue.c
+++ b/arch/arm64/crypto/aes-glue.c
@@ -409,5 +409,7 @@ static int __init aes_init(void)
 module_cpu_feature_match(AES, aes_init);
 #else
 module_init(aes_init);
+EXPORT_SYMBOL(neon_aes_ecb_encrypt);
+EXPORT_SYMBOL(neon_aes_cbc_encrypt);
 #endif
 module_exit(aes_exit);
diff --git a/arch/arm64/crypto/aes-neon.S b/arch/arm64/crypto/aes-neon.S
index 85f07ead7c5c..0d111a6fc229 100644
--- a/arch/arm64/crypto/aes-neon.S
+++ b/arch/arm64/crypto/aes-neon.S
@@ -1,7 +1,7 @@
 /*
  * linux/arch/arm64/crypto/aes-neon.S - AES cipher for ARMv8 NEON
  *
- * Copyright (C) 2013 Linaro Ltd 
+ * Copyright (C) 2013 - 2017 Linaro Ltd. 
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -25,9 +25,9 @@
/* preload the entire Sbox */
.macro  prepare, sbox, shiftrows, temp
adr \temp, \sbox
-   moviv12.16b, #0x40
+   moviv12.16b, #0x1b
ldr q13, \shiftrows
-   moviv14.16b, #0x1b
+   ldr q14, .Lror32by8
ld1 {v16.16b-v19.16b}, [\temp], #64
ld1 {v20.16b-v23.16b}, [\temp], #64
ld1 {v24.16b-v27.16b}, [\temp], #64
@@ -50,37 +50,32 @@
 
/* apply SubBytes transformation using the the preloaded Sbox */
.macro  sub_bytes, in
-   sub v9.16b, \in\().16b, v12.16b
+   sub v9.16b, \in\().16b, v15.16b
tbl \in\().16b, {v16.16b-v19.16b}, \in\().16b
-   sub v10.16b, v9.16b, v12.16b
+   sub v10.16b, v9.16b, v15.16b
tbx \in\().16b, {v20.16b-v23.16b}, v9.16b
-   sub v11.16b, v10.16b, v12.16b
+   sub v11.16b, v10.16b, v15.16b
tbx \in\().16b, {v24.16b-v27.16b}, v10.16b
tbx \in\().16b, {v28.16b-v31.16b}, v11.16b
.endm
 
/* apply MixColumns transformation */
-   .macro  mix_columns, in
-   mul_by_xv10.16b, \in\().16b, v9.16b, v14.16b
-   rev32   v8.8h, \in\().8h
-   eor \in\().16b, v10.16b, \in\().16b
-   shl v9.4s, v8.4s, #24
-   shl v11.4s, \in\().4s, #24
-   sri v9.4s, v8.4s, #8
-   sri v11.4s, \in\().4s, #8
-   eor v9.16b, v9.16b, v8.16b
-   eor v10.16b, v10.16b, v9.16b
-   eor \in\().16b, v10.16b, v11.16b
-   .endm
-
+   .macro  mix_columns, in, enc
+   .if \enc == 0
/* Inverse MixColumns: pre-multiply by { 5, 0, 4, 0 } */
-   .macro  inv_mix_columns, in
-   mul_by_xv11.16b, \in\().16b, v10.16b, v14.16b
-   mul_by_xv11.16b, v11.16b, v10.16b, v14.16b
-   eor \in\().16b, \in\().16b, v11.16b
-   rev32   v11.8h, v11.8h
-   eor \in\().16b, \in\().16b, v11.16b
-   mix_columns \in
+   mul_by_xv8.16b, \in\().16b, v9.16b, v12.16b
+   mul_by_xv8.16b, v8.16b, v9.16b, v12.16b
+   eor \in\().16b, \in\().16b, v8.16b
+   rev32   v8.8h, v8.8h
+   eor \in\().16b, \in\().16b, v8.16b
+   .endif
+
+   mul_by_xv9.16b, \in\().16b, v8.16b, v12.16b
+   rev32   v8.8h, \in\().8h
+   eor v8.16b, v8.16b, v9.16b
+   eor \in\().16b, \in\().16b, v8.16b
+   tbl \in\().16b, {\in\().16b}, v14.16b

[PATCH v2 10/10] crypto: arm64/aes - replace scalar fallback with plain NEON fallback

2017-01-23 Thread Ard Biesheuvel
The new bitsliced NEON implementation of AES uses a fallback in two
places: CBC encryption (which is strictly sequential, whereas this
driver can only operate efficiently on 8 blocks at a time), and the
XTS tweak generation, which involves encrypting a single AES block
with a different key schedule.

The plain (i.e., non-bitsliced) NEON code is more suitable as a fallback,
given that it is faster than scalar on low end cores (which is what
the NEON implementations target, since high end cores have dedicated
instructions for AES), and shows similar behavior in terms of D-cache
footprint and sensitivity to cache timing attacks. So switch the fallback
handling to the plain NEON driver.

Signed-off-by: Ard Biesheuvel 
---
 arch/arm64/crypto/Kconfig   |  2 +-
 arch/arm64/crypto/aes-neonbs-glue.c | 38 ++--
 2 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/arch/arm64/crypto/Kconfig b/arch/arm64/crypto/Kconfig
index 5de75c3dcbd4..bed7feddfeed 100644
--- a/arch/arm64/crypto/Kconfig
+++ b/arch/arm64/crypto/Kconfig
@@ -86,7 +86,7 @@ config CRYPTO_AES_ARM64_BS
tristate "AES in ECB/CBC/CTR/XTS modes using bit-sliced NEON algorithm"
depends on KERNEL_MODE_NEON
select CRYPTO_BLKCIPHER
-   select CRYPTO_AES_ARM64
+   select CRYPTO_AES_ARM64_NEON_BLK
select CRYPTO_SIMD
 
 endif
diff --git a/arch/arm64/crypto/aes-neonbs-glue.c 
b/arch/arm64/crypto/aes-neonbs-glue.c
index 323dd76ae5f0..863e436ecf89 100644
--- a/arch/arm64/crypto/aes-neonbs-glue.c
+++ b/arch/arm64/crypto/aes-neonbs-glue.c
@@ -10,7 +10,6 @@
 
 #include 
 #include 
-#include 
 #include 
 #include 
 #include 
@@ -42,7 +41,12 @@ asmlinkage void aesbs_xts_encrypt(u8 out[], u8 const in[], 
u8 const rk[],
 asmlinkage void aesbs_xts_decrypt(u8 out[], u8 const in[], u8 const rk[],
  int rounds, int blocks, u8 iv[]);
 
-asmlinkage void __aes_arm64_encrypt(u32 *rk, u8 *out, const u8 *in, int 
rounds);
+/* borrowed from aes-neon-blk.ko */
+asmlinkage void neon_aes_ecb_encrypt(u8 out[], u8 const in[], u32 const rk[],
+int rounds, int blocks, int first);
+asmlinkage void neon_aes_cbc_encrypt(u8 out[], u8 const in[], u32 const rk[],
+int rounds, int blocks, u8 iv[],
+int first);
 
 struct aesbs_ctx {
u8  rk[13 * (8 * AES_BLOCK_SIZE) + 32];
@@ -140,16 +144,28 @@ static int aesbs_cbc_setkey(struct crypto_skcipher *tfm, 
const u8 *in_key,
return 0;
 }
 
-static void cbc_encrypt_one(struct crypto_skcipher *tfm, const u8 *src, u8 
*dst)
+static int cbc_encrypt(struct skcipher_request *req)
 {
+   struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
struct aesbs_cbc_ctx *ctx = crypto_skcipher_ctx(tfm);
+   struct skcipher_walk walk;
+   int err, first = 1;
 
-   __aes_arm64_encrypt(ctx->enc, dst, src, ctx->key.rounds);
-}
+   err = skcipher_walk_virt(&walk, req, true);
 
-static int cbc_encrypt(struct skcipher_request *req)
-{
-   return crypto_cbc_encrypt_walk(req, cbc_encrypt_one);
+   kernel_neon_begin();
+   while (walk.nbytes >= AES_BLOCK_SIZE) {
+   unsigned int blocks = walk.nbytes / AES_BLOCK_SIZE;
+
+   /* fall back to the non-bitsliced NEON implementation */
+   neon_aes_cbc_encrypt(walk.dst.virt.addr, walk.src.virt.addr,
+ctx->enc, ctx->key.rounds, blocks, walk.iv,
+first);
+   err = skcipher_walk_done(&walk, walk.nbytes % AES_BLOCK_SIZE);
+   first = 0;
+   }
+   kernel_neon_end();
+   return err;
 }
 
 static int cbc_decrypt(struct skcipher_request *req)
@@ -254,9 +270,11 @@ static int __xts_crypt(struct skcipher_request *req,
 
err = skcipher_walk_virt(&walk, req, true);
 
-   __aes_arm64_encrypt(ctx->twkey, walk.iv, walk.iv, ctx->key.rounds);
-
kernel_neon_begin();
+
+   neon_aes_ecb_encrypt(walk.iv, walk.iv, ctx->twkey,
+ctx->key.rounds, 1, 1);
+
while (walk.nbytes >= AES_BLOCK_SIZE) {
unsigned int blocks = walk.nbytes / AES_BLOCK_SIZE;
 
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 08/10] crypto: arm64/aes - performance tweak

2017-01-23 Thread Ard Biesheuvel
Shuffle some instructions around in the __hround macro to shave off
0.1 cycles per byte on Cortex-A57.

Signed-off-by: Ard Biesheuvel 
---
 arch/arm64/crypto/aes-cipher-core.S | 52 +++-
 1 file changed, 19 insertions(+), 33 deletions(-)

diff --git a/arch/arm64/crypto/aes-cipher-core.S 
b/arch/arm64/crypto/aes-cipher-core.S
index cd58c61e6677..f2f9cc519309 100644
--- a/arch/arm64/crypto/aes-cipher-core.S
+++ b/arch/arm64/crypto/aes-cipher-core.S
@@ -20,46 +20,32 @@
tt  .reqx4
lt  .reqx2
 
-   .macro  __hround, out0, out1, in0, in1, in2, in3, t0, t1, enc
-   ldp \out0, \out1, [rk], #8
-
-   ubfxw13, \in0, #0, #8
-   ubfxw14, \in1, #8, #8
-   ldr w13, [tt, w13, uxtw #2]
-   ldr w14, [tt, w14, uxtw #2]
-
+   .macro  __pair, enc, reg0, reg1, in0, in1e, in1d, shift
+   ubfx\reg0, \in0, #\shift, #8
.if \enc
-   ubfxw17, \in1, #0, #8
-   ubfxw18, \in2, #8, #8
+   ubfx\reg1, \in1e, #\shift, #8
.else
-   ubfxw17, \in3, #0, #8
-   ubfxw18, \in0, #8, #8
+   ubfx\reg1, \in1d, #\shift, #8
.endif
-   ldr w17, [tt, w17, uxtw #2]
-   ldr w18, [tt, w18, uxtw #2]
+   ldr \reg0, [tt, \reg0, uxtw #2]
+   ldr \reg1, [tt, \reg1, uxtw #2]
+   .endm
 
-   ubfxw15, \in2, #16, #8
-   ubfxw16, \in3, #24, #8
-   ldr w15, [tt, w15, uxtw #2]
-   ldr w16, [tt, w16, uxtw #2]
+   .macro  __hround, out0, out1, in0, in1, in2, in3, t0, t1, enc
+   ldp \out0, \out1, [rk], #8
 
-   .if \enc
-   ubfx\t0, \in3, #16, #8
-   ubfx\t1, \in0, #24, #8
-   .else
-   ubfx\t0, \in1, #16, #8
-   ubfx\t1, \in2, #24, #8
-   .endif
-   ldr \t0, [tt, \t0, uxtw #2]
-   ldr \t1, [tt, \t1, uxtw #2]
+   __pair  \enc, w13, w14, \in0, \in1, \in3, 0
+   __pair  \enc, w15, w16, \in1, \in2, \in0, 8
+   __pair  \enc, w17, w18, \in2, \in3, \in1, 16
+   __pair  \enc, \t0, \t1, \in3, \in0, \in2, 24
 
eor \out0, \out0, w13
-   eor \out1, \out1, w17
-   eor \out0, \out0, w14, ror #24
-   eor \out1, \out1, w18, ror #24
-   eor \out0, \out0, w15, ror #16
-   eor \out1, \out1, \t0, ror #16
-   eor \out0, \out0, w16, ror #8
+   eor \out1, \out1, w14
+   eor \out0, \out0, w15, ror #24
+   eor \out1, \out1, w16, ror #24
+   eor \out0, \out0, w17, ror #16
+   eor \out1, \out1, w18, ror #16
+   eor \out0, \out0, \t0, ror #8
eor \out1, \out1, \t1, ror #8
.endm
 
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 04/10] crypto: arm64/aes-ce-ccm - remove cra_alignmask

2017-01-23 Thread Ard Biesheuvel
Remove the unnecessary alignmask: it is much more efficient to deal with
the misalignment in the core algorithm than relying on the crypto API to
copy the data to a suitably aligned buffer.

Signed-off-by: Ard Biesheuvel 
---
 arch/arm64/crypto/aes-ce-ccm-glue.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/arm64/crypto/aes-ce-ccm-glue.c 
b/arch/arm64/crypto/aes-ce-ccm-glue.c
index cc5515dac74a..6a7dbc7c83a6 100644
--- a/arch/arm64/crypto/aes-ce-ccm-glue.c
+++ b/arch/arm64/crypto/aes-ce-ccm-glue.c
@@ -258,7 +258,6 @@ static struct aead_alg ccm_aes_alg = {
.cra_priority   = 300,
.cra_blocksize  = 1,
.cra_ctxsize= sizeof(struct crypto_aes_ctx),
-   .cra_alignmask  = 7,
.cra_module = THIS_MODULE,
},
.ivsize = AES_BLOCK_SIZE,
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 05/10] crypto: arm64/aes-blk - remove cra_alignmask

2017-01-23 Thread Ard Biesheuvel
Remove the unnecessary alignmask: it is much more efficient to deal with
the misalignment in the core algorithm than relying on the crypto API to
copy the data to a suitably aligned buffer.

Signed-off-by: Ard Biesheuvel 
---
 arch/arm64/crypto/aes-glue.c  | 16 ++--
 arch/arm64/crypto/aes-modes.S |  8 +++-
 2 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/arch/arm64/crypto/aes-glue.c b/arch/arm64/crypto/aes-glue.c
index 5164aaf82c6a..8ee1fb7aaa4f 100644
--- a/arch/arm64/crypto/aes-glue.c
+++ b/arch/arm64/crypto/aes-glue.c
@@ -215,14 +215,15 @@ static int ctr_encrypt(struct skcipher_request *req)
u8 *tsrc = walk.src.virt.addr;
 
/*
-* Minimum alignment is 8 bytes, so if nbytes is <= 8, we need
-* to tell aes_ctr_encrypt() to only read half a block.
+* Tell aes_ctr_encrypt() to process a tail block.
 */
-   blocks = (nbytes <= 8) ? -1 : 1;
+   blocks = -1;
 
-   aes_ctr_encrypt(tail, tsrc, (u8 *)ctx->key_enc, rounds,
+   aes_ctr_encrypt(tail, NULL, (u8 *)ctx->key_enc, rounds,
blocks, walk.iv, first);
-   memcpy(tdst, tail, nbytes);
+   if (tdst != tsrc)
+   memcpy(tdst, tsrc, nbytes);
+   crypto_xor(tdst, tail, nbytes);
err = skcipher_walk_done(&walk, 0);
}
kernel_neon_end();
@@ -282,7 +283,6 @@ static struct skcipher_alg aes_algs[] = { {
.cra_flags  = CRYPTO_ALG_INTERNAL,
.cra_blocksize  = AES_BLOCK_SIZE,
.cra_ctxsize= sizeof(struct crypto_aes_ctx),
-   .cra_alignmask  = 7,
.cra_module = THIS_MODULE,
},
.min_keysize= AES_MIN_KEY_SIZE,
@@ -298,7 +298,6 @@ static struct skcipher_alg aes_algs[] = { {
.cra_flags  = CRYPTO_ALG_INTERNAL,
.cra_blocksize  = AES_BLOCK_SIZE,
.cra_ctxsize= sizeof(struct crypto_aes_ctx),
-   .cra_alignmask  = 7,
.cra_module = THIS_MODULE,
},
.min_keysize= AES_MIN_KEY_SIZE,
@@ -315,7 +314,6 @@ static struct skcipher_alg aes_algs[] = { {
.cra_flags  = CRYPTO_ALG_INTERNAL,
.cra_blocksize  = 1,
.cra_ctxsize= sizeof(struct crypto_aes_ctx),
-   .cra_alignmask  = 7,
.cra_module = THIS_MODULE,
},
.min_keysize= AES_MIN_KEY_SIZE,
@@ -332,7 +330,6 @@ static struct skcipher_alg aes_algs[] = { {
.cra_priority   = PRIO - 1,
.cra_blocksize  = 1,
.cra_ctxsize= sizeof(struct crypto_aes_ctx),
-   .cra_alignmask  = 7,
.cra_module = THIS_MODULE,
},
.min_keysize= AES_MIN_KEY_SIZE,
@@ -350,7 +347,6 @@ static struct skcipher_alg aes_algs[] = { {
.cra_flags  = CRYPTO_ALG_INTERNAL,
.cra_blocksize  = AES_BLOCK_SIZE,
.cra_ctxsize= sizeof(struct crypto_aes_xts_ctx),
-   .cra_alignmask  = 7,
.cra_module = THIS_MODULE,
},
.min_keysize= 2 * AES_MIN_KEY_SIZE,
diff --git a/arch/arm64/crypto/aes-modes.S b/arch/arm64/crypto/aes-modes.S
index 838dad5c209f..92b982a8b112 100644
--- a/arch/arm64/crypto/aes-modes.S
+++ b/arch/arm64/crypto/aes-modes.S
@@ -337,7 +337,7 @@ AES_ENTRY(aes_ctr_encrypt)
 
 .Lctrcarrydone:
subsw4, w4, #1
-   bmi .Lctrhalfblock  /* blocks < 0 means 1/2 block */
+   bmi .Lctrtailblock  /* blocks <0 means tail block */
ld1 {v3.16b}, [x1], #16
eor v3.16b, v0.16b, v3.16b
st1 {v3.16b}, [x0], #16
@@ -348,10 +348,8 @@ AES_ENTRY(aes_ctr_encrypt)
FRAME_POP
ret
 
-.Lctrhalfblock:
-   ld1 {v3.8b}, [x1]
-   eor v3.8b, v0.8b, v3.8b
-   st1 {v3.8b}, [x0]
+.Lctrtailblock:
+   st1 {v0.16b}, [x0]
FRAME_POP
ret
 
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 03/10] crypto: arm/chacha20 - remove cra_alignmask

2017-01-23 Thread Ard Biesheuvel
Remove the unnecessary alignmask: it is much more efficient to deal with
the misalignment in the core algorithm than relying on the crypto API to
copy the data to a suitably aligned buffer.

Signed-off-by: Ard Biesheuvel 
---
 arch/arm/crypto/chacha20-neon-glue.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/arm/crypto/chacha20-neon-glue.c 
b/arch/arm/crypto/chacha20-neon-glue.c
index 592f75ae4fa1..59a7be08e80c 100644
--- a/arch/arm/crypto/chacha20-neon-glue.c
+++ b/arch/arm/crypto/chacha20-neon-glue.c
@@ -94,7 +94,6 @@ static struct skcipher_alg alg = {
.base.cra_priority  = 300,
.base.cra_blocksize = 1,
.base.cra_ctxsize   = sizeof(struct chacha20_ctx),
-   .base.cra_alignmask = 1,
.base.cra_module= THIS_MODULE,
 
.min_keysize= CHACHA20_KEY_SIZE,
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 00/10] crypto - AES for ARM/arm64 updates for v4.11 (round #2)

2017-01-23 Thread Ard Biesheuvel
Patch #1 is a fix for the CBC chaining issue that was discussed on the
mailing list. The driver itself is queued for v4.11, so this fix can go
right on top.

Patches #2 - #6 clear the cra_alignmasks of various drivers: all NEON
capable CPUs can perform unaligned accesses, and the advantage of using
the slightly faster aligned accessors (which only exist on ARM not arm64)
is certainly outweighed by the cost of copying data to suitably aligned
buffers.

NOTE: patch #5 won't apply unless 'crypto: arm64/aes-blk - honour iv_out
requirement in CBC and CTR modes' is applied first, which was sent out
separately as a bugfix for v3.16 - v4.9. If this is a problem, this patch
can wait.

Patch #7 and #8 are minor tweaks to the new scalar AES code.

Patch #9 improves the performance of the plain NEON AES code, to make it
more suitable as a fallback for the new bitsliced NEON code, which can
only operate on 8 blocks in parallel, and needs another driver to perform
CBC encryption or XTS tweak generation.

Patch #10 updates the new bitsliced AES NEON code to switch to the plain
NEON driver as a fallback.

Patches #9 and #10 improve the performance of CBC encryption by ~35% on
low end cores such as the Cortex-A53 that can be found in the Raspberry Pi3

Changes since v1:
- shave off another few cycles from the sequential AES NEON code (patch #9)

Ard Biesheuvel (10):
  crypto: arm64/aes-neon-bs - honour iv_out requirement in CTR mode
  crypto: arm/aes-ce - remove cra_alignmask
  crypto: arm/chacha20 - remove cra_alignmask
  crypto: arm64/aes-ce-ccm - remove cra_alignmask
  crypto: arm64/aes-blk - remove cra_alignmask
  crypto: arm64/chacha20 - remove cra_alignmask
  crypto: arm64/aes - avoid literals for cross-module symbol references
  crypto: arm64/aes - performance tweak
  crypto: arm64/aes-neon-blk - tweak performance for low end cores
  crypto: arm64/aes - replace scalar fallback with plain NEON fallback

 arch/arm/crypto/aes-ce-core.S  |  84 
 arch/arm/crypto/aes-ce-glue.c  |  15 +-
 arch/arm/crypto/chacha20-neon-glue.c   |   1 -
 arch/arm64/crypto/Kconfig  |   2 +-
 arch/arm64/crypto/aes-ce-ccm-glue.c|   1 -
 arch/arm64/crypto/aes-cipher-core.S|  59 ++
 arch/arm64/crypto/aes-glue.c   |  18 +-
 arch/arm64/crypto/aes-modes.S  |   8 +-
 arch/arm64/crypto/aes-neon.S   | 210 
 arch/arm64/crypto/aes-neonbs-core.S|  25 ++-
 arch/arm64/crypto/aes-neonbs-glue.c|  38 +++-
 arch/arm64/crypto/chacha20-neon-glue.c |   1 -
 12 files changed, 203 insertions(+), 259 deletions(-)

-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 01/10] crypto: arm64/aes-neon-bs - honour iv_out requirement in CTR mode

2017-01-23 Thread Ard Biesheuvel
Update the new bitsliced NEON AES implementation in CTR mode to return
the next IV back to the skcipher API client. This is necessary for
chaining to work correctly.

Note that this is only done if the request is a round multiple of the
block size, since otherwise, chaining is impossible anyway.

Signed-off-by: Ard Biesheuvel 
---
 arch/arm64/crypto/aes-neonbs-core.S | 25 +---
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/arch/arm64/crypto/aes-neonbs-core.S 
b/arch/arm64/crypto/aes-neonbs-core.S
index 8d0cdaa2768d..2ada12dd768e 100644
--- a/arch/arm64/crypto/aes-neonbs-core.S
+++ b/arch/arm64/crypto/aes-neonbs-core.S
@@ -874,12 +874,19 @@ CPU_LE(   rev x8, x8  )
cselx4, x4, xzr, pl
cselx9, x9, xzr, le
 
+   tbnzx9, #1, 0f
next_ctrv1
+   tbnzx9, #2, 0f
next_ctrv2
+   tbnzx9, #3, 0f
next_ctrv3
+   tbnzx9, #4, 0f
next_ctrv4
+   tbnzx9, #5, 0f
next_ctrv5
+   tbnzx9, #6, 0f
next_ctrv6
+   tbnzx9, #7, 0f
next_ctrv7
 
 0: mov bskey, x2
@@ -928,11 +935,11 @@ CPU_LE(   rev x8, x8  )
eor v5.16b, v5.16b, v15.16b
st1 {v5.16b}, [x0], #16
 
-   next_ctrv0
+8: next_ctrv0
cbnzx4, 99b
 
 0: st1 {v0.16b}, [x5]
-8: ldp x29, x30, [sp], #16
+9: ldp x29, x30, [sp], #16
ret
 
/*
@@ -941,23 +948,23 @@ CPU_LE(   rev x8, x8  )
 */
 1: cbz x6, 8b
st1 {v1.16b}, [x5]
-   b   8b
+   b   9b
 2: cbz x6, 8b
st1 {v4.16b}, [x5]
-   b   8b
+   b   9b
 3: cbz x6, 8b
st1 {v6.16b}, [x5]
-   b   8b
+   b   9b
 4: cbz x6, 8b
st1 {v3.16b}, [x5]
-   b   8b
+   b   9b
 5: cbz x6, 8b
st1 {v7.16b}, [x5]
-   b   8b
+   b   9b
 6: cbz x6, 8b
st1 {v2.16b}, [x5]
-   b   8b
+   b   9b
 7: cbz x6, 8b
st1 {v5.16b}, [x5]
-   b   8b
+   b   9b
 ENDPROC(aesbs_ctr_encrypt)
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] crypto: camellia: add missing declarations

2017-01-23 Thread Herbert Xu
On Mon, Jan 16, 2017 at 05:06:51PM +0100, Nicholas Mc Guire wrote:
> Add declarations for the camellia substitution box to allow a clean build.
> 
> Signed-off-by: Nicholas Mc Guire 
> ---
> Problem reported by sparse
> arch/x86/crypto/camellia_glue.c:65:21: warning: symbol 'camellia_sp1000' 
> was not declared. Should it be static?
> arch/x86/crypto/camellia_glue.c:154:21: warning: symbol 'camellia_sp22000222' 
> was not declared. Should it be static?
> arch/x86/crypto/camellia_glue.c:243:21: warning: symbol 'camellia_sp03303033' 
> was not declared. Should it be static?
> arch/x86/crypto/camellia_glue.c:332:21: warning: symbol 'camellia_sp0004' 
> was not declared. Should it be static?
> arch/x86/crypto/camellia_glue.c:421:21: warning: symbol 'camellia_sp02220222' 
> was not declared. Should it be static?
> arch/x86/crypto/camellia_glue.c:510:21: warning: symbol 'camellia_sp30333033' 
> was not declared. Should it be static?
> arch/x86/crypto/camellia_glue.c:599:21: warning: symbol 'camellia_sp44044404' 
> was not declared. Should it be static?
> arch/x86/crypto/camellia_glue.c:688:21: warning: symbol 'camellia_sp11101110' 
> was not declared. Should it be static?
> 
> Patch was compile tested with: x86_64_defconfig +
> CONFIG_CRYPTO_CAMELLIA_X86_64=m
> 
> Patch is against 4.10-rc3 (localversion-next is next-20170116)

This is arguably a sparse bug.  These variables are only referenced
by assembly code and already carries the __visible tag.  So sparse
should learn to suppress this warning when __visible is present.

Thanks,
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v1 0/4]crypto:chcr- Bug Fixes for 4.10

2017-01-23 Thread Herbert Xu
On Fri, Jan 13, 2017 at 05:59:19PM +0530, Harsh Jain wrote:
> This patch series is based on Herbert's cryptodev-2.6 tree.
> It includes several critical bug fixes.
> 
> Atul Gupta (3):
>   crypto:chcr-Change flow IDs
>   crypto:chcr- Fix panic on dma_unmap_sg
>   crypto:chcr- Check device is allocated before use
> Julia Lawall (1):
>   crypto:chcr-fix itnull.cocci warnings

Patches 2 and 3 look critical, but the other ones do not.  Please
don't mix fixes targeted for this cycle with other patches.

Please resubmit them as two separate series.

Thanks,
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 00/13] crypto: copy AAD during encrypt for AEAD ciphers

2017-01-23 Thread Herbert Xu
On Fri, Jan 20, 2017 at 06:07:04PM +0100, Cyrille Pitchen wrote:
> Hi all,
> 
> Le 13/01/2017 à 12:39, Herbert Xu a écrit :
> > On Fri, Jan 13, 2017 at 12:36:56PM +0100, Stephan Müller wrote:
> >>
> >> I thought I understood that you would not want to see it in any 
> >> implementation. But, ok, if you want to leave it.
> > 
> > If you remove it from authenc then authenc will be broken.
> > 
> 
> Hence if the copy of the associated data is needed in the crypto/authenc.c
> driver, then I should also keep this copy in the drivers/crypto/atmel-aes.c
> for authenc(hmac(shaX),cbc-aes) algorithms [1], shouldn't I?
> 
> If so, should I keep the current not optimized implementation of
> atmel_aes_authenc_copy_assoc() or try to use the code extracted by Stephan
> from crypto/authenc.c using the null cipher as proposed in this thread?
> 
> As said earlier in this thread, copying the associated data is not a so big
> deal when compared to the main crypto processing.

Please just ignore this for now.  We have not decided to require
the copying of the AAD in the kernel API.

Thanks,
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC PATCH 0/6] Add bulk skcipher requests to crypto API and dm-crypt

2017-01-23 Thread Herbert Xu
On Thu, Jan 19, 2017 at 03:21:37PM +0100, Ondrej Mosnáček wrote:
> 
> Hm, I just looked at what the IPsec IV generation is actually doing
> and it seems to me that it's basically a crypto template that just
> somehow transforms the IV before it is passed to the child cipher... I
> thought for a while that you were implying that there already is some
> facility in the crypto API that allows submitting multiple messages +
> some initial sequence number that is auto-incremented and IVs are
> generated from the numbers. However, I could not find anything like
> that in the code, so now I think what you meant was just that I should
> somehow pull the actual IV generators into the crypto layer so that
> the IVs can be generated inside the hardware.

IPsec currently only deals with one packet at a time, but the
point is that the IV generator handles everything transparently
and the IV is actually part of the cipher text for the AEAD op.

IOW it would be trivial to extend our current IPsec IV generators
to handle multiple packets as the IVs are embedded with the cipher
text.

Cheers,
-- 
Email: Herbert Xu 
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html