2017-04-21 20:54:43

by Cabiddu, Giovanni

[permalink] [raw]
Subject: [PATCH v2 1/2] crypto: scomp - allow registration of multiple scomps

Add crypto_register_scomps and crypto_unregister_scomps to allow
the registration of multiple implementations with one call.

Signed-off-by: Giovanni Cabiddu <[email protected]>
---
crypto/scompress.c | 29 +++++++++++++++++++++++++++++
include/crypto/internal/scompress.h | 3 +++
2 files changed, 32 insertions(+)

diff --git a/crypto/scompress.c b/crypto/scompress.c
index 6b048b3..ae1d3cf 100644
--- a/crypto/scompress.c
+++ b/crypto/scompress.c
@@ -353,5 +353,34 @@ int crypto_unregister_scomp(struct scomp_alg *alg)
}
EXPORT_SYMBOL_GPL(crypto_unregister_scomp);

+int crypto_register_scomps(struct scomp_alg *algs, int count)
+{
+ int i, ret;
+
+ for (i = 0; i < count; i++) {
+ ret = crypto_register_scomp(&algs[i]);
+ if (ret)
+ goto err;
+ }
+
+ return 0;
+
+err:
+ for (--i; i >= 0; --i)
+ crypto_unregister_scomp(&algs[i]);
+
+ return ret;
+}
+EXPORT_SYMBOL_GPL(crypto_register_scomps);
+
+void crypto_unregister_scomps(struct scomp_alg *algs, int count)
+{
+ int i;
+
+ for (i = count - 1; i >= 0; --i)
+ crypto_unregister_scomp(&algs[i]);
+}
+EXPORT_SYMBOL_GPL(crypto_unregister_scomps);
+
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Synchronous compression type");
diff --git a/include/crypto/internal/scompress.h b/include/crypto/internal/scompress.h
index 3fda3c5..ccad9b2 100644
--- a/include/crypto/internal/scompress.h
+++ b/include/crypto/internal/scompress.h
@@ -133,4 +133,7 @@ int crypto_register_scomp(struct scomp_alg *alg);
*/
int crypto_unregister_scomp(struct scomp_alg *alg);

+int crypto_register_scomps(struct scomp_alg *algs, int count);
+void crypto_unregister_scomps(struct scomp_alg *algs, int count);
+
#endif
--
2.9.3


2017-04-21 20:54:46

by Cabiddu, Giovanni

[permalink] [raw]
Subject: [PATCH v2 2/2] crypto: scomp - add support for deflate rfc1950 (zlib)

Add scomp backend for zlib-deflate compression algorithm.
This backend outputs data using the format defined in rfc1950
(raw deflate surrounded by zlib header and footer).

Signed-off-by: Giovanni Cabiddu <[email protected]>
---
crypto/deflate.c | 61 ++++++++++++++++++++++++++++++++-------------
crypto/testmgr.c | 10 ++++++++
crypto/testmgr.h | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 129 insertions(+), 17 deletions(-)

diff --git a/crypto/deflate.c b/crypto/deflate.c
index f942cb3..94ec3b3 100644
--- a/crypto/deflate.c
+++ b/crypto/deflate.c
@@ -43,20 +43,24 @@ struct deflate_ctx {
struct z_stream_s decomp_stream;
};

-static int deflate_comp_init(struct deflate_ctx *ctx)
+static int deflate_comp_init(struct deflate_ctx *ctx, int format)
{
int ret = 0;
struct z_stream_s *stream = &ctx->comp_stream;

stream->workspace = vzalloc(zlib_deflate_workspacesize(
- -DEFLATE_DEF_WINBITS, DEFLATE_DEF_MEMLEVEL));
+ MAX_WBITS, MAX_MEM_LEVEL));
if (!stream->workspace) {
ret = -ENOMEM;
goto out;
}
- ret = zlib_deflateInit2(stream, DEFLATE_DEF_LEVEL, Z_DEFLATED,
- -DEFLATE_DEF_WINBITS, DEFLATE_DEF_MEMLEVEL,
- Z_DEFAULT_STRATEGY);
+ if (format)
+ ret = zlib_deflateInit(stream, 3);
+ else
+ ret = zlib_deflateInit2(stream, DEFLATE_DEF_LEVEL, Z_DEFLATED,
+ -DEFLATE_DEF_WINBITS,
+ DEFLATE_DEF_MEMLEVEL,
+ Z_DEFAULT_STRATEGY);
if (ret != Z_OK) {
ret = -EINVAL;
goto out_free;
@@ -68,7 +72,7 @@ static int deflate_comp_init(struct deflate_ctx *ctx)
goto out;
}

