
    Ѯh                          d Z ddlZddlZddlmZ d Zd Zdj                         ZddZ	ddZ
dd	Zd
 Zedk(  r e        yy)zLpasslib.crypto._blowfish._gen_files - meta script that generates unrolled.py    N)irangec                 J     dj                   fdt        |      D              S )Nz, c              3   :   K   | ]  }t        |      z     y w)N)str).0xnames     u/home/www/academy-backend.kofcorporation.com/venv/lib/python3.12/site-packages/passlib/crypto/_blowfish/_gen_files.py	<genexpr>zvarlist.<locals>.<genexpr>   s     :qTCF]:s   )joinr   )r	   counts   ` r
   varlistr      s    99:F5M:::    c                 Z    | j                  d      }dj                  fd|D              S )zident block of text
c              3   0   K   | ]  }|r|z   nd   yw) N )r   linepaddings     r
   r   zindent_block.<locals>.<genexpr>   s$       $B&s   )splitr   )blockr   liness    ` r
   indent_blockr      s/    KKE99   r   z                ((((S0[l >> 24] + S1[(l >> 16) & 0xff]) ^ S2[(l >> 8) & 0xff]) +
                  S3[l & 0xff]) & 0xffffffff)
c                     t        ddd      D ]/  } | |d||dz   |dz   t        t        j                  dd             1 y )	Nr         z            # Feistel substitution on left word (round %(i)d)
            r ^= %(left)s ^ p%(i1)d

            # Feistel substitution on right word (round %(i1)d)
            l ^= %(right)s ^ p%(i2)d
           lr)ii1i2leftright)r   BFSTRreplacewriteindentr!   s      r
   render_encipherr+       sJ    Ar1 	f  QqSQqSu}}S5		r   c                 L     | |d       t        | |dz           | |dz   d       y )Na2          def encipher(self, l, r):
            """blowfish encipher a single 64-bit block encoded as two 32-bit ints"""

            (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9,
              p10, p11, p12, p13, p14, p15, p16, p17) = self.P
            S0, S1, S2, S3 = self.S

            l ^= p0

            r   z$
        return r ^ p17, l

        )r+   )r)   r*   s     r
   write_encipher_functionr-   ,   s4    	& 
 
 E6!8$	&(  r   c                 x    | |d       t        d      D ]  } | |dz   d|         | |dz   d       t        | |dz           | |dz   d       t        ddd      D ]5  } | |dz   d	||dz   
       t        | |dz           | |dz   d||dz   
       7  | |dz   d       t        | |dz           | |dz   d       y )Na          def expand(self, key_words):
            """unrolled version of blowfish key expansion"""
            ##assert len(key_words) >= 18, "size of key_words must be >= 18"

            P, S = self.P, self.S
            S0, S1, S2, S3 = S

            #=============================================================
            # integrate key
            #=============================================================
           r   z9            p%(i)d = P[%(i)d] ^ key_words[%(i)d]
        )r!   aT  
        #=============================================================
        # update P
        #=============================================================

        #------------------------------------------------
        # update P[0] and P[1]
        #------------------------------------------------
        l, r = p0, 0

        z-
        p0, p1 = l, r = r ^ p17, l

        r   z            #------------------------------------------------
            # update P[%(i)d] and P[%(i1)d]
            #------------------------------------------------
            l ^= p0

            )r!   r"   z=            p%(i)d, p%(i1)d = l, r = r ^ p17, l

            a  
        #------------------------------------------------
        # save changes to original P array
        #------------------------------------------------
        P[:] = (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9,
          p10, p11, p12, p13, p14, p15, p16, p17)

        #=============================================================
        # update S
        #=============================================================

        for box in S:
            j = 0
            while j < 256:
                l ^= p0

           zU
                box[j], box[j+1] = l, r = r ^ p17, l
                j += 2
        )r   r+   r(   s      r
   write_expand_functionr1   @   s   	&   BZ fQh 	 
&(   E6!8$	&(   Ar1 fQh  1	 	vax(fQh  1	  
&(  & E6!8$	&(  r   c                     t         j                  j                  t         j                  j                  t              d      } t        | d      fd} |dd       t        |d       t        |d        |dd       y )	Nzunrolled.pywc                     |j                  dd      }|r||z  }|s$t        j                  |j                  d            }| rt	        |d| dz  z        }j                  |       y )NliteralF    )poptextwrapdedentrstripr   r)   )r*   msgkwdsr5   fhs       r
   r)   zmain.<locals>.write   s[    ((9e,4KC//#**S/2CsC6!8$45C
r   r   aJ          """passlib.crypto._blowfish.unrolled - unrolled loop implementation of bcrypt,
        autogenerated by _gen_files.py

        currently this override the encipher() and expand() methods
        with optimized versions, and leaves the other base.py methods alone.
        """
        #=================================================================
        # imports
        #=================================================================
        # pkg
        from passlib.crypto._blowfish.base import BlowfishEngine as _BlowfishEngine
        # local
        __all__ = [
            "BlowfishEngine",
        ]
        #=================================================================
        #
        #=================================================================
        class BlowfishEngine(_BlowfishEngine):

        r   )r*   a]              #=================================================================
            # eoc
            #=================================================================

        #=================================================================
        # eof
        #=================================================================
        )ospathr   dirname__file__filer-   r1   )targetr)   r>   s     @r
   mainrE      sk    WW\\"''//(3]CF	fc	B 
!  . E!,%*	!  r   __main__)r   )__doc__r?   r9   passlib.utils.compatr   r   r   stripr&   r+   r-   r1   rE   __name__r   r   r
   <module>rK      s[    R
 
  ';	 
EG 

(Oj0d zF r   