diff options
Diffstat (limited to 'target/linux/generic')
3 files changed, 149 insertions, 2 deletions
| diff --git a/target/linux/generic/config-3.2 b/target/linux/generic/config-3.2 index a44ebe7d4..c4be769cd 100644 --- a/target/linux/generic/config-3.2 +++ b/target/linux/generic/config-3.2 @@ -487,6 +487,7 @@ CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y  # CONFIG_CRYPTO_WP512 is not set  # CONFIG_CRYPTO_XCBC is not set  # CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_XZ is not set  # CONFIG_CRYPTO_ZLIB is not set  # CONFIG_CRYSTALHD is not set  # CONFIG_CS5535_MFGPT is not set diff --git a/target/linux/generic/patches-3.2/540-crypto-xz-decompression-support.patch b/target/linux/generic/patches-3.2/540-crypto-xz-decompression-support.patch new file mode 100644 index 000000000..e6e0a730a --- /dev/null +++ b/target/linux/generic/patches-3.2/540-crypto-xz-decompression-support.patch @@ -0,0 +1,146 @@ +--- a/crypto/Kconfig ++++ b/crypto/Kconfig +@@ -886,6 +886,13 @@ config CRYPTO_LZO + 	help + 	  This is the LZO algorithm. +  ++config CRYPTO_XZ ++	tristate "XZ compression algorithm" ++	select CRYPTO_ALGAPI ++	select XZ_DEC ++	help ++	  This is the XZ algorithm. Only decompression is supported for now. ++ + comment "Random Number Generation" +  + config CRYPTO_ANSI_CPRNG +--- a/crypto/Makefile ++++ b/crypto/Makefile +@@ -82,6 +82,7 @@ obj-$(CONFIG_CRYPTO_MICHAEL_MIC) += mich + obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o + obj-$(CONFIG_CRYPTO_AUTHENC) += authenc.o authencesn.o + obj-$(CONFIG_CRYPTO_LZO) += lzo.o ++obj-$(CONFIG_CRYPTO_XZ) += xz.o + obj-$(CONFIG_CRYPTO_RNG2) += rng.o + obj-$(CONFIG_CRYPTO_RNG2) += krng.o + obj-$(CONFIG_CRYPTO_ANSI_CPRNG) += ansi_cprng.o +--- /dev/null ++++ b/crypto/xz.c +@@ -0,0 +1,117 @@ ++/* ++ * Cryptographic API. ++ * ++ * XZ decompression support. ++ * ++ * Copyright (c) 2012 Gabor Juhos <juhosg@openwrt.org> ++ * ++ * 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 published by ++ * the Free Software Foundation. ++ * ++ */ ++#include <linux/init.h> ++#include <linux/module.h> ++#include <linux/crypto.h> ++#include <linux/xz.h> ++#include <linux/interrupt.h> ++#include <linux/mm.h> ++#include <linux/net.h> ++ ++struct xz_comp_ctx { ++	struct xz_dec	*decomp_state; ++	struct xz_buf	decomp_buf; ++}; ++ ++static int crypto_xz_decomp_init(struct xz_comp_ctx *ctx) ++{ ++	ctx->decomp_state = xz_dec_init(XZ_SINGLE, 0); ++	if (!ctx->decomp_state) ++		return -ENOMEM; ++ ++	return 0; ++} ++ ++static void crypto_xz_decomp_exit(struct xz_comp_ctx *ctx) ++{ ++	xz_dec_end(ctx->decomp_state); ++} ++ ++static int crypto_xz_init(struct crypto_tfm *tfm) ++{ ++	struct xz_comp_ctx *ctx = crypto_tfm_ctx(tfm); ++ ++	return crypto_xz_decomp_init(ctx); ++} ++ ++static void crypto_xz_exit(struct crypto_tfm *tfm) ++{ ++	struct xz_comp_ctx *ctx = crypto_tfm_ctx(tfm); ++ ++	crypto_xz_decomp_exit(ctx); ++} ++ ++static int crypto_xz_compress(struct crypto_tfm *tfm, const u8 *src, ++			      unsigned int slen, u8 *dst, unsigned int *dlen) ++{ ++	return -EOPNOTSUPP; ++} ++ ++static int crypto_xz_decompress(struct crypto_tfm *tfm, const u8 *src, ++				unsigned int slen, u8 *dst, unsigned int *dlen) ++{ ++	struct xz_comp_ctx *dctx = crypto_tfm_ctx(tfm); ++	struct xz_buf *xz_buf = &dctx->decomp_buf; ++	int ret; ++ ++	memset(xz_buf, '\0', sizeof(struct xz_buf)); ++ ++	xz_buf->in = (u8 *) src; ++	xz_buf->in_pos = 0; ++	xz_buf->in_size = slen; ++	xz_buf->out = (u8 *) dst; ++	xz_buf->out_pos = 0; ++	xz_buf->out_size = *dlen; ++ ++	ret = xz_dec_run(dctx->decomp_state, xz_buf); ++	if (ret != XZ_STREAM_END) { ++		ret = -EINVAL; ++		goto out; ++	} ++ ++	*dlen = xz_buf->out_pos; ++	ret = 0; ++ ++out: ++	return ret; ++} ++ ++static struct crypto_alg crypto_xz_alg = { ++	.cra_name		= "xz", ++	.cra_flags		= CRYPTO_ALG_TYPE_COMPRESS, ++	.cra_ctxsize		= sizeof(struct xz_comp_ctx), ++	.cra_module		= THIS_MODULE, ++	.cra_list		= LIST_HEAD_INIT(crypto_xz_alg.cra_list), ++	.cra_init		= crypto_xz_init, ++	.cra_exit		= crypto_xz_exit, ++	.cra_u			= { .compress = { ++	.coa_compress 		= crypto_xz_compress, ++	.coa_decompress  	= crypto_xz_decompress } } ++}; ++ ++static int __init crypto_xz_mod_init(void) ++{ ++	return crypto_register_alg(&crypto_xz_alg); ++} ++ ++static void __exit crypto_xz_mod_exit(void) ++{ ++	crypto_unregister_alg(&crypto_xz_alg); ++} ++ ++module_init(crypto_xz_mod_init); ++module_exit(crypto_xz_mod_exit); ++ ++MODULE_LICENSE("GPL v2"); ++MODULE_DESCRIPTION("Crypto XZ decompression support"); ++MODULE_AUTHOR("Gabor Juhos <juhosg@openwrt.org>"); diff --git a/target/linux/generic/patches-3.2/940-ocf_kbuild_integration.patch b/target/linux/generic/patches-3.2/940-ocf_kbuild_integration.patch index f22bd4ccd..8108e3e48 100644 --- a/target/linux/generic/patches-3.2/940-ocf_kbuild_integration.patch +++ b/target/linux/generic/patches-3.2/940-ocf_kbuild_integration.patch @@ -1,6 +1,6 @@  --- a/crypto/Kconfig  +++ b/crypto/Kconfig -@@ -923,3 +923,6 @@ config CRYPTO_USER_API_SKCIPHER +@@ -930,3 +930,6 @@ config CRYPTO_USER_API_SKCIPHER   source "drivers/crypto/Kconfig"   endif	# if CRYPTO @@ -9,7 +9,7 @@  +  --- a/crypto/Makefile  +++ b/crypto/Makefile -@@ -91,6 +91,8 @@ obj-$(CONFIG_CRYPTO_USER_API) += af_alg. +@@ -92,6 +92,8 @@ obj-$(CONFIG_CRYPTO_USER_API) += af_alg.   obj-$(CONFIG_CRYPTO_USER_API_HASH) += algif_hash.o   obj-$(CONFIG_CRYPTO_USER_API_SKCIPHER) += algif_skcipher.o | 
