/*! \file piethutilbase.h
 * \ingroup IO-Utils
 * \~\brief
 * \~english Base class for ethernet utils
 * \~russian Базовый класс для утилит ethernet
 */
/*
	PIP - Platform Independent Primitives
	Base class for ethernet utils
	Ivan Pelipenko peri4ko@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 <http://www.gnu.org/licenses/>.
*/

#ifndef PIETHUTILBASE_H
#define PIETHUTILBASE_H

#include "pip_io_utils_export.h"
#include "pibytearray.h"

class PIP_IO_UTILS_EXPORT PIEthUtilBase {
public:
	PIEthUtilBase();
	~PIEthUtilBase();

	//! Set crypt layer enabled
	void setCryptEnabled(bool on);

	//! Enable crypt layer
	void cryptEnable();

	//! Disable crypt layer
	void cryptDisable();

	//! Returns if crypt layer enabled
	bool isCryptEnabled() const;


	//! Set crypt layer key to \"k\"
	void setCryptKey(const PIByteArray & k);

	//! Generate crypt layer key by \a PICrypt::hash and
	//! set crypt layer enabled
	void createCryptKey(const PIString & k);

	//! Returns crypt layer key
	PIByteArray cryptKey() const;

protected:

	/*! \brief Returns encrypted data if layer enabled,
	 *  otherwise returns unchanged \"data\" */
	PIByteArray   cryptData(const PIByteArray & data);

	/*! \brief Returns decrypted data if layer enabled,
	 *  otherwise returns unchanged \"data\". If decryption
	 *  was unsuccessfull returns empty %PIByteArray. */
	PIByteArray decryptData(const PIByteArray & data);

private:
	PIByteArray _key;
	bool _crypt;

};

#endif // PIETHUTILBASE_H