-static int deflate_decomp_init(struct deflate_ctx *ctx)
+static int deflate_decomp_init(struct deflate_ctx *ctx, int format)
{
int ret = 0;
struct z_stream_s *stream = &ctx->decomp_stream;
@@ -78,7 +82,10 @@ static int deflate_decomp_init(struct deflate_ctx *ctx)
ret = -ENOMEM;
goto out;
}
- ret = zlib_inflateInit2(stream, -DEFLATE_DEF_WINBITS);
+ if (format)
+ ret = zlib_inflateInit(stream);
+ else
+ ret = zlib_inflateInit2(stream, -DEFLATE_DEF_WINBITS);
if (ret != Z_OK) {
ret = -EINVAL;
goto out_free;
@@ -102,21 +109,21 @@ static void deflate_decomp_exit(struct deflate_ctx *ctx)
vfree(ctx->decomp_stream.workspace);
}

-static int __deflate_init(void *ctx)
+static int __deflate_init(void *ctx, int format)
{
int ret;

- ret = deflate_comp_init(ctx);
+ ret = deflate_comp_init(ctx, format);
if (ret)
goto out;
- ret = deflate_decomp_init(ctx);
+ ret = deflate_decomp_init(ctx, format);
if (ret)
deflate_comp_exit(ctx);
out:
return ret;
}

-static void *deflate_alloc_ctx(struct crypto_scomp *tfm)
+static void *gen_deflate_alloc_ctx(struct crypto_scomp *tfm, int format)
{
struct deflate_ctx *ctx;
int ret;
@@ -125,7 +132,7 @@ static void *deflate_alloc_ctx(struct crypto_scomp *tfm)
if (!ctx)
return ERR_PTR(-ENOMEM);

- ret = __deflate_init(ctx);
+ ret = __deflate_init(ctx, format);
if (ret) {
kfree(ctx);
return ERR_PTR(ret);
@@ -134,11 +141,21 @@ static void *deflate_alloc_ctx(struct crypto_scomp *tfm)
return ctx;
}

+static void *deflate_alloc_ctx(struct crypto_scomp *tfm)
+{
+ return gen_deflate_alloc_ctx(tfm, 0);
+}
+
+static void *zlib_deflate_alloc_ctx(struct crypto_scomp *tfm)
+{
+ return gen_deflate_alloc_ctx(tfm, 1);
+}
+
static int deflate_init(struct crypto_tfm *tfm)
{
struct deflate_ctx *ctx = crypto_tfm_ctx(tfm);

- return __deflate_init(ctx);
+ return __deflate_init(ctx, 0);
}

static void __deflate_exit(void *ctx)
@@ -272,7 +289,7 @@ static struct crypto_alg alg = {
.coa_decompress = deflate_decompress } }
};

-static struct scomp_alg scomp = {
+static struct scomp_alg scomp[] = { {
.alloc_ctx = deflate_alloc_ctx,
.free_ctx = deflate_free_ctx,
.compress = deflate_scompress,
@@ -282,7 +299,17 @@ static struct scomp_alg scomp = {
.cra_driver_name = "deflate-scomp",
.cra_module = THIS_MODULE,
}
-};
+}, {
+ .alloc_ctx = zlib_deflate_alloc_ctx,
+ .free_ctx = deflate_free_ctx,
+ .compress = deflate_scompress,
+ .decompress = deflate_sdecompress,
+ .base = {
+ .cra_name = "zlib-deflate",
+ .cra_driver_name = "zlib-deflate-scomp",
+ .cra_module = THIS_MODULE,
+ }
+} };

