diff --git a/main.cpp b/main.cpp index e59754b9..3ec87c18 100644 --- a/main.cpp +++ b/main.cpp @@ -115,14 +115,6 @@ public: }; - - - - - - - - class Parent { public: virtual void print() {piCout << "Parent";} @@ -144,6 +136,7 @@ public: //#include "unicode/uchar.h" #include "picrypt.h" +#include "pifixedpoint.h" int main (int argc, char * argv[]) { PICrypt cr; @@ -169,7 +162,7 @@ int main (int argc, char * argv[]) { return 0; // //char uc[] = "←↑→↓АБВ"; // char uc[] = "│─┌┐└┘├┤┬┴┼"; - +// ─────────────┴─┴┴──┴┴┴─┘ // PIString us = PIString::fromUTF8(uc); // //piForeachC (PIChar & c, us) diff --git a/src/io/pibasetransfer.h b/src/io/pibasetransfer.h index 34d4dad1..6797c0c4 100644 --- a/src/io/pibasetransfer.h +++ b/src/io/pibasetransfer.h @@ -1,3 +1,25 @@ +/*! \file pibasetransfer.h + * \brief Base class for reliable send and receive data in fixed packets with error correction, pause and resume +*/ +/* + PIP - Platform Independent Primitives + Base class for reliable send and receive data in fixed packets with error correction, pause and resume + Copyright (C) 2015 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 . +*/ + #ifndef PIBASETRANSFER_H #define PIBASETRANSFER_H diff --git a/src/math/picrypt.cpp b/src/math/picrypt.cpp index f6f807ba..6ff2c15c 100644 --- a/src/math/picrypt.cpp +++ b/src/math/picrypt.cpp @@ -21,6 +21,8 @@ #ifdef PIP_CRYPT # include "sodium.h" #endif + + const char hash_def_key[] = "_picrypt_"; @@ -144,6 +146,17 @@ PIByteArray PICrypt::hash(const PIString & secret) { } +PIByteArray PICrypt::generateKey() { + PIByteArray hash; +#ifdef PIP_CRYPT + sodium_init(); + hash.resize(crypto_secretbox_KEYBYTES); + randombytes_buf(hash.data(), hash.size()); +#endif + return hash; +} + + int PICrypt::sizeKey() { #ifdef PIP_CRYPT return crypto_secretbox_KEYBYTES; diff --git a/src/math/picrypt.h b/src/math/picrypt.h index 61d4ca03..0dfc62fe 100644 --- a/src/math/picrypt.h +++ b/src/math/picrypt.h @@ -27,18 +27,40 @@ class PICrypt { public: + //! Construct and generate random key PICrypt(); + //! Set key to "key", key size must be a \a sizeKey() bool setKey(const PIByteArray & key); + + //! Generate and set key from keyphrase "secret" PIByteArray setKey(const PIString & secret); + + //! Returns current key PIByteArray key() {return key_;} + + //! Encrypt given data "data", result size will be increased by \a sizeCrypt() PIByteArray crypt(const PIByteArray & data); + + //! Decrypt given data "crypt_data" PIByteArray decrypt(const PIByteArray & crypt_data, bool * ok = 0); + //! Encrypt given data "data" with key "key", result size will be increased by \a sizeCrypt() static PIByteArray crypt(const PIByteArray & data, const PIByteArray & key); + + //! Decrypt given data "crypt_data" with key "key" static PIByteArray decrypt(const PIByteArray & crypt_data, const PIByteArray & key, bool * ok = 0); + + //! Generate hash from keyphrase "secret", may be used as a key for encryption static PIByteArray hash(const PIString & secret); + + //! Generate random key + static PIByteArray generateKey(); + + //! Returns key size static int sizeKey(); + + //! Returns size which be added to data size in encryption process static int sizeCrypt(); private: