From a9b9136141b99a5a18ef9bf6f525b8d712f494cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Bonhomme?= Date: Sun, 27 Oct 2019 22:03:36 +0100 Subject: [PATCH] Everything in Markdown. --- CHANGELOG.rst => CHANGELOG.md | 144 ++++++++++++++-------------- CONTRIBUTING.rst | 104 -------------------- CONTRIBUTORS.rst => CONTRIBUTORS.md | 9 +- MANIFEST.in | 4 +- README.md | 104 ++++++++++++++++++++ README.rst | 133 ------------------------- setup.cfg | 2 +- setup.py | 6 +- 8 files changed, 187 insertions(+), 319 deletions(-) rename CHANGELOG.rst => CHANGELOG.md (81%) delete mode 100644 CONTRIBUTING.rst rename CONTRIBUTORS.rst => CONTRIBUTORS.md (89%) create mode 100644 README.md delete mode 100644 README.rst diff --git a/CHANGELOG.rst b/CHANGELOG.md similarity index 81% rename from CHANGELOG.rst rename to CHANGELOG.md index f28dc5b..efe7dbb 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ -Release History -=============== +# Release History + + +## 0.9.4 (2019-06-05) -0.9.4 (2019-06-05) ------------------- * new: Implemented LFSR generator (with tests and CLI) (`PR #27 `_) @@ -16,67 +16,67 @@ Release History (`#23 `_) -0.9.3 (2019-04-10) ------------------- +## 0.9.3 (2019-04-10) + * it is now possible to either pass the location of an image or directly pass an already opened Image.Image to the hide and reveal methods; * code re-formatted a bit with black. -0.9.2 (2019-04-04) ------------------- +## 0.9.2 (2019-04-04) + * updated Pillow dependency to version 6.0.0 in order to fix a bug when opening some PNG files (https://github.com/python-pillow/Pillow/issues/3557). -0.9.1 (2019-03-06) ------------------- +## 0.9.1 (2019-03-06) + * updated Pillow dependency in order to fix a bug when opening some PNG files. -0.9.0 (2018-12-18) ------------------- +## 0.9.0 (2018-12-18) + * added the possibility to shift the encoded bits when using the lsbset module. -0.8.6 (2018-11-05) ------------------- +## 0.8.6 (2018-11-05) + * fixed a potential security issue related to CVE-2018-18074. -0.8.5 (2018-04-18) ------------------- +## 0.8.5 (2018-04-18) + * Fixed an encoding problem which occured on Windows during the installation of the module. -0.8.4 (2018-02-28) ------------------- +## 0.8.4 (2018-02-28) + * Stegano is ready for use with pipenv and pipsi. -0.8.3 (2018-02-23) ------------------- +## 0.8.3 (2018-02-23) + * the recommended way to install Stegano is now to use pipenv. -0.8.2 (2017-12-20) ------------------- +## 0.8.2 (2017-12-20) + * Fixed a bug with the new 'encoding' function when using Stegano as a command line tool. No default value was set. Default value is UTF-8. -0.8.1 (2017-05-16) ------------------- +## 0.8.1 (2017-05-16) + * it is now possible to specify the encoding (UTF-8 or UTF-32LE) of the message to hide/reveal through the command line; @@ -87,7 +87,7 @@ Release History * a script has been added in order to get proper exit code check for mypy. -0.8 (2017-05-06) +## 0.8 (2017-05-06) ---------------- * updated command line. All commands are now prefixed with *stegano-*; @@ -96,15 +96,15 @@ Release History * improved checks when revealing a message with the lsbset module fails. -0.7.1 (2017-05-05) ------------------- +## 0.7.1 (2017-05-05) + * improved generators for the lsb-set module; * improved tests for the generators; * improved type hints. -0.7 (2017-05-04) +## 0.7 (2017-05-04) ---------------- * unicode is now supported. By default UTF-8 encoding is used. UTF-32LE can also @@ -113,8 +113,8 @@ Release History * improved checks with type hints. -0.6.9 (2017-03-10) ------------------- +## 0.6.9 (2017-03-10) + * introduces some type hints (PEP 484); * more tests for the generators and for the tools module; @@ -122,61 +122,61 @@ Release History * fixed a bug with a generator that has been previously renamed. -0.6.8 (2017-03-08) ------------------- +## 0.6.8 (2017-03-08) + * bugfix: fixed #12: Error when revealing a hidden binary file in an image. -0.6.7 (2017-02-21) ------------------- +## 0.6.7 (2017-02-21) + * bugfix: added missing dependency in the setup.py file. -0.6.6 (2017-02-20) ------------------- +## 0.6.6 (2017-02-20) + * improved docstrings for the desciption of the generators; * improved the command which displays the list of generators. -0.6.5 (2017-02-16) ------------------- +## 0.6.5 (2017-02-16) + * added a command to list all available generators for the lsb-set module; * test when the data image is coming via byte stream, for the lsb module. -0.6.4 (2017-02-06) ------------------- +## 0.6.4 (2017-02-06) + * a command line for the 'red' module has been added; * bugfix: fixed a bug in the lsb-set command line when the generator wasn't specified by the user. -0.6.3 (2017-01-29) ------------------- +## 0.6.3 (2017-01-29) + * Support for transparent PNG images has been added (lsb and lsbset modules). -0.6.2 (2017-01-19) ------------------- +## 0.6.2 (2017-01-19) + * bugfix: solved a bug when the image data is coming via byte streams (ByteIO), for the exifHeader hiding method. -0.6.1 (2016-08-25) ------------------- +## 0.6.1 (2016-08-25) + * reorganization of the steganalysis sub-module. -0.6 (2016-08-04) ------------------- +## 0.6 (2016-08-04) + * improvements of the command line of Stéganô. The use of Stéganô through the command line has slightly changed ('hide' and 'reveal' are now sub-parameters @@ -184,14 +184,14 @@ Release History software. The documentation has been updated accordingly. -0.5.5 (2016-08-03) ------------------- +## 0.5.5 (2016-08-03) + * bugfix: Incorrect padding size in `base642string` in tools.base642binary(). -0.5.4 (2016-05-22) ------------------- +## 0.5.4 (2016-05-22) + * the generator provided to the functions lsbset.hide() and lsbset.reveal() is now a function. This is more convenient for a user who wants to use a custom @@ -199,66 +199,66 @@ Release History * performance improvements for the lsb and lsbset modules. -0.5.3 (2016-05-19) ------------------- +## 0.5.3 (2016-05-19) + * reorganization of all modules. No impact for the users of Stegano. -0.5.2 (2016-05-18) ------------------- +## 0.5.2 (2016-05-18) + * improvements and bug fixes for the exifHeader module; * added unit tests for the exifHeader module; * improvements of the documentation. -0.5.1 (2016-04-16) ------------------- +## 0.5.1 (2016-04-16) + * minor improvements and bug fixes; * added unit tests for the slsb and slsbset modules. -0.5 (2016-03-18) +## 0.5 (2016-03-18) ---------------- * management of greyscale images. -0.4.6 (2016-03-12) ------------------- +## 0.4.6 (2016-03-12) + * bugfix when the length of the message to hide is not divisible by 3, for the slsb and slsbset module. -0.4.5 (2015-12-23) ------------------- +## 0.4.5 (2015-12-23) + * bugfix. -0.4.4 (2015-12-23) ------------------- +## 0.4.4 (2015-12-23) + * new project home page; * minor updated to the documentation. -0.4.3 (2015-10-06) ------------------- +## 0.4.3 (2015-10-06) + * bug fixes for Python 3; * bug fixes in the scripts in *./bin*. -0.4.2 (2015-10-05) ------------------- +## 0.4.2 (2015-10-05) + * first stable release on PypI. -0.4 (2012-01-02) +## 0.4 (2012-01-02) ---------------- This release introduces a more advanced LSB (Least Significant Bit) method @@ -268,7 +268,7 @@ the pixels used to hide the information. You can use these new methods in your Python codes as a Python module or as a program in your scripts. -0.3 (2011-04-15) +## 0.3 (2011-04-15) ---------------- * you can now use Stéganô as a library in your Python program; @@ -277,7 +277,7 @@ Python codes as a Python module or as a program in your scripts. * new documentation (reStructuredText) comes with Stéganô. -0.2 (2011-03-24) +## 0.2 (2011-03-24) ---------------- * this release introduces some bugfixes and a major speed improvement of the diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst deleted file mode 100644 index 3e9950b..0000000 --- a/CONTRIBUTING.rst +++ /dev/null @@ -1,104 +0,0 @@ -Contribution Guidelines -======================= - -Before opening proposing any pull requests (about code or documentation), -please open an issue. - -Code Contributions ------------------- - -When contributing code, you'll want to follow this checklist: - -1. Fork the repository on GitHub. -2. Run the tests to confirm they all pass on your system. If they don't, you'll - need to investigate why they fail. -3. Write tests that demonstrate your bug or feature. Ensure that they fail. -4. Make your change. -5. Run the entire test suite again, confirming that all tests pass *including - the ones you just added*. -6. Send a GitHub Pull Request to the main repository's ``master`` branch. - GitHub Pull Requests are the expected method of code collaboration on this - project. - -Code Style -~~~~~~~~~~ - -Please try to respect the `PEP 8`_ code style. - - -To get the greatest chance of helpful responses, please also observe the -following additional notes. - -.. _PEP 8: http://pep8.org - - -Documentation Contributions ---------------------------- - -Documentation improvements are always welcome! The documentation files live in -the ``docs/`` directory of the codebase. They're written in -`reStructuredText`_, and use `Sphinx`_ to generate the full suite of -documentation. - -When contributing documentation, please do your best to follow the style of the -documentation files. This means a soft-limit of 79 characters wide in your text -files and a semi-formal, yet friendly and approachable, prose style. - -When presenting Python code, use single-quoted strings (``'hello'`` instead of -``"hello"``). - -.. _reStructuredText: http://docutils.sourceforge.net/rst.html -.. _Sphinx: http://sphinx-doc.org/index.html - - - -Good Bug Reports ----------------- - -Please be aware of the following things when filing bug reports: - -1. Avoid raising duplicate issues. *Please* use the GitHub issue search feature - to check whether your bug report or feature request has been mentioned in - the past. Duplicate bug reports and feature requests are a huge maintenance - burden on the limited resources of the project. If it is clear from your - report that you would have struggled to find the original, that's ok, but - if searching for a selection of words in your issue title would have found - the duplicate then the issue will likely be closed extremely abruptly. -2. When filing bug reports about exceptions or tracebacks, please include the - *complete* traceback. Partial tracebacks, or just the exception text, are - not helpful. Issues that do not contain complete tracebacks may be closed - without warning. -3. Make sure you provide a suitable amount of information to work with. This - means you should provide: - - - Guidance on **how to reproduce the issue**. Ideally, this should be a - *small* code sample that can be run immediately by the maintainers. - Failing that, let us know what you're doing, how often it happens, what - environment you're using, etc. Be thorough: it prevents us needing to ask - further questions. - - Tell us **what you expected to happen**. When we run your example code, - what are we expecting to happen? What does "success" look like for your - code? - - Tell us **what actually happens**. It's not helpful for you to say "it - doesn't work" or "it fails". Tell us *how* it fails: do you get an - exception? A hang? A non-200 status code? How was the actual result - different from your expected result? - - Tell us **what version of Stegano you're using**, and - **how you installed it**. Different versions of Stegano behave - differently and have different bugs. - - If you do not provide all of these things, it will take us much longer to - fix your problem. If we ask you to clarify these and you never respond, we - will close your issue without fixing it. - - -Questions -========= - -The GitHub issue tracker is for *bug reports* and *feature requests*. Please do -not use it to ask questions about how to use Stegano. These questions should -instead be directed to Stack Overflow. Make sure -that your question is tagged with the `python-stegano` tag when asking it on -Stack Overflow, to ensure that it is answered promptly and accurately. -You can search for questions with -`these tags `_. diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.md similarity index 89% rename from CONTRIBUTORS.rst rename to CONTRIBUTORS.md index 2050df8..045b4c5 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.md @@ -1,10 +1,11 @@ -Owner -===== +## Owner + - Cédric Bonhomme -Contributors -============ + +## Contributors + - Adrien Cosson - Andrew Roberts diff --git a/MANIFEST.in b/MANIFEST.in index c736583..7ecc55c 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -6,5 +6,5 @@ recursive-include bin * #Misc include COPYING -include README.rst -include CHANGELOG.rst +include README.md +include CHANGELOG.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..ebd7d0e --- /dev/null +++ b/README.md @@ -0,0 +1,104 @@ +Stegano +------- + +[![builds.sr.ht status](https://builds.sr.ht/~cedric/Stegano.svg)](https://builds.sr.ht/~cedric/Stegano?) + + +[Stegano](https://github.com/cedricbonhomme/Stegano), a pure Python +Steganography module. + +Steganography is the art and science of writing hidden messages in such a way +that no one, apart from the sender and intended recipient, suspects the +existence of the message, a form of security through obscurity. Consequently, +functions provided by Stegano only hide messages, without encryption. +Steganography is often used with cryptography. + +# Installation + + +```bash +$ pipenv install Stegano +``` + +You will be able to use Stegano in your Python programs. + +If you only want to install Stegano as a command line tool: + +```bash +$ pipx install Stegano +``` + +pipx installs scripts (system wide available) provided by Python packages into +separate virtualenvs to shield them from your system and each other. + + +# Usage + +A [tutorial](https://stegano.readthedocs.io) is available. + + +## Use Stegano as a library in your Python program + +If you want to use Stegano in your Python program you just have to import the +appropriate steganography technique. For example: + +```python +>>> from stegano import lsb +>>> secret = lsb.hide("./tests/sample-files/Lenna.png", "Hello World") +>>> secret.save("./Lenna-secret.png") +>>> +>>> clear_message = lsb.reveal("./Lenna-secret.png") +``` + + +## Use Stegano as a command line tool + +### Hide and reveal a message + +```bash +$ stegano-lsb hide -i ./tests/sample-files/Lenna.png -m "Secret Message" -o Lena1.png +$ stegano-lsb reveal -i Lena1.png +Secret Message +``` + + +### Hide the message with the Sieve of Eratosthenes + +```bash +$ stegano-lsb-set hide -i ./tests/sample-files/Lenna.png -m 'Secret Message' --generator eratosthenes -o Lena2.png +``` + +The message will be scattered in the picture, following a set described by the +Sieve of Eratosthenes. Other sets are available. You can also use your own +generators. + +This will make a steganalysis more complicated. + + +## Running the tests + +```bash +$ python -m unittest discover -v +``` + +Running the static type checker: + +```bash +$ python tools/run_mypy.py +``` + + +# Contributions + +Contributions are welcome. If you want to contribute to Stegano I highly +recommend you to install it in a Python virtual environment with pipenv. + + +# License + +This software is licensed under +[GNU General Public License version 3](https://www.gnu.org/licenses/gpl-3.0.html) + +Copyright (C) 2010-2019 [Cédric Bonhomme](https://www.cedricbonhomme.org) + +For more information, [the list of authors and contributors](CONTRIBUTORS.rst) is available. diff --git a/README.rst b/README.rst deleted file mode 100644 index 2c681ee..0000000 --- a/README.rst +++ /dev/null @@ -1,133 +0,0 @@ -Stegano -======= - -.. image:: https://img.shields.io/pypi/pyversions/Stegano.svg?style=flat-square - :target: https://pypi.python.org/pypi/Stegano - -.. image:: https://img.shields.io/pypi/v/Stegano.svg?style=flat-square - :target: https://github.com/cedricbonhomme/Stegano/releases/latest - -.. image:: https://img.shields.io/pypi/l/Stegano.svg?style=flat-square - :target: https://www.gnu.org/licenses/gpl-3.0.html - -.. image:: https://img.shields.io/travis/cedricbonhomme/Stegano/master.svg?style=flat-square - :target: https://travis-ci.org/cedricbonhomme/Stegano - -.. image:: https://img.shields.io/coveralls/cedricbonhomme/Stegano/master.svg?style=flat-square - :target: https://coveralls.io/github/cedricbonhomme/Stegano?branch=master - -.. image:: https://img.shields.io/github/stars/cedricbonhomme/Stegano.svg?style=flat-square - :target: https://github.com/cedricbonhomme/Stegano/stargazers - -.. image:: https://img.shields.io/badge/SayThanks.io-%E2%98%BC-1EAEDB.svg?style=flat-square - :target: https://saythanks.io/to/cedricbonhomme - - -`Stegano `_, a pure Python -Steganography module. - -Steganography is the art and science of writing hidden messages in such a way -that no one, apart from the sender and intended recipient, suspects the -existence of the message, a form of security through obscurity. Consequently, -functions provided by Stegano only hide messages, without encryption. -Steganography is often used with cryptography. - -Installation ------------- - -.. code:: bash - - $ pipenv install Stegano - ✨🐍✨ - -You will be able to use Stegano in your Python programs. - -If you only want to install Stegano as a command line tool: - -.. code:: bash - - $ pipx install Stegano - ✨🍰✨ - -pipx installs scripts (system wide available) provided by Python packages into -separate virtualenvs to shield them from your system and each other. - - -Usage ------ - -A `tutorial `_ is available. - - -Use Stegano as a library in your Python program -''''''''''''''''''''''''''''''''''''''''''''''' - -If you want to use Stegano in your Python program you just have to import the -appropriate steganography technique. For example: - -.. code:: python - - >>> from stegano import lsb - >>> secret = lsb.hide("./tests/sample-files/Lenna.png", "Hello World") - >>> secret.save("./Lenna-secret.png") - >>> - >>> clear_message = lsb.reveal("./Lenna-secret.png") - - -Use Stegano as a command line tool -'''''''''''''''''''''''''''''''''' - -Hide and reveal a message -~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. code:: bash - - $ stegano-lsb hide -i ./tests/sample-files/Lenna.png -m "Secret Message" -o Lena1.png - $ stegano-lsb reveal -i Lena1.png - Secret Message - - -Hide the message with the Sieve of Eratosthenes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. code:: bash - - $ stegano-lsb-set hide -i ./tests/sample-files/Lenna.png -m 'Secret Message' --generator eratosthenes -o Lena2.png - -The message will be scattered in the picture, following a set described by the -Sieve of Eratosthenes. Other sets are available. You can also use your own -generators. - -This will make a steganalysis more complicated. - - -Running the tests ------------------ - -.. code:: bash - - $ python -m unittest discover -v - -Running the static type checker: - -.. code:: bash - - $ python tools/run_mypy.py - - -Contributions -------------- - -Contributions are welcome. If you want to contribute to Stegano I highly -recommend you to install it in a Python virtual environment with pipenv. - - -License -------- - -This software is licensed under -`GNU General Public License version 3 `_ - -Copyright (C) 2010-2019 `Cédric Bonhomme `_ - -For more information, `the list of authors and contributors `_ is available. diff --git a/setup.cfg b/setup.cfg index 5aef279..b88034e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,2 +1,2 @@ [metadata] -description-file = README.rst +description-file = README.md diff --git a/setup.py b/setup.py index 2ebc27a..3821fd1 100644 --- a/setup.py +++ b/setup.py @@ -26,9 +26,9 @@ scripts = [ requires = ['pillow', 'piexif', 'crayons'] -with codecs.open(os.path.join(here, 'README.rst'), encoding='utf-8') as f: +with codecs.open(os.path.join(here, 'README.md'), encoding='utf-8') as f: readme = f.read() -with codecs.open(os.path.join(here, 'CHANGELOG.rst'), encoding='utf-8') as f: +with codecs.open(os.path.join(here, 'CHANGELOG.md'), encoding='utf-8') as f: changelog = f.read() setup( @@ -41,7 +41,7 @@ setup( scripts=scripts, url='https://github.com/cedricbonhomme/Stegano', description='A pure Python Steganography module.', - long_description=readme + '\n|\n\n' + changelog, + long_description=readme + '\n\n' + changelog, platforms = ['Linux'], license='GPLv3', install_requires=requires,