/*! \file picrypt.h * \brief Cryptographic class using lib Sodium */ /* PIP - Platform Independent Primitives Cryptographic class using lib Sodium 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 Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef PICRYPT_H #define PICRYPT_H #include "pip_crypt_export.h" #include "pistring.h" class PIP_CRYPT_EXPORT 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, PIByteArray key); //! Decrypt given data "crypt_data" with key "key" static PIByteArray decrypt(const PIByteArray & crypt_data, 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 hash from bytearray static PIByteArray hash(const PIByteArray & data); //! Generate hash from bytearray static PIByteArray hash(const PIByteArray & data, const unsigned char * key, size_t keylen); //! Returns hash size static size_t sizeHash(); //! Generate short hash from string "s", may be used for hash table static ullong shorthash(const PIString & s, PIByteArray key = PIByteArray()); //! Generate random key static PIByteArray generateKey(); //! Generate random buffer static PIByteArray generateRandomBuff(int size); //! Returns key size static size_t sizeKey(); //! Returns size which be added to data size in encryption process static size_t sizeCrypt(); //! Function randomly generates a secret key and a corresponding public key for digital signature static void generateSignKeys(PIByteArray & public_key, PIByteArray & secret_key); //! Function generates a secret key from input data and a corresponding public key for digital signature static void generateSignKeys(PIByteArray & public_key, PIByteArray & secret_key, const PIByteArray & seed); //! Function extract sign public key from sing secret key static PIByteArray extractSignPublicKey(const PIByteArray & secret_key); //! Calculate digital signature for data PIByteArray signMessage(const PIByteArray & data, PIByteArray secret_key); //! Verify digital signature of signed message bool verifySign(const PIByteArray & data, const PIByteArray & signature, PIByteArray public_key); //! Function randomly generates a secret key and a corresponding public key for authenticated encryption static void generateKeypair(PIByteArray & public_key, PIByteArray & secret_key); //! Function generates a secret key from input data and a corresponding public key for authenticated encryption static void generateKeypair(PIByteArray & public_key, PIByteArray & secret_key, const PIByteArray & seed); //! Encrypt given data "data" PIByteArray crypt(const PIByteArray &data, const PIByteArray & public_key, const PIByteArray & secret_key); //! Decrypt given data "crypt_data" PIByteArray decrypt(const PIByteArray & crypt_data, const PIByteArray & public_key, const PIByteArray & secret_key, bool * ok = 0); //! Generate password hash from "password" static PIByteArray passwordHash(const PIString & password, const PIByteArray & seed); //! Returns libsodium version static PIString version(); private: static bool init(); PIByteArray nonce_, key_; }; #endif // PICRYPT_H