static int __init deflate_mod_init(void)
{
@@ -292,7 +319,7 @@ static int __init deflate_mod_init(void)
if (ret)
return ret;

- ret = crypto_register_scomp(&scomp);
+ ret = crypto_register_scomps(scomp, ARRAY_SIZE(scomp));
if (ret) {
crypto_unregister_alg(&alg);
return ret;
@@ -304,7 +331,7 @@ static int __init deflate_mod_init(void)
static void __exit deflate_mod_fini(void)
{
crypto_unregister_alg(&alg);
- crypto_unregister_scomp(&scomp);
+ crypto_unregister_scomps(scomp, ARRAY_SIZE(scomp));
}

module_init(deflate_mod_init);
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index 8373c72..845191d 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -3512,6 +3512,16 @@ static const struct alg_test_desc alg_test_descs[] = {
.dec = __VECS(tf_xts_dec_tv_template)
}
}
+ }, {
+ .alg = "zlib-deflate",
+ .test = alg_test_comp,
+ .fips_allowed = 1,
+ .suite = {
+ .comp = {
+ .comp = __VECS(zlib_deflate_comp_tv_template),
+ .decomp = __VECS(zlib_deflate_decomp_tv_template)
+ }
+ }
}
};

diff --git a/crypto/testmgr.h b/crypto/testmgr.h
index 15c043f..4293573 100644
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
@@ -33204,6 +33204,81 @@ static const struct comp_testvec deflate_decomp_tv_template[] = {
},
};

+static const struct comp_testvec zlib_deflate_comp_tv_template[] = {
+ {
+ .inlen = 70,
+ .outlen = 44,
+ .input = "Join us now and share the software "
+ "Join us now and share the software ",
+ .output = "\x78\x5e\xf3\xca\xcf\xcc\x53\x28"
+ "\x2d\x56\xc8\xcb\x2f\x57\x48\xcc"
+ "\x4b\x51\x28\xce\x48\x2c\x4a\x55"
+ "\x28\xc9\x48\x55\x28\xce\x4f\x2b"
+ "\x29\x07\x71\xbc\x08\x2b\x01\x00"
+ "\x7c\x65\x19\x3d",
+ }, {
+ .inlen = 191,
+ .outlen = 129,
+ .input = "This document describes a compression method based on the DEFLATE"
+ "compression algorithm. This document defines the application of "
+ "the DEFLATE algorithm to the IP Payload Compression Protocol.",
+ .output = "\x78\x5e\x5d\xce\x41\x0a\xc3\x30"
+ "\x0c\x04\xc0\xaf\xec\x0b\xf2\x87"
+ "\xd2\xa6\x50\xe8\xc1\x07\x7f\x40"
+ "\xb1\x95\x5a\x60\x5b\xc6\x56\x0f"
+ "\xfd\x7d\x93\x1e\x42\xe8\x51\xec"
+ "\xee\x20\x9f\x64\x20\x6a\x78\x17"
+ "\xae\x86\xc8\x23\x74\x59\x78\x80"
+ "\x10\xb4\xb4\xce\x63\x88\x56\x14"
+ "\xb6\xa4\x11\x0b\x0d\x8e\xd8\x6e"
+ "\x4b\x8c\xdb\x7c\x7f\x5e\xfc\x7c"
+ "\xae\x51\x7e\x69\x17\x4b\x65\x02"
+ "\xfc\x1f\xbc\x4a\xdd\xd8\x7d\x48"
+ "\xad\x65\x09\x64\x3b\xac\xeb\xd9"
+ "\xc2\x01\xc0\xf4\x17\x3c\x1c\x1c"
+ "\x7d\xb2\x52\xc4\xf5\xf4\x8f\xeb"
+ "\x6a\x1a\x34\x4f\x5f\x2e\x32\x45"
+ "\x4e",
+ },
+};
+
+static const struct comp_testvec zlib_deflate_decomp_tv_template[] = {
+ {
+ .inlen = 128,
+ .outlen = 191,
+ .input = "\x78\x9c\x5d\x8d\x31\x0e\xc2\x30"
+ "\x10\x04\xbf\xb2\x2f\xc8\x1f\x10"
+ "\x04\x09\x89\xc2\x85\x3f\x70\xb1"
+ "\x2f\xf8\x24\xdb\x67\xd9\x47\xc1"
+ "\xef\x49\x68\x12\x51\xae\x76\x67"
+ "\xd6\x27\x19\x88\x1a\xde\x85\xab"
+ "\x21\xf2\x08\x5d\x16\x1e\x20\x04"
+ "\x2d\xad\xf3\x18\xa2\x15\x85\x2d"
+ "\x69\xc4\x42\x83\x23\xb6\x6c\x89"
+ "\x71\x9b\xef\xcf\x8b\x9f\xcf\x33"
+ "\xca\x2f\xed\x62\xa9\x4c\x80\xff"
+ "\x13\xaf\x52\x37\xed\x0e\x52\x6b"
+ "\x59\x02\xd9\x4e\xe8\x7a\x76\x1d"
+ "\x02\x98\xfe\x8a\x87\x83\xa3\x4f"
+ "\x56\x8a\xb8\x9e\x8e\x5c\x57\xd3"
+ "\xa0\x79\xfa\x02\x2e\x32\x45\x4e",
+ .output = "This document describes a compression method based on the DEFLATE"
+ "compression algorithm. This document defines the application of "
+ "the DEFLATE algorithm to the IP Payload Compression Protocol.",
+ }, {
+ .inlen = 44,
+ .outlen = 70,
+ .input = "\x78\x9c\xf3\xca\xcf\xcc\x53\x28"
+ "\x2d\x56\xc8\xcb\x2f\x57\x48\xcc"
+ "\x4b\x51\x28\xce\x48\x2c\x4a\x55"
+ "\x28\xc9\x48\x55\x28\xce\x4f\x2b"
+ "\x29\x07\x71\xbc\x08\x2b\x01\x00"
+ "\x7c\x65\x19\x3d",
+ .output = "Join us now and share the software "
+ "Join us now and share the software ",
+ },
+};
+
/*
* LZO test vectors (null-terminated strings).
*/
--
2.9.3

2017-04-24 10:39:42

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] crypto: scomp - allow registration of multiple scomps

On Fri, Apr 21, 2017 at 09:54:29PM +0100, Giovanni Cabiddu wrote:
> Add crypto_register_scomps and crypto_unregister_scomps to allow
> the registration of multiple implementations with one call.
>
> Signed-off-by: Giovanni Cabiddu <[email protected]>

All applied. Thanks.
--
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2017-05-15 18:58:33

by abed mohammad kamaluddin

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] crypto: scomp - add support for deflate rfc1950 (zlib)

Hi,

I have a few queries regarding zlib and in general on whether changes
to acomp interface is planned or would be acceptable. Some of these
are from point of view of exporting compression to user space and
utilizing HW implementations.

- A setup api is required to support different configurations; this
was also proposed as part of initial acomp implementations.
- Zlib also supports notion of preset dictionary and for
decompression, history bytes upto window size might be required to be
provided as part of the request. For HW algorithms supporting these
features, the current acomp api's would need to be extended.
- Currently acomp supports operations only in one go, are there plans
to extend acomp beyond this? For hardware algos supporting partial
ops, we will need to add fields like bytes consumed, flush params,ctx
parameter etc.and export to user.

Thanks,
Abed (Cavium)


On Sat, Apr 22, 2017 at 2:24 AM, Giovanni Cabiddu
<[email protected]> wrote:
> Add scomp backend for zlib-deflate compression algorithm.
> This backend outputs data using the format defined in rfc1950
> (raw deflate surrounded by zlib header and footer).
>
> Signed-off-by: Giovanni Cabiddu <[email protected]>
> ---
> crypto/deflate.c | 61 ++++++++++++++++++++++++++++++++-------------
> crypto/testmgr.c | 10 ++++++++
> crypto/testmgr.h | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 129 insertions(+), 17 deletions(-)
>
> diff --git a/crypto/deflate.c b/crypto/deflate.c
> index f942cb3..94ec3b3 100644
> --- a/crypto/deflate.c
> +++ b/crypto/deflate.c
> @@ -43,20 +43,24 @@ struct deflate_ctx {
> struct z_stream_s decomp_stream;
> };
>
> -static int deflate_comp_init(struct deflate_ctx *ctx)
> +static int deflate_comp_init(struct deflate_ctx *ctx, int format)
> {
> int ret = 0;
> struct z_stream_s *stream = &ctx->comp_stream;
>
> stream->workspace = vzalloc(zlib_deflate_workspacesize(
> - -DEFLATE_DEF_WINBITS, DEFLATE_DEF_MEMLEVEL));
> + MAX_WBITS, MAX_MEM_LEVEL));
> if (!stream->workspace) {
> ret = -ENOMEM;
> goto out;
> }
> - ret = zlib_deflateInit2(stream, DEFLATE_DEF_LEVEL, Z_DEFLATED,
> - -DEFLATE_DEF_WINBITS, DEFLATE_DEF_MEMLEVEL,
> - Z_DEFAULT_STRATEGY);
> + if (format)
> + ret = zlib_deflateInit(stream, 3);
> + else
> + ret = zlib_deflateInit2(stream, DEFLATE_DEF_LEVEL, Z_DEFLATED,
> + -DEFLATE_DEF_WINBITS,
> + DEFLATE_DEF_MEMLEVEL,
> + Z_DEFAULT_STRATEGY);
> if (ret != Z_OK) {
> ret = -EINVAL;
> goto out_free;
> @@ -68,7 +72,7 @@ static int deflate_comp_init(struct deflate_ctx *ctx)
> goto out;
> }
>
> -static int deflate_decomp_init(struct deflate_ctx *ctx)
> +static int deflate_decomp_init(struct deflate_ctx *ctx, int format)
> {
> int ret = 0;
> struct z_stream_s *stream = &ctx->decomp_stream;
> @@ -78,7 +82,10 @@ static int deflate_decomp_init(struct deflate_ctx *ctx)
> ret = -ENOMEM;
> goto out;
> }
> - ret = zlib_inflateInit2(stream, -DEFLATE_DEF_WINBITS);
> + if (format)
> + ret = zlib_inflateInit(stream);
> + else
> + ret = zlib_inflateInit2(stream, -DEFLATE_DEF_WINBITS);
> if (ret != Z_OK) {
> ret = -EINVAL;
> goto out_free;
> @@ -102,21 +109,21 @@ static void deflate_decomp_exit(struct deflate_ctx *ctx)
> vfree(ctx->decomp_stream.workspace);
> }
>
> -static int __deflate_init(void *ctx)
> +static int __deflate_init(void *ctx, int format)
> {
> int ret;
>
> - ret = deflate_comp_init(ctx);
> + ret = deflate_comp_init(ctx, format);
> if (ret)
> goto out;
> - ret = deflate_decomp_init(ctx);
> + ret = deflate_decomp_init(ctx, format);
> if (ret)
> deflate_comp_exit(ctx);
> out:
> return ret;
> }
>
> -static void *deflate_alloc_ctx(struct crypto_scomp *tfm)
> +static void *gen_deflate_alloc_ctx(struct crypto_scomp *tfm, int format)
> {
> struct deflate_ctx *ctx;
> int ret;
> @@ -125,7 +132,7 @@ static void *deflate_alloc_ctx(struct crypto_scomp *tfm)
> if (!ctx)
> return ERR_PTR(-ENOMEM);
>
> - ret = __deflate_init(ctx);
> + ret = __deflate_init(ctx, format);
> if (ret) {
> kfree(ctx);
> return ERR_PTR(ret);
> @@ -134,11 +141,21 @@ static void *deflate_alloc_ctx(struct crypto_scomp *tfm)
> return ctx;
> }
>
> +static void *deflate_alloc_ctx(struct crypto_scomp *tfm)
> +{
> + return gen_deflate_alloc_ctx(tfm, 0);
> +}
> +
> +static void *zlib_deflate_alloc_ctx(struct crypto_scomp *tfm)
> +{
> + return gen_deflate_alloc_ctx(tfm, 1);
> +}
> +
> static int deflate_init(struct crypto_tfm *tfm)
> {
> struct deflate_ctx *ctx = crypto_tfm_ctx(tfm);
>
> - return __deflate_init(ctx);
> + return __deflate_init(ctx, 0);
> }
>
> static void __deflate_exit(void *ctx)
> @@ -272,7 +289,7 @@ static struct crypto_alg alg = {
> .coa_decompress = deflate_decompress } }
> };
>
> -static struct scomp_alg scomp = {
> +static struct scomp_alg scomp[] = { {
> .alloc_ctx = deflate_alloc_ctx,
> .free_ctx = deflate_free_ctx,
> .compress = deflate_scompress,
> @@ -282,7 +299,17 @@ static struct scomp_alg scomp = {
> .cra_driver_name = "deflate-scomp",
> .cra_module = THIS_MODULE,
> }
> -};
> +}, {
> + .alloc_ctx = zlib_deflate_alloc_ctx,
> + .free_ctx = deflate_free_ctx,
> + .compress = deflate_scompress,
> + .decompress = deflate_sdecompress,
> + .base = {
> + .cra_name = "zlib-deflate",
> + .cra_driver_name = "zlib-deflate-scomp",
> + .cra_module = THIS_MODULE,
> + }
> +} };
>
> static int __init deflate_mod_init(void)
> {
> @@ -292,7 +319,7 @@ static int __init deflate_mod_init(void)
> if (ret)
> return ret;
>
> - ret = crypto_register_scomp(&scomp);
> + ret = crypto_register_scomps(scomp, ARRAY_SIZE(scomp));
> if (ret) {
> crypto_unregister_alg(&alg);
> return ret;
> @@ -304,7 +331,7 @@ static int __init deflate_mod_init(void)
> static void __exit deflate_mod_fini(void)
> {
> crypto_unregister_alg(&alg);
> - crypto_unregister_scomp(&scomp);
> + crypto_unregister_scomps(scomp, ARRAY_SIZE(scomp));
> }
>
> module_init(deflate_mod_init);
> diff --git a/crypto/testmgr.c b/crypto/testmgr.c
> index 8373c72..845191d 100644
> --- a/crypto/testmgr.c
> +++ b/crypto/testmgr.c
> @@ -3512,6 +3512,16 @@ static const struct alg_test_desc alg_test_descs[] = {
> .dec = __VECS(tf_xts_dec_tv_template)
> }
> }
> + }, {
> + .alg = "zlib-deflate",
> + .test = alg_test_comp,
> + .fips_allowed = 1,
> + .suite = {
> + .comp = {
> + .comp = __VECS(zlib_deflate_comp_tv_template),
> + .decomp = __VECS(zlib_deflate_decomp_tv_template)
> + }
> + }
> }
> };
>
> diff --git a/crypto/testmgr.h b/crypto/testmgr.h
> index 15c043f..4293573 100644
> --- a/crypto/testmgr.h
> +++ b/crypto/testmgr.h
> @@ -33204,6 +33204,81 @@ static const struct comp_testvec deflate_decomp_tv_template[] = {
> },
> };
>
> +static const struct comp_testvec zlib_deflate_comp_tv_template[] = {
> + {
> + .inlen = 70,
> + .outlen = 44,
> + .input = "Join us now and share the software "
> + "Join us now and share the software ",
> + .output = "\x78\x5e\xf3\xca\xcf\xcc\x53\x28"
> + "\x2d\x56\xc8\xcb\x2f\x57\x48\xcc"
> + "\x4b\x51\x28\xce\x48\x2c\x4a\x55"
> + "\x28\xc9\x48\x55\x28\xce\x4f\x2b"
> + "\x29\x07\x71\xbc\x08\x2b\x01\x00"
> + "\x7c\x65\x19\x3d",
> + }, {
> + .inlen = 191,
> + .outlen = 129,
> + .input = "This document describes a compression method based on the DEFLATE"
> + "compression algorithm. This document defines the application of "
> + "the DEFLATE algorithm to the IP Payload Compression Protocol.",
> + .output = "\x78\x5e\x5d\xce\x41\x0a\xc3\x30"
> + "\x0c\x04\xc0\xaf\xec\x0b\xf2\x87"
> + "\xd2\xa6\x50\xe8\xc1\x07\x7f\x40"
> + "\xb1\x95\x5a\x60\x5b\xc6\x56\x0f"
> + "\xfd\x7d\x93\x1e\x42\xe8\x51\xec"
> + "\xee\x20\x9f\x64\x20\x6a\x78\x17"
> + "\xae\x86\xc8\x23\x74\x59\x78\x80"
> + "\x10\xb4\xb4\xce\x63\x88\x56\x14"
> + "\xb6\xa4\x11\x0b\x0d\x8e\xd8\x6e"
> + "\x4b\x8c\xdb\x7c\x7f\x5e\xfc\x7c"
> + "\xae\x51\x7e\x69\x17\x4b\x65\x02"
> + "\xfc\x1f\xbc\x4a\xdd\xd8\x7d\x48"
> + "\xad\x65\x09\x64\x3b\xac\xeb\xd9"
> + "\xc2\x01\xc0\xf4\x17\x3c\x1c\x1c"
> + "\x7d\xb2\x52\xc4\xf5\xf4\x8f\xeb"
> + "\x6a\x1a\x34\x4f\x5f\x2e\x32\x45"
> + "\x4e",
> + },
> +};
> +
> +static const struct comp_testvec zlib_deflate_decomp_tv_template[] = {
> + {
> + .inlen = 128,
> + .outlen = 191,
> + .input = "\x78\x9c\x5d\x8d\x31\x0e\xc2\x30"
> + "\x10\x04\xbf\xb2\x2f\xc8\x1f\x10"
> + "\x04\x09\x89\xc2\x85\x3f\x70\xb1"
> + "\x2f\xf8\x24\xdb\x67\xd9\x47\xc1"
> + "\xef\x49\x68\x12\x51\xae\x76\x67"
> + "\xd6\x27\x19\x88\x1a\xde\x85\xab"
> + "\x21\xf2\x08\x5d\x16\x1e\x20\x04"
> + "\x2d\xad\xf3\x18\xa2\x15\x85\x2d"
> + "\x69\xc4\x42\x83\x23\xb6\x6c\x89"
> + "\x71\x9b\xef\xcf\x8b\x9f\xcf\x33"
> + "\xca\x2f\xed\x62\xa9\x4c\x80\xff"
> + "\x13\xaf\x52\x37\xed\x0e\x52\x6b"
> + "\x59\x02\xd9\x4e\xe8\x7a\x76\x1d"
> + "\x02\x98\xfe\x8a\x87\x83\xa3\x4f"
> + "\x56\x8a\xb8\x9e\x8e\x5c\x57\xd3"
> + "\xa0\x79\xfa\x02\x2e\x32\x45\x4e",
> + .output = "This document describes a compression method based on the DEFLATE"
> + "compression algorithm. This document defines the application of "
> + "the DEFLATE algorithm to the IP Payload Compression Protocol.",
> + }, {
> + .inlen = 44,
> + .outlen = 70,
> + .input = "\x78\x9c\xf3\xca\xcf\xcc\x53\x28"
> + "\x2d\x56\xc8\xcb\x2f\x57\x48\xcc"
> + "\x4b\x51\x28\xce\x48\x2c\x4a\x55"
> + "\x28\xc9\x48\x55\x28\xce\x4f\x2b"
> + "\x29\x07\x71\xbc\x08\x2b\x01\x00"
> + "\x7c\x65\x19\x3d",
> + .output = "Join us now and share the software "
> + "Join us now and share the software ",
> + },
> +};
> +
> /*
> * LZO test vectors (null-terminated strings).
> */
> --
> 2.9.3
>