git-svn-id: svn://db.shs.com.ru/pip@554 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -30,6 +30,7 @@ endmacro()
|
|||||||
|
|
||||||
set(PIP_SRC_MAIN "src_main")
|
set(PIP_SRC_MAIN "src_main")
|
||||||
set(PIP_SRC_CRYPT "src_crypt")
|
set(PIP_SRC_CRYPT "src_crypt")
|
||||||
|
set(PIP_SRC_COMPRESS "src_compress")
|
||||||
set(PIP_SRC_USB "src_usb")
|
set(PIP_SRC_USB "src_usb")
|
||||||
set(PIP_SRC_FFTW "src_fftw")
|
set(PIP_SRC_FFTW "src_fftw")
|
||||||
set(PIP_LIBS_TARGETS pip)
|
set(PIP_LIBS_TARGETS pip)
|
||||||
@@ -94,6 +95,9 @@ endforeach(F)
|
|||||||
# Crypt lib
|
# Crypt lib
|
||||||
gather_src("${PIP_SRC_CRYPT}" CPP_LIB_CRYPT HDRS PHDRS)
|
gather_src("${PIP_SRC_CRYPT}" CPP_LIB_CRYPT HDRS PHDRS)
|
||||||
|
|
||||||
|
# Compress lib
|
||||||
|
gather_src("${PIP_SRC_COMPRESS}" CPP_LIB_COMPRESS HDRS PHDRS)
|
||||||
|
|
||||||
# USB lib
|
# USB lib
|
||||||
gather_src("${PIP_SRC_USB}" CPP_LIB_USB HDRS PHDRS)
|
gather_src("${PIP_SRC_USB}" CPP_LIB_USB HDRS PHDRS)
|
||||||
|
|
||||||
@@ -291,6 +295,20 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
# Check if PIP support compress/decompress using zlib library
|
||||||
|
find_library(zlib_FOUND NAMES zlib z)
|
||||||
|
if(zlib_FOUND)
|
||||||
|
message(STATUS "Building with zlib compress support")
|
||||||
|
add_definitions(-DPIP_COMPRESS)
|
||||||
|
add_library(pip_compress SHARED ${CPP_LIB_COMPRESS})
|
||||||
|
target_link_libraries(pip_compress pip ${zlib_FOUND})
|
||||||
|
list(APPEND LIBS_STATUS zlib)
|
||||||
|
list(APPEND PIP_LIBS_TARGETS pip_compress)
|
||||||
|
else()
|
||||||
|
message(STATUS "Building without compress support")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
# Check if PIP support fftw3 for PIFFT using in math module
|
# Check if PIP support fftw3 for PIFFT using in math module
|
||||||
set(FFTW_LIB_NAME fftw3)
|
set(FFTW_LIB_NAME fftw3)
|
||||||
set(FFTW_LIB_SUFFIXES "" "f" "l" "q")
|
set(FFTW_LIB_SUFFIXES "" "f" "l" "q")
|
||||||
@@ -341,7 +359,7 @@ endif()
|
|||||||
|
|
||||||
# Test program
|
# Test program
|
||||||
add_executable(pip_test "main.cpp")
|
add_executable(pip_test "main.cpp")
|
||||||
target_link_libraries(pip_test pip)
|
target_link_libraries(pip_test pip pip_compress)
|
||||||
|
|
||||||
|
|
||||||
# Install
|
# Install
|
||||||
|
|||||||
16
main.cpp
16
main.cpp
@@ -1,11 +1,19 @@
|
|||||||
#include "pip.h"
|
#include "pip.h"
|
||||||
#include "picodeparser.h"
|
#include "picompress.h"
|
||||||
#include "pivector2d.h"
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
PICodeParser cp;
|
PIString s = PIString::fromUTF8("hello, привет привет привет привет привет привет");
|
||||||
cp.parseFile("cp.h");
|
PIByteArray ba = s.toUTF8();
|
||||||
|
piCout << "original " << ba.toHex();
|
||||||
|
ba = piCompress(ba);
|
||||||
|
piCout << "compress " << ba.toHex();
|
||||||
|
ba = piDecompress(ba);
|
||||||
|
piCout << "decompress" << ba.toHex();
|
||||||
|
piCout << PIString::fromUTF8(ba);
|
||||||
|
ba = PIByteArray(16);
|
||||||
|
piCout << ba.toHex() << ba.size();
|
||||||
|
piCout << piCompress(ba).toHex() << piCompress(ba).size();
|
||||||
/*PIString s = PIString::fromUTF8("hello, привет");
|
/*PIString s = PIString::fromUTF8("hello, привет");
|
||||||
piCout << s;
|
piCout << s;
|
||||||
PIByteArray ba = s.toUTF8();
|
PIByteArray ba = s.toUTF8();
|
||||||
|
|||||||
69
src_compress/picompress.cpp
Normal file
69
src_compress/picompress.cpp
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
PIP - Platform Independent Primitives
|
||||||
|
Cryptographic class using lib Sodium
|
||||||
|
Copyright (C) 2017 Andrey Bychkov work.a.b@yandex.ru
|
||||||
|
|
||||||
|
This program 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 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
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, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "picompress.h"
|
||||||
|
#ifdef PIP_COMPRESS
|
||||||
|
# include <zlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
PIByteArray piCompress(const PIByteArray & ba, int level) {
|
||||||
|
#ifdef PIP_COMPRESS
|
||||||
|
PIByteArray zba;
|
||||||
|
zba.resize(ba.size() + 128);
|
||||||
|
int ret = 0;
|
||||||
|
ulong sz = zba.size();
|
||||||
|
ret = compress2(zba.data(), &sz, ba.data(), ba.size(), level);
|
||||||
|
if (ret != Z_OK) {
|
||||||
|
piCout << "[PICompress]" << "Error: invalid input or not enought memory";
|
||||||
|
return ba;
|
||||||
|
}
|
||||||
|
zba.resize(sz);
|
||||||
|
zba << ullong(ba.size());
|
||||||
|
return zba;
|
||||||
|
#else
|
||||||
|
piCout << "[PICompress]" << "Warning: PICompress is disabled, to enable install zlib library and build pip_compress library";
|
||||||
|
#endif
|
||||||
|
return ba;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PIByteArray piDecompress(const PIByteArray & zba) {
|
||||||
|
#ifdef PIP_COMPRESS
|
||||||
|
ullong sz;
|
||||||
|
if (zba.size() < sizeof(ullong)) {
|
||||||
|
piCout << "[PICompress]" << "Error: invalid input";
|
||||||
|
return zba;
|
||||||
|
}
|
||||||
|
PIByteArray ba(zba.data(zba.size() - sizeof(ullong)), sizeof(ullong));
|
||||||
|
ba >> sz;
|
||||||
|
ba.resize(sz);
|
||||||
|
int ret = 0;
|
||||||
|
ulong s = sz;
|
||||||
|
ret = uncompress(ba.data(), &s, zba.data(), zba.size());
|
||||||
|
if (ret != Z_OK) {
|
||||||
|
piCout << "[PICompress]" << "Error: invalid input or not enought memory";
|
||||||
|
return zba;
|
||||||
|
}
|
||||||
|
return ba;
|
||||||
|
#else
|
||||||
|
piCout << "[PICompress]" << "Warning: PICompress is disabled, to enable install zlib library and build pip_compress library";
|
||||||
|
#endif
|
||||||
|
return zba;
|
||||||
|
}
|
||||||
@@ -34,7 +34,7 @@ PICrypt::PICrypt() {
|
|||||||
randombytes_buf(key_.data(), key_.size());
|
randombytes_buf(key_.data(), key_.size());
|
||||||
randombytes_buf(nonce_.data(), nonce_.size());
|
randombytes_buf(nonce_.data(), nonce_.size());
|
||||||
#else
|
#else
|
||||||
piCout << "[PICrypt]" << "Warning: PICrypt is disabled, to enable install libsodium-dev library and build pip with -DCRYPT=1";
|
piCout << "[PICrypt]" << "Warning: PICrypt is disabled, to enable install libsodium-dev library and build pip_crypt library";
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
10
src_main/math/picompress.h
Normal file
10
src_main/math/picompress.h
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#ifndef PICOMPRESS_H
|
||||||
|
#define PICOMPRESS_H
|
||||||
|
|
||||||
|
#include "pibytearray.h"
|
||||||
|
|
||||||
|
PIByteArray piCompress(const PIByteArray & ba, int level = 6);
|
||||||
|
|
||||||
|
PIByteArray piDecompress(const PIByteArray & zba);
|
||||||
|
|
||||||
|
#endif // PICOMPRESS_H
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
#define PIVERSION_H
|
#define PIVERSION_H
|
||||||
|
|
||||||
#define PIP_VERSION_MAJOR 1
|
#define PIP_VERSION_MAJOR 1
|
||||||
#define PIP_VERSION_MINOR 0
|
#define PIP_VERSION_MINOR 1
|
||||||
#define PIP_VERSION_REVISION 0
|
#define PIP_VERSION_REVISION 0
|
||||||
#define PIP_VERSION_SUFFIX ""
|
#define PIP_VERSION_SUFFIX ""
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user