Commit 033d3b0dcd2e935089ea680a551c49f3cd01d2bb

Authored by Chunk
1 parent 6cbb3879
Exists in master

staged.

msteg/StegBase.py
... ... @@ -20,7 +20,7 @@ class StegBase(object):
20 20 similarly such as JSteg, OutGuess and F3.
21 21 """
22 22  
23   - def __init__(self):
  23 + def __init__(self,key=sample_key):
24 24 """
25 25 Constructor of the JPEGSteg class.
26 26 """
... ... @@ -28,7 +28,7 @@ class StegBase(object):
28 28 self.cov_jpeg = None
29 29 self.cov_data = None
30 30 self.hid_data = None
31   - self.key = None
  31 + self.key = key
32 32  
33 33 def _get_cov_data(self, img_path):
34 34 """
... ... @@ -143,6 +143,14 @@ class StegBase(object):
143 143 (emb_size, verb, duration, (emb_size / duration) / 1000.,
144 144 float(emb_size) / cov_size))
145 145  
  146 + # set & get
  147 + def set_key(self, key):
  148 + assert key != None
  149 + self.key = key
  150 +
  151 + def get_key(self):
  152 + return self.key
  153 +
146 154 # dummy functions to please pylint
147 155 def _raw_embed(self, cov_data, hid_data):
148 156 pass
... ...
msteg/StegBase.pyc
No preview for this file type
msteg/steganography/F4.py
... ... @@ -18,8 +18,7 @@ class F4(StegBase):
18 18 """
19 19 Constructor of the F3 class.
20 20 """
21   - StegBase.__init__(self)
22   - self.key = key
  21 + StegBase.__init__(self, key)
23 22  
24 23 def _get_cov_data(self, img_path):
25 24 """
... ... @@ -76,7 +75,6 @@ class F4(StegBase):
76 75 header_size = 4 * 8
77 76 size_data, bits_cnt = self._raw_extract(steg_data, header_size)
78 77 size_data = bits2bytes(size_data)
79   - print size_data
80 78  
81 79 size_hd = 0
82 80 for i in xrange(4):
... ... @@ -144,4 +142,4 @@ class F4(StegBase):
144 142 return hid_data, j
145 143  
146 144 def __str__(self):
147   - return "F4'"
  145 + return "F4"
... ...
msteg/steganography/F4.pyc
No preview for this file type
msteg/steganography/F5.py
... ... @@ -22,27 +22,25 @@ which embedding function (one of JSteg, F3, F4) should be used.
22 22 import time
23 23 import math
24 24 import numpy as np
25   -from stegotool.plugins.steganography.F4.F4 import F4
26   -from stegotool.util.JPEGSteg import JPEGSteg
27   -from stegotool.util.plugins import describe_annotate_convert
28   -from stegotool.util.plugins import ident, ImagePath, FilePath, NewFilePath
  25 +import numpy.random as rnd
  26 +from msteg.StegBase import *
  27 +from F4 import F4
  28 +import mjsteg
  29 +import jpegObj
  30 +from common import *
29 31  
30 32  
31   -class F5(JPEGSteg):
  33 +class F5(StegBase):
32 34 """ This module has two methods: <i>embed_raw_data</i> to embed data
33 35 with the F5 algorithm and <i>extract_raw_data</i> to extract data
34 36 which was embedded previously. """
35 37  
36   - def __init__(self, ui, core):
  38 + def __init__(self, key=sample_key):
37 39 """
38 40 Constructor of the F5 class.
39 41 """
40   - JPEGSteg.__init__(self, ui, core)
41   - self._embed_hook = self._embed_k
42   - self._extract_hook = self._extract_k
  42 + StegBase.__init__(self, key)
43 43 self._embed_fun = None
44   - self.dct_p = None
45   - self.seed = None
46 44 self.default_embedding = True
47 45 self.steg_ind = -1
48 46 self.excess_bits = None
... ... @@ -56,7 +54,7 @@ class F5(JPEGSteg):
56 54 ("stego image", NewFilePath, str),
57 55 ("seed", int, int),
58 56 ("embedding behavior",
59   - ['Default', 'F3', 'JSteg'], str))
  57 + ['Default', 'F3', 'JSteg'], str))
60 58 def embed_raw_data(self, src_cover, src_hidden, tgt_stego, seed,
61 59 embed_fun):
62 60 """<p>This method embeds arbitrary data into a cover image.
... ... @@ -162,7 +160,7 @@ class F5(JPEGSteg):
162 160 while not success:
163 161 self.cov_ind += 1
164 162 while cov_data[self.dct_p[self.cov_ind]] == 0 or \
165   - self.dct_p[self.cov_ind] % 64 == 0:
  163 + self.dct_p[self.cov_ind] % 64 == 0:
166 164 self.cov_ind += 1
167 165 if m != cov_data[self.dct_p[self.cov_ind]] & 1:
168 166 cov_data[self.dct_p[self.cov_ind]] -= \
... ... @@ -176,8 +174,8 @@ class F5(JPEGSteg):
176 174 k_split = np.zeros(4, np.uint8)
177 175 for i in xrange(k_split.size):
178 176 self.steg_ind += 1
179   - while self.steg_data[self.dct_p[self.steg_ind]] == 0 or\
180   - self.dct_p[self.steg_ind] % 64 == 0:
  177 + while self.steg_data[self.dct_p[self.steg_ind]] == 0 or \
  178 + self.dct_p[self.steg_ind] % 64 == 0:
