O
YLc            
   @   sV  d  Z  d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d	   Z	 e
 d
 k rRd Z d Z e e  Z e d d d e g k r e d  n  e d d d g  Z e e  Z e e  Z e e k r e d  n  e d d d d d d d d g  Z d Z e e e e e d  g   Z e e d d d d d d d d g  k rhe d  n  d d l Z e g   Z x- e d  D] Z e j e j d d   qWd Z e e d  Z e e  Z e e e  Z e e e  Z  e e! e  d  k re d  n  e d d d   e d  d! d  e" d! d"  Z# e# j$   Z% e# j&   e% e d# d$  k rxe d%  n  e d& d' d(  e" d' d"  Z# e# j$   Z% e# j&   e% e d) d$  k re d*  n  e d& d+ d,  e	 d, d-  e" d+ d"  Z' e' j$   Z( e' j&   e" d- d"  Z) e) j$   Z* e) j&   e( e* k rRe d.  qRn  d S(/   u   
Das Modul stellt Funktionen und Prozeduren bereit, um Bytes in
den Least-Significant-Bits von Pixeldaten-Bytes zu verstecken.


c       	      C   sG  d   } t  |   }  d } | |  |  d } | |  |  t |  d d  d  d k ri t d   n  d } x+ |  | d k r | |  |  | d } qr W| } x+ |  | d k r | |  |  | d } q W| } t t |  | |  d   } x+ |  | d k r#| |  |  | d } q W| } x+ |  | d k rW| |  |  | d } q-W| } t t |  | |  d   } x+ |  | d k r| |  |  | d } qW| } x+ |  | d k r| |  |  | d } qW| } t t |  | |  d   } |  | d k r#t d   n  |  | d d  } | | | | g S(   u   
    liefert zu den Bytes s (bytes) einer ppm-Datei
    [Breite w (int), Höhe h (int), Farbtiefe mv (int),
     Liste der Pixeldaten (bytes)] 
    c             S   s[   |  | t  d  k rW | } x |  | d k r< | d } q W| } |  | | d  =n  d S(   u   
        löscht in s (bytearray), wenn Byte Nummer i (int) gleich ord('#') ist,
        alle Bytes bis zum ersten Auftreten von ord('')==13 oder
        ord('
')==10 einschließlich
        u   #i
   i   i   N(   i
   i   (   u   ord(   u   su   iu   acu   ec(    (    u$   /home/mk/Desktop/stegano/stegano1.pyu   skipcomment   s     i    i   i   u   ASCIIu   P6u   Fehler in magic numberi	   i
   i   i    u%   Fehler in single whitespace characterN(   i	   i
   i   i    (   i	   i
   i   i    (   i	   i
   i   i    (   i	   i
   i   i    (   i	   i
   i   i    (   i	   i
   i   i    (   i	   i
   i   i    (   u	   bytearrayu   stru   RuntimeErroru   int(	   u   su   skipcommentu   iu   au   eu   wu   hu   mvu   d(    (    u$   /home/mk/Desktop/stegano/stegano1.pyu   ppmDaten	   s\    	      c             C   sy   t  d  } t |   } xZ t |  D]L } |  | } x9 t d  D]+ } | t  | d @d g  } | d } qB Wq% W| S(   uZ   
    liefert zum a (bytes) das zugehörige b (bytes),
    das die Einzelbits enthält
    i    i   i   i   (   u   bytesu   lenu   range(   u   au   bu   nu   iu   hu   j(    (    u$   /home/mk/Desktop/stegano/stegano1.pyu
   Bytes2BitsX   s     
 c             C   s   t  d  } t |   d } x t |  D] } d |  | d d |  | d d d |  | d d d |  | d d	 d |  | d d
 d
 |  | d d d |  | d d d |  | d d } | t  | g  } q) W| S(   u?   
    baut aus b (bytes) der Einzelbits a (bytes) der Bytes
    i    i   i   i@   i   i    i   i   i   i   i   i   i   (   u   bytesu   lenu   range(   u   bu   au   nu   iu   h(    (    u$   /home/mk/Desktop/stegano/stegano1.pyu
   Bits2Bytesf   s     c             C   sp   t  |  } t |  } t d  } x1 t |  D]# } | j |  | d @| |  q1 W| |  | d  } | S(   u   
    liefert c (bytearray) zurück, das aus a (bytes) entsteht,
    wenn das LSB jeweils entsprechend b (bytes) gewählt wird
    i    i   N(   u
   Bytes2Bitsu   lenu	   bytearrayu   rangeu   append(   u   au   bu   hu   nu   cu   i(    (    u$   /home/mk/Desktop/stegano/stegano1.pyu	   encodeLSBr   s     !c             C   s   t  d  } x t |  D] } d |  | d d d |  | d d d d |  | d d d d |  | d d	 d d |  | d d
 d d
 |  | d d d d |  | d d d d |  | d d d } | t  | g  } q W| S(   ud   
    liefert b (bytes) der Länge n (int) zurück, dessen Bytes aus den
    LSBs von a bestehen
    i    i   i   i   i@   i   i    i   i   i   i   i   i   (   u   bytesu   range(   u   au   nu   bu   iu   h(    (    u$   /home/mk/Desktop/stegano/stegano1.pyu	   decodeLSB   s     c             C   s   t  |  d  } | j   } | j   t |  \ } } } } t  | d  } | j   }	 | j   t | |	  }
 t d t |  d t |  d t |  d d  } t  | d  } | j |  | j |
  | j   d S(   u   
    erzeugt aus einer ppm-Datei ppm1 (str) und einer Datendatei daten (str)
    eine ppm-Datei ppm2 (str), die die Daten enthält
    u   rbu   P6
u    u   
u   ASCIIu   wbN(   u   openu   readu   closeu   ppmDatenu	   encodeLSBu   bytesu   stru   write(   u   ppm1u   datenu   ppm2u   dateiu   su   bu   hu   ftu   pdatenu   ndatenu   sdatenu   header(    (    u$   /home/mk/Desktop/stegano/stegano1.pyu	   encodePPM   s    

9c       
      C   sv   t  |  d  } | j   } | j   t |  \ } } } } t | |  }	 t  | d  } | j |	  | j   d S(   ue   
    extrahiert aus einer ppm-Datei ppm (str) eine
    Datendatei daten (str) der Länge n (int)
    u   rbu   wbN(   u   openu   readu   closeu   ppmDatenu	   decodeLSBu   write(
   u   ppmu   datenu   nu   dateiu   su   bu   hu   ftu   pdatenu   ndaten(    (    u$   /home/mk/Desktop/stegano/stegano1.pyu	   decodePPM   s    
c             C   s5  t  |  d  } | j   } | j   t |  \ } } } } t  | d  } | j   }	 | j   t |	  }
 t |
  } x  t |  d k  r d | } q} Wt | d  } | |	 }	 t | |	  } t d t |  d t |  d t |  d d  } t  | d  } | j |  | j |  | j   d	 S(
   u   
    erzeugt aus einer ppm-Datei ppm1 (str) und einer Datendatei daten (str)
    eine ppm-Datei ppm2 (str), die die Daten enthält,
    dabei sind die ersten 6 Bytes die Anzahl der Nutzdaten in ASCII-Ziffern
    u   rbi   u   0u   ASCIIu   P6
u    u   
u   wbN(	   u   openu   readu   closeu   ppmDatenu   lenu   stru   bytesu	   encodeLSBu   write(   u   ppm1u   datenu   ppm2u   dateiu   su   bu   hu   ftu   pdatenu   ndatenu   nu   headu   headeru   sdaten(    (    u$   /home/mk/Desktop/stegano/stegano1.pyu   hidePPM   s(    

 
9c       
      C   s   t  |  d  } | j   } | j   t |  \ } } } } t t t | d  d   } t | | d  d d  }	 t  | d  } | j |	  | j   d S(   u   
    extrahiert aus einer ppm-Datei ppm (str) eine Datendatei daten (str),
    dabei wird erwartet, dass die ersten 6 Bytes der Daten die Groesse
    der Datendatei in ASCII-Ziffern angibt
    u   rbi   u   ASCIINu   wb(   u   openu   readu   closeu   ppmDatenu   intu   stru	   decodeLSBu   write(
   u   ppmu   datenu   dateiu   su   bu   hu   ftu   pdatenu   nu   ndaten(    (    u$   /home/mk/Desktop/stegano/stegano1.pyu   discoverPPM   s    
u   __main__sT   P# seltsam6
# CREATOR: GIMP PNM Filter Version 1.1
6 1
25#12345s   i   i   i   u   ppmDaten okiA   i   iB   u   Bytes2Bits, Bits2Bytes oki    u   01001101i   u   encodeLSB, einfach okNi  u   Hallö Welt!€€€u   utf8u   encodeLSB, decodeLSB oku	   spec5.ppmu   abc.txtu	   spec6.ppmu   abc1.txtu   rbu   qwertzu   ASCIIu   encodePPM oku   staufine.ppmu
   daten0.txti   u   LK12u   decodePPM oku
   daten1.txtu   staufine2.ppmu
   daten2.txtu   hidePPM, discoverPPM ok(+   u   __doc__u   ppmDatenu
   Bytes2Bitsu
   Bits2Bytesu	   encodeLSBu	   decodeLSBu	   encodePPMu	   decodePPMu   hidePPMu   discoverPPMu   __name__u   su   pdu   du   printu   bytesu   au   bu   cu	   bitmusteru   intu   randomu	   bytearrayu   rangeu   iu   appendu   randintu   stu   inhaltu   lenu   nu   enu   deu   stru   openu   dateiu   readu   datu   closeu   datei1u   dat1u   datei2u   dat2(    (    (    u$   /home/mk/Desktop/stegano/stegano1.pyu   <module>   sx   	O								$!* 




