Viewing File: /usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pyc

ó
ö
5Xc@sqdZddlZddlZddlmZddlmZddlmZdgZ	de
fd„ƒYZdS(s<passlib.utils.scrypt._builtin -- scrypt() kdf in pure-pythoniÿÿÿÿN(tizip(tpbkdf2_hmac(tsalsa20tScryptEnginecBs€eZdZdZdZdZdZdZdZdZ	dZdZe
d„ƒZd„Zd„Zd„Zd„Zd„ZRS(	s
    helper class used to run scrypt kdf, see scrypt() for frontend

    .. warning::
        this class does NO validation of the input ranges or types.

        it's not intended to be used directly,
        but only as a backend for :func:`passlib.utils.scrypt.scrypt()`.
    icCs||||ƒj|||ƒS(s-create engine & run scrypt() hash calculation(trun(tclstsecrettsalttntrtptkeylen((sB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pytexecute2scs||_||_||_|d>|_|j||_|d>|_}|d>|_tjdƒdksqt	‚tj
dt|ƒdƒ|_|dkr¬|j
|_n|dkrÊtjdƒ}nB|d	ksÜt	‚tjdƒ‰tjd
ƒ‰‡‡fd†}||_dS(NiiitIt<iIÿÿÿÿiðÿÿÿlÿÿÿÿiïÿÿÿcsˆ|ƒˆ|ƒd>BS(Ni ((tX(tig1tig2(sB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pyt
integerifyUs(RR	R
t
smix_bytestiv_bytestbmix_lent
bmix_half_lentstructtcalcsizetAssertionErrortStructtstrtbmix_structt_bmix_1tbmixtoperatort
itemgetterR(tselfRR	R
RR((RRsB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pyt__init__:s$			

 cs¤|j}td||ddd|ƒ‰|j‰|jdkrNˆˆƒ}n:|j‰dj‡‡‡fd†td|ˆƒDƒƒ}td||ddd|ƒS(s®
        run scrypt kdf for specified secret, salt, and keylen

        .. note::

            * time cost is ``O(n * r * p)``
            * mem cost is ``O(n * r)``
        tsha256troundsiRtc3s&|]}ˆˆ||ˆ!ƒVqdS(N((t.0toffset(tinputtsmixR(sB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pys	<genexpr>ssi(RRR)R
Rtjointrange(R!RRRRtoutput((R(R)RsB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pyR\s
			csâ|j‰|j}|j}|j‰t|j|ƒƒ‰‡‡‡fd†}t|ƒƒ}|j}ˆd}d}x\|ˆkrÔ|ˆƒ|@}	td„tˆ||	ƒƒDƒƒ}
ˆ|
ˆƒ|d7}qyW|j	ˆŒS(ssrun SCrypt smix function on a single input block

        :arg input:
            byte string containing input data.
            interpreted as 32*r little endian 4 byte integers.

        :returns:
            byte string containing output data
            derived by mixing input using n & r parameters.

        .. note:: time & mem cost are both ``O(n * r)``
        c3sEd}x8|ˆkr@tˆƒ}|Vˆ|ˆƒ|d7}q	WdS(Nii(ttuple(titlast(RtbufferR(sB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pytvgen›s
iicss|]\}}||AVqdS(N((R&tatb((sB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pys	<genexpr>­s(
RRRRtlisttunpackt__getitem__R-Rtpack(R!R(RRR1tVt
get_v_elemtn_maskR.tjtresult((RR0RsB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pyR)}s 						
%
cCs¨|j}|d}t|ƒ}d}x|||kr£|d}td„t||ƒDƒƒ|||+}td„t||ƒDƒƒ|||||+}|}q(WdS(sú
        block mixing function used by smix()
        uses salsa20/8 core to mix block contents.

        :arg source:
            source to read from.
            should be list of 32*r 4-byte integers
            (2*r salsa20 blocks).

        :arg target:
            target to write to.
            should be list with same size as source.
            the existing value of this buffer is ignored.

        .. warning::

            this operates *in place* on target,
            so source & target should NOT be same list.

        .. note::

            * time cost is ``O(r)`` -- loops 16*r times, salsa20() has ``O(1)`` cost.

            * memory cost is ``O(1)`` -- salsa20() uses 16 x uint4,
              all other operations done in-place.
        iðÿÿÿiicss|]\}}||AVqdS(N((R&R2R3((sB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pys	<genexpr>äscss|]\}}||AVqdS(N((R&R2R3((sB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pys	<genexpr>åsN(RtiterRR(R!tsourcettargetthalfttmptsiterR;tjn((sB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pyRÀs	

*2cCs^|d}td„t|t|ƒƒDƒƒ|d*}td„t||ƒDƒƒ|d)dS(s0special bmix() method optimized for ``r=1`` caseicss|]\}}||AVqdS(N((R&R2R3((sB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pys	<genexpr>ëscss|]\}}||AVqdS(N((R&R2R3((sB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pys	<genexpr>ìsN(RRR=(R!R>R?tBRA((sB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pyRès
-N(t__name__t
__module__t__doc__RR	R
RRRRtNoneRRtclassmethodRR"RR)RR(((sB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pyRs 		"	!	C	((RGRRtpasslib.utils.compatRtpasslib.crypto.digestRtpasslib.crypto.scrypt._salsaRt__all__tobjectR(((sB/usr/lib/python2.7/site-packages/passlib/crypto/scrypt/_builtin.pyt<module>s	
Back to Directory File Manager