Commit 033d3b0dcd2e935089ea680a551c49f3cd01d2bb

Authored by Chunk
1 parent 6cbb3879
Exists in master

staged.

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