pg,ddlZddlZddlmZmZddlmZddlmZGddZ GddZ Gd d Z Gd d Z Gd de ZdS)N) exceptionsutils)aead)backendceZdZdZdefdZedefdZdededej edefd Z dededej edefd Z dedededd fd Z d S) ChaCha20Poly1305keyctj|s$tjdtjjt jd|t|dkrtd||_ dS)Nz>EFF F returnc*tjdS)Nr )osurandom)clss r generate_keyzChaCha20Poly1305.generate_keysz"~~rnoncedataassociated_datac|d}t||jkst||jkrtd||||t jt ||||gdSNr5Data or associated data too long. Max 2**31 - 1 bytesr _MAX_SIZE OverflowError _check_paramsr_encryptrrr r!r"s rencryptzChaCha20Poly1305.encrypt"  "!O t99t~ % %_)=)=)N)NG  5$888}WdE4/9JBOOOrcv|d}||||tjt||||gdSNrr&r*r_decryptrr,s rdecryptzChaCha20Poly1305.decrypt4D  "!O 5$888}WdE4/9JBOOOrNctjd|tjd|tjd|t|dkrt ddS)Nr r!r" zNonce must be 12 bytesrr _check_bytesrrr,s rr*zChaCha20Poly1305._check_params@sf w... 64((( ,o>>> u::  566 6  r) __name__ __module__ __qualname__r(bytesr classmethodrtypingOptionalr-r3r*rrrrs'I E    U[PPP / P  PPPP$ P P P / P  P P P P 7 7 7 7  7 7 7 7 7 7rrceZdZdZddedefdZededefdZd ed ed e j edefd Z d ed ed e j edefd Z d ededdfdZ d ed ed eddfdZdS)AESCCMr r&r tag_lengthcjtjd|t|dvrtd||_t |t std|dvrtd||_tj |s$tj dtj jdS)Nr r&r z)AESCCM key must be 128, 192, or 256 bits.ztag_length must be an integer) r6r&zInvalid tag_lengthz2AESCCM is not supported by this version of OpenSSL)rrrrr isinstanceint TypeError _tag_lengthrr rrrr)rr rCs rrzAESCCM.__init__Ps uc*** s88< ' 'HII I *c** =;<< < 6 6 6122 2%,T22 1D#6   r bit_lengthrct|tstd|dvrtdt j|dzSNbit_length must be an integer)z#bit_length must be 128, 192, or 256rIrLrMrNrrrrrPs rrzAESCCM.generate_keydQ*c** =;<< < _ , ,BCC Cz*/***rr r!r"cD|d}t||jkst||jkrtd||||||t|t jt||||g|jS)Nrr%) rr(r)r*_validate_lengthsrr+rrOr,s rr-zAESCCM.encryptns  "!O t99t~ % %_)=)=)N)NG  5$888 uc$ii000} T5$(94;K   rc|d}||||tjt||||g|jS)Nr)r*rr2rrOr,s rr3zAESCCM.decryptsN  "!O 5$888} T5$(94;K   rdata_lenNc`dt|z }dd|zz|krtddS)NrIzData too long for nonce)rr)rr r]l_vals rr[zAESCCM._validate_lengthss>SZZ U h & &677 7 ' &rctjd|tjd|tjd|dt|cxkrdksnt ddS)Nr r!r" z$Nonce must be between 7 and 13 bytesr7r,s rr*zAESCCM._check_paramssz w... 64((( ,o>>>CJJ$$$$"$$$$CDD D%$r)r&)r9r:r;r(r<rMrr=rr>r?r-r3r[r*r@rrrBrBMsWIEs(+c+e+++[+    /       *       /       8u888888EE"'E:?E EEEEEErrBceZdZdZdefdZededefdZdeded e j edefd Z deded e j edefd Z deded edd fd Z d S)AESGCMr r c~tjd|t|dvrtd||_dS)Nr rEz)AESGCM key must be 128, 192, or 256 bits.)rrrrrrs rrzAESGCM.__init__s@ uc*** s88< ' 'HII I rrPrct|tstd|dvrtdt j|dzSrRrWrXs rrzAESGCM.generate_keyrYrr r!r"c|d}t||jkst||jkrtd||||t jt ||||gdSr$r'r,s rr-zAESGCM.encryptr.rcv|d}||||tjt||||gdSr0r1r,s rr3zAESGCM.decryptr4rNctjd|tjd|tjd|t|dkst|dkrt ddS)Nr r!r"rIrTz%Nonce must be between 8 and 128 bytesr7r,s rr*zAESGCM._check_paramsst w... 64((( ,o>>> u::>>SZZ#--DEE E.-rr9r:r;r(r<rr=rMrr>r?r-r3r*r@rrrfrfs8IE+c+e+++[+PPP / P  PPPP$ P P P / P  P P P P F F F F  F F F F F FrrfceZdZdZdefdZededefdZdeded e j edefd Z deded e j edefd Z deded edd fd Z d S)AESOCB3r r ctjd|t|dvrtd||_t j|s$tjdtj j dS)Nr rEz*AESOCB3 key must be 128, 192, or 256 bits.z0OCB3 is not supported by this version of OpenSSL rrrrrrr rrrrrs rrzAESOCB3.__init__sz uc*** s88< ' 'IJJ J ,T22 1B#6   rrPrct|tstd|dvrtdt j|dzSrRrWrXs rrzAESOCB3.generate_keyrYrr r!r"c|d}t||jkst||jkrtd||||t jt ||||gdSr$r'r,s rr-zAESOCB3.encryptr.rcv|d}||||tjt||||gdSr0r1r,s rr3zAESOCB3.decrypt r4rNctjd|tjd|tjd|t|dkst|dkrt ddS)Nr r!r"r6r_z%Nonce must be between 12 and 15 bytesr7r,s rr*zAESOCB3._check_paramssq w... 64((( ,o>>> u::??c%jj2ooDEE E.orrlr@rrrnrns8I E    +c+e+++[+PPP / P  PPPP$ P P P / P  P P P P F F F F  F F F F F FrrnceZdZdZdefdZededefdZdede j e j edefd Z dede j e j edefd Z dede j dd fd Zd S) AESSIVr r ctjd|t|dvrtd||_t j|s$tjdtj j dS)Nr )r 0@z)AESSIV key must be 256, 384, or 512 bits.z3AES-SIV is not supported by this version of OpenSSLrprs rrzAESSIV.__init__)sz uc*** s88< ' 'HII I ,T22 1E#6   rrPrct|tstd|dvrtdt j|dzS)NrS)rViiz#bit_length must be 256, 384, or 512rIrWrXs rrzAESSIV.generate_key6rYrr!r"c|g}||t|jkstfd|Drt dt jtd||dS)Nc3HK|]}t|jkVdSN)rr().0adrs r z!AESSIV.encrypt..JsA- - )+CGGdn $- - - - - - rr%rr&)r*rr(anyr)rr+rrr!r"s` rr-zAESSIV.encrypt@s  " O 4111 t99t~ % %- - - - />- - - * * % G }WdCKKKrcr|g}|||tjt|d||dSr0r1rs rr3zAESSIV.decryptTs?  " O 4111}WdCKKKrNctjd|t|trt d|Dst ddS)Nr!c3@K|]}t|tVdSr})rLr<)r~xs rrz'AESSIV._check_params..fs=< < %&Jq% < < < < < < rz/associated_data must be a list of bytes or None)rr8rLlistallrNrs rr*zAESSIV._check_params`su 64(((/400 O< < *9< < < 9 9  OMNN N O Or)r9r:r;r(r<rr=rMrr>r?Listr-r3r*r@rrrvrv&s'I E    +c+e+++[+LL U);<L  LLLL( L L U);< L  L L L L O O  O  O O O O O Orrv)rr> cryptographyrr$cryptography.hazmat.backends.opensslr,cryptography.hazmat.backends.openssl.backendrrrBrfrnobjectrvr@rrrsi  ********555555@@@@@@<7<7<7<7<7<7<7<7~REREREREREREREREj<F<F<F<F<F<F<F<F~BFBFBFBFBFBFBFBFJCOCOCOCOCOVCOCOCOCOCOr