181 179 self.steg_ind += 1
182 180 k_split[i] = self.steg_data[self.dct_p[self.steg_ind]] & 1
183 181 self.k_coeff = self.lookup_tab.merge_words(tuple([0, 0, 0, 0] +
... ... @@ -190,7 +188,7 @@ class F5(JPEGSteg):
190 188 for i, c in enumerate(cov_data):
191 189 if update_cnt == 0:
192 190 self._set_progress(
193   - int(30 * (float(i) / float(cov_data.size))))
  191 + int(30 * (float(i) / float(cov_data.size))))
194 192 update_cnt = 10000
195 193 update_cnt -= 1
196 194 # pessimistic, but accurate estimation of the capacity of the image
... ... @@ -204,7 +202,7 @@ class F5(JPEGSteg):
204 202 raise Exception("Cannot fit %d bits in %d DCT coefficients. \
205 203 Cover image is too small." % (hid_size, cov_size))
206 204 self.ui.display_status('DCT embedding ratio = %f' \
207   - % (float(hid_size) / float(cov_size)))
  205 + % (float(hid_size) / float(cov_size)))
208 206 k = 1
209 207 while True:
210 208 k += 1
... ... @@ -246,14 +244,14 @@ class F5(JPEGSteg):
246 244 while remaining_bits > 0:
247 245 if update_cnt == 0:
248 246 self._set_progress(30 + int(((
249   - hid_size - remaining_bits) / hid_size) * 70))
  247 + hid_size - remaining_bits) / hid_size) * 70))
250 248 update_cnt = int(hid_size / (70.0 * k))
251 249 update_cnt -= 1
252 250 msg_chunk_size = min(remaining_bits, k)
253 251 msg_chunk = np.zeros(k, np.int8)
254 252 cov_chunk = np.zeros(n, np.int32)
255 253 msg_chunk[0:msg_chunk_size] = hid_data[hid_ind:hid_ind +
256   - msg_chunk_size]
  254 + msg_chunk_size]
257 255 hid_ind += k
258 256  
259 257 # get n DCT coefficients
... ... @@ -281,8 +279,8 @@ class F5(JPEGSteg):
281 279 if cov_data[cov_chunk[s - 1]] == 0: # test for shrinkage
282 280 cov_chunk[s - 1:-1] = cov_chunk[s:] # adjusting
283 281 cov_ind += 1
284   - while cov_data[dct_p[cov_ind]] == 0 or\
285   - dct_p[cov_ind] % 64 == 0:
  282 + while cov_data[dct_p[cov_ind]] == 0 or \
  283 + dct_p[cov_ind] % 64 == 0:
286 284 cov_ind += 1
287 285 cov_chunk[n - 1] = dct_p[cov_ind]
288 286 else:
... ... @@ -319,7 +317,7 @@ class F5(JPEGSteg):
319 317  
320 318 if self.excess_bits != None:
321 319 hid_data[hid_ind:hid_ind + self.excess_bits.size] = \
322   - self.excess_bits
  320 + self.excess_bits
323 321 hid_ind += self.excess_bits.size
324 322 remaining_bits -= self.excess_bits.size
325 323  
... ... @@ -331,7 +329,7 @@ class F5(JPEGSteg):
331 329  
332 330 if update_cnt == 0 and not is_header:
333 331 self._set_progress(int(((float(num_bits) \
334   - - remaining_bits) / num_bits) * 100))
  332 + - remaining_bits) / num_bits) * 100))
335 333 update_cnt = int(num_bits / (100.0 * k))
336 334  
337 335 update_cnt -= 1
... ... @@ -339,8 +337,8 @@ class F5(JPEGSteg):
339 337 steg_chunk = [0 for i in xrange(n)]
340 338 for i in xrange(n):
341 339 self.steg_ind += 1
342   - while self.steg_data[dct_p[self.steg_ind]] == 0 or\
343   - dct_p[self.steg_ind] % 64 == 0:
  340 + while self.steg_data[dct_p[self.steg_ind]] == 0 or \
  341 + dct_p[self.steg_ind] % 64 == 0:
344 342 self.steg_ind += 1
345 343 steg_chunk[i] = self.steg_data[dct_p[self.steg_ind]]
346 344  
... ...
test_jpeg.py
... ... @@ -187,11 +187,11 @@ if __name__ == &#39;__main__&#39;:
187 187 # test_bitbyte()
188 188  
189 189 ima = jpegObj.Jpeg("res/test3.jpg",key=sample_key)
190   - imb = jpegObj.Jpeg("res/new.jpg",key=sample_key)
  190 + # imb = jpegObj.Jpeg("res/new.jpg",key=sample_key)
191 191 imc = jpegObj.Jpeg("res/steged.jpg",key=sample_key)
192 192 print ima.Jgetcompdim(0)
193   - print ima.getkey(),imb.getkey()
194   - diffblocks(imb, ima)
  193 + print ima.getkey(),imc.getkey()
  194 + diffblocks(ima, imc)
195 195  
196 196 # c1 = ima.getCoefBlocks()
197 197 # c2 = imb.getCoefBlocks()
... ...
test_steg.py
... ... @@ -30,7 +30,7 @@ if __name__ == &#39;__main__&#39;:
30 30 f3test = F4.F4()
31 31 f3test.embed_raw_data("res/test3.jpg", "res/embeded", "res/steged.jpg")
32 32 f3test.extract_raw_data("res/steged.jpg", "res/extracted")
33   -
  33 + print f3test.get_key()
34 34 pass
35 35  
36 36  
... ...