+
    ¢THiË  ã                   óŠ   € R t ^ RIt^ RItR tR tRP                  4       tR
R ltR
R ltR
R lt	R t
]R	8X  d
   ]
! 4        R# R# )zLpasslib.crypto._blowfish._gen_files - meta script that generates unrolled.pyNc                 óL   a € R P                  V 3R l\        V4       4       4      # )z, c              3   óH   <"  € T F  pS\        V4      ,           x € K  	  R # 5i)N)Ústr)Ú.0ÚxÚnames   & €ÚE/usr/lib/python3/dist-packages/passlib/crypto/_blowfish/_gen_files.pyÚ	<genexpr>Úvarlist.<locals>.<genexpr>   s   øé € Ð9©L q�TœC ›F—]’]«Lùó   ƒ")ÚjoinÚrange)r   Úcounts   f&r   Úvarlistr      s   ø€ Ø�9‰9Ô9¬E°%¬LÓ9Ó9Ð9ó    c                ó\   a€ V P                  R4      pRP                  V3R lV 4       4      # )zident block of textÚ
c              3   óH   <"  € T F  q'       d
   SV,           MR x € K  	  R# 5i)Ú N© )r   ÚlineÚpaddings   & €r   r	   Úindent_block.<locals>.<genexpr>   s   øé € ÐFÁ¸¦t�W˜t–^°Ô3Ãùr   )Úsplitr   )Úblockr   Úliness   &f r   Úindent_blockr      s&   ø€ à�K‰K˜Ó€EØ�9‰9ÔFÁÓFÓFÐFr   z                ((((S0[l >> 24] + S1[(l >> 16) & 0xff]) ^ S2[(l >> 8) & 0xff]) +
                  S3[l & 0xff]) & 0xffffffff)
c                 ó˜   € \        ^ ^^4       F8  pV ! VRVV^,           V^,           \        \        P                  RR4      R7       K:  	  R# )é    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ÚrightN)r   ÚBFSTRÚreplace©ÚwriteÚindentr!   s   && r   Úrender_encipherr+      sH   € Ü�1�b˜!Ž_ˆÙØðð Ø�1�uØ�1�uÜÜ—-‘-  SÓ)÷	
ó r   c                 ó\   € V ! VR 4       \        W^,           4       V ! V^,           R4       R# )a2          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

            z$
        return r ^ p17, l

        N)r+   )r)   r*   s   &&r   Úwrite_encipher_functionr-   *   s4   € Ù	Øð
	ôô �E A�:Ô&á	Ø��
ð	ör   c                 óÜ  € V ! VR 4       \        ^4       F  pV ! V^,           RVR7       K  	  V ! V^,           R4       \        W^,           4       V ! V^,           R4       \        ^^^4       FI  pV ! V^,           RVV^,           R7       \        W^,           4       V ! V^,           RVV^,           R7       KK  	  V ! V^,           R4       \        W^,           4       V ! V^,           R	4       R
# )a¬          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
            #=============================================================
        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

        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
        N)r   r+   r(   s   && r   Úwrite_expand_functionr/   E   s  € Ù	Øð	ôô �2ŽYˆÙØ�Q�Jðð ÷	
ñ ñ 
Ø��
ð	ôô  �E A�:Ô&á	Ø��
ð	ôô �1�b˜!Ž_ˆÙØ�Q�Jðð Ø�1�uõ	
ô 	˜¨�zÔ*áØ�Q�Jðð Ø�1�u÷	
ñ! ñ4 
Ø��
ð	ôô, �E A�:Ô&á	Ø��
ð	ör   c                  óP  a€ \         P                  P                  \         P                  P                  \        4      R 4      p \        V R4      ;_uu_ 4       oV3R lpV! ^ R4       \        V^R7       \        V^R7       V! ^ R4       RRR4       R#   + '       g   i     R# ; i)zunrolled.pyÚwc                 ó  <€ VP                  R R4      pV'       d	   W,          pV'       g&   \        P                  ! VP                  R4      4      pV '       d   \	        VRV ^,          ,          4      pSP                  V4       R# )ÚliteralFÚ N)ÚpopÚtextwrapÚdedentÚrstripr   r)   )r*   ÚmsgÚkwdsr3   Úfhs   &&, €r   r)   Úmain.<locals>.write¸   sY   ø€ Ø—h‘h˜y¨%Ó0ˆGßØ•�ßÜ—o’o c§j¡j°£oÓ6�ßÜ" 3¨¨v¸­zÕ(:Ó;�Ø�H‰H�SŽMr   a–              """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*   ay                  #=================================================================
                # eoc
                #=================================================================

            #=================================================================
            # eof
            #=================================================================
            N)ÚosÚpathr   ÚdirnameÚ__file__Úopenr-   r/   )Útargetr)   r;   s     @r   ÚmainrC   ´   s€   ø€ Ü�W‰W�\‰\œ"Ÿ'™'Ÿ/™/¬(Ó3°]ÓC€FÜ	ˆf�c×	Ô	˜bõ	ñ 	Øðô	
ô4 	  ¨aÕ0Ü˜e¨AÕ.áØðô	
÷S 
×	×	Ò	ús   Á3BÂB%	Ú__main__)r   )Ú__doc__r=   r6   r   r   Ústripr&   r+   r-   r/   rC   Ú__name__r   r   r   Ú<module>rH      sW   ðÙ Rã 	Û ò:òGð	÷ 
�EƒGð ô
ô&ô6lò^6
ðr ˆzÔÙ†Fñ r   