diff options
Diffstat (limited to 'FreeRTOS-Plus/Source/WolfSSL/wolfcrypt/src/compress.c')
-rw-r--r-- | FreeRTOS-Plus/Source/WolfSSL/wolfcrypt/src/compress.c | 57 |
1 files changed, 43 insertions, 14 deletions
diff --git a/FreeRTOS-Plus/Source/WolfSSL/wolfcrypt/src/compress.c b/FreeRTOS-Plus/Source/WolfSSL/wolfcrypt/src/compress.c index a01c071dc..28d04f02d 100644 --- a/FreeRTOS-Plus/Source/WolfSSL/wolfcrypt/src/compress.c +++ b/FreeRTOS-Plus/Source/WolfSSL/wolfcrypt/src/compress.c @@ -1,9 +1,9 @@ /* compress.c * - * Copyright (C) 2006-2015 wolfSSL Inc. + * Copyright (C) 2006-2020 wolfSSL Inc. + * + * This file is part of wolfSSL. * - * This file is part of wolfSSL. (formerly known as CyaSSL) - wc_* * wolfSSL is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -16,10 +16,11 @@ * * 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 Street, Fifth Floor, Boston, MA 02110-1301, USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ + #ifdef HAVE_CONFIG_H #include <config.h> #endif @@ -35,6 +36,7 @@ #ifdef NO_INLINE #include <wolfssl/wolfcrypt/misc.h> #else + #define WOLFSSL_MISC_INCLUDED #include <wolfcrypt/src/misc.c> #endif @@ -65,23 +67,24 @@ static void myFree(void* opaque, void* memory) #endif -int wc_Compress(byte* out, word32 outSz, const byte* in, word32 inSz, word32 flags) /* * out - pointer to destination buffer * outSz - size of destination buffer * in - pointer to source buffer to compress * inSz - size of source to compress - * flags - flags to control how compress operates + * flags - flags to control how compress operates * * return: * negative - error code * positive - bytes stored in out buffer - * + * * Note, the output buffer still needs to be larger than the input buffer. * The right chunk of data won't compress at all, and the lookup table will * add to the size of the output. The libz code says the compressed * buffer should be srcSz + 0.1% + 12. */ +int wc_Compress_ex(byte* out, word32 outSz, const byte* in, word32 inSz, + word32 flags, word32 windowBits) { z_stream stream; int result = 0; @@ -101,7 +104,8 @@ int wc_Compress(byte* out, word32 outSz, const byte* in, word32 inSz, word32 fla stream.opaque = (voidpf)0; if (deflateInit2(&stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, - DEFLATE_DEFAULT_WINDOWBITS, DEFLATE_DEFAULT_MEMLEVEL, + DEFLATE_DEFAULT_WINDOWBITS | windowBits, + DEFLATE_DEFAULT_MEMLEVEL, flags ? Z_FIXED : Z_DEFAULT_STRATEGY) != Z_OK) return COMPRESS_INIT_E; @@ -118,19 +122,37 @@ int wc_Compress(byte* out, word32 outSz, const byte* in, word32 inSz, word32 fla return result; } +int wc_Compress(byte* out, word32 outSz, const byte* in, word32 inSz, word32 flags) +{ + return wc_Compress_ex(out, outSz, in, inSz, flags, 0); +} -int wc_DeCompress(byte* out, word32 outSz, const byte* in, word32 inSz) + +/* windowBits: +* deflateInit() and inflateInit(), as well as deflateInit2() and inflateInit2() + with windowBits in 0..15 all process zlib-wrapped deflate data. + (See RFC 1950 and RFC 1951.) +* deflateInit2() and inflateInit2() with negative windowBits in -1..-15 process + raw deflate data with no header or trailer. +* deflateInit2() and inflateInit2() with windowBits in 16..31, i.e. 16 + added to 0..15, process gzip-wrapped deflate data (RFC 1952). +* inflateInit2() with windowBits in 32..47 (32 added to 0..15) will + automatically detect either a gzip or zlib header (but not raw deflate + data), and decompress accordingly. +*/ +int wc_DeCompress_ex(byte* out, word32 outSz, const byte* in, word32 inSz, + int windowBits) /* * out - pointer to destination buffer * outSz - size of destination buffer * in - pointer to source buffer to compress * inSz - size of source to compress - * flags - flags to control how compress operates + * windowBits - flags to control how decompress operates * * return: * negative - error code * positive - bytes stored in out buffer - */ + */ { z_stream stream; int result = 0; @@ -148,14 +170,15 @@ int wc_DeCompress(byte* out, word32 outSz, const byte* in, word32 inSz) stream.zfree = (free_func)myFree; stream.opaque = (voidpf)0; - if (inflateInit2(&stream, DEFLATE_DEFAULT_WINDOWBITS) != Z_OK) + if (inflateInit2(&stream, DEFLATE_DEFAULT_WINDOWBITS | windowBits) != Z_OK) return DECOMPRESS_INIT_E; - if (inflate(&stream, Z_FINISH) != Z_STREAM_END) { + result = inflate(&stream, Z_FINISH); + if (result != Z_STREAM_END) { inflateEnd(&stream); return DECOMPRESS_E; } - + result = (int)stream.total_out; if (inflateEnd(&stream) != Z_OK) @@ -165,5 +188,11 @@ int wc_DeCompress(byte* out, word32 outSz, const byte* in, word32 inSz) } +int wc_DeCompress(byte* out, word32 outSz, const byte* in, word32 inSz) +{ + return wc_DeCompress_ex(out, outSz, in, inSz, 0); +} + + #endif /* HAVE_LIBZ */ |