o )%a@sddlZddlZddlmZddlmZmZmZddlm Z ddl m Z Gdddej dZ Gd d d ej dZGd d d ej dZGd ddeZGddde ZGddde ZGddde ZGddde ZGddde ZGddde ZGddde ZGddde ZGdd d e ZGd!d"d"e ZGd#d$d$e ZGd%d&d&e eZGd'd(d(e eZGd)d*d*e ZGd+d,d,e ZGd-d.d.e Z dS)/N)utils)AlreadyFinalizedUnsupportedAlgorithm_Reasons) _get_backend) HashBackendc@sNeZdZejdefddZejdefddZejde j efddZ dS) HashAlgorithmreturncCdS)zH A string naming this algorithm (e.g. "sha256", "md5"). Nselfr r G/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/hashes.pynamezHashAlgorithm.namecCr )z< The size of the resulting digest in bytes. Nr r r r r digest_sizerzHashAlgorithm.digest_sizecCr )z The internal block size of the hash function, or None if the hash function does not use blocks internally (e.g. SHA3). Nr r r r r block_sizerzHashAlgorithm.block_sizeN) __name__ __module__ __qualname__abcabstractpropertystrrintrtypingOptionalrr r r rrsr) metaclassc@s\eZdZejdefddZejdeddfddZ ejdefdd Z ejd d d Z dS) HashContextr cCr )zD A HashAlgorithm that will be used by this context. Nr r r r r algorithm(rzHashContext.algorithmdataNcCr )z@ Processes the provided bytes through the hash. Nr r rr r rupdate.rzHashContext.updatecCr )zR Finalizes the hash context and returns the hash digest as bytes. Nr r r r rfinalize4rzHashContext.finalizecCr )zM Return a HashContext that is a copy of the current context. Nr r r r rcopy:rzHashContext.copy)r r) rrrrrrrabstractmethodbytesr!r"r#r r r rr'src@seZdZdZdS)ExtendableOutputFunctionz7 An interface for extendable output functions. N)rrr__doc__r r r rr&Asr&c@sPeZdZddefddZedZdeddfdd Z dd d Z defd d Z dS)HashNrcCsbt|}t|tstdtjt|tstd||_||_ |dur,|j |j |_ dS||_ dS)Nz.Backend object does not implement HashBackend.z*Expected instance of hashes.HashAlgorithm.) r isinstancerrrBACKEND_MISSING_INTERFACEr TypeError _algorithm_backendcreate_hash_ctxr_ctx)r rbackendctxr r r__init__Hs   z Hash.__init__r,rr cCs.|jdur tdtd||j|dS)NContext was already finalized.r)r/rr_check_bytesliker!r r r rr!]s  z Hash.updatecCs*|jdur tdt|j|j|jdS)Nr3)r0r1)r/rr(rr-r#r r r rr#cs z Hash.copycCs&|jdur td|j}d|_|S)Nr3)r/rr")r digestr r rr"js  z Hash.finalize)NN)r r() rrrrr2rread_only_propertyrr%r!r#r"r r r rr(Gs   r(c@eZdZdZdZdZdS)SHA1sha1@Nrrrrrrr r r rr8rr8c@r7) SHA512_224z sha512-224Nr<r r r rr>xr=r>c@r7) SHA512_256z sha512-256 r@Nr<r r r rrA~r=rAc@r7)SHA224sha224r?r;Nr<r r r rrCr=rCc@r7)SHA256sha256rBr;Nr<r r r rrEr=rEc@r7)SHA384sha3840r@Nr<r r r rrGr=rGc@r7)SHA512sha512r;r@Nr<r r r rrJr=rJc@eZdZdZdZdZdS)SHA3_224zsha3-224r?Nr<r r r rrMr=rMc@rL)SHA3_256zsha3-256rBNr<r r r rrNr=rNc@rL)SHA3_384zsha3-384rINr<r r r rrOr=rOc@rL)SHA3_512zsha3-512r;Nr<r r r rrPr=rPc@,eZdZdZdZdefddZedZ dS)SHAKE128shake128NrcC,t|ts td|dkrtd||_dSNzdigest_size must be an integerz&digest_size must be a positive integerr)rr+ ValueError _digest_sizer rr r rr2  zSHAKE128.__init__rY rrrrrrr2rr6rr r r rrR  rRc@rQ)SHAKE256shake256NrcCrTrUrWrZr r rr2r[zSHAKE256.__init__rYr\r r r rr^r]r^c@r7)MD5md5r;Nr<r r r rr`r=r`c@4eZdZdZdZdZdZdefddZe dZ d S) BLAKE2bblake2br;rVr@rcC|dkrtd||_dS)Nr;zDigest size must be 64rXrYrZr r rr2 zBLAKE2b.__init__rYN) rrrr_max_digest_size_min_digest_sizerrr2rr6rr r r rrdrdc@rc) BLAKE2sblake2sr;rBrVrcCrf)NrBzDigest size must be 32rgrZr r rr2rhzBLAKE2s.__init__rYN) rrrrrrirjrr2rr6rr r r rrlrkrl)!rr cryptographyrcryptography.exceptionsrrrcryptography.hazmat.backendsr'cryptography.hazmat.backends.interfacesrABCMetarrr&r(r8r>rArCrErGrJrMrNrOrPrRr^r`rdrlr r r rs4   +