Loading crypto/Kconfig +8 −0 Original line number Diff line number Diff line Loading @@ -536,6 +536,14 @@ config CRYPTO_AUTHENC Authenc: Combined mode wrapper for IPsec. This is required for IPSec. config CRYPTO_LZO tristate "LZO compression algorithm" select CRYPTO_ALGAPI select LZO_COMPRESS select LZO_DECOMPRESS help This is the LZO algorithm. source "drivers/crypto/Kconfig" endif # if CRYPTO crypto/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ obj-$(CONFIG_CRYPTO_DEFLATE) += deflate.o obj-$(CONFIG_CRYPTO_MICHAEL_MIC) += michael_mic.o obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o obj-$(CONFIG_CRYPTO_AUTHENC) += authenc.o obj-$(CONFIG_CRYPTO_LZO) += lzo.o obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o Loading crypto/lzo.c 0 → 100644 +106 −0 Original line number Diff line number Diff line /* * Cryptographic API. * * 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. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 51 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ #include <linux/init.h> #include <linux/module.h> #include <linux/crypto.h> #include <linux/vmalloc.h> #include <linux/lzo.h> struct lzo_ctx { void *lzo_comp_mem; }; static int lzo_init(struct crypto_tfm *tfm) { struct lzo_ctx *ctx = crypto_tfm_ctx(tfm); ctx->lzo_comp_mem = vmalloc(LZO1X_MEM_COMPRESS); if (!ctx->lzo_comp_mem) return -ENOMEM; return 0; } static void lzo_exit(struct crypto_tfm *tfm) { struct lzo_ctx *ctx = crypto_tfm_ctx(tfm); vfree(ctx->lzo_comp_mem); } static int lzo_compress(struct crypto_tfm *tfm, const u8 *src, unsigned int slen, u8 *dst, unsigned int *dlen) { struct lzo_ctx *ctx = crypto_tfm_ctx(tfm); size_t tmp_len = *dlen; /* size_t(ulong) <-> uint on 64 bit */ int err; err = lzo1x_1_compress(src, slen, dst, &tmp_len, ctx->lzo_comp_mem); if (err != LZO_E_OK) return -EINVAL; *dlen = tmp_len; return 0; } static int lzo_decompress(struct crypto_tfm *tfm, const u8 *src, unsigned int slen, u8 *dst, unsigned int *dlen) { int err; size_t tmp_len = *dlen; /* size_t(ulong) <-> uint on 64 bit */ err = lzo1x_decompress_safe(src, slen, dst, &tmp_len); if (err != LZO_E_OK) return -EINVAL; *dlen = tmp_len; return 0; } static struct crypto_alg alg = { .cra_name = "lzo", .cra_flags = CRYPTO_ALG_TYPE_COMPRESS, .cra_ctxsize = sizeof(struct lzo_ctx), .cra_module = THIS_MODULE, .cra_list = LIST_HEAD_INIT(alg.cra_list), .cra_init = lzo_init, .cra_exit = lzo_exit, .cra_u = { .compress = { .coa_compress = lzo_compress, .coa_decompress = lzo_decompress } } }; static int __init init(void) { return crypto_register_alg(&alg); } static void __exit fini(void) { crypto_unregister_alg(&alg); } module_init(init); module_exit(fini); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("LZO Compression Algorithm"); crypto/tcrypt.c +8 −1 Original line number Diff line number Diff line Loading @@ -84,7 +84,7 @@ static char *check[] = { "cast6", "arc4", "michael_mic", "deflate", "crc32c", "tea", "xtea", "arc4", "michael_mic", "deflate", "crc32c", "tea", "xtea", "khazad", "wp512", "wp384", "wp256", "tnepres", "xeta", "fcrypt", "camellia", "seed", "salsa20", NULL "camellia", "seed", "salsa20", "lzo", NULL }; static void hexdump(unsigned char *buf, unsigned int len) Loading Loading @@ -1292,6 +1292,8 @@ static void do_test(void) test_comp("deflate", deflate_comp_tv_template, deflate_decomp_tv_template, DEFLATE_COMP_TEST_VECTORS, DEFLATE_DECOMP_TEST_VECTORS); test_comp("lzo", lzo_comp_tv_template, lzo_decomp_tv_template, LZO_COMP_TEST_VECTORS, LZO_DECOMP_TEST_VECTORS); test_hash("crc32c", crc32c_tv_template, CRC32C_TEST_VECTORS); test_hash("hmac(md5)", hmac_md5_tv_template, HMAC_MD5_TEST_VECTORS); Loading Loading @@ -1550,6 +1552,11 @@ static void do_test(void) AES_GCM_DEC_TEST_VECTORS); break; case 36: test_comp("lzo", lzo_comp_tv_template, lzo_decomp_tv_template, LZO_COMP_TEST_VECTORS, LZO_DECOMP_TEST_VECTORS); break; case 100: test_hash("hmac(md5)", hmac_md5_tv_template, HMAC_MD5_TEST_VECTORS); Loading crypto/tcrypt.h +82 −0 Original line number Diff line number Diff line Loading @@ -7460,6 +7460,88 @@ static struct comp_testvec deflate_decomp_tv_template[] = { }, }; /* * LZO test vectors (null-terminated strings). */ #define LZO_COMP_TEST_VECTORS 2 #define LZO_DECOMP_TEST_VECTORS 2 static struct comp_testvec lzo_comp_tv_template[] = { { .inlen = 70, .outlen = 46, .input = "Join us now and share the software " "Join us now and share the software ", .output = { 0x00, 0x0d, 0x4a, 0x6f, 0x69, 0x6e, 0x20, 0x75, 0x73, 0x20, 0x6e, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x70, 0x01, 0x01, 0x4a, 0x6f, 0x69, 0x6e, 0x3d, 0x88, 0x00, 0x11, 0x00, 0x00 }, }, { .inlen = 159, .outlen = 133, .input = "This document describes a compression method based on the LZO " "compression algorithm. This document defines the application of " "the LZO algorithm used in UBIFS.", .output = { 0x00, 0x2b, 0x54, 0x68, 0x69, 0x73, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x5a, 0x4f, 0x2b, 0x8c, 0x00, 0x0d, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x2a, 0x54, 0x01, 0x02, 0x66, 0x69, 0x6e, 0x65, 0x73, 0x94, 0x06, 0x05, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x76, 0x0a, 0x6f, 0x66, 0x88, 0x02, 0x60, 0x09, 0x27, 0xf0, 0x00, 0x0c, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x55, 0x42, 0x49, 0x46, 0x53, 0x2e, 0x11, 0x00, 0x00 }, }, }; static struct comp_testvec lzo_decomp_tv_template[] = { { .inlen = 133, .outlen = 159, .input = { 0x00, 0x2b, 0x54, 0x68, 0x69, 0x73, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x5a, 0x4f, 0x2b, 0x8c, 0x00, 0x0d, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x2a, 0x54, 0x01, 0x02, 0x66, 0x69, 0x6e, 0x65, 0x73, 0x94, 0x06, 0x05, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x76, 0x0a, 0x6f, 0x66, 0x88, 0x02, 0x60, 0x09, 0x27, 0xf0, 0x00, 0x0c, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x55, 0x42, 0x49, 0x46, 0x53, 0x2e, 0x11, 0x00, 0x00 }, .output = "This document describes a compression method based on the LZO " "compression algorithm. This document defines the application of " "the LZO algorithm used in UBIFS.", }, { .inlen = 46, .outlen = 70, .input = { 0x00, 0x0d, 0x4a, 0x6f, 0x69, 0x6e, 0x20, 0x75, 0x73, 0x20, 0x6e, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x70, 0x01, 0x01, 0x4a, 0x6f, 0x69, 0x6e, 0x3d, 0x88, 0x00, 0x11, 0x00, 0x00 }, .output = "Join us now and share the software " "Join us now and share the software ", }, }; /* * Michael MIC test vectors from IEEE 802.11i */ Loading Loading
crypto/Kconfig +8 −0 Original line number Diff line number Diff line Loading @@ -536,6 +536,14 @@ config CRYPTO_AUTHENC Authenc: Combined mode wrapper for IPsec. This is required for IPSec. config CRYPTO_LZO tristate "LZO compression algorithm" select CRYPTO_ALGAPI select LZO_COMPRESS select LZO_DECOMPRESS help This is the LZO algorithm. source "drivers/crypto/Kconfig" endif # if CRYPTO
crypto/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ obj-$(CONFIG_CRYPTO_DEFLATE) += deflate.o obj-$(CONFIG_CRYPTO_MICHAEL_MIC) += michael_mic.o obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o obj-$(CONFIG_CRYPTO_AUTHENC) += authenc.o obj-$(CONFIG_CRYPTO_LZO) += lzo.o obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o Loading
crypto/lzo.c 0 → 100644 +106 −0 Original line number Diff line number Diff line /* * Cryptographic API. * * 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. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 51 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ #include <linux/init.h> #include <linux/module.h> #include <linux/crypto.h> #include <linux/vmalloc.h> #include <linux/lzo.h> struct lzo_ctx { void *lzo_comp_mem; }; static int lzo_init(struct crypto_tfm *tfm) { struct lzo_ctx *ctx = crypto_tfm_ctx(tfm); ctx->lzo_comp_mem = vmalloc(LZO1X_MEM_COMPRESS); if (!ctx->lzo_comp_mem) return -ENOMEM; return 0; } static void lzo_exit(struct crypto_tfm *tfm) { struct lzo_ctx *ctx = crypto_tfm_ctx(tfm); vfree(ctx->lzo_comp_mem); } static int lzo_compress(struct crypto_tfm *tfm, const u8 *src, unsigned int slen, u8 *dst, unsigned int *dlen) { struct lzo_ctx *ctx = crypto_tfm_ctx(tfm); size_t tmp_len = *dlen; /* size_t(ulong) <-> uint on 64 bit */ int err; err = lzo1x_1_compress(src, slen, dst, &tmp_len, ctx->lzo_comp_mem); if (err != LZO_E_OK) return -EINVAL; *dlen = tmp_len; return 0; } static int lzo_decompress(struct crypto_tfm *tfm, const u8 *src, unsigned int slen, u8 *dst, unsigned int *dlen) { int err; size_t tmp_len = *dlen; /* size_t(ulong) <-> uint on 64 bit */ err = lzo1x_decompress_safe(src, slen, dst, &tmp_len); if (err != LZO_E_OK) return -EINVAL; *dlen = tmp_len; return 0; } static struct crypto_alg alg = { .cra_name = "lzo", .cra_flags = CRYPTO_ALG_TYPE_COMPRESS, .cra_ctxsize = sizeof(struct lzo_ctx), .cra_module = THIS_MODULE, .cra_list = LIST_HEAD_INIT(alg.cra_list), .cra_init = lzo_init, .cra_exit = lzo_exit, .cra_u = { .compress = { .coa_compress = lzo_compress, .coa_decompress = lzo_decompress } } }; static int __init init(void) { return crypto_register_alg(&alg); } static void __exit fini(void) { crypto_unregister_alg(&alg); } module_init(init); module_exit(fini); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("LZO Compression Algorithm");
crypto/tcrypt.c +8 −1 Original line number Diff line number Diff line Loading @@ -84,7 +84,7 @@ static char *check[] = { "cast6", "arc4", "michael_mic", "deflate", "crc32c", "tea", "xtea", "arc4", "michael_mic", "deflate", "crc32c", "tea", "xtea", "khazad", "wp512", "wp384", "wp256", "tnepres", "xeta", "fcrypt", "camellia", "seed", "salsa20", NULL "camellia", "seed", "salsa20", "lzo", NULL }; static void hexdump(unsigned char *buf, unsigned int len) Loading Loading @@ -1292,6 +1292,8 @@ static void do_test(void) test_comp("deflate", deflate_comp_tv_template, deflate_decomp_tv_template, DEFLATE_COMP_TEST_VECTORS, DEFLATE_DECOMP_TEST_VECTORS); test_comp("lzo", lzo_comp_tv_template, lzo_decomp_tv_template, LZO_COMP_TEST_VECTORS, LZO_DECOMP_TEST_VECTORS); test_hash("crc32c", crc32c_tv_template, CRC32C_TEST_VECTORS); test_hash("hmac(md5)", hmac_md5_tv_template, HMAC_MD5_TEST_VECTORS); Loading Loading @@ -1550,6 +1552,11 @@ static void do_test(void) AES_GCM_DEC_TEST_VECTORS); break; case 36: test_comp("lzo", lzo_comp_tv_template, lzo_decomp_tv_template, LZO_COMP_TEST_VECTORS, LZO_DECOMP_TEST_VECTORS); break; case 100: test_hash("hmac(md5)", hmac_md5_tv_template, HMAC_MD5_TEST_VECTORS); Loading
crypto/tcrypt.h +82 −0 Original line number Diff line number Diff line Loading @@ -7460,6 +7460,88 @@ static struct comp_testvec deflate_decomp_tv_template[] = { }, }; /* * LZO test vectors (null-terminated strings). */ #define LZO_COMP_TEST_VECTORS 2 #define LZO_DECOMP_TEST_VECTORS 2 static struct comp_testvec lzo_comp_tv_template[] = { { .inlen = 70, .outlen = 46, .input = "Join us now and share the software " "Join us now and share the software ", .output = { 0x00, 0x0d, 0x4a, 0x6f, 0x69, 0x6e, 0x20, 0x75, 0x73, 0x20, 0x6e, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x70, 0x01, 0x01, 0x4a, 0x6f, 0x69, 0x6e, 0x3d, 0x88, 0x00, 0x11, 0x00, 0x00 }, }, { .inlen = 159, .outlen = 133, .input = "This document describes a compression method based on the LZO " "compression algorithm. This document defines the application of " "the LZO algorithm used in UBIFS.", .output = { 0x00, 0x2b, 0x54, 0x68, 0x69, 0x73, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x5a, 0x4f, 0x2b, 0x8c, 0x00, 0x0d, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x2a, 0x54, 0x01, 0x02, 0x66, 0x69, 0x6e, 0x65, 0x73, 0x94, 0x06, 0x05, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x76, 0x0a, 0x6f, 0x66, 0x88, 0x02, 0x60, 0x09, 0x27, 0xf0, 0x00, 0x0c, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x55, 0x42, 0x49, 0x46, 0x53, 0x2e, 0x11, 0x00, 0x00 }, }, }; static struct comp_testvec lzo_decomp_tv_template[] = { { .inlen = 133, .outlen = 159, .input = { 0x00, 0x2b, 0x54, 0x68, 0x69, 0x73, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x5a, 0x4f, 0x2b, 0x8c, 0x00, 0x0d, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x2a, 0x54, 0x01, 0x02, 0x66, 0x69, 0x6e, 0x65, 0x73, 0x94, 0x06, 0x05, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x76, 0x0a, 0x6f, 0x66, 0x88, 0x02, 0x60, 0x09, 0x27, 0xf0, 0x00, 0x0c, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x55, 0x42, 0x49, 0x46, 0x53, 0x2e, 0x11, 0x00, 0x00 }, .output = "This document describes a compression method based on the LZO " "compression algorithm. This document defines the application of " "the LZO algorithm used in UBIFS.", }, { .inlen = 46, .outlen = 70, .input = { 0x00, 0x0d, 0x4a, 0x6f, 0x69, 0x6e, 0x20, 0x75, 0x73, 0x20, 0x6e, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x70, 0x01, 0x01, 0x4a, 0x6f, 0x69, 0x6e, 0x3d, 0x88, 0x00, 0x11, 0x00, 0x00 }, .output = "Join us now and share the software " "Join us now and share the software ", }, }; /* * Michael MIC test vectors from IEEE 802.11i */ Loading