diff --git a/bin/lsb-set b/bin/lsb-set
index 0712b14..5340399 100755
--- a/bin/lsb-set
+++ b/bin/lsb-set
@@ -20,12 +20,14 @@
# along with this program. If not, see
__author__ = "Cedric Bonhomme"
-__version__ = "$Revision: 0.5 $"
+__version__ = "$Revision: 0.5.1 $"
__date__ = "$Date: 2016/03/18 $"
+__revision__ = "$Date: 2016/05/22 $"
__license__ = "GPLv3"
try:
from stegano import lsbset
+ from stegano.lsbset import generators
except:
print("Install stegano: sudo pip install Stegano")
@@ -67,6 +69,10 @@ parser.set_defaults(input_image_file = './pictures/Lenna.png',
(options, args) = parser.parse_args()
+try:
+ generator = getattr(generators, options.generator_function)()
+except AttributeError as e:
+ raise e
if options.hide:
if options.secret_message != "" and options.secret_file == "":
@@ -74,7 +80,7 @@ if options.hide:
elif options.secret_message == "" and options.secret_file != "":
secret = tools.binary2base64(options.secret_file)
- img_encoded = lsbset.hide(options.input_image_file, secret, options.generator_function)
+ img_encoded = lsbset.hide(options.input_image_file, secret, generator)
try:
img_encoded.save(options.output_image_file)
except Exception as e:
@@ -83,7 +89,7 @@ if options.hide:
elif options.reveal:
try:
- secret = lsbset.reveal(options.input_image_file, options.generator_function)
+ secret = lsbset.reveal(options.input_image_file, generator)
except IndexError:
print("Impossible to detect message.")
exit(0)
diff --git a/stegano/lsbset/lsbset.py b/stegano/lsbset/lsbset.py
index ffceadd..e39388a 100644
--- a/stegano/lsbset/lsbset.py
+++ b/stegano/lsbset/lsbset.py
@@ -20,8 +20,9 @@
# along with this program. If not, see
__author__ = "Cedric Bonhomme"
-__version__ = "$Revision: 0.4.1 $"
+__version__ = "$Revision: 0.4.2 $"
__date__ = "$Date: 2016/03/13 $"
+__revision__ = "$Date: 2016/05/22 $"
__license__ = "GPLv3"
import sys
@@ -36,7 +37,7 @@ try:
except NameError:
pass
-def hide(input_image_file, message, generator_function, auto_convert_rgb=False):
+def hide(input_image_file, message, generator, auto_convert_rgb=False):
"""
Hide a message (string) in an image with the
LSB (Least Significant Bit) technique.
@@ -69,11 +70,6 @@ def hide(input_image_file, message, generator_function, auto_convert_rgb=False):
raise Exception("The message you want to hide is too long: {}".\
format(message_length))
- try:
- generator = getattr(generators, generator_function)()
- except AttributeError as e:
- raise e
-
while index + 3 <= len_message_bits :
generated_number = next(generator)
(r, g, b) = img_list[generated_number]
@@ -97,8 +93,7 @@ def hide(input_image_file, message, generator_function, auto_convert_rgb=False):
return encoded
-
-def reveal(input_image_file, generator_function):
+def reveal(input_image_file, generator):
"""
Find a message in an image
(with the LSB technique).
@@ -110,8 +105,6 @@ def reveal(input_image_file, generator_function):
bitab = []
limit = None
- generator = getattr(generators, generator_function)()
-
while True:
generated_number = next(generator)
# color = [r, g, b]
@@ -178,6 +171,10 @@ if __name__ == '__main__':
(options, args) = parser.parse_args()
+ try:
+ generator = getattr(generators, options.generator_function)()
+ except AttributeError as e:
+ raise e
if options.hide:
if options.secret_message != "" and options.secret_file == "":
@@ -185,7 +182,7 @@ if __name__ == '__main__':
elif options.secret_message == "" and options.secret_file != "":
secret = tools.binary2base64(options.secret_file)
- img_encoded = hide(options.input_image_file, secret, options.generator_function)
+ img_encoded = hide(options.input_image_file, secret, generator)
try:
img_encoded.save(options.output_image_file)
except Exception as e:
@@ -194,7 +191,7 @@ if __name__ == '__main__':
elif options.reveal:
try:
- secret = reveal(options.input_image_file, options.generator_function)
+ secret = reveal(options.input_image_file, generator)
except IndexError:
print("Impossible to detect message.")
exit(0)
diff --git a/tests/test_lsbset.py b/tests/test_lsbset.py
index 03282a0..d6e0309 100644
--- a/tests/test_lsbset.py
+++ b/tests/test_lsbset.py
@@ -20,14 +20,16 @@
# along with this program. If not, see
__author__ = "Cedric Bonhomme"
-__version__ = "$Revision: 0.1 $"
+__version__ = "$Revision: 0.2 $"
__date__ = "$Date: 2016/04/13 $"
+__revision__ = "$Date: 2016/05/22 $"
__license__ = "GPLv3"
import os
import unittest
from stegano import lsbset
+from stegano.lsbset import generators
class TestLSBSet(unittest.TestCase):
@@ -37,33 +39,34 @@ class TestLSBSet(unittest.TestCase):
"""
with self.assertRaises(AssertionError):
secret = lsbset.hide("./tests/sample-files/Lenna.png", "",
- "eratosthenes")
+ generators.eratosthenes())
def test_hide_and_reveal(self):
messages_to_hide = ["a", "foo", "Hello World!", ":Python:"]
for message in messages_to_hide:
secret = lsbset.hide("./tests/sample-files/Lenna.png", message,
- "eratosthenes")
+ generators.eratosthenes())
secret.save("./image.png")
- clear_message = lsbset.reveal("./image.png", "eratosthenes")
+ clear_message = lsbset.reveal("./image.png",
+ generators.eratosthenes())
self.assertEqual(message, clear_message)
def test_hide_and_reveal_with_bad_generator(self):
message_to_hide = "Hello World!"
secret = lsbset.hide("./tests/sample-files/Lenna.png", message_to_hide,
- "eratosthenes")
+ generators.eratosthenes())
secret.save("./image.png")
with self.assertRaises(IndexError):
- clear_message = lsbset.reveal("./image.png", "identity")
+ clear_message = lsbset.reveal("./image.png", generators.identity())
def test_with_unknown_generator(self):
message_to_hide = "Hello World!"
with self.assertRaises(AttributeError):
secret = lsbset.hide("./tests/sample-files/Lenna.png",
- message_to_hide, "eratosthene")
+ message_to_hide, generators.eratosthene())
def tearDown(self):
try: