o
    _6d                      @   st   d Z ddlZddlZddlmZ dd Zdd Zd Zdd	d
Z	dddZ
dddZdd Zedkr8e  dS dS )zLpasslib.crypto._blowfish._gen_files - meta script that generates unrolled.py    N)irangec                    s   d  fddt|D S )Nz, c                 3   s    | ]	} t | V  qd S )N)str).0xname zC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\passlib/crypto/_blowfish/_gen_files.py	<genexpr>   s    zvarlist.<locals>.<genexpr>)joinr   )r   countr   r   r	   varlist   s   r   c                    s"   |  d}d fdd|D S )zident block of text
c                 3   s     | ]}|r
 | nd V  qdS ) Nr   )r   linepaddingr   r	   r
      s
    
zindent_block.<locals>.<genexpr>)splitr   )blockr   linesr   r   r	   indent_block   s   
r   z                ((((S0[l >> 24] + S1[(l >> 16) & 0xff]) ^ S2[(l >> 8) & 0xff]) +
                  S3[l & 0xff]) & 0xffffffff)
c                 C   s<   t dddD ]}| |d||d |d ttddd qd S )	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   r   r   r	   render_encipher    s   r&   c                 C   s*   | |d t | |d  | |d d d S )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%   r   r   r	   write_encipher_function,   s   
r'   c                 C   s   | |d t dD ]}| |d d|d q	| |d d t| |d  | |d d t dddD ]!}| |d d	||d d
 t| |d  | |d d||d d
 q0| |d d t| |d  | |d d d S )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#   r   r   r	   write_expand_function@   s&   



r*   c                     s\   t jt jtd} t| d  fdd}|dd t|dd t|dd |dd	 d S )
Nzunrolled.pywc                    sP   | dd}|r||; }|st|d}| r!t|d| d  } | d S )NliteralF    )poptextwrapdedentrstripr   r$   )r%   msgkwdsr,   fhr   r	   r$      s   zmain.<locals>.writer   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'   r*   )targetr$   r   r5   r	   main   s   


r=   __main__)r   )__doc__r7   r0   Zpasslib.utils.compatr   r   r   stripr!   r&   r'   r*   r=   __name__r   r   r   r	   <module>   s     


U